2015-11-21 13 views
9

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) 

Odpowiedz

3

Wydaje się swoją autouzupełniania brakuje wymaga inicjalizacji granice albo z mapy

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() 

lub za pośrednictwem określonej lokalizacji

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 z samouczka https://developers.google.com/maps/documentation/javascript/places-autocomplete#add_autocomplete

Link z dokumentacji https://developers.google.com/maps/documentation/javascript/examples/places-autocomplete

+0

Ś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

+0

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

+0

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

Powiązane problemy