什么是 Shapefile

ESRI Shapefile(shp),或简称shapefile,是美国环境系统研究所公司(ESRI)开发的一种空间数据开放格式。目前,该文件格式已经成为了地理信息软件界的一个开放标准,这表明ESRI公司在全球的地理信息系统市场的重要性。 —–维基百科

为什么要操作 Shapefile

Shapefile 中包括了许多地理信息, 例如道路信息, 商业区, 住宅区等等, 有时为了利用这些数据进行分析, 就可以从 Shapefile 中获取信息.

Shapefile 的构成

一般来说, 如果想要获取数据, 主要关注的是两类文件, ‘.shp’ 文件和 ‘.dbf’ 文件, 其中又以 ‘.shp’ 文件更为重要, 其中存储了许多关于空间对象的属性, 例如河流的名字, 商店的经纬度等等.

如何使用 Python 处理

作为集体智慧编程代表的 Python 语言, 那当然是已经有人提供了专门用来处理 Shapefile 的第三方库了.

Python Shapefile Library 就是比较常见的选择, 其官方文档可以参考: Python Shapefile Library, 下面简单介绍一下如何使用, 更复杂的使用官方文档都有提及.

在使用之前需要安装 PyShp, 使用 pip install pyshp或者 conda install pyshp 安装.

接下来我们以一个商店文件(shop.shp)为例, 要求提取其中所有商店的经纬度, 主要的代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import shapefile

filename = 'shop.shp'

sf = shapefile.Reader(filename)
records = sf.records() # 获取数据记录
print(len(records)) # 输出记录长度

print(records[2]) # 输出第三条记录

# 在输出的记录中找到经纬度, 假设经纬度分别是第三四个属性

for r in records:
print(r[2:4]) # 输出经纬度记录, python 切片是左闭右开的一个区间

自此, 我们就在屏幕上输出了全部商店的经纬度信息, 更进一步的使用可以参考官方文档.

补充

其实除了 Python, 像 ArcGIS 等软件也都能做到类似的事情, 但是一方面这类软件大多为私有软件, 另外一方面, 在这些软件的基础上进行二次开发是一件比较麻烦的事情, 使用第三方的开源软件, 例如 Python, 处理 Shapefile, 能够减少很多不必要的支出, 当然, 如果你只是想看一眼地图的话, 那还是使用专门的软件吧, 这里推荐一个开源的选择: QGIS, 更多信息请参考: Welcome to the QGIS project!

20181206更新

polygon - How to read a shapefile in Python? - Geographic Information Systems Stack Exchange

20190528 更新: 两个更受欢迎的地理信息处理库