摘要: 空间分析 空间分析是一种 GIS 分析,它利用数学和几何学来理解空间和时间上发生的模式,包括人类行为和自然现象的模式。在执行空间分析或空间数据科学时,正确的开源 GIS 工具可以打开一个免费和协作分析功能的世界,而无需昂贵的软件许可。 本文将带大家快速浏览一...
空间分析
空间分析是一种 GIS 分析,它利用数学和几何学来理解空间和时间上发生的模式,包括人类行为和自然现象的模式。在执行空间分析或空间数据科学时,正确的开源 GIS 工具可以打开一个免费和协作分析功能的世界,而无需昂贵的软件许可。
本文将带大家快速浏览一些可用于地理空间分析的开源 Python 库。所有这些库都可以轻松地与 JupyterLab 集成并扩展到大型数据集。
矢量数据库
在 GIS 中,“矢量”描述具有相关属性数据(例如名称、县标识符、人口)的离散几何图形(点、线、多边形)。根据尺度和测量水平,可使用不同的几何图形来表示相同的现象。例如,我们可以将白宫表示为点、线或多边形,具体取决于要查看建筑物兴趣点、建筑物轮廓还是建筑物的占地面积。
GeoPandas
GeoPandas 致力于使 Python 中的地理空间数据更容易使用。它在名为 GeoDataFrame 的新数据结构中扩展了内置 panda 数据类型。GeoPandas 包装了基本的 Python 软件包 Shapely和Fiona,这两个软件包均由 Sean Gillies 创建。
Shapely
在 GeoPandas 的堆栈中向下移动,Shapely 包装 GEOS 并定义实际的几何对象(点、线、多边形)和它们之间的空间关系(例如 adjacency、within、contains)。可在没有 GeoPandas 的情况下直接使用 shapely,但在以数据框为中心的世界中,Shapely 不再是直接工具,而更多地依赖于更高级别的软件包。
Fiona
Fiona 可以读写多种地理空间矢量数据,并可轻松与其他 Python GIS 库集成。它依靠 OGR、GEOS 通过包装 Python 的 boto3 库从本地文件系统和云服务(如 Amazon S3)读取 shapefile、geopackages、geojson、topojson、KML、GML。
Spatialpandas
Spatialpanda 支持 Pandas 和 Dask 扩展,用于基于向量的空间和几何操作。它利用 Numba 或 Python 处理矢量化几何算法的最佳工具。该库最初用于 Datashader 的多边形光栅化,此后成为其自己的独立项目。
PySAL
PySAL 是开发空间回归、空间计量经济学、空间网络统计建模和时空分析以及热点、集群和异常值检测分析的高级应用程序的好工具。它由四个模块组成,专注于空间分析的不同方面:
- 计算几何问题库;
- Explore 用于空间和时空数据的探索性分析;
- 通过关系估计进行验证性分析的模型;
- Viz 创建地理可视化并链接到 Python 生态系统中的其他可视化工具包;
- PySAL 是通过 Sergio Rey 和 Luc Anselin 的合作产生的,可通过 Anaconda 获得。
栅格数据库
栅格是定期网格化的数据集,如 GeoTIFF、JPG 和 PNG。规则网格可用于表示无法用点、线和多边形清晰表示的连续现象。例如,在分析西雅图的每周降雨量时,首先从气象站降雨量测量值(点)开始,然后对值进行插值以创建栅格(连续表面)来表示整个城市的降雨量。
GDAL
GDAL 是地理空间数据抽象库,它包含 200 多种地理空间数据格式的输入、输出和分析功能。它支持所有流行编程语言的 API,并包括用于快速栅格处理任务(重采样、类型转换等)的 CLI(命令行界面)。
Rasterio
Rasterio 是多产 Sean Gilles 的另一个创作,它是 GDAL 的包装器,用于 Python 科学数据堆栈,并与X array 和 Numpy 很好地集成。它可以读取、写入、组织和存储多种栅格格式,例如云优化的 GeoTIFF (COG)。一个关键目标是通过使用熟悉的语法为 Python 开发人员提供高性能和减少认知负担。
Datashader
Datashader 是一种通用的光栅化管道, 矢量和栅格之间有一定的区别。如果要从矢量类型转换为栅格类型怎么办?这就是 Datashader 的用武之地,它允许智能地网格化数据。Datashader 拥有一些工具,可以通过少量代码轻松创建图形管道,是数据科学原则方法的理想工具。它可以处理大型数据集并允许用户生成有意义的可视化,允许逐步过程,从而消除了在可视化大型数据集时反复试验的需要。
Xarray-Spatial
Xarray-Spatial 利用 Numba 实现常见的栅格分析功能,并提供易于安装和扩展的代码库。它起源于 Datashader 项目,包括用于表面分析(例如坡度、曲率、山体阴影、视域)、邻近度分析(例如欧氏距离、大圆距离)和区域、焦点分析(按区域或邻域汇总统计)的工具。它不依赖于 GDAL 或 GEOS,旨在支持 GIS 开发人员和分析师需要的核心栅格分析功能。Xarray-Spatial 由 makepath 的创始人之一 Brendan Collins 开创。
其他数据库
RTree(空间索引)
RTree 包装了 C 库 libspatialindex,用于构建和查询矩形的大型索引。大多数时候,矩形代表多边形的边界框,这使得 RTree 库对于快速的多边形点操作必不可少。该库的一个缺点是底层 C/C++ 代码不是线程安全的。当尝试从不同的线程或进程访问相同的索引时,这可能会导致问题,但它仍然是一个非常有用的工具,Geopandas 也同时包装了 RTree。
H3
Uber 提出了一个六边形索引网格分析系统,用于更有针对性地探索和可视化其空间数据。H3 使用六边形索引可以更好地说明数据点的移动性并最大限度地减少量化误差(与其他形状相比,比如正方形)。六边形也是快速简便的半径近似值的不错选择。使用的分层方法允许在不丢失原始索引的情况下截断索引的精度、分辨率。H3 由 C 语言编写,并由 Python 绑定。
NetworkX
NetworkX 用于分析图形和复杂网络。其中最显著的优点是可以灵活地处理从文本和图像到 XML 记录的各种数据类型以及大量数据,最多可达数千万个节点和边缘。
PyProj
PyProj 对于地图投影有显著的作用,它定义了如何扭曲 3D 世界转换为 2D 地图。PyProj 包装了 Proj4 库并在 WGS84(经度/纬度)和 UTM(西米/北米)等坐标参考系统之间执行制图转换。地图投影可能难以理解,而 PyProj 做得很出色。
Folium
Folium 通过合并 Python(强大的数据分析能力)和 JavaScript(强大的地图绘制能力)的优势,以“二强于一”的原则运行。因此,可在 Python 中处理数据,然后通过 Folium 使用交互式 Leaflet 地图播放生成的可视化效果。它支持 GeoJSON、TopoJSON、图像和视频叠加。
Python GIS 和 Python 的座右铭
我们可以使用许多工具来进行地理空间数据分析和可视化。虽然只是强调了 Python 堆栈中的一些工具,但地理空间分析并不局限于 Python。
Python 的座右铭是 “Programming for Everybody”,这对地理社区来说无疑是正确的。Python 是许多有抱负的数据科学家的第一门语言,希望这份清单能对您的地理之旅有所帮助。