Ho riscontrato un problema nel tentativo di distorcere i risultati di un completamento automatico di Google Maps sull'ultimo pin posizionato su una mappa. Sto seguente tutorial del Google qui: https://developers.google.com/maps/documentation/javascript/places-autocomplete#change_search_areaGoogleMaps v3 autocomplete.getBounds() restituisce undefined dopo essere stato impostato
codice mio CoffeeScript è il seguente:
initSearch = ->
autocomplete = new (google.maps.places.Autocomplete)(document.getElementById('location-query'), types: [ 'geocode' ])
autocomplete.addListener 'place_changed', ->
place = autocomplete.getPlace()
addDestination(place, map, insertIndex) #places pin on map
console.log 'autocomplete bounds (before): ' + autocomplete.getBounds()
#setting bounds around new place
biasCircle = new google.maps.Circle
center: place.geometry.location
radius: 500 #in kilometers
autocomplete.setBounds(biasCircle.getBounds())
console.log 'autocomplete bounds (after): ' + autocomplete.getBounds()
che compila nella seguente javascript:
initSearch = function() {
var autocomplete;
autocomplete = new google.maps.places.Autocomplete(document.getElementById('location-query'), {
types: ['geocode']
});
return autocomplete.addListener('place_changed', function() {
var biasCircle;
place = autocomplete.getPlace();
addDestination(place, map, insertIndex);
console.log('autocomplete bounds (before): ' + autocomplete.getBounds());
biasCircle = new google.maps.Circle({
center: place.geometry.location,
radius: 500
});
autocomplete.setBounds(biasCircle.getBounds());
return console.log('autocomplete bounds (after): ' + autocomplete.getBounds());
});
};
Il perno è posizionato correttamente sul mappa, ma non importa quanti posti aggiungo, il file console.logs restituisce sempre:
autocomplete bounds (before): undefined
autocomplete bounds (after): ((9.923577823579402, -84.09528446042509), (9.932560976420598, -84.08616473957488))
I limiti vengono impostati correttamente (come mostrato dal secondo console.log
), ma i risultati non vengono effettivamente distorti e il primo risulta sempre indefinito.
Il banco di prova che stiamo usando per verificare se i risultati sono stati influenzati sono: 1. Digitare 'San Jose' in funzione di completamento automatico (top risultati dovrebbero essere in America) 2. Aggiungi 'Limon, Costa Rica' come indicatore sulla mappa 3. Digitare 'San Jose' in funzione di completamento automatico, alto risultato dovrebbe essere San Jose, Costa Rica
abbiamo pensato che potrebbe essere un problema di scoping, così abbiamo provato window.autocomplete
ovunque e aveva ancora lo stesso problema. Abbiamo anche provato a impostare i limiti di completamento automatico in un metodo separato (anziché l'evento place_changed, ma anche questo non ha funzionato).
Grazie in anticipo per il vostro aiuto!
Aggiornamento: Cercando risposta di Cedric Su consiglio di Cedric, sto cercando di impostare i limiti al di fuori della richiamata ascoltatore (metodo viene chiamato dall'interno di chi ascolta), ma sto ancora ricevendo lo stesso problema. Nuovo codice:
#Sets autocomplete bias
setAutocompleteBias = (place) ->
console.log 'autocomplete bounds (before): ' + window.autocomplete.getBounds()
#setting bounds around new place
biasCircle = new google.maps.Circle
center: place.geometry.location
radius: 500 #in kilometers
window.autocomplete.setBounds(biasCircle.getBounds())
console.log 'autocomplete bounds (after): ' + window.autocomplete.getBounds()
window.autocomplete = null
#Autocomplete search box initialization
initSearch = ->
window.autocomplete = new (google.maps.places.Autocomplete)(document.getElementById('location-query'), types: [ 'geocode' ])
#autocomplete.bindTo('bounds', map)
window.autocomplete.addListener 'place_changed', ->
place = window.autocomplete.getPlace()
addDestination(place, map, insertIndex)
setAutocompleteBias(place)
Grande! Sono stato in grado di ottenere la tua prima soluzione, 'autocomplete.bindTo' funzionante. Tuttavia, questo associa la visualizzazione corrente delle mappe e tenta di associarlo al LAST pin che l'utente ha inserito sulla mappa. La tua seconda soluzione imposta sempre il primo 'console.log' su defaultBounds. Come posso impostare i limiti per il biasCircle dopo ogni volta che il luogo è cambiato? – CHawk
Non sicuro al 100% di ottenere il tuo punto; se imposti i limiti predefiniti, siamo d'accordo che devi farlo fuori dal callback del listener altrimenti, sovrascriverà sempre l'input dell'utente. Oltre a ciò, quando si impostano i limiti da biasCircle, non vedo nulla di sbagliato. –
Ho modificato la mia domanda per includere il mio codice corrente. Ho provato ad impostare i limiti al di fuori del callback del listener, ma sto ricevendo il mio errore originale (non definito con ogni prima chiamata). – CHawk