引言
在python与地理空间分析(1)与(2)中我们介绍了GIS中常用的数据类型、python在处理地理空间数据时用到的包以及给定经纬度计算空间距离的算法,本期我们主要介绍对地理空间分析中常用到的矢量数据shp文件的处理,在捍卫祖国领土从每一张地图开始我们也提供较为精准的包括南海九段线的中国地图,大家可以自行下载。
Shapefile文件介绍
地理空间分析中有多种矢量数据,大家最常见的是Shapefile(.shp)文件和GeoJSON文件(常用于前端网站发布使用的地理数据格式),GeoJSON文件几乎和python的字典和列表等数据类型一模一样,可以通过python自带的json库直接解析。Shapefile文件是地理信息软件公司Esri在1998年作为一种开放规范发布的矢量数据格式,并逐渐成为GIS数据的一种标准,目前几乎所有的地理空间分析软件都提供对Shapefile文件的支持。Shapefile文件的结构包括多个文件,最重要的文件包括.shp,.shx,.dbf以及.prj文件:
文件扩展 | 作用 | 备注 |
.shp | 用于存储要素几何的主文件,其中包括几何图形 | 必要文件,有的软件只需要shp文件 |
.shx | 形状要素索引文件,适当尺寸的几何元素索引信息可以加快访问速度 | 必要文件必须和shp文件在一起 |
.dbf | 数据库文件,其中包含几何元素的属性信息 | 必要文件,可以通过excel打开,查看属性信息 |
.prj | 地图投影信息 | shp文件如果需要投影,必备 |
.sbn | 空间bin文件,Shapefile的索引文件 | 包含一个特征的边框 |
.sbx | .sbn文件的索引记录文件 | 常用的空间索引的有序记录索引 |
.cpg | .dbf的代码文件 | 为.dbf文件提供国际化支持 |
.shp.xml | 元数据 | 地理空间元数据.xml的容器 |
需要注意的是在拷贝shp文件时,需要至少把前4个文件一起拷贝,单独拷贝shp文件无法读取
python中提供了多种处理Shapefile文件的第三方包,例如PyShp,Shapely,Fiona,GeoPandas以及basemap和cartopy包对shp文件的可视化,但大多都是基于OGR库,因此本文主要介绍利用OGR库对shp文件的处理。
GDAL/OGR库
Geospatial Data Abstraction Library (GDAL)是使用C/C++语言编写的用于读写空间数据的一套跨平台开源库。现有的大部分GIS或者遥感平台,不论是商业软件ArcGIS,ENVI还是开源软件GRASS,QGIS,都使用了GDAL作为底层构建库。GDAL库由OGR和GDAL项目合并而来,GDAL主要用于空间栅格数据的读写,OGR主要用于空间要素矢量矢量数据的解析。此外,空间参考及其投影转换使用开源库 PROJ.4进行。OGR提供对矢量数据格式的读写支持,它所支持的文件格式包括:ESRI Shapefiles, S-57, SDTS, PostGIS,Oracle Spatial, Mapinfo mid/mif , Mapinfo TAB。
G