gpt4 book ai didi

javascript - 如何使用 JSTS 库计算 Google Maps API 中的交叉区域?

转载 作者:搜寻专家 更新时间:2023-11-01 05:22:48 30 4
gpt4 key购买 nike

我正在尝试计算两个三 Angular 形之间的交点面积。我发现了 JSTS Topology Suite有一个Geometry class哪个方法intersection() .我在 JSFiddle 上试过了在我的本地计算机上,但我收到了 Uncaught TypeError: undefined is not a function。还有一个 example来自JSTS。在这里你可以看到代码。我的代码在 JSFiddle 中看起来是一样的:

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 对象,然后运行联合。如果您想在 Google Maps Javascript API v3 map 上显示结果,则需要将返回的 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 方法计算三 Angular 形面积、并集和交集。

将结果转换回 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

关于javascript - 如何使用 JSTS 库计算 Google Maps API 中的交叉区域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26037104/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com