我有一个命名多边形列表:
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])
现在我要尝试做的是改变循环,这样它会向points数据框添加一个名为'inside'的列,如果点在多边形中,则返回'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'
您正试图
append
转换为字符串。。。你知道吗只需将
points['inside'] = ''
行更改为points['inside'] = []
这对我有用。。。你知道吗
希望这对你有帮助!你知道吗
相关问题 更多 >
编程相关推荐