2017-05-16 1 views
0

Ich habe eine Funktion erstellt, um mehrere Markierungen von einem Objekt auf einer Karte zu zeichnen. Jeder Marker wird auch in ein Array geschoben, um später darauf zuzugreifen.google.maps.LatLng gibt eine Funktion zurück, die 'a' zurückgibt. Warum?

Meine create Funktion sieht wie folgt aus und wird in der initMap Funktion aufgerufen:

function createMarker(markerData){ 
for(var i = 0; i < markerData.length; i++){ 

    var testing = new google.maps.LatLng(parseFloat(markerData[i].lat), parseFloat(markerData[i].lng)); 

    console.log(testing); 

    var marker = new google.maps.Marker({ 
     animation: google.maps.Animation.DROP, 
     position: new google.maps.LatLng(parseFloat(markerData[i].lat), parseFloat(markerData[i].lng)), 
     map: myMap 
    }); 

    markerBounds.extend(marker.position); 
    markerArray.push(marker); 
} 

}

Aber mein Problem ist, dass das Konsolenprotokoll nur zurückgibt:

function(){return a} 

und nicht das erwartete lat lng Objekt. Also in meinem MarkerArray gibt es auch keine Koordinaten. Aber die Markierungen werden immer noch auf der Karte erstellt.

Später mag ich jede Markerposition von marker mit der aktuellen Position des Benutzers vergleichen. Aber ich denke, das funktioniert nicht, weil das oben beschriebene Problem.

for (var i = 0; i < markerArray.length; i++) { 
    var markerPosition = new google.maps.LatLng(parseFloat(markerArray[i].lat), parseFloat(markerArray[i].lng)); 
    if(google.maps.geometry.spherical.computeDistanceBetween(userPosition, markerPosition) < radius){ 
     console.log('test'); 
    } 
} 

habe ich eine Forschung auf diesem aber keine Antwort gefunden. Die einzige Information, die ich habe, ist über asynchrone Funktionen.

Ich hoffe, dass Sie das Problem verstehen. :)

Antwort

0

Ich konnte das Problem nicht reproduzieren, aber meine Wette ist, dass Sie einige falsche Vorstellungen über das, was haben Sie in dem Feld setzen und die die Eigenschaften der Objekte sind. Lassen Sie es mich klar:

  1. Im LatLng-Objekt die lat und lng Getter Funktionen sind, was bedeutet, dass Sie anrufen sollte, zum Beispiel position.lat() in Float der Lat-Koordinate zu erhalten.
  2. Die Marker-Objekt hat eine position Eigenschaft, die ein LatLng Objekt ist. Also, wenn Sie wollen, zum Beispiel die Breite eines Markers: myMarker.position.lat()

In Ihrem Code Sie Marker im Array setzen, aber in der Entfernung Berechnung erwartet Sie Positionen:

ist also hier einige Arbeits Beispiel, ich hoffe es hilft:

var myMarkerData = [{lat: -34.397, lng: 150.644}, {lat: -34.396, lng: 150.643}] 
    var markerArray = [] 
    var userPosition = new google.maps.LatLng(-34.398, 150.645); 
    function createMarker(markerData){ 
     for(var i = 0; i < markerData.length; i++){ 

      var testing = new google.maps.LatLng(parseFloat(markerData[i].lat), parseFloat(markerData[i].lng)); 
      console.log(testing); 
      var marker = new google.maps.Marker({ 
       animation: google.maps.Animation.DROP, 
       position: new google.maps.LatLng(parseFloat(markerData[i].lat), parseFloat(markerData[i].lng)), 
       map: map 
      }); 
      //markerBounds.extend(marker.position); 
      markerArray.push(marker); 
     } 
    } 
     var map; 
     function initialize() { 
     var mapOptions = { 
      zoom: 8, 
      center: {lat: -34.397, lng: 150.644} 
     }; 
     map = new google.maps.Map(document.getElementById('map'), 
      mapOptions); 

     createMarker(myMarkerData) 
     for (var i = 0; i < markerArray.length; i++) { 
       //var markerPosition = new google.maps.LatLng(parseFloat(markerArray[i].position.lat()), parseFloat(markerArray[i].position.lng())); 
       var markerPosition = markerArray[i].position 
       console.log(markerPosition,userPosition) 
       var distance = google.maps.geometry.spherical.computeDistanceBetween(userPosition, markerPosition) 
       console.log(distance) 
     } 
     } 

     google.maps.event.addDomListener(window, 'load', initialize); 
+0

Vielen Dank. Du hast mir den entscheidenden Tipp gegeben. Mein Problem war, dass ich lat und lng nicht als Getterfunktionen benutzt habe. Mit .position.lat() bekomme ich die richtigen Werte. – mxlnge

Verwandte Themen