GeoPandas:检查点是否在多边形中 [英] GeoPandas: check if point is in polygon

查看:1976
本文介绍了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

产生以下内容(我的原始地理数据框还包含一个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))

点地理数据框样本

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

产生以下内容

            geometry
house1_ID   POINT (145.10300 -37.79200)
house2_ID   POINT (145.09720 -37.86400)
house3_ID   POINT (145.02190 -37.85450)

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

示例:

suburbID subrubName    house_ID
6672      south apple  house1_ID
6372      water garden house2_ID

我是GeoPandas的新手,我试图以尽可能清晰的方式来解释我的问题.我很高兴澄清任何一点. 谢谢.

我找到了一种通过使用

I searched for my problem and found this question which is different from my issue.

I have two geo data frames, one contains houses locations as points (~700 points) and the other contains suburbs names and their polygon (~2973 polygons). I want to link each point to a polygon to assign each house to the correct suburb.

sample of my geo dataframe

polygon

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

Which produces the following(my original geo dataframe also includes a suburb column that contains the suburb name but I couldn't add it to my sample, you can only see the suburb ID below)

        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))

sample of the points geo dataframe

points

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

Which produces the following

            geometry
house1_ID   POINT (145.10300 -37.79200)
house2_ID   POINT (145.09720 -37.86400)
house3_ID   POINT (145.02190 -37.85450)

I would like the final output to be the pointsDF geo dataframe with each house assigned to the corresponding suburb. As a result of matching the points and the polygons.

Example:

suburbID subrubName    house_ID
6672      south apple  house1_ID
6372      water garden house2_ID

I am new to GeoPandas, I tried to explain my question in the clearest way possible. I am happy to clarify any point. Thank you.

解决方案

I found a way to accomplish this by joining the two data frames using a spatial join

joinDF=gpd.sjoin(pointsDF, polysgdf, how='left',op="within")

这篇关于GeoPandas:检查点是否在多边形中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆