DistanceMatrixService提供与Google地图不同的距离

时间:2016-11-14 14:12:41

标签: javascript google-maps google-distancematrix-api

我正在使用Google地图DistanceMatrixService()获取GoogleMaps中2个点之间的路线和距离。但是,我从该服务获得的结果与GoogleMaps网站上显示的结果略有不同。

当网站显示3公里时,我得到4公里。

我知道使用Places而不是实际地址会有所不同,但我在api和网站都使用了坐标,结果仍然不同。

这是我的代码:

//Just for example
var origin = '-27.5970141,-48.5614466';
var destination = '-27.5927353,-48.5556316';

var service = new google.maps.DistanceMatrixService();
    service.getDistanceMatrix({
        origins: [origin],
        destinations: [destination],
        travelMode: google.maps.TravelMode.DRIVING,
        unitSystem: google.maps.UnitSystem.METRIC
    }, callback);

map gives a distance上的这些坐标为3,1km,服务请求为4.8 km。

我需要做些什么来获得实际距离?

修改

在做一些测试时,我注意到我可以通过传递完整的地址而不是坐标来获得适当的距离。但这给了我两个问题:

  • 1:通常我只能访问坐标,因为它易于存储/获取信息(必须更改系统的某些核心代码才能获得完整地址);
  • 2:当处理地址引用大位置的地方时,例如地址很大的大学,起点并不总是应该在哪里。所以我一直在错误的位置和错误的距离。

1 个答案:

答案 0 :(得分:2)

引用包含数字的字符串不是"坐标" (字符串会发送到地理编码器,并会生成最接近"已知"地址的位置),请使用google.maps.LatLng或google.maps.LatLngLiteral作为坐标。

来自the documentation

  

目的地类型:数组<(字符串| LatLng |地方)>

     

包含目标地址字符串,或LatLng或Place对象的数组,用于计算距离和时间。必需的。

     

来源类型:数组<(字符串| LatLng |地方)>

     

包含原点地址字符串,LatLng或Place对象的数组,用于计算距离和时间。必需的。

//Just for example
var origin = new google.maps.LatLng(-27.5970141,-48.5614466);
var destination = new google.maps.LatLng(-27.5927353,-48.5556316);

var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix({
    origins: [origin],
    destinations: [destination],
    travelMode: google.maps.TravelMode.DRIVING,
    unitSystem: google.maps.UnitSystem.METRIC
}, callback);