第 32 卷第 1 期
2012 年 1 月
海 洋 测 绘
HYDROGRAPHIC SURVEYING AND CHARTING
Vol. 32
Jan.
,
No. 1
,
2012
:
DOI
10. 3969 / j. issn. 1671-3044. 2012. 01. 012
基于 Python 的离线 Google 地图操作实现
刘保良1,林安华2,李 涛2
(
1.
海军海洋测绘研究所,天津
300061
;
2.
南开大学 信息技术科学学院,天津
)
300071
摘要: 在线
Google
地图以及开放的基础地理数据为
地图瓦片数据文件,实现了地图瓦片拼接
Google
作,对于提高测绘质量及其实时显示与交互技术具有重要意义
卫星和平面地图切换
、
GIS
系统开发提供了便利
缩放
、
平移
、
运用
。
鼠标响应
、
Python
语言,针对离线
轨迹显示等地图操
、
地图; 离线; 地图瓦片; 地图操作
。
关键词: Google
中图分类号: P208
文献标识码: B
文章编号: 1671-3044
(
)
2012
01-0039-03
1 引 言
和
Google
Google
Google Sketchup
列与地图相关的应用服务,典型的是
互联网技术和地图测绘技术的发展推动了一系
提供的
等,在
Google Map、Google Earth
很大程度上提高了公众的地理信息认知能力,而且
普通用户可以方便地查询行车路线
周边地理信息
、
等,而且开放式的多层面调用和扩展接口为开发者
应用
在线地图服务提供了便利[
地图集成了卫星遥感地图和三维电子地
图,所提供的基础地理数据包含了各方面的地理信
种视图,一是不同分辨率的卫星影像,
息
二是可显示地形和等高线的地形视图,三是提供政
对于大面积的
区
地图测绘与显示,可以利用
提供的卫星
影像和地形等离线数据为基础,能够有效地提高测
绘 质 量 和 速 度,优 化 地 形 的 实 时显 示 与 交 互
操作[
交通和商业等信息的矢量地图
、
Google Map
它提供
Google
。
。
。
1-2
3-4
3
]
]
是一 种 简 单 易 学 的 免 费跨 平 台 语 言 ,
它便于将测试
扩展供其调用,可以
以后主要支持
源程序改写为
Python
。
5-6
[
]
ArcGIS9
完好的
更好地发挥不同语言的优势
C
Python
。
Python
。
LIST
Python
Python
提供了列表(
语言在实现数据批量处理方面具有独特
的优势:
) 数据结构,具有
高级语言集合类数据结构的特点,但其操作非常简
单,不需要指定长度
的
( ) 函数擅长遍历一个目录( 含子目录) 下的所
walk
有文件并返回到几个列表中,用户只需对列表操作
尤 其 是,对 于 具 有 规 律 的 瓦 片 图 形 式 的
即可
使用指针和引用等
、
。Python
。
地图文件,
( ) 可以很容易地实现对
Google
所有文件的遍历并返回列表,有利于后续的计算和
处理
glob. glob
。
2 离线 Google 地图基础
Google
免费提供不同尺度和分辨率的二维和三
维栅格数据,而且国外有些地区已开始提供免费矢
量数据,这些基础地理数据包含了各方面的地理
信息
2. 1 地图数据下载
。
在使用离线
地图文件进行操作时,首先
服务器下载基础地理数据文件,方法
Google
Google
需要从
如下:
(
1
利用
) 编写下载工具
Python
download. py
语言编写下载工具
可
以实现卫星和平面地图的数据下载,命令行运行方式
为:
download. py “117. 082369 36. 565171 122. 302087
其中,引号内参
40. 521168”11 8 F
数为经纬度表示的矩形区域,分别为左下角和右上角
的坐标,
表示下载地图的层级数,接着是地图
11
存储在本机上的路径名,
20
表示开启的下载线程数
\tempMaps2D 20。
和
8
:
。
) 利用开源软件
(
2
可以利用开源软件进行地图数据的下载,例如
利用该软件可以下载两种类
格式的图片文
数据库文件,可以根据用户需
地图数据,一种是
PNG
Google
Mobile Atlas Creator。
型的
件; 另一种是
求进行下载
。
2. 2 地图瓦片
SQLite
电子地图数据是针对在线浏览和专题标图而对
收稿日期: 2011-06-08
作者简介: 刘保良(
1959-
; 修回日期: 2011-11-17
) ,男,天津人,高级工程师,硕士,主要从事海洋测绘仪器与自动控制研究
。
海 洋 测 绘
处理后的
、
B =
π
2
第 32 卷
(
-
)
XN
K
× exp
)
( e
2
( 1 -esinB
1 +esinB
ln
)
)]
(
)
2
[
- 2arctan
exp
+ L0
L =
YB
K
04
矢量数据和影像数据进行内容选取组合
数据集[
]
7
。
为了提高地图服务响应速度,可以预先制作一
系列比例尺地图瓦片
其中:
。
始,向东向南行列递增
) 瓦片分块的起始点从经纬度
-180°
,
90°
开
。
) 瓦片分块大小为
) 瓦片数据格式采用
) 采用金字塔分层规则,瓦片的地面分辨率
像素
或
JPG。
像素
×256
PNG
256
。
(
(
(
(
1
2
3
4
固定 为[
cos
2 level) ,其中
level
地球长半径,为
面分辨率
×
幕分辨率为
( 纬 度
(
)
× PI /180
]
/
表示比例尺的级别,最小为
地面显示比例
× 2 × PI × R
6 378 137m。
256 ×
,
为
R
地
英寸) ,其中,屏
= 1 ∶
0
0. 025 4m /
屏幕分辨率
(
/
) 地图瓦片数据采用数据集
(
5
层
、
行目录结构
、
描述,采用明码格式便于数据的理解和使用
96dpi。
实际地图与墨卡托投影的经纬度需要进行转
化,实际地图到墨卡托投影的经纬度转化公式 (
)
) 如式(
(
,
B
L
→
,
l
b
3
) 所示,单位: 弧度
[(
)
1 + sin B
/ cos B
。
]
(
)
3
b = ln
l = L
墨卡托投影的经纬度到实际地图的经纬度转化
公式(
,
)
l
b
(
,
L
B
→
) 如式(
) 所示,单位: 弧度
{
4
[
(
b
) ]
-
}
π
4
。
(
)
4
B = 2 × arctan
exp
L = l
4 离线 Google 地图操作实现
因子
当
。
z = 17
; 当
Python
语言在处理批量数据方面的优势,
地
针对测绘行业的具体需求,可以利用离线
图数据为基础来实现各种不同的操作功能定制
4. 1 地图瓦片拼接
地图使用
从
和
( 完全缩小) 到
放大因子
Google
x
y
Google
。
来设置瓦片坐标和放大
( 最大比例) ,
,
0
时,整个地球在一个瓦片中显示,此时
z
17
x = 0
0≤x≤1
部
2×2
z = 16
y = 0
且
分,因此显示的水平和垂直瓦片个数为
部分,此时
时,地球被分为
每放大一次,每个瓦片都被分为
)
0≤y≤1。
2×2
17-z
(
2
。
。
PNG
download. py
或者开源软件下载得到的地
使用
格式的地图瓦片文件,在进行实际应
图数据是
用时先要拼接地图瓦片,使之形成一个完整的区域
地图
首先根据用户提供的经纬度坐标和放大倍
数,按照墨卡托投影变换公式找到该点所在的瓦片
图的行列坐标(
然后再以此为中心瓦片向周
围进行扩展,以使用户关心的区域处于中心位置
。
注意,在墨卡托投影中,两条纬线间的距离不一定相
等,所以纬度对应的瓦片会依据它的垂直位置确定
4. 2 操作功能实现
,
y
。
。
x
)
在地图瓦片拼接好以后就可以针对区域地图实
现不同的操作功能
) 地图转换
。
(
1
根据用户需要,针对下载得到
2D
和
地图瓦
片数据集,可以调用不同的数据集实现地图的切换显
) 以及相应的
示
记录下来,然后在程序中进行文件路径切
放大倍数
换,即可通过对不同数据集的调用实现地图切换
首先将所显示地图的行列坐标(
,
y
3D
。
x
z
。
。
利用
3 地图坐标转换
卫星影像图和一般测绘地形图采用不同的坐标
地图显示和操作,
、
常 用 的 投 影 转 化 有 墨 卡 托
投影和兰
克吕格投影
体系,为了实现瓦片图文件拼接
必须 进 行 坐 标 转 换
(
高斯
、
勃特等角投影等[
,
]
8
2
Mercator
) 投影
、UTM
。
-
。
Google
地图采用的是墨卡托投影( 等角正切圆
柱投影)
,但
理论上,纬度范围应该是
事实上,由于墨卡托投影使得两级无穷大,覆盖的地
带小于
- 90° ~ 90°
。
-90° ~ 90°。
墨卡托平面直角坐标系取零子午线或自定义原
) 与赤道交点的投影为原点,零子午线或
轴,赤道的投影
点经线(
自定义原点经线的投影为纵坐标
为横坐标
轴
L0
X
Y
。
墨卡托投影的正解公式 (
(
1
度
) 所示,其 中 标 准 纬 度
B0
L0。
)
B
,
L
(
,原 点 纬 度
→
,
) 如式
Y
,原 点 经
X
0
XN = Kln
(
YB = K
[
tan
)
L - L0
( π
4
+
)
B
2
×
( 1 - esinB
1 + esinB
) e
2]
k = NB0 × cos
(
)
B0
a2 b
=
1 + e'2 × cos2(
槡
B0
(
)
B0
) × cos
) 所示
墨卡托投影的反解公式(
X
分别为纵
。
其中,
分别为纬度和经度,单位弧度
XN、YB
B、L
m
参照椭球体几何表达公式
。exp
通过迭代计算很快就收敛了
(
2
为
e
度
;
B
(
)
)
,
) 如式
Y
横直角坐标,单位
、
,
L
→
B
1
(
参数
。
a、b、
为自然对数底,纬
。
) 缩放
(
2
第 1 期
刘保良,等 基于
Python
的离线
Google
地图操作实现
14
。
在进行地图的缩放显示时,首先要记录当前显
) ,然后根据放
在缩放过程
,
y
计算新的层级和行列坐标
和行列坐标(
x
示地图的层级
大倍数
中,地图中心保持不变
Level
z
。
) 平移
(
3
在进行地图的平移显示时,首先要记录当前显
) ,然后不断变
示地图的层级
化所显示地图的中心瓦片,以此向四周扩展
为了
保证在平移过程的显示比较平滑,事先在程序中预
取所显示地图四周的瓦片数据
和行列坐标(
Level
,
y
。
x
。
) 轨迹显示
(
4
从数据库中读取到的目标位置是以经纬度坐标
表示的,需要根据墨卡托坐标变换为瓦片行列坐标
(
根据行列坐标找到对应的瓦
x
片图,然后由偏移量找到该点在地图中的具体位置,
最后描点形成目标的运动轨迹
) 和瓦片内偏移量
效果见图
,
y
。
。
1。
图
1
轨迹显示图
) 鼠标响应
(
5
在地图上进行标点或者目标选取可以通过鼠标
来完成
。
在地图显示过程中,可以调用相应的
API
来实现鼠标事件响应,可以将鼠标选取点的经纬度
显示在地图左下角
。
5 结束语
GIS
据为
Google
为 代 表 的 系 统 开 发 提 供 了 便 利
地图的在线服务以及开放的基础地理数
利 用
语言在批量数据处理方面的优势,能够有效
Python
地实现瓦片数据的拼接,优化地图实时显示和交互
基于此,能够结合测绘行业的具体需求进行
操作
功能定制,进一步完善测绘系统的功能和显示性能,
对海洋环境要素研究具有一定的促进作用
。
。
。
参考文献:
[
] 刘 磊,仇菊香,吴国洋
1
.
基于
Google
地理信息公共服务平台的设计与实现[
]
J
.
化,
) :
(
,
27
2011
1
10-13.
地图服务的城市
测绘标准
[
] 方 成,王春晖,吴延明
2
. Google Earth
]
道路设计中的应用研究[
J
.
中外公路,
卫星影像图在
) :
(
,
31
2011
2
1-4.
[
] 李 军,蒋红燕,郭晋宁,等
.
3
海洋测绘,
]
和应用研究[
J
.
[
] 贾建军,李 钏,李庆伟
4
.
海岸带卫星影像的处理
(
,
30
4
) :
2010
44-47.
现代技术发展对海图质量的
]
影响与对策[
J
.
海洋测绘,
2011
[
] 司 维,曾军崴,谭颖华
5
. Python
(
3
) :
,
31
77-79.
基础教程[
M
]
.
第
2
北京: 人民邮电出版社,
版
.
2010.
[
] 彭海波,向洪普
6
.
基于
Python
的空间数据批量处理方
]
法[
J
.
测绘与空间地理信息,
4
[
] 国家地理信息公共服务平台总体技术组
7
2011
.
(
,
34
) :
81-84.
电子地图数
据规范( 试行版)
地图学[
M
[
] 祝国瑞
8
.
]
.
. 2010. 7.
武汉: 武汉大学出版社,
2004.
Implementation of Offline Google Map Operation Using Python
LIU Baoliang 1,
LIN Anhua2,
LI Tao 2
(
1. Naval Institute of Hydrographic Surveying and Charting
,
Nankai University
,
Tianjin 300061
,
Tianjin 300071
,
China
,
China
;
)
2. College of Information Technical Science
:
Abstract
Online Google map and open map data are of benefit to GIS system development. In this paper
,
the
offline Google map tile data are processed using Python programming language. Some map operations are
implemented including map tile stitching
mouse response. It is very important to mapping
Key words
Google map
offline
map tile
map operation
:
;
;
;
,
2D /3D map sw itching
,
map moving
,
map zooming
,
track draw ing and
,
real time display and human-computer interaction.