Maps 谷歌地图需要显示地址列表-设置输出速度慢和超过查询限制问题
大家好,我有大约500个地址要在谷歌地图中列出,每个地址都是从filemaker数据库中抓取的,而不是分组在一个类别person(地图中的员工姓名)下。我正在使用一个函数对其进行地理编码,我每隔10次用10秒的时间调用一次 setimout,问题是: 1-当你必须显示500个地址时,页面非常慢,设置超时时间为10秒(地址可以在任何一秒钟内更改,从不固定地址),有更好的方法吗? 2-即使settimout设置为每10秒调用一次,我仍然会偶尔超过查询限制,为什么会发生这种情况,10秒是很长的时间 代码如下:Maps 谷歌地图需要显示地址列表-设置输出速度慢和超过查询限制问题,maps,Maps,大家好,我有大约500个地址要在谷歌地图中列出,每个地址都是从filemaker数据库中抓取的,而不是分组在一个类别person(地图中的员工姓名)下。我正在使用一个函数对其进行地理编码,我每隔10次用10秒的时间调用一次 setimout,问题是: 1-当你必须显示500个地址时,页面非常慢,设置超时时间为10秒(地址可以在任何一秒钟内更改,从不固定地址),有更好的方法吗? 2-即使settimout设置为每10秒调用一次,我仍然会偶尔超过查询限制,为什么会发生这种情况,10秒是很长的时间 代
<pre><script type="text/javascript">
var mapOptions = {
//center:myLatLng,
//zoom:15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map-canvas"),
mapOptions);
//var contentString='<div id="google_info_window">I;m Here</div>';
//var infowindow = new google.maps.InfoWindow();
var infowindow = new google.maps.InfoWindow(
{
size: new google.maps.Size(150,50)
});
var addresses = new Array();
var gmarkers = [];
addresses = <?php echo json_encode($project_info); ?>;
console.log("Addresses: <pre>"+JSON.stringify(addresses));
<?php //foreach($project_info as $i => $val){?>
//addresses.push('<?php //echo $val; ?>');
<?php //}?>
var bounds = new google.maps.LatLngBounds();
i=1;
mySleepFunction();
function mySleepFunction()
{
var geocoder = new google.maps.Geocoder();
//var myLatLng = new google.maps.LatLng(30,-50);
//var contentString='<div id="google_info_window">I;m Here</div>';
//for(var i = 0; i<Object.keys(addresses).length; i++)
var show_message= document.getElementById('map_message');
show_message.style.display="block";
show_message.innerHTML ="<div>Loading Please Wait...</div>";
for (; i < 200; i++) {
if(i %10 == 0) {
setTimeout(geocoder.geocode({'address': addresses[i-1]['Address']}, makeCallback(i)),2000);
i++;
setTimeout("mySleepFunction()",9000);
break;
}
geocoder.geocode({'address': addresses[i-1]['Address']}, makeCallback(i));
if (i==199){
show_message.style.display = 'none';
}
}//For statement
function makeCallback(addressIndex) {
var i = addressIndex-1;
var geocodeCallBack = function(results, status) {
if (status != google.maps.GeocoderStatus.OK) {
console.log("Geocode was not successful for the following reason: " + status);
} else {
var p = results[0].geometry.location;
var address_formated = results[0].formatted_address;
var appraiser = addresses[i]['Staff'];
//var latlng = new google.maps.LatLng(p.lat,p.lng);
map.setCenter(p);
createMarker(map,address_formated,p,appraiser);
// sets the center point to be the p
//map.setZoom(10); // sets the zoom level
//bounds.extend(latlng);
// main.setMap(map, point, titles[i], bounds);
show(appraiser);
}
}
return geocodeCallBack;
}// fUNCTION MAKECALLBAC
}
//map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
map.fitBounds(bounds);
// map.panToBounds(bounds);
function createMarker(map,add,p,appraiser) {
var str = add;
var numb=str.indexOf(',');
//alert("position of:"+numb);
str = str.substr(0, numb+1) +"<br/>"+ str.substr(numb+1);
var contentString = '<div id="google_info_window" style="min-height:40px;height:auto;width:auto;"><strong>'+appraiser+'</strong><p style="margin:1px;padding:5px 1px 2px 1px">'+str+'</p></div>';
//var infowindow = new google.maps.InfoWindow();
var marker = new google.maps.Marker({
map: map,
title:appraiser,
position: p
});
marker.mycategory = appraiser;
gmarkers.push(marker);
//Open the infowindow
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
infowindow.setContent(contentString);
});
marker.setMap(map,bounds);
}
// == shows all markers of a particular category, and ensures the checkbox is checked ==
function show(appraiser) {
for (var i=0; i<gmarkers.length; i++) {
if (gmarkers[i].mycategory == appraiser) {
gmarkers[i].setVisible(true);
}
}
// == check the checkbox ==
var appraiser_id = appraiser.replace(/\s/g,"");
var apraiser_checkbox_id = appraiser_id+"_Checkbox";
document.getElementById(appraiser_id+"_Checkbox").checked = true;
}
// == hides all markers of a particular category, and ensures the checkbox is cleared ==
function hide(appraiser) {
for (var i=0; i<gmarkers.length; i++) {
if (gmarkers[i].mycategory == appraiser) {
gmarkers[i].setVisible(false);
}
}
// == clear the checkbox ==
var appraiser_id = appraiser.replace(/\s/g,"");
document.getElementById(appraiser_id+"_Checkbox").checked = false;
// == close the info window, in case its open on a marker that we just hid
infowindow.close();
}
function boxclick(box,appraiser) {
if (box.checked) {
show(appraiser);
} else {
hide(appraiser);
}
// == rebuild the side bar
}
// google.maps.event.addDomListener(window, 'load', initialize);
</script></pre>
变量映射选项={
//中心:myLatLng,
//缩放:15,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
var map=new google.maps.map(document.getElementById(“地图画布”),
地图选项);
//var contentString='I;我在这里;
//var infowindow=new google.maps.infowindow();
var infowindow=new google.maps.infowindow(
{
尺寸:新谷歌地图尺寸(150,50)
});
var addresses=新数组();
var gmarkers=[];
地址=;
log(“地址:+JSON.stringify(地址));
//地址。推送(“”);
var bounds=new google.maps.LatLngBounds();
i=1;
mysleepffunction();
函数mysleepffunction()
{
var geocoder=new google.maps.geocoder();
//var mylatng=new google.maps.LatLng(30,-50);
//var contentString='I;m Here';
//对于(var i=0;i