【发布时间】:2021-08-27 08:58:45
【问题描述】:
我想解决这个小问题,我到处寻找答案。我找不到它似乎很奇怪,但它可能只是我。
所以,我有这个数据框
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
我将其转换为 geopandas 数据框:
df_geometry = gpd.GeoDataFrame(geometry=df.groupby('id').apply(
lambda g: Polygon(gpd.points_from_xy(g['x_zone'], g['y_zone']))))
df_geometry = df_geometry.reset_index()
print(df_geometry)
返回:
id geometry
A1 POLYGON ((65.42208 48.14785, 46.63571 51.16575...
A3 POLYGON ((46.63571 54.10819, 46.63571 51.84477...
我可以计算面积和周长:
df_geometry["area"] = df_geometry['geometry'].area
df_geometry["perimeter"] = df_geometry['geometry'].length
给出:
id geometry area perimeter
0 A1 POLYGON ((65.42208 48.14785, 46.63571 51.16575... 72.106390 49.799695
1 A3 POLYGON ((46.63571 54.10819, 46.63571 51.84477... 60.011026 40.181476
现在,我的问题的核心是:如果可以计算长度,则肯定正在计算多边形的每一段的长度。我怎样才能找回这个?
我知道对于非常复杂的多边形(例如国家地图,这可能是存储问题)。有人有想法吗?
【问题讨论】:
-
不是segment length = abs(pt[x] - pt[x-1]) where x = 0 to len(Polygon Points) -1 ?
-
其实你需要使用df_geometry.geometry.exterior[0].xy[0]获取所有x坐标和df_geometry.geometry.exterior[0].xy[1]然后计算长度.
-
您使用的是
lat, long坐标吗?您希望您的细分受众群使用哪种length? -
我只需要欧几里得距离。我正在查看的是 100 * 100 米,x、y 是相对于平面中的固定点,而不是经纬度坐标。
sum_of_squares =np.square(np.subtract(df_geometry.geometry.exterior[0].xy[0],df_geometry.geometry.exterior[0].xy[1])), lengths = np.sqrt(sum_of_squares)是一个答案,但我希望有更优雅的东西。
标签: python-3.x pandas geopandas