geopandas指向距最近边缘的多边形距离

时间:2020-01-23 21:56:03

标签: python pandas geopandas

所以我有大约10,000行的geopandas数据框,像这样。每个点都在多边形内(我已经确定了)。

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

但是我正在努力将其应用于1万行。

我尝试创建一个函数,但是不断出现错误("'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 :(得分:0)

我认为您的数据缺少值。
您可以尝试以下方法:

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)