将一个GeoPandas数据框中的每个点链接到另一数据框中的多边形 [英] Link each point in one GeoPandas dataframe to polygons in another dataframe
问题描述
我搜索了问题,发现了与我的问题不同的问题.
我有两个地理数据框,一个包含房屋位置,如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屋!