4

Google マップでポリゴンを編集可能にしたので、形状を変更したり、穴を開けたり、さらに 2 つのポリゴンを組み合わせてマルチポリゴンにしたり、再び分解したりできるようになりました。

http://maps.amsterdam.nl/testshape/beheerを参照し、Legenda の説明を読んで自分で試してみてください。

私が理解できない 1 つの質問は、重なり合う 2 つのポリゴンを重なり合うことなく 1 つのポリゴンに結合する方法です。このようなもの:

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

ありがとうございました。

4

1 に答える 1

1

libの提案に感謝します。https://github.com/bjornharrtell/jsts/blob/master/examples/overlay.htmlを使用しました:

var union = a.union(b);
var difference = a.difference(b);

図形を組み合わせたり、図形に穴を開けたり、図形をクリップしたりします。そのため、Google マップのパスを 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;
}

http://maps.amsterdam.nl/testshape/beheerですべての動作を試す/見ることができます(凡例の説明を読んでください) 。

于 2013-03-06T22:46:22.330 に答える