一条线上最近点的坐标

Asi*_*han 27 python distance geos shapely

存在具有顶点坐标列表的折线= [(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
Run Code Online (Sandbox Code Playgroud)

但我还需要找到最接近点(x,y)的线上的点的坐标.在上面的示例中,这是LineString对象上距离Point(4,8)1.4142135623730951单位的点的坐标.方法distance()在计算距离时应该有坐标.有没有办法让它从这个方法返回?

Mik*_*e T 32

您描述的GIS术语是线性参考,而Shapely具有这些方法.

# Length along line that is closest to the point
print(line.project(p))

# Now combine with interpolated point on line
np = line.interpolate(line.project(p))
print(np)  # POINT (5 7)
Run Code Online (Sandbox Code Playgroud)

  • 对于可能关注帖子的任何人的快速注释:`line.project(p)`测量沿着LineString()方法的参数中给出的起始节点坐标的线的投影点.但是`np = line.interpolate(line.project(p))`给出了全局坐标中的POINT(5 7),而不是从行的开头.这条线从(0,0)开始.所以它可能会令人困惑. (7认同)
  • 声明变量“np”时要小心,因为这可能与 numpy 导入发生冲突。 (3认同)