基于Python的离线Google地图操作实现

更新时间:2023-05-11 03:55:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第32卷第1期2012年1月

海洋测绘

HYDROGRAPHICSURVEYINGANDCHARTING

Vol.32,No.1Jan.,2012

DOI:10.3969/j.issn.1671-3044.2012.01.012

基于Python的离线Google地图操作实现

12

刘保良,林安华,李

2

(1.海军海洋测绘研究所,天津300061;2.南开大学信息技术科学学院,天津300071)

摘要:在线Google地图以及开放的基础地理数据为GIS系统开发提供了便利。运用Python语言,针对离线Google地图瓦片数据文件,实现了地图瓦片拼接、卫星和平面地图切换、平移、缩放、鼠标响应、轨迹显示等地图操作,对于提高测绘质量及其实时显示与交互技术具有重要意义。

关键词:Google地图;离线;地图瓦片;地图操作中图分类号:P208

文献标识码:B

3044(2012)01-0039-03文章编号:1671-

1引言

互联网技术和地图测绘技术的发展推动了一系

列与地图相关的应用服务,典型的是Google提供的GoogleMap、GoogleEarth和GoogleSketchup等,在很大程度上提高了公众的地理信息认知能力,而且周边地理信息普通用户可以方便地查询行车路线、等,而且开放式的多层面调用和扩展接口为开发者

[1-2]

。应用Google在线地图服务提供了便利

Google地图集成了卫星遥感地图和三维电子地

Google地图文件,glob.glob()可以很容易地实现对所有文件的遍历并返回列表,有利于后续的计算和处理。2

离线Google地图基础

Google免费提供不同尺度和分辨率的二维和三而且国外有些地区已开始提供免费矢维栅格数据,量数据,这些基础地理数据包含了各方面的地理信息。

2.1地图数据下载

在使用离线Google地图文件进行操作时,首先需要从Google服务器下载基础地理数据文件,方法如下:

(1)编写下载工具

利用Python语言编写下载工具download.py可以实现卫星和平面地图的数据下载,命令行运行方式为:download.py“117.08236936.565171122.30208740.521168”118F:\tempMaps2D20。其中,引号内参数为经纬度表示的矩形区域,分别为左下角和右上角

11和8表示下载地图的层级数,接着是地图的坐标,

20表示开启的下载线程数。存储在本机上的路径名,(2)利用开源软件可以利用开源软件进行地图数据的下载,例如MobileAtlasCreator。利用该软件可以下载两种类型的Google地图数据,一种是PNG格式的图片文件;另一种是SQLite数据库文件,可以根据用户需求进行下载。2.2地图瓦片

电子地图数据是针对在线浏览和专题标图而对

图,所提供的基础地理数据包含了各方面的地理信息。它提供3种视图,一是不同分辨率的卫星影像,二是可显示地形和等高线的地形视图,三是提供政

交通和商业等信息的矢量地图。对于大面积的区、

地图测绘与显示,可以利用GoogleMap提供的卫星影像和地形等离线数据为基础,能够有效地提高测绘质量和速度,优化地形的实时显示与交互

[3-4]

。操作

Python是一种简单易学的免费跨平台语言,ArcGIS9以后主要支持Python[5-6]。它便于将测试

完好的C源程序改写为Python扩展供其调用,可以更好地发挥不同语言的优势。

Python语言在实现数据批量处理方面具有独特具有的优势:Python提供了列表(LIST)数据结构,

高级语言集合类数据结构的特点,但其操作非常简单,不需要指定长度、使用指针和引用等。Python的walk()函数擅长遍历一个目录(含子目录)下的所有文件并返回到几个列表中,用户只需对列表操作即可。尤其是,对于具有规律的瓦片图形式的

11-17收稿日期:2011-06-08;修回日期:2011-),作者简介:刘保良(1959-男,天津人,高级工程师,硕士,主要从事海洋测绘仪器与自动控制研究。

40

海洋测绘

X

第32卷

矢量数据和影像数据进行内容选取组合、处理后的

[7]

数据集。

为了提高地图服务响应速度,可以预先制作一系列比例尺地图瓦片。其中:

90°开(1)瓦片分块的起始点从经纬度-180°,

始,向东向南行列递增。

(2)瓦片分块大小为256像素×256像素。

(3)瓦片数据格式采用PNG或JPG。

(4)采用金字塔分层规则,瓦片的地面分辨率固定为[cos(纬度×PI/180)×2×PI×R]/(256×2level),R为其中level表示比例尺的级别,最小为0,地球长半径,为6378137m。地面显示比例=1∶地面分辨率×屏幕分辨率/(0.0254m/英寸),其中,屏幕分辨率为96dpi。

(5)地图瓦片数据采用数据集、层、行目录结构描述,采用明码格式便于数据的理解和使用。3

地图坐标转换

Ne1-esinB)

B=-2arctan[exp(-)×exp()ln(2

YB

L=+L0

K

(2)

实际地图与墨卡托投影的经纬度需要进行转化,实际地图到墨卡托投影的经纬度转化公式(B,L)→(b,l)如式(3)所示,单位:弧度。

b=ln[(1+sinB)/cosB]

l=L

(3)

墨卡托投影的经纬度到实际地图的经纬度转化l)→(B,L)如式(4)所示,公式(b,单位:弧度。

B=2×arctan[exp(b)]-

4L=l

4

离线Google地图操作实现

利用Python语言在处理批量数据方面的优势,针对测绘行业的具体需求,可以利用离线Google地图数据为基础来实现各种不同的操作功能定制。4.1

地图瓦片拼接

Google地图使用x和y来设置瓦片坐标和放大

{}

(4)

卫星影像图和一般测绘地形图采用不同的坐标体系,为了实现瓦片图文件拼接、地图显示和操作,必须进行坐标转换。常用的投影转化有墨卡托(Mercator)投影、UTM投影和兰高斯-克吕格投影、

[2,8]

。勃特等角投影等

Google地图采用的是墨卡托投影(等角正切圆柱投影)。理论上,纬度范围应该是-90°~90°,但

因子。放大因子z从17(完全缩小)到0(最大比例),

当z=17时,整个地球在一个瓦片中显示,此时x=0,y=0;当z=16时,地球被分为2×2部分,此时0≤x≤1且0≤y≤1。每放大一次,每个瓦片都被分为2×2部

(17-z)

。分,因此显示的水平和垂直瓦片个数为2

事实上,由于墨卡托投影使得两级无穷大,覆盖的地

带小于-90°~90°。

墨卡托平面直角坐标系取零子午线或自定义原点经线(L0)与赤道交点的投影为原点,零子午线或赤道的投影自定义原点经线的投影为纵坐标X轴,为横坐标Y轴。

L)→(X,Y)如式墨卡托投影的正解公式(B,

(1)所示,其中标准纬度B0,原点纬度0,原点经度L0。XN=Kln[tan(YB=K(L-L0)k=NB0×cos(B0)=

a2b

+e'×cos(B0)×cos(B0)

(1)

Y)→(B,L)如式墨卡托投影的反解公式(X,(2)所示。其中,XN、YB分别为纵、横直角坐标,单位L分别为纬度和经度,b、为m;B、单位弧度。参数a、e参照椭球体几何表达公式。exp为自然对数底,纬度B通过迭代计算很快就收敛了。

e1-esinBπB

+)×()421+esinB

使用download.py或者开源软件下载得到的地

图数据是PNG格式的地图瓦片文件,在进行实际应用时先要拼接地图瓦片,使之形成一个完整的区域地图。首先根据用户提供的经纬度坐标和放大倍数,按照墨卡托投影变换公式找到该点所在的瓦片

y)。然后再以此为中心瓦片向周图的行列坐标(x,

围进行扩展,以使用户关心的区域处于中心位置。

注意,在墨卡托投影中,两条纬线间的距离不一定相等,所以纬度对应的瓦片会依据它的垂直位置确定。4.2

操作功能实现

在地图瓦片拼接好以后就可以针对区域地图实现不同的操作功能。

(1)地图转换

根据用户需要,针对下载得到2D和3D地图瓦片数据集,可以调用不同的数据集实现地图的切换显y)以及相应的示。首先将所显示地图的行列坐标(x,放大倍数z记录下来,然后在程序中进行文件路径切即可通过对不同数据集的调用实现地图切换。换,

(2)缩放

第1期刘保良,等基于Python的离线Google地图操作实现

41

在进行地图的缩放显示时,首先要记录当前显

y),示地图的层级Level和行列坐标(x,然后根据放大倍数z计算新的层级和行列坐标。在缩放过程

地图中心保持不变。中,

(3)平移

在进行地图的平移显示时,首先要记录当前显

y),示地图的层级Level和行列坐标(x,然后不断变以此向四周扩展。为了化所显示地图的中心瓦片,

保证在平移过程的显示比较平滑,事先在程序中预取所显示地图四周的瓦片数据。

(4)轨迹显示

从数据库中读取到的目标位置是以经纬度坐标表示的,需要根据墨卡托坐标变换为瓦片行列坐标(x,y)和瓦片内偏移量。根据行列坐标找到对应的瓦片图,然后由偏移量找到该点在地图中的具体位置,最后描点形成目标的运动轨迹。效果见图1

来实现鼠标事件响应,可以将鼠标选取点的经纬度

显示在地图左下角。5

结束语

Google地图的在线服务以及开放的基础地理数据为GIS为代表的系统开发提供了便利。利用Python语言在批量数据处理方面的优势,能够有效优化地图实时显示和交互地实现瓦片数据的拼接,操作。基于此,能够结合测绘行业的具体需求进行功能定制,进一步完善测绘系统的功能和显示性能,对海洋环境要素研究具有一定的促进作用。

参考文献:

[1]刘

磊,仇菊香,吴国洋.基于Google地图服务的城市

.测绘标准地理信息公共服务平台的设计与实现[J]2011,27(1):10-13.化,[2]方

1-4.[3]李

军,蒋红燕,郭晋宁,等.海岸带卫星影像的处理

钏,李庆伟.现代技术发展对海图质量的

J].海洋测绘,2010,30(4):44-47.和应用研究[[4]贾建军,李[5]司

J].海洋测绘,2011,31(3):77-79.影响与对策[

.第2维,曾军崴,谭颖华.Python基础教程[M]2010.版.北京:人民邮电出版社,

[6]彭海波,向洪普.基于Python的空间数据批量处理方

成,王春晖,吴延明.GoogleEarth卫星影像图在J].中外公路,2011,31(2):道路设计中的应用研究[

图1轨迹显示图J].测绘与空间地理信息,2011,34(4):81-84.法[

[7]国家地理信息公共服务平台总体技术组.电子地图数

据规范(试行版).2010.7.

[8]祝国瑞.地图学[M].武汉:武汉大学出版社,2004.

(5)鼠标响应

在地图上进行标点或者目标选取可以通过鼠标

来完成。在地图显示过程中,可以调用相应的API

ImplementationofOfflineGoogleMapOperationUsingPython

LIUBaoliang1,LINAnhua2,LITao2

(1.NavalInstituteofHydrographicSurveyingandCharting,Tianjin300061,China;2.CollegeofInformationTechnicalScience,NankaiUniversity,Tianjin300071,China)

Abstract:OnlineGooglemapandopenmapdataareofbenefittoGISsystemdevelopment.Inthispaper,theofflineGooglemaptiledataareprocessedusingPythonprogramminglanguage.Somemapoperationsareimplementedincludingmaptilestitching,2D/3Dmapswitching,mapmoving,mapzooming,trackdrawingandmouseresponse.Itisveryimportanttomapping,realtimedisplayandhuman-computerinteraction.Keywords:Googlemap;offline;maptile;mapoperation

本文来源:https://www.bwwdw.com/article/37we.html

Top