有一条多段线,其顶点坐标列表为[(x1,y1),(x2,y2),(x3,y3),…]和一个点(x,y)。在Shapely中,geometry1.distance(geometry2)
返回两个几何体之间的最短距离。
>>> from shapely.geometry import LineString, Point
>>> line = LineString([(0, 0), (5, 7), (12, 6)]) # geometry2
>>> list(line.coords)
[(0.0, 0.0), (5.0, 7.0), (12.0, 6.0)]
>>> p = Point(4,8) # geometry1
>>> list(p.coords)
[(4.0, 8.0)]
>>> p.distance(line)
1.4142135623730951
但我还需要找到直线上最接近点(x,y)的点的坐标。在上面的例子中,这是LineString
对象上距离Point(4,8)
1.4142135623730951单位的点的坐标。计算距离时,方法distance()
应具有坐标。有什么方法可以从这个方法返回它吗?
如果您有一个单独的段(例如:一行,如引用标题),而不是一个段列表,下面是我所做的,以及一个通过的测试用例。请考虑一下,本页面上的一些用户只是从谷歌搜索的标题中寻找。
Python代码:
测试用例:
注意:我假设这个函数在一个
Segment
类中。 如果你的行是无限的,不要将lerp
限制在0到1之间,但至少要提供两个不同的a
和b
点。您描述的GIS术语是linear referencing,和Shapely has these methods。
另一种方法是使用^{} :
它提供了与线性引用技术相同的答案,但可以从更复杂的几何输入(如两个多边形)确定最近的点对。
相关问题 更多 >
编程相关推荐