一般的答案是您需要将 google.maps.Polygon 对象转换为 jsts.geom.Geometry 对象,然后运行联合。如果您想在 Google Maps Javascript API v3 地图上显示结果,则需要将返回的 jsts.geom.Geometry 对象转换回 google.maps.Polygon。
这段代码(来自this question)将路径转换为jstsPolygon:
var coordinates = googleMaps2JTS(googlePolygonPath);
var geometryFactory = new jsts.geom.GeometryFactory();
var shell = geometryFactory.createLinearRing(coordinates);
var jstsPolygon = geometryFactory.createPolygon(shell);
类似这样的:
var geometryFactory = new jsts.geom.GeometryFactory();
var trito = bermudaTriangle.getPath();
var tritoCoor = googleMaps2JTS(trito);
var shell = geometryFactory.createLinearRing(tritoCoor);
var trito2 = secondBermuda.getPath();
var tritoCoor2 = googleMaps2JTS(trito2);
var shell2 = geometryFactory.createLinearRing(tritoCoor2);
var jstsPolygon = geometryFactory.createPolygon(shell);
var jstsPolygon2 = geometryFactory.createPolygon(shell2);
var intersection = jstsPolygon.intersection(jstsPolygon2);
jsfiddle
不过,要对结果使用 computeArea 方法,您需要将其转换回 google.maps.LatLng 对象的数组或 MVCArray (computeArea(path:Array.|MVCArray., radius?:number))
或者您可以使用 [jsts.geom.Polygon.getArea] (http://bjornharrtell.github.io/jsts/doc/api/symbols/jsts.geom.Polygon.html#getArea) 方法。
working fiddle 使用 jsts 方法具有三角形面积、并集和交集。
将结果转换回 google.maps.LatLng 和 google.maps.Polygon 对象的代码:
var jsts2googleMaps = function (geometry) {
var coordArray = geometry.getCoordinates();
GMcoords = [];
for (var i = 0; i < coordArray.length; i++) {
GMcoords.push(new google.maps.LatLng(coordArray[i].x, coordArray[i].y));
}
return GMcoords;
}
var intersectionGMArray = jsts2googleMaps(intersection);
然后得到面积:
var intersectionGMarea = google.maps.geometry.spherical.computeArea(intersectionGMArray);
working fiddle