Ich habe ein Problem versucht, die Ergebnisse einer Google Maps Autocomplete auf den letzten Pin auf einer Karte zu verfälschen. Ich folge dem Tutorial Google hier: https://developers.google.com/maps/documentation/javascript/places-autocomplete#change_search_areaGoogleMaps v3 Autocomplete.getBounds() gibt undefined nach dem Festlegen
Mein Coffeescript-Code ist wie folgt:
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()
, die in den folgenden JavaScript kompiliert:
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());
});
};
Der Stift korrekt auf der platziert map, aber egal wie viele Orte ich hinzufüge, die console.logs immer zurück:
autocomplete bounds (before): undefined
autocomplete bounds (after): ((9.923577823579402, -84.09528446042509), (9.932560976420598, -84.08616473957488))
Die Grenzen werden korrekt gesetzt (wie durch die zweite console.log
gezeigt), aber die Ergebnisse sind nicht wirklich voreingenommen und die erste ergibt immer undefiniert.
Der Testfall wir, wenn die Ergebnisse zu testen, verwenden werden vorbelastet sind: 1. Geben Sie ‚San Jose‘ in die automatische Vervollständigung (Top-Ergebnisse in Amerika sein sollte) 2. Add ‚Limon, Costa Rica‘ als Markierung auf der Karte 3. Geben sie ‚San Jose‘ in der automatischen Vervollständigung sollte Topresultat San Jose sein, COSTA RICA
wir dachten, es könnte ein Problem von Scoping sein, so haben wir versucht, window.autocomplete
überall und hatte immer noch das gleiche Problem. Wir haben auch versucht, die Autocomplete-Grenzen in einer separaten Methode (anstelle des Ereignisses place_changed) zu setzen, aber dies hat auch nicht funktioniert.
Vielen Dank im Voraus für Ihre Hilfe!
Update: Der Versuch, Cedrics Antwort Auf Cedric Rat, ich versuche, die Grenzen außerhalb des Zuhörers Rückruf einzustellen (Methode aus Hörer genannt wird), aber ich bin immer noch das gleiche Problem bekommen. Neuer Code:
#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)
Großartig! Ich konnte Ihre erste Lösung, "Autocomplete.bindTo" arbeiten. Dies bindet jedoch das aktuelle Ansichtsfenster und versucht, es an den LETZTEN Pin zu binden, den der Benutzer auf der Karte platziert hat. Ihre zweite Lösung setzt immer das erste 'console.log' auf defaultBounds. Wie kann ich die Grenzen zum biasCircle nach jeder Änderung des Ortes setzen? – CHawk
Nicht 100% sicher, dass Sie Ihren Standpunkt verstehen; Wenn Sie die Standardgrenzen festlegen, stimmen Sie zu, dass Sie sie außerhalb des Listener-Callbacks erstellen müssen. Andernfalls würde die Benutzereingabe immer überschrieben. Abgesehen davon, wenn Sie die Grenzen aus dem biasCircle setzen, gibt es nichts falsches kann ich sehen. –
Bearbeitete meine Frage, um meinen aktuellen Code einzuschließen. Ich habe versucht, die Grenzen außerhalb des Listener Callbacks zu setzen, aber ich bekomme meinen ursprünglichen Fehler (bei jedem ersten Aufruf nicht definiert). – CHawk