google maps API v3:计算折线上2个点之间的距离

时间:2015-07-30 18:08:34

标签: google-maps-api-3

我对我的代码感到有点困惑,我不知道该走哪条路。

我们假设我有一个穿过折线的汽车标记。

我通过设置计时器每隔500毫秒更改一次位置:

function animate() {
  var p = polyline.GetPointAtDistance(distanceFromBeginning);
  carMarker.setPosition(p);

  distanceFromBeginning += step;

  timerHandle = setTimeout("animate("+(distanceFromBeginning)+")", tick);
}

我还补充说我的车可以在路线上拖动:

google.maps.event.addDomListener(carMarker, 'dragend', function(e) {

    var p = find_closest_point_on_path(e.latLng,polyline.getPath());
    console.log("position is : " + p);
    carMarker.setPosition(p);
    console.log("dragend")
});

现在我在折线上拖车后我有了一个新位置,如何从起始位置得到它的距离,以便我可以在我的计时器中正确更新?

1 个答案:

答案 0 :(得分:0)

一旦你有了终点位置的坐标(让我们调用“目的地”),并假设你的'dragend'事件你设置了汽车的坐标(让我们称之为“原点”)你可以调用这个函数在你的听众身上:

function calculateDistances() {
  var service = new google.maps.DistanceMatrixService();
  service.getDistanceMatrix(
    {
      origins: [origin],
      destinations: [destination],
      travelMode: google.maps.TravelMode.DRIVING,
      unitSystem: google.maps.UnitSystem.METRIC,
      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;

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

Check this example on jsfiddle based on the Google documentation(look the result on your console)

如果您需要有关此代码的更多帮助,或者它不是您想要的,请立即回复。