最近需要在mapbox中添加geoserve发布的vector数据,能搜到的结果不是很多并且有些坑,大家说的不是很全,自己都踩了以后总结了这篇文章,也算是写给其他和我一样的小白吧.
1.下载切片扩展
下载好的geoserve不自带适量切片,需要先到官网下载geoserver对应的插件,一定要下载自己geoserve对应的版本
网址:GeoServer
点击archive可以查看以往的版本
将下载的jar包放置到webapps\geoserver\WEB-INF\lib下
这个是我的路径,实在找不到的话可以直接搜web-inf
D:\geoserver\GeoServer-geoserver-2.18.0-bin\webapps\geoserver\WEB-INF
重新启动geoserve,打开任意一图层,出现如图所示四行,说明已经安装成功.
2.解决geoserve跨域问题
找到webapps\geoserver\WEB-INF路径,打开web.xml文件
这个是我的路径
D:\geoserver\GeoServer-geoserver-2.18.0-bin\webapps\geoserver\WEB-INF
将以下两段代码的注释删掉,大概在170行和220行
修改完以后我的跨域问题成功解决了,如果解决不了可以参考这两篇文章
Geoserver跨域终极解决方案_origin does not correspond to request-CSDN博客
3.创建Gridsets
在mapbox中投影默认使用的是3857,因此我们需要将图层发布为3857,但geoserve只有4490和900913两种格式,因此我们需要自己创建gridset
进入geoserve后,点击gridsets,点击create a new gridset
name可以直接叫EPSG:3857,
点击查找,搜索3857选中即可,
点击下面的蓝字,可以获得最大值最小值
点击add zoom level可添加切片等级,根据自己的需要添加即可,检查完没有错误点击保存.
4.发布矢量切片
因mapbox默认是3857坐标系,因此如果数据源坐标系不是3857,需要进行坐标转换,否则发布出来的图层与地图存在偏移.
以下为坐标转换步骤,一致的可以直接跳过
将数据加载进arcgis,点击属性,查看坐标系,与3857不符,需进行坐标转换
打开投影工具,输出坐标系选择web墨卡托,点击确定,即可得到3857
打开geoserve,点击数据存储,新建数据源
选择shapefile数据源
连接参数设置为刚刚导出的3857坐标系下的数据,点击保存后,点击发布
定义SRS选择EPSG:3857,点击从数据中计算与Compute form native bounds
确定一下范围对不对
不要带保存,页面滑到最上面点击tile caching
将这四个都打上√
选择刚刚创建的3857坐标系,点击+,检查无误后点击保存
点击tile layers,可以看到刚刚发布的图层,选择select one,在下拉框中选择EPSG:3857/pbf,即可看到刚刚发布的图层
点击左上角geoserve图标,进入GeoServer首页,点击tms,
找到对应的pbf
5.在mapbox中添加图层
tiles为对应的pbf路径,复制后需要再后面加上/{z}/{x}/{y}.pbf
例如:http://localhost:8080/geoserver/gwc/service/tms/1.0.0/cite%3Aroad-web3857@EPSG%3A3857@pbf/{z}/{x}/{y}.pbf
source-layer:即为图层名字,可以在这边找到
其他参数可以去参考mapbox文档,这里就不在细说