2016-11-01 1 views
0

Ich habe versucht, eine bessere Möglichkeit zu finden, die Entfernung zwischen zwei Punkten auf Google Maps zu berechnen, aber das Ergebnis war nicht das, was ich erwartet hatte. Zum Beispiel sind diese zwei Lösungen, die ich hier gefunden habe: Calculate distance between two points in google maps V3 sind ähnlich (es produziert ca. 249,3424456 km - aber es ist falsch, weil die Entfernung zwischen Bacau und Bukarest - Rumänien - ca. 300 km sind).Google Maps V3 Abstand zwischen zwei Punkten - verschiedene Werte

Der plnkr Link: http://plnkr.co/edit/cv25C6pga0lla7xyBDRO?p=preview

Oder:

$(document).ready(function() { 
var myLatLng = new google.maps.LatLng({ lat: 46.5610058, lng: 26.9098054 }); 
var myLatLng2 = new google.maps.LatLng({ lat: 44.391403, lng: 26.1157184 }); 
var calc1 = google.maps.geometry.spherical.computeDistanceBetween(myLatLng, myLatLng2)/1000; 
console.log('calc1 = ' + calc1); 

var start = { lat: 46.5610058, lng: 26.9098054 }; 
var stop = { lat: 44.391403, lng: 26.1157184 }; 

var rad = function(x) { 
    return x * Math.PI/180; 
}; 

var getDistance = function(p1, p2) { 
    var R = 6378137; // Earth’s mean radius in meter 
    var dLat = rad(p2.lat - p1.lat); 
    var dLong = rad(p2.lng - p1.lng); 
    var a = Math.sin(dLat/2) * Math.sin(dLat/2) + 
     Math.cos(rad(p1.lat)) * Math.cos(rad(p2.lat)) * 
     Math.sin(dLong/2) * Math.sin(dLong/2); 
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); 
    var d = R * c; 
    return d; // returns the distance in meter 
}; 
var calc2 = getDistance(start, stop)/1000; 
console.log('calc2 = ' + calc2); 


document.getElementById("test").innerHTML = 'calc1 = ' + calc1 + '<br/>calc2 = ' + calc2; 
}); 

Wenn ich versuche, diese Distanz zu berechnen mit Google Web api Karten http://maps.googleapis.com/maps/api/distancematrix/json?origins=46.5610058,26.9098054&destinations=44.391403,26.1157184 es mir sagen, dass der Abstand 299 km (was der gute Wert ist - Entfernung zwischen Bacau und Bukarest - Rumänien - sind ca. 300 km).

Ich ziehe es vor, lokal zu berechnen, anstatt jedes Mal auf eine Website zuzugreifen, aber warum, wenn ich die Funktion "google.maps.geometry.spheric.computeDistanceBetween" oder die Haversine-Formel verwende, einen falschen Wert berechnen?

+1

Meine Meinung ist, dass die ersten beiden Methoden (computeDistanceBetween und Haversine Formel) den Abstand gerade berechnen in der Luft, und nicht die Entfernung auf Landstraßen. – Doro

+0

mögliches Duplikat von [Methode zur Berechnung der Entfernung zwischen zwei Punkten] (http://stackoverflow.com/questions/14625505/method-to-calculate-distance-between-two-points) – geocodezip

+0

mögliche Duplikate von [Berechnung der Fahrdistanz zwischen zwei Breiten- und Längengraden in PHP] (http://stackoverflow.com/questions/38358823/how-to-calculate-driving-distance-between-two-latitude-and-longitudes-in-php) – geocodezip

Antwort

1

Die Lösung ist lokal mit distancematrix api zu berechnen: https://developers.google.com/maps/documentation/javascript/distancematrix (Haben Distance Matrix von API-Dashboard zu ermöglichen)

var from = new google.maps.LatLng(46.5610058, 26.9098054); 
var fromName = 'Bacau'; 
var dest = new google.maps.LatLng(44.391403, 26.1157184); 
var destName = 'Bucuresti'; 

var service = new google.maps.DistanceMatrixService(); 
service.getDistanceMatrix(
    { 
     origins: [from, fromName], 
     destinations: [destName, dest], 
     travelMode: 'DRIVING' 
    }, callback); 

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

     for (var i = 0; i < origins.length; i++) { 
      var results = response.rows[i].elements; 
      console.log(results); 
      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]; 
      } 
     } 
    } 
}