上面示例的代码中,数据源是通过source来配置的
"source": { "type": "vector", 'scheme':'tms', "tiles": ["http://192.168.50.198:7000/geoserver/gwc/service/tms/1.0.0/china%3Acity_region@EPSG%3A900913@pbf/{z}/{x}/{y}.pbf"], },这里面有三个参数,type和tiles的意思好理解,scheme是什么意思呢?
查看mapboxgl的api,关于的解释如下:
这个 xyz和tms分别是啥意思呢?
百度后觉得这篇博客写的还算明白,它们是两种请求瓦片的协议,不同协议对瓦片编号的规则也不同,在xyz协议中,Y从顶部开始计算,而在tms协议中,Y从底部开始计算。mapboxgl默认使用xyz协议,而geoserver发布的是tms协议。所以调用时需要定义scheme为tms。
问题找到这里,感觉自己已经看到黎明的曙光了。
那如果把示例中的scheme设置为xyz会不会出现和Maputnik一样的错误呢?尝试后答案是肯定的,地图同样跑到了南半球。
真相大白了,Maputnik界面上因为没有配置scheme的选项,而scheme默认是xyz协议,所以就导致它只支持xyz协议,不支持tms协议,所以就请求不到瓦片,地图无法正确显示。
如何解决问题找到了,接下来就是如何解决,思路有二:
geoserver发布一个xyz协议的矢量瓦片服务。
修改一下Maputnik的源码,增加scheme的选项,让它支持tms协议。
思路一自己找了一圈,没有发现相关教程,个人感觉思路二更简单一些,只要在下图的红框的位置加个选择scheme的下拉框就能解决问题
下载maputnik的源码,一通研究,发现修改下面两个位置就可以:
1、在这里加一个下拉框控件
2、在这里给scheme设置一下默认值
ok,来,走两步
一步
两步
哈哈,效果杠杠的!问题完美解决。
总结
Maputnik是一个矢量瓦片配图工具,可以替代 mapbox studio,免费使用。
Maputnik默认只支持xyz协议的矢量瓦片,不支持geoserver发布的tms协议矢量瓦片。
Maputnik的地图api使用的是mapboxgl,mapboxgl通过设置source的scheme选项,可以支持tms协议。
通过修改Maputnik源码,增加scheme选项,就可以让Maputnik支持geoserver发布的tms协议矢量瓦片。
源码支持tms矢量瓦片的maputik源码
原文地址:?blog=maputnikGeoserverVectorTiles
关注《GIS兵器库》公众号, 第一时间获得更多高质量GIS文章。
本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名《GIS兵器库》(包含链接: ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。