几个latlng与Google Maps API之间的距离

时间:2014-03-24 00:44:20

标签: javascript python django postgresql google-maps-api-3

如果我在我的数据库中存储了几个latlng点,并且我想将这些点与我的实际latlng位置进行比较(给我每个latlng点与我的实际latlng之间的距离),那么google maps API将如何实现这一点?或者是使用我的数据库会更容易吗?

2 个答案:

答案 0 :(得分:1)

计算球体上两点之间的距离需要使用haversine formula,这需要对三角学有相当深入的理解。

更简单的方法是利用在computeDistanceBetween命名空间中具有便捷功能google.maps.geometry.spherical的{​​{3}}。

以下是使用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
});

请参阅此处的工作示例:Google Maps API

答案 1 :(得分: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)

与Google地图输出相比,which thinks it's about 3700 km (walking, not crow-flies)

这似乎是正确的,距离明智。

请注意,这是球体距离,即在地球表面,而不是通过它的点对点。

注意PostGIS与谷歌地图的协调顺序。

要了解有关PostGIS的更多信息: