[转]使用QT开发GoogleMap瓦片显示和下载工具
第一节
之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背景图或者三维可视化的基础背景数据需要大量的处理工作,而google瓦片数据只要拼接好就可以用,很方便,就是下载量太大会被google封ip一段时间,需要谨慎。
之前用很多第三方的软件下载,很方便,但是去年google换掉接口以后很多软件没法用了,然后就欲哭无泪了。现在突然有时间和精力了,顺便想学习一下QT的开发,就像写一个GoogleMap瓦片显示和下载的软件练手吧,以后每天写个日志记录下开发进展,如果工作比较忙就没办法谢了,争取不像前面的系列日志那样太监掉吧,这个日志就当是目录和开发计划的发布吧,初期的开发计划如下了
- 能够根据给定的坐标正确的下载GoogleMap的瓦片
- 使用QT创建简单的用户界面,显示下载的瓦片
- 能够自由的漫游、缩放
暂时这么多吧,以后完成了或者有新的想法在写进来吧,下载留给目录吧,第一篇这个就不写了。恩,对了,我先写个简单框架能够实现自己的想法了,会把源码放到网上的,不要着急,前期工作主要还是理论性吧,特别是地图投影,坐标变换什么的,想着我就头疼。
第二节
这篇主要说的是Google地图采用的投影方式,瓦片划分方式以及如何从给定的经纬度获取瓦片的数据的网址。所有资料均来自于网络,并亲自试验可行。
- 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* [分辨率]
然后如果需要计算经纬度的话则在上面坐标计算的基础上在进行逆投影计算就可以得出该点的经纬度数值
- Google地图瓦片切分方式以及索引计算方式
这里我就不多写了,请参见这篇博客OpenStreetMap/Google/百度/Bing瓦片地图服务(TMS),里面讲了目前主流地图服务的瓦片切分方式以及索取网址形式,不止包括Google地图。以后有时间没准可能会多做几个网站吧,毕竟TMS服务都是大同小异的。
恩,自己又仔细看了下,还是稍微补充点原博客没有讲清楚的东西,大家翻到google地图瓦片地址格式那里,原作者给出了如下这样的瓦片地图格式:
http://mt2.google.cn/vt/lyrs=m@167000000&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即可。
这篇大概就写这么多吧,主要是一些基础知识方面的内容,而且主要是转载别人的一些博客,并按照自己的理解进行了补充。有什么疑问或者问题欢迎留言。
引文连接:
2、使用QT开发GoogleMap瓦片显示和下载工具(2)——Google地图瓦片投影和获取网址解析
[转]使用QT开发GoogleMap瓦片显示和下载工具的更多相关文章
- 使用QT开发GoogleMap瓦片显示和下载工具
之前做项目的时候经常遇到需要大量地图背景数据,然后没有数据被逼着去Google上下载瓦片数据在拼接成整张影像的工作,其实遥感影像晚上有很多可以下载到的,但是大部分是作为研究用的,作为GIS的背景图或者 ...
- 使用QT开发GoogleMap瓦片显示和下载工具(1)——QT开发环境准备
由于是第一次使用qt,光是QT的安装和调试就费了好大功夫,汗一个,下面记录下过程和遇到的问题的解决方法吧. 下载QT 直接Google搜索“QT”,进入官网http://qt-project.org/ ...
- 使用QT开发GoogleMap瓦片显示和下载工具(2)——Google地图瓦片投影和获取网址解析
这篇主要说的是Google地图采用的投影方式,瓦片划分方式以及如何从给定的经纬度获取瓦片的数据的网址.所有资料均来自于网络,并亲自试验可行. Google地图投影 首先是地图投影问题,因为地球本身是一 ...
- QT开发之旅四邮件发送工具
终于有了一个晚上安静的写写程序,最近一直忙着公司商务上的事情,一直想用QT实现一个调用最底层socket通信来实现的邮件发送程序,以前用C#写过,微软都封装好的,不知道底层是如何实现的,只知道调用方法 ...
- python tkinter 框架开发的收费音乐免费下载工具
使用介绍: 工具下载地址:https://wps-oss.oss-cn-shenzhen.aliyuncs.com/Music2.exe 技术交流和赞助请前往我的咸鱼: https://market. ...
- Qt开发环境下载和安装
Qt是跨平台的图形开发库,目前由Digia全资子公司 Qt Company 独立运营,官方网址: http://www.qt.io/ 也可以访问Qt项目域名:http://qt-project.org ...
- Linux下使用VsCode进行Qt开发环境搭建
最近在Linux上搞Qt, vim环境还用不太习惯, QtCreator之前使用时莫名其妙崩溃然后丢失代码之后就被我彻底放弃了, 于是研究了一下用VsCode进行Qt开发. 首先是系统环境和下载安装包 ...
- Cesium中文网——如何开发一款地图下载工具[一]
Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Cesium中文网的朋友们的其中一个主题是:自己独立开发一款地图 ...
- 【Qt开发】【ARM-Linux开发】 QT在ARM上显示字体的问题
在PC机上利用QT开发的应用程序在设置字体时,在PC上运行,可根据自己的设置,字体随之变大或变小.而移植到ARM上运行时发现,显示字体与所设置的字体不用,字体普遍偏小.经过上网搜索发现,是环境变量字库 ...
随机推荐
- 错误:Attempted to load applicationConfig: [classpath:/application.yml] but snakeyaml was not found on the classpath
MyEclipse导入工程,报错如下: ::42.187 [main] ERROR org.springframework.boot.SpringApplication - Application r ...
- 基础架构之spring cloud基础架构
这篇文章是给公司设计的微服务基础架构,包括架构设计.部署流程.部署架构.开发Tip等等.这里分享出来,如果对看官们有点用,我就非常的高兴了. 首页 2. 架构设计 3. 部署流程 4. 部署架构 5. ...
- Python爬虫教程-03-使用 chardet 检测编码
Spider-03-使用chardet 继续学习python爬虫,我们经常出现解码问题,因为所有的页面编码都不统一,我们使用chardet检测页面的编码,尽可能的减少编码问题的出现 网页编码问题解决 ...
- Android碎笔录3——点击跳转
只要是view都能设置点击事件,不必要非得是Button. 要想实现跳转得三步走: 第一步.绑定 每个Layout都有一个一个java文件跟它绑定,这个Layout相关的代码都写在这个java文件里 ...
- unity材质球贴图滚动
using System.Collections; using System.Collections.Generic; using UnityEngine; public class NewBe ...
- 【转】OmniGraffle (一)从工具栏开始
原文链接:http://www.jianshu.com/p/52f3ecbe8f2d OmniGraffle的软件布局和大多数图形类软件类似,中间是编辑区,左边是页面和对象组织的管理,右边是参数设置和 ...
- Java基础之创建实例化对象的方式
Java中创建(实例化)对象的五种方式 1.用new语句直接创建对象,这是最常见的创建对象的方法. 2.通过工厂方法返回对象,如:String str = String.valueOf(23); 3 ...
- Windows 10 host where Credential Guard or Device Guard is enabled fails when running Workstation (2146361)
To disable Device Guard or Credential Guard on Itanium based computers: Disable the group policy set ...
- CSS标准文档流 块级元素和行内元素
标准文档流 什么是标准文档流 宏观的将,我们的web页面和ps等设计软件有本质的区别,web 网页的制作,是个“流”,从上而下 ,像 “织毛衣”.而设计软件 ,想往哪里画东西,就去哪里画 空白折叠现象 ...
- 安装系统+数据库+Sharepoint全套教程 (摘抄自https://www.cnblogs.com/jianyus/p/5482075.html)
前言 SharePoint 2016如约而至,之前也装过预览版,但是这次是正式版,还是分享一个完整的安装过程给大家,希望能给有需要的人有所帮助. 1.首先安装操作系统,我这里是Windows Serv ...