当前位置: 代码迷 >> 综合 >> Geoserver 发布矢量瓦片 leaflet 调用不显示
  详细解决方案

Geoserver 发布矢量瓦片 leaflet 调用不显示

热度:5   发布时间:2024-01-29 13:20:01.0

前言    

   在学习 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.jarjetty-http-9.4.12.v20180830.jarjetty-util-9.4.12.v20180830.jar,将其复制到 geoserver安装目录下\webapps\geoserver\WEB-INF\lib中即可    ( 注:大家一般给的方法都是去找网站下载以及说要注意geoserver与jetty版本匹配问题,但其实根本不用,因为安装好后就有了。

        第三步:重启 geoserver

 

    终于成功调用了自己发布的数据和自带的数据

tianhe:自己发布的数据
tiger_roads: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/