-1

私はGoogleAPIを使用しています。私がする必要があるのは、マイルで2つの異なる距離を取得することです。現在、私は次のものを持っています:-

var start = arrObjLatLngs[0];
var end = arrObjLatLngs[arrObjLatLngs.length - 1];

var base = new google.maps.LatLng(52.781048888889, -1.2110222222222546);

var service = new google.maps.DistanceMatrixService();
service.getDistanceMatrix(
  {
    origins: [base, base],
    destinations: [start, end],
    travelMode: google.maps.TravelMode.DRIVING,
    avoidHighways: false,
    avoidTolls: false
  }, callback);


function callback(response, status) {
  if (status == google.maps.DistanceMatrixStatus.OK) {
    var origins = response.originAddresses;
    var destinations = response.destinationAddresses;

    for (var i = 0; i < origins.length; i++) {
      var results = response.rows[i].elements;
      for (var j = 0; j < results.length; j++) {
        var element = results[j];
        var distance = element.distance.text;
        var duration = element.duration.text;
        var from = origins[i];
        var to = destinations[j];
      }
    }
  }
}

私が持っている必要があるのは2つの変数です。$runinPickupこれに$runinDestinationは、1。)ベースと開始($ runinPickup)と2.)ベースと終了($ runinDestination)の間の距離が含まれます。

警告するdistanceと、次のような応答があります。-

13.9 km

5.2 km

13.9 km

5.2 km

まず、 $runinPickupbaseとの間の距離だけを取得する方法を知りたいだけです。start次に、小数が含まれないようにこれを行う方法はありますか?したがって、最初の値の13.9 kmではなく、13になります。

次に、それをマイルに変換する必要があります。これは、値を取得できたら、次のように実行すると推測しています。

var pickup_distance = parseInt(($fieldPickup / 8) * 5); ?

どんな助けでも大歓迎です!:)

4

1 に答える 1

0

ドキュメントを読みましたか?origins 配列で同じアドレスを 2 回渡す:

   origins: [base, base],
   destinations: [start, end],

同じ結果が 2 回表示されます。これは動作し (テストされていません)、2 つの結果が得られます。

   origins: [base],
   destinations: [start, end],

マイルを取得するには、 unitSystem をIMPERIALに設定することをお勧めします(ただし、ドキュメントでそれが何を意味するかの定義は見つかりません)。

unitSystem (optional) — The unit system to use when displaying distance. Accepted values are:

google.maps.UnitSystem.METRIC (default)
google.maps.UnitSystem.IMPERIAL

もちろん、METRIC 単位をマイルに変換することもできます。

IMPERIAL 単位の距離で2 つの値を示す例。ドキュメントの例から変更されました。

コードスニペット:

var map;
var geocoder;
var bounds = new google.maps.LatLngBounds();
var markersArray = [];

var base = new google.maps.LatLng(55.930385, -3.118425);
var start = 'Greenwich, England';
var destinationA = 'Stockholm, Sweden';
var end = new google.maps.LatLng(50.087692, 14.421150);

var destinationIcon = 'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=D|FF0000|000000';
var originIcon = 'https://chart.googleapis.com/chart?chst=d_map_pin_letter&chld=O|FFFF00|000000';

function initialize() {
  var opts = {
    center: new google.maps.LatLng(55.53, 9.4),
    zoom: 10,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById('map'), opts);
  geocoder = new google.maps.Geocoder();
  calculateDistances();
}

google.maps.event.addDomListener(window, 'load', initialize);

function calculateDistances() {
  var service = new google.maps.DistanceMatrixService();
  service.getDistanceMatrix({
    origins: [base],
    destinations: [start, end],
    travelMode: google.maps.TravelMode.DRIVING,
    unitSystem: google.maps.UnitSystem.IMPERIAL,
    avoidHighways: false,
    avoidTolls: false
  }, callback);
}

function callback(response, status) {
  if (status != google.maps.DistanceMatrixStatus.OK) {
    alert('Error was: ' + status);
  } else {
    var origins = response.originAddresses;
    var destinations = response.destinationAddresses;
    var outputDiv = document.getElementById('outputDiv');
    outputDiv.innerHTML = '<table border="1">';
    deleteOverlays();
    var stringArray = ['$runinPickup', '$runinDestination'];
    var htmlString = '<table border="1">';
    for (var i = 0; i < origins.length; i++) {
      var results = response.rows[i].elements;
      addMarker(origins[i], false);
      for (var j = 0; j < results.length; j++) {
        addMarker(destinations[j], true);
        htmlString += '<tr><td>' + stringArray[j] + '</td><td>' + results[j].distance.text + '</td></tr>';
        outputDiv.innerHTML += '<tr><td>' + stringArray[j] + '</td><td>' + results[j].distance.text + '</td></tr>';
      }
    }
    htmlString += '</table>';
    // outputDiv.innerHTML += '</table>';
    outputDiv.innerHTML = htmlString;
    // alert(htmlString);
  }
}

function addMarker(location, isDestination) {
  var icon;
  if (isDestination) {
    icon = destinationIcon;
  } else {
    icon = originIcon;
  }
  geocoder.geocode({
    'address': location
  }, function(results, status) {
    if (status == google.maps.GeocoderStatus.OK) {
      bounds.extend(results[0].geometry.location);
      map.fitBounds(bounds);
      var marker = new google.maps.Marker({
        map: map,
        position: results[0].geometry.location,
        icon: icon
      });
      markersArray.push(marker);
    } else {
      alert('Geocode was not successful for the following reason: ' + status);
    }
  });
}

function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
}
body {
  margin: 20px;
  font-family: courier, sans-serif;
  font-size: 12px;
}
#map {
  height: 480px;
  width: 640px;
  border: solid thin #333;
  margin-top: 20px;
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="outputDiv"></div>
<div id="map"></div>

于 2013-03-14T16:07:38.857 に答える