我遇到的问题是我正在执行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或承诺库等。
答案 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>';
}
});
}
(如果您不介意点击所有弹出式对话框,请添加提醒)