2017-05-16 134 views
0

我創建了一個函數來繪製地圖上的一個對象的多個標記。每個標記也被推入一個數組中以便稍後訪問它。google.maps.LatLng返回一個返回'a'的函數。爲什麼?

我createMarker功能看起來像這樣和被調用的initMap功能:

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

}

但我的問題是,控制檯日誌只返回:

function(){return a} 

和而不是預期的經度對象。所以在我的標記數組中,也沒有經緯度座標。但標記仍然在地圖上創建。

後來我想比較markerArray中的每個標記位置與當前用戶位置。但我認爲這是行不通的,因爲上面描述的問題。

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

我做了一個研究,但無法找到答案。我得到的唯一信息是關於異步函數。

我希望你能理解這個問題。 :)

回答

0

我無法重現您的問題,但我敢打賭,您對於您在數組中放置什麼以及對象的屬性是什麼有一些誤解。讓我明確表示:

  1. 在經緯度對象latlng是吸氣功能,這意味着,你應該調用,例如position.lat()來獲得在浮動的緯度座標。
  2. 標記對象有一個position屬性,它是一個LatLng對象。 所以,如果你想要的,例如標記的緯度:myMarker.position.lat()

在你的代碼放在標記在陣列中,但在距離計算,期待你的位置:

因此,這裏是一些工作例如,我希望它有幫助:

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

非常感謝。你給了我決定性的提示。我的問題是,我沒有使用lat和lng作爲getter函數。使用.position.lat()我可以得到正確的值。 – mxlnge

相關問題