2015-11-21 3 views
9

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) 

Antwort

3

Es Ihre zur automatischen Vervollständigung erscheinen ermangelt Initialisierung der Grenzen entweder von der Karte

initSearch = -> 
    autocomplete = new (google.maps.places.Autocomplete(     
    document.getElementById('location-query'), types: [ 'geocode' ]) 
    autocomplete.bindTo('bounds', map) 
    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() 

oder über einen bestimmten Ort erforderlich

var defaultBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(-33.8902, 151.1759), 
    new google.maps.LatLng(-33.8474, 151.2631)); 

var input = document.getElementById('searchTextField'); 
var options = { 
    bounds: defaultBounds, 
    types: ['establishment'] 
}; 
autocomplete = new google.maps.places.Autocomplete(input, options); 

Link von Ihrem Tutorial https://developers.google.com/maps/documentation/javascript/places-autocomplete#add_autocomplete

Link von Dokumentation https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete

+0

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

+0

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. –

+0

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

Verwandte Themen