4

是否有任何方便的方法来计算折线(由谷歌方向生成的路线)和不在该折线上的标记之间的直接(最短)距离?

我发现的唯一方法是Polyline.getPath()手动循环遍历顶点以计算最短距离,但这似乎有点苛刻:

var path = routes[0].overview_path;

for (var i = 0; i < data.points.length; i++) {
    var latLngA = new LatLng(data.points[i].lat, data.points[i].lng);
    var shortest_distance = null;

    for (var j = 0; j < path.length; j++) {
        var distance = google.maps.geometry.spherical.computeDistanceBetween(latLngA, path[i]);

        if (shortest_distance == null || distance < shortest_distance) {
            shortest_distance = distance;
        }
    }

    console.log(data.points[i].point_title, shortest_distance);
}

提前致谢!

4

2 回答 2

0

据我所知,Google Maps API 并没有为您提供轻松做到这一点的方法。不幸的是,您使用的算法不会给出准确的答案,因为它给出了从标记到路径上最近顶点的距离,而不是折线本身上的最近点,这通常不是点之一。

如果您真的需要准确的计算,我所知道的最佳选择是使用 Javascript Topology Suite ( JSTS )。JSTS 有大量的地理公式来计算这类事情。这意味着将从路线 API 返回的折线转换为 JSTS 对象并调用正确的实用程序函数。不是微不足道的,但也不是太难。

于 2012-12-06T22:12:54.777 回答
0

使用 turf - 模块化地理空间分析引擎。 https://turfjs.org/docs/

于 2021-09-17T14:30:08.843 回答