Рассчитать расстояние, используя геолокации в ионах c 4 - PullRequest
0 голосов
/ 04 апреля 2020

Я уже могу получить свою карту и маршрут между двумя точками, я хотел бы рассчитать расстояние в км между этими точками

код для отслеживания маршрута

displayDirection(_origin, destin) {
    var ref = this;
    console.log('DIRECTION');
    var directionsService = new google.maps.DirectionsService();
    var directionsDisplay = new google.maps.DirectionsRenderer();

    directionsDisplay.setMap(ref.map)


    directionsService.route({
      origin: _origin,
      destination: destin,
      travelMode: 'DRIVING'
    }, (response, status) => {
      console.log("Response: " + response + " Status: " + status);

      if (status === 'OK') {
        directionsDisplay.setDirections(response);
      } else {
        console.log("Can't set directions due to " + response);
      }
    });
  }

can кто-нибудь поможет мне?

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

чтобы получить расстояние между двумя точками

     getDistanceFromLatLonInKm(lat1,lon1,lat2,lon2) {
  var R = 6371; // Radius of the earth in km
  var dLat = this.deg2rad(lat2-lat1);  // deg2rad below
  var dLon = this.deg2rad(lon2-lon1); 
  var a = 
    Math.sin(dLat/2) * Math.sin(dLat/2) +
    Math.cos(this.deg2rad(lat1)) * Math.cos(this.deg2rad(lat2)) * 
    Math.sin(dLon/2) * Math.sin(dLon/2)
    ; 
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); 
  var d = R * c; // Distance in km
  return d.toFixed(2);
}
1 голос
/ 04 апреля 2020

Если вы примете ответ, который вы получите, будет массив маршрутов, который будет отображаться под объектом

response.routes

В вашем объекте запроса массив будет иметь один или несколько объектов маршрута в Это. У объекта маршрута будет множество ног, разбивающих путешествие на более мелкие части. Просто итерируйте ноги, чтобы найти общее расстояние. Вы можете использовать следующий метод, чтобы найти его для маршрута.

findRouteDistance(route) {

    var total_distance = 0;
    var route_legs = route.legs;

    for(var i=0; i < route_legs.length; i++) {
         total_distance += route_legs[i].distance.value;
    }

    return total_distance;
}

Если у вас есть только 1 объект маршрута, просто вызовите

findRouteDistance(response.routes[0])

Или переберите объект response.routes, если вы есть много.

...