转载请注明出处:https://oldnoop.tech/c/212.html
矢量切片简单介绍
优点是 切片大小比图片小,同时数据精确可以在客户端渲染,客户端拿到切片不必再请求服务端
缺点是 需要对地图数据预处理/只能用于渲染
可以有3个数据格式
1)GeoJSON json格式,可读,openlayers支持
2)TopoJSON 复杂json格式,有一点可读性,openlayers支持
3)MVT 大多数组件支持
服务端支持切片
服务端安装切片插件
下载geoserver对应版本号的插件, 在sourceforge上下载
解压缩,
将压缩包中的jar文件,复制到geoserver的WEB-INF/lib文件夹下
启动geoserver
浏览器访问geoserver的web页面,点击左边的菜单 Tile Caching,
在右边列表中选择一个切片图层,可以看到多了一个选项卡 Tile Caching
图层设置切片
图层设置 -> Tile Caching -> Tile Image Formats, 勾选切片格式:
设置之后,图层配置文件,数据目录data_dir下的gwc-layers文件夹下的图层配置文件
mimeFormats节点,增加了新的格式, 示例如下
服务端生成本地切片
在geoserver的web界面,点击左侧菜单 Tile Caching , 然后在右边列表中选择 图层 ,点击"Seed Truncate"
在接下来的页面中,进行相应的配置,点击 "Submit"就可以生成切片了,
切片生成后,会存储在 数据目录data_dir/gwc文件夹下, 为每个图层, 使用图层名 创建一个文件夹, 保存每个图层的切片文件
客户端请求切片
客户端调用wmts服务请求切片数据
最常见的是 使用openlayers 组件,
请求wmts一般需要传递如下这些参数
1)服务参数REQUEST/SERVICE/VERSION
2)图层参数VERSION/STYLE
3)坐标系参数TILEMATRIX/TILEMATRIXSET
4)数据参数FORMAT/TILECOL/TILEROW
geojson格式数据请求示例
客户端调用tms服务请求切片数据
切片使用需要考虑的问题
版本问题
geoserver 和切片插件vectortiles 的版本一致
openlayers 的版本, 新旧版本 封装的属性数据 key值变化, 某些参数由小写变为大写
编码问题
国内某些机构的共享地理数据,比如dsac网站, 多数是GBK编码,创建数据存储时DBF的字符集需要注意
投影坐标系问题
最常见的是 WGS-84的 EPSG:4326, 谷歌墨卡托 的 EPSG:900913 及 EPSG:3857,
国内也有 beijng54的3度分 EPSG:2437
客户端请求切片 会携带 坐标系参数, 服务端 切片图层设置的坐标系 ,前后端应该一致
切片在服务端本地生成的操作
强烈建议2点
1)将生成切片 和 对外提供应用 的 服务 进行隔离,
2)生成的时候进行预估,
原因是非常简单的,如果生成操作 非常 大, 可能 会造成geoserver 的 内存溢出 OOM 最终 导致应用服务的进程退出,
geoserver 在这块的处理,还是有优化的空间,应该提供一个 预先估算的 功能,或者 在 估算 任务较大后,直接抛出 提示,供使用者选择
另外, 在 单独的服务器上 进行 生成本地切片, 再把 生成文件 推送到 对外的服务器上,这样隔离的进行,可靠且不影响 应用服务