2016-07-30 8 views
1

Ich habe 20 Adressen zum Geocode. Sie sind alle gültig. Wenn ich versuche, sie zu geocodieren, erhalte ich das OVER_QUERY_LIMIT. Außerdem lege ich Markierungen auf die Karte, und jedes Mal bekomme ich eine andere Anzahl von Markierungen auf der Karte. Ich fand dieses OVER_QUERY_LIMIT in Google Maps, aber es half mir nicht. Auch nach dem Geocodding haben Marker die Länge 0 und ich weiß nicht warum. Dieser HTML-Code:Statuscode OVER_QUERY_LIMIT Google Maps 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> 

Dies ist js Code:

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

Bitte stellen Sie eine [mcve] zur Verfügung, die Ihr Problem demonstriert.Ich erhalte eine Javascript-Fehlermeldung mit dem geposteten Code: 'Uncaught TypeError: Kann die Eigenschaft 'geocode' von undefined nicht lesen. Wenn ich das korrigiere, bekomme ich die 'OVER_QUERY_LIMIT' nach der ersten 10 Ort Ionen, aber keine Marker. Impliziert, dass Sie eine Race Condition zwischen Ihrer 'initMap' und der Geocodierung der Marker haben. – geocodezip

+0

Mögliches Duplikat von [Wie geocodiere ich 20 Adressen, ohne eine OVER \ _QUERY \ _LIMIT-Antwort zu erhalten?] (Http://stackoverflow.com/questions/2419219/how-do-i-geocode-20-addresses-without-receiving -an-abfrage-limit-response) – yole

Antwort

1

Sie schlagen tatsächlich 20 Anfrage zu einem Zeitpunkt geocodieren. Der Geocodierer verfügt über Quoten- und Ratenbeschränkungen. Sie können 10 Standorte geocodieren, ohne das Abfrage-Limit zu erreichen (die tatsächliche Anzahl hängt wahrscheinlich vom Server-Laden ab). Die beste Lösung ist es, zu verzögern, wenn Sie OVER_QUERY_LIMIT Fehler erhalten, dann versuchen Sie es erneut. So etwas wie dieses

$ (Artikel) .each (function (i, item) {

setTimeout (function() {

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

}, 200);

}