Ionic framework 使用ionic 4中的地理位置计算距离

Ionic framework 使用ionic 4中的地理位置计算距离,ionic-framework,geolocation,ionic4,ionic-native,directions,Ionic Framework,Geolocation,Ionic4,Ionic Native,Directions,我已经可以得到我的地图和两点之间的路线,我想计算两点之间的距离,单位为km 跟踪路由的代码 displayDirection(_origin, destin) { var ref = this; console.log('DIRECTION'); var directionsService = new google.maps.DirectionsService(); var directionsDisplay = new google.maps.Direction

我已经可以得到我的地图和两点之间的路线,我想计算两点之间的距离,单位为km

跟踪路由的代码

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);
      }
    });
  }

有人能帮我吗?

如果您接受接收到的响应,它将在对象下显示一系列路由

response.routes
在请求对象中,数组将包含一个或多个路由对象。route对象将有一组腿,将旅程分解为更小的部分。简单地迭代腿部以找到总距离。您可以使用以下方法为管线查找它

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;
}

或者,如果您有多个response.routes对象,则迭代该对象。

如果您接受接收到的响应,则将在该对象下显示一个路由数组

response.routes
在请求对象中,数组将包含一个或多个路由对象。route对象将有一组腿,将旅程分解为更小的部分。简单地迭代腿部以找到总距离。您可以使用以下方法为管线查找它

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;
}

或者,如果有很多,则迭代response.routes对象。

以获取两点之间的距离

     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);
}

求两点之间的距离

     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);
}