当有至少20个时,只渲染10个搜索结果?使用Google Places API

时间:2016-04-13 14:54:49

标签: javascript google-maps

我遇到的问题是我正在执行Google地方雷达搜索,该搜索至少会返回20个结果。在我的代码中,我将搜索结果的数量限制为20.因此,我的嵌入式谷歌地图上最多应有20个标记(此部分可用)以及我的结果面板上的20个位置的相关列表(这不是&# 39;工作)。但是,我在结果面板上只能获得10个结果。这是我的代码在回调中执行雷达搜索和addResult函数(因为它是异步的):

function getPlaces(placeQuery, locInput){
    var location = new google.maps.LatLng(locInput.geometry.location.lat(), locInput.geometry.location.lng());
    var queryValue = placeQuery.value;
    var resultsLength;

    var request = {
        location: location,
        radius: 3200,
        keyword: queryValue         
    };

    service = new google.maps.places.PlacesService(map);

    service.radarSearch(request, function callback(results, status) {
        if(status == google.maps.places.PlacesServiceStatus.OK) {
            clearMarkers();
            if(results.length < 20){
                resultsLength = results.length;
            }
            else{
                resultsLength = 20;
            }
            for (var i = 0; i < resultsLength; i++){

                var markerLetter = String.fromCharCode('A'.charCodeAt(0)+ i);
                var markerIcon = MARKER_PATH + markerLetter + '.png';
                markers[i] = new google.maps.Marker({
                    position: results[i].geometry.location,
                    animation: google.maps.Animation.DROP,
                    icon: markerIcon
                });
                markers[i].placeResult = results[i];

                google.maps.event.addListener(markers[i], 'click', showInfoWindow);
                setTimeout(dropMarker(i), i * 100);

                addResult(results[i], i);                   
            }
        }
    });
}

这是我的addResult函数:

function addResult(place, i) {
    var name;
    var address;

    var results = document.getElementById("results");

    service.getDetails({placeId: place.place_id}, function(result, status) {
          if (status !== google.maps.places.PlacesServiceStatus.OK) {
            return;
          }
          results.innerHTML += '<li>' + result.name + '</li>';
    });
}

我做了一些调试测试,for循环完全执行。但是,在addResult函数的service.getDetails中,只有10个地点ID正在通过。不确定原因......注意:不能使用jQuery或承诺库等。

1 个答案:

答案 0 :(得分:0)

.getDetails请求的调用存在配额/速率限制。如果结果不是&#34; OK&#34;,您将默默地失败,添加错误处理,您将看到问题。

function addResult(place, i) {
    var name;
    var address;

    var results = document.getElementById("results");

    service.getDetails({placeId: place.place_id}, function(result, status) {
          if (status !== google.maps.places.PlacesServiceStatus.OK) {
            results.innerHTML += '<li>'+ status + '</li>';
          } else {
            results.innerHTML += '<li>' + result.name + '</li>';
          }
    });
}

(如果您不介意点击所有弹出式对话框,请添加提醒)