首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多边形内的点到多边形边的距离

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

Stack Overflow用户
提问于 2009-05-22 00:11:33
回答 3查看 7.8K关注 0票数 3

我正在使用NLCD数据处理一个巨大的区域,森林和非森林的7个州。在一些林区内有一块地块(这是我正在写的硕士论文)。我已经用这个庞大的数据集难住了我问过的每个人,但我们确信有一个解决方案。森林/非森林区域是有符号的离散栅格。我能够通过划分森林区域将森林区域划分为多边形。我不能把非森林区域变成多边形(太大了)。所以我试着得到点的距离(点在多边形内)到森林多边形的边缘。你有什么建议可以得到一个点到森林边缘的距离吗?

EN

回答 3

Stack Overflow用户

发布于 2009-05-22 00:18:17

好吧,这确实取决于几件事;具体地说,你想要哪条边?是否要查找最近的边,或者是否有一些其他条件可用于选择边(例如,基数方向)?

如果你想找到最近的边,你基本上想要迭代多边形定义的所有线段,执行线段到点的距离计算;这将找到你的距离。在Python语言中有关于this问题的算法的很好的实现,并且有一些关于算法的很好的描述。

票数 2
EN

Stack Overflow用户

发布于 2013-03-18 17:31:59

下面是一些代码,用于输出点到边的距离,无论多边形是不是凸的,CCW是否凸。您必须测试所有多边形的边。对于一大组边来说,它可能会有点慢。

代码语言:javascript
复制
- (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));

}
票数 2
EN

Stack Overflow用户

发布于 2009-05-22 00:21:57

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

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/895900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档