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