Google Geocoder API με γωνιακή 4

ψήφοι
0

Έχουμε αγόρασε κλειδί API Google Map. Σε γωνιακή κωδικό μας, προσπαθούμε να χρησιμοποιήσετε το «google.maps.Geocode (). Γεωκωδικοποιήσει» που χρησιμοποιεί η Ετ.Γ.Σ. / πυρήνα γωνιακή βιβλιοθήκη για να κάνετε μια αντίστροφη γεωκωδικοποίηση για μια λίστα γεωγραφικού πλάτους / μήκους. Σε μια δεύτερη, θέλαμε να στείλουμε περίπου 20-30 αιτήματα, ώστε να μπορούμε να πάρουμε την έγκυρη απάντηση και να εμφανίσει τη διεύθυνση στην διαδικτυακή μας πύλη. Αλλά θα έχουμε το παρακάτω σφάλμα: «OVER_QUERY_LIMIT» για την κλήση γεωγραφικής κωδικοποίησης api.

Εδώ είναι το απόσπασμα κώδικα για τον ίδιο:

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

Προσπαθήσαμε το ίδιο με το σενάριο της Ιάβας και να πάρει το ίδιο λάθος. Δεν είμαι σίγουρος αν πρέπει να στείλουμε επιπλέον παραμέτρους για να αποφύγετε αυτό το σφάλμα. Θα εκτιμούσα αν μπορείτε να μας καθοδηγήσουν στην επίλυση του ζητήματος.

Ευχαριστώ εκ των προτέρων.

Δημοσιεύθηκε 27/02/2018 στις 22:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
0

Ευχαριστώ για την παροχή στην κοινότητα την ευκαιρία να σας βοηθήσει εδώ. Τώρα, θα μπορούσε να προσεγγίσει το πρόβλημα αυτό με δύο διαφορετικούς τρόπους. Θα χρησιμοποιήσετε και τις δύο προσεγγίσεις ως ένα έχει ως στόχο να σας κρατήσει από το να επιτύχουν το όριο QPS, και ο άλλος είναι να σας βοηθήσει να διαχειριστείτε την κατάσταση, όταν είστε σε «αυτή την γέφυρα και είστε έτοιμοι να περάσουν», οπότε-to-μιλούν .

1) Θα μπορούσατε ενδεχομένως να αποθηκεύουν προσωρινά το σύνολο των αποτελεσμάτων σας, όπως επιτρέπεται από το Πρότυπο ΟΠΥ Google.

Χάρτες Google APIs Όροι Παροχής Υπηρεσιών διευκρινίζει ότι μπορείτε να cache προσωρινά δεδομένα το Google Maps, για χρονικό διάστημα έως και 30 ημέρες, να βελτιώσει τις επιδόσεις της αίτησής σας. Με την προσωρινή αποθήκευση απαντήσεις διαδικτυακή υπηρεσία, η αίτησή σας μπορεί να αποφύγει την αποστολή διπλούν αιτήσεων για μικρές χρονικές περιόδους. Στην πραγματικότητα, οι απαντήσεις διαδικτυακή υπηρεσία περιλαμβάνουν πάντα την κεφαλίδα HTTP Cache-Control, το οποίο υποδεικνύει την περίοδο για την οποία μπορείτε να cache το αποτέλεσμα, για παράδειγμα, Cache-Control: δημόσια, max-age = 86400. Για την αποτελεσματικότητα, τη διασφάλιση της εφαρμογής σας αποθηκεύει προσωρινά πάντα αποτελέσματα τουλάχιστον για το χρονικό διάστημα που καθορίζεται σε αυτήν την κεφαλίδα, αλλά όχι περισσότερο από το μέγιστο χρόνο που ορίζεται στους Όρους Χάρτες Google APIs της Υπηρεσίας.

2) Θα μπορούσατε γκάζι αίτημά σας χρησιμοποιώντας ένα χρονικό όριο ή / και τα αιτήματα jitter σε τυχαία χρονικά διαστήματα μεταξύ των απαντήσεων, όπως περιγράφεται στο Έγγραφα Google , και JS Timeout με την πλήρη δείγμα κώδικα παρακάτω, παρέχονται από @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();
Απαντήθηκε 28/02/2018 στις 00:36
πηγή χρήστη

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