У меня есть список именованных полигонов:
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 для этих точек и полигонов, чтобыпосмотрим, какая точка попадает в какой полигон и возвращает туда имена и идентификаторы в список 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])
Теперь я хочу попробовать и изменить цикл, чтобы он добавил столбец куказывает на датафрейм с именем «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'