Python 使用循环缓冲区将数据帧转换为空间和交集
我有一个包含lon/lat信息的数据帧。目标是找到距离特定点Python 使用循环缓冲区将数据帧转换为空间和交集,python,gis,Python,Gis,我有一个包含lon/lat信息的数据帧。目标是找到距离特定点st_p的rad距离内的所有点。 事实上,我已经有了R中的代码,但是我需要在python上也做同样的事情 这里我要做的是,我将数据帧转换成sf对象,我定义一个缓冲区,我与缓冲区相交 这是R代码。 我只是不知道在Python中使用什么库来实现同样的功能 在_半径内您可以使用geopandas和shapely做几乎任何事情 使用lat、lng从熊猫数据帧创建geopandas geodataframe: 缓冲区、投影和其他操作可用于ge
st_p
的rad
距离内的所有点。
事实上,我已经有了R中的代码,但是我需要在python上也做同样的事情
这里我要做的是,我将数据帧转换成sf
对象,我定义一个缓冲区,我与缓冲区相交
这是R代码。
我只是不知道在Python中使用什么库来实现同样的功能
在_半径内您可以使用geopandas
和shapely
做几乎任何事情
- 使用lat、lng从熊猫数据帧创建geopandas geodataframe:
缓冲区、投影和其他操作可用于geodataframe,以下是转换为公制投影并创建10m缓冲区的方法:
In [27]: gf.to_crs(6622).buffer(10)
Out[27]:
0 POLYGON ((-3597495.980 -2115793.588, -3597496....
1 POLYGON ((-3598149.053 -2115813.383, -3598149....
dtype: geometry
可以调用intersects以获取缓冲区和点之间的交点:
In [29]: gf.to_crs(6622).buffer(10).intersects(Point(-3597505.980,-2115793.588))
Out[29]:
0 True
1 False
dtype: bool
计算质心:
In [30]: gf.to_crs(6622).buffer(10).centroid
Out[30]:
0 POINT (-3597505.980 -2115793.588)
1 POINT (-3598159.053 -2115813.383)
dtype: geometry
使用缓冲区进行筛选:
In [31]: gf.loc[gf.to_crs(6622).buffer(10).intersects(Point(-3597505.980,-2115793.588))]
Out[31]:
lat lng geometry
0 19.435175 -99.141197 POINT (-99.14120 19.43518)
距离为您提供到几何图形中最近点的距离:
In [33]: gf.to_crs(6622).buffer(10).distance(Point(-3597505.980,-2115793.588))
Out[33]:
0 0.000000
1 643.377576
dtype: float64
您可以做更多的工作,只需查看文档即可
另外,请看shapely的文档,了解如何投影一个单点请注意,尽管第一行将数据帧转换为geodataframe,但我始终会遇到这个错误:“Series”对象没有“to_crs”属性,下面是代码:def in(df,lon,lat,rad):geometry=[point(xy)for xy in-zip(df.lon,df.lat)]df=df.drop(['lon',lat',],axis=1)gf=gpd.GeoDataFrame(df,crs=“EPSG:4326”,geometry=geometry)gf.to_crs(6622)。buffer(rad)gfd=gf.to_crs(6622)。buffer(rad)gf.to_crs(6622)。buffer(rad)gf.to_crs(6622)。buffer(rad)。相交(点(lon,lat)=gfd.)返回gfd
当您计算相交部分时,您将丢失geodataframe并获得一个系列:这将成为pandas系列:gf.to_crs(6622).buffer(10).相交(点(-3597505.980,-2115793.588))
In [33]: gf.to_crs(6622).buffer(10).distance(Point(-3597505.980,-2115793.588))
Out[33]:
0 0.000000
1 643.377576
dtype: float64