我有一个已命名多边形的列表:
import pandas as pd
import geopandas as gp
df = gp.GeoDataFrame([['a',Polygon([(1, 0), (1, 1), (2,2), (1,2)])],
['b',Polygon([(1, 1), (2,2), (3,1)])]],
columns = ['name','geometry'])
df = gp.GeoDataFrame(df, geometry = 'geometry')
和命名点列表:
points = gp.GeoDataFrame( [['box', Point(1.5, 1.75)],
['cone', Point(3.0,2.0)],
['triangle', Point(2.5,1.25)]],
columns=['id', 'geometry'],
geometry='geometry')
我想返回一个包含在多边形内的点的名称以及它们所在的多边形的名称的列表,其代码如下:
n=0
for name in points:
if df['geometry'][n].contains(points['geometry'][n]) == True:
print(points['id'][n],df['name'][n])
n+=1
这将返回第一个点,但随后循环将在第二个点中断,因为if
语句返回了False
。
我试图使用continue
语句使循环进入下一个迭代,如下所示:
n=0
for name in points:
if df['geometry'][n].contains(points['geometry'][n]) == True:
print(points['id'][n],df['name'][n])
n+=1
continue
但这仍然只返回第一个点和多边形的结果。
如何停止打破循环的“假”结果?
答案 0 :(得分:1)
您没有正确使用for循环。 point
仅包含一个条目。
for geo1, name, geo2, id in zip(df['geometry'], df['name'], points['geometry'], points['id']):
if geo1.contains(geo2):
print(id, name)
还是要比较每个df几何与每个点?
for geo1, name in zip(df['geometry'], df['name']):
for geo2, id in zip(points['geometry'], points['id']):
if geo1.contains(geo2):
print(id, name)