2010-12-28 11 views
1

V3のGoogleマップAPIを使用すると、改行でアドレスを書式設定する信頼できる方法はありますか?これにより、私は、持っているaddress_components配列が存在するジオコーディングからのレスポンスオブジェクトを通して見ると 改行で郵便住所を正しくフォーマットする[google maps]

1600アンフィシアターパークウェイ
マウンテンビュー、CA 94043

として 1600 Amphitheatre Parkway Mountain View, CA 94043のようなものがフォーマットされなければならない意味し、上記のアドレス、8つのコンポーネント(ないコンポーネントのすべてのアドレスに使用されている)のために:

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 

私はあなたができると考えていました同じようにしたいパーツを組み合わせ

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) 

[編集]私はsprintfのはこれだけ連結は私が推測するだろう、JavaScriptでデフォルトで定義されていないことに気づいた。[/編集]

しかし、それはひどく信頼できないようです。 address_componentsの構造の詳細を知っている人はいますか?それが米国の通りの住所のように似ているのであれば?私が望むなら、適切なタイプ(street_numberrouteなど)を探すことができたと思います。誰もが、私は "mはここでやって何より良い方法を持っていた場合、私はそれを愛するだろう

...

答えて

0

または....(やはり、米国の住所と仮定して)...あなたのために行うCASS認証サービスがあります。たとえば、私はSmartyStreetsという会社のために働き、アドレス検証を行います。一方、Googleは近似のアドレスを持ちますが、得られる結果はすべて正確ではありません。それは最良の推測をする。 CASS認定ソフトウェアは、信頼性と正確性を備えています。

LiveAddress APIは、単純なREST要求の結果を返します。ここでは、上記使用したアドレスのJSON結果の抜粋です:

"delivery_line_1":"1600 Amphitheatre Pkwy", 
"last_line":"Mountain View CA 94043-1351" 
だからここ

それは自動的に標準化されています、正しくあなたのための改行で区切ら。私はあなたがそれがいくつかの使用(プラス、それは無料です)であることがわかると思います。ご質問がある場合はお知らせください。私はあなたを助けます。

+1

これはかなり前のことでしたが、応答に感謝しました.CASS認証について知ったことは素晴らしいことです。 – munchybunch

1

アドレスコンポーネントとその種類はhttp://code.google.com/apis/maps/documentation/geocoding/#Typesに記載されています。あなたが何をしたいのか

です要素をループし、型配列の値をチェックします。あなたは、都市がN番目の要素であるといつも仮定したくないなど、あなたが選んだNの値が何であれ、間違いが頻繁に起こります。

米国内の住所については、管理用エリアのレベルをスキップしますnceは通常通りの住所の一部ではない郡です。

一般的に、タイプlocalityの要素の前に改行を置いてください。それは十分な結果を得るために必要な唯一の改行規則かもしれません。

1)非法人地域の農村アドレス:

は間違いなく、潜在的に問題のアドレスのうちの少なくとも2種類のテスト。たぶん、アラスカの真ん中にあるランダムな場所を選んでください。

2)超高密度の場所。ブルックリンはおそらくそのための良い場所です。私はブルックリンが地下にリストされると信じていますが、ニューヨーク(都市)は地域としてリストされるようです。正当な郵送先住所が何であるかを確認してください。サブクラスが存在する場合はそれを使用し、ローカリティを無視する必要がある場合があります。よく分かりません。

上記では、私は米国のアドレスを想定しています。米国外の住所を解析しようとすると、すべての賭けは無効になります。

関連する問題