0

如何在我的 javascript 中获得以 KM 为单位的总距离。它已经显示在面板顶部,但我的 javascript 中也需要这个值。我的javascript如下:

 var directionsService = new google.maps.DirectionsService();
 var directionsDisplay = new google.maps.DirectionsRenderer();

 var map = new google.maps.Map(document.getElementById('map'), {
   zoom:7,
   mapTypeId: google.maps.MapTypeId.ROADMAP
 });

 directionsDisplay.setMap(map);
 directionsDisplay.setPanel(document.getElementById('panel'));


 var een = '52.3641205';
 var twee = '4.905697000000032';
 var drie = '52.6010666';
 var vier =  '4.73768229999996';

 var p1 = new google.maps.LatLng(een, twee);
 var p2 = new google.maps.LatLng(drie, vier);

 var request = {
   origin: p1, 
   destination: p2,
   travelMode: google.maps.DirectionsTravelMode.DRIVING
 };

 directionsService.route(request, function(response, status) {
   if (status == google.maps.DirectionsStatus.OK) {

     alert('Total travel distance is:' + response);

     directionsDisplay.setDirections(response);

   }
 }); 

该功能正在运行,但我也想提醒总距离。这可以在面板顶部看到。该面板将来将不可见,因此 getelementbyID 函数是不够的。

有人可以帮我弄这个吗?

谢谢你!

塞尔吉奥

4

4 回答 4

1

根据文档

单元系统

类型:单位系统

显示距离时使用的首选单位系统。默认为原产国使用的单位系统。

因此,如果您想将其强制为 METRIC:

var request = {
    origin: p1,
    destination: p2,
    travelMode: google.maps.DirectionsTravelMode.DRIVING,
    unitSystem: google.maps.UnitSystem.METRIC
};

这将强制 的值response.routes[0].legs[0].distance.text使用公制。

response.routes[0].legs[0].distance.value正如@geocodezip 回答中所解释的那样,即使原产国使用英制,您也可以依赖总是以米为单位返回的。

于 2015-07-28T15:25:59.953 回答
1

距离在每个路线段中 可用

google.maps.Distance 对象规范
距离表示为数值和显示字符串。

属性类型描述
文本字符串 距离值的字符串表示形式,使用请求中指定的 UnitSystem。
value number 以米为单位的距离。

概念证明小提琴

代码片段:

var geocoder;
var map;

function initialize() {
  var directionsService = new google.maps.DirectionsService();
  var directionsDisplay = new google.maps.DirectionsRenderer();

  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 7,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  });

  directionsDisplay.setMap(map);
  directionsDisplay.setPanel(document.getElementById('panel'));


  var een = '52.3641205';
  var twee = '4.905697000000032';
  var drie = '52.6010666';
  var vier = '4.73768229999996';

  var p1 = new google.maps.LatLng(een, twee);
  var p2 = new google.maps.LatLng(drie, vier);

  var request = {
    origin: p1,
    destination: p2,
    travelMode: google.maps.DirectionsTravelMode.DRIVING
  };

  directionsService.route(request, function(response, status) {
    if (status == google.maps.DirectionsStatus.OK) {

      document.getElementById('distance').innerHTML = 'Total travel distance is: ' + (response.routes[0].legs[0].distance.value / 1000).toFixed(2) + " km";
      alert('Total travel distance is: ' + (response.routes[0].legs[0].distance.value / 1000).toFixed(2) + ' km');
      directionsDisplay.setDirections(response);

    }
  });
}
google.maps.event.addDomListener(window, "load", initialize);
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="distance"></div>
<div id="map" style="border: 2px solid #3872ac;"></div>
<div id="panel"></div>

于 2015-07-28T15:35:23.200 回答
1

您可以通过以下方式轻松获得距离:

directionsDisplay.directions.routes[0].legs[0].distance.text

例如,结果将是“20,5 km”之类的文本。

于 2016-11-02T14:38:30.383 回答
0

在您的请求中,设置units=metric.

然后使用:distance = response.routes[0].legs[0].distance.text;在您的警报中。

于 2015-07-28T15:09:05.407 回答