从多边形内的点到多边形边缘的距离

时间:2009-05-22 00:11:33

标签: polygon point

我正在使用NLCD数据在一个巨大的区域,7个森林和非森林状态。在一些森林地区内是一个情节(这是我正在研究的硕士论文)。我用这个大型数据集难以理解我所问过的所有人,但我们确信那里有一个解决方案。森林/非森林区域是带符号和离散的栅格。通过对森林覆盖区域进行分类,我能够将森林区域变成多边形。我无法将非森林区域变成多边形(太大)。所以我试图让点距离(点在多边形内)到树木多边形的边缘。你有建议让一个点到森林边缘的距离吗?

3 个答案:

答案 0 :(得分:2)

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

如果要查找最近的边,您基本上想要迭代多边形定义的所有线段,进行线段到点的距离计算;这会找到你的距离。在this问题的Python中有一个很好的算法实现,并且那里有很好的算法描述。

答案 1 :(得分: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 + (edgePointA.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));

}

答案 2 :(得分:1)

如果您不确定该点是否位于外部多边形内,请先测试该点。然后,为了测试到最近的森林边缘的距离,你可以尝试这样的事情:

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

Google在'从点到多边形边缘的距离'方面有很多结果