使用radarSearch方法和getDetails方法从Google Map中检索更多数据

时间:2016-11-21 12:32:17

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

在使用可以检索200个结果和getDetails方法的radarSearch方法时,我是否知道如何从Google Map获取10个以上的数据结果?我希望所有标记信息都列在地图下方的空白处。但是,我只得到了10个。我可以知道这个问题吗? 10个结果保持不变,并且当浏览器刷新几次时可能只更改其中的一个。

以下是我用于从Google地图中检索信息并创建标记的代码。我使用雷达搜索方法来执行搜索。

   function callback(results, status) {
    if (status !== google.maps.places.PlacesServiceStatus.OK) {
      console.error(status);
      return;
    }
    for (var i = 0, result; result = results[i]; i++) {
      addMarker(result);
    }
  }

  function addMarker(place) {
    var placesList = document.getElementById('test');
    var marker = new google.maps.Marker({
      map: map,
      position: place.geometry.location,
      icon: {
        url: 'http://maps.gstatic.com/mapfiles/circle.png',
        anchor: new google.maps.Point(10, 10),
        scaledSize: new google.maps.Size(10, 17)
      }
    });


      service.getDetails(place, function(result, status) {
        if (status !== google.maps.places.PlacesServiceStatus.OK) {
          console.error(status);
          return;
        }

        iname = result.name;
        iLatitude = [result.geometry.location.lat()];
        iLongitude = [result.geometry.location.lng()];
        iAddress = [result.formatted_address];

      placesList.innerHTML += '<li>' + iname +'&nbsp;&nbsp;&nbsp;&nbsp;'+ iAddress + '</li>';
      });
  }

结果的ScreenShot。 The marker result is nearly 200, while the listed down data only consists of 10

1 个答案:

答案 0 :(得分:1)

实际上问题是由于OVER_QUERY_LIMIT问题,它可以在时间发送请求被延迟时绕过,可以实现setTimeout方法以避免OVER_QUERY_LIMIT问题。

替换下面的代码。可以检索地图上的所有标记数据(目前我在谷歌地图上有148个餐厅标记)

   service.getDetails(place, function(result, status) {
        if (status === google.maps.places.PlacesServiceStatus.OK) {

        iname = result.name;
        iLatitude = [result.geometry.location.lat()];
        iLongitude = [result.geometry.location.lng()];
        iAddress = [result.formatted_address];

        placesList.innerHTML += '<li>' + iname + ''+ iAddress + '</li>';
        }

        else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
        setTimeout(function() {
            addMarker(place);
        }, 200);
    }
      });