【Qt-地图】在QGC插入BING、高德、百度地图所需相关知识(一)
在实现插入地图资源之前,先了解一下相关的知识
1、Cesium
Cesium是AGI公司计算机图形开发小组与2011年研发的三维地球和地图可视化开源JavaScript库,Cesium一词来源于化学元素铯,铯是制造原子钟的关键元素,研发小组通过命名强调Cesium产品精益求精,专注时间数据可视化。Cesium为三维GIS提供了一个高效的数据可视化平台。即:
(1)Cesium是一个跨平台、跨浏览器的展示三维地球和地图的JavaScript库
(2)Cesium使用WebGL来进行硬件加速图形,使用时不需要任何插件支持。
(3)Cesium是基于Apache2.0许可的开源程序,可以免费用于商业和非商业用途。
主要的功能有:
(1)使用3d tiles格式流式加载各种不同的3d数据,包含倾斜摄影模型、三维建筑物、CAD和BIM的外部和内部,点云数据。并支持样式配置和用户交互操作。
(2)全球高精度地形数据可视化,支持地形夸张效果、以及可编程实现的等高线和坡度分析效果。
(3)支持多种资源的图像图层,包括WMS,TMS,WMTS以及时序图像。图像支持透明度叠加、亮度、对比度、GAMMA、色调、饱和度都可以动态调整。支持图像的卷帘对比。
(4)支持标准的矢量格式KML、GeoJSON、TopoJSON、以及矢量的贴地效果。
(5)三维模型支持gltf2.0标准的PRB材质、动画、蒙皮和变形效果。贴地以及高亮效果。
(6)使用CZML支持动态时序数据的展示。
(7)支持各种几何体:点、线、面、标注、公告牌、立方体、球体、椭圆体、圆柱体、走廊、管径、墙体。
(8)可视化效果包括:基于太阳位置的阴影、自身阴影、柔和阴影。
(9)支持大气、雾、太阳、阳光、月亮、星星、水面。
(10)粒子特效:烟、火、火花。
(11)地形、模型、3d tiles模型的面裁剪。
(12)对象点选和地形点选。
(13)支持鼠标和触摸操作的缩放、渲染、惯性平移、飞行、任意视角、地形碰撞检测。
(14)支持3d地球、2d地图、2.5d哥伦布模式。3d视图可以使用透视和正视两种投影方式。
支持点、标注、公告牌的聚集效果。
2、瓦片地图图片
两个术语:
- quadkey ——三维地图加载瓦片地图图片的键值,在请求url中可以看到;
- TileXY——瓦片地图图片在整个地图中的坐标,也用作该瓦片图的存储目录;
分片原理
以Cesium默认加载的bing maps tile system为例。其地图以一种四叉树的方式进行存储和加载。每当放大地图时,会根据放大层级以及当前区域加载对应子层级的地图图片,在浏览器进行拼接展示。
官方给的示意图如下:

图中每个区域的红色的数字编码,可以记做TileXY。
QGC的地图在国内某些地方,只能bing可用,其他都不能使用。而bing卫星图也没有道路和标签信息,且bing和谷歌在台湾标识处理上都不正确。
瓦片地图(切片地图)源于一种大地图解决方案,针对一整块非常大的地图进行切片,分成很多相同大小的地图,在用户访问的时候,再一块一块小地图加载,拼接在一起,从而还原成一整块大的地图,如果要提高Web地图的访问速度,使用瓦片地图是非常有效的方法。
瓦片地图采用的是金字塔模型,是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,比例尺越来越小,分辨率越来越低,但是表示的地理范围不变。瓦片地图通常都带有一个级别、行与列编号方案,以便将来自多个瓦片地图服务的瓦片放置到正确的位置。
高德地图使用的是GCJ-02坐标系,也称火星坐标系,由中国国家测绘局在02年发布,是在GPS坐标(WGS-84坐标系)基础上经加密后而来,也就是增加了非线性的偏移,让你摸不准真实位置,为了国家安全,国内地图服务商都需要使用GCJ-02坐标系。
WGS-84坐标系是国际通用的标准,EPSG编号为EPSG:4326,通常GPS设备获取到的原始经纬度和国外的地图厂商使用的都是WGS-84坐标系。
这两种坐标系都是地理坐标系,球面坐标,单位为度,这种坐标方便在地球上定位,但是不方便展示和进行面积距离计算,我们印象中的地图都是平面的,所以就有了另外一种平面坐标系,平面坐标系是通过投影的方式从地理坐标系中转换过来,所以也称为投影坐标系,通常单位为米,投影坐标系根据投影方式的不同存在多种,在Web开发的场景里通常使用的是Web墨卡托投影,编号为EPSG:3857,它基于墨卡托投影,把WGS-84坐标系投影成正方形
-
又称正轴等角圆柱投影。
-
投影方法:假设地球被围在一个中空的圆柱里,其标准纬线与圆柱相切接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅选定标准纬线上的“墨卡托投影”绘制出来的地图。
-
墨卡托投影没有角度变形,由每一点向个方向的长度比相等,它的经纬线都是平行直线,且相交成直角,经线间隔相等,纬线间隔从标准纬线向两级逐渐增大。
-
墨卡托投影的地图上长度和面积变形明显,但标准纬线无变形,从标准纬线向两级变形逐渐增大,但因为它具有各个方向均等扩大的特性,保持了方向和相互位置关系的正确。
3、瓦片地图图片的URL格式
Bing Maps的瓦片地图图片的URL的格式为:
http://ecn.t{0}.tiles.virtualearth.net/tiles/{1}{2}.png? g={4}
参数解释
|
参数 |
解释 |
说明 |
|
{0} |
代表Bing Maps的服务器,平衡负载 |
现在看来取值可以是0~7,也就是8台服务器 |
|
{1} |
地图类型 |
卫星地图:a;普通地图:r;混合地图:h |
|
{2} |
瓦片地图图片键值(quadkey ) |
通过对应地图区域的位置、显示尺度等计算而来 |
|
{3} |
地图图片类型 |
取值为png | jpeg | jpg |
|
{4} |
地图版本 |
在给定level下,把行号Y和列号X转换为2进制,然后行列交叉存储,再转换为4进制,即得到了相应的quadkey。譬如Level 3的第6行第4列的Tile计算:tileY = 5 = 101 ,tileX = 3 = 011;quadkey = 100111 = 213(4进制) = “213”。反过来计算就是quadkey到TileXY的转换。根据此方法,就很容易写quadkey到TileXY之间的转换代码。
注:比较可行的方案是根据url规则,将需要的地图瓦片数据批量下载到本地服务器,并根据quadkey和TileXY的映射关系配置路由,cesium的地图源的请求改成从本地服务器获取。当前有对应脚本工具对瓦片数据进行批量下载,唯一问题是数据量有些大。中国范围内如果地图缩放支持到16级的卫星地图影像,中国的地图数据有图片约1.17亿张。
所以如果使用此方案,需要:
1、根据我们实际需要下载对应区域、对应缩放层级的瓦片数据,如国外区域只下载部分层级,国内下载到16级,避免用到的数据占用太大;
2、有足够空间、有服务器存放瓦片数据,同时在此服务器上部署Maps服务,并配置好请求路由映射;
3、修改cesium对应的配置,改成三维地图图片加载走自己部署的Maps服务器,对应Viewer初始化时候配置imageryProvider参数。

浙公网安备 33010602011771号