科学出版社分享 http://blog.sciencenet.cn/u/sciencepress 中国最大的综合性科技出版机构之一,科学家的出版社!

博文

Python 与开源 GIS : 数据处理、空间分析与地图制图

已有 7734 次阅读 2019-11-25 10:44 |系统分类:科研笔记

在知识经济与经济全球化的时代,地理空间信息是现代社会的战略性信息资源,地理空间信息产业已成为现代知识经济的重要组成部分。

 
因此,充分利用国际开源地理空间信息技术与资源,从底层入手,面向行业应用需求,则有可能实现我国地理信息系统( geographic information system , GIS )技术的跨越发展,突破核心关键技术的封锁,推进我国地理空间信息产业的新发展。开源 GIS 的发展较早,现在技术体系也已经比较完善,在数据处理、制图、 Web应用中都有所发展,在国外的学校、科研机构以及商业中都有应用。但是在国内,由于宣传力度不够,以及国人版权意识淡薄的原因,从学校到企业,对开源 GIS的了解都相对较少。国际开源地理空间基金会( Open Source Geospatial founda-tion ,OSGeo )中国中心作为国内开源 GIS 的推广组织,现在也只是由几名技术爱好者在推动。
 
GIS 业界已逐渐认识到数据采集和生产是建立 GIS 的一项最大的投资。从国内的现状来看, GIS 的数据处理还是采用人工处理方式,但是在处理过程中使用编程方式已经越来越普遍了。

在编程方面,  Python 现在比较热, 《Python与开源 GIS : 数据处理、空间分析与地图制图》是国内第一本"Python+地理信息开发"  方面(不限于开源)的图书   


在开源GIS方面,目前国内的书有限, 有 《GDAL源码剖析与开发指南 》,《开源GIS与空间数据库实战教程》, 以及与 WebGIS相关的 OpenLayers 几本书。 


作为国内首本"Python+地理信息开发"的图书,非常值得期待。


home.png


王卷乐研究员为本书作序


“夫地形者,兵之助也。”这是《孙子兵法·地形篇》中的一句话。自古以来,地理信息就是一国重要的信息资源。如何处理这些信息资源,需要科学技术的支持。从早期的计里画方制图,到后来的手扶跟踪数字化处理,再到后来的地理信息系统,都是在解决地理信息的数据处理问题。大数据时代的到来,既提供了海量地理信息数据获取和使用的机会,更是提出了技术处理能力的需求。

引进与使用开源GIS软件是一种可以快速实现地理信息数据处理技术突破的开放的、有效的的方法,而且开源软件的开发没有商业公司的生存压力,在很多方面有先进的理论与实现,非常有利于学生与技术人员掌握与使用。

卜坤博士多年来致力于推广开源GIS应用,开展了许多实践研究和应用。在此过程中,我也与他有一些实际合作,学到许多知识。据我的一些了解,他先后参加和承担了国际科联世界数据系统(WDS)-中国中心门户和WDS可再资源与环境世界数据中心网络平台建设、联合国教科文组织(UNESCO)-国际工程科技术知识中心防灾减灾知识服务系统网站平台建设、中国科学院大数据驱动的资源学科领域创新示范平台网站建设、一带一路国际科学家联盟平台网站建设等。这些平台建设和应用集中体现了开源GIS在数据管理、处理、分析、可视化等方面的技术。

除此之外,卜坤博士还积极参加许多相关的公益性工作,包括OSGeo 中国中心网站维护、开源GIS文档翻译和编写等,为国内开源GIS社区的发展做出自己的努力和贡献。

本书正是结合他这些年的实践开发工作而著,内容涉及开源GIS应用、WebGIS开发、地理信息科学数据共享等。非常值得一读!也值得操作实践!特此给大家推荐以为序。


中国科学院地理科学与资源研究所 王卷乐 研究员



作者有话说
终于出版了,但终归是不完美的。我想,大多数的作者在自己写的书出版之后,都会有这样的感觉吧。写一本书会很难,但是时间之久,修改之多,还是远远超出了自己的预计。自2006年OSGeo中国中心成立之初我就开始了解并在学习工作中开始使用Python与开源GIS相关技术,逐渐的积累、归纳,形成一些技术文档的积累。到2013年左右,渐渐地梳理出框架, 与科学出版社进行联系,并大致取得出版的意向;后面经过选题等流程,到2014年基本确定下来;中间由于一些变动,到2017年10月份才签订了合同;而最终出版,则已经到了2019年11月份。

地理信息系统是我的专业,个人更多的侧重于技术方面,总是觉得原理方面的教程在技术方面缺少实际的案例,技术方面的书籍又缺少理论方面的基础,这样导致GIS专业的学生动手能力弱,而计算机方面的技术人员做的又不深入。在学习与工作过程中,我发现得益于 Python 优雅的语法与强大的表现力,结合文字说明,可以很好地将技术概念与细节表达出来,非常适合写成教材。所以想写一本理论与应用结合的书,通过实际的操作与理论结合起来。这是初衷,但是实际写的时候,理论方面并不能铺垫太多,有很多的问题说明的也不算透彻,没有时间与精力深入下去。实际上到了最后,只能算是咬着牙坚持完成出版的校对了。

写书,也是一个自我反思的过程。自己的技术水平并没有多高,只是兴趣广泛,涉猎较多,在开源GIS的体系与结构方面有一些体会。这本书对于开源GIS技术框架的梳理可能会更有用一些,希望能够帮助到更多的人,使得开源GIS得到更多的应用。


正文抢先看

640.webp.jpg
 


相关配套资源


网址:https://www.osgeo.cn/pygis/

本书有专门的配套网站, 网站的开发是为了宣传Python在开源GIS中的应用,主要作为专著《Python与开源GIS》的补充。在书中用到了一些资源,以及超出内容之外的一些技术,需要进一步说明。

作为应用方面的著作,书中用到一些数据,并有代码,这些资源都可以从网站上下载,并且在网站上内容也会有相应更新。资源包括源代码、预览PDF、配套数据、相关课件、VirtualBox镜像。

图书的撰写与网站中内容的制作是独立的,由于时间有限,网站的很多内容不能及时更新,也存在有多种问题,阅读时请多注意。

 


本文摘编自卜坤《Python与开源 GIS : 数据处理、空间分析与地图制图》(北京:科学出版社, 2019.11)一书,内容有删减。

home.png

ISBN 978-7-03-062927-2

责任编辑: 陈 静 董素芹


《Python与开源 GIS : 数据处理、空间分析与地图制图》主要以空间数据的处理、分析以及地图制图为主线。在选择内容时,以目前最为经典、常用的类库为主,目的是为了给初学者对基本的概念进行系统的讲解。

本书从应用开发角度,根据作者几年的工作经验,介绍 Python 语言在开源 GIS 中的应用。希望能够籍此机会,使得开源 GIS 能够得到应用,并进一步推广开源GIS 的理念与技术。

因为选题时限定了Python,因此,在内容的取舍上,很大程度依赖于已经存在的Python的类库与程序,这样会在某种程度上破坏主线的完整性,另外,在介绍不同的类库与程序时,不可避免地会受到已有知识与术语的左右。

本书内容适合地理信息专业学生、研究人员、开发人员阅读。书中代码经过了测试,可以在主流的 Linux 操作系统中运行;在 Windows 系统中大部分也可以运行。

目录

前言
第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
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
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
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 在命令行中使用SpatiaLiteShell 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
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
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
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
彩图


本期编辑王芳


640.webp (3).jpg

一起阅读科学!

科学出版社│微信ID:sciencepress-cspm

专业品质  学术价值

原创好读  科学品味



https://wap.sciencenet.cn/blog-528739-1207476.html

上一篇:持续耕耘丨高超声速,从理论到飞行:乐嘉陵院士研究论文选集
下一篇:肠道菌群对肠易激综合征发病有什么影响?
收藏 IP: 124.17.26.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 17:34

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部