Google Geocoder API s Úhlová 4

hlasů
0

Máme zakoupený Google Map API klíč. V naší úhlově kódu se snažíme používat „google.maps.Geocode (). Geocode“, který používá AGM / core úhlové knihovnu udělat reverzní geokódování na seznam délka / šířka. Ve vteřině, jsme chtěli poslat kolem 20-30 žádostí, takže se můžeme dostat platnou odpověď a zobrazení adresy v našem webovém portálu. Ale my jsme stále níže chybová zpráva: „OVER_QUERY_LIMIT“ pro geokód volání API.

Zde je úryvek kódu pro stejný:

return Observable.create((observer: Observer<object>) => {
if (geocoder) {
       new google.maps.Geocoder().geocode({ 'location': latlng }, function (results, status) {
       console.log(status);
       if (status === 'OK') {
           console.log(results[0].formatted_address);
       }
    });
}});

Snažili jsme stejný pomocí Java Script a stále stejné chyby. Nejsem si jistý, jestli budeme muset posílat žádné další parametry, aby se zabránilo této chybě. Oceňuji, když se k nám mohou být vodítkem při řešení tohoto problému.

Díky předem.

Položena 27/02/2018 v 22:01
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
0

Díky za to, že se ke komunitě šanci, aby vám pomohl ven tady. Nyní můžete přistupovat k tomuto problému dvěma různými způsoby. Já bych použít oba přístupy jako jeden je určen pro vás od dosažení limitu QPS, a druhý je pomoci vám zvládnout situaci, kdy jste na „ten most a jste připraveni jej kříž“, takže k mluvit ,

1) Ty by mohly potenciálně do mezipaměti všechny vaše výsledky, jak to povoluje norma SPS Google.

Google Maps API smluvní podmínky stanoví, že lze dočasně mezipaměti dat Google Maps, po dobu až 30 dní, s cílem zlepšit výkon aplikace. Tím, caching odpovědi webové služby, aplikace může vyhnout posílání duplicitních požadavků na krátkou dobu. Ve skutečnosti, odpovědi webové služby vždy obsahovat záhlaví HTTP Cache-Control, který udává dobu, po kterou můžete mezipaměti s výsledky pro příklad, Cache-Control: veřejnost, max-age = 86400. Pro účinnost, aby vaše aplikace vždy ukládá výsledky nejméně po dobu uvedenou v této hlavičce, ale ne více než maximální dobu stanovenou v Google Maps API Podmínky služby.

2) Ty by mohly uškrtit svou žádost o použití časový limit a / nebo požadavky na jitter v náhodných intervalech mezi reakcí, jak je popsáno v Google Docs , a JS Timeout s plnou ukázkový kód níže, poskytované @Andrew Leach .

// delay between geocode requests - at the time of writing, 100 miliseconds seems to work well
var delay = 100;


  // ====== Create map objects ======
  var infowindow = new google.maps.InfoWindow();
  var latlng = new google.maps.LatLng(-34.397, 150.644);
  var mapOptions = {
    zoom: 8,
    center: latlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  var geo = new google.maps.Geocoder(); 
  var map = new google.maps.Map(document.getElementById("map"), mapOptions);
  var bounds = new google.maps.LatLngBounds();

  // ====== 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();
      }
    );
  }

       // ======= Function to create a marker
 function createMarker(add,lat,lng) {
   var contentString = add;
   var marker = new google.maps.Marker({
     position: new google.maps.LatLng(lat,lng),
     map: map,
     zIndex: Math.round(latlng.lat()*-100000)<<5
   });

  google.maps.event.addListener(marker, 'click', function() {
     infowindow.setContent(contentString); 
     infowindow.open(map,marker);
   });

   bounds.extend(marker.position);

 }

  // ======= An array of locations that we want to Geocode ========
  var addresses = [
           '251 Pantigo Road Hampton Bays NY 11946',
           'Amagensett Quiogue NY 11978',
           '789 Main Street Hampton Bays NY 11946',
           '30 Abrahams Path Hampton Bays NY 11946',
           '3 Winnebogue Ln Westhampton NY 11977',
           '44 White Oak Lane Montauk NY 11954',
           '107 stoney hill road Bridgehampton NY 11932',
           '250 Pantigo Rd Hampton Bays NY 11946',
           '250 Pantigo Rd Hampton Bays NY 11946',
           '44 Woodruff Lane Wainscott NY 11975',
           'Address East Hampton NY 11937',
           'Address Amagansett NY 11930',
           'Address Remsenburg NY 11960 ',
           'Address Westhampton NY 11977',
           'prop address Westhampton Dunes NY 11978',
           'prop address East Hampton NY 11937',
           'Address East Hampton NY 11937',
           'Address Southampton NY 11968',
           'Address Bridgehampton NY 11932',
           'Address Sagaponack NY 11962',
            "A totally bogus address"
  ];

  // ======= Global variable to remind us what to do next
  var nextAddress = 0;

  // ======= Function to call the next Geocode operation when the reply comes back

  function theNext() {
    if (nextAddress < addresses.length) {
      setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay);
      nextAddress++;
    } else {
      // We're done. Show map bounds
      map.fitBounds(bounds);
    }
  }

  // ======= Call that function for the first time =======
  theNext();
Odpovězeno 28/02/2018 v 00:36
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more