最近工作中遇到一个问题:本地发布了wgs-1984坐标系的TMS局部地图服务(在上层叠加),和一份google标准的TMS全球底图服务(在下层)。使用UrlTemplateImageryProvider加载两幅地图时,发现不能叠在一起。现象就是:google的地图可以加载,局部高清地图无法加载。
终于在大佬的指导下,找到了原因:google标准的瓦片组织方式与普通TMS服务瓦片的组织方式相反。普通TMS瓦片,原点在左下角,即沿Y轴自下向上切;而google标准瓦片,原点在左上角,即沿Y轴自上而下切。
TMS标准瓦片
google标准瓦片
因此二者叠加时,需要将一种一副地图的Y轴进行翻转。
翻阅了Cesium帮助文档,UrlTemplateImageryProvider的接口说明中,明确写了,可以更改链接中的y为reverseY进行翻转。
至此,你以为问题就解决了吗?
No,更诡异的问题来了:仍然没有效果。
于是,进一步查资料,了解TMS服务。终于又发现了一个原因:TMS服务有两种行列编码方式。
而不同的编码方式,取决于不同的坐标参考即:wgs-1984和 webMocator。
具体参考文档,跳转至大佬文章,感谢大佬将TMS瓦片讲述的如此详细。
google标准采用的是webMocator参考坐标,而我们局部区域服务,使用的是wgs-1984。
至此,我的所有困惑都消失了。最终解决方案:UrlTemplateImageryProvider提供了坐标系的设置,且由于cesium中默认Y轴为自上而下,故同时url中,使用reverseY:
tilingScheme : new Cesium.GeographicTilingScheme(),