将正确的投影 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" crs
:https://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)
虽然我的问题有答案How to create an accurate buffer of 5 miles around a coordinate in python?,但我不能代表它。
我有一系列采用标准纬度、经度浮点度数格式的位置,需要以米为单位计算它们周围的 buffer
。
位置来自葡萄牙,所以我在这里选择了 "right" crs
:https://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)