如何利用GDAL实现Shapefile到GeoJSON的GIS矢量数据读写与空间分析?
摘要:通过 GDALOGR 实现了 GIS 矢量数据的完整处理流程——从 Shapefile 读取、WGS84 到 Web 墨卡托坐标转换,到 GeoJSON 写入,并演示了点与多边形拓扑关系(如 Contains)的判断方法。
本文节选自作者新书《GIS基础原理与技术实践》第4章,系统讲解矢量数据开发基础,涵盖 OGR/GDAL 使用、坐标转换、拓扑判断等实战内容。
4.4 矢量数据开发基础
通过之前的介绍,相信读者已经对于GIS的矢量数据有了一个全面的认识,尽管可能不是那么深入。但是没有关系,我们可以在实际的开发过程中加深对其的认识。
4.4.1 第三方开源库OGR/GDAL
在第3章的时候,我们小试牛刀,通过第三方开源库PROJ/GDAL很简单的就实现了地理空间参考系统的相互转换。在这里同样如此,我们可以通过GDAL的OGR组件,轻松实现GIS矢量数据的基础开发。
OGR曾经是一个独立的矢量IO库,表示OpenGIS Simple Features Reference Implementation的意思,但其实OGR不完全符合OGC的Simple Feature标准规范,因此未被批准作为该规范的参考实现(当然也非常接近规范了)。从GDAL2.0开始,GDAL和OGR组件被集成在一起。
OGR/GDAL提供了非常强大的矢量读写能力,支持市面上绝大多数矢量数据格式。在第3章我们介绍GDAL的时候就提到过,GDAL是一个GIS数据抽象库。所谓数据抽象,是指无论是哪一种具体的矢量数据格式,GDAL都会将其抽象成数据集对象(Dataset),从而可以支持读取、写出和处理操作。常用的矢量数据格式如下:
DXF/DWG:应用最广泛的几何图形数据格式,在CAD领域内用的非常多,但是缺点是缺少地理信息。
ESRI Shapefile:GIS中最常见的矢量数据格式,几乎所有的商业和开源GIS软件都支持。除了几何信息之外,还包含空间信息和属性信息。
GeoJSON:一种通过JSON来表述要素的矢量数据格式,因而很容易被JavaScript解析和处理,适用于Web端的轻量化应用。
KML:Google提出的一种基于XML标准来描述地理空间信息的数据格式(包括点、线、面、多边形和模型等),并且已经被OGC认定为开放地理信息编码标准。
在GDAL中,对数据格式的支持被封装成驱动(dirver),包括上述格式在内的数据驱动要么内嵌在GDAL中,要么通过另外的第三方库来支持。当然这些我们可以暂时不用关心,直接使用本书Github主页代码仓库中的GDAL即可。
4.4.2 矢量数据的读取、处理和写入
了解了第三方库OGR/GDAL,接下来我们就通过其实现关于GIS矢量数据的基础开发。一个很容易理解的常识是,包含GIS矢量数据在内的任何数据的操作都离不开三个过程:读取、处理和写入。因此,这里我们结合前面空间坐标参考转换的实践,实现一个简单的实例:读取一个面的矢量,然后对其进行空间参考的转换,最后重新写出一个矢量。
