测试geodataframe和rasterio对象之间的crs



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

print(gdf.crs)

返回"epsg:2193">

print(rstr.crs)

返回"EPSG:2193">

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

gdf.crs == rstr.crs

返回"False">

虽然这看起来可能只是区分大小写的简单问题,但我注意到它们是两种不同的数据类型(分别为<class'pyproj.crs.crs.crs'>和<class'rasterio.crs.crs'>(,所以这可能就是不等式?

解决两个不同包如何返回crs的问题,我的最佳选择是什么?

CRS可以通过多种方式存储。例如PROJ、EPSG代码或WKT格式(众所周知的文本(,其优选作为存储CRS信息的无损方式。如需参考,请查看PROJ对描述坐标参考系的最佳格式的解释。

在您的案例中,geopandas返回PROJ(这里是Python实现PyProj(,这是一个比较突出的实现。有趣的是,Rasterio有自己的存储CRS信息的方法,类"Rasterio.CRS.CRS"。比较存储CRS的两种不同实现应该是"False"。要解决此问题,还需要定义存储格式。

将EPSG代码作为字符串(而不是底层CRS存储类(进行比较就足够了。

Rasterio具有返回EPSG代码的功能:

rstr.to_epsg()

geopandas提供了类似的功能(向下滚动一点(:

gdf.crs.to_epsg()

相关内容

  • 没有找到相关文章

最新更新