3

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

4

3 回答 3

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));

}
于 2013-03-18T09:31:58.840 回答
2

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

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

于 2009-05-22T00:18:16.623 回答
1

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

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

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

于 2009-05-22T00:21:57.087 回答