5. 地理空间信息数据处理

本章介绍地理空间数据的GeoJSON格式规范和使用方法,Python中进行地理几何数据处理的GeoPandas、Shapely、GDAL库,以及专业GIS的脚本引擎-GIScript。最后,介绍通过使用这些技术进行OpenStreetMap、SRTM和TM等开放的免费数据的处理过程和方法。

5.1. 地理空间数据格式

5.1.1. GeoJSON 规范

GeoJSON是一种对各种地理数据结构进行编码的格式。GeoJSON对象可以表示几何、特征或者特征集合。GeoJSON支持下面几何类型:点、线、面、多点、多线、多面和几何集合。GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。

5.1.2. GeoJSON 编程

Python的词典和列表、元组等数据结构可以直接与JSON映射。GeoJSON完全遵循JSON规范,因此GeoJSON很容易通过Python编程操作,并且与Shapeply、Fiona、GeoPandas组合使用,完成地理空间对象和文件的I/O操作。GDAL和很多商业GIS软件也都支持GeoJSON,可以非常方便地进行数据交换,尤其是在网络服务中,有逐渐取代其它格式的趋势。

5.1.3. GeoCSV 格式

Hadoop和Spark为了便于分布式处理中数据切分,都主要按照分行处理方式设计。因此,空间数据经常保存为空间数据CSV格式,方便在分布式环境下使用。CSV格式数据域一般以"分隔和表格符\t两种常见格式,而几何对象一般采用WKT(well known text)、WKB(WKT的二进制编码)或GeoJSON格式存储,每行以回车结束。

5.2. 几何对象与地图绘制

5.2.1. Matplotlib绘制地图

Matplotlib是Python上广泛使用的绘图库,支持在Jupyter Notebook中绘图,安装basemap包后,可以直接使用Matplotlib绘制地图

5.2.2. GeoPandas内存数据集

GeoPandas内存数据集派生于Pandas数据类,增加GeoSeries对象,可以存储Geometry地理空间几何对象。GeoPandas的Geometry对象采用GeoJSON格式存储,非常便于在Python中操作,详细请参考GeoPandas.org

5.2.3. Shapely几何对象运算

Shapely提供地理几何对象数据结构、编解码及对象之间的几何代数运算。Shapely工程源代码可以直接下载、编译、安装,文档参见:http://toblerity.org/shapely/project.html

5.2.4. Fiona几何对象操作

Fiona库提供几何对象操作和Shape文件的读写功能,基于OGR实现的简洁的Python API对象接口,详情可以查看文档源代码

5.3. GDAL库安装与使用

GDAL是一个广泛使用的地理空间数据对象和文件读写的支持库,其本身完全开源而且被整合到了很多开源软件和商业GIS软件中,详情查看GDAL库安装与使用,可以查看和下载GDAL的Geometry使用教程进行研究和练习。

5.4. GIScript安装与使用

GIScript是专业GIS脚本引擎,提供数据交换、数据管理、制图和分析等丰富的功能,支持在Jupyter notebook和Spark环境下使用,支持Linux和Windows操作系统,请参考GIScript安装与使用

5.5. OSM开源地图数据处理

OSM是OpenStreetMap的众包开放地图,原始数据采用xml格式进行存储。这里提供的教程包括:OSM数据下载与结构分析Overpass在线API使用OSM流式转为行存储JSON,所生成的行式存储数据可以在PySpark中数据查询构建Geometry和进行更高级的组合分析。

5.6. SRTM地形高程数据处理

这里介绍SRTM地形高程数据处理方法,将实现数据的下载、转为GeoTif、设置投影等基本操作,以及进行渲染立体图、解译等高线等高级功能。

5.7. 影像数据处理与挖掘

Python中有丰富的影像处理模块,这里以TM影像处理为例,进行影像处理方法的介绍。影像的高级处理、土地分类、对象识别、机器学习等将在后续的专题中另行介绍。
Rasterio是读写地理空间信息栅格数据集的工具。Rasterio采用GDAL进行文件I/O和栅格文件格式的操作。典型功能是接受和返回Numpy的ndarray数据对象。Rasterio设计为提高地理空间栅格文件处理的生产率,让其处理变得更有趣。