https发起天地图请求

项目从http升级到https,出了不少奇怪的小问题,天地图请求就是其中之一。
https项目是不能完成http请求的。
请求天地图服务有两方面:

arcgis

arcgis在构造WebTileLayer时会指定url,这里之前加载矢量底图是用的https://{subDomain}.tianditu.gov.cn/vec_c/wmts,但是后来有切换矢量和影像的需求,所以加了影像的请求——http://{subDomain}.tianditu.com/DataServer?T=img_c,因为不是一个人写的,所以地址不太对,改成https://{subDomain}.tianditu.gov.cn/DataServer?T=img_c就好了。

leaflet

leaflet也有直接请求url的写法,不过项目里用的是leaflet插件——chinatmsproviders,调用的方法是L.tileLayer.chinaProvider,这个请求失败的状态码为

301 Moved Permanently

查了一下没得到有用的解决方法,chinaProvider的源码也没带协议类型,应该是有自动判断的处理;最后对比请求地址发现,域名后缀不同,换了之后就好使了


.com换.gov.cn

(地形的因为没用到,所以没改)

在浏览器中输入请求url发现:

  • .com的请求最终都会转成http协议;复制https的url跳转后,再复制新地址,得到的是http请求
  • .gov.cn的请求不会变;跳转前和跳转后的地址是一致的

天地图官网地址是https://www.tianditu.gov.cn/,请求http://www.tianditu.com/会跳转到官网地址。所以应该是.com是老版地址,chinatmsproviders插件的版本比较老,请求的也是老版的天地图服务地址。


2021-5-13更新

超图

一般情况下,超图加载天地图是构造Cesium.TiandituImageryProvider实例实现的,但是这个类的请求方法里没有对location的协议进行判断,也就造成只会发出http请求,且无法通过改源码实现。
替代方法是使用Cesium.UrlTemplateImageryProvider类,这个类是自定义url请求,有较高的自由度,也意味着较多的代码。另外,这个类的配置有些需要注意的:

  • keywords
    url template keywords,每种地图引擎设置的都不一样,超图的与L.tileLayer.chinaProvider比较类似,具体可以参考API文档
  • subdomains
    默认是'abc',天地图是从't0'到't7'的数组。

你可能感兴趣的:(https发起天地图请求)