2017-05-16 88 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

相关问题