geo pandas точка на расстоянии многоугольника до ближайшего края - PullRequest
0 голосов
/ 24 января 2020

Итак, у меня есть гео pandas фрейм данных ~ 10000 строк, как это. Каждая точка находится внутри многоугольника (я в этом убедился).

point                         name      field_id    geometry
POINT(-0.1618445 51.5103873)  polygon1  1           POLYGON ((-0.1642799 51.5113756, -0.1639581 51.5089851, -0.1593661 51.5096729, -0.1606536 51.5115358, -0.1642799 51.5113756))

Я хочу добавить новый столбец с именем distance_to_nearest_edge. Каково расстояние от point до ближайшей границы многоугольника.

Есть стройная функция, которая вычисляет то, что я хочу:

from shapely import wkt
poly = wkt.loads('POLYGON ((-0.1642799 51.5113756, -0.1639581 51.5089851, -0.1593661 51.5096729, -0.1606536 51.5115358, -0.1642799 51.5113756))')
pt = wkt.loads('POINT(-0.1618445 51.5103873)')
dist = poly.boundary.distance(pt)
---
dist = 0.0010736436340879488

Но я изо всех сил пытаюсь применить это до 10 тыс. строк.

Я пытался создать функцию, но продолжаю получать ошибки ("'Polygon' object has no attribute 'encode'", 'occurred at index 0')

Например:

def fxy(x, y):
    poly = wkt.loads(x)
    pt = wkt.loads(y)
    return poly.exterior.distance(pt)

Ценить любую помощь!

1 Ответ

0 голосов
/ 25 января 2020

Я думаю, что ваши данные имеют пропущенные значения.
Вы можете попробовать это:

df['distance'] = df.apply(lambda row : row['point'].distance(row['geometry'].boundary) if pd.notnull(row['point']) & pd.notnull(row['geometry']) else np.nan, axis=1)
...