Cesium加载天地图二
1.加载天地图影像
默认的Cesium加载的是bing地图的影像,我们通过在构造函数中指定imageryProvider,来将地图改为天地图。
1 | var viewer = new Cesium.Viewer('cesiumContainer',{ |
通过WMTS服务即可加载天地图
但是我们知道,天地图的服务器不知一台,从t0、t1一直到t7,都可以访问,如果通过不指定服务的方式访问天地图呢?好在Cesium的WebMapTileServiceImageryProvider构造函数支持url中使用{s}代替域名,使用subdomains来指定子域名,但是不能这样写
1 | imageryProvider : new Cesium.WebMapTileServiceImageryProvider({ |
这样写虽然能正确的找打服务器,但是你会发现url后面的参数都不见了。
正确的做法是拼接url
1 | var url="http://{s}.tianditu.com/img_c/wmts?tilematrix={TileMatrix}&layer=img&style=default&tilerow={TileRow}&tilecol={TileCol}&tilematrixset=c&format=image%2Fjpgpng&service=WMTS&version=1.0.0&request=GetTile&tk=你的密钥"; |
这里需要注意的有三点,第一点就是{s};第二点是:tilematrix={TileMatrix},TileMatrix不能写错,否则加载不出来;第三点是:tilerow={TileRow}&tilecol={TileCol},这两项中的TileRow和TileCol也不能写错,大小写也要注意。还有就是tk是你在天地图上申请到的密钥。
1.Cesium应用篇:2影像服务(下) (加载天地图服务、Google Map影像服务以及同时加载多个Provider)
2.Cesium开发:关于加载CGCS2000切片 (这里有加载墨卡托投影,加载cgcs2000的坐标系会出现问题)
注意
今天重新查看Demo,发现了一个奇怪的现象,cesium加载的天地,只有一半,地图之覆盖了球形的上半部分,而地球的下半部分是空白的(这TM就尴尬了)。
通过参考文章 ,最终加载地图的正确代码如下:
1 | // 国家天地图 |
注意其中的tilingScheme和tileMatrixLabels就可以了。
随之而来的问题是,这个坐标系是WGS84(EPSG:4326)的坐标下,如何加载CGCS2000(EPSG:4490)坐标系呢?虽然两者相差不大,但是总归不是一个东西啊。
2.加载天地图浙江
国家天地图只提供了1-17级的影像,天地图浙江提供了17-20级的影像,原先的代码加载天地图是这样的:
1 | //加载天地图浙江影像 |
出现的问题是,无法加载17到19级的影像,虽然请求了影像,但是无法正确的计算瓦片的行列号和地图的级别(通过在谷歌浏览器的开发者工具中右键打开请求的瓦片链接,发现请求的瓦片是空白)。经过多次反复的尝试,正确的加载天地图浙江的影像地图的方式是:
1 | var zjUrl="http://{s}.zjditu.cn/ZJDOM_2D/wmts?tilematrix={TileMatrix}&layer=imgmap&style=default&tilematrixset=default028mm&Service=WMTS&Request=GetTile&Version=1.0.0&Format=image%2Fjpgpng&tilecol={TileCol}&tilerow={TileRow}"; |
这里有一点需要说明的是,经过测试,tileMatrixLabels要从1开始写,否则,url中就计算不出来正确的级别,出现url中的tilematrix={TileMatrix}情况;tilingScheme这个参数也不能缺少,否则也是计算不出来缩放级别。
1.浙江天地图的能力文件
2.Cesium加载Geoserver的WMTS服务
3.Cesium调用geoserver2.14发布的WMTS瓦片
4.cesium调用天地图服务
5.Cesium加载天地图 -BY yangqiaosheng
3.图层无法定义最小分辨率(设置图层最大最小分辨率)
假如图层不是从0级开始的,就需要定义最小分辨率,但是我尝试从第六级开始显示,刷新浏览器,会出现,浏览器疯狂的请求最小分辨率的图层,甚至将页面卡死了。
1 | imageryProvider : new Cesium.WebMapTileServiceImageryProvider({ |
这里针对imageryProvider无法定义最小级别,暂时无法知道什么原因,但是我们可以针对一个图层进行定义最大最小值,比如加载浙江地图,从13到19级影像地图。就不会出现疯狂加载影像的问题了。
1 | //加载天地图浙江影像 |
这个provider和layer的关系有点像openlayers中的layer和source的关系,一个图层对应一个数据源,通过定义图层的最大最小级别来约束什么时候需要加载图层,什么时候不需要加载图层。
4.使用DataServer服务
2021年10月13日,最新的加载方式,可以使用DataServer服务,加载不同的图层了。
1 | var imageryProvider=new Cesium.WebMapTileServiceImageryProvider({ |
1.cesium调用天地图服务 全球矢量地图服务、全球影像地图服务、全球影像中文注记服务、全球矢量中文注记服务,这里的域名都是.com结尾的,最新的应该使用.gov.cn结尾的
2.影像加载篇:WebMapTileServiceImageryProvider
3.uart_write_bytes(UART1_PORT_NUM, PubData.data, PubData.size); Blocked loading mixed active content,这个错误的原因就是:由于安全原因,它给出了错误。为此,请在网站 url 中使用“https”而不是“http”。
4.天地图服务在https协议下请求正常加载显示地图 1.添加代理,解决跨域问题。2.在地图服务的http后面加上s,即是https即可,如果是加载天地图的矢量地图服务需要加载完整的路径
5.Cesium多源数据加载之影像图层(一)
6.Cesium加载天地图及注记,并且去除自带控件
5.加载影像地图
下面的代码包括创建地球,加载地图。
1 | // 构造地球(可以使用原生Cesium或第3方SDK方式去构造Viewer) |
1.三维地图之cesium加载天地图(有代码)