2012-12-04 5 views
5

Próbuję napisać aplikację internetową dla mojego ostatniego projektu roku na uni, a jednym z pierwszych problemów, które muszę rozwiązać, jest otrzymanie automatycznie wypełnionego pola tekstowego dla lokalne wprowadzanie adresu. Spędziłem trochę czasu na rozglądaniu się po Internecie i spędziłem trochę czasu bawiąc się mapami google V3 umieszcza autouzupełnianie wtyczki.Google api autouzupełnianie ograniczone/stronniczość na adres uliczny w moim mieście

jest coś, czego nie całkiem rozumiem w dokumentach api, które miałem nadzieję, że ktoś może być w stanie wyjaśnić dla mnie, a także może wskazać mi w dobrym kierunku.

w docs mówi tak:

The (regionów) typ kolekcji zleca usługę miejsce do powrotu żadnych rezultatów spełniających następujące typy:

locality 
sublocality 
postal_code 
country 
administrative_area1 
administrative_area2 

to co ja obecnie nie rozumiem, mieszkam w Kornwalii (bodmin to be exact) i chcę sprawić, by wyniki były błędne dla bodmin. mam zrobić, co następuje:

var input = document.getElementById('inputOne'); 
var defaultBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(50.423394,-4.803829), 
    new google.maps.LatLng(50.508623,-4.692593)); 

     //need to set bounds to cornwall/bodmin 
     var options = { 
      bounds: defaultBounds, 
      types: ['geocode'], 
      componentRestrictions: {country: 'GB'} 
     }; 
var autocomplete = new google.maps.places.Autocomplete(input,options); 

teraz to działa, ale jeśli na przykład wchodzę „St n” Spodziewam się, że najpierw wymyślić St Nicolas ulicy, która jest w Bodmin. ale pojawi się coś takiego jak st neot, które znajduje się kilka mil dalej.

jest część mnie, która myśli, że muszę ustawić typ na inną wartość, ale jestem dość zakłopotany już teraz.

EDYTOWANIE: EDYCJA: Przykład, który próbuję osiągnąć, znajduje się na stronie maps.google.com po wprowadzeniu, Bodmin następnie przesuń kursor przed przecinkiem i zacznij wpisywać nazwę ulicy lub nawet Asda zachowa ją lokalne do tego, co jest w tym obszarze. wolałbym nie pisać, bodmin, ale to jest coś, co mógłbym obejść, jeśli ktoś ma jakieś pomysły, które byłyby niesamowite. wtedy będę musiał dowiedzieć się, w jaki sposób użytkownik może wprowadzić pewne wartości, takie jak "Asda" i uzyskać lokalny adres asda.

+0

Czy próbowałeś componentRestrictions: {kraj: 'GB', sublocality: 'Bodmin'} i/lub componentRestrictions: {kraj: 'GB', lokalizacja: 'Bodmin' }? –

+0

Niestety to działa, od dokumentacji: "Parametr componentRestrictions może być użyty do ograniczenia wyników do konkretnych grup. Obecnie można użyć componentRestrictions do filtrowania według kraju" dzięki i tak :) myślę, że będę musiał trzymać się tego tak to jest. – Vade

Odpowiedz

4

Obecnie nie jest możliwe zawężenie wyników do określonej miejscowości, z wyjątkiem użycia granic, tak jak to zrobiono powyżej. To jednak tylko stronniczy wyniki w kierunku, ale nie ogranicza się do miejsc zawartych w określonych granicach.

Jeśli uważasz, że wyniki według lokalizacji są przydatną funkcją, zgłoś plik Places API - Feature Request.

Jak już wspomniano, po wpisaniu na końcu zapytania pod numer ,Bodmin jest bardziej prawdopodobne, że zwróci on wyniki lokalne. Tymczasowym rozwiązaniem może być użycie AutocompleteService i dodanie ,Bodmin na końcu parametru wejściowego żądania getPlacePredictions().

+0

Dzięki za odpowiedź Chris, spędziłem trochę czasu na badaniu i zmianie granic i odkryłem, że było to najlepsze, co miałem dostać. Wziąłem radę na pokładzie o dołączaniu, Bodmin do końca adresu lub miejsca (na przykład mamy pub o nazwie kot i skrzypce, który nie jest w bazie danych) i wydaje się, że działa to przyjemność. – Vade

+0

Jeśli ktoś wysłał tę prośbę o funkcję, proszę dać mi znać, abym mógł ją zagrać. Szukałem go, ale go nie znalazłem. – dlsso

0
<div class="well container"> 
    <form role="form"> 
     <div class="form-group"> 
     <label for="locality" class="sr-only">Stadt oder PLZ</label> 
      <input type="text" class="form-control" id="locality" name="locality" placeholder="Stadt oder PLZ" /> 
      <p class="help-block">Bitte zuerst die Stadt oder PLZ eingeben.</p> 
     </div> 
     <div class="form-group"> 
     <label for="route" class="sr-only">Straße/Hausnummer</label> 
     <div class="row"> 
      <div class="col-xs-6"> 
      <input type="text" class="form-control col-xs-8" id="route" name="route" placeholder="Straße" disabled="true" /> 
      </div> 
      <div class="col-xs-6"> 
      <input type="text" class="form-control col-xs-4" id="street_number" name="street_number" placeholder="Nr." disabled="true" /> 
      </div> 
     </div> 
     </div> 
    </form> 
</div> 

<script> 
var localityInput = document.getElementById('locality'); 
var localityOptions = { 
    types: ['geocode'], //['(cities)'], geocode to allow postal_code 
    componentRestrictions: {country: 'de'} 
}; 
autocomplete = new google.maps.places.Autocomplete(localityInput, localityOptions); 

google.maps.event.addListener(autocomplete, 'place_changed', function() { 
    $('#route').attr('disabled', false).focus(); 
    $('#street_number').attr('disabled', false); 

    var boundsByCity = autocomplete.getPlace().geometry.viewport; 
    var routeInput = document.getElementById('route'); 
    var routeOptions = { 
     bounds: boundsByCity, 
     types: ['geocode'] 
    }; 
    new google.maps.places.Autocomplete(routeInput, routeOptions); 
}); 
</script> 

Demo: jsfiddle

1

zestaw do typy regionów.

var options = { 
     bounds: defaultBounds, 
     types: ['(regions)'], 
     componentRestrictions: {country: 'GB'} 
    }; 
    var autocomplete = new google.maps.places.Autocomplete(input,options); 

Nadzieja to działa ..

Powiązane problemy