【问题标题】:Vectorized creation of shapely Polygons from GeoPandas DataFrame从 GeoPandas DataFrame 矢量化创建形状多边形
【发布时间】:2022-06-10 18:39:29
【问题描述】:

我有一个带有点几何的 GeoDataFrame。 从点几何,我想以一种非常直接的方式定义一个正方形多边形几何。

给定一个点,该点应该是边长为 250 个单位的正方形的左下角。 即左下角是当前点,右下角是当前点+x轴上的250等。

我的天真做法如下: 在 GeoDataFrame 中将角创建为新列:

之后,我尝试将新列定义为:

gdf['POLY'] = shapely.Geometry([gdf['BOTTOM_LEFT'], gdf['BOTTOM_RIGHT'], gdf['TOP_LEFT'], gdf['TOP_RIGHT']])

但这会返回以下错误消息:

AttributeError: 'list' object has no attribute '__array_interface__'

【问题讨论】:

    标签: python geopandas shapely


    【解决方案1】:

    假设您有一个只有单点的 GeoDataFrame。它被称为gdf,如下所示:

    X   Y   geometry
    0   5   6   POINT (5.00000 6.00000)
    

    您可以使用以下 lambda 函数访问该点的 x 和 y 分量:

    #Access x and y components of point geometry
    X = gdf.geometry.apply(lambda x: x.x)
    
    Y = gdf.geometry.apply(lambda x: x.y)
    

    现在您可以使用shapely.geometry.Polygon 创建一个方形对象。您需要指定正方形的四个顶点。你可以这样做:

    gdf_square = shapely.geometry.Polygon([[X[0], Y[0]],
                                          [X[0]+250, Y[0]],
                                         [X[0]+250, Y[0]+250],
                                         [X[0], Y[0]+250]])
    

    你可以得到一个正方形的多边形对象,如下图:

    请注意,如果 GeoDataFrame 中有很多点,请修改最后一个函数,使其为每一行中的点一个接一个地创建方形多边形。

    【讨论】:

      猜你喜欢
      • 2020-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-01
      • 2021-03-21
      相关资源
      最近更新 更多