【问题标题】:How to remove shapes that cause a problem upon reprojection from a geopandas dataframe?如何删除从 geopandas 数据框中重新投影时导致问题的形状?
【发布时间】:2020-07-20 08:04:32
【问题描述】:

thisgeopandas 示例中,南极洲陆地质量在重新投影到墨卡托投影之前从GeoDataFrame 删除,以防止包含极点的形状出现问题(它会变得无限大)。

我想知道,是否有可能找到一种更稳健的重投影方法,从而不需要手动调整数据框。特别是因为我正在使用一个没有单独的南极洲行的数据集:

我有两个想法:

1。使用目的地信息crs

epsg website 为例,显示“使用区域”:

我们可以使用它在重新投影之前准备数据:删除任何向南延伸超过 -80 度的形状,或者将其与描述目标 crs 使用区域的shapely Polygon 相交,就源 crs - 在这种情况下是标准 epsg:4326 所以 Polygon([(-180,-80), (-180,84), ...])

这种方法的问题:我不确定是否可以从任何crs 的某个地方以编程方式访问此使用区域信息,例如来自GeoDataFrame 对象。

2。在帖子中修复

就做吧,以后再挑出错误的重新投影的部分。例如,在我目前的情况下,重新投影的地理数据框 gdf_merc = gdf.to_crs(epsg=3395) 确实有错误...

...但是通过在几何的字符串表示中搜索 inf 单词,我可以在 MultiPolygon...中找到有问题的 Polygon...

In [360]: for i, polygon in enumerate(gdf_merc.geometry[0]):
   ...:     if 'inf' in str(polygon): 
   ...:         print(i)
  
0

...然后删除它:

这种方法的问题:看起来很复杂,我更愿意从一开始就防止出现任何问题。

关于如何解决这两种方法的任何想法,或者是否有第三种方法?

一句话:我对一般情况感兴趣,其中 any crs 可以被重新投影到,所以我不想抢先删除南极洲(“以防万一”),就像其他预测可能完全没问题,更重要的是,它们可能还有其他问题区域。

非常感谢!

【问题讨论】:

    标签: python geopandas proj


    【解决方案1】:

    选项 1 可能是最好的选择。最新的 GeoPandas 使用 pyproj.CRS 存储 CRS 数据,您可以从中轻松提取投影的边界。

    从 df 中提取它:

    import geopandas as gpd
    df = gpd.read_file(gpd.datasets.get_path('nybb'))
    df.crs.area_of_use.bounds
    

    直接使用 pyproj 从目标 CRS 获取它:

    import pyproj
    crs = pyproj.CRS.from_epsg(3395)
    crs.area_of_use.bounds
    

    然后你可以使用内置的geopandas.clip 来剪辑你的数据。

    from shapely.geometry import box
    
    df = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
    crs = pyproj.CRS.from_epsg(3395)
    bounds = crs.area_of_use.bounds
    clipped = gpd.clip(df, box(*bounds))
    clipped.to_crs(crs).plot()
    

    【讨论】:

    • 啊,太好了!我注意到GeoDataFrame.crs 属性仅将信息存储为字符串 - 但这是因为我在实例化数据帧时指定了它。如果我将crs 作为pyproj.CRS 对象传递,则所有这些信息也可以从数据框属性中获得。我会研究一下,非常感谢!
    • GeoDataFrame.crs 不再将其存储为字符串,这已被弃用。如果您还没有这样做,我建议您更新到 0.7.0。
    • 看来gpd.clip 方法有一些问题(我打开了一个问题here),作为一种解决方法,我想使用其他方法。我在考虑gpd.overlay,但这仅适用于Polygons 或maskdf.contains,但仅适用于Points。如果您碰巧有建议,请分享:)
    • gpd.overlay 适用于自 0.7.0 以来的所有几何类型。
    • 啊,在那种情况下,文档仍然关闭...我想我可以创建一个分支并为其拉取请求,或者有没有更快的方法来解决此类问题?
    猜你喜欢
    • 2017-07-30
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 2020-12-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多