【问题标题】:geopandas point in polygon distance to nearest edgegeopandas 点到最近边缘的多边形距离
【发布时间】:2020-05-10 06:16:22
【问题描述】:

所以我有一个大约 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

但我正在努力将其应用于 10k 行。

我尝试创建一个函数,但我不断收到错误("'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)

感谢任何帮助!

【问题讨论】:

  • 你的函数能在简单的 x 和 y 上工作吗?
  • 您不需要使用 wkt.loads,因为您的 DataFrame 中已经有了形状优美的几何图形:gdf.apply(lambda row: row['geometry'].boundary.distance(row['point']), axis=1)
  • @adhg 是的,该功能适用​​于xy。例如。 def fxy(x, y): poly = x pt = y return poly.exterior.distance(pt) @PaulH - 我试过了,但出现以下错误:` AttributeError: ("'NoneType' object has no attribute '边界'", '发生在索引 6') `这很奇怪,因为当我提供输入而不是数据框时,该函数可以工作......
  • @Kvothe 你能告诉我你用哪个坐标参考系统来计算距离?

标签: python pandas geopandas


【解决方案1】:

我认为您的数据存在缺失值。
你可以试试这个:

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)

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 2022-08-06
    • 2016-01-23
    • 2013-05-03
    • 1970-01-01
    • 2021-07-20
    • 2010-10-28
    • 2012-06-14
    相关资源
    最近更新 更多