【发布时间】:2014-04-26 15:35:16
【问题描述】:
我想检查一个点是否位于特定多边形内。多边形是:
polygon= [ [-73.89632720118, 40.8515320489962],
[-73.8964878416508, 40.8512476593594],
[-73.8968799791431, 40.851375925454],
[-73.8967188588015, 40.851660158514],
[-73.89632720118, 40.8515320489962] ]
我要检查的点是:
1 = [40.8515320489962,-73.89632720118]
2 = [40.8512476593594,-73.8964878416508]
3 = [40.851375925454,-73.8968799791431]
4 = [40.851660158514,-73.8967188588015]
5 = [40.8515320489962,-73.89632720118]
如何判断这些点中的每一个是否都位于该多边形内?
下面的算法不起作用。我不知道为什么。
pt[lat,long]
function isPointInPoly(poly, pt){
for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)
((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1] < poly[i][1]))
&& (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0])
&& (c = !c);
return c;
}
我不想使用第三方解决方案,例如 google maps API 或这个https://github.com/mattwilliamson/Google-Maps-Point-in-Polygon。
我的尝试在这里: http://jsfiddle.net/nvNNF/2/
【问题讨论】:
-
在多边形检查之外选择一个点,看看从该点到您的点的线是否与定义多边形周长的奇数条线相交。
-
你可以在这里查看代码:我在多边形jsfiddle.net/nvNNF/2 中放了一个点,它返回“False”
-
poly[i].y应该是第 3 行末尾的poly[i][1]。该函数还检查点是否在多边形内,而不是该点是否属于多边形。 -
没有理由让你的 for 循环有这么多变量,从而降低可读性。您可以单独测试每个条件然后发出警报,一旦到达代码末尾,您就可以组合所有条件并再次检查。
标签: javascript polygon