Javascript 如何使用JSTS库计算GoogleMapsAPI中的相交面积?

Javascript 如何使用JSTS库计算GoogleMapsAPI中的相交面积?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我试图计算两个三角形相交的面积。 我发现有一种方法。 我在本地计算机上尝试了它,但是我得到了一个未捕获的类型错误:未定义不是一个函数。 还有一个来自JSTS的消息。在这里你可以看到代码。 我的代码在JSFIDLE中看起来相同: var union = triangleCoords.union(secondTriangleCoords); var intersection = triangleCoords.intersection(secondTriangleCoords); console.lo

我试图计算两个三角形相交的面积。 我发现有一种方法。 我在本地计算机上尝试了它,但是我得到了一个
未捕获的类型错误:未定义不是一个函数
。 还有一个来自JSTS的消息。在这里你可以看到代码。 我的代码在JSFIDLE中看起来相同:

var union = triangleCoords.union(secondTriangleCoords);
var intersection = triangleCoords.intersection(secondTriangleCoords);
console.log('Intersection ' + intersection);
google.maps.geometry.spherical.computeArea(intersection);

是否也需要进行转换?

通常的答案是,您需要将google.maps.Polygon对象转换为jsts.geom.Geometry对象,然后运行union。如果要在Google Maps Javascript API v3映射上显示结果,则需要将返回的jsts.geom.Geometry对象转换回Google.Maps.Polygon

此代码(从)将路径转换为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);

不过,要对结果使用computeArea方法,需要将其转换回一个数组或google.maps.LatLng objects()的MVCArray

或者可以使用[jsts.geom.Polygon.getArea]()方法

对于三角形区域,使用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);

jsts库没有向Google Maps Polygon类添加union方法。这个问题的答案可能与此相关。非常感谢!这太棒了!但我还是不明白,它还回来了什么?在文档中只提到“返回此多边形的面积”。你能不能合并一下,我想他们是一样的谢谢我能说的最好的(我同意这不清楚),JSTS的getArea方法返回二维面积(所以如果你给它Lat/Lng坐标,单位将是度^2,但不是很有用),这就是为什么我在我的答案中把翻译添加回Google Maps对象,作为函数,返回米和平方米。
var intersectionGMarea = google.maps.geometry.spherical.computeArea(intersectionGMArray);