我有一个已命名多边形的列表:
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')
当前,我在这些点和多边形上运行一个for循环,以查看哪个点落在哪个多边形内,然后将名称和ID返回到列表loc
,如下所示:
loc = []
for geo1, name in zip(df['geometry'], df['name']):
for geo2, id in zip(points['geometry'], points['id']):
if geo1.contains(geo2):
loc.append([id, name])
现在我要尝试做的是更改循环,以便将其添加到称为“内部”的点数据帧中,如果该点在多边形中则返回“ True”,否则返回“ False”。
我尝试过:
points['inside'] = ''
for geo1 in df['geometry']:
for geo2 in points['geometry']:
if geo1.contains(geo2):
points['inside'].append('True')
但这不起作用
我怎样才能做到最好?
很抱歉,我错过了一个非常基本的答案。
以下建议这可能是另一个问题的重复,但是链接的问题不是指将结果添加到列中,而当我运行示例脚本时,Matplotlib方法可能会更快收到错误float() argument must be a string or a number, not 'zip'
答案 0 :(得分:1)
您正在尝试append
到字符串...
只需将行points['inside'] = ''
更改为points['inside'] = []
points['inside'] = []
for geo1 in df['geometry']:
for geo2 in points['geometry']:
if geo1.contains(geo2):
points['inside'].append('True')
这对我有用...
希望这对您有所帮助!