NSDT工具推荐Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - AI模型在线查看 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割 - 3D道路快速建模

空间分析是 GIS 分析的一种,它使用数学和几何来理解空间和时间上发生的模式,包括人类行为和自然现象的模式。

在执行空间分析或空间数据科学时,正确的开源 GIS 工具可以打开一个免费的协作分析功能的世界,而无需昂贵的软件许可。

我们将带你快速浏览一些可用于地理空间分析的开源 Python 库。 所有这些库都可以轻松地与 JupyterLab 集成并扩展到大型数据集。

让我们开始吧。

矢量表示
在 GIS 中,术语“矢量”描述具有相关属性数据(例如名称、县标识符、人口)的离散几何图形(点、线、多边形)。 根据我们的测量规模和水平,我们可以使用不同的几何形状来表示相同的现象。 例如,我们可以将白宫表示为点、线或多边形,具体取决于我们是否要查看建筑物兴趣点、建筑物轮廓或建筑物占地面积。

1、GeoPandas

GeoPandas 致力于让你能够轻松地在 Python 中处理地理空间数据。 它在名为 GeoDataFrame 的新数据结构中扩展了内置 pandas 数据类型。 GeoPandas 包装了基础 Python 包 Shapely 和 Fiona,这两个包都是由 Sean Gillies 创建的。

2、Shapely

从 GeoPandas 开始,Shapely 封装了 GEOS 并定义了实际的几何对象(点、线、多边形)以及它们之间的空间关系(例如邻接、内部、包含)。 您可以在没有 GeoPandas 的情况下直接使用 shapely,但在以数据帧为中心的世界中,Shapely 不再是直接工具,而是对更高级别包的依赖。

3、Fiona

Fiona 可以读取和写入多种地理空间矢量数据,并轻松与其他 Python GIS 库集成。 它依靠 OGR / GEOS 通过包装 Python 的 boto3 库从本地文件系统和 Amazon S3 等云服务读取 shapefile、geopackage、geojson、topojson、KML、GML。

4、Spatialpandas

Spatialpandas 支持基于矢量的空间和几何操作的 Pandas 和 Dask 扩展。 它是使用 Numba 或 Python 处理矢量化几何算法的好工具。 该库首先用于通过 Datashader 进行多边形光栅化,此后已成为其自己的独立项目。

5、PySAL

PySAL 是开发空间回归、空间计量经济学、空间网络统计建模和时空分析以及热点、聚类和异常值检测分析等高级应用程序的好工具。

它由四个模块包组成,分别侧重于空间分析的不同方面:

  • 计算几何问题库
  • 探索空间和时空数据的探索性分析
  • 通过关系估计进行验证性分析的模型
  • Viz 创建地理可视化并链接到 Python 生态系统中的其他可视化工具包

PySAL 是 Sergio Rey 和 Luc Anselin 合作开发的,可通过 Anaconda 获取。

光栅表示
栅格是规则网格化的数据集,例如 GeoTIFF、JPG 和 PNG。 规则网格可用于表示点、线和多边形无法清晰表示的连续现象。 例如,在分析西雅图的每周降雨量时,我们首先从气象站降雨测量(点)开始,然后插入值以创建栅格(连续表面)来表示整个城市的降雨量。

6、GDAL

GDAL 是地理空间数据抽象库,包含 200 多种地理空间数据格式的输入、输出和分析函数。 它支持所有流行编程语言的 API,并包括用于快速栅格处理任务(重采样、类型转换等)的 CLI(命令行界面)。

7、Rasterio

Rasterio 是多产的 Sean Gilles 的另一项创作,它是 GDAL 的包装器,可在 Python 科学数据栈中使用,并与 Xarray 和 Numpy 很好地集成。 它可以读取、写入、组织和存储多种栅格格式,例如云优化的 GeoTIFF (COG)。 一个关键目标是通过使用熟悉的语法为 Python 开发人员提供高性能并减少认知负担。

8、Datashader

Datashader 是一个通用光栅化管道。 我们已经提到了矢量和栅格之间的区别。 如果想从矢量类型转换为栅格类型怎么办? 这就是 Datashader 发挥作用的地方,它允许你智能地对数据进行网格化。

Datashader 提供的工具可以让你使用少量代码轻松创建图形管道,并且是数据科学原则性方法的理想工具。 它可以处理大型数据集并允许用户生成有意义的可视化。 它允许逐步进行过程,从而无需在可视化大型数据集时进行反复试验。 附带说明一下,makepath 团队包括 Datashader 的核心开发人员。

9、Xarray-Spatial

Xarray-Spatial 使用 Numba 实现常见的栅格分析功能,并提供易于安装和扩展的代码库。 它起源于 Datashader 项目,包括表面分析(例如坡度、曲率、山体阴影、视域)、邻近分析(例如欧氏距离、大圆距离)和区域/焦点分析(按区域或邻域进行汇总统计)的工具。 它不依赖于 GDAL 或 GEOS,旨在支持 GIS 开发人员和分析师所需的核心栅格分析功能。

Xarray-Spatial 由 makepath 的创始人之一布伦丹·柯林斯 (Brendan Collins) 首创。

其他数据表示

10、RTree

RTree 包装了 C 库 libspatialindex,用于构建和查询大型矩形索引。 大多数情况下,矩形代表多边形的边界框,这使得 RTree 库对于快速多边形内点操作至关重要。 该库的一个缺点是底层 C/C++ 代码不是线程安全的。 当尝试从不同的线程或进程访问相同的索引时,这可能会导致问题,但 Geopandas 仍然是一个非常有用的工具。

11、H3

Uber 提出了六角形索引网格分析系统,用于更有针对性地探索和可视化其空间数据。 H3 使用六边形进行索引,可以更好地考虑数据点的移动性并最大限度地减少量化误差(与其他形状相比,例如正方形)。

六边形也是快速、轻松地近似半径的不错选择。 使用的分层方法允许你截断索引的精度/分辨率,而不会丢失原始索引。

H3 是用 C 编写的,还有一个 Python 绑定,以“六边形化你的世界”。

12、NetworkX

NetworkX 可用于分析图形和复杂网络。 一个很好的优点是可以灵活地处理从文本和图像到 XML 记录的各种数据类型以及大量数据(多达数千万个节点和边)。

13、PyProj

PyProj 对于地图投影非常有用,它定义了我们如何扭曲 3D 世界并将其转换为 2D 地图。 PyProj 包装了 Proj4 库,并在 WGS84(经度/纬度)和 UTM(西米/北米)等坐标参考系统之间执行制图转换。 地图投影可能很难理解,但 PyProj 做得很好。

用户界面/笔记本集成

14、folium

folium 秉承“两个优于一个”的原则,融合了 Python(强大的数据分析功能)和 JavaScript(地图强大功能)的优点。 因此,你可以在 Python 中处理数据,然后通过 folium 使用交互式 Leaflet 地图(向 Vladimir Agafonkin 致敬)来展示生成的可视化结果。

它支持 GeoJSON、TopoJSON、图像和视频叠加。

15、结束语

我们可以使用许多工具来进行地理空间数据分析和可视化。 尽管我们只是重点介绍了 Python 堆栈中的一些工具,但地理空间分析并不限于 Python。

Python 的座右铭是“为每个人编程”,这对于地理社区来说当然也是如此。 Python 是许多有抱负的数据科学家的第一语言,我们希望这份列表能够帮助你完成地理之旅。


原文链接:Open Source Spatial Analysis Tools for Python: A Quick Guide

BimAnt翻译整理,转载请标明出处