在实现插入地图资源之前,先了解一下相关的知识

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坐标系投影成正方形

墨卡托投影(Mercator)

  • 又称正轴等角圆柱投影。

  • 投影方法:假设地球被围在一个中空的圆柱里,其标准纬线与圆柱相切接触,然后再假想地球中心有一盏灯,把球面上的图形投影到圆柱体上,再把圆柱体展开,这就是一幅选定标准纬线上的“墨卡托投影”绘制出来的地图。

  • 墨卡托投影没有角度变形,由每一点向个方向的长度比相等,它的经纬线都是平行直线,且相交成直角,经线间隔相等,纬线间隔从标准纬线向两级逐渐增大。

  • 墨卡托投影的地图上长度和面积变形明显,但标准纬线无变形,从标准纬线向两级变形逐渐增大,但因为它具有各个方向均等扩大的特性,保持了方向和相互位置关系的正确。

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参数。


【Qt-地图】在QGC插入BING、高德、百度地图所需相关知识(一)的更多相关文章

  1. 深入理解最强桌面地图控件GMAP.NET ---[更新]百度地图

    之前写了篇博文,深入理解最强桌面地图控件GMAP.NET --- 百度地图 但是很多回复说百度地图更新了,不能显示百度的离线地图.之前承诺说是国庆节更新,最近才更新.代码已经提交到: https:// ...

  2. iOS打开百度地图、高德地图导航

    1.判断手机里是否已经安装了百度地图或者高德地图: BOOL hasBaiduMap = NO; BOOL hasGaodeMap = NO; if ([[UIApplication sharedAp ...

  3. 百度地图坐标纠偏和转换工具和DLL

    百度一直以来都是个即想装出一副拥抱互联网开放的样子,又为了短期商业利益封闭自己的公司,模仿谷歌地图,开放了自己的百度地图 API,为了防止别人盗用其数据和用户自由迁移,地图相比于火星坐标,又更加封闭, ...

  4. 基于MFC与第三方类CWebPage的百度地图API开发范例

    在进行百度地图API开发之前你需要到http://developer.baidu.com/map申请密匙 密匙申请之后就可以进行百度地图API的开发了. 下面我们以在visual c++6.0里进行地 ...

  5. ionic基于GPS定位并通过百度地图获取定位详细信息

    相信所有的前端攻城狮都会碰到移动端App.里面获取用户定位信息. 那么问题来了,怎么获取用户的定位信息(经纬度)呢. 当然方法有很多,通过百度地图API 以及 高德地图 API都是可以的.但是两个获取 ...

  6. ios 百度地图,火星坐标,地球坐标互转

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  7. ionic2如何调用百度地图

    使用ionic2接入百度地图 在index.html中引入百度地图的js类库 <script type="text/javascript" src="http:// ...

  8. (转) Arcgis for js加载百度地图

    http://blog.csdn.net/gisshixisheng/article/details/44853709 概述: 在前面的文章里提到了Arcgis for js加载天地图,在本节,继续讲 ...

  9. 记录开发基于百度地图API实现在地图上绘制轨迹并拾取轨迹对应经纬度的工具说明

    前言: 最近一直在做数据可视化方面的工作,其中平面可视化没什么难度,毕竟已经有很多成熟的可供使用的框架,比如百度的echart.js,highcharts.js等.还有就是3D可视化了,整体来说难度也 ...

  10. Arcgis for js加载百度地图

    看转:https://blog.csdn.net/qq_41046162/article/details/80248281 通过学习了一段时间的arcgis for js,让我来讲一下如何在arcgi ...

随机推荐

  1. Hadoop学习第二天

    今天配置Linux网络,首先是虚拟机网络配置,然后是真实机访问虚拟机,然后是配置centos网卡,最后是给IP地址加网络名,然后配置网络服务,但是出错了,目前还没找到问题所在

  2. crictl基础操作

    # 1. 查看机器上的镜像列表 crictl images ls # 2.删除机器上没用使用的镜像 crictl rmi --prune

  3. 使用 SpringBoot 集成 WebService [不需要身份验证]

    一.使用 JDK 自带的工具生成实体类 # 格式 wsimport -s 保存路径 -p 包路径 -encoding utf-8 wsdl文件地址 # 实例 wsimport -s d:\wsdl - ...

  4. 新起点!大数据分布式可视化的 DAG 任务调度系统 Taier 正式发布1.4版本

    我们很高兴向大家宣布,2023年4月14日,Taier 正式发布 1.4 版本.自2022年2月份 Taier 正式开源以来,收到了很多开发者和行业用户的积极评价,在诸多生产环境中已得到充分应用.Ta ...

  5. SQL Server查找未提交事务

    USE master GO SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT es.session_id, es.login_name, ...

  6. 01windows环境配置

    Windows Verilog开发环境配置指南 本指南将详细介绍如何在Windows系统上搭建完整的Verilog开发和仿真环境,包括iverilog.gtkwave.vvp和make工具的安装与配置 ...

  7. 在 GoRoute 中使用 NavigationBar

    前言 在App 中通常会把主要的几个页面放在下方icon,让使用者能够方便操作,这个元件在flutter 中称为BottomNavigationBar. 而GoRouter则是Flutter 官方所提 ...

  8. 前端开发系列089-Node篇之os

    一.OS模块介绍 Node中的OS模块提供了和当前系统相关的一系列实用方法.在代码中可以直接用os = require("os")的方式来引入.OS模块本身非常的简单,本文将简单对 ...

  9. openwrt 实现记录

    包主要通过 这个编译 make package/<name_package>/compile V=s 包主要通过 make package/<name_package>/cle ...

  10. leetcode 113 路径总和II

    简介 路径总和 思路 回溯. 不推荐层次遍历, 代码比较复杂. code /** * Definition for a binary tree node. * struct TreeNode { * ...