如何根据kml路线获得两个lat lng坐标之间的距离?

时间:2015-07-01 15:30:26

标签: javascript google-maps kml google-earth

我有一个从Google Earth导出的kml文件,它本质上是伦敦泰晤士河一部分的路径。我把这个用Javascript作为KmlLayer放到Google Maps中。

我需要找到一种方法来计算路线上一个点与路线末端之间的距离。显然,当路线向上,向下,向后,向前等时,它不能只是线性距离。

我无法想出使用kml文件和Google地图执行此操作的方法,因此任何其他建议或方法都可以。我也许可以从kml文件中收集坐标并在地图上以另一种方式使用它们?但我不知道从哪里开始。

如果这个问题已在其他地方得到解答,我一如既往地道歉,但我看上去并没有运气。

提前致谢,

亚当

the route, generated in google earth

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,那就是将kml坐标提取到一个javascript对象数组中。

然后我遍历数组并使用Haversine公式得到路线上每个点之间的距离,并为每个物体分配一个距离值(从路线的起点开始)。

从那里我可以在路线上的每个点处锻炼,从开始到结束只需使用距离值。

views.string = '-1.692525715111287,51.692324976351,0 -1.691353785046965,51.69214295521361,0 -1.690097310611129,51.69205100316109,0...//etc etc';

    var array = views.string.split(',0 ');

    map.route = [];

    $.each(array, function (i, e) {
        if ((i + 1) == array.length) {
            e = e.replace(',0', '');
        }
        var coords = e.split(',');
        map.route.push({ lat: parseFloat(coords[1]), lng: parseFloat(coords[0]) });
    });

    var distance = 0;
    $.each(map.route, function (i, e) {
        if (map.route[i - 1] != undefined) {
            var d = map.getDistance(map.route[i - 1], e);
            distance += d;
            e.distance = distance;
        }
        else {
            e.distance = distance;
        }
    });