2012-04-12 31 views
5

Yo uso Places library para autocompletar la entrada de dirección. Buscar se limita a una sola ciudad, y me da salida como esta:Google maps Autocompletar: dirección de salida única sin país y ciudad

"Rossiya, Moskva, Leninskiy prospekt 28"

Cómo ocultar "Rossiya, Moskva"? ...

Mi consulta:

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

Los documentos aquí https://developers.google.com/maps/documentation/javascript/places dicen lo siguiente, pruébelo 'alrededores: una dirección simplificada para el lugar, incluido el nombre de la calle, el número de la calle y la localidad, pero no la provincia/estado, código postal o país. Por ejemplo, la oficina de Google en Sídney, Australia tiene un valor aproximado de 5/48 Pirrama Road, Pyrmont. –

+0

Gracias, lo intenté, pero la vecindad es la propiedad Place y en mi caso autocomplete.getPlace() return undefined. Todavía no puedo encontrar la solución. –

Respuesta

2

EDITAR

No se puede. Lo hice al revés, que solo estabas buscando una ciudad. No hay forma de que solo imprima el nombre de la calle (supongo que es el nombre de una calle) del componente de dirección.


contrario de lo que se le pidió

From the docs:

las (ciudades) de tipo colección instruye el servicio Lugar para devolver resultados que coinciden con cualquiera locality o administrative_area3.

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

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

en consecuencia u tiene hash y de que u puede conseguir parte de lo que quieres es:

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

ahora de "lugar" u puede conseguirlo

place.geometry.location.lat() 

y para dirección

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

depende de lo que desea obtener

3

Puede, pero tiene que reemplazar el valor del campo de entrada en dos lugares. Ejemplo:

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

dentro del evento 'place_changed' hace lo siguiente:

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

Esto cambiará el valor en el searchtextfield a la calle.

El segundo lugar es un poco complicado:

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); } 

La razón por la que tenemos que hacer esto es porque si se agrega sólo el detector de eventos para el desenfoque, lugares de Google poblarán la entrada de archivos con la dirección completa , por lo que debe 'esperar' a que Google actualice y luego forzar su cambio esperando algunos milisegundos.

Pruébalo sin la función setTimeout y verás a qué me refiero.

0

Dentro place_changed establece una función de tiempo de espera:

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

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

Esta solución funcionó para mí.

0

Tuve un problema muy similar que de hecho era solucionable. Esto en un proyecto de Angular 2 pero también debería aplicarse en otros lugares. Filtrado mis resultados para los establecimientos, y quería mostrar solo el nombre y ocultar la parte de la dirección del resultado. Esto hizo el truco para mí, una función de ejecutar una vez que se selecciona una sugerencia:

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

donde zone es un componente NgZone inyectado en el constructor y this.establishment es la variable ligada a [(NgModel)] en el campo de entrada.

Cuestiones relacionadas