测试 geodataframe 和 rasterio 对象之间的 crs

testing crs between geodataframe and rasterio object

我在涉及地理数据框 (gdf) 和栅格 (rstr) 的空间分析之前检查 crs 一致性作为质量控制的手段。

print(gdf.crs)

returns 'epsg:2193'

print(rstr.crs)

returns 'EPSG:2193'

这在概念上是可以的,因为在 QGIS 中交叉检查确认它们是相同的。然而,逻辑测试:

gdf.crs == rstr.crs

returns 'False'

虽然这看起来像是区分大小写的简单问题,但我注意到它们是两种不同的数据类型(,分别)所以也许这就是不平等?

解决两个不同包 return crs 的最佳选择是什么?

CRS 可以以多种方式存储。例如 PROJ、EPSG 代码或 WKT 格式(众所周知的文本),它们更适合作为存储 CRS 信息的无损方式。作为参考,查看描述坐标参考系统的最佳格式的 PROJ 解释 here.

在你的例子中,geopandas returns PROJ(这里是 Python 实现 PyProj),这是比较突出的项目之一。有趣的是,Rasterio 有它自己的存储 CRS 信息的方式,class 'rasterio.crs.CRS'。比较存储CRS的两种不同实现应该是'False'。要解决此问题,您还需要定义存储格式。

比较 EPSG 代码作为字符串(而不是底层 CRS 存储 classes)应该足以完成您的任务。

Rasterio 具有 return EPSG-code:

的功能
rstr.to_epsg()

geopandas 提供类似 functionalities(向下滚动一点):

gdf.crs.to_epsg()