Google Geocoder API mit kantigem 4

stimmen
0

Wir haben ein gekauftes Google Map API-Schlüssel. In unserem Angular Code, versuchen wir, „google.maps.Geocode (). Geocodiert“ zu verwenden, die agm / Kern Winkel Bibliothek verwendet eine umgekehrte Geokodierung für eine Liste von Breite / Länge zu tun. In einem zweiten, wollten wir etwa 20-30 Anfragen schicken, damit wir die gültige Antwort erhalten können und die Adresse in unserem Web-Portal angezeigt werden soll. Aber wir werden immer die folgenden Fehler: „OVER_QUERY_LIMIT“ für geocode api Anruf.

Hier ist der Code-Snippet für das gleiche:

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

Wir haben versucht, das gleiche das Java-Skript und die gleichen Fehler. Ich bin nicht sicher, ob wir zusätzliche Parameter senden müssen diese Fehler zu vermeiden. Ich schätze, wenn Sie uns bei der Lösung der Frage führen kann.

Danke im Voraus.

Veröffentlicht am 27/02/2018 um 22:01
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
0

Vielen Dank für die Gemeinde eine Chance zu geben, Ihnen zu helfen hier. Nun könnte man dieses Problem auf zwei verschiedene Arten nähern. Ich würde beide Ansätze zu verwenden, wie man gemeint ist, um Sie von Ihrem QPS Grenze erreicht, und der andere ist zu helfen, die Situation zu verwalten, wenn Sie sind „die Brücke und Sie sind bereit, sie zu überqueren“, so zu sprechen .

1) Sie könnten möglicherweise cachen alle Ihre Ergebnisse von Google Standard ToS erlaubt.

Google Maps APIs Nutzungsbedingungen festgelegt, dass Sie vorübergehend Daten Google Maps zwischenzuspeichern können, für einen Zeitraum von bis zu 30 Tagen, Leistung Ihrer Anwendung zu verbessern. Durch das Cachen Antworten Web-Service kann Ihre Anwendung doppelte Anforderungen über kurze Zeiträume zu senden vermeiden. In der Tat, Web-Service-Antworten sind stets bemüht, die Cache-Control-HTTP-Header, die den Zeitraum angibt, für die Sie das Ergebnis, zum Beispiel zwischenspeichern können, Cache-Control: public, max-age = 86400. Aus Gründen der Effizienz sicherzustellen, dass Ihre Anwendung zumindest für die Zeit, in diesem Header angegeben immer Ergebnisse zwischenspeichert, aber nicht mehr als die maximale Zeit in den Maps APIs Nutzungsbedingungen von Google festgelegt.

2) Sie konnten drosseln Ihre Anfrage mit einem Timeout und / oder Jitter - Anforderungen in unregelmäßigen Abständen zwischen Antworten , wie beschrieben in Google Text & Tabellen und ein JS Timeout mit dem vollständigen Beispielcode unten, zur Verfügung gestellt von @ 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();
Beantwortet am 28/02/2018 um 00:36
quelle vom benutzer

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