【问题标题】:distance from point within a polygon to polygon edge从多边形内的点到多边形边的距离
【发布时间】:2010-10-28 02:38:18
【问题描述】:

我正在使用 NLCD 数据处理一个巨大的区域,包括 7 个森林州和非森林州。在一些森林区域内有一块地块(这是我正在研究的硕士论文)。我用这个大数据集难倒了我问过的每个人,但我们确信那里有一个解决方案。森林/非森林区域是带符号的离散栅格。通过对森林区域进行细分,我能够将森林区域变成多边形。我无法将非森林区域变成多边形(太大)。所以我试图让点距离(点在多边形内)到森林多边形的边缘。您对获取点到森林边缘的距离有什么建议吗?

【问题讨论】:

  • 您能更准确地说明您想要什么吗?您想要平均距离还是最短距离?还有什么?
  • 另外,你要计算多个点,对吧?

标签: polygon point


【解决方案1】:

嗯,这确实取决于几件事;具体来说,你想要哪个边缘?您想找到最近的边,还是有一些其他的标准来选择边(例如,基本方向)?

如果你想找到最近的边,你基本上想遍历多边形定义的所有线段,进行线段到点的距离计算;这会找到你的距离。在this question 中有一个很好的 Python 算法实现,那里有一些很好的算法描述。

【讨论】:

    【解决方案2】:

    这里是一些输出点到边的距离的代码,无论多边形是否凸,CCW 与否。您必须测试所有多边形的边缘。对于大量边缘来说,它可能会有点慢。

    - (double) distanceFromPoint:(yourPoint)testPoint
    {
    
    double pointX = edgePointB.x - edgePointA.x;
    double pointY = edgePointB.y - edgePointA.y;
    
    double k = pointX * pointX + pointY * pointY;
    double u = ((testPoint.x - edgePointA.x) * pointX + (testPoint.y - edgePointA.y) * pointY) / k;
    
    if (u > 1)
        u = 1;
    else if (u < 0)
        u = 0;
    
    double x = edgePointA.x + (u * pointX);
    double y = edgePointA.y + (u * pointY);
    
    double dx = x - testPoint.x;
    double dy = y - testPoint.y;
    
    return sqrt((dx * dx) + (dy * dy));
    
    }
    

    【讨论】:

    • 完美运行,但您打错了:u = ((testPoint.x - edgePointA.x) * pointX + (testPoint.y - edgePointA.y) * pointY ) / k;
    • 大家好,你们在外面是什么意思?
    • @workplaylifecycle:它是一个分数(来自[0, 1]),它表示点的段/边缘落在投影中的位置
    【解决方案3】:

    如果您不确定该点是否在外部多边形内,请先对其进行测试。然后,要测试到最近的森林边缘的距离,您可以尝试以下操作:

    http://www.bdcc.co.uk/Gmaps/BdccGeo.js

    Google 有大量关于“点到多边形边缘的距离”的结果

    【讨论】:

      猜你喜欢
      • 2012-06-14
      • 2021-12-06
      • 2016-08-26
      • 2020-05-10
      • 2022-08-06
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      • 2016-04-08
      相关资源
      最近更新 更多