[转]使用QT开发GoogleMap瓦片显示和下载工具

Posted rainbow70626

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[转]使用QT开发GoogleMap瓦片显示和下载工具相关的知识,希望对你有一定的参考价值。

第一节

  之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背景图或者三维可视化的基础背景数据需要大量的处理工作,而google瓦片数据只要拼接好就可以用,很方便,就是下载量太大会被google封ip一段时间,需要谨慎。

  之前用很多第三方的软件下载,很方便,但是去年google换掉接口以后很多软件没法用了,然后就欲哭无泪了。现在突然有时间和精力了,顺便想学习一下QT的开发,就像写一个GoogleMap瓦片显示和下载的软件练手吧,以后每天写个日志记录下开发进展,如果工作比较忙就没办法谢了,争取不像前面的系列日志那样太监掉吧,这个日志就当是目录和开发计划的发布吧,初期的开发计划如下了

  1. 能够根据给定的坐标正确的下载GoogleMap的瓦片
  2. 使用QT创建简单的用户界面,显示下载的瓦片
  3. 能够自由的漫游、缩放

  暂时这么多吧,以后完成了或者有新的想法在写进来吧,下载留给目录吧,第一篇这个就不写了。恩,对了,我先写个简单框架能够实现自己的想法了,会把源码放到网上的,不要着急,前期工作主要还是理论性吧,特别是地图投影,坐标变换什么的,想着我就头疼。

第二节

    这篇主要说的是Google地图采用的投影方式,瓦片划分方式以及如何从给定的经纬度获取瓦片的数据的网址。所有资料均来自于网络,并亲自试验可行。

  1. Google地图投影

    首先是地图投影问题,因为地球本身是一个球体,理论上不可能将球面展开成一个没有裂缝的平面(就像圆柱侧面可以展开成一个矩形,但是球面不可能展开成类似的无缝平面),因此需要采用投影的方式将地球展开成一张平面,方面使用者阅读。地图投影有很多种方法,来实现不同的应用目的(等角投影,等面积投影,等长度投影等),可以从地图学相关数据中进行了解。这里主要说的是Google地图采用的投影方式,用术语来说就是正轴等角切圆柱投影,是墨卡托投影的一种,一般称为Web墨卡托投影,ESPG编号是4326(GDAL可以直接使用该编号加载该投影相关信息)。具体相关信息可以从这篇博客中进行学习Google Maps地图投影全解析

    需要注意的是,经过投影计算后使用的是投影坐标系坐标进行计算,也就是博文中所说的[-20037508.3427892,20037508.3427892]这个范围内的坐标进行计算。也就是说x轴和y轴使用该数值可以线性计算某点坐标,而不能使用经纬度进行线性计算某点坐标,因为投影后的经纬度不是均匀的。这么说可能比较抽象,举个例子说,对于Google地图0级图像(如下图),需要计算(x,y)像素点(左下角点为起始点)坐标,需要使用投影坐标系坐标采用下式计算:

    [X坐标] = -20037508.3427892 + x * [分辨率]

    [Y坐标] = -20037508.3427892 + y* [分辨率]

    技术分享图片

    然后如果需要计算经纬度的话则在上面坐标计算的基础上在进行逆投影计算就可以得出该点的经纬度数值

  2. Google地图瓦片切分方式以及索引计算方式

    这里我就不多写了,请参见这篇博客OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS),里面讲了目前主流地图服务的瓦片切分方式以及索取网址形式,不止包括Google地图。以后有时间没准可能会多做几个网站吧,毕竟TMS服务都是大同小异的。

    恩,自己又仔细看了下,还是稍微补充点原博客没有讲清楚的东西,大家翻到google地图瓦片地址格式那里,原作者给出了如下这样的瓦片地图格式:

    http://mt2.google.cn/vt/[email protected]&hl=zh-CN&gl=cn&x=420&y=193&z=9

    这个后面的x,y,z分别代表上图所说的x轴方向序号,y轴方向序号以及瓦片金字塔层级z(TMS服务地图瓦片一般都是采用完全四叉树金字塔方式进行数据组织,高层的每个瓦片被一分为四,确定低层瓦片覆盖的范围,具体的可以搜索瓦片金字塔学习相关概念)。注意一般来说z的取值范围为[0,x],x值因不同的服务和数据精度相关,但一般在20左右,x和y的取值范围是[0,2^(z-1)],获取不同的地点的瓦片只需要修改x,y,z即可。

    这篇大概就写这么多吧,主要是一些基础知识方面的内容,而且主要是转载别人的一些博客,并按照自己的理解进行了补充。有什么疑问或者问题欢迎留言。

 引文连接:

1、使用QT开发GoogleMap瓦片显示和下载工具

2、使用QT开发GoogleMap瓦片显示和下载工具(2)——Google地图瓦片投影和获取网址解析

以上是关于[转]使用QT开发GoogleMap瓦片显示和下载工具的主要内容,如果未能解决你的问题,请参考以下文章

Google Map中的瓦片

Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器client 小结

Qt/Qml:如何包含地图瓦片以供离线使用?

地图瓦片数据的多种利用形式以及瓦片数据的浏览显示

Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器client-墨卡托投影与坐标控制

SuperMap iDesktop 下载安装,生成本地瓦片,以及发布本地瓦片服务