【发布时间】:2016-06-22 12:26:46
【问题描述】:
我正在开发一个 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;
};
【问题讨论】:
-
你能分享一下代码(你是如何进行联合的)和生成的 WKT 吗?
-
您的联合多边形已正确形成并且有一个孔(WKT 表示很好)。你是如何绘制多边形的?
-
那么假设输出多边形(带有联合的多边形)里面有洞吗?我在画它:p.setMap(map)
-
是的,您发布的联合多边形
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))有一个洞。p.setMap(map)没有帮助。你能详细说明一下这幅画吗? -
如上所述:var polyOptions = { strokeColor: '#FF0000', strokeOpacity: 0.8, strokeWeight: 2, fillColor: '#FF0000', fillOpacity: 0.35 }; var newPoly = wicket.toObject(polyOptions); newPoly.setmap(map);
标签: javascript google-maps google-maps-api-3 wkt