Python的开源空间分析工具:快速指南

2020-05-02 17:49:41

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

在执行空间分析或空间数据科学时,正确的工具可以在没有昂贵的软件许可的情况下打开免费和协作分析功能的天地。

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

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

GeoPandas完全是为了让在Python中使用地理空间数据变得容易。它扩展了称为GeoDa taFrame的新数据结构中的内置熊猫数据类型。GeoPandas包装了基本的Python包Shapty和Fiona,这两个包都是由Sean Gillie创建的。

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

Fiona可以读写多种地理空间矢量数据,并且可以很容易地与其他Python GIS库集成。它依赖于OGR/GEOS通过包装Python的boto3库从本地文件系统和云服务(如Amazon S3)读取shapefile、geopack、Geojson、topojson、KML和GML。

SpatialPandas支持对基于矢量的空间和几何操作的Pandas和Dask扩展。它是使用Numba或Python处理矢量化几何算法的好工具。该库最初用于使用数据着色器进行多边形光栅化,此后成为其自己的独立项目。

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

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

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

Datashader是一种通用的光栅化管道。我们已经提到了矢量和栅格之间的区别。如果要从矢量类型转换为光栅类型,该怎么办?这就是Datashader的用武之地,它允许您智能地网格您的数据。Datashader拥有一些工具,可以通过少量代码轻松创建图形管道,是数据科学原则性方法的理想工具。它可以处理大型数据集,并允许用户生成有意义的.。

Xarray-Spatial使用Numba实现了常见的光栅分析功能,并提供了一个易于安装和扩展的代码库。它源于Datashader项目,包括用于曲面分析(例如坡度、曲率、山体阴影、视场)、邻近分析(例如欧几里得距离、大圆距离)和分区/焦点分析(按区域或邻域汇总统计数据)的工具。它不依赖于GDAL或GEOS,创建它是为了支持核心栅格分析.。

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

PyProj对于地图投影非常有用,w