View
18
Download
0
Category
Preview:
Citation preview
《Python 与开源 GIS》相关资源
本书配套网站:
https://www.osgeo.cn/pygis/
关注公众号
(输入“Python与开源 GIS”获取配套资源)
资
源
类
型
获取方法 说明
源
代
码
本书源代码托管于 GitHub , 访问地址:
https://github.com/bukun/book_python_gis
运行代码需要有配
套的数据资源,请
关注公众号获取。
配
套
数
据
本书的配套数据,请关注微信公众号
(gislite),输入“Python 与开源 GIS”获
取下载方法。
数据包括全球海岸
线数据、中国分县
数据、中国主要城
市。相关数据仅作
为本书学习、实验
使用,不得作为数
据分析、地图制图
等的依据。
相
关
课
件
与 Python、开源 GIS相关的课件,请关注微
信公众号(gislite),输入“Python 与开源
GIS”获取下载方法。
包括作者在 2016
年、2017年、2018
年、2019年进行相
关培训时使用的课
件。
虚
拟
机
镜
像
本书提供虚拟机镜像作为实验环境,请关注微
信公众号(gislite),输入“Python 与开源
GIS”获取下载方法。
虚拟机使用
VirtualBOX , 在
Windows 10 64 bit
环境下制作;虚拟
机中操作系统为
Debian Buster(10)
64 bit。
Python 与开源 GIS ——数据处理、空间分析与地图制图
卜 坤 著
北 京
�
������������������������������������
������������������������������������
������������������������������������
�GIS����������������������������������
�������������������������������
������� GIS ������������������������
�����������������������������������
�����������������������
������������ GIS ��������������
��������������������������������
��������������ICSU-WDS������� WDS ����
���������� ������������UNESCO��
�������������������� ����� ����
�������������� ��������������
������ ��� ����� GIS��������� �����
�������
������������������ ���� OSGeo ���
��� ��� GIS ������������ GIS �������
���� ��
����������������� ������ GIS���WebGIS
��������������������������������
�����
���
���� ��������� ��
�������������� ��
� �
�� �� ��������������������� ���
�������������� ����� �
��� ���������������������������
�������������������geographic information system�GIS��
����������������������������������
�� GIS����������� �������������Web
�������������������������� �����
������������������������������� GIS
���������������������Open Source Geospatial founda-
tion�OSGeo����������� GIS ����������������
������
GIS ��� ���� ���� GIS ���������
�������GIS������� �������� ���������
��� �������
����������
�1����� Latex� Python 3��������� Python���� Latex
���������� �������������� �
�2�������������������������
�3���������������� ��������������
� Debian 9�Ubuntu 18.04� Debian 10�����������������
https://www.osgeo.cn/pygis�
����������� ��CKCEST-2016-3-7�CKCEST-2017-3-1�
CKCEST-2018-2-8�CKCEST-2019-3-8������ ��� ��������
������XXH13505-07�����
� �
�
��
� 1 � �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1 GIS ��� GIS ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 GIS �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.2 ���� ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.1.3 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.1.4 �� ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.1.5 �� GIS �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.1.6 ������������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.2 GIS ����������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.2.1 ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17
1.2.2 GeoTIFF �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.2.3 ������������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3 ��� �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.3.1 ������� GIS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .23
1.3.2 Debian Linux �� �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.3.3 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.3.4 ���� IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26
1.4 Python ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.4.1 Python � �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
1.4.2 Python �������������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
1.4.3 �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
1.4.4 Python �������������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1.5 ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
� 2 � �� GDAL ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.1 GDAL �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
2.1.1 GDAL �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
2.1.2 GDAL ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
2.2 �� GDAL ����� �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
· vi · Python ��� GIS —— ������� ������
2.2.1 ���� GDAL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
2.2.2 ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.2.3 �� GDAL ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.3 ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.3.1 GDAL ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.3.2 ���� ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
2.3.3 �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.4 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
2.4.1 �� CreateCopy ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .60
2.4.2 �� Create ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
2.4.3 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.4.4 GDAL ����������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.4.5 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.5 GDAL ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.5.1 GDAL � Pillow ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.5.2 GDAL �� �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.5.3 ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73
2.5.4 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
2.5.5 GDAL ��������������� . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
� 3 � �� OGR ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
3.1 OGR �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .81
3.1.1 OGR ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
3.1.2 � Python �� OGR ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .83
3.2 �� OGR �� Shapefile �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.2.1 � OGR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.2.2 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.2.3 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
3.2.4 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.2.5 ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
3.3 �� OGR ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .91
3.3.1 �� OGR Shapefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.3.2 �� OGR ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
3.3.3 �� WKT �� ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.3.4 �� OGR ������ Shapefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
3.3.5 OGR � �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
� · vii ·
3.3.6 OGR �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.4 �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.4.1 ��� ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
3.4.2 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
3.4.3 � OGR ��� SQL ���� � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
3.5 �� Fiona ����������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
3.5.1 Fiona �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.5.2 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
3.5.3 Fiona ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
� 4 � ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
4.1 ����������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
4.1.1 �� ����� ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
4.1.2 PROJ.4�osgeo.osr ��������� . . . . . . . . . . . . . . . . . . . . . . . .120
4.1.3 � PROJ.4 ��� ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
4.2 PROJ.4 �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.2.1 proj ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.2.2 ���� � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
4.2.3 cs2cs ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .130
4.2.4 geod ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
4.3 � Python ��� PROJ.4� � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
4.3.1 Proj � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .134
4.3.2 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
4.3.3 Geod ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
4.4 osgeo.osr����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139
4.4.1 osr �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
4.4.2 �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139
4.4.3 ����� ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .142
4.4.4 ���������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .143
4.4.5 ������������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
� 5 � ������������ Shapely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147
5.1 Shapely �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
5.1.1 JTS�GEOS � Shapely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
5.1.2 Shapely ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
5.1.3 Shapely ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
5.2 Shapely ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
· viii · Python ��� GIS —— ������� ������
5.2.1 ��� ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
5.2.2 Shapely ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
5.2.3 Shapely ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
5.3 Shapely ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
5.3.1 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
5.3.2 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
5.3.3 DE ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
5.4 �� Shapely �� ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
5.4.1 �� ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
5.4.2 ��� ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168
5.5 Shapely ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .173
5.5.1 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
5.5.2 �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.5.3 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
5.6 Shapely ����� ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
5.6.1 WKT � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
5.6.2 NumPy � Python �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
5.6.3 geo-interface � � Shapely ���� . . . . . . . . . . . . . . . . . . . . . . . . . . 178
� 6 � �� SpatiaLite ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .181
6.1 �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
6.1.1 SQLite � SpatiaLite �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
6.1.2 � ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
6.2 ������� SpatiaLite Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
6.2.1 ���� SpatiaLite ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
6.2.2 SpatiaLite ���� SQL �� ��� . . . . . . . . . . . . . . . . . . . . . . . . . .188
6.2.3 �� GIS �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
6.2.4 SpatiaLite �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
6.2.5 SpatiaLite ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .193
6.3 �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
6.3.1 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
6.3.2 ���: � SQLite ��� R-Tree. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .197
6.3.3 ������ MbrCache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
6.4 � Python ��� SpatiaLite ������ . . . . . . . . . . . . . . . . . . . . . . . . . . 203
6.4.1 � Python ��� SpatiaLite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203
6.4.2 � Shapefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
� · ix ·
6.4.3 ������� � � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
6.5 SpatiaLite ���������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
6.5.1 �� Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
6.5.2 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
6.5.3 �����MBR�. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
6.5.4 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214
6.5.5 Python � SQLite ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .217
6.5.6 ����������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
6.6 ������������� SQL �� . . . . . . . . . . . . . . . . . . . . . . . .221
6.6.1 � CSV � ��� TXT ����� SQL � . . . . . . . . . . . . . . . . . . 221
6.6.2 � Shapefile ��� SQL � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .223
6.7 SpatiaLite ����������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .225
6.7.1 �� MBR �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226
6.7.2 ����� ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
6.7.3 ��� ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .231
� 7 � GIS ����� Mapnik ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
7.1 Mapnik ������������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
7.1.1 Mapnik �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233
7.1.2 �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .233
7.1.3 Mapnik ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
7.1.4 �� XML ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239
7.2 Mapnik ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
7.2.1 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
7.2.2 ����� �� ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
7.2.3 ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
7.2.4 ���� � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
7.2.5 Mapnik �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
7.3 ������ � . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
7.3.1 ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
7.3.2 �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .248
7.3.3 �� GDAL/OGR �������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
7.3.4 ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
7.4 ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .251
7.4.1 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
7.4.2 ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
· x · Python ��� GIS —— ������� ������
7.4.3 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
7.4.4 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
7.4.5 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
7.5 ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .267
7.5.1 ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
7.5.2 ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .270
� 8 � �� Basemap ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
8.1 Basemap ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
8.1.1 �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
8.1.2 Basemap ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
8.1.3 ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
8.1.4 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
8.1.5 ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282
8.2 � Basemap ��� Matplotlib �� � . . . . . . . . . . . . . . . . . . . . . . . . . . . . .284
8.2.1 �� annotate ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
8.2.2 �� plot ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
8.2.3 �� text ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .288
8.2.4 ��� plot ��� text �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
8.3 � Basemap ��� GIS �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
8.3.1 �� Shapefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
8.3.2 � Basemap ��� DEM ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .292
8.3.3 � Basemap �������� DEM �� . . . . . . . . . . . . . . . . . . . . . . . . . 294
8.4 USGS ��������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
8.4.1 ����� �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .297
8.4.2 ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
� 9 � Python ������ GIS ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
9.1 �� PyShp �� Shapefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
9.1.1 PyShp ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
9.1.2 �� Shapefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
9.1.3 Shapefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
9.2 �� geojson�� GeoJSON�� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
9.2.1 geojson ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
9.2.2 geojson ����� ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
9.2.3 geojson ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .317
9.3 �� Descartes ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
� · xi ·
9.3.1 Descartes �� ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
9.3.2 �� Descartes �� Shapefile ��� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
9.4 �� ����� GeoPandas����� . . . . . . . . . . . . . . . . . . . . . . . . 322
9.4.1 �����GeoSeries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
9.4.2 �����GeoDataFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
9.4.3 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
9.4.4 ������� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
9.4.5 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
9.4.6 ���� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
9.5 �� Folium �� WebGIS �� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .336
9.5.1 Folium ����� . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
9.5.2 � Folium ������ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
��
�1� � �
����������������������������������
��������
�1��������geographic information system�GIS�������
�2��� GIS �������
�3����������������
�4�Python ��������
�5��������������
1.1 GIS ��� GIS �����
GIS ���������������������� 20 �� 80 ���
��GIS �������������������������������
�������������������global positioning system�GPS����
���������������
GIS����������������������������
������ GIS �������� GIS ��������������
��������� GIS �����������������
������������ GIS ���������
��� Python ��� ������� GIS ������
�����������������������������������
��������������� GIS�������� �� ��
���� GIS ������������������� ��������
���� ����
1.1.1 GIS ���
GIS��� ���� ��������������������
����� ��������������������������
�����������������������������������
���������
· 2 · Python ��� GIS —— ������ ����� �
GIS �������������� GIS ��� ��� �
�������������������������������� ��
�������������
���� �GIS �����������������������
��������� � ����������
��� ������� ������ ������ �����
�������������������������� ����
������ �������������������� �����
�� ���������� ���� ���� ����������
����� � ��������
������������������������������
����������������������� �������
�����������������������
1.� GIS �������
�� GIS���������������� �����GIS���
��� �������� �������������������
���GIS ����������� ����geospatial database�����
���������������� �����������������
��������������
���������� GIS ��������������������
�����
��������������������� ������� GIS
������������� ��������������� ����
� �layer������������theme����coverage��� GIS �
����������������������
���������������������������������
���� GIS �������� �
� ������� �������������������� ��
����� ����GIS �� ��������������computer
aided design�CAD�� ������management information system�MIS���
������� GIS �����������
� �������������GIS ����������� GIS �
���������geographic information science���������� GIS �
���������geographic information service��
� 1 � � � · 3 ·
2. GIS ���
� GIS ���������� GIS ��������������
����
������������ ���GIS �������
�1��������������� ��������������
�2������ ��������������������������
���
�3��� ���� GIS ��� �� ��������������
�����
�4�� ���� ����� � �������������
����
�5������������������� ������
GIS ��������������������������� ��
����������������������� ��������
�� ������������������� �����������
��� �� ���GIS ��� �����������������
����������� ��
�1�������������
�2���� �����������
�3����������������� ������
�4�� �������� ����� �
�5���������������������
3. GIS �����
20 �� 60 ��� �������������� �������
����� ������� ����!�������������Roger
Tomlinson��"�#���������� ��� GIS�������
��������Canada geographic information system�CGIS������
����� ����$��������������������
���
�� CGIS ������ GIS ������������������
������������������������ �����
�����������
20 ����%������ �� UNIX ���������������
������������������Environmental Systems Research In-
· 4 · Python ��� GIS —— ������ ����� �
stitute, Inc�ESRI�� MapInfo �������������� CGIS ����
�#���� �� ��� ������
� 20 ����GIS ����������������&������
���������#�������� GIS������������
�������� GIS ���� ���� ���������
4. GIS �����
�������'� GIS ����������� GIS ���� ��
����������������������������������
���� �������������������������������
����������������������������(�������
��������������������location based service�LBS��LBS
��������������)�������������������
���������������������������� ������
�����������������������������������
�����
� ������������������������ GIS ���
��� GIS����� GIS ������������������� ����
����������� ��������������� ���
�����������������������(��������
��������������������������������
1.1.2 ������������
1.��
� ������������������ ������������
����������� ����� ��������� �����
���������*� ������������ (x, y) � (x, y, z) ���
������ � ������������*� ����������
� (x1, y1), (x2, x2), · · · , (xn, yn) � (x1, y1, z1), (x2, y2, z2), · · · , (xn, yn, zn) ����
������ ��������������*���������
��� ������������� (x1, y1), (x2, y2), · · · , (xn, yn), (x1, y1) �
(x1, y1, z1), (x2, y2, z2), · · · , (xn, yn, zn), (x1, y1, z1) ���� ����� ���
����� � 10���� ��–���– ��–���–�� – � –��
–���–���–���–��
���� Python�� GIS���������� ����������
� 1 � � � · 5 ·
������������������� �������GIS��QGIS��
������������������ 3 �������
��� ����+ �����
1 >>> import os
2 >>> from osgeo import ogr
3 >>> extfile='xx_demo_point.shp'
���� Shapefile��� GIS����� �� 1.2.3����������
1 >>> driver=ogr.GetDriverByName ("ESRI Shapefile ")
2 >>> if os.access(extfile , os.F_OK):
3 >>> driver.DeleteDataSource (extfile)
4 >>> newds=driver.CreateDataSource (extfile)
5 >>> layernew =newds.CreateLayer ('point', None , ogr.wkbPoint)
������������������
1 >>> fieldf_x=ogr.FieldDefn ("x", ogr. OFTReal)
2 >>> fieldf_y=ogr.FieldDefn ("y", ogr. OFTReal)
3 >>> layernew .CreateField (fieldf_x)
4 >>> layernew .CreateField (fieldf_y)
������������ �������������
1 >>> point_coors =[[300, 450] , [750 , 700] , [1200 , 450] ,
2 ... [750 , 200] , [750 , 450]]
3 >>> for pt in point_coors:
4 >>> geom=ogr. CreateGeometryFromWkt (
5 ... 'POINT ({0} {1}) '.format(pt[0], pt [1]))
6 >>> feat=ogr.Feature(layernew .GetLayerDefn ())
7 >>> feat.SetField('x', pt[0])
8 >>> feat.SetField('y', pt[1])
9 >>> feat.SetGeometry (geom)
10 >>> layernew.CreateFeature (feat)
11 >>> newds.Destroy()
�����������fieldf_x�fieldf_y�������������
��� �feat.SetGeometry(geom)�������� ����������
� QGIS�� Quantum GIS������������ GIS������ Linux�UNIX�Mac
OS�Windows ������������� ��������� ���� http://qgis.org�
· 6 · Python ��� GIS —— ������ ����� �
����� 1.1���������������������������
������������� ��
� 1.1 ��������
2.��
������� ��������� ����� ������
����� GIS �������������
�������������������������������
��������� ���������������� ���������
����������������������������������
��������������� ������������������
�����������������������������������
�� ��������� ���������
3.��
������ �������������������� ������
����� �� ������������������� ����
���������� ���������������������
��� ���������������� �
��� �� ���� GIS �������� ���������
���������������������������������
����� ���������� ���
4.���
��������������������������
��������������� �����������
���������������������������������
�������������������������� ����
������� ���
SF =a
b
� 1 � � � · 7 ·
��a �������b �������� �����������
������������� 2 ���������������
���������������������������,�
� ��������������������������
�1 : 10000 �� ��� 1cm ��������� 10000cm�
1.1.3 ����
�������������– ��� ������
������������� ����� �����������
����������
GIS����������������������������
��������� 1.2������������������
����� �� GIS ��������������� GIS �������
�����-� ������������������������ GIS �
������������GIS�������������������
�����
� 1.2 ����
�������������� ��������� GIS ������
��������������������� ������ ���
��������������������� ��������
1.���������
�������������������� ��������
����������������������� ������
�������������������� ��
������������� (ϕ, λ)�� �� ���������
����� (x, y) ���� ��������������������
· 8 · Python ��� GIS —— ������ ����� �
���� ��������� �1.1����� ������
x = f1(ϕ, λ)
y = f2(ϕ, λ)�1.1�
������������ ���� ������������
��������� ����������������������
����������� ����� ��������� �����
������������������������������
����������� �������� ������
����������������� �������������
������������������������� �������
����� ��������������������� �����
������������������������ ���������
��������
�������������������� ��������
��������������������� �� ����� �
� ������������ 90◦��� �������� ���
����������
2.������
������������� ��� 1.3��
� 1.3 �������
������������������������������
����������������������������������
�������������������
����� ���� �������������������
��������!����������)�"� ����������
����� ���� ��������� �������������
�� ����������� ������������ �����
��� 1.4��
� 1 � � � · 9 ·
���� ������������� ����������
���������������������������������
����������������������� ����������
������������������������������������
����������
� 1.4 ��������������
�������������������� 1.5���������
����� �� ������ ���� � �������
���
� 1.5 �������
3.��������
�������������������������������
�����������������#�����������
1���–�����
��–������ ������������ 19 �� 20 �
�2� � GDAL ������
����������������������������
���������������������������������
�� GDAL/OGR����������������������
�# GDAL��������� ������OGR ������
�������������������������$���� GDAL�
�����������,����%�������� GDAL/OGR��
� GDAL �������������� OGR ������������
���� 1998 �����������!������������
�application programming interface�API���������GDAL �����
��� ���������������GDAL/OGR ������
������������� MapServer�GRASS�QGIS�MapGuide�OSSIM �
OpenEV ������GDAL/OGR ���������������� FME�
ArcGIS � Cadcorp SIS�
���$� GDAL �������������� Python ������
� GDAL/OGR � Python ������� 5 ������ gdal�ogr�osr�
gdal_array� gdalconst�
������������
�1�GDAL ����������������
�2�������
�3���1��������
�4������ ��
�5�����##��
�6����������
�7�GDAL ��� Python �������
2.1 GDAL ��
GDAL �� C++ �� ���������� ����� �GDAL
���������������������� ��������
��������
� 2 � �� GDAL ������ · 43 ·
GDAL �� C++ ��������� Python ������GDAL �
������ SWIG�simplified wrapper and interface generator����� Python
� GDAL/OGR��������Python������ C++�������
GDAL����� 200������������������ ��
��� ArcInfo Grids�ERDAS Imagine�IDRISI�ENVI�GRASS�GeoTIFF�HDF4�
HDF5�ECW�MrSID�������� �� PNG�JPEG�TIFF���
2.1.1 GDAL ���
GDAL�������������� ����������� ���
��������� �GDAL �������������������
������ �
GDAL �� Python ����� Python � ��!��������
NumPy ����������������������������
1. GDAL ��
GDAL ����� ���� �������������� �
�� � "������������������ ��� ���
����������������������� OGC������
��� ����$��
���������� ������&�������������
����������� ��������"����������
GDAL � OGC �������� OGC ��� C++ API �������
���� OGC ������������� OGC ������������
���������������
2. GDAL �����
GDAL���������abstract data model����������� �
������������dataset�������coordinate system��!,���
��affine geo transform���� ��GCP������metadata������
�subdatasets domain���� ��image structure domain������ ��
�RPC�rational polynomial coefficient�domain�����imagery domain����
� ��XML �XML domains����1��raster band��##��color table�
�����overviews��
GDAL ��������
� SWIG ���)�������� C/C++ �������������Python�
Ruby�Perl�Java�C#������������������������
· 44 · Python ��� GIS —— ������ ����� �
�1�GDALMajorObject ����������
�2�GDALDataset ���������������1��
���1������GDALDataset �*����1���������geo-
referencing transform��������
�3�GDALDriver ���� ����GDAL ����������
���� ����� � �� �
�4�GDALDriverManager���� �� ����� � GDALDriver��
3. GDAL �������
� GDAL 1.9.0 ��GDAL � 120 ������� ���������
����� ��� 200 ��� GDAL ����������������
��������������
� 2.1��� GDAL����������� ��� GDAL���
������������� ���� GDAL ������ �����
2.1.2 GDAL ����
GDAL ��������������� ����������
��������$��
1. GDAL ���
������� GDAL ������������1�������
���� �������������1�� �����*��1����
�������������������������� ���
�/�����
GDAL ������1������� OGC � ����
2.����
GDAL��������� OpenGIS WKT� �������������
�3� �� OGR �������
OGR������������������� GDAL������� 2�
���� GDAL ������������������� OGR ������
�����������������
�������������� GEOS �geometry engine - open source��
�������GEOS � JTS �JTS topology suite��������� C++ �
������ OpenGIS ������������ JTS ���������
�����GEOS ���������� C++ ��������������
PostGIS�QGIS�GDAL/OGR�MapServer ������� FME �������
Debian ���� Linux ��������� GEOS � OGR ��������
� Python���� Shapely�����������������������
�� GEOS ���������� 5 ������
3.1 OGR ��
OGR � GDAL �������������� GIS �������OGR
�������������������� ESRI Shapefile�PostGIS�Oracle
Spatial�MapInfo MID/MIF�MapInfo TAB ���������� 3.1 ���
OGR ����������
� 3.1 OGR ���������
���� �� ��� �����
ESRI ArcObjects ArcObjects �
Arc/Info Binary Coverage AVCBin �
Arc/Info .E00 (ASCII) Coverage AVCE00 �
AutoCAD DXF DXF �
Comma Separated Value (.csv) CSV �
ESRI Shapefile ESRI Shapefile � �
Geomedia .mdb Geomedia
Google Fusion Tables GFT � �
GML GML � �
������������������������������������ GNU�GNU
is not UNIX��
· 82 · Python ��� GIS —— ��������������
�
���� �� ��� �����
GMT GMT � �
GRASS GRASS �
Idrisi Vector�.VCT� Idrisi �
KML KML � �
MapInfo File Mapinfo File � �
Memory Memory � �
PostgreSQL/PostGIS PostgreSQL/PostGIS � �
SQLite/SpatiaLite SQLite � �
VRT - Virtual Datasource VRT �
3.1.1 OGR ������
� GDAL ���OGR ���������������
�1�ogrinfo���������
�2�ogr2ogr����������
1. �� ogrinfo ��
����������� OGR ���������� OGR �����
���
1 $ ogrinfo --formats
2 Supported Formats:
3 -> "GRASS" (readonly )
4 -> "ESRI Shapefile " ( read/write)
5 ... ...
6 -> "Geoconcept " ( read/write)
�� Shapefile ���������
1 $ ogrinfo /gdata/hyd2_4l.shp
2 INFO : Open of `/gdata/hyd2 _4l.shp '
3 using driver `ESRI Shapefile ' successful .
4 1: hyd2_4l (Line String)
2. ogr2ogr����
����� ogr2ogr������
1 $ ogr2ogr -f "CSV" output.csv /gdata/hyd2 _4l.shp
� 3 � �� OGR ������� · 83 ·
������ Shapefile ������� CSV �������
����� Shapefile ��� SpatiaLite ������ 6 ���� Spa-
tiaLite������������������������ .db�����
.sqlite������� ArcGIS Desktop ������ SpatiaLite ����
��
1 $ ogr2ogr -f SQLite -dsco SPATIALITE =YES spalite.db \
2 /gdata/region_popu.shp -nlt multipolygon
3.1.2 � Python �� OGR ���
� Python ��OGR ����� �����Class��
�1������� Geometry � OpenGIS �������������
������� WKB�WKT�������������� �������
�2���� Feature ������ ������������
��� ��
�3�� ��� FeatureDefn���� �����������
��� ������� �������������
�4����� Layer �����������������
�5������ DataSource������������������
�����
�6����� Driver�������������� Driver������
3.2 �� OGR �� Shapefile ��
Shapefile ������������������� OGR ��� Shape-
file�
3.2.1 �� OGR �
� Python��� OGR������� GDAL� OGR������
������������������������������
� ����� ������������������ ����
�����
�� OGR������� GDAL�������������������
1 >>> import ogr
������� ����
�4� ���������
�������������� ����������������� GIS
��������������&���������������� GIS��
������� GIS �������������� ��������
�������� ����������������������
�� ��� � !�����������������������
�������������������'��&������������
�� ���
�������������� ����������������
�������������������������������(��
��������� ������&�������������������
������� 2�3 ����������� ����������
����������������
��� GIS ��� �������������� PROJ.4 ������
"������ GIS��������� GDAL����� PROJ.4������
��� ������ osgeo.osr��������� ���������
�������
4.1 �� ������
��������� � GIS ��������������� �
� �������
4.1.1 ���������������
�����)���������)�������� � ����
�������������������������������
�������"��������
1.����
�����#��������������������������
�����������������������������
� 4 � �� ����� · 119 ·
������ �
���������������������������� ���
�� ������������������������ ��������
$# �������*�����������������������
�����������������������������������
�������#����$��!�����������������
����������������������������������
����������
���������� ���������
2.����
���������������� ��$#���������
������������������ ������ �+����
�������������������#����%�!%��������
������������ ������� �����#�����#�
�����������������������������������
�������������
������������ �� � ���������������
���������������������������� � ����
����������������&������������
��������� ���% a�!% b������� ���
��"�� α������� e������� e′� ������⎧⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎩
α =a − b
a
e =a2 − b2
a
e′ =a2 − b2
b
�4.1�
3.���������
���� �����������������&��%�������
�������� ����������!!����� 1970 ������
��������������������������������
�����������������
4.1 ��������� ����������������� ��
�� IUGG����������������International Union of Geodesy and
Geophys��
· 120 · Python ��� GIS —— ��������������
� 4.1 ����������
����� ����� � %/m ! %/m
�� 1952 ������ ���� 6378388 6356911.9461
�& 1954 ��� �������� 6378245 6356863.0188
� 1980 ��� 1975 � IUGG �"�� 6378140 6356755.2881
WGS84,GPS ��� WGS84 �� 6378137 6356752.3142
�� 2000 ����� — 6378137 6356752.3141
4.���
�������������������������������
��ellipsoid������������� ����� ��������
�������������� ��������������������
������� �������������������������
�������� ����������
���������������� ���������������
�����������������������������������
� ���������������������� �������
�������� �
4.1.2 PROJ.4�osgeo.osr ���������
1. PROJ.4 ��
PROJ.4 ��� GIS �'���������������������
���� GIS���������� PROJ.4�����GDAL��������
�� CoordinateTransformation��������������������MIT
���� C��������$����United States Geological Survey�USGS�
� Evenden� 1980� ��������� ��� Warmerdam������
PROJ.4��������������������������
������������� PROJ.4�������,������� C/C++
���PROJ.4 ��� Python ������� pyproj����MIT ����
PROJ.4������� ����������������������
���������������� PROJ.4�������������
���� PROJ.4������ �������������������
������ ����������������������
� Warmerdam � 2008 � 5 �� PROJ.4�http://trac.osgeo.org/proj������ MetaCRS �
���������� OSGeo ����
�5� ������������ Shapely
������������������#)��� GIS !!�����
���� � �������������� �����!!����
��������������������"�������� ������
!!�����������������������!!��������
�*��������������� GIS ��������
�������������������&����������� �
������������ ��������
����� OGR��������� ��������� Python���
�������������������������������� Shapely
�����
��� Shapely ��������������������������
�������������&����������������
5.1 Shapely ��
Shapely�������� �������� OGC��������OGC’s
simple feature access specification�OGC SFS�������� shapely.geometry
����������� ��� �� point������ �� multipolygon�
�� shapely.geometry.base.BaseGeometry����BaseGeometry����
��������� impl ���������BaseGeometry.area ����
BaseGeometry.impl['area']�
����� shapely.impl��������������������
���������������� �
Shapely !!������ 4 ����
�1�� shapely.geometry���� Python �������
�2���������� ����������'��������
�������� shapely.impl��
�3�� shapely.geos�� GEOS �������
�4�"�� libgeos��� C++ ����
· 148 · Python ��� GIS —— ��������������
5.1.1 JTS�GEOS � Shapely
JTS�GEOS� Shapely ���������JTS�� Java������
����������GEOS ��� C++ ��������� Shapely ��
�� GEOS � Python ���
�� Python ������� Shapely ���������������
��!������� JTS �!���� GEOS�
����� JTS�GEOS�Shapely�������� JTS �������
1. JTS ��
JTS ������ Vivid Solutions�������� Java API ������
������������������������ OGC��������
�������������������� API�JTS ���� Java���
����������� OpenGIS ���������simple feature interface
specification�SFS�������������������������
����� ������JTS ������������ ��� � ���
�������������������������
JTS�������� GIS����� GeoTools���GeoTools�GeoServer
� uDig �"���
2. GEOS ��
GEOS������ ��� ������������GEOS�����
���� ��� ����������� ���������� ���
������ ��GEOS � JTS� C++ ��� � JTS ���������
� C++ ���� JTS �������� OpenGIS ������ SQL ���
�������������� JTS ��������
3. Shapely ��
Shapely �� GEOS ���� Python �Python �� ctypes �����
Python ���� GEOS ����Shapely �����������������
������� �������������
5.1.2 Shapely ��������
1.���������
� Shapely���������������������������
� � http://www.vividsolutions.com�
� 5 � ������������ Shapely · 149 ·
������������������������� ������
��������
��������������������
�1���������������������������������
�� 0�
�2����������������������#��������
������������������ 1�
�3�����������������������������
������������������������%��������
� 2�
����������������������!��� Shapely ��
�����
2. Shapely ������
� Shapely �������������������������
��������������Shapely �������������
�������#��������������#��������
��
3.���
���������������������� ���������
&����������� ����������� DE +������
����� 5.3.3 ��
Shapely������ GEOS��������� ����
�1����equals������ ������
�2���disjoint������ �������
�3����intersects������ ���������������
�4����touches������ ����������������
���
�5����crosses������ �������������
�6���within������ A ������� B ���
�7���contains������ B ������� A ������
�# �������
�8��&�overlaps������ �����������������
��������
�6� �� SpatiaLite �����
����������������������� GIS ��������
�����������������������������������
����������������������������� GIS �����
�������� GIS ������������������ GIS �����
�������������������
������ GIS�������������������������
Shapefile�������������������������������
���� GIS ��������� GIS �����������������
� ESRI � Coverage ����� GRASS GIS ���������������
��������������������������������
�������MySQL�PostgreSQL ������������� PostgreSQL
� PostGIS ���������������������������
��������������������������������
� SpatiaLite ������������������ ����������
Python ��������������������������������
������������������� GIS ����������
���
��� SpatiaLite������������������������
������ PostGIS �������� MySQL��������
���������� Python��� SpatiaLite�����������
�������
�1����������
�2�SpatiaLite ��������������
�3�� Python ��� SpatiaLite ������
�4�SpatiaLite �������
�5��� SpatiaLite ����������
�6��� SpatiaLite �������� ��
�����������������������������
· 182 · Python ��� GIS —— �������������
6.1 ����������
������������������������������
���������������� �����������
���������������� ISO SQL/MM�ISO/TC 211���
OGC SFSQL���������������������������
���� �����ISO/TC 211���������� � ���
���������������� SQL ����������
����������������������������
WKT ��������/�����������������������
���������������������� WKT ����
�����������������������������
������������������������������ ��
��������������������������������
� ����� ���� ���������10km ���������
� ����� ������������������������
��������� �������������������������
�������������� � �������
6.1.1 SQLite � SpatiaLite ��
���� SQLite�SpatiaLite ������
1. SQLite ��
SQLite ��� Alpha ����� 2000 � 5 �����������
SQLite 3�SQLite � ACID������������������
�� C������������������������������
������������������� KB������SQLite ����
��������������������������������
������� Windows/Linux/UNIX ������������� �
����� �� Python�PHP�Java�C#�Tcl����� ��� ��open
database connectivity�ODBC����� MySQL�PostgreSQL �����
���������SQLite �������� SQLite �������
����������������� ��������� SQLite�
� ACID�������� ���������������atomicity�����
�consistency������isolation�����durability��
� 6 � �� SpatiaLite ����� · 183 ·
������������ ���� ������Python 2.5����
��� SQLite ���
2. SpatiaLite ��
��� SpatiaLite �������������SpatiaLite � SQLite ����������SpatiaLite � �������� PostGIS ���� OGC
��������������� SQLite������������ SQLite�
�������
3. SpatiaLite ���
SpatiaLite� SQLite������������ OGC���������
���������
�1������ ������������� ����� ��� �
��� ���� �
�2���������������spatial reference identifier�SRID��
���������
�3������������������� ����
��
�4�������� WKT � WKB ���Shapefile ������
�5��������������� �������������
����� ����������������
�6� OpenGIS ������������
�7��� PROJ.4 � EPSG ���������
�8��� GNU libiconv ���������
�9��� SQLite � R-tree ������������������
MBR �����������
�10����������������������������
��� ������������������
�11�VirtualShape ��� SQLite �� Shapefile ���������
������ Shapefile���� SQL� ���������� Shapefile�
�12�VirtualText��� SQLite ����������������
����������������������� SQL � ��������
������������
� ����������� OGC � ��� OGC �����
�7� GIS ����� Mapnik ������
��������������������������������
����������� ������������������������
�������������������
�������� ���������������1��%�
���������2� ����������� ��������
����� GIS � ����������� Artem Pavlenko�����
����� Mapnik�OpenStreetMap�MapBox��'� Mapnik �������
���� ��
����� � Mapnik�Mapnik ����������������
���������%����Mapnik ���� ���������
������ ����������� GIS ��� Web ������
�� Python �������� Mapnik�����������������
Python �����������������������������
��������������
Mapnik ���������������� C++ ��������
���� Python "������������ XML �����������
�����������
Mapnik �� AGG�Anti-Grain geometry����������%��(�
������ GIS �����������"������#������
����(�����$����������� 3����scalable vector
graphics�SVG�������������� Google Maps ��������
����Mapnik ���� OpenStreetMap �������
���������
�1��� Mapnik ��������������
�2�� Mapnik ����������
�3������������ ����������
�4����������������
� 7 � GIS ����� Mapnik ����� · 233 ·
7.1 Mapnik �����������
Mapnik����������������)��������Mapnik�
�������������������� ����� ���
� Python����Mapnik������� C++����������
���� Python������������������� �����Mapnik
���� Python ������� �����* Mapnik ��� �
���������!��!���
Debian 8 ����� Mapnik 2�Mapnik 2 ���� ��������
������� �����Mapnik 2 ��� Python 2 ��������'�
� Mapnik 3 ���������Mapnik 2 � Mapnik 3 ��������
Debian 9�Ubuntu 18.04� Debian 10 ��Mapnik 3 � ����������
�������������������������
1 # aptitude install python3-mapnik
Python ���� Mapnik ������2015 �������� Node.js �
��Python � Mapnik ��� ���
7.1.1 Mapnik ��
Mapnik �����������������������������
������������������Mapnik ��������
Mapnik � API �������������� ��������� PNG
� PDF��
��� ��� Python ��������������
1 $ python3 -c "import mapnik;print (mapnik. file )"
2 /usr/lib/python3/dist -packages/mapnik/ init .py
7.1.2 ���������
Mapnik ���������������������4����
�symbolizer��� 7.1�������� ����������������
��������������������������������
�������� ���� ����4������������
���Mapnik ���������������������
� ��� � https://github.com/mapnik/mapnik/issues/2773 ���� ���
· 234 · Python ��� GIS —— �������������
� 7.1 Mapnik ����
� Mapnik���� ���������������������� �
� ��������������� CSS �� z-index ���������
�� ����
1.�����
Mapnik ����� �����������������&��
����� ��������������������� Shapefile����
������������������� � �������������
��
� GIS �������� �������������������
� ����� ����������������������������
�����������������������������
�������������������������� ����
����� ��������������������� �������
��������������������������� ������
��������#��������� ����"$������ ��
��������������� � WebGIS ��� �
2.���
��� Mapnik�������� Mapnik������ ������
��Mapnik ��� ������ Z %�������� ��������
� � �������$�� ����-��� �� �� ��������������
��������������������������������� ��� �������
�� ��� ���
�8� �� Basemap �������
�� GIS ����������������� GIS ����������
�����������������������GIS�����������
�������������������������
Matplotlib� Linux��������� 2007��������������
������ GIS����������������������������
Matplotlib ��� Basemap������Toolkit������������
��������� �
�����Basemap����������������������
���������������� GIS �����������
Matplotlib � Python ������������� NumPy ������
��Matplotlib ����������������������������
�������Matplotlib �� NumPy� SciPy�������������
�����������������
Matplotlib �� Basemap ���������������Basemap ��
� Matplotlib ���������������������������
MATLAB �����IDL����GrADS ����������� Python
��������������PyNGL� CDAT�climate data analysis tools��
8.1 Basemap ���������
����� Basemap ����������
8.1.1 ��
1. Basemap��
Basemap ��� ������� PROJ.4 ��� 4 ������
������� 25 ������������ Basemap ����
� Geos �������������������������
� Basemap � 2020 ��� Python 2.7 ������ ���2020 ��� Python 2.7 �
�� �Basemap ����� ��� Cartopy ������������������� ��
8 � �� Basemap ����� · 273 ·
��Basemap ��������������������������
���� Shapefile ����
Basemap ��������������������
Basemap ����� ��� ��� ���� CDAT � Python ��
������������������Basemap�����������
�������������������� ������
2.��
Basemap� Python������������������������
������������ pip �� �� �
� Debain/Ubuntu ��Basemap ��������� �� �
1 # apt-get install python3-mpltoolkits.basemap
������������� ���������������
Git ������� ���Basemap ��� Geos ������ Basemap ��
������ GEOS_DIR�� libgeos_c.h� geos_c.h����� �� ��
���������
8.1.2 Basemap ����
1. Basemap��������
���� Python ��� Basemap ���������������
���� Basemap� plt�������
1 >>> from mpl_toolkits.basemap import Basemap
2 >>> import matplotlib .pyplot as plt
����� �����
1 >>> bsmap=Basemap()
��� Basemap�������� �����������
�� ����� (0, 0)� Plate Carree�� �������� ��
��������� drawcoastlines()�������
1 >>> bsmap.drawcoastlines ()
2 >>> plt.show ()
� CDAT � Python ��cdat-lite���������� ��� 6.0.1���� 2015 � 12 ��
� ������������������� Plate Carree ������ Ptolemy ���
������x=lon; y=lat����������������������������
������
· 274 · Python ��� GIS —— ����� �����
���������������������� ����Matp-
lotlib ������������������������� plt.savefig
(file_name)��������������� show() ��������
������ ����
��������������������� 8.1����������
���������
1 >>> plt.savefig('xx_test.png')
� 8.1 ����
2.� Basemap�������
������������������������������
�������������������������������
� Basemap ������������ �������������
�ortho��� ��drawmapboundary()�������
1 >>> bsmap=Basemap(projection ='ortho',lat_0=0, lon_0=105)
2 >>> bsmap.drawmapboundary (fill_color='aqua ')
3.����������
���� ���������������������
�� fillcontinents()����color ��������� �� gry�
lake_color��������������� aqua����������
������������ 8.2��
1 >>> bsmap.fillcontinents (color= 'coral',lake_color='aqua ')
�9� Python ������ GIS ���
��� GIS �������� Python ��������������
���� PyShp�GeoJSON�Descartes�GeoPandas�Folium������
���� ���������
PyShp���� Shapefile � �GeoJSON� �� GeoJSON������
�Descartes �������GeoPandas ����������Folium �
� Web �� �������
9.1 �� PyShp � Shapefile
��� PyShp�Python Shapefile Library�������� Shapefile ���
� Python��OGR��������#����� �� ������ PyShp
��� Shapefile�������������
9.1.1 PyShp ������
PyShp���� Python��� Python 2.4-3.x������ Shapefile�.shp�
.shx�.dbf ���� �� ������ ������ ���������
�������� ��������������
PyShp �������� Google Code������ GitHub�https://git-
hub.com/GeospatialPython/pyshp����������PyShp ��� Reader�
Writer � Editor ������ Shapefile ��� �!����� PyShp 2.0
�� �������� Editor����� Reader�� Writer�����
�� �� Debian 10 ���������� PyShp ���
1 # aptitude install python3-pyshp
Debian 9� Ubuntu 18.04���� PyShp��� �� �������
�������� ��� PyShp ����� pip �� �� �
1 $ pip3 install pyshp
������ Python ����� ��������� shapefile�
1 >>> import shapefile
9 � Python ������ GIS ��� · 303 ·
9.1.2 �� Shapefile
PyShp ��� Reader ����� Shapefile ������������
� Shapefile ������������
�����������������������������
������������������������������
�parts�������������
����� 4 ����
�1������shapeType���� ��������������shapeType
=1��shapeType=3����shapeType=5��
�2��� ��bbox������������� ����� ��
�3�����parts����������� ����������
�������
�4����points���� ������������
���������������������� ���������
���������������
1.�������� Shapefile
���� Shapefile� ������� Reader�������� Shapefile�
��������������!����Shapefile�����������
����������� .shp � .dbf ����
1 >>> import shapefile
2 >>> sf=shapefile .Reader("/gdata/GSHHS_c")
3 >>> sf2=shapefile .Reader("/gdata/GSHHS_c.shp")
4 >>> sf3=shapefile .Reader("/gdata/GSHHS_c.dbf")
��������"������������������ OGR
�������� OGR�����������#������������
�����
� Python��������������� Shapefile������
������� ��������������� URL�ZIP�����
�������������� Shapefile�
1 >>> myshp=open("/gdata/GSHHS_c.shp", "rb")
2 >>> mydbf=open("/gdata/GSHHS_c.dbf", "rb")
3 >>> r=shapefile .Reader(shp=myshp , dbf=mydbf)
· 304 · Python ��� GIS —— ����� �����
� ����������.shx������.shx��� Shapefile�����
����������������� ���� Shapefile�������.shx
����� PyShp �����������
2.���������
Shapefile ������� �����������������
Shapefile ������Shapefile �������� Reader�� shapes()�
shape()�����shapes()���������������������
������������ shape() �����������������
�������
������� shapes()��� Shapefile ����
1 >>> shapes=sf.shapes()
2 >>> len(shapes)
3 3784
���� iterShapes()��!� Shapefile �����
1 >>> len(list(sf.iterShapes ()))
2 3784
�� shapeType�bbox�points�parts�������������
���������������
1 >>> for name in dir(shapes [3]):
2 ... if not name.startswith ('__'):
3 ... name
4 'bbox '
5 'parts'
6 'points '
7 'shapeType '
����������������
1 >>> shapes [3]. shapeType
2 5
��� shapeType���shapeType ��� Shapefile � �������
���
������������bbox ����������������
���� shapeType ��shapeType ==0�� �� AttributeError�����
� �
� 8.20 ������
� 8.21 �������
� 8.24 �����������
� 9.6 ������
� 9.7 ���������� � 9.8 ���������
� 9.10 GeoPandas ��������
� 9.11 GeoPandas � union �����
� 9.15 GeoPandas � identity �����
Recommended