Node.js/Javascript库用于测试点是否在GeoJSON多边形中。

12
有没有适用于node.js或JavaScript的库,可以提供检查坐标是否在geojson多边形中的功能?
我正在尝试创建一个小型HTTP API,告诉我包含给定坐标的多个多边形(代表国家,县,城市等)。
我想把所有多边形和它们的边界框列表保存在内存中,然后首先检查每个多边形的边界框是否包含该坐标。如果是,则检查该坐标是否在多边形本身中。
我知道有一个叫做“clipper”的库,已经移植到了 JavaScript,但似乎该库不提供简单的“pointInPolygon”函数,即使该库本身非常强大。这个库仍然可以实现吗?
此外,我还发现另一个名为{{link2:“geojson-js-utils”}}的库,但它似乎不支持多边形(至少没有在那里提到)。
我找到了一些其他库,可以检查点是否在多边形中,但我不知道如何使用它们来检查点是否在多边形中。
任何提示?

我稍微改进了一下问题。希望您能重新打开它。否则,请告诉我缺少什么。 - Van Coding
如果一个点在一个多边形内,那么它不就在包含该多边形的复合多边形中吗? - Josh C.
换句话说,既然多边形是多个多边形的数组,为什么不直接遍历该数组呢? - Josh C.
@JoshC. 因为有些多边形可能是孔。 - Van Coding
你能提供一个洞的场景吗?我还不确定为什么那是个问题。 - Josh C.
1个回答

0
最新Clipper中,有一个高效的PointInPolygon函数。它使用了Hormann和Agathos的算法任意多边形中的点问题Javascript Clipper的PointInPolygon函数文档中写道:

ClipperLib.Clipper.PointInPolygon()

Number PointInPolygon(IntPoint pt, Path poly)

如果为假,则返回0,如果pt在多边形上,则返回-1,如果pt在多边形内部,则返回+1。

用法:

var poly = [{X:10,Y:10},{X:110,Y:10},{X:110,Y:110},{X:10,Y:110}];
var pt = new ClipperLib.IntPoint(50,50);
var inpoly = ClipperLib.Clipper.PointInPolygon(pt, poly);
// inpoly is 1, which means that pt is in polygon

为了测试多边形,您可以遍历子多边形并使用PointInPolygon进行检查。


问题在于Clipper是这样的:“Javascript Clipper库可以对线条和多边形进行裁剪和偏移。”,但地理定位是另一回事,它涉及到sin cos等计算来考虑地球半径。问题出现在一个球体而不是二维平面上,因此处理方法也不同。 - Julio Marins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接