[英]geopandas point in polygon
I have a GeoDataFrame of polygons (~30) and a GeoDataFrame of Points (~10k) 我有一个GeoDataFrame的多边形(~30)和一个GeoDataFrame的点(~10k)
I'm looking to create 30 new columns (with appropriate polygon names) in my GeoDataFrame of Points with a simple boolean True/False if the point is present in the polygon. 我想在我的GeoDataFrame中创建30个新的列(具有适当的多边形名称),如果该点存在于多边形中,则使用简单的布尔值True / False。
As an example, the GeoDataFrame of Polygons is this: 例如,多边形的GeoDataFrame是这样的:
id geometry
foo POLYGON ((-0.18353,51.51022, -0.18421,51.50767, -0.18253,51.50744, -0.1794,51.50914))
bar POLYGON ((-0.17003,51.50739, -0.16904,51.50604, -0.16488,51.50615, -0.1613,51.5091))
The GeoDataFrame of Points is like this: Points的GeoDataFrame是这样的:
counter points
1 ((-0.17987,51.50974))
2 ((-0.16507,51.50925))
Expected output: 预期产量:
counter points foo bar
1 ((-0.17987,51.50974)) False False
1 ((-0.16507,51.50925)) False False
I can do this manually by: 我可以通过以下方式手动完成:
foo = df_poly.loc[df_poly.id=='foo']
df_points['foo'] = df_points['points'].map(lambda x: True if foo.contains(x).any()==True else False
But given that I have 30 polygons, I was wondering if there is a better way. 但鉴于我有30个多边形,我想知道是否有更好的方法。 Appreciate any help!
感谢任何帮助!
Not really clear what kind of data structures you actually have. 不太清楚你实际拥有什么样的数据结构。 Also, all your expected results are False, so that's kind of hard to check.
此外,您的所有预期结果都是假的,因此很难检查。 Assuming GeoSeries and GeoDataFrames, I would do this:
假设GeoSeries和GeoDataFrames,我会这样做:
from shapely.geometry import Point, Polygon
import geopandas
polys = geopandas.GeoSeries({
'foo': Polygon([(5, 5), (5, 13), (13, 13), (13, 5)]),
'bar': Polygon([(10, 10), (10, 15), (15, 15), (15, 10)]),
})
_pnts = [Point(3, 3), Point(8, 8), Point(11, 11)]
pnts = geopandas.GeoDataFrame(geometry=_pnts, index=['A', 'B', 'C'])
pnts = pnts.assign(**{key: pnts.within(geom) for key, geom in polys.items()})
print(pnts)
And that gives me: 这给了我:
geometry bar foo
A POINT (3 3) False False
B POINT (8 8) False True
C POINT (11 11) True True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.