Javascript 单张画出一个多边形是否包含另一个多边形

Javascript 单张画出一个多边形是否包含另一个多边形,javascript,maps,leaflet,Javascript,Maps,Leaflet,我有一个问题涉及传单绘图插件。 当我绘制多边形或标记时,我能够确定多边形内部是否包含标记,或者标记是否放置在多边形内部,如: polygon.getBounds().contains([latitude, longitude]) 我在寻找任何类似的例子,我想知道我什么时候画一个多边形,如果它接触,或者里面有另一个多边形,或者与另一个多边形相交 有没有简单的方法可以做到这一点 谢谢大家抽出时间。 最好的 传单没有进行此类计算的功能。你可以使用像这样的图书馆。该类有一个contains方法,该方法

我有一个问题涉及传单绘图插件。 当我绘制多边形或标记时,我能够确定多边形内部是否包含标记,或者标记是否放置在多边形内部,如:

polygon.getBounds().contains([latitude, longitude])
我在寻找任何类似的例子,我想知道我什么时候画一个多边形,如果它接触,或者里面有另一个多边形,或者与另一个多边形相交

有没有简单的方法可以做到这一点

谢谢大家抽出时间。
最好的

传单没有进行此类计算的功能。你可以使用像这样的图书馆。该类有一个contains方法,该方法可以计算一个几何体是否包含另一个几何体。它还有一个内部方法,它执行完全相反的操作,还有一个相交方法。几乎所有你需要的,然后像一些:覆盖,交叉,重叠和触摸

尽管iH8是正确的,而且传单没有支持检查多边形是否包含在另一个多边形中,但我可以通过下面的示例提供更好的答案

是的,GeoScript提供了我们可以用来检查多边形是否包含在另一个多边形中的方法,但我发现它很复杂,而且它们的文档不完整,也不那么直观

这就是为什么我总是使用这些类型的东西(或者它是JavaScript端口)。要使用传单或谷歌地图坐标的方法,首先需要将它们转换为JSTS坐标,这很简单:

function _leafletLatLng2JTS (polygon) {
        var coordinates = [];
        var length = 0;
        if (polygon && polygon.length) {
            length = polygon.length;
        }
        for (var i = 0; i < length; i++) {
            if (polygon.length) {
                coordinates.push(new jsts.geom.Coordinate(polygon[i].lat, polygon[i].lng));
            }
        }
        return coordinates;
}
这是如何与传单。画插件,你可以看到在这我已经创建。此示例允许您在地图上仅绘制两个图层(这适用于矩形和多边形),然后检查第二个图层是否包含在第一个图层内。如果删除其中一个,则所有内容都将被删除,以便可以从头开始绘制

2017年10月30日更新。


现在你可以用这些东西(方法)

太棒了,谢谢你的跟进。在我写我的答案时,这是不可用的。非常酷的东西:)不能在ES6中使用,在ES6中有导入的方法吗?你检查过turf.js吗?我已经更新了答案。
function _isWithin (firstLayer, secondLayer) {

        var firstInput = _leafletLatLng2JTS(firstLayer.getLatLngs()[0]),
                secondInput = _leafletLatLng2JTS(secondLayer.getLatLngs()[0]),
                geometryFactory = new jsts.geom.GeometryFactory();
        //add last point to the end to create a closed polygon
        firstInput.push(firstInput[0]);
        secondInput.push(secondInput[0]);

        var firstPolygon = geometryFactory.createPolygon(firstInput),
                secondPolygon = geometryFactory.createPolygon(secondInput);

        var isWithin = firstPolygon.contains(secondPolygon);

        return isWithin;
}