前言:Python平台涉及到地理空间处理库不少,有泰斗级的 GDAL,也有较为小巧精致的 Fiona 和 Shapely,也有和ArcGIS 捆绑在一起的 ArcPy。选择合适的库能事半功倍... |
地理空间处理库
地理空间处理(geospatial processing),你叫它什么都可以,地理空间分析、或者直接叫 GIS 都可以。
地理空间处理在 Python 平台上已经有很长的发展历史,有各种各样的库、包,大部分都早于 ArcPy。
根据 PyPi 的官网统计,GIS 领域涉及的 Python 库已经超过800个了。下面我们就挑几个较为知名和活跃的库来讲一讲。
PyPi中的 GIS 库:https://pypi.org/search/?c=Topic%20::%20Scientific/Engineering%20::%20GIS
GDAL
GDAL is a C++ translator library for more than 200 raster and vector geospatial data formats.
Geospatial Data Abstraction Library (GDAL),即地理空间数据抽象库,我这里在说 GDAL 的时候也包括了 OGR 库(处理矢量数据),即 GDAL/OGR。这是一个跨平台计算机库,使用开源协议,提供多个语言的 API 接口,包括 Python。其发展历史源远流长、影响深远,最早诞生于90年代,提供了一整套统一的 API 读写接口,能读取、分析处理矢量和栅格数据。GDAL/OGR 在整个地理空间分析的影响力非常大。
上百个知名的大型软件项目使用了 GDAL 库,比如 ESRI ArcGIS 9.2+后的版本、QGIS(最火的开源GIS软件)、ERDAS ER Viewe、GdeDa(探索性分析软件)、FME(数据处理、流程化的利器)、mapinfo 、Grass 等等,太多了,更别说难以估计的各种小型项目。
GDAL是大型项目以及有较强编程能力者的选择。
但是我没有选择,因为我不是专业的,也没有秃顶。同时该教程是针对小型程序的。
但是如果感兴趣的话,可以自行了解学习。
-
WIKI百科:https://en.wikipedia.org/wiki/GDAL
-
官方文档:https://gdal.org/index.html
-
GitHub:https://github.com/OSGeo/gdal
PySAL
PySAL 是 Python 空间分析库,是一个面向地理空间数据科学的开源跨平台库。
它支持空间分析高级应用程序的开发,例如:
-
空间簇、热点和异常点的检测;
-
从空间数据构建图形;
-
地理嵌入网络的空间回归与统计建模;
-
空间计量经济学;
-
探索性时空数据分析。
-
PySAL 官网:https://pysal.org/
PyShp
完全使用 Python 实现的库,功能简单小巧;可以用于读写 shapefile 格式的数据,不支持几何操作。
Fiona
Fiona is designed to be simple and dependable.
OGR 库的再封装产品,提供了一套简单易于使用的 Python 接口。该模块支持操作几何、空间分析等操作。
-
Fiona GitHub:https://github.com/Toblerity/Fiona
-
Fiona 文档:https://fiona.readthedocs.io/en/stable/
PostGIS
PostGIS adds support for geographic objects to the PostgreSQL object-relational database.
PostGIS 是在 PostgreSQL(一款免费开源的数据库) 基础上结合 GEOS(开源几何引擎)实现对地理空间数据支持的空间数据库。PostGIS 不仅提供数据的存储功能同时也提供几何处理、空间分析功能。
PostGIS凭借着开源以及性能出众,庞大的社区支持,形成了一个正向的循环反馈,目前非常活跃,有兴趣的可以多关注。
-
PosyGIS 官网:http://www.postgis.org/
Shapely
Shapely 是具有 Python 风格(简洁清晰)的几何处理库。Shapely 是 GEOS 库的 Python 语言高级接口。提供大量的几何操作功能。
-
Shapely 官方文档:https://shapely.readthedocs.io/en/latest/
-
Shapely GitHub:https://github.com/Toblerity/Shapely
选择ArcPy
ArcGIS 10 中引入了 ArcPy,这是一个 Python 站点包,它涵盖并进一步加强了 ArcGIS 9.2 中所采用的 arcgisscripting 模块的功能。ArcPy 提供了一种用于开发 Python 脚本的功能丰富的动态环境,同时提供每个函数、模块和类的代码实现和集成文档。
使用以 ArcPy 编写的 ArcGIS 应用程序和脚本的优势在于,可以访问并使用由来自多种不同领域的 GIS 专业人员和程序员开发的大量 Python 模块。使用 Python 中的 ArcPy 的另一个主要原因是,Python 是一种通用的编程语言,易于学习和使用。通过解释和动态输入这种编程语言,用户可以在交互式环境中快速地创建脚本原型并进行测试,同时这种编程语言功能强大,可编写大型应用程序。
——ESRI
选择 ArcPy 不表示其他的库不好,而是综合分析下来的结果,因为学 GIS 相关专业的同学第一个使用的软件就是 ArcGIS,而 ArcPy 是和 ArcGIS 绑定并且一同安装的,用户的上手门槛较低。
优势( Pros):
-
同时 ArcPy 相比于 GDAL 是一种更高级的 API,其调用更简单;
-
功能非常强大。有非常多的高级功能,包含 ArcGIS 提供的上千个工具箱的 Python 接口;
-
上手快,易于安装。大部分入行都是接触的 ArcGIS,同时 ArcPy 会随软件一同安装。
劣势(Cons):
-
被限制在 Python2.7版本(ArcGIS Pro版本支持Python3);
-
高级意味着 API 粒度大,限制了拓展性。
结束语
笔者抛砖引玉,在引出 ArcPy 时给大家简单介绍了地理空间处理所使用的一小部分计算机库。如有相关兴趣,大家可以自行研究学习。