如何在python中的坐标周围创建5英里的准确缓冲区?

时间:2018-07-10 10:40:17

标签: python-3.x geopandas

我想在一个坐标周围创建一个5英里的准确缓冲区,我当前的代码是:

cpr_gdf['p_buffer']=cpr_gdf['coordinates'].buffer(5*(1/60))

使用以下代码创建坐标列:

cpr_df['coordinates']=list(zip(cpr_df.sample_longitude_decimal,cpr_df.sample_latitude_decimal))
cpr_df['coordinates']=cpr_df['coordinates'].apply(Point)
cpr_gdf=gpd.GeoDataFrame(cpr_df,geometry='coordinates',crs={'init' :'epsg:4326'})

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在赤道,一分钟的纬度或经度约为1.84公里或1.15英里(ref)。

因此,如果将点定义为P = [y, x],则可以围绕它创建一个缓冲区,该缓冲区可以说4分钟,大约5英里:buffer = 0.04。然后可以使用

轻松获得边界框
minlat = P[0]-(P[0]*buffer)
maxlat = P[0]+(P[0]*buffer)
minlon = P[1]-(P[1]*buffer)
maxlon = P[1]+(P[1]*buffer)

答案 1 :(得分:0)

您需要转换为最精确地等于缓冲区所在位置的等面积投影(https://epsg.io/处的良好资源)

例如,我正在密歇根州制作地图,所以我使用的是EPSG:3174(我相信是米),如果有误,请更正。既然您已经将数据框转换为GeoPandas数据框,则可以将当前投影转换为3174,然后创建缓冲区(将英里转换为米)

cpr_gdf= cpr_gdf.to_crs({'init': 'epsg:3174'})  
buffer_length_in_meters = (5 * 1000) * 1.60934
cpr_gdf['geometry'] = cpr_gdf.geometry.buffer(buffer_length_in_meters)