使用Google地图API计算多个经纬度之间的距离

0 投票
2 回答
729 浏览
提问于 2025-04-17 23:35

如果我在数据库里存了一些经纬度坐标,而我想把这些坐标和我现在的位置进行比较(也就是计算每个坐标和我当前位置之间的距离),那么我该怎么用谷歌地图API来实现呢?或者说,用我的数据库来做会更简单吗?

2 个回答

1

在球面上计算两个点之间的距离,需要用到一种叫做哈弗辛公式的数学公式,这个公式涉及到一些三角学的知识,理解起来可能有点难。

更简单的方法是使用谷歌地图的API,里面有一个很方便的函数叫做computeDistanceBetween,它在google.maps.geometry.spherical这个命名空间下。

下面是使用computeDistanceBetween的示例代码:

var home = ['London', new google.maps.LatLng(51.5, -0.1167)];

var pts = [
        ['Prague', new google.maps.LatLng(50.08, 14.43)],
        ['Paris', new google.maps.LatLng(48.856614, 2.3522219000000177)],
        ['Berlin', new google.maps.LatLng(52.5200065999, 13.404953999999975)]
];

// provide a shortcut for the distance function
var dist = google.maps.geometry.spherical.computeDistanceBetween;

pts.forEach(function(pt){
    var d = dist(home[1], pt[1])/1000;
    // d is now the distance (in km) between the home coordinate and the point
});

你可以在这里查看示例效果:http://jsfiddle.net/aJTK2/5/

0

如果你打算用数据库来做这类工作,建议你考虑使用PostGIS。安装了PostGIS后:

CREATE EXTENSION postgis;

SELECT ST_Distance( 
    ST_GeographyFromText('POINT(115.764286 -31.746416)'), 
    ST_GeographyFromText('POINT(151.036606 -33.906896)')
);

会产生:

   st_distance    
------------------
 3295294.42439749
(1 row)

和谷歌地图的输出相比,谷歌地图认为这大约是3700公里(步行距离,不是直线距离)

所以在距离上看起来是对的。

注意,这里说的是球面距离,也就是沿着地球表面的距离,而不是直接穿过地球的距离。

要注意PostGIS和谷歌地图中的坐标顺序是不同的。

想了解更多关于PostGIS的内容,可以看看:

撰写回答