JavaScript HTML Google Maps API 地理编码服务问题

标签 javascript google-maps-api-3 for-loop geocoding

我正在尝试使用谷歌地图 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/

相关文章:

javascript - AJAX 中止后继续/恢复

javascript - 无法使用 Jquery 3.4.1、c# mvc 设置下拉列表的选定属性

javascript - Google Map API v3 - 超出最大调用堆栈大小

javascript - 添加监听器以向文本字段创建警告消息

javascript - node.js中的异步for循环

javascript - map 中心永远不在允许的范围内

google-maps - 在没有谷歌地图的情况下使用纬度/经度信息自动生成屏幕截图?

swift - 在 Swift 函数中,为什么 'return' 必须在 for 循环之外,当函数包含一个 for 循环且循环内有 if 语句时?

Java 可自定义嵌套 for 循环的数量

arrays - 通过在元素之间包含零来对向量进行上采样