【问题标题】:How is distance between two LineStrings calculated?如何计算两个 LineStrings 之间的距离?
【发布时间】:2015-01-04 18:16:37
【问题描述】:

我正在从事我的大学项目,我使用 GeoTools 库。我的任务是实现考虑空间数据的 AGNES(凝聚嵌套)算法。为此,我需要计算空间对象之间的距离,例如点、曲线、多边形。

可以转换为Curve的LineString是一个GeoTools类,它继承了包括distance()在内的Geometry方法。我的问题是如何计算两个 LineString 对象之间的距离?它是连接两条曲线的最短线段吗?另外,我很好奇多边形的相似之处。

【问题讨论】:

  • 两个多边形之间的最短距离很容易,因为最短距离必须是从顶点到顶点。您所需要的只是两个顶点集上的 2 个嵌套循环。两条曲线之间的最短距离是连接它们的最短线段的距离。这要复杂得多,因为它取决于曲线的类型。我怀疑他们会使用贝塞尔曲线来近似曲线,然后用数值求解得到的方程。您必须查看源代码。
  • 太棒了!谢谢你的回答。这正是我想知道的。
  • 不要忘记 GeoTools 是开源的,因此您可以查看代码以确定如何计算某些内容。除非您使用投影坐标系 distance() 可能不是正确的答案。
  • 恐怕@PaulBoddington 错了。两个多边形之间的最小距离可以在多边形边缘之一内实现。例如三角形A:(-1,0),(1,0)(-1,-1)与三角形B的距离:(0,1),(-1,-2),(1 ,2) 分别在 A 和 B 的点 (0,0) 和 (0,1) 中实现。点 (0,0) 在 (-1,0),(1,0) 定义的边内。

标签: java gis geotools


【解决方案1】:

可以在find-shortest-path-from-one-geometry-to-other-on-shapely这个问题的答案中找到一个带有解释的算法。距离不一定是在两个顶点达到的。

该算法基本上计算每对边之间的距离,包括在边内部实现距离的情况(通过将一条边的顶点投影到另一条边)。

代码在python中,但它使用的几何库是shapely,它基于GEOS库,而GEOS库又是JTS的移植版本。

【讨论】:

    猜你喜欢
    • 2019-02-16
    • 2016-07-01
    • 2021-05-15
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多