Javascript 如何组合多边形并删除重叠?

Javascript 如何组合多边形并删除重叠?,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我在谷歌地图中制作了可编辑的多边形,现在我可以改变形状,在上面打洞,将两个以上的多边形组合成多多边形,然后再次分解它们 请参阅并阅读Legenda中的说明,自己尝试一下 我搞不懂的一个问题是如何将两个重叠的多边形合并为一个没有重叠的多边形。 大概是这样的: function(path1, path2) { algorithm... return newPath; } 谢谢。非常感谢你的建议。我用过: 组合形状,在形状上打洞或剪裁形状。 因此,我不得不将Google Maps路径转换为W

我在谷歌地图中制作了可编辑的多边形,现在我可以改变形状,在上面打洞,将两个以上的多边形组合成多多边形,然后再次分解它们

请参阅并阅读Legenda中的说明,自己尝试一下

我搞不懂的一个问题是如何将两个重叠的多边形合并为一个没有重叠的多边形。 大概是这样的:

function(path1, path2) {
  algorithm...
  return newPath;
}

谢谢。

非常感谢你的建议。我用过:

组合形状,在形状上打洞或剪裁形状。 因此,我不得不将Google Maps路径转换为WKT,并编写了以下Javascript:

function doeWKT(dePaths) {
var deWKTarray = [];    
for (var i = 0; i < dePaths.length; i++) {
    dePath = dePaths.getArray()[i].getArray();
    var deKomma = "";
    var deCoords = "";
    for (var j = 0; j < dePath.length; j++) {
        deLatLng = dePath[j];
        if (j == 0) var deCoords0 = deKomma + deLatLng.lng().toFixed(6) + " " + deLatLng.lat().toFixed(6);
        deCoords +=  deKomma + deLatLng.lng().toFixed(6) + " " + deLatLng.lat().toFixed(6);
        deKomma = ",";
    }
    deWKTarray.push("(" + deCoords + "," + deCoords0 + ")");
}

var deHoles = [];
var deReader = new jsts.io.WKTReader();     
for (var i = 0; i < deWKTarray.length; i++) {
    var deHole = deReader.read("POLYGON("+deWKTarray[i]+")");
    if (!deHoles[i]) deHoles[i] = -1;
    for (var j =0; j < deWKTarray.length; j++) {
        if ( i != j) {
            var deContainer = deReader.read("POLYGON(" + deWKTarray[j] + ")");
            if (deHole.within(deContainer)) deHoles[i] = j;
        }
    }
}

var deKomma = "";
var deWKTstring = "";
var deMulti = false;
for (var i = 0; i < deWKTarray.length; i++) {
    if (deHoles[i] == -1) {
        deWKTstring += deKomma + "(" + deWKTarray[i] + "";
        if (i > 0) var deMulti = true;
    }
    for (var j = 0; j < deHoles.length; j++) {
        if (deHoles[j] == i) deWKTstring += "," + deWKTarray[j] + "";
    }
    if (deHoles[i] == -1) deWKTstring += ")";   
    deKomma = ",";
}

if (deMulti) deWKTstring = "MULTIPOLYGON(" + deWKTstring +")";
else deWKTstring = "POLYGON" + deWKTstring;
return deWKTstring;
}
函数doeWKT(dePaths){
var deWKTarray=[];
对于(变量i=0;i0)var deMulti=true;
}
对于(var j=0;j

您可以尝试/查看所有在中工作的内容(请阅读图例中的说明)

我会使用一个库来完成此操作…有两个是您文章底部的链接已断开(404未找到)。这个例子在什么地方还可用吗?
function doeWKT(dePaths) {
var deWKTarray = [];    
for (var i = 0; i < dePaths.length; i++) {
    dePath = dePaths.getArray()[i].getArray();
    var deKomma = "";
    var deCoords = "";
    for (var j = 0; j < dePath.length; j++) {
        deLatLng = dePath[j];
        if (j == 0) var deCoords0 = deKomma + deLatLng.lng().toFixed(6) + " " + deLatLng.lat().toFixed(6);
        deCoords +=  deKomma + deLatLng.lng().toFixed(6) + " " + deLatLng.lat().toFixed(6);
        deKomma = ",";
    }
    deWKTarray.push("(" + deCoords + "," + deCoords0 + ")");
}

var deHoles = [];
var deReader = new jsts.io.WKTReader();     
for (var i = 0; i < deWKTarray.length; i++) {
    var deHole = deReader.read("POLYGON("+deWKTarray[i]+")");
    if (!deHoles[i]) deHoles[i] = -1;
    for (var j =0; j < deWKTarray.length; j++) {
        if ( i != j) {
            var deContainer = deReader.read("POLYGON(" + deWKTarray[j] + ")");
            if (deHole.within(deContainer)) deHoles[i] = j;
        }
    }
}

var deKomma = "";
var deWKTstring = "";
var deMulti = false;
for (var i = 0; i < deWKTarray.length; i++) {
    if (deHoles[i] == -1) {
        deWKTstring += deKomma + "(" + deWKTarray[i] + "";
        if (i > 0) var deMulti = true;
    }
    for (var j = 0; j < deHoles.length; j++) {
        if (deHoles[j] == i) deWKTstring += "," + deWKTarray[j] + "";
    }
    if (deHoles[i] == -1) deWKTstring += ")";   
    deKomma = ",";
}

if (deMulti) deWKTstring = "MULTIPOLYGON(" + deWKTstring +")";
else deWKTstring = "POLYGON" + deWKTstring;
return deWKTstring;
}