<p>使用.contains函数在多边形分析中使用shapely的点,如下所示</p>
<pre><code>import geopandas as gpd
from shapely.geometry import Point
from shapely.geometry.polygon import Polygon
polys = gpd.GeoSeries({
'6672': Polygon([(0, 0), (0, 1), (1, 0)]),
'6372': Polygon([(0, 1), (1, 1), (1, 0)]),
})
#creating geo dataframe
polysgdf = gpd.GeoDataFrame(geometry=gpd.GeoSeries(polys))
polysgdf
Out[48]:
geometry
6672 POLYGON ((0 0, 0 1, 1 0, 0 0))
6372 POLYGON ((0 1, 1 1, 1 0, 0 1))
points=[Point(0.25,0.25), Point(0.75,0.75),
Point(145.02190, -37.85450)]
pointsDF = gpd.GeoDataFrame(geometry=points,
index=['house1_ID', 'house2_ID', 'house3_ID'])
pointsDF
Out[49]:
geometry
house1_ID POINT (0.25 0.25)
house2_ID POINT (0.75 0.75)
house3_ID POINT (145.0219 -37.8545)
polysgdf['house_ID'] = ''
for i in range(0,len(pointsDF)):
print('Check for house '+str(pointsDF.index.values.astype(str)[i]))
for j in range(0,len(polysgdf)):
print('Check for suburb '+str(polysgdf.index.values.astype(str)[j]))
if polysgdf['geometry'][j].contains(pointsDF['geometry'][i]) == True:
polysgdf['house_ID'][j] = pointsDF.index.values.astype(str)[i]
print(polysgdf)
geometry house_ID
6672 POLYGON ((0 0, 0 1, 1 0, 0 0)) house1_ID
6372 POLYGON ((0 1, 1 1, 1 0, 0 1)) house2_ID
</code></pre>