Googleジオコーディングサービスへ渡す住所の表記とその正規化について

1844 views
Skip to first unread message

Mitu-Koike

unread,
Oct 21, 2008, 1:40:01 AM10/21/08
to Google-Maps-API-Japan
お世話になっております。
Googleジオコーディングサービスのバージョンアップは皆さんご存知かと思います。

住所文字列の 国:都道府県:郡:市町村:町名:地番 正規化(xAL表記)に加えて、検索結果の精度が付加されるようになりました。
そこで、どのような住所表記をリクエストとして渡せば、精度が高い緯度経度を取得できるのかちょっと調べてみました。



①住所表記に字(あざ)が入ると精度が下がる


  長野県茅野市米沢9999     : 精度8 (住所レベル)
  長野県茅野市米沢北大塩99999  : 精度4 (町・市・村レベル)



②丁目・番地・番・号・の・ノ は「-」と認識され正規化される


  東久留米市南町3-10-5     → 東京都東久留米市南町3丁目10-5 : 精度8
  東久留米市南町3の10ノ5    → 東京都東久留米市南町3丁目10-5 : 精度8
  東久留米市南町3丁目10番地5号 → 東京都東久留米市南町3丁目10-5 : 精度8



③丁目の数字が漢数字だとエラーになる


  東久留米市南町三丁目十番地五号 → 602エラー(位置情報なし)
  東久留米市南町三丁目10-5    → 602エラー(位置情報なし)
  東久留米市南町3丁目十番地五号 → 東京都東久留米市南町3丁目10-5 : 精度8



④-A 番地・号の数値以降に、ビル名やアパート・マンション名が入ってしまった場合エラーになる


  東久留米市南町3-10-5 ミナミハイツB 2階 201号室 → 602エラー(位置情報なし)




④-B 番地・号の数値以降に、ハイフン付きで棟番号、階数、部屋番号が入っていれば問題ない


  東久留米市南町3-10-5-B-2F-201 → 東京都東久留米市南町3丁目10-5 : 精度8




調べた範囲は狭いですが、このような結果になりました。

千葉県成田市御所ノ内 → 千葉県成田市御所の内 のように、ある入力ゆれの補間(正規化)も精度が上がっているように思います。

京都や帯広のような特殊な住所表記や、○茨城県龍ヶ崎市 ×茨城県竜ヶ崎市 のような入力ゆれの補正に関してはまだ対処できていないようです。

以前、エクセル表からGoogleMap用のKMLファイルを作成する(http://groups.google.co.jp/group/
Google-Maps-API-Japan/browse_thread/thread/dc581ff6f61f1793?hl=ja#)という
ディスカッションでも触れましたが、入力されている住所データのクレンジング → ある程度の正規化 → ジオコーディング の流れは必須なように思い
ます。

丁目 - 番地 - 号 - ビル・マンション・アパート棟番号・記号 - 階数 - 号室

の部分だけでも正規化できないかと思案中です。
正規表現にもあまり詳しくないので勉強しながら進めていますが、丁目や号がない場合も考えなければならないので………挫折しそうです。

YON

unread,
Oct 21, 2008, 5:46:47 AM10/21/08
to Google-Maps-API-Japan
>①住所表記に字(あざ)が入ると精度が下がる
ですが、長野県茅野市米沢北大塩の緯度経度を、実際に地図にマッピングし
てみると必ずしも精度が落ちているわけではありません。ほぼ北大塩の位置が返っています。また、「埼玉県北葛飾郡松伏町ゆめみ野」とか「東京都中央区銀
座」「横浜市鶴見区岸谷」とかも精度は4ですが、ほどよい場所が返ってます。
ただ郡部の場合は番地まで指定しても精度は7です。Googleの精度(Accuracy)とは、位置の確からしさとは違う捕らえ方ではないでしょう
か?
また、精度9として、特定スポット名、店舗名、駅名等でドンピシャリにヒットしているものも、そうでないものもあります。

>京都や帯広のような特殊な住所表記
京都や札幌、帯広等の交差点呼び名の住所表記は全滅ですね。しかし
なかにはうまくいくのもあるから不思議です。

>龍ヶ崎市
「龍崎」で検索すると、台湾の位置が返ってきます。国コードも
ハンドリングする必要があります。

>正規化できないかと思案中です。
同一地名の問題もあります。
水をさすつもりはありませんが、たとえ膨大なデータベースを用意したと
しても、住所表記の正規化は超困難だと予想されます。
(以上)

Mitu-Koike

unread,
Oct 21, 2008, 9:33:26 AM10/21/08
to Google-Maps-API-Japan
YONさん、いつもお世話になっております。
「GoogleGeoを使って正確なジオコーディングを目指してみる」という観点からディスカッションを立ててみましたので、お付き合いのほどよろしく
お願いします。


> >①住所表記に字(あざ)が入ると精度が下がる
> ですが、長野県茅野市米沢北大塩の緯度経度を、実際に地図にマッピングし
> てみると必ずしも精度が落ちているわけではありません。ほぼ北大塩の位置が返っています。また、「埼玉県北葛飾郡松伏町ゆめみ野」とか「東京都中央区銀
> 座」「横浜市鶴見区岸谷」とかも精度は4ですが、ほどよい場所が返ってます。
> ただ郡部の場合は番地まで指定しても精度は7です。Googleの精度(Accuracy)とは、位置の確からしさとは違う捕らえ方ではないでしょう
> か?

具体例を出さずに申し訳ありませんでした。

下記の住所は[北大塩区事務所]の住所なのですが、田舎だとわざわざ字を入力する場合があります。
(大字=区と同等いうのが田舎の場合多いです)


  長野県茅野市米沢4047     →  精度8(住所レベル)
  長野県茅野市米沢北大塩4047  →  精度4(町レベル)



上の2つの住所(字が入っている、いない)だけの違いですが、同一の住所です。郵便物などもどちらの住所でも届きます。
同一の住所ということは、本来ならば同一地点の緯度経度を返さなければなりません。

下記は憶測ですが

・大字に対して地番を振っている場合(この場合"米沢"という町に1~番地を振っている場合)
・小字に対して地番を振っている場合(この場合"北大塩"という村・区に1~番地を振っている場合)

この違いによって精度8のデータが取得ができるかできないかが決まっているかも知れません。
「字の入力がいらない住所」と「字の入力が必要な住所」ですね。

というのも、国:都道府県:郡:市町村:町名:地番(xAL表記)が返されてくる中で、地番情報に小字が入っている場合があります。


[町名情報に大字・地番情報に小字が入ってくる例:小野新町郵便局]

  福島県田村郡小野町大字小野新町字横町30 → 精度8(住所レベル)


このような住所の場合、小字を取ってしまうと精度が下がります。

  福島県田村郡小野町大字小野新町30    → 精度4(町レベル)



先日のジオコーディングのバージョンアップで、それなりの住所正規化を行ってくれるようになりました。
GoogleGeo(ゼンリン?)がどのようなデータをジオコーディングに使っているかわかりませんが、住所表記のゆれによって精度がガタ落ちする場合
が有り得ます。

他のWebサービスとGoogleMapsのマッシュアップをした際、緯度経度含まれているデータのマッピングであれば信用できるかもしれません。
ですが、住所のみのデータからジオコーディングを行ってマッピングを行うような場合には、マッピングできていない物件・マッピングできていても位置(緯
度経度)が不確かな物件が少なからず出てくるでしょう。

そのための精度情報の付加だと思いますので、精度の低いマッピング物件に関しては「この位置が正しいかどうかは分かりません」くらいの表記が必要なん
じゃないかな?と思います。
ジオコーディングされたマッピング情報を鵜呑みにして出かけて行ってしまうユーザーもいるでしょうし。(私)
これは、少なくともプログラミングを行う側で配慮することですので、ユーザーへ配慮できるようにデータをくれるようになったのかなーと考えています。



> また、精度9として、特定スポット名、店舗名、駅名等でドンピシャリにヒットしているものも、そうでないものもあります。

精度9についてさらに言及すると、緯度経度は返ってきますが住所は返ってきません。

  千葉県1234 → Japan千葉県庁 : 精度8(住所レベル)

(つづく)

Mitu-Koike

unread,
Oct 21, 2008, 10:42:05 AM10/21/08
to Google-Maps-API-Japan
(つづき)

> >京都や帯広のような特殊な住所表記
> 京都や札幌、帯広等の交差点呼び名の住所表記は全滅ですね。しかし
> なかにはうまくいくのもあるから不思議です。

以前から話題に出ている㈱ジャスミンソフト社の「住所正規化コンバータ」ですが、デモで試してみると特殊な住所表記も「ある程度」の精度で正規化してい
ます。


[KBS京都]
京都府京都市上京区烏丸通一条下る龍前町600-1
             →  GoogleGeo:602エラー | 住所正規化コンバータ:号レベル

住所正規化コンバータ:http://www.addressmatch.jp/


先ほどの大字・小字の件もそうですが、住所の正規化を行った上で

  ①  住所をそのままジオコーディング
  ②③ 住所に大字(小字)を付け足してジオコーディング
  ④⑤ 住所に大字(小字)を消してジオコーディング

このうち1番高い精度のジオコーディング情報を負荷する位じゃないと、正確なジオコーディングを得られないのかもしれません。
ここまでやるとなると住所の正規化は必須でしょうし、それなりの費用も覚悟しないとダメでしょう。(私には無理です)



> 水をさすつもりはありませんが、たとえ膨大なデータベースを用意したと
> しても、住所表記の正規化は超困難だと予想されます。

以前YONさんにもお話ししましたが(エクセル表からGoogleMap用のKMLファイルを作成する)
入力済の住所データをジオコーディング(マッピング)していく上で、「入力のゆれ」の問題はいつまでもついてくると思います。
住所データが正規化されていればさほど問題ありませんが、1フィールドに住所も番地も号もマンション・アパート名もごちゃ混ぜに入ってる…なんてことも
あります。

このようなデータの場合、大字・小字の問題や住所自体の「入力のゆれ」はどうしようもないと割り切るしかありません。
ただ、正しい住所が入力されていても、丁目以降の表記方法によってジオコーディングのエラーが出るのはできるだけ避けたいと思った次第です。

丁目 - 番地 - 号 - ビル・マンション・アパート棟番号・記号 - 階数 - 部屋番号

上記の形への丁目以降の正規化=文字列の置換と考えてますので、流れだけ


[仮データ]
  東久留米市南町三丁目の10ー5号 ミナミハイツC 3棟 2階 201号室 → 602エラー


①英数字を全て半角・大文字にする
②"の"や長音をハイフンに置換: \d+(ー|ー|の|ノ|ノ)\d+
③"丁目"をハイフンに置換  : (\d+|一|二|三| ~ |四十一)(丁目|丁)(-|\d+)
④"番地"をハイフンに置換  : \d+(番地|番)(\d+|-|$)
⑤"号"をハイフンに置換
⑥アパート・マンション名をハイフンに置換
⑦階数がある場合 半角英数字 + "F" に置換
⑧"号室""棟"をハイフンに置換
⑨半角英字と半角数字を分割し間にハイフンを追加 : [A-Z](\d+|$)
⑩ハイフンのダブり・最終文字が半角英数字で終わるようにする・スペースの削除


このような流れで 東久留米市南町3-10-5-C-3-2F-201 に置換できているかと思われます。(たぶんできていないです。。助けてくださ
い)

この書式であればGeoAPIは取得できるところまでのジオコーディングを行い、それ以降は切り落して値を返します。


東久留米市南町3-10-5-C-3-2F-201 → 東京都東久留米市南町3丁目10-5 精度8(住所レベル)


号以降の表記ですが、"2F"や"150F"(階数)は許すが、"BF"(地下階)や"B1F"(地下1階)の表記は許さないなど暗黙の部分が結構あり
そうです。
ここら辺は、英語表記の住所に順守してるっぽいですね。




長々と書かせていただきましたが、現状では 正しい住所のリクエスト → 正確なジオコーディング結果 となります。

世界一正規化が困難だと言われている日本の住所データを、どのように正規化すれば正しい住所になるのか?
どこまで正確な位置情報の取得が必要か?

少しでも皆様のご参考になればと思います。
(了)

Mitu-Koike

unread,
Oct 21, 2008, 11:16:17 AM10/21/08
to Google-Maps-API-Japan
(追記)
東京都港区六本木6-10-1-A-37F-1
六本木ヒルズのデタラメな住所データですが、この住所表記でGeoAPIは 東京都港区六本木6丁目10-1 をきちんと返してきます。

東京都港区六本木6-10-1-A-3-37F-1

こうすると、東京都港区六本木6丁目1-10が帰ってきます(むむむ)
丁目以降を正規化した上で必要ない部分は切り落としたほうがよさそうですね。

Mitu-Koike

unread,
Oct 21, 2008, 12:15:54 PM10/21/08
to Google-Maps-API-Japan
(またまた追記)
丁目以下の正規化を行うときに
  ③"丁目"を置換  : (\d+|一|二|三| ~ |四十一)(丁目|丁)(-|\d+)
を行ったのには理由があります。

× 東京都東久留米市南町二丁目
○ 東京都東久留米市南町2丁目
○ 東京都港区六本木六丁目
○ 東京都港区六本木6丁目

漢数字の丁目は、GeoAPIが認識できる住所と認識できない住所があります。
また、日本の丁目の最大数は帯広市の南41丁目だそうです。
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q104378835

YON

unread,
Oct 22, 2008, 4:50:16 AM10/22/08
to Google-Maps-API-Japan
がんばってみてください。
ご存知かもしれませんが、無料のジオコーディングサービスは、Googleだけでは
ありません。以下の2つは私がよく利用しますが、かなりヒット率が高く精度も
返ってきます。Googleでは×の住所も検索できる場合があります。

YahooローカルサーチAPI
説明:http://developer.yahoo.co.jp/map/localsearch/V1/localsearch.html
リクエスト:http://api.map.yahoo.co.jp/LocalSearchService/V1/LocalSearch?

CSISシンプルジオコーディング実験(東京大学)
説明:http://pc035.tkl.iis.u-tokyo.ac.jp/~sagara/geocode/modules/simple-
geocode1/index.php?id=3l
リクエスト:http://geocode.csis.u-tokyo.ac.jp/cgi-bin/simple_geocode.cgi?

Reply all
Reply to author
Forward
0 new messages