2012-04-12 19 views
5

Io uso Places library per completare l'immissione dell'indirizzo. La ricerca è limitata ad una sola città, e ottengo output come questo:Completamento di Google Maps: solo indirizzo di uscita senza paese e città

"Rossiya, Moskva, Leninskij Prospekt 28"

Come nascondere "Rossiya, Moskva"? ...

La mia domanda:

function() { 
     // Search bounds 
     var p1 = new google.maps.LatLng(54.686534, 35.463867); 
     var p2 = new google.maps.LatLng(56.926993, 39.506836); 
     self.options = { 
      bounds : new google.maps.LatLngBounds(p1, p2), 
      componentRestrictions: {country: 'ru'}, 
     }; 

     var elements = document.querySelectorAll('.address'); 

     for (var i = 0; i < elements.length; i++) { 
      var autocomplete = new google.maps.places.Autocomplete(elements[i], 
        self.options); 
     } 
+0

I documenti qui https://developers.google.com/maps/documentation/javascript/places dicono quanto segue, provalo 'vicinanze: un indirizzo semplificato per il luogo, incluso il nome della via, il numero civico e la località, ma non provincia/stato, codice postale o paese. Ad esempio, l'ufficio di Google a Sydney, in Australia, ha un valore di prossimità di 5/48 Pirrama Road, Pyrmont. –

+0

Grazie, ho provato, ma vicinanze è Place property e nel mio caso autocomplete.getPlace() restituisce undefined. Non ho ancora trovato la soluzione. –

risposta

2

EDIT

Non è possibile. Ho avuto il contrario, che stavi solo cercando una città. Non c'è modo di stampare solo il nome della via (presumo che sia il nome di una via) dal componente dell'indirizzo.


contrario di ciò che è stato chiesto

From the docs:

i (città) tipo di raccolta indica al servizio di posto per restituire i risultati che corrispondono a uno o localityadministrative_area3.

var input = document.getElementById('searchTextField'); 
var options = { 
    bounds: defaultBounds, 
    types: ['(cities)'] 
}; 

autocomplete = new google.maps.places.Autocomplete(input, options); 
0

nel risultato u hanno hash e da esso u può ottenere una parte che u vuole:

google.maps.event.addListener(autocomplete, 'place_changed', function() { 
      var place = autocomplete.getPlace(); 

ora da "luogo" u può ottenerlo

place.geometry.location.lat() 

e per indirizzo

place.address_components[0] or place.address_components[1] ... 

dipende da ciò che si desidera ottenere

3

È possibile ma è necessario sostituire il valore del campo di input in due punti. Esempio:

var autocomplete = new google.maps.places.Autocomplete(input, placesOptions); 
var input = document.getElementById('searchTextField'); 

all'interno della manifestazione 'place_changed' effettuare le seguenti operazioni:

placeResult = autocomplete.getPlace(); 
//This will get only the address 
input.value = placeResult.name; 

Questo cambierà il valore nel searchtextfield alla strada.

Il secondo posto è un po 'complicato:

input.addEventListener('blur', function(){ 
// timeoutfunction allows to force the autocomplete field to only display the street name. 
if(placeResult){ setTimeout(function(){ input.value = placeResult.name; }, 1); } 

Il motivo per cui dobbiamo fare questo è perché se si aggiunge solo il listener di eventi per sfocatura, Google Places popoleranno l'immissione di file con l'indirizzo completo , quindi devi "aspettare" che Google aggiorni e quindi forzare le modifiche aspettando alcuni millisecondi.

Provalo senza la funzione setTimeout e vedrai cosa intendo.

0

All'interno place_changed impostato una funzione di timeout:

var streetString = place.address_components[0] or place.address_components[1]; 

window.setTimeout(function() { 
    $('input').val(streetString); 
}, 200); 

Questa soluzione ha funzionato per me.

0

Ho avuto un problema molto simile che in effetti era risolvibile. Questo in un progetto Angular 2 ma dovrebbe essere applicabile anche altrove. Filtro i miei risultati per gli stabilimenti e voglio mostrare solo il nome e nascondere la parte dell'indirizzo del risultato. Questo ha fatto il trucco per me, una funzione di esecuzione una volta che si seleziona un suggerimento:

getAddress(place: Object) { 
    this.zone.run(() => { 
     this.establishment = place['name']; 
    }); 

dove zone è una componente NgZone iniettato nel costruttore e this.establishment è la variabile legata al [(NgModel)] nel campo di input.

Problemi correlati