我正在尝试使用clipper.js合并Google map (API v3 Javascript)上的2个多边形(绿色)。

之前:http://jsfiddle.net/kevdiho/tc53Y/

我的目标是只有1个多边形(红色)。问题在于最终的多边形不完全遵循路径,有时甚至更糟。

之后:http://jsfiddle.net/kevdiho/uF6ec/

合并我使用clipper.js和此功能ClipperLib.ClipType.ctUnion的2个绿色多边形

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

我怎么解决这个问题?
Clipper.js是一个很好的答案,或者还有其他库可用于googlemaps多边形?

最佳答案

如果您在AddPolygons调用之前先放大坐标,然后在并集操作后缩小坐标,则示例可以工作。 1000000000000。使用浮点数时需要缩放以保持精度,因为Clipper内部使用整数。这样做的缺点是操作速度很慢,因为如果坐标大量提升,Clipper会使用大整数库。

为了克服慢度(和精度)问题,可以使用一种新的(尽管仍在试验中的)“浮子” Clipper:
http://jsclipper.sourceforge.net/6.1.3.1_fpoint/clipper.js
http://jsclipper.sourceforge.net/6.1.3.1_fpoint/clipper_unminified.js

从Clipper 5迁移到6时,Clipper 6发生了一些变化,您必须考虑这些变化:
https://sourceforge.net/p/jsclipper/wiki/migration5to6/

我为您做了一个更改:
http://jsfiddle.net/uF6ec/2/
function dummy(){}

08-07 18:22