Python 使用循环缓冲区将数据帧转换为空间和交集

Python 使用循环缓冲区将数据帧转换为空间和交集,python,gis,Python,Gis,我有一个包含lon/lat信息的数据帧。目标是找到距离特定点st_p的rad距离内的所有点。 事实上,我已经有了R中的代码,但是我需要在python上也做同样的事情 这里我要做的是,我将数据帧转换成sf对象,我定义一个缓冲区,我与缓冲区相交 这是R代码。 我只是不知道在Python中使用什么库来实现同样的功能 在_半径内您可以使用geopandas和shapely做几乎任何事情 使用lat、lng从熊猫数据帧创建geopandas geodataframe: 缓冲区、投影和其他操作可用于ge

我有一个包含lon/lat信息的数据帧。目标是找到距离特定点
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