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