将一个 GeoPandas 数据框中的每个点链接到另一个数据框中的多边形

lee*_*ena 2 python geometry geopandas

我搜索了我的问题,发现这个问题与我的问题不同。

我有两个地理数据框,一个包含房屋位置points(~700 点),另一个包含suburbs names它们的位置polygon(~2973 个多边形)。我想将每个点链接到一个多边形,以将每个房屋分配给正确的郊区。

我的地理数据框示例

多边形

import geopandas as gpd
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon

#creating geo series
polys = gpd.GeoSeries({
    '6672': Polygon([(142.92288, -37.97886,), (141.74552, -35.07202), (141.74748, -35.06367)]),
    '6372': Polygon([(148.66850, -37.40622), (148.66883, -37.40609), (148.66920, -37.40605)]),
})

#creating geo dataframe
polysgdf = gpd.GeoDataFrame(geometry=gpd.GeoSeries(polys))
polysgdf
Run Code Online (Sandbox Code Playgroud)

产生以下结果(我的原始地理数据框还包括一个suburb包含郊区名称的列,但我无法将其添加到我的样本中,您只能看到下面的郊区 ID)

        geometry
6672    POLYGON ((142.92288 -37.97886, 141.74552 -35.07202, 141.74748 -35.06367, 142.92288 -37.97886))
6372    POLYGON ((148.66850 -37.40622, 148.66883 -37.40609, 148.66920 -37.40605, 148.66850 -37.40622))
Run Code Online (Sandbox Code Playgroud)

点地理数据框的样本

积分

points=[Point(145.103,-37.792), Point(145.09720, -37.86400), 
        Point(145.02190, -37.85450)]

pointsDF = gpd.GeoDataFrame(geometry=points,
                                  index=['house1_ID', 'house2_ID', 'house3_ID'])

pointsDF
Run Code Online (Sandbox Code Playgroud)

产生以下

            geometry
house1_ID   POINT (145.10300 -37.79200)
house2_ID   POINT (145.09720 -37.86400)
house3_ID   POINT (145.02190 -37.85450)
Run Code Online (Sandbox Code Playgroud)

我希望最终输出是pointsDF地理数据框,每个房子都分配给相应的郊区。作为匹配点和多边形的结果。

例子:

suburbID subrubName    house_ID
6672      south apple  house1_ID
6372      water garden house2_ID
Run Code Online (Sandbox Code Playgroud)

我是 GeoPandas 的新手,我试图以最清晰的方式解释我的问题。我很高兴澄清任何一点。谢谢你。

lee*_*ena 6

我找到了一种通过使用空间连接连接两个数据框来完成此操作的方法

joinDF=gpd.sjoin(pointsDF, polysgdf, how='left',op="within")
Run Code Online (Sandbox Code Playgroud)