计算Google Maps API v3中折线(路线)和标记之间的距离

时间:2012-12-06 18:28:35

标签: google-maps google-maps-api-3 google-maps-markers

有没有方便的方法来计算Polyline(Google方向生成的路线)与不在该折线上的标记之间的直接(最短)距离?

我发现的唯一方法是手动循环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);
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

据我所知,Google Maps API无法让您轻松完成此操作。不幸的是,你使用的算法不能给出准确的答案,因为它给出了从标记到路径上最近的顶点的距离,而不是折线本身的最近点,这通常不是其中一个点。 / p>

如果您确实需要准确的计算,我所知道的最佳选择是使用Javascript拓扑套件(JSTS)。 JSTS有很多用于计算此类事物的地理公式。这意味着将从Directions API返回的折线转换为JSTS对象并调用正确的实用程序函数。不是微不足道的,但也不是太难。