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

mxl*_*nge 1 javascript google-maps return function google-maps-api-3

我创建了一个函数来从地图上的一个对象绘制多个标记。每个标记也被推送到一个数组中以供稍后访问。

我的 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);
}
Run Code Online (Sandbox Code Playgroud)

}

但我的问题是,控制台日志只返回:

function (){return a}
Run Code Online (Sandbox Code Playgroud)

而不是预期的 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');
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

小智 5

我无法重现您的问题,但我敢打赌,您对将什么放入数组以及对象的属性有一些误解。让我澄清一下:

  1. 在 LatLng 对象中,latandlng是 getter 函数,这意味着您应该调用,例如 position.lat() 以获取 Float 中的 Lat 坐标。
  2. Marker 对象有一个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);
Run Code Online (Sandbox Code Playgroud)