geopandas POLYGON 坐标到 x,y 坐标列
geopandas POLYGON coordinates to x,y coordinate columns
我有一个类型的 geopandas 数据框:
id \
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
add
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ...
这是整个多边形:
;id;add
0;028f342a-b26f-4e36-b5d1-25d3428cac2f;POLYGON ((33.781475 3.5090296, 33.1241675 3.5090296, 33.1241675 4.392868066666667, 33.781475 4.392868066666667, 33.781475 3.5090296))
我想做的是将多边形角的所有 x
和 y
坐标提取到 2 列中。所以,我尝试过的是(此代码适用于整个数据框):
List_Mvv_id = list(set(df['id']))
Full =[]
for i in List_Mvv_id:
df = df[df['id']==i]
P = df['add'].iloc[0]
print(P)
for x,y in P.exterior.coords:
df['x'] = x
df['y'] = y
Full.append(df)
但是,它只returns多边形的第一个坐标:
id \
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
add x y
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
我也试过这种方法:
def coord_lister(geom):
coords = list(geom.exterior.coords)
return (coords)
coordinates_list = df.geometry.apply(coord_lister)
但是我在提取 x,y 坐标时卡住了。
感谢任何见解。
使用apply()
做循环就这么简单
import pandas as pd
import geopandas as gpd
import shapely
import io
df = pd.read_csv(io.StringIO(""";id;add
0;028f342a-b26f-4e36-b5d1-25d3428cac2f;POLYGON ((33.781475 3.5090296, 33.1241675 3.5090296, 33.1241675 4.392868066666667, 33.781475 4.392868066666667, 33.781475 3.5090296))"""), sep=";")
# recreate geodataframe
gdf = gpd.GeoDataFrame(df, geometry=df["add"].apply(shapely.wkt.loads))
# expand the co-ordinates
gdf["geometry"].apply(lambda p: list(p.exterior.coords)).explode().apply(pd.Series).rename(columns=({0:"x", 1:"y"}))
x
y
0
33.7815
3.50903
0
33.1242
3.50903
0
33.1242
4.39287
0
33.7815
4.39287
0
33.7815
3.50903
我有一个类型的 geopandas 数据框:
id \
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
add
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ...
这是整个多边形:
;id;add
0;028f342a-b26f-4e36-b5d1-25d3428cac2f;POLYGON ((33.781475 3.5090296, 33.1241675 3.5090296, 33.1241675 4.392868066666667, 33.781475 4.392868066666667, 33.781475 3.5090296))
我想做的是将多边形角的所有 x
和 y
坐标提取到 2 列中。所以,我尝试过的是(此代码适用于整个数据框):
List_Mvv_id = list(set(df['id']))
Full =[]
for i in List_Mvv_id:
df = df[df['id']==i]
P = df['add'].iloc[0]
print(P)
for x,y in P.exterior.coords:
df['x'] = x
df['y'] = y
Full.append(df)
但是,它只returns多边形的第一个坐标:
id \
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
0 028f342a-b26f-4e36-b5d1-25d3428cac2f
add x y
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
0 POLYGON ((33.78148 3.50903, 33.12417 3.50903, ... 33.781475 3.50903
我也试过这种方法:
def coord_lister(geom):
coords = list(geom.exterior.coords)
return (coords)
coordinates_list = df.geometry.apply(coord_lister)
但是我在提取 x,y 坐标时卡住了。
感谢任何见解。
使用apply()
做循环就这么简单
import pandas as pd
import geopandas as gpd
import shapely
import io
df = pd.read_csv(io.StringIO(""";id;add
0;028f342a-b26f-4e36-b5d1-25d3428cac2f;POLYGON ((33.781475 3.5090296, 33.1241675 3.5090296, 33.1241675 4.392868066666667, 33.781475 4.392868066666667, 33.781475 3.5090296))"""), sep=";")
# recreate geodataframe
gdf = gpd.GeoDataFrame(df, geometry=df["add"].apply(shapely.wkt.loads))
# expand the co-ordinates
gdf["geometry"].apply(lambda p: list(p.exterior.coords)).explode().apply(pd.Series).rename(columns=({0:"x", 1:"y"}))
x | y | |
---|---|---|
0 | 33.7815 | 3.50903 |
0 | 33.1242 | 3.50903 |
0 | 33.1242 | 4.39287 |
0 | 33.7815 | 4.39287 |
0 | 33.7815 | 3.50903 |