获取 google 映射多边形内线

get google maps polygon inner cords

我正在开发一个 GIS,我正在使用 wicket.js 和 WKT(jsts.js) 来合并多边形。

我画了两个多边形

然后,当我对这两个多边形进行并集时,输出的多边形内部没有孔

我在互联网上搜索过,我发现要在多边形内打洞,您必须设置内线和外线,因为内线就是洞。

谁知道如何用 wicket.js 得到内绳?

代码:

function dissolvePolygons(wicket, arrayPolygons) {
//convert polygons to WKT objects
var polygonsWTKObjects = polygonToWktObject(wicket, arrayPolygons);
//read wkt with jsts
var jstsGeometryObjects = jstsWKTReader(polygonsWTKObjects);
//union two jsts objects
var dissolvedGeometry = jstsGeometryObjects[0].union(jstsGeometryObjects[1]);
// Instantiate JSTS WKTWriter and get new geometry's WKT
var wktWriter = new jsts.io.WKTWriter();
var unionWKT= wktWriter.write(dissolvedGeometry);
// Reuse your Wicket object to ingest the new geometry's WKT
wicket.read(unionWKT);

var polyOptions = {
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: '#FF0000',
    fillOpacity: 0.35
};

var newPoly = wicket.toObject(polyOptions);
return newPoly;

//unionWKT value:
"POLYGON((-8.745800000000031 41.405,-8.632200000000011 41.4068,-8.621899999999982 41.3264,-8.61480000000006 41.2725,-8.730199999999968 41.2732,-8.73599999999999 41.3238,-8.745800000000031 41.405),(-8.649800000000027 41.3261,-8.655999999999949 41.3594,-8.703399999999987 41.3627,-8.696199999999976 41.3228,-8.695500000000038 41.2975,-8.646099999999933 41.2993,-8.649800000000027 41.3261))
}"


//CONVERT GOOGLE MAPS POLYGONS TO WKT EXPRESSIONS
function polygonToWktObject(wicket, arrayPolygons) {
var arrayPolygonWTKObjects = [];
var arrayPolygonWTKObjectsTest = [];
for (var i = 0, len = arrayPolygons.length; i < len; i++)
    arrayPolygonWTKObjectsTest.push(arrayPolygons[i].ToWKT());
return arrayPolygonWTKObjectsTest;
}

//READ WKT OBJECTS WITH JSTS
function jstsWKTReader(polygonsWTKObjects) {
// Instantiate JSTS WKTReader and get JSTS geometry objects
var arrayJSTSGeometricObjects = [];
var wktReader = new jsts.io.WKTReader();
for (i = 0, len = polygonsWTKObjects.length; i < len; i++)
    arrayJSTSGeometricObjects.push(wktReader.read(polygonsWTKObjects[i]));
return arrayJSTSGeometricObjects;
}
//gmap polygon extend
google.maps.Polygon.prototype.ToWKT = function () {
var poly = this;
var wkt = "POLYGON(";
var paths = poly.getPaths();
for (var i = 0; i < paths.getLength() ; i++) {
    var path = paths.getAt(i);
    wkt += "(";
    for (var j = 0; j < path.getLength() ; j++) {
(trailing comma)
        wkt += path.getAt(j).lng().toString() + " " + path.getAt(j).lat().toString() + ",";
    }
    wkt += path.getAt(0).lng().toString() + " " + path.getAt(0).lat().toString() + "),";
}

// resolve the last trailing "," and close the Polygon
wkt = wkt.substring(0, wkt.length - 1) + ")";

return wkt;
};

2016 年 5 月 4 日更新了 wicket-gmap3.js 更正了内圈的方向。

此代码在最新版本中按预期工作:

var wicket = new Wkt.Wkt();
wicket.read('POLYGON((-8.745800000000031 41.405,-8.632200000000011 41.4068,-8.621899999999982 41.3264,-8.61480000000006 41.2725,-8.730199999999968 41.2732,-8.73599999999999 41.3238,-8.745800000000031 41.405),(-8.649800000000027 41.3261,-8.655999999999949 41.3594,-8.703399999999987 41.3627,-8.696199999999976 41.3228,-8.695500000000038 41.2975,-8.646099999999933 41.2993,-8.649800000000027 41.3261))');
wicket.toObject(map.defaults).setMap(map);