2016-07-30 144 views
1

我有20个addcode加入地理编码。他们都是有效的。当我尝试对它们进行地理编码时,我得到了OVER_QUERY_LIMIT。我还在地图上放置了标记,每次我在地图上获得不同数量的标记。我发现这个OVER_QUERY_LIMIT in Google Maps,但它没有帮助我。 geocodding标记数组也有长度为0,我不知道为什么。 HTML代码:状态代码OVER_QUERY_LIMIT Google地图API

<div class="address-list"> 
       <ul> 
        <li data-address='ТРЦ Квадрат, бульвар Перова, 36, Киев, город Киев'>ТРЦ Квадрат, бульвар Перова 36</li> 
        <li data-address='Дніпровська набережна, 33'> ТЦ Аркадия, Днепровская Набережная 33 </li> 
        <li data-address='Срібнокільська, 3г, Київ'> ТЦ ИнСилвьер, Срибнокольская 3г</li> 
        <li data-address="вулиця Лук'янівська, Київ"> ТЦ Квадрат, Белорусская 1</li> 
        <li data-address='проспект Генерала Ватутіна, 2, Київ, 02000'> ТЦ Скаймолл, проспект Генерала Ватутіна 2 </li> 
        <li data-address='вулиця Архітектора Вербицького 30а 30a, Київ, город Киев'> вулиця Архітектора Вербицького 30а</li> 
        <li data-address='Дніпровська набережна, 33, Київ, 02000'> Дніпровська набережна 33</li> 
        <li data-address='вулиця Михайла Гришка, 3а, Київ, 02000'> вулиця Михайла Гришка 3а</li> 
        <li data-address='вулиця Антоновича, 176, Київ, 03150'>ТРЦ Ocean Plaza, вулиця Антоновича 176</li> 
        <li data-address='вулиця Олександра Мишуги, 4, Київ'>ТЦ Пирамида, вулиця Олександра Мишуги 4</li> 
        <li data-address='вулиця Антоновича, 176, Київ, 03150'>ТРЦ Ocean Plaza, вулиця Антоновича 176</li>  
        <li data-address='вулиця Олександра Архипенка, 6, Київ, 02000'>вулиця Мате Залки 6, Сильпо</li> 
        <li data-address='Бессарабська площа, Київ, 02000'>ТЦ Метроград, вулиця Красноармейская 13</li> 
        <li data-address='Спортивна площа, 1a, Київ, 01023'>ТЦ Гулливер, Спортивная 1а</li> 
        <li data-address='Спортивна площа, 1a, Київ, 01023'>ТЦ Гулливер, Спортивная 1а</li> 
        <li data-address='площа Льва Толстого, Київ, 01004'> ТЦ "Метроград", пл. Льва Толстого</li> 
        <li data-address='Майдан Незалежності, 1, Київ'>Пл. Майдан Независимости 1, ТЦ Глобус</li> 
       </ul> 
      </div> 
      <div id="map"> 

      </div> 

这是js代码:

var map; 
var markers=[]; 
var addreses=[]; 
var buf=[]; 
var geocoder; 
var delay = 100; 
var index = 0; 

function initMap() { 
    map = new google.maps.Map(document.getElementById("map"),{ 
     center: { lat: 50.448998, lng: 30.522364}, 
     zoom: 11  
    }); 
    geocoder = new google.maps.Geocoder(); 
} 

$(function(){ 
    buf = $('.address-list ul li'); 
    for(var i = 0; i < buf.length; i++){ 
     var data = $(buf[i]).data('address'); 
     addreses[i] = data; 
    } 

    nextAddress(); 

    $('.address-list ul li').hover(
     function(e){ 
      for (var i = 0; i < buf.length; i++){ 
       var addr = $(this).data('address'); 
       if(addreses[i] == addr){ 
        var pos = markers[i].getPosition(); 
        map.setCenter(pos); 
        break; 
       } 
      } 
     } 
    ); 
}); 

function geocodeAddress(addr, mark, next){ 
    geocoder.geocode({'address': addr}, function(results, status){ 
     if(status === google.maps.GeocoderStatus.OK){ 
      mark = new google.maps.Marker({ 
       map: map, 
       position: results[0].geometry.location 
      }); 
      mark = results[0].geometry.location; 
     }else{ 
      console.log('Error occured!' + status); 
      if(status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT){ 
       index--; 
       delay++; 
      } 
     } 
     console.log(markers.length); 
     next(); 
    }); 
} 

function nextAddress(){ 
    if(index < addreses.length){ 
     setTimeout(geocodeAddress(addreses[index], markers[index], nextAddress), delay); 
     index++; 
    }else{ 
     console.log("Markers done!!!" + markers.length); 
    } 
} 
+1

请提供一个演示你的问题的[mcve],我得到一个javascript错误,发布的代码是:'未捕获的TypeError:无法读取未定义的属性'geocode',如果我解决了这个问题,我会在第一个之后得到'OVER_QUERY_LIMIT' 10位置离子,但没有标记。对我来说意味着你有'initMap'和标记的地理编码之间的竞争条件。 – geocodezip

+0

可能的重复[我如何在没有收到OVER \ _QUERY \ _LIMIT响应的情况下获得Geocode 20地址?](http://stackoverflow.com/questions/2419219/how-do-i-geocode-20-addresses-without-receiving -an-过查询的极限响应) – yole

回答

1

你居然打在一次地理编码20请求。 地理编码器具有配额和速率限制。您可以在不触及查询限制的情况下对10个位置进行地理编码(实际数量可能取决于服务器负载)。最好的解决办法是延迟当你遇到OVER_QUERY_LIMIT错误,然后重试。事情是这样的

$(项目)。每个(函数(I,项目){

的setTimeout(函数(){

geoLocate("address", function(myLatlng){ 
    ...value 
}); 

},200);

}