将正确的投影 crs 设置为地理数据框以以米为单位进行计算

setting right projection crs to geodataframe to calculate in meters

虽然我的问题有答案How to create an accurate buffer of 5 miles around a coordinate in python?,但我不能代表它。

我有一系列采用标准纬度、经度浮点度数格式的位置,需要以米为单位计算它们周围的 buffer

位置来自葡萄牙,所以我在这里选择了 "right" crshttps://epsg.io/3763,即 epsg:3763

gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df['latitude'], df['longitude']),
                                 crs={'init' :'epsg:3763'})

gdf['radius'] = gdf.geometry.buffer(50)

根据上面的答案,这应该给我以米为单位的指定半径周围的多边形,但实际上 returns 以度为单位的半径。

我知道,那应该很简单,但我仍然很困惑。谢谢!

您在数据框中的点数是 lat/lon。您需要使用 lat/lon crs 初始化数据框,然后重新投影。

gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df['latitude'], df['longitude']),
                                     crs={'init' :'epsg:4326'})
gdf = gdf.to_crs(epsg=3763)
gdf['radius'] = gdf.geometry.buffer(50)