2012-04-12 16 views
5

Ich benutze Places library zur automatischen Vervollständigung der Adresseingabe. Die Suche wird auf nur eine Stadt beschränkt, und ich bekomme Ausgabe wie folgt:Google Maps Autocomplete: Ausgabe nur Adresse ohne Land und Stadt

"Rossiya, Moskva, Leninskiy prospekt 28"

Wie "Rossiya, Moskva" zu verbergen? ...

Meine Frage:

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

Die Dokumente hier https://developers.google.com/maps/documentation/javascript/places sagen Folgendes, versuchen Sie es 'Nähe: Eine vereinfachte Adresse für den Ort, einschließlich der Straßennamen, Hausnummer und Ort, aber nicht die Provinz/der Staat, die Postleitzahl oder das Land. Zum Beispiel, Googles Sydney, Australien Büro hat eine Nähe Wert von 5/48 Pirrama Road, Pyrmont. –

+0

Danke, ich habe versucht, aber Nähe ist Place Eigenschaft und in meinem Fall Autocomplete.getPlace() zurück undefined. Konnte noch keine Lösung finden. –

Antwort

2

EDIT

Sie können nicht. Ich hatte es andersherum, dass du nur nach einer Stadt gesucht hast. Es gibt keine Möglichkeit, nur den Straßennamen (ich gehe davon aus, dass es sich um einen Straßennamen handelt) aus der Adresskomponente auszudrucken.


Gegenteil von dem was gefragt wurde

From the docs:

die (Städte) Sammlung geben Sie weist den Places-Dienst Ergebnisse zurück, die entweder locality oder administrative_area3 entsprechen.

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

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

in Folge u Hash haben und es kann u Teil bekommen, was u wollen:

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

jetzt von "Ort" u können es

place.geometry.location.lat() 

und für Adresse

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

hängt davon ab, was Sie wollen

3

Sie können, aber Sie müssen den Wert des Eingabefeldes an zwei Stellen ersetzen. Beispiel:

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

innerhalb des 'place_changed' Fall, dass Sie Folgendes tun:

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

Dies wird den Wert in der searchtextfield auf die Straße wechseln.

Der zweite Platz ist ein bisschen schwierig:

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

Der Grund, warum wir dies tun müssen, ist, denn wenn man nur den Ereignis-Listener für Unschärfe hinzufügen, wird Google Places die Eingabe mit der vollständigen Adresse eingereicht bevöl Warten Sie also, bis Google aktualisiert wurde, und erzwingen Sie Ihre Änderung, indem Sie einige Millisekunden warten.

Versuchen Sie es ohne die SetTimeout-Funktion, und Sie werden sehen, was ich meine.

0

Innen place_changed eine Timeout-Funktion einstellen:

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

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

Diese Lösung für mich gearbeitet.

0

Ich hatte ein sehr ähnliches Problem, das tatsächlich lösbar war. Dies in einem Angular 2-Projekt, aber es sollte auch anderswo anwendbar sein. Ich filtere meine Ergebnisse für Betriebe und wollte nur den Namen anzeigen und den Adressteil des Ergebnisses ausblenden. Dies hat den Trick für mich, eine Funktion auszuführen, wenn Sie einen Vorschlag auswählen:

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

wo zone eine NgZone Komponente im Konstruktor injiziert und this.establishment ist die Variable [(NgModel)] in das Eingabefeld gebunden.

Verwandte Themen