传单绘制 确定一个多边形是否包含另一个多边形
Leaflet Draw figure out if a polygon includes another one
我有一个问题与传单绘制插件有关。当我绘制多边形或标记时,我能够确定多边形内部是否包含标记,或者标记是否放置在多边形内:
polygon.getBounds().contains([latitude, longitude])
我正在寻找任何做类似事情的例子,我想知道当我画一个多边形时,它是否接触,或者里面有另一个多边形,或者与另一个多边形相交。
¿有没有办法以简单的方式做到这一点?
谢谢大家的时间。最好!
尽管 iH8 是正确的,并且 Leaflet 不支持检查多边形是否包含在另一个多边形中,但我可以通过以下示例提供更好的答案。
是的,GeoScript 提供了可用于检查多边形是否包含在另一个多边形中的方法,但我发现它很复杂,而且它们的文档不完整且不那么直观。
这就是为什么对于这类事情,我总是使用JTS(或者它是JavaScript端口JSTS)。要使用传单或谷歌地图坐标的方法,您首先需要将它们转换为 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;
}
现在你只需要生成两个 JSTS 多边形并检查一个是否包含在另一个多边形中:
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;
}
它如何与Leaflet.Draw插件一起工作,你可以在我创建的这个jsFiddle中看到。此示例允许您在地图上仅绘制两个图层(这适用于矩形和多边形),然后检查第二个图层是否包含在第一个图层中。如果您删除一个,则将删除所有内容,以便您可以从头开始绘制。
更新 30.10.2017.:
现在你可以使用 turf.js 做这些事情(方法布尔包含)
Leaflet 没有进行此类计算的功能。您可以使用像GeoScript这样的库。几何。几何类有一个包含方法,可以计算一个几何是否包含另一个几何。它还有一个完全相反的 in 方法和一个相交方法。几乎所有你需要的东西,然后是一些:封面,十字架,重叠和触摸。
- 如何在谷歌地图中制作一个覆盖世界的多边形
- D3 map - 将两个不相交的 SVG 多边形路径合并为一个路径
- 在谷歌地图上创建一个多边形,并使用MVC将结果保存到数据库中
- 如何在另一个多边形之上绘制多边形
- 传单绘制 确定一个多边形是否包含另一个多边形
- 谷歌地图api v3:点击一个按钮使多边形不可编辑
- 裁剪网页上的图像在一个非线性/矩形的方式,所以任何形式的多边形
- 如何找到如果一个坐标是在一个多边形在猫鼬节点js
- 如何知道一个坐标是在多边形内还是在多边形外?PHP +谷歌地图+ JS
- 在php中循环帖子并添加一个类到多边形(传单)
- 如何转换一个圆圈,两个矩形到多边形在谷歌地图上,并使其出现在同一地图上
- 我如何找到一个多边形上从一个点到那个多边形的最短点(不是它的距离)
- 我有一个多边形,我知道所有的4个点.我如何确定一个给定的点是否在多边形内部与OpenLayers
- D3:在D3中找到一个几何多边形的面积
- 是否有一种方法来确定一个给定的点(宽,长)是否在一个绘制的多边形内
- 多个多边形与多种颜色在一个谷歌地图
- 删除多边形,并添加一个新的谷歌地图
- 如何在three.js中创建一个颜色选择器,这将允许用户改变Maya 3D模型中特定多边形的颜色
- 如何选择一个多边形的随机x,y坐标
- 我该如何迭代一个多边形