2016-05-03 9 views
0

Erledigt einige Google Mpas-Zeug von mir selbst, aber auf Abstand Berechnung gestoppt. Ich habe eine Funktion für die Nutzer aktuelle Position Marker Ortung:Berechnen Sie die Entfernung zwischen dem Standort des Benutzers und allen Markern auf der Karte

function myLocationMarker(latLng) { 
    var markerOptions = { 
     position: latLng, 
     map: map, 
     clickable: true 
    } 
    var myMarker = new MarkerWithLabel(markerOptions); 

Und diese Funktion stellt andere Marker. Ich erhalte die Daten aus der Datenbank und platziere etwa 1000 Marker.

var markers = []; //blank array from markers 
function addMarker(lat, lng, info) { //info - needed for database 
    var pt = new google.maps.LatLng(lat, lng); 
    var marker = new google.maps.Marker({ //marker options 
     position: pt, 
     icon: icon, 
     map: map 
    }); 
    markers.push(marker); //pushing every marker to markers array 

Aber was ich brauche, ist der Abstand zwischen ihnen. Wie kann ich die Entfernung zwischen myLocationMarker und jedem anderen Marker auf der Karte von addMarker Funktion berechnen?

Antwort

2

Sie können mit den directionsService bewusst zu sein, dass der Abstand zwischen zwei Markierungen auf einer Karte auf die abhängig travelling mode Sie wählen ("DRIVING", "WALKING", "BICYCLING", "TRANSIT").

Wenn Sie Luft Entfernung berechnen möchten Sie einige Geometrie mit der Haversine Formel benötigen (überprüfen Sie den Code hier: https://stackoverflow.com/a/1502821/2314737)

Hier ist ein Beispiel mit "DRIVING"

function calculateAndDisplayRoute(directionsService, directionsDisplay, pointA, pointB, outputTxt) { 
    var selectedMode = "DRIVING"; 
    directionsService.route({ 
    origin: pointA, 
    destination: pointB, 
    unitSystem: google.maps.UnitSystem.METRIC, 
    travelMode: google.maps.TravelMode[selectedMode] 
    }, function(response, status) { 
    if (status == google.maps.DirectionsStatus.OK) { 
     directionsDisplay.setDirections(response); 

     outputTxt.innerHTML = Math.round(directionsDisplay.getDirections().routes[directionsDisplay.getRouteIndex()].legs[0].distance.value/1000) + "Km"; 
    } else { 
     window.alert('Directions request failed due to ' + status); 
    } 
    }); 
} 

Hier ist eine Demo http://jsfiddle.net/user2314737/fLogwsff/

EDIT: alternativ können Sie die computeDistanceBetween Funktion aus dem spherical geometry Paket

012 verwenden

computeDistanceBetween (aus: LatLng, zu: LatLng, Radius: Nummer)
Rückgabewert: Zahl Gibt den Abstand in Metern zwischen zwei LatLngs. Sie können optional einen benutzerdefinierten Radius angeben. Der Radius ist standardmäßig der Radius der Erde.

var distance = google.maps.geometry.spherical.computeDistanceBetween(pointA, pointB); 
// by default distance is in meters 
distance = Math.round(distance/ 1000) + "Km"; 

aktualisiert Demo: http://jsfiddle.net/user2314737/qxrg4o3y/

Verwandte Themen