2017-06-20 8 views
0

Ich muss berechnen kürzester Abstand zwischen zwei Punkten. Ich verwende unten Funktion, um das zu erreichen.Get kürzester Abstand zwischen zwei Punkten

var p1 = new google.maps.LatLng(6.71532762,80.06215197); 
var p2 = new google.maps.LatLng(6.93234287,79.84870747); 

var distance = document.getElementById('distance'); 
distance.innerHTML = distance.innerHTML+calcDistance(p1, p2); 

//calculates distance between two points in km's 
function calcDistance(p1, p2) { 
    return (google.maps.geometry.spherical.computeDistanceBetween(p1, p2)/1000).toFixed(2); 
} 

Das gibt 33,77 km als Abstand. Aber nach google maps, kürzester Abstand zwischen den oben genannten Punkten sollte 45,0 km sein.

Wie könnte ich diesen Wert erhalten? (45,0 km)

Hier ist die jsfiddle link.

+1

Beachten Sie, dass die Methode Sie anrufen ist „google.maps.geometry ** ** sphärische .computeDistanceBetween“, die ich vermute, ist die Gre im Kreisabstand zwischen den zwei Punkten (d.h. kürzeste Entfernung rund um den Globus). – RobG

+0

Ich habe die Entfernung in Google Maps selbst gemessen und bekam als Ergebnis ** ~ 33,7 km **. Edit: Ich nehme an, Sie haben die ** 45 km ** aus der Entfernung auf der Straße. Dies ist nicht die Funktion, nach der Sie suchen, wenn Sie die Entfernung auf der Straße messen möchten. [Siehe diesen Link] (https://developers.google.com/maps/documentation/javascript/direction) – Nysten

+1

Berechnung der sphärischen Entfernung! = Über Straßen zurückgelegte Entfernung. Bitte geben Sie an, was Sie benötigen. –

Antwort

1

die Straßenentfernung zu erhalten, können Sie google.maps.DirectionsService verwenden():

var p1 = new google.maps.LatLng(6.71532762, 80.06215197); 
var p2 = new google.maps.LatLng(6.93234287, 79.84870747); 

function getShortestDistance(p1, p2) { 
    return new Promise(function(resolve, reject) { 
    var request = { 
     origin: p1, 
     destination: p2, 
     travelMode: google.maps.TravelMode.DRIVING, 
     provideRouteAlternatives: true 
    }; 
    new google.maps.DirectionsService().route(request, function(response, status) { 
     var minRoute = null; 
     for (var i = 0; i < response.routes.length; i++) { 
     if (minRoute === null || response.routes[i].legs[0].distance.value < minRoute.legs[0].distance.value) { 
      minRoute = response.routes[i]; 
     } 
     } 
     resolve(minRoute); 
    }); 
    }); 
} 

getShortestDistance(p1, p2).then(function(result) { 
    document.getElementById('distance').innerHTML = 'Distance : ' +  result.legs[0].distance.text; 
}); 

Sie die Bibliothek finden Sie hier: https://maps.google.com/maps/api/js?sensor=false&libraries=geometry

+0

Danke für Ihre Antwort. Aber das gibt ** schnellste Route **. Aber was ich brauche, ist ** Kürzeste Route ** – Bishan

+0

Dann denke ich, Sie können provideRouteAlternatives hinzufügen: in der Anfrage wahr, um alternative Routen zu erhalten und wählen Sie die kürzeste. – Rylyn

+0

Ja, gerade gefunden. Danke – Bishan

2

Die Kugelabstand ist der Abstand in einer geraden Linie von einem - b (wie der Vogel fliegt)

Die Google Maps verknüpfen Sie auf dem Laufenden zeigt eine Straße, die 45km lang ist.

EDIT: Um die kürzeste Straße Entfernung Sie Maps API Richtungen anstelle des sphärischen Verfahren einen Blick in die Google haben müssen zu erhalten: https://developers.google.com/maps/documentation/directions/intro

+0

Danke für die Klarstellung. Ja, ich muss die 45 km lange Straße erreichen. – Bishan

+0

Dann sollten Sie einen Blick in die Google Maps Richtungen API: https://developers.google.com/maps/documentation/directions/intro – Fabwoofer

+0

Vielen Dank für den Link zur Dokumentation. Ich werde das überprüfen. – Bishan

Verwandte Themen