我遇到的问题在这些论坛上都进行了很好的讨论,但是这些建议似乎都不对我有用,因此我正在寻找一些保存为html文件时可以使用的完整javascript。
问题是,当尝试使用Javascript调用的V3 API对Google Map上的11个以上的位置进行地理编码时,我一直遇到OVER_QUERY_LIMIT错误。我了解您可以致电地理编码器的速率受到限制(以及每日总体积限制),因此我需要在数组中每个结果之间引入一个暂停。
任何帮助非常感谢。
这是我的代码:
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> var geocoder; var map; var wait = false; function initialize() { geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(51.32, 0.5); var myOptions = { zoom: 8, center: latlng, mapTypeId: google.maps.MapTypeId.ROADMAP } map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); codeAddress('KT16 8LA' + ', UK'); codeAddress('LS8 2LQ' + ', UK'); codeAddress('NE13 8AF' + ', UK'); codeAddress('KT12 2BE' + ', UK'); codeAddress('W1W 8AN' + ', UK'); codeAddress('EC3N 2LS' + ', UK'); codeAddress('BS9 3BH' + ', UK'); codeAddress('KA10 6LZ' + ', UK'); codeAddress('EC1V 9BW' + ', UK'); codeAddress('WD18 8YN' + ', UK'); codeAddress('HA3 6DQ' + ', UK'); codeAddress('W1U 3PL' + ', UK'); codeAddress('W1T 7QL' + ', UK'); codeAddress('W1S 1TD' + ', UK'); codeAddress('SW1X 8NX' + ', UK'); codeAddress('LE2 8ET' + ', UK'); codeAddress('BA3 4BH' + ', UK'); codeAddress('AL3 8JP' + ', UK'); codeAddress('DE55 4QJ' + ', UK'); codeAddress('W6 0QT' + ', UK'); codeAddress('LA1 1PP' + ', UK'); codeAddress('SW16 4DH' + ', UK'); codeAddress('WC2N 6DF' + ', UK'); codeAddress('RM6 6LS' + ', UK'); codeAddress('S25 3QZ' + ', UK'); codeAddress('WC2H 7LR' + ', UK'); codeAddress('BH24 1DW' + ', UK'); codeAddress('EC2N 6AR' + ', UK'); codeAddress('W1U 2FA' + ', UK'); codeAddress('B60 3DX' + ', UK'); } function codeAddress(vPostCode) { if (geocoder) { geocoder.geocode( { 'address': "'" + vPostCode + "'"}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); } else { alert("Geocode was not successful for the following reason: " + status); } }); } } </script> <body style="margin:0px; padding:0px;" onload="initialize()"> <div id="map_canvas" style="width:100%; height:90%"></div> </body>
编辑:这是我试图使它在相关部分中暂停/等待的方式,但是它没有做任何事情:
function codeAddress(vPostCode) { if (geocoder) { while (wait) { /* Just wait. */ }; geocoder.geocode( { 'address': "'" + vPostCode + "'"}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { map.setCenter(results[0].geometry.location); var marker = new google.maps.Marker({ map: map, position: results[0].geometry.location }); /* When geocoding "fails", see if it was because of over quota error: */ } else if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { wait = true; setTimeout("wait = true", 2000); //alert("OQL: " + status); } else { alert("Geocode was not successful for the following reason: " + status); } }); } }
迈克·威廉姆斯的教程中没有出现这两行:
wait = true; setTimeout("wait = true", 2000);
这是第3版端口:
http://acleach.me.uk/gmaps/v3/plotaddresses.htm
相关的代码位是
// ====== Geocoding ====== function getAddress(search, next) { geo.geocode({address:search}, function (results,status) { // If that was successful if (status == google.maps.GeocoderStatus.OK) { // Lets assume that the first marker is the one we want var p = results[0].geometry.location; var lat=p.lat(); var lng=p.lng(); // Output the data var msg = 'address="' + search + '" lat=' +lat+ ' lng=' +lng+ '(delay='+delay+'ms)<br>'; document.getElementById("messages").innerHTML += msg; // Create a marker createMarker(search,lat,lng); } // ====== Decode the error status ====== else { // === if we were sending the requests to fast, try this one again and increase the delay if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { nextAddress--; delay++; } else { var reason="Code "+status; var msg = 'address="' + search + '" error=' +reason+ '(delay='+delay+'ms)<br>'; document.getElementById("messages").innerHTML += msg; } } next(); } ); }