Javascript googlemaps多边形与clipper.js的并集

Javascript googlemaps多边形与clipper.js的并集,javascript,google-maps-api-3,polygons,clipperlib,Javascript,Google Maps Api 3,Polygons,Clipperlib,我正在尝试将谷歌地图(API v3 Javascript)上的2个多边形(绿色)与clipper.js合并 之前: 我的目标是只有一个多边形(红色)。问题是最终的多边形并不是完全沿着路径,有时甚至是最糟糕的 之后: 为了合并2个绿色多边形,我使用了clipper.js和这个函数ClipperLib.ClipType.ctUnion var clipType = ClipperLib.ClipType.ctUnion; function mergePolygon() { for(j

我正在尝试将谷歌地图(API v3 Javascript)上的2个多边形(绿色)与clipper.js合并

之前:

我的目标是只有一个多边形(红色)。问题是最终的多边形并不是完全沿着路径,有时甚至是最糟糕的

之后:

为了合并2个绿色多边形,我使用了clipper.js和这个函数ClipperLib.ClipType.ctUnion

var clipType = ClipperLib.ClipType.ctUnion;
function mergePolygon()
  {
      for(j=0;j<array_polygon.length;j++){
          array_polygon_clipper = createarray_clipper_polygon(array_polygon[j]);
          subj_polygons.push(array_polygon_clipper);
      }
      cpr.AddPolygons(subj_polygons, ClipperLib.PolyType.ptSubject);
      var succeeded = cpr.Execute(clipType, solution_polygons);
      return solution_polygons;
  }
var clipType=ClipperLib.clipType.ctUnion;
函数mergePolygon()
{

对于(j=0;j如果您在AddPolygons调用之前将坐标放大,并在union操作之后将坐标缩小,例如10000000000,那么您的示例可能会起作用。当使用浮点时,需要进行缩放以保持精度,因为Clipper在内部使用整数。这有一个缺点,即操作缓慢,因为Clipper使用大整数库,即f坐标被大幅放大

为了克服速度慢(和精度)的问题,提供了一种新的(尽管仍然是实验性的)“浮动”裁剪器:

Clipper 6发生了一些变化,在从Clipper 5迁移到Clipper 6时,您必须考虑这些变化:

我为你做了一个改变:


function dummy(){}

以下是NAJ在对的注释中要求的一种非孔并集的方法。下图显示了两个并集的多边形,因此缺少孔:

小提琴:

产生洞的原因是主体多边形的方向不同。我们必须检测该区域是否为负数并反转方向:

if (ClipperLib.JS.AreaOfPolygon(array_polygon_clipper) < 0)
{
    array_polygon_clipper.reverse();
}

你可以阅读更多关于和的信息。

这个问题可能会有帮助:好!因为floats Clipper目前是实验性的,我会感谢任何反馈来帮助修复库中可能存在的错误。你能帮我吗?我基本上想要与@madiknight要求的一样的东西,但我不想要重叠处的洞,所以我想要一个完整的轮廓,知道吗关于如何使用clipper?是的。我将添加另一个答案。非常感谢Timo,他已经尝试解决了一段时间!如果其他人发现了这个问题,重要的是,如果您的任何多边形中有“洞”,请在一次调用中将所有多边形传递给新的google.maps.Polygon。否则,这些洞将被绘制两次。
var succeeded = cpr.Execute(ClipperLib.ClipType.ctUnion,
solution_polygons, ClipperLib.PolyFillType.pftNonZero, 
ClipperLib.PolyFillType.pftNonZero);