Javascript 传单.js联合/合并圆

Javascript 传单.js联合/合并圆,javascript,merge,geometry,leaflet,union,Javascript,Merge,Geometry,Leaflet,Union,我在地图上画了很多圆圈,使用的是传单.js。有时这些圆圈中有许多重叠。即使圆是透明的(CSS不透明度设置为0.3),也无法再正确地看到贴图。 我正在寻找一种方法来创建一个数字的n个圆圈。然而,我发现这似乎只适用于多边形 我的问题是:如何才能将要添加到传单.js地图中的圆合并起来 提前谢谢。我认为对L.circle对象执行并集操作不是一种简单的方法。但是,您可以使用创建~圆形多边形并对这些多边形执行并集操作。我的建议是将您的圆圈创建为LGeo。圆圈对象,并将它们全部放在同一图层组中,例如: var

我在地图上画了很多圆圈,使用的是传单.js。有时这些圆圈中有许多重叠。即使圆是透明的(CSS不透明度设置为0.3),也无法再正确地看到贴图。 我正在寻找一种方法来创建一个数字的n个圆圈。然而,我发现这似乎只适用于多边形

我的问题是:如何才能将要添加到传单.js地图中的圆合并起来


提前谢谢。

我认为对
L.circle
对象执行并集操作不是一种简单的方法。但是,您可以使用创建~圆形多边形并对这些多边形执行并集操作。我的建议是将您的圆圈创建为
LGeo。圆圈
对象,并将它们全部放在同一图层组中,例如:

var cities = new L.LayerGroup();
var chicago = LGeo.circle([41.84, -87.68], 1000000).addTo(cities);
var newOrleans = LGeo.circle([29.95, -90.07], 1000000).addTo(cities);
var denver = LGeo.circle([39.74, -104.99], 1000000).addTo(cities);
这很方便,因为一旦它们组合在一起,您就可以使用
.getLayers()
获得所有层的数组,然后对它们进行迭代以获得它们的并集。例如,此函数将获取层的数组,并返回其并集的
L.geoJson
对象,计算公式为:

函数统一(多段列表){
对于(变量i=0;i
下面是一个例子,这在工作:


[虽然使用Turf可能是更好的解决方案,但如果您想尝试使用Greiner-Hormann,这里有一个使用它的方法。您可能会注意到,如果您尝试使用不完全重叠的圆,则会产生错误。这是因为当输入多边形不重叠时,Greiner-Hormann例程不会返回任何结果。使用Turf将避免他的问题是,因为它的并集例程通过返回多多边形对象来处理非连续多边形。]

非常感谢您的回答,我真的很感激。这正是我想要的。我将使用草皮解决方案,因为可能存在不重叠的圆圈。非常欢迎您!如果这最终解决了您的问题,请接受答案。
function unify(polyList) {
  for (var i = 0; i < polyList.length; ++i) {
    if (i == 0) {
      var unionTemp = polyList[i].toGeoJSON();
    } else {
      unionTemp = turf.union(unionTemp, polyList[i].toGeoJSON());
    }
  }
  return L.geoJson(unionTemp);
}

var cityUnion = unify(cities.getLayers()).addTo(map);