我已經創建了大約150標記的自定義地圖。在達到地理編碼限制之前,它只會繪製大約20個左右。避免地理編碼限制與多個標記
我可以將什麼到我的代碼,以避免打了極限?
更新: 我該如何給每個請求添加一個時間延遲,比如說0.25秒(或者我可以擺脫的最低限度)?
我已經嘗試了幾個不同的建議,但我似乎無法讓他們使用我的代碼,所以請任何示例使用我的代碼。
我已經創建了大約150標記的自定義地圖。在達到地理編碼限制之前,它只會繪製大約20個左右。避免地理編碼限制與多個標記
我可以將什麼到我的代碼,以避免打了極限?
更新: 我該如何給每個請求添加一個時間延遲,比如說0.25秒(或者我可以擺脫的最低限度)?
我已經嘗試了幾個不同的建議,但我似乎無法讓他們使用我的代碼,所以請任何示例使用我的代碼。
因此,不是在for循環中幾乎立即發送所有請求,而是認爲在地理編碼返回結果或發送下一個結果時可能會更好。如果返回的結果是OVER_QUERY_LIMIT
,則重新發送請求並延長延遲。我還沒有找到產生最少OVER_QUERY_LIMIT
的甜蜜點超時,但至少它會創建的所有標記(爲有效地址)。在我的機器上完成大約需要45秒。
<!DOCTYPE html>
<html>
<head>
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css"
rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var geocoder;
var map;
var infowindow = new google.maps.InfoWindow();
var places = [];
var popup_content = [ /* all your popup_content */];
var address = [/* all of your addresses */];
var address_position = 0;
var timeout = 600;
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(52.40, -3.61);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: 'roadmap'
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
addMarker(address_position);
}
function addMarker(position)
{
geocoder.geocode({'address': address[position]}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK) {
places[position] = results[0].geometry.location;
var marker = new google.maps.Marker({
position: places[position],
map: map
});
google.maps.event.addListener(marker, 'click', function() {
if (!infowindow) {
infowindow = new google.maps.InfoWindow();
}
infowindow.setContent(popup_content[position]);
infowindow.open(map, marker);
});
}
else
{
if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT)
{
setTimeout(function() { addMarker(position); }, (timeout * 3));
}
}
address_position++;
if (address_position < address.length)
{
setTimeout(function() { addMarker(address_position); }, (timeout));
}
});
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="height: 80%; top:10px; border: 1px solid black;"></div>
</body>
</html>
感謝您的回答,是否可以顯示併入我的代碼?我不太確定如何去做。 – Rob
我用你的代碼作爲我的代碼的基礎,但是我沒有看到你的代碼示例了。 –
我偶然發現了這個問題,它出色地解決了我的問題!但是,我有一個問題,你傑克: 是否有一個原因,你把address_position增量和調用addMarker狀態檢查之外?在我看來,你想把它放在「OK」塊中,因爲如果你確認了一個地理編碼回來了,你只想再次安排它並增加一個成功的地址位置。是否有理由把它放在狀態檢查之外? 我想象中的要求超過限制的情況下,它似乎位置無論如何都會遞增。我錯了嗎? – NateDSaint
我當然沒有代碼管理器,但不是使用超時我只是不斷從函數內部調用函數(我確信資源管理器)。如果我成功,我遍歷我的計數器,否則如果不成功,我用當前計數器值調用我的函數。以這樣的速度,我可以(如果這是或標記你的圖)我的37個折線循環1000次,但我相信它會在最早的時間內完成。這裏有一個例子 - 我第一次的onclick調用我的繪圖功能爲情節(0):
function plot(k)
{
...
if (status == google.maps.GeocoderStatus.OK)
{
draw(r.routes[0]);
if(k<origArray.length) plot(k++);
}
else plot(k)
...
}
您也可以考慮這樣的回答:http://stackoverflow.com/questions/2419219/how-do-i-geocode- 20地址,而無需接收-A-過查詢的極限響應,這表明您獲取所有這些,存儲在數據庫中(或陣列)其緯度/經度,從而可以不用反向查找創建的標記。 –