358 Stimmen

Entfernung zwischen zwei Punkten in Google Maps V3 berechnen

Wie berechnet man die Entfernung zwischen zwei Markierungen in Google Maps V3 (ähnlich wie bei der distanceFrom Funktion inV2.)

Danke.

1 Stimmen

519voto

Mike Williams Punkte 7569

Wenn Sie es selbst berechnen wollen, können Sie die Haversine-Formel verwenden:

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

325voto

Emil Badh Punkte 4522

Es scheint tatsächlich eine Methode in GMap3 zu geben. Es ist eine statische Methode der google.maps.geometry.spherical Namensraum.

Sie nimmt als Argumente zwei LatLng Objekte und verwendet einen Standard-Erdradius von 6378137 Metern, obwohl der Standardradius bei Bedarf durch einen eigenen Wert überschrieben werden kann.

Vergewissern Sie sich, dass Sie diese Angaben machen:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&v=3&libraries=geometry"></script>

in Ihrem Kopfbereich.

Der Aufruf wird sein:

google.maps.geometry.spherical.computeDistanceBetween (latLngA, latLngB);

39voto

joan16v Punkte 4845

Beispiel mit GPS-Breiten-/Längengrad von 2 Punkten.

var latitude1 = 39.46;
var longitude1 = -0.36;
var latitude2 = 40.40;
var longitude2 = -3.68;

var distance = google.maps.geometry.spherical.computeDistanceBetween(new google.maps.LatLng(latitude1, longitude1), new google.maps.LatLng(latitude2, longitude2));

16voto

Plamen Todorov Punkte 161

Fügen Sie dies einfach an den Anfang Ihres JavaScript-Codes:

google.maps.LatLng.prototype.distanceFrom = function(latlng) {
  var lat = [this.lat(), latlng.lat()]
  var lng = [this.lng(), latlng.lng()]
  var R = 6378137;
  var dLat = (lat[1]-lat[0]) * Math.PI / 180;
  var dLng = (lng[1]-lng[0]) * Math.PI / 180;
  var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
  Math.cos(lat[0] * Math.PI / 180 ) * Math.cos(lat[1] * Math.PI / 180 ) *
  Math.sin(dLng/2) * Math.sin(dLng/2);
  var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
  var d = R * c;
  return Math.round(d);
}

und verwenden Sie dann die Funktion wie folgt:

var loc1 = new GLatLng(52.5773139, 1.3712427);
var loc2 = new GLatLng(52.4788314, 1.7577444);
var dist = loc2.distanceFrom(loc1);
alert(dist/1000);

15voto

Aishwat Singh Punkte 3990
//p1 and p2 are google.maps.LatLng(x,y) objects

function calcDistance(p1, p2) {
          var d = (google.maps.geometry.spherical.computeDistanceBetween(p1, p2) / 1000).toFixed(2);
          console.log(d);              
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X