javascript - Throttling or delaying Google Places API autosuggestions -
google places api web service has 1000 request per day quota limit non-billed accounts. when using search box autosuggestion feature providing multiple places each key press, limit reached quickly.
<input id="pac-input" class="controls" type="text" placeholder="search box"> <div style="height:100%; width:100%;position:absolute;"> <div id="map"></div> </div> <script> window.onload = initautocomplete; function initautocomplete() { var my_position = new google.maps.latlng(51.163375, 10.447683); var map = new google.maps.map(document.getelementbyid('map'), { center: {lat: 51.163375, lng: 10.447683}, disabledoubleclickzoom: true, zoom: 9, maptypeid: 'roadmap' }); // create search box , link ui element. var input = document.getelementbyid('pac-input'); var searchbox = new google.maps.places.searchbox(input); map.controls[google.maps.controlposition.top_left].push(input); // bias searchbox results towards current map's viewport. map.addlistener('bounds_changed', function() { searchbox.setbounds(map.getbounds()); }); var markers = []; var crowdmarker = new google.maps.marker({ position: my_position, map: map }); google.maps.event.addlistener(map, 'dblclick', function(e){ var positiondoubleclick = e.latlng; crowdmarker.setposition(positiondoubleclick); var lat = crowdmarker.getposition().lat(); var lng = crowdmarker.getposition().lng(); }); // listen event fired when user selects prediction , retrieve // more details place. google.maps.event.adddomlistener(searchbox, 'keydown', function (e) { if (e.keycode == 13) { e.preventdefault(); } }); searchbox.addlistener('places_changed', function() { var places = searchbox.getplaces(); if (places.length == 0) { return; } // clear out old markers. markers.foreach(function(marker) { marker.setmap(null); }); markers = []; // each place, icon, name , location. var bounds = new google.maps.latlngbounds(); places.foreach(function(place) { if (!place.geometry) { console.log("returned place contains no geometry"); return; } var icon = { url: place.icon, size: new google.maps.size(71, 71), origin: new google.maps.point(0, 0), anchor: new google.maps.point(17, 34), scaledsize: new google.maps.size(25, 25) }; // create marker each place. markers.push(new google.maps.marker({ map: map, icon: icon, title: place.name, position: place.geometry.location })); if (place.geometry.viewport) { // geocodes have viewport. bounds.union(place.geometry.viewport); } else { bounds.extend(place.geometry.location); } }); map.fitbounds(bounds); }); } </script> <script src="https://maps.googleapis.com/maps/api/js?key=myapikey&libraries=places" async defer></script>
things i've tried include setting bound searchbox limit suggestions set area, adding delay within keydown section.
can suggest way able throttle or delay autosuggestion appearing, , therefore sending fewer requests?
i'm afraid current implementation of autocomplete , search box in places library of maps javascript api doesn't allow throttle or delay requests programmatically. can see feature request in google issue tracker this:
https://issuetracker.google.com/issues/35823678
please star feature request add vote. workaround can think of implementing own autocomplete element uses google.maps.places.autocompleteservice
class , able control frequency of requests sent autocompleteservice
.
https://developers.google.com/maps/documentation/javascript/reference#autocompleteservice
Comments
Post a Comment