Mam problem z próbowaniem stronniczości wyników autouzupełniania Map Google na ostatni numer pin umieszczony na mapie. Obserwuję Tutorial Google tutaj: https://developers.google.com/maps/documentation/javascript/places-autocomplete#change_search_areaGoogleMaps v3 autocomplete.getBounds() zwraca niezdefiniowaną wartość po ustawieniu
kod Mój coffeescript jest następujący:
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()
które kompiluje do następującego 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());
});
};
Kołek jest prawidłowo umieszczony na map, ale nie ważne ile miejsc dodaję, konsola.logs zawsze zwraca:
autocomplete bounds (before): undefined
autocomplete bounds (after): ((9.923577823579402, -84.09528446042509), (9.932560976420598, -84.08616473957488))
Granice są poprawnie ustawiane (jak pokazuje drugi console.log
), ale wyniki nie są faktycznie stronnicze, a pierwsze zawsze powoduje niezdefiniowanie.
Przypadek testowy używamy, aby sprawdzić, czy wyniki są dociskane są: 1. Typ „San Jose” w autouzupełniania (top wyniki powinny być w Ameryce) 2. Dodaj „Limon, Kostaryka” jako znacznik na mapie 3. Typ „San Jose” w autouzupełniania, top wynik powinien być San Jose, Kostaryka
Myśleliśmy, to może być problem z scopingu, więc staraliśmy window.autocomplete
wszędzie i nadal miał ten sam problem. Próbowaliśmy także ustawić granice autouzupełniania w osobnej metodzie (zamiast zdarzenia place_changed, ale to też nie zadziałało).
Z góry dziękujemy za pomoc!
Aktualizacja: Próba Cedrika Odbierz Za radą Cedrika, Próbuję ustawić granice poza zwrotnego słuchacza (metoda jest wywoływana z poziomu słuchacza), ale wciąż otrzymuję ten sam problem. Nowy kod:
#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)
Świetnie! Udało mi się uzyskać pierwsze rozwiązanie, działające "autocomplete.bindTo". Jednak wiąże to bieżącą rzutnię map i próbuje powiązać ją z LAST pinem użytkownika umieszczonym na mapie. Twoje drugie rozwiązanie zawsze ustawia pierwsze 'console.log' na defaultBounds. Jak mogę ustawić granice do biasCircle po każdym zmianie miejsca? – CHawk
Nie 100% pewności, aby uzyskać punkt; jeśli ustawisz domyślne granice, zgadzamy się, że musisz zrobić to spoza wywołania zwrotnego słuchacza, w przeciwnym razie zawsze nadpisałoby dane wejściowe użytkownika. Poza tym, kiedy ustawiasz granice z układu biasCircle, nie widzę niczego złego. –
Zmieniono moje pytanie, aby uwzględnić mój obecny kod. Próbowałem ustawić granice poza callbackiem, ale otrzymuję swój oryginalny błąd (undefined przy każdym pierwszym wywołaniu). – CHawk