google.maps.LatLng返回一个返回'a'的函数。为什么?

时间:2017-05-16 08:15:30

标签: javascript function google-maps google-maps-api-3 return

我创建了一个从地图上的对象中绘制多个标记的函数。每个标记也会被推入一个数组中,以便以后访问它。

我的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}

而不是预期的lat lng对象。所以在我的markerArray中也没有lat lng坐标。但是标记仍然在地图上创建。

稍后我想将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');
    }
}

我对此进行了研究但未找到答案。我得到的唯一信息是异步函数。

我希望你能理解这个问题。 :)

1 个答案:

答案 0 :(得分:1)

我无法重现你的问题,但我的赌注是,你对于你在数组中添加了什么以及对象的属性有一些误解。让我明白一下:

  1. 在LatLng对象中,latlng是getter函数,这意味着您应该调用,例如position.lat()以获取Float中的Lat坐标。
  2. Marker对象具有position属性,该属性是LatLng对象。 因此,如果您需要,例如标记的纬度:myMarker.position.lat()
  3. 在您的代码中,您将标记放在数组中,但在距离计算中,您需要位置:

    所以这是一些有效的例子,我希望它有所帮助:

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