问题描述
我搜索了我的问题,发现这个问题与我的问题不同.
I searched for my problem and found this question which is different from my issue.
我有两个地理数据框,一个包含房屋位置作为 points(约 700 个点),另一个包含 suburbs names 及其 polygon(约 2973 个多边形).我想将每个点链接到一个多边形,以将每个房屋分配到正确的郊区.
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.
我的地理数据框示例
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)
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))
点地理数据框示例
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 地理数据框,每个房屋都分配到相应的郊区.作为匹配点和多边形的结果.
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.
例子:
suburbID subrubName house_ID 6672 south apple house1_ID 6372 water garden house2_ID
我是 GeoPandas 的新手,我试图以最清晰的方式解释我的问题.我很高兴澄清任何一点.谢谢.
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")