【发布时间】: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 是的,该功能适用于
x和y。例如。 def fxy(x, y): poly = x pt = y return poly.exterior.distance(pt) @PaulH - 我试过了,但出现以下错误:` AttributeError: ("'NoneType' object has no attribute '边界'", '发生在索引 6') `这很奇怪,因为当我提供输入而不是数据框时,该函数可以工作...... -
@Kvothe 你能告诉我你用哪个坐标参考系统来计算距离?