我正在尝试使用谷歌地图 API 绘制多个地址。我在从地理编码服务返回超过 11 个测试地址的位置值时遇到问题。测试地址分别返回有效的 latlng 值。我提供的示例代码将运行,但本地址[11]未注释掉时,它将不会运行。
var geocoder;
var map;
var counter = -1;
var address = [];
address [0] = {loc:'memphis tn', pop:5};
address [1] = {loc:'125 ketay', pop:2};
address [2] = {loc:'tenafly nj', pop:4};
address [3] = {loc:'california', pop:3};
address [4] = {loc:'kansas city', pop:1};
address [5] = {loc:'lake erie', pop:1};
address [6] = {loc:'chicago', pop:1};
address [7] = {loc:'oregon', pop:1};
address [8] = {loc:'idaho', pop:1};
address [9] = {loc:'nevada', pop:1};
address [10] = {loc:'georgia', pop:1};
//address [11] = {loc:'Las Vegas', pop:1};
var k = 0;
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(-34.397, 150.644);
var mapOptions = {
zoom: 5,
center: latlng
}
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
for (k = 0; k < address.length; k++){
geocoder.geocode( {'address': address[k].loc}, function(results) {
counter ++;
map.setCenter(results[0].geometry.location);
var cir = new google.maps.Circle({
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
map: map,
center: results[0].geometry.location,
radius: address[counter].pop * 100000
});
});
}
}
google.maps.event.addDomListener(window, 'load', initialize);
最佳答案
看来 Google 正在因为您来电太快而惩罚您。它一定认为您正在向 API 发送垃圾邮件。我修改了您的代码示例,并在 google API 调用之间添加了 250 毫秒的延迟,并且工作正常。您可以考虑延迟多短才有效。
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=true&libraries=places"></script>
<script>
var geocoder;
var map;
var counter = -1;
var address = [];
address [0] = {loc:'memphis tn', pop:5};
address [1] = {loc:'125 ketay', pop:2};
address [2] = {loc:'tenafly nj', pop:4};
address [3] = {loc:'california', pop:3};
address [4] = {loc:'kansas city', pop:1};
address [5] = {loc:'lake erie', pop:1};
address [6] = {loc:'chicago', pop:1};
address [7] = {loc:'oregon', pop:1};
address [8] = {loc:'idaho', pop:1};
address [9] = {loc:'nevada', pop:1};
address [10] = {loc:'georgia', pop:1};
address [11] = {loc:'Las Vegas', pop:1};
var k = 0;
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(-34.397, 150.644);
var mapOptions = {
zoom: 5,
center: latlng
}
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
for (k = 0; k < address.length; k++){
//alert( address[k].loc );
geocoder.geocode( {'address': address[k].loc}, function(results) { setTimeout( function(){
counter ++;
map.setCenter(results[0].geometry.location);
var cir = new google.maps.Circle({
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35,
map: map,
center: results[0].geometry.location,
radius: address[counter].pop * 100000
});
}, 250 )
});
}
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<body>
<div id='map-canvas' style='width: 700px; height: 600px'>
</div>
</body>
关于JavaScript HTML Google Maps API 地理编码服务问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20777411/