Ошибка: аргумент float () должен быть строкой или числом, а не 'Polygon' при попытке найти точки в многоугольниках - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть список именованных полигонов:

import pandas as pd
import geopandas as gp
from shapely.geometry import Polygon
from shapely.geometry import Point
import matplotlib.path as mpltPath
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')

Я пытаюсь выяснить, какие точки есть в каких полигонах, и добавитьот столбца до точного фрейма данных с 'True' или 'False'

Ранее мне были показаны методы здесь , которые показывают некоторые способы быстрого выполнения этого и получили сценарий:

point = points['geometry']
path = mpltPath.Path(df['geometry'])
points['inside'] = path.contains_points(point)

но я получаю ошибку: аргумент float () должен быть строкой или числом, а не 'Polygon'

Как это исправить?

В качестве альтернативы у меня естьпробовал этот метод:

points['inside'] = []
for geo1 in df['geometry']:
    for geo2 in points['geometry']:
        if geo1.contains(geo2):
            points['inside'].append('True')

однако здесь я также получаю ошибку: длина значений не совпадает с длиной индекса

Любая помощь с любым из них будет принята с благодарностью!

1 Ответ

0 голосов
/ 21 ноября 2018

Я не получил «столбец true / false», но это должно сработать:

points.apply(lambda row: (row['id'], list(map(lambda e: e[0], list(filter(lambda p: p[1].contains(row['geometry']), df.values))))), axis=1)

Для каждой точки, которую вы получите, с полигонами, содержащими ее, выведите:

0         (box, [a])
1         (cone, [])
2    (triangle, [b])
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...