【问题标题】:testing crs between geodataframe and rasterio object在地理数据框和栅格对象之间测试 crs
【发布时间】:2021-06-27 22:11:40
【问题描述】:

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

print(gdf.crs)

返回“epsg:2193”

print(rstr.crs)

返回“EPSG:2193”

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

gdf.crs == rstr.crs

返回“假”

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

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

【问题讨论】:

    标签: python logic geopandas rasterio


    【解决方案1】:

    CRS 可以以多种方式存储。例如 PROJ、EPSG-Code 或 WKT-format(众所周知的文本),首选作为存储 CRS 信息的无损方式。作为参考,请查看描述坐标参考系统的最佳格式的 PROJ 说明here

    在您的情况下,geopandas 返回 PROJ(此处为 Python 实现 PyProj),这是比较突出的项目之一。有趣的是,Rasterio 有自己的存储 CRS 信息的方式,即类“rasterio.crs.CRS”。比较存储 CRS 的两种不同实现应该是“假”。要解决此问题,您还需要定义存储格式。

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

    Rasterio 有一个函数可以返回EPSG-code:

    rstr.to_epsg()
    

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

    gdf.crs.to_epsg()
    

    【讨论】:

    • 处理方式的有趣多样性。为洞察力干杯。 rstr.to_epsg() 对我不起作用,但更好(更简单)的是 *.crs.to_epsg() 对这两个对象都有效。你完全让我走上了正确的轨道,所以标记为已回答。
    猜你喜欢
    • 2016-08-20
    • 1970-01-01
    • 2021-03-31
    • 2016-04-13
    • 2019-11-12
    • 2014-02-21
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    相关资源
    最近更新 更多