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

4

有没有一种方便的方法来计算Polyline(由Google Directions生成的路线)与不位于该Polyline上的标记之间的直接(最短)距离?

我找到的唯一方法是手动循环遍历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);
}

提前感谢您!


我正在编写一款安卓应用程序,当用户走出当前路线100米时应该发出警报。我认为计算从路线到当前位置的距离,然后将其与100米进行比较可以解决我的问题。您能指导我如何做吗?实际上,问题是我不明白如何获取第二个坐标以计算距离。 - xaif
2个回答

0
据我所知,Google Maps API没有提供一种简单的方法来实现这个功能。不幸的是,您使用的算法将无法给出准确的答案,因为它只会给出标记到路径上最近顶点的距离,而不是最接近折线本身的点,通常不会是其中一个点。
如果您真的需要精确计算,我知道的最好选择是使用Javascript拓扑套件(JSTS)。JSTS有大量用于计算此类事情的地理公式。这意味着将从方向API返回的折线转换为JSTS对象并调用正确的实用程序函数。这不是微不足道的,但也不是太困难。

我正在从死亡中复活,但是你会如何将折线转换为JSTS对象? JSTS似乎没有很好的文档,或者至少我找不到它。 - martskins

0

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接