【问题标题】:Making rows of points in dataframe into POLYGON using geopandas使用 geopandas 将数据框中的点行转换为 POLYGON
【发布时间】:2021-08-27 01:18:49
【问题描述】:

我试图找出点是否在封闭的多边形中(在这个问题中:Finding if a point in a dataframe is in a polygon and assigning polygon name to point)但我意识到可能还有另一种方法可以做到这一点:

我有这个数据框

df=
id     x_zone     y_zone
0  A1  65.422080  48.147850
1  A1  46.635708  51.165745
2  A1  46.597984  47.657444
3  A1  68.477700  44.073700
4  A3  46.635708  54.108190
5  A3  46.635708  51.844770
6  A3  63.309560  48.826878
7  A3  62.215572  54.108190

我想把它变成

id     Polygon
0  A1  POLYGON((65.422080, 48.147850), (46.635708,  51.165745), (46.597984,  47.657444), (68.477700,  44.073700))
1  A3  POLYGON((46.635708,54.108190), (46.635708 ,51.844770), (63.309560, 48.826878),(62.215572 , 54.108190))

对积分做同样的事情:

df1= 

 item   x   y
0     1  50  49
1     2  60  53
2     3  70  30

item   point
0     1  POINT(50,49)
1     2  POINT(60,53)
2     3  POINT(70,30)

我从来没有用过geopandas,在这里有点不知所措。

因此,我的问题是:如何从 pandas 数据框获取具有 geopandas 属性的数据框?

感谢您提供任何见解!

【问题讨论】:

    标签: python-3.x pandas geopandas


    【解决方案1】:

    您可以按以下方式实现,但您必须设置正确的 dtype。我知道在 ArcGIS 中您必须将 dtype 设置为几何;

    df.groupby('id').apply(lambda x: 'POLYGON(' + str(tuple(zip(x['x_zone'],x['y_zone'])))+')')
    

    【讨论】:

      【解决方案2】:

      我建议以下方法直接从您的 df 获取 GeoDataFrame:

      from shapely.geometry import Polygon
      import geopandas as gpd
      gdf = gpd.GeoDataFrame(geometry=df.groupby('name').apply(
          lambda g: Polygon(gpd.points_from_xy(g['x_zone'], g['y_zone']))))
      

      它首先使用 geopandas 的points_from_xy 创建一个点列表,然后从该列表中创建一个 Polygon 对象。

      【讨论】:

      • 这正是我需要的!!!!它让我省了很多头疼……比如我刚刚发布的这个问题stackoverflow.com/questions/67918340/…。它与积分的工作方式相同吗?
      • 啊,我确实忘了回答你问题的第二部分。在这种情况下,它更简单,因为没有 groupby 或 Polygon 可以制作,你有 geometry=gpd.points_from_xy(df1['x'], df1['y']))
      猜你喜欢
      • 1970-01-01
      • 2018-09-05
      • 2018-12-06
      • 2023-01-18
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 2020-07-22
      • 1970-01-01
      相关资源
      最近更新 更多