在涉及地理数据框架(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()