前言
在学习 leaflet 时,想要调用 geoserver 发布的数据,结果代码写好后运行却没有成功显示调用的数据。搞了两天之后终于解决了,所以看了不等于学会了,得动手才行。
资源
下载的是 geoserver 2.15.1 windows安装版 [链接]
同时还要下载一个同版本的 geoserver-2.15.1-vectortiles-plugin.zip (上面的链接拉到底部
注:如果用的是windows installer,则插件解压出来放入 geoserver安装目录/webapps/geoserver/WEB-INF/lib;如果用的是war,则放入 tomcat安装目录/geoserver/WEB-INF/lib
内容
安装完成后,启动geoserver。默认账号:admin 默认密码:geoserver
发布数据的内容有很多博主写过了,我就不再赘述了,丢一个我采用的链接 [点击此处跳转]
有几点要说的:
1. 我用了自带的坐标系,所以博文的第一步没操作,发布的时候可以只剩下自己需要的,其他删掉
2. 这里我选择了根据数据范围计算边框。选compute from srs bounds的话,本地切图会增加很多
3. 发布图层时,在Tile Caching选项页面,在Tile Image Formats 位置,勾上application/x-protobuf;type=mapbox-vector
GeoServer 2.14版本开始,这个选项已经换成:application/vnd.mapbox-vector-tile [来源]
发布好后,就可以用 leaflet 调用了,代码可以看另一篇博文 [链接]
结果页面打开,除了底图,发布的数据根本没有显示,而在 Tile Layers 却是能看见的
然后我开始怀疑难道是我的数据的问题...就将一个 geoserver 自带的数据添加了矢量瓦片格式,但调用的时候依旧没有显示。最后发现就是我经常在别人博客里看见的跨域问题....
解决方法(适用安装版):部署在Tomcat下面的geoserver请参照Tomcat下面部署Geoserver的跨域访问问题 设置
第一步:打开 geoserver安装目录下\webapps\geoserver\WEB-INF\web.xml,添加下面的内容
<!-- Uncomment following filter to enable CORS --><filter><filter-name>cross-origin</filter-name><filter-class>org.eclipse.jetty.servlets.CrossOriginFilter</filter-class><init-param><param-name>chainPreflight</param-name><param-value>false</param-value></init-param><init-param><param-name>allowedOrigins</param-name><param-value>*</param-value></init-param><init-param><param-name>allowedMethods</param-name><param-value>GET,POST,PUT,DELETE,HEAD,OPTIONS</param-value></init-param><init-param><param-name>allowedHeaders</param-name><param-value>*</param-value></init-param></filter><!-- Uncomment following filter to enable CORS --><filter-mapping><filter-name>cross-origin</filter-name><url-pattern>/*</url-pattern></filter-mapping>
第二步:打开 geoserver安装目录下\lib 中的 jetty-servlets-9.4.12.v20180830.jar,jetty-http-9.4.12.v20180830.jar 和 jetty-util-9.4.12.v20180830.jar,将其复制到 geoserver安装目录下\webapps\geoserver\WEB-INF\lib中即可 ( 注:大家一般给的方法都是去找网站下载以及说要注意geoserver与jetty版本匹配问题,但其实根本不用,因为安装好后就有了。
第三步:重启 geoserver
终于成功调用了自己发布的数据和自带的数据
知识点
1. 天地图支持4326坐标系,如果选择OSM如果设置4326坐标系加载的地图不连续(这个我还没验证..) [来源]
2. L.vectorGrid.protobuf 是插件的一个类用来加载pbf, L.VectorGrid.Slicer 用来加载geojson和topojson [来源] [GitHub]
3. GeoServer可以生成4种格式的矢量切片:GeoJSON,TopoJSON,MapBox Vector(MVT)+ pbf [来源]
4. 安装版的数据存放目录名称为安装路径下的data_dir文件夹 而war包版数据存放目录为tomcat安装路径下webapp文件夹下geoserver/data 文件夹 [来源]
5. 切片发布完成之后,可以在Layer Preview或者Tile Layers中预览发布的切片 [来源]
其他
geoserver 发布矢量切片 | 把切片保存到本地
geoserver 查看发布的数据 | 本地存放地址
leaflet | mapbox 调用geoserver 矢量瓦片
mapbox调用服务的时候出现跨域问题
Tomcat Geoserver等服务器 端口号修改
Maven仓库:https://search.maven.org/search https://mvnrepository.com/