API med Vinkel 4 Google Geocoder

stemmer
0

Vi har en kjøpt Google Map API-nøkkel. I vår Vinkel kode, prøver vi å bruke google.maps.Geocode (). Geokode som bruker AGM / core vinkel biblioteket for å gjøre en omvendt geokoding for en liste over breddegrad / lengdegrad. I en annen, vi ønsket å sende rundt 20-30 forespørsler slik at vi kan få gyldig svar og vise adressen i vår nettportal. Men vi får under feilmelding: OVER_QUERY_LIMIT for geokode API-kall.

Her er kodebiten for det samme:

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);
       }
    });
}});

Vi prøvde det samme med java script og får den samme feilen. Jeg er ikke sikker på om vi trenger å sende noen ekstra parametre for å unngå denne feilen. Jeg setter pris på om du kan veilede oss i å løse problemet.

Takk på forhånd.

Publisert på 27/02/2018 klokken 22:01
kilden bruker
På andre språk...                            


1 svar

stemmer
1

Takk for å gi samfunnet en sjanse til å hjelpe deg ut her. Nå kan du nærmer deg dette problemet på to forskjellige måter. Jeg vil bruke begge tilnærminger som man er ment å holde deg fra å nå din QPS grense, og den andre er å hjelpe deg med å håndtere situasjonen når du er på "den broen og du er klar til å krysse den", så-til-tale .

1) Du kan potensielt cache alle resultatene som er tillatt av Googles Standard ToS.

Google Maps API Vilkårene spesifiserer at du midlertidig kan cache Google Maps data, for en periode på inntil 30 dager, for å forbedre ytelsen til søknaden din. Ved å mellomlagre webtjenestemeldinger svar Applikasjonen kan unngå å sende dupliserte forespørsler over korte perioder av gangen. Faktisk web service svar er alltid det Cache-Control HTTP header, noe som indikerer at perioden som du kan cache resultatet, for eksempel Cache-Control: public, max-alder = 86400. For effektivitet, sikre din søknad alltid bufrer resultatene i minst hvor mye tid som er angitt i denne overskriften, men ikke mer enn den maksimale tiden som er angitt i Google Maps API Vilkårene.

2) Du kan strupe inn en forespørsel via en timeout og / eller jitter forespørsler på tilfeldige intervaller mellom responser som beskrevet i Google Docs , og JS Timeout med full eksempelkoden nedenfor, levert av @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();
Svarte 28/02/2018 kl. 00:36
kilden bruker

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