一、需求分析

实际工作中,很多公司或个人都需要一些幅面较大的地图,使用PS或AI等绘图工具,在上面标记一些内容,用以分析需求、理清思路、表达问题。当前,国内大的地图供应商有天地图、百度、高德等,都在网上提供电子地图浏览功能,但要实现地图拼接,普通用户也只能束手无策了。如何利用地图商提供的电子地图进行地图拼接出一幅大图,是一个很现实的需求。

二、设计思路

国内最权威的图源为“天地图”。“天地图”是国家测绘地理信息局建设的地理信息综合服务网站。百度百科所述,“天地图”集成了来自国家、省、市(县)各级测绘地理信息部门,以及相关政府部门、企事业单位 、社会团体、公众的地理信息公共服务资源,向各类用户提供权威、标准、统一的在线地理信息综合服务。它是“数字中国”的重要组成部分,是国家地理信息公共服务平台的公众版。
此次我们主要以天地图的拼接为例,制作一个地图拼接工具。主要的思路为:制作一个地图浏览器,增加范围框选工具,对所选范围内的地图进行下载和自动拼接,最终生成大图。
这里有一个坑不得不提一下,就是天地图需要在开发管理平台申请key才能调用其资源,但每个key每天只有10000次的访问,超出配额是常用的事。解决方案有3个,一是通过工商企业或政府机构身份申请key,最大支持到300万和500万次;二是多申请几个key,无法继续下去时换一个key;三是使用国外地图服务商,谷歌已经完全无法访问了,但还有一些网站可以访问,需要注意:国外网站在处理我领土边境问题上有错误,使用时需谨慎。
本文主要包括以下内容:1.主要知识点;2.软件框架;3.图源配置;4.数据交互;5.地图采集与拼接。

三、主要知识点

1.墨卡托投影
1569年,荷兰地图学家墨卡托(Gerhardus Mercator 1512-1594)为了提升航海家的地图使用效果,将地球的球形转换到平面上,提出了墨卡托投影。


墨卡托投影的原理为:设想一个与地轴方向一致的圆柱切于或割于地球,按等角条件将经纬网投影到圆柱面上,将圆柱面展为平面后,得平面经纬线网。投影后经线是一组竖直的等距离平行直线,纬线是垂直于经线的一组平行直线。各相邻纬线间隔由赤道向两极增大。一点上任何方向的长度比均相等,即没有角度变形,而面积变形显著,随远离基准纬线而增大。该投影具有等角航线被表示成直线的特性,故广泛用于编制航海图和航空图等[1]。

墨卡托投影最大问题在于,越往南北两极,变形越厉害,如下图所示,赤道的小圆,越往两极越大,实际面积是一致的。所以才有墨卡托投影下“如格陵兰岛比实际面积扩大了N倍”的说法。

2.Web墨卡托
2005年,google发布了谷歌地图,立即风靡全球,后成为众多地图厂商学习的蓝本。其主要采用的是TMS(Tile map service),其实在这之前,常见地图服务还有WMS、WFS、WCS、WMTS等,请各位百度。
我们都知道,要是把一大片地图加载到计算机里,速度奇慢无比,如果1:5W的世界地图使用一个图片文件的话,可能会无法打开。但其实每次在计算机屏幕视野内,我们看到地图的内容受屏幕限制而很有限,要么看到全局,要么看到局部,始终就那么大范围。这时,完全可以采取一种办法,来提高地图显示效率。于是工程师们采取了两个办法:分层和切片。分层,即根据比例尺不同,把地图划分为若干层;切片,即每一层按一定大小切成很多碎片(tile),又称为瓦片。下面结合图进行讲解:
为了把地球转换在平面上,首先要进行墨卡托投影。

如上图,假如我们把地球按照墨卡托投影展开到一张平面图上,将其大小设置为4个256×256像素的瓦片,定义为第一层,其坐标从左上角开始,x轴向右,y轴向下,z表示层,则放大一层后,每个瓦片又会分为4个256×256像素的瓦片,如图红框对应,以此类推。
那么像素与经纬度坐标是如何对应的呢?
那么这些瓦片的级别是按照什么规则来分的呢?这就要牵扯出地图学中另一个重要的概念——比例尺(即地图上的一厘米代表着实际上的多少厘米)。到了web地图中我们把比例尺转换成另一个概念——分辨率(Resolution,图上一像素代表实际多少米)。比例尺跟分辨率的换算举个例子:
//示例来自:http://www.cnblogs.com/naaoveGIS/
//这里的像素是设备像素
现在假设地图的坐标单位是米,dpi为96 ;
1英寸=2.54厘米;
1英寸=96像素;
最终换算的单位是米;
如果当前地图比例尺为1:125000000,则代表图上1米等于实地125000000米;
米和像素间的换算公式:
1英寸=0.0254米=96像素
1像素=0.0254/96 米
则根据1:125000000比例尺,图上1像素代表实地距离是 1250000000.0254/96 = 33072.9166666667米。
上面这个例子同样可以由分辨率换算出比例尺。所以在互联网地图中我们先不去关心比例尺,只关心分辨率的概念,假设瓦片的大小为256像素,每一级别的瓦块数目为2^n * 2^n。分辨率计算公式为:
r=6378137(地球半径)
resolution=2
PIr/(2^zoom256)
r为Web墨卡托投影时选取的地球半径,2PIr代表地球周长,地球周长除以该级别下所有瓦片像素得到分辨率。
注意这里的像素实际并不是设备像素,而是一种参照像素(web中的css像素或者是安卓上的设备无关像素),比如在某些高清屏下(window.devicePixelRatio = 3),一参照像素宽度等于3设备像素,这时候可能实际瓦片大小是512设备像素的,但是在显示时仍然要把它显示成256参照像素(css像素)。[2]
以整个世界范围,赤道作为标准纬线,本初子午线作为中央经线,两者交点为坐标原点,向东向北为正,向西向南为负。
X轴:由于赤道半径为6378137米,则赤道周长为2PIr = 2*20037508.3427892,因此X轴的取值范围:[-20037508.3427892,20037508.3427892]。
Y轴:由墨卡托投影的公式可知,同时上图也有示意,当纬度φ接近两极,即90°时,y值趋向于无穷。这是那些“懒惰的工程师”就把Y轴的取值范围也限定在[-20037508.3427892,20037508.3427892]之间,搞个正方形。
懒人的好处,众所周知,事先切好静态图片,提高访问效率云云。俺只是告诉你为什么会是这样子。因此在投影坐标系(米)下的范围是:最小(-20037508.3427892, -20037508.3427892 )到最大 (20037508.3427892, 20037508.3427892)。
对应的地理坐标系:
按道理,先讲地理坐标系才是,比如球体还是椭球体是地理坐标系的事情,和墨卡托投影本关联不大。简单来说,投影坐标系(PROJCS)是平面坐标系,以米为单位;而地理坐标系(GEOGCS)是椭球面坐标系,以经纬度为单位。具体可参考《坐标系、坐标参照系、坐标变换、投影变换》。
经度:这边没问题,可取全球范围:[-180,180]。
纬度:上面已知,纬度不可能到达90°,懒人们为了正方形而取的-20037508.3427892,经过反计算,可得到纬度85.05112877980659。因此纬度取值范围是[-85.05112877980659,85.05112877980659]。
因此,地理坐标系(经纬度)对应的范围是:最小(-180,-85.05112877980659),最大(180, 85.05112877980659)。至于其中的Datum、坐标转换等就不再多言。[3]
4.常见的投影及坐标系
我们经常会看到地理信息软件里有EPSG:XXXX。EPSG成立于1986年,EPSP的英文全称是European Petroleum Survey Group,中文名称为欧洲石油调查组织。这个组织成立于1986年,2005年并入IOGP(International Association of Oil & Gas Producers),中文名称为国际油气生产者协会,维护并发布坐标参照系统的数据集参数,以及坐标转换描述。该数据集被广泛接受并使用,通过一个Web发布平台进行分发,同时提供了微软Acess数据库的存储文件,通过SQL 脚本文件,mySQL, Oracle 和PostgreSQL等数据库也可使用。
① EPSG:4326
在世界地图方面,EPSG:4326是比较著名的一个,因为由美国主导的GPS系统就是在用它,它还有一个名气更大的别名叫作WGS84,WGS(World Geodetic System)是世界大地测量系统的意思,由于是1984年定义的,所以叫WGS84,之前的版本还有WGS72、WGS66、WGS60。
② EPSG:3857
另一个比较知名的编码是EPSG:3857,这也是一张世界地图,目前主要是各大互联网地图公司以它为基准,世界上类似谷歌、bing等公司都使用该坐标系,这也是本文主要涉及的坐标系。
③ BD09
BD09经纬度投影属于百度坐标系,它是在标准经纬度的基础上进行GCJ-02加偏之后,再加上百度自身的加偏算法,也就是在标准经纬度的基础之上进行了两次加偏。该坐标系的坐标值为经纬度格式,单位为度。
④ 北京54坐标系
中国成立以后,我国大地测量进入了全面发展时期,在全国范围内开展了正规的,全面的大地测量和测图工作,迫切需要建立一个参心大地坐标系。由于当时的"一边倒"政治趋向,故我国采用了前苏联的克拉索夫斯基椭球参数,并与前苏联1942年坐标系进行联测,通过计算建立了我国大地坐标系,定名为1954年北京坐标系。因此,1954年北京坐标系可以认为是前苏联1942年坐标系的延伸。T.A的原点不在北京而是在前苏联的普尔科沃。
自北京54坐标系统建立以来,在该坐标系内进行了许多地区的局部平差,其成果得到了广泛的应用。但是随着测绘新理论·新技术的不断发展,人们发现该坐标系存在很多缺点,为此,我国在1978年在西安召开了"全国天文大地网整体平差会议",提出了建立属于我国自己的大地坐标系,即后来的1980西安坐标系。
⑤ 西安80坐标系
1978年4月在西安召开全国天文大地网平差会议,确定重新定位,建立我国新的坐标系。为此有了1980年国家大地坐标系。1980年国家大地坐标系采用地球椭球基本参数为1975年国际大地测量与地球物理联合会第十六届大会推荐的数据,即IAG 75地球椭球体。该坐标系的大地原点设在我国中部的陕西省泾阳县永乐镇,位于西安市西北方向约60公里。后续还有CGCS2000坐标系,可自行百度。
⑥ GCJ02
GCJ-02是由中国国家测绘局(G表示Guojia国家,C表示Cehui测绘,J表示Ju局)制订的地理信息系统的坐标系统。它其实就是对真实坐标系统进行人为的加偏处理,按照特殊的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常被大家称为“火星坐标系统”。该坐标系的坐标值为经纬度格式,单位为度。这里的GCJ02经纬度投影,也就是在WGS84经纬度的基础之上,进行GCJ-02加偏。[4]
四、主要思路
知识点搞清楚后,思路就很简单了。我们要想获取一个大范围的地图,只需要知道其范围,然后确定哪些瓦片,最后合并到一起就可以了。流程如下:
框选范围→获取经纬度→确定目标层→计算瓦片范围→按顺序下载瓦片→合并大图。
下一章,开始实操。
后续链接:
打造地图拼接利器(二)软件框架
打造地图拼接利器(三)图源配置
打造地图拼接利器(四)数据交互
添打造地图拼接利器(五)地图采集与拼接

知识点参考资料:
[1].百度百科
[2].我的小树林《web地图呈现原理》,博客园
[3]. Liyan_gis《墨卡托及Web墨卡托投影》,CSDN
[4].南水之源《地理投影,常用坐标系详解、WGS84、WGS84 Web墨卡托、WGS84 UTM、北京54坐标系、西安80坐标系、CGCS2000坐标系》,博客园

打造地图拼接利器(一)前言相关推荐

  1. 打造地图拼接利器(六)GMap.net内动态显示和更新经纬网络

    地图下载工具初步完成后,有网友提出需要加入经纬网络,看了文档,没有找到相关内容.那就自己动手,丰衣足食吧.最终效果如下图所示: 具体思路是,根据地图界面显示的经纬网络范围,确定一个合理的参数,结合地图 ...

  2. 打造地图拼接利器(二)软件框架

    我们采用Visual studio2013作为开发环境,GMap.net作为地图环境,实现相关功能. 一.GMap.net GMap.NET 是一个免费.开源的.NET控件,有Windows Form ...

  3. python用cartopy包画地图_python绘制地图的利器Cartopy使用说明

    python绘制地图一般使用Basemap绘图包,但该包配置相对较繁琐,自定义性不强,这里介绍一个绘制地图的利器Cartopy,个人认为该工具方便.快捷,附上一些自己写的程序. 准备工作,工欲善其事, ...

  4. 【游戏程序设计】地图拼接

    运行结果: 源代码: #include <windows.h> #include <tchar.h> #pragma comment(lib, "winmm.lib& ...

  5. 打造网络营销利器-第2篇--友情链接交换-网站优化进阶

    网络营销如何做,才能从网络挖掘出大量的新业务?互联网时代你还停留于没业务就扩充销售队伍的思想,你就OUT了! 本系列文章将用通俗的语言介绍网站运营大牛们的惯用手法,网站SEO并没有你们想象那么难!重点 ...

  6. python绘制地图地图cartopy_python绘制地图的利器Cartopy使用说明

    python绘制地图一般使用Basemap绘图包,但该包配置相对较繁琐,自定义性不强,这里介绍一个绘制地图的利器Cartopy,个人认为该工具方便.快捷,附上一些自己写的程序. 准备工作,工欲善其事, ...

  7. 谷歌地图拼接软件_宽77米,高60米,南极小岛出现一个“巨洞”,谷歌地图清晰显示...

    虽然21世纪人类科技已经十分"强大"了,强大到可以轻易改变地球,殖民荒芜火星,人造物飞出太阳系,但地球上仍有一片面积约1390万平方公里土地人类很少踏足,这片土地名为南极洲,由于光 ...

  8. 谷歌地图拼接软件_谷歌地球显示两个长条状物体,一白和一黑,不是软件出现bug...

    趣味探索讯 在21世纪今天,手机已经成为了很多人的生活"必需品",在无比拥挤的地铁上,在摇摇晃晃的公交里,在垂涎欲滴的餐桌前,在舒适柔软的床上,都可以看到手机的身影,似乎没了它,一 ...

  9. 用友优普超客营销助恩普特打造营销管理利器

    "超客营销有一套很成熟的销售管理体系,如果按照超客营销规范的流程来做,通过半年或一年的时间,很容易成为一名优秀的销售人员."谈起超客营销在郑州恩普特科技股份有限公司的应用情况,总经 ...

  10. 谷歌地图拼接软件_谷歌地图上又有新发现?出现两个长条弧状物体,颜色一白和一黑...

    趣味探索讯 在21世纪今天,手机已经成为了很多人的生活"必需品",在无比拥挤的地铁上,在摇摇晃晃的公交里,在垂涎欲滴的餐桌前,在舒适柔软的床上,都可以看到手机的身影,似乎没了它,一 ...

最新文章

  1. lib目录和maven dependency目录的jar包冲突
  2. Windows Phone DataBound ListBox中针对UIElement的事件绑定(Button)
  3. UA OPTI512R 傅立叶光学导论11 卷积的性质
  4. python通过cookie绕过验证码_Python Selenium Cookie 绕过验证码实现登录示例代码
  5. 跟我一起学.NetCore之依赖注入
  6. innerHTML的用法
  7. 基于opencv在摄像头ubuntu根据视频获取
  8. freecodecamp_freeCodeCamp的服务器到底发生了什么?
  9. C#程序设计下,网易云课堂,计算机专业
  10. 【Java】用随机数打印hello world
  11. 使用 IntraWeb (10) - CSS
  12. 项目开发中对使用的第三方库统一进行管理__添加属性表/页
  13. 强大的DataGrid组件[12]_分组(Group)——Silverlight学习笔记[20]
  14. 弘辽科技:淘宝旧链接如何打新品标?有什么规则?
  15. (1.6w字)浏览器与前端性能灵魂之问,请问你能接得住几个?
  16. 电影片段素材网,自媒体必备素材网站推荐,视频素材免费下载网站
  17. Python天空颜色渐变
  18. OpenCV:03图像的算数运算
  19. 客户期望,客户满意度,客户体验和客户忠诚度之间存在的联系
  20. python桌面界面开发在那种编译器写代码_Python智慧编程——第1讲 遇见Mu editor

热门文章

  1. 基于STM32的串口通信详解
  2. postman9.12汉化
  3. python合并大量ts文件_Python爬取网站m3u8视频,将ts解密成mp4,合并成整体视频
  4. android apk加密技术,android apk 自我保护技术-加密apk
  5. 白盒测试-JUnit框架
  6. python实现ftp_python实现ftp(客户端)
  7. python好玩的代码-python有趣的一行代码
  8. WEB打印控件Lodop技术手册
  9. 安装Pygame的方法
  10. 后端开发面试自我介绍_Java后端面试总结