2010-12-28 4 views
1

Gibt es mit V3 der Google Maps API eine zuverlässige Möglichkeit, Adressen mit dem Zeilenumbruch zu formatieren? Damit meine ich so etwas wie 1600 Amphitheatre Parkway Mountain View, CA 94043 formatiert werden soll alsPostadresse mit Zeilenumbrüchen richtig formatieren [google maps]

1600 Amphitheatre Parkway
Mountain View, CA 94043

Blick durch das Response-Objekt von Geocoding, gibt es eine ist address_components Array, das hat, Für die obige Adresse werden 8 Komponenten (nicht alle Komponenten werden für die Adresse verwendet):

0: Object 
    long_name: "1600" 
    short_name: "1600" 
    types: Array[1] 
     0: "street_number" 
     length: 1 
1: Object 
    long_name: "Amphitheatre Pkwy" 
    short_name: "Amphitheatre Pkwy" 
    types: Array[1] 
     0: "route" 
     length: 1 
2: Object 
    long_name: "Mountain View" 
    short_name: "Mountain View" 
    types: Array[2] 
     0: "locality" 
     1: "political" 
     length: 2 
3: Object 
    long_name: "San Jose" 
    short_name: "San Jose" 
    types: Array[2] 
     0: "administrative_area_level_3" 
     1: "political" 
     length: 2 
4: Object 
    long_name: "Santa Clara" 
    short_name: "Santa Clara" 
    types: Array[2] 
     0: "administrative_area_level_2" 
     1: "political" 
     length: 2 
5: Object 
    long_name: "California" 
    short_name: "CA" 
    types: Array[2] 
     0: "administrative_area_level_1" 
     1: "political" 
     length: 2 
6: Object 
    long_name: "United States" 
    short_name: "US" 
    types: Array[2] 
     0: "country" 
     1: "political" 
     length: 2 
7: Object 
    long_name: "94043" 
    short_name: "94043" 
    types: Array[1] 
     0: "postal_code" 
     length: 1 

Ich dachte, dass Sie könnten nur Teile kombinieren, die Sie wollen, wie

sprintf("%s %s<br />%s, %s %s", 
     array[0].short_name, 
     array[1].short_name, 
     array[2].short_name, 
     array[5].short_name, 
     array[7].short_name) 

[Bearbeiten] Ich habe erkannt, dass sprintf standardmäßig nicht in JavaScript definiert ist, so dass nur eine Verkettung tun würde, denke ich. [/ edit]

Aber das scheint furchtbar unzuverlässig. Kennt jemand die Details über die Struktur von address_components, und wenn es für Straßenadressen in den USA zuverlässig ähnlich ist? Wenn ich wollte, könnte ich auch nach den richtigen Typen suchen (street_number, route, usw.).

Ich würde es lieben, wenn jemand eine bessere Art und Weise hatte als das, was ich "m hier tun ...

Antwort

0

Oder .... (wieder unter der Annahme von US-Adressen) ... es gibt CASS-zertifizierte Dienste, die es für Sie tun. Zum Beispiel arbeite ich für eine Firma namens SmartyStreets und wir überprüfen die Adresse.Google, auf der anderen Seite, Adresse Approximation und nicht alle Ergebnisse, die Sie erhalten, werden genau sein; es macht die besten Vermutungen. CASS-zertifizierte Software wird zuverlässig und genau sein.

Die LiveAddress API gibt Ergebnisse von einer einfachen REST-Anforderung zurück. Hier ist ein Ausschnitt des JSON Ergebnis der Adresse, die Sie oben verwendet:

"delivery_line_1":"1600 Amphitheatre Pkwy", 
"last_line":"Mountain View CA 94043-1351" 

Also hier ist es automatisch standardisiert und korrekt durch Zeilenumbrüche begrenzt für Sie. Ich denke, Sie werden es nützlich finden (plus, es ist kostenlos). Lass es mich wissen, wenn du Fragen hast. Ich werde dir helfen.

+1

Das war ziemlich lange her, aber danke für die Antwort - es ist schön, von der CASS-Zertifizierung erfahren zu haben. – munchybunch

1

Die Adresskomponenten und deren Typen sind bei http://code.google.com/apis/maps/documentation/geocoding/#Types dokumentiert.

Was Sie tun wollen, ist Schleife durch die Elemente und überprüfe die Werte in der Array-Art. Du willst nicht immer davon ausgehen, dass die Stadt das N-te Element ist usw. Für welchen Wert von N du dich auch entscheidest, es wird öfter falsch sein, was du wahrscheinlich willst Ich möchte definitiv den Typ überprüfen

Für Straßenadressen in den USA möchten Sie administrative_area_level_2 si überspringen Das ist eine Grafschaft, die normalerweise nicht Teil der Straßenadresse ist.

Im Allgemeinen möchten Sie vor dem Element mit Typlokalität einen Zeilenumbruch einfügen. Dies ist möglicherweise die einzige Regel für die Zeilenumbrüche, die Sie benötigen, um ein Ergebnis zu erhalten, das gut genug ist.

Definitiv Test mindestens zwei Arten von potentiell problematischen Adressen mit:

1) Rural Adressen in nicht eingebauten Bereichen. Vielleicht wählen Sie einen zufälligen Ort in der Mitte von Alaska.

2) Super-dichte Orte. Brooklyn ist möglicherweise ein guter Ort dafür. Ich glaube, dass Brooklyn als die Unterortung aufgeführt wird, während New York (Stadt) wahrscheinlich als die Lokalität aufgeführt wird. Überprüfen Sie, welche legitime Postanschrift Sie haben. Sie werden möglicherweise feststellen, dass Sie die Sublocalisation verwenden müssen, wenn sie vorhanden ist, und die Lokalität ignorieren. Ich bin mir nicht sicher.

In den oben genannten nehme ich US-Adressen an. Alle Wetten sind deaktiviert, wenn Sie versuchen, Adressen außerhalb der USA zu analysieren.