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);