郵便番号データの廃止データを解析してみた

郵便番号検索 -zipnavi-の廃止住所対応を行うにあたり、新たに日本郵便から提供されている廃止住所データを使用する事にしました。
廃止データについて色々調べていく中で、単純に廃止といっても、さまざまなケースがある事が分かりました。
今回はそれらのケースをいくつか紹介したいと思います。

1.市町村合併によって住所が廃止されたケース
市区町村合併などの統廃合によって、合併前の住所が廃止されたケースです。
具体的には2010年3月23日に「千葉県印旛郡印旛村萩原」が廃止され、「千葉県印西市萩原」となっています。
ただ廃止された住所が合併したかどうかを確認するのは、廃止データだけでは判断出来ません。
実際に廃止データとして提供されるのは、「千葉県印旛郡印旛村萩原」のみの情報となります。
この情報から合併先「千葉県印西市萩原」を探すには市町村合併情報(合併・分割日順) – 日本郵便を見る必要があります。
ちなみに市町村合併情報は廃止データの様なcsv形式でのデータ提供は無く、このページをじっくり読み解くしか現時点では方法はありません。
ちょっと面倒ですが、市町村合併によって住所が廃止されたケースを判断する為には、廃止データに含まれていて、かつ市町村合併情報(合併・分割日順) – 日本郵便に合併情報が存在する、という2つの情報が必要という事になります。

2.住所自体が廃止となったケース
廃止データには含まれているが、市町村合併情報(合併・分割日順) – 日本郵便にはそれらしき合併情報が無い場合は、このケースに該当するといえます。
具体的には「千葉県八千代市高津団地」の様なケースが、これに該当します。

3.住所の呼び方が変わったケース
これは何ともややこしいケースなのですが、結論からいうと「廃止された住所では無い」と個人的には思います。
具体例を挙げると「千葉県印西市戸神台」のようなケースで、廃止データ上でのこの住所の呼び方は「チバケン インザイシ トガミダイ」となっています。
しかし同じ漢字名称で実在する新住所を探すと、その住所の呼び方は「チバケン インザイシ トカミダイ」となっています。
※「トミダイ」の「ガ」の濁点が無くなっているのです。

zipnaviではこういうケースは廃止住所とは判断せず、実在する住所として検索を行っていますが、紛らわしいケースの一つです。

4.住所の表記が変わったケース
これもややこしいケースの一つです。
住所の呼び方は同じだが、表記が一部変わったケースです。
具体例を挙げると廃止データが「北海道旭川市永山一条」のようなケースで、実在する新住所は「北海道旭川市永山1条」というケースです。
※「永山一条」の漢数字が英数字(永山1条)になっただけです。

zipnaviでは3のケースと同じく、廃止住所とは判断せず、実在する住所として検索を行っています。
3のケースも4のケースもそうですが、郵便屋さんが見たら、たぶん両方とも同じ住所だと思うでしょう。。。
zipnaviも基本的にはそういう視点で検索を行う事をコンセプトとしています。

単に廃止データといっても、これだけのケースが存在します。
1と2のケースは元々想定していたケースですが、3と4のケースはちょっと意外でした。
3と4のケースは、ある意味住所の変更という位置感になると思いますが、ここに住む住民の方々はご存知なのでしょうか?
改めて日本の住所は複雑だと思いました。

zipnaviで廃止となった住所も検索可能になりました

郵便番号検索 -zipnavi-は、統廃合などで廃止になった住所も検索できるように新機能を12月1日にリリースしました。
年賀状を書くときなどで、相手先の住所の市区町村が合併してしまい、使えなくなった住所についても検索にヒットさせ、利用者に入力した住所が廃止になった旨を知らせます。

更に合併先の住所が見つかった場合は、その情報も表示させます。

上記機能を実現する為に、どういう仕様で作ったかを簡単に説明したいと思います。
同じ様な機能を考えている人は参考にしてみてください。

先ず、上記の2つの機能(廃止データの表示と合併情報の表示)を実現する為には、2つの情報が必要になります。
それは、「廃止データ」と「合併情報」です。

1.廃止データの取得
廃止データを取得するには下記のサイトから、csv形式でデータをダウンロードできます。
読み仮名データの促音・拗音を小書きで表記するもの – 日本郵便
の「廃止データ」欄にてデータが提供されています。
ただし、廃止データの場合は、月単位でデータが提供される為、2ヶ月以上過去の廃止住所を保持したい場合は、過去のデータを蓄積していく必要があります。
zipnaviの場合は、過去2年分の廃止データを保持する仕様としたので、過去24か月分の廃止データを保持しています。

2.合併情報の取得
合併情報を取得するには下記のサイトを見ます。
市町村合併情報(合併・分割日順) – 日本郵便
しかしこの情報、現時点ではcsvデータなどの一覧ファイルとしては提供されていません。
なので、データとしてシステムに取り込む事は難しいです。
zipnaviの場合は毎月このページを見て、合併情報を手作業にてzipnaviのシステムに毎月登録しています。

上記の2つの情報を使用して、検索条件として入力した住所に対し、該当する既存住所が存在しなかった場合は、廃止データの中から該当する住所があるか検索します。
※「既存住所」とは毎月提供されている、最新の郵便番号データを指します。
この機能があれば、市町村合併などで住所が廃止になっても、簡単に新しい住所に置き換える事が可能となります。

しかし今回の開発を進める中で、不思議なケースがいくつか見つかりました。
それは本記事の冒頭でも書きましたが、廃止になった住所に対し合併先が無い住所が存在するようなケースです。
単純に「住所が無くなった」というケース以外にもあるので、その詳細については次回の記事で紹介したいと思います。

日本郵便の郵便番号データを解析してみる 第5回~「その他」編~

過去第1~4回の記事では、さまざまな郵便番号データの「クセ」を紹介してきましたが、厄介なクセはまだあります。
今回紹介するのは、町域名に「その他」という文字が含まれているデータです。
具体的には以下の様なデータです。

01106,”06122″,”0612272″,”ホッカイドウ”,”サッポロシミナミク”,”ミスマイ(ソノタ)”,”北海道”,”札幌市南区”,”簾舞(その他)“,0,0,0,0,0,0

(※2010/3/31時点の郵便番号データより)

「簾舞(その他)」とは何でしょう?この様な住所が実在するとは思えません。
北海道札幌市南区の場所検索 – 地図-ルート検索|いつもNAVIで調べても、その様な住所は存在しません。

これは「(その他)」という文字に別の意味があると思われます。
このデータだけ見てもこれ以上分からないので、上記のデータの近くにあるデータ(レコード)を見てみると、下記の様なデータが見つかりました。

01106,”06122″,”0612261″,”ホッカイドウ”,”サッポロシミナミク”,”ミスマイ1ジョウ”,”北海道”,”札幌市南区”,”簾舞一条”,0,0,1,0,0,0
01106,”06122″,”0612262″,”ホッカイドウ”,”サッポロシミナミク”,”ミスマイ2ジョウ”,”北海道”,”札幌市南区”,”簾舞二条”,0,0,1,0,0,0
01106,”06122″,”0612263″,”ホッカイドウ”,”サッポロシミナミク”,”ミスマイ3ジョウ”,”北海道”,”札幌市南区”,”簾舞三条”,0,0,0,0,0,0
01106,”06122″,”0612264″,”ホッカイドウ”,”サッポロシミナミク”,”ミスマイ4ジョウ”,”北海道”,”札幌市南区”,”簾舞四条”,0,0,0,0,0,0
01106,”06122″,”0612265″,”ホッカイドウ”,”サッポロシミナミク”,”ミスマイ5ジョウ”,”北海道”,”札幌市南区”,”簾舞五条”,0,0,0,0,0,0
01106,”06122″,”0612266″,”ホッカイドウ”,”サッポロシミナミク”,”ミスマイ6ジョウ”,”北海道”,”札幌市南区”,”簾舞六条”,0,0,0,0,0,0

「北海道札幌市南区簾舞」という住所に対して、「一条」、「二条」、「三条」、「四条」、「五条」、「六条」がそれぞれ後続の文字として存在し、それぞれ郵便番号も別々に分かれています。
ここで一つ疑問が浮かびます。「北海道札幌市南区簾舞七条」という住所が仮に存在した場合、上記の一覧(一条~六条)には該当しません。
その様な場合、この住所の郵便番号は何になるのか?
もしや「簾舞(その他)」がそれに該当するのではないか?

現時点で思いつく限り、「北海道札幌市南区簾舞(一条~六条)」に含まれない住所については「(その他)」に含むと考えられます。
では実際に「北海道札幌市南区簾舞(一条~六条)」に含まれない住所はどのようなものが存在するのか?

北海道札幌市南区簾舞の場所検索 – 地図-ルート検索|いつもNAVIで調べてみると、「北海道札幌市南区簾舞」の直後に地番が来る様なケースが実在しました。
※「北海道札幌市南区簾舞七条」という住所はありませんでした。。。

具体的に言うと「北海道札幌市南区簾舞3番地」の様な住所のは「(その他)」に属するので、郵便番号も「0612272」になるという事です。

上記の様に「(その他)」という文字が存在するデータは600件近くあるので、郵便番号データでは常用されていると考えられます。
郵便番号データの説明 – 日本郵便には「(その他)」に関する説明はありませんので、あくまで個人的な見解です。

よって、現時点では「(その他)」という文字は以下の様に結論付ける事が出来ると思います。

(その他):都道府県、市区町村、町域に対して個別の郵便番号が存在せず、一つの郵便番号にまとめられてしまっている住所を表記したもの。

ただ「北海道札幌市南区簾舞3番地」の様に、「(その他)」として扱われてしまった住所に住む人たちにとっては、ちょっと可愛そうな表現のされ方ですね。。。

上記のケースを考慮した結果は、郵便番号検索 -zipnavi-にて実際に確認できます。

日本郵便の郵便番号データを解析してみる 第4回~範囲の指定編~

本シリーズの第2回第3回で括弧と、区切り文字のパターンが何となくですが解析できました。
しかし、まだまだ手ごわいクセがあります。
それは丁目などを範囲指定したケースです。具体的には以下の様なデータです。

01101,”060 “,”0600042″,”ホッカイドウ”,”サッポロシチュウオウク”,”オオドオリニシ(1-19チョウメ)”,”北海道”,”札幌市中央区”,”大通西(1~19丁目)“,1,0,1,0,0,0
01101,”064 “,”0640820″,”ホッカイドウ”,”サッポロシチュウオウク”,”オオドオリニシ(20-28チョウメ)”,”北海道”,”札幌市中央区”,”大通西(20~28丁目)“,1,0,1,0,0,0

※2010/2/26時点の郵便番号データより(以下同様)

これは同じ町域でも、丁目によって郵便番号が違うケースです。

0600042:北海道札幌市中央区大通西(1~19丁目)
0640820:北海道札幌市中央区大通西(20~28丁目)

この様なケースは「~」を基準として、前後の数値を取れば範囲として定義出来そうな気がします。

ただ、過去の記事を見てくると、これだけで収まりそうな気配はありません。
そうです!ここにもまたシステム屋を悩ます厄介な「クセ」が隠れています。
それは以下の様なケースです。

19442,”40902″,”4090211″,”ヤマナシケン”,”キタツルグンコスゲムラ”,”コスゲムラ(664イジョウ)”,”山梨県”,”北都留郡小菅村”,”小菅村(664以上)“,1,0,0,0,0,0
30208,”64964″,”6496413″,”ワカヤマケン”,”キノカワシ”,”タケブサ(450バンチイカ)”,”和歌山県”,”紀の川市”,”竹房(450番地以下)“,1,0,0,0,0,0
10425,”37716″,”3771512″,”グンマケン”,”アガツマグンツマゴイムラ”,”オオマエ(ホソハラ2259-)”,”群馬県”,”吾妻郡嬬恋村”,”大前(細原2259~)“,1,1,0,0,0,0

まあ人間の目で見れば内容は理解出来なくは無いですが、結構手強いですね。。。
上記の内容から「以上」「以下」も範囲指定の文字として扱わなければいけないという事になります。
また、「大前(細原2259~)」については、「~」の後ろがありませんが、「大前(細原2259以上)」と同じ意味としてとらえる事が出来そうです。

「~」については、実在する住所の一部として使われている事はほぼ皆無といえます。
となると、やはり注意すべきは、「以上」「以下」が実在する住所の名称として存在するか否かですが、案の定そういうケースがありました。

42201,”85105″,”8510502″,”ナガサキケン”,”ナガサキシ”,”イガヤドマチ”,”長崎県”,”長崎市”,”以下宿町“,0,0,0,0,0,0

※「長崎県長崎市以下宿町」は実在する住所です。
長崎県長崎市以下宿町の場所検索 – 地図-ルート検索|いつもNAVI

自分が調べた限り今回のケースで言うと、範囲を指定する文字は「~」、「以上」、「以下」の様なパターンが存在する事が分かり、それぞれの文字については現時点では以下の様に結論付けたいと思います。

~:ほぼ範囲指定の文字として特定できそう。ただし前後の数値が無い場合があるので扱いには注意が必要。
以上:現時点(2010/2/26時点)では、範囲指定の文字として特定できそうだが、今後変わってくる可能性がある。
以下:範囲指定の文字と、そうでない場合の2パターンが あり、明確な特定方法は解っていない。住所データを洗い替えるような場合には、精度を求めるなら人の目でチェックするという運用が必要になる。

上記のケースを考慮した結果は、郵便番号検索 -zipnavi-にて実際に確認できます。

日本郵便の郵便番号データを解析してみる 第3回~カンマなどの区切り文字編~

my-hobby : 日本郵便の郵便番号データを解析してみる 第2回~括弧の意味編~に続き、今回紹介するのは「、」カンマなどについてです。
第2回でも紹介しましたが、郵便番号データの町域名の以下の様な郵便番号データがそれに該当します。(赤字部分)

01224,”066 “,”0660005″,”ホッカイドウ”,”チトセシ”,”キョウワ(88-2、271-10、343-2、404-1、427-3、431-12、443-6、608-2、641-8、814、842-5、1137-3、1392、1657、1752バンチ)”,”北海道”,”千歳市”,”協和(88-2、271-10、343-2、404-1、427-3、431-12、443-6、608-2、641-8、814、842-5、1137-3、1392、1657、1752番地)“,1,0,0,0,0,0

※2010/2/26時点の郵便番号データより(以下同様)

カンマについては第2回でも紹介したように、複数の文字(住所)を区切る為の情報として使われている事が分かりました。

しかしカンマだけが区切り文字と思いきや、郵便番号データの「クセ」はそんな甘いものではありませんでした。
自分が調べた限りでは、以下の3つの文字が区切り記号らしきものとして、郵便番号に実在していました。
——————-


及び


——————-
これらの文字を区切り文字と判断する事が出来れば、システム的に文字を分割する事が可能になります。
そこで上記3つの文字が、区切り文字として使用できるのか調べてみました。
最初の「、」カンマは区切り文字の一部としてのみ使用されてる可能性が高いと判断できますが、2番目の「及び」は厳しいです。。。
仮に「及び町」みたいな地名が実在したとすると、区切り文字としては判断できません。
とりあえず2010/2/26時点の郵便番号データに対して、町域名に「及び」という文字がどれだけ使われているかをチェックしてみました。
チェックした結果は以下の通りです。

09206,”32126″,”3212613″,”トチギケン”,”ニッコウシ”,”フジハラ(1047-1268オヨビシモタイラ)”,”栃木県”,”日光市”,”藤原(1047~1268及び下平)“,1,0,0,0,0,0
25202,”52202″,”5220239″,”シガケン”,”ヒコネシ”,”ウオチョウ(897バンチオヨビナカジマ505-518バンチ)”,”滋賀県”,”彦根市”,”宇尾町(897番地及び中島505~518番地)“,1,0,0,0,0,0

該当するのは上記の2件だけでした。
先ほどの懸念事項を踏まえると、1件目の「1268及び下平」、「897番地及び中島505」が実在する住所では無く、かつ「1268」、「下平」、「897番地」、「中島505」が実在する住所である事が証明できれば、ここで使われている「及び」という文字は、カンマと同じ意味である事が分かります。
例によって住所情報を提供している全国の場所検索トップ – 地図-ルート検索|いつもNAVIにて調べた結果、上記の2件とも実在しない住所である事が分かりました。

ちなみに、「1268、下平」「897番地、中島505」とし、それぞれ2件の住所に分けた場合、「下平」、「中島505」以外の住所は実在しました。
栃木県日光市藤原1268の場所検索 – 地図-ルート検索|いつもNAVI
滋賀県彦根市宇尾町897の場所検索 – 地図-ルート検索|いつもNAVI

ここで「下平」、「中島505」の2件はなぜ住所が存在しないのかが気になります。
とりあえず、「滋賀県彦根市宇尾町中島」と「栃木県日光市藤原下平」という文字をそれぞれGoogleで検索すると、それらしい住所がヒットしました。

この結果からすると全国の場所検索トップ – 地図-ルート検索|いつもNAVIにおいても全ての住所が登録されていない可能性があると考えられます。

日本の住所はいったい誰が決めて、どの様な経路で情報が伝わっているのか疑問が湧きます。。。
とりあえずこの2件については、これ以上は調べようが無いので、ここまでとします。

結果として「及び」を区切り文字として定義する為には、今後「及び」という文字を含む町域名が今後出てこない事を祈るしか無いですねw。。。

そして最後の「・」。これも一見カンマと同じ様に、住所の一部では無いと思われがちですが、ここに落とし穴があります。
実は以下のケースの様に、住所の一部に「・」が使われているケースが存在します。

13103,”107 “,”1076201″,”トウキョウト”,”ミナトク”,”アカサカミッドタウン・タワー(1カイ)”,”東京都”,”港区”,”赤坂ミッドタウン・タワー(1階)“,0,0,0,0,0,0

※「東京ミッドタウン・タワー」の「・」の部分です。

これは厳しい。。。
「・」の文字を区切り文字として扱ってしまうと、
「赤坂ミッドタウン」、「タワー」の2つの住所に分割されてしまいます。

ちなみに以下のケースは、「・」の使い方がカンマと同じ扱いのようです。
愛媛県伊予市中山町出渕の場所検索 – 地図-ルート検索|いつもNAVIで確認済み。

38210,”79132″,”7913203″,”エヒメケン”,”イヨシ”,”ナカヤマチョウイズブチ(トヨオカ・ヒガシマチ)”,”愛媛県”,”伊予市”,”中山町出渕(豊岡・東町)“,1,0,0,0,0,0

結果として、「、」「及び」「・」の3つの文字に関しては、現時点では下記の様に結論付けたいと思います。

「、」 : ほぼ区切り文字として特定できそう。
「及び」 : 現時点(2010/2/26時点)では、区切り文字として特定できそうだが、今後変わってくる可能性がある。
「・」 : 区切り文字と、そうでない場合の2パターンが あり、明確な特定方法は解っていない。住所データを洗い替えるような場合には、精度を求めるなら人の目でチェックするという運用が必要になる。

ちなみに現時点(2010/2/26時点)では、下記の住所が「・」を住所の一部として使っているのが確認出来ています。
東京都港区赤坂赤坂アークヒルズ・アーク森ビル
東京都港区赤坂ミッドタウン・タワー
静岡県湖西市新所・岡崎・梅田入会地
※一見「静岡県湖西市新所・岡崎・梅田入会地」で使用されている「・」は、区切り文字じゃないの?と思うかも知れませんが、実在する住所です。
静岡県湖西市新所・岡崎・梅田入会地の場所検索 – 地図-ルート検索|いつもNAVI
日本の住所は奥が深いです。。。

上記のケースを考慮した結果は、郵便番号検索 -zipnavi-にて実際に確認できます。

日本郵便の郵便番号データを解析してみる 第2回~括弧の意味編~

my-hobby : 日本郵便の郵便番号データを解析してみる 第1回~住所のマージ編~でとりあえず、データを繋げるところまでは出来ました。
第2回目以降は、繋げたデータを更に解析してみたいと思います。

今回紹介するのは町域名に存在する「()」括弧についてです。
例えば以下の様な郵便番号データがそれに該当します。※赤字の部分。

01224,”066 “,”0660005″,”ホッカイドウ”,”チトセシ”,”キョウワ(88-2、271-10、343-2、404-1、427-3、431-12、443-6、608-2、641-8、814、842-5、1137-3、1392、1657、1752バンチ)”,”北海道”,”千歳市”,”協和(88-2、271-10、343-2、404-1、427-3、431-12、443-6、608-2、641-8、814、842-5、1137-3、1392、1657、1752番地)“,1,0,0,0,0,0

※2010/2/26日更新分のデータより抜粋

こちらのデータは、都道府県、市区町村、町域毎にまとめると以下の様な内容になります。※カナは除く
都道府県:北海道
市区町村:千歳市
町域:協和(88-2、271-10、343-2、404-1、427-3、431-12、443-6、608-2、641-8、814、842-5、1137-3、1392、1657、1752番地)

ここで問題になるのは、町域にある「()」括弧です。
もちろん「協和(88-2、・・・中略・・・1752番地)」という名前の住所は存在しません。
郵便番号データの説明 – 日本郵便を見ても、括弧に関する記述はありません。

これは前回と同様、独自の解析で括弧の意味を解読するしかないようです。
小学校の得意教科が算数だった自分がこの内容を見ると、以下の複数の住所に分割できるのではないかと考えました。
協和88-2
協和271-10
協和343-2
協和404-1
協和427-3
協和431-12
協和443-6
協和608-2
協和641-8
協和814
協和842-5
協和1137-3
協和1392
協和1657
協和1752番地

では本当にそうなのか?
郵便番号データからでは判断が出来ないので、上記の住所が実在するのか調べてみました。
調査の方法としては、住所情報を提供している全国の場所検索トップ – 地図-ルート検索|いつもNAVIから該当の住所を調べて、住所が実在すればOKという方法です。
日本郵便の郵便番号データだけでは判断が出来ないので、住所データを扱う別の企業に頼ろうという作戦です。。。
かなり原始的な方法ですが、現時点ではこれしか思いつきませんでした。

全てを調べるのは大変なので、とりあえず北海道千歳市の協和88-2、協和443-6、協和1752番地の3つが実在するか調べた結果、いづれの住所も実在していました。
北海道千歳市協和88-2の場所検索 – 地図-ルート検索|いつもNAVI
北海道千歳市協和443-6の場所検索 – 地図-ルート検索|いつもNAVI
北海道千歳市協和1752の場所検索 – 地図-ルート検索|いつもNAVI

という事は上記の例での括弧の意味は、以下の内容であると推察出来ます。
括弧内のカンマで区切られたそれぞれの文字と、括弧の前に付いた文字を結合すれば、住所(町域名)として成立する。
簡単に(数学の式っぽく)書くとA(B、C、D)=AB、AC、ADって事ですね。

これなら「北海道千歳市協和88-2」という住所に対して、正しい郵便番号を検索させる事が可能になりますね。

上記のケースを考慮した結果は、郵便番号検索 -zipnavi-にて実際に確認できます。

日本郵便の郵便番号データを解析してみる 第1回~住所のマージ編~

郵便番号検索 – 日本郵便が提供している郵便番号データ(住所データ)は、郵便番号検索系のさまざまなサイトで利用されていますが、クセがある事でも知られています。
今回は、zipnaviの開発を行った中で見つけた「クセ」を何回かに渡って紹介していきたいと思います。

とりあえず第1回という事で、住所データのマージについて紹介したいと思います。
ご存知の方もいるかと思いますが、 日本郵便から提供されている郵便番号データは、同じ郵便番号で複数のレコードが存在するケースがあります。
また以下の様に複数のレコードの「町域名」、及び「町域名カナ」を繋げる事によって始めて1つの情報になる場合があります。※赤字の部分が町域名です。
町域名カナも同様ですが、基本的に町域名と同じなので、黒字のままにしています。

01224,”066 “,”0660005″,”ホッカイドウ”,”チトセシ”,”キョウワ(88-2、271-10、343-2、404-1、427-“,”北海道”,”千歳市”,”協和(88-2、271-10、343-2、404-1、427-“,1,0,0,0,0,0
01224,”066 “,”0660005″,”ホッカイドウ”,”チトセシ”,”3、431-12、443-6、608-2、641-8、814、842-“,”北海道”,”千歳市”,”3、431-12、443-6、608-2、641-8、814、842-“,1,0,0,0,0,0
01224,”066 “,”0660005″,”ホッカイドウ”,”チトセシ”,”5、1137-3、1392、1657、1752バンチ)”,”北海道”,”千歳市”,”5、1137-3、1392、1657、1752番地)“,1,0,0,0,0,0

※2010/2/26日更新分のデータより抜粋

上記の様なデータは町域名の文字を繋げないと、郵便番号検索エンジン用のデータとして扱うには無理があります。
同じ郵便番号で複数あるレコードの「町域名カナ」と「町域名」それぞれを繋げて1レコードにすると、以下の様な感じになります。

01224,”066 “,”0660005″,”ホッカイドウ”,”チトセシ”,”キョウワ(88-2、271-10、343-2、404-1、427-3、431-12、443-6、608-2、641-8、814、842-5、1137-3、1392、1657、1752バンチ)”,”北海道”,”千歳市”,”協和(88-2、271-10、343-2、404-1、427-3、431-12、443-6、608-2、641-8、814、842-5、1137-3、1392、1657、1752番地)“,1,0,0,0,0,0

では、どのような(判断)条件で複数レコードを1件にまとめたらよいのか?
郵便番号データの説明 – 日本郵便にはそれを断定するような情報は書かれていません。

という事は自力で何らかの法則を見つけ出す必要があるのですが、郵便番号データの落とし穴 | YU-TANG’s MS-Access Discoveryのサイトに詳しい情報が書かれています。

フラグ4(一つの郵便番号で二以上の町域を表す場合の表示)が 0(つまり一つの郵便番号で一つの町域を表す)で、尚かつ同一郵便番号のレコードが 2 レコード以上の場合、マージする必要がある

※ちなみにこちらのサイトは以前から何度か参考にさせてもらっています。

また以下の様な意見も同サイトに寄せられています。

「引用」2009/7の時点では、フラグ4を参照するのではなく開き括弧と閉じ括弧の対応をとっていけば確実にマージが可能です。

※2005/11/24の記事より
後者の内容について具体例を挙げると以下の様な感じです。
同一郵便番号で複数存在するレコードには、「町域名」が「」で始まるレコードと、「」で終わるレコードと、「(」と「)」のどちらもないレコードがあります。
」で始まるレコードを連続するデータの始まりとして、「」で終わるレコードを連続するデータの終わりとして、「(」と「)」のどちらもないレコードを挟めば、1件のデータとして繋げる事が出来るという事です。
(下記のケースを参照)

01224,”066 “,”0660005″,”ホッカイドウ”,”チトセシ”,”キョウワ(88-2、271-10、343-2、404-1、427-“,”北海道”,”千歳市”,”協和88-2、271-10、343-2、404-1、427-”,1,0,0,0,0,0
01224,”066 “,”0660005″,”ホッカイドウ”,”チトセシ”,”3、431-12、443-6、608-2、641-8、814、842-“,”北海道”,”千歳市”,”3、431-12、443-6、608-2、641-8、814、842-”,1,0,0,0,0,0
01224,”066 “,”0660005″,”ホッカイドウ”,”チトセシ”,”5、1137-3、1392、1657、1752バンチ)”,”北海道”,”千歳市”,”5、1137-3、1392、1657、1752番地“,1,0,0,0,0,0

両者2点について、簡単ですが自分なりに考察してみました。
先ず前者の方法ですが、2010/2/26現在の郵便番号データでは例外が2ケースほどあります。
※以下のデータです。

27142,”59001″,”5900111″,”オオサカフ”,”サカイシナカク”,”ミハラダイ(2チョウ11-7・9-17・21、3チョウ59-2-18・21-25、”,”大阪府”,”堺市中区”,”三原台(2丁11-7・9~17・21、3丁59-2~18・21~25、”,0,0,1,1,0,0
27142,”59001″,”5900111″,”オオサカフ”,”サカイシナカク”,”4チョウ60-1・107-3-12・16-21)”,”大阪府”,”堺市中区”,”4丁60-1・107-3~12・16~21)”,0,0,1,1,0,0

44203,”871 “,”8710046″,”オオイタケン”,”ナカツシ”,”カナヤ(ウエノチョウ、ナカノチョウ、ニシノチョウ、ホンマチ、ミナミノチョウ、”,”大分県”,”中津市”,”金谷(上ノ丁、中ノ丁、西ノ丁、本町、南ノ丁、”,0,0,0,1,0,0
44203,”871 “,”8710046″,”オオイタケン”,”ナカツシ”,”モリノチョウ、ヤマノカミ)”,”大分県”,”中津市”,”森ノ丁、山ノ神)”,0,0,0,1,0,0

上記2つのデータは、フラグ4(赤字部分)が1であるにも関わらず、複数のデータに分割されています。

また、後者については2009年7月現在は例外は無いようです。

上記の内容からすると、前者においては、この様な例外が発生している事から、フラグ4についての信頼性は現時点では低いと言えます。
※記事が書かれた2005/11/24時点では例外が無かったのかも知れませんが、その後例外が発生した可能性があります。
 当時のデータが無いので断定はできませんが・・・

とすると、現時点では後者の方が信頼性が高いと言えます。
ただ、これを示す明確な根拠が日本郵便より出ていないので、いつの日か例外が発生するかもしれません。

結果として郵便番号データをマージする際には、上記の様なクセに気につける必要があるという事です。
現実的には後者の方法がベストと言えますが、人の目で日々例外が発生しないかチェックする必要もありそうな感じでした。

上記のケースを考慮した結果は、郵便番号検索 -zipnavi-にて実際に確認できます。

zipnavi 地図から郵便番号検索をリリースしました

郵便番号検索 -zipnavi-にて、地図から郵便番号検索機能をリリースしました。
この機能は近所や公共施設など、地図上の場所は分かるけど、住所と郵便番号が分からない、といった場合などに使ってもらえる想定で作りました。
これで「住所」、「都道府県、市区町村、町域」、「地図」の3つの視点から郵便番号の検索する事が可能になりました。

新たにリリースした地図から郵便検索の画面イメージは以下の様な感じです。
地図検索ページ

初期状態は日本全体なので、駅名など検索したいエリア付近の情報を入力して地図を絞り込みます。そして地図上をクリックすると、吹き出しが表示されて、そこに住所と「郵便番号検索」ボタンが表示されます。
地図上の地点をクリック時

「郵便番号検索」ボタンをクリックすると、zipnaviの検索エンジンにより郵便番号検索が行なわれ、結果が噴出し内に表示されます。
郵便番号検索

郵便番号検索 -zipnavi- 地図から検索にて実際に動作を確認できます。

ちなみに仕組みを簡単に説明すると以下の通りです。

1.GoogleMAPS APIを使用して、地図上から緯度経度を取得する。
2.GoogleMAPS APIの逆ジオコーディングを使用して、緯度経度から住所を取得する。
3.zipnaviの検索エンジンを使用して、住所から郵便番号を検索する。

上記を実現する為の方法として、1、2は、メンバーの「もじゃもじゃ」さんが既に開拓済みだった為、そちらの記事を参考にさせてもらい、それに若干のアレンジを加えました。
flashcast:フリーで働くITエンジニア集団のブログ: iPhone OS 3.0のSafariでGPS機能を使ったWeb Applicationを作る!(iPhoneでテスト編)

あと、GoogleMAP上にAdsenseの広告も表示させましたが、これもflashcast:フリーで働くITエンジニア集団のブログ: Strayed Childの地図に広告を載せてみた!の記事を参考にさせてもらいました。

ただ、開発中のテストで気付いたのですが、上記2の方法で取得できる住所情報にはちょっとクセがあります。
A.地図上の道路を指定すると、「日本国道1号線」。海上を指定すると、「日本」といった情報が表示される。
国道海上
B.地図上の陸地を指定しているのに、住所ではなく、郵便番号が表示される。
郵便番号

Aの様な場合、googleのAPIでは正確な住所が表示されないようです。

Bはちょっとナゾです。
コレは何?
ネットで調べてもよく分かりません。
ただ表示された郵便番号をよ~く見ると・・・
これはたぶん事業所の郵便番号の様に思われます。

上記の様なケースを考慮し、Aの場合は噴出しに警告メッセージを表示しました。
またBの場合は、新たに郵便番号検索するまでもないので、GoogleMAPS APIで取得できた郵便番号をそのまま表示させました。

GoogleMAPS APIの仕様では上記の様な記述はありませんでしたが、色々とテストをしていく中で、上記の様な判断条件でほぼ処理出来る事が分かりました。
ただ、一部の地域で上記A、Bいも該当しない例外がありますが、その際はzipnaviの検索エンジンがエラーと判断するので、間違った郵便番号が検索される事はありません。
具体的には以下の様な地域です。
茨城県かすみがうら市
※「茨城県かすみがうら市」だけでは、郵便番号を特定できません。この様な場合も、googleのAPIでは正確な住所が表示されないようです。

3については取得した住所をAjaxを使用して、zipnaviの検索エンジンに渡し、その検索結果(郵便番号)を地図上に表示しています。
なお、今回の機能追加に合わせて、サイトのデザインもリニューアルしました。
新しくなったzipnaviを今後ともよろしくお願いします!

郵便番号検索サービス(zipnavi)が完成しました!

郵便番号検索サービス構想から早10ヶ月、試行錯誤の末ようやくホームページの公開が出来ました。
URLは http://www.zipnavi.jp/です。
このホームページは一言で言うと、住所から郵便番号を検索する為のサイトです。

「ZIP」とは「ZIP CODE」(英語(米国)で「郵便番号」を意味します)を略したもので、「NAVI」はナビゲーション(Navigation)という意味です。
郵便番号をナビゲートするという意味と、「名前が簡単で覚えやすそうだ」という理由からこのサイト名(ドメイン名)にしました。
※もちろん新品ドメインです!

とりあえずzipnaviの特徴を簡単に紹介します。
1.住所から郵便番号を検索できる。
2.全国の住所(郵便番号)を階層的に検索できる。
3.各ページに階層化した住所が「パンくず」として表示される。
4.検索された郵便番号付近の地図を表示できる。
詳細は郵便番号検索 -zipnavi-で確認出来ます。

最近は電子メールでの連絡が日常化していますが、年賀状や暑中見舞い、引越の挨拶などは、手紙で行なう方が礼儀が良いと言われています。
また仕事で取引先などに書類を郵送する際にも、郵便番号が必要になってきます。
※住所だけでも郵便物が届く場合もありますが、配達が遅延したり、相手に対して失礼に思われてしまう場合もあります。
「住所は分かるけど郵便番号が分からない」そんな時に、簡単に郵便番号を調べる事が出来るのがこのサイトの最大の特徴です。

とりあえずオープンしたばかりなので、まだ使いづらい点があるかも知れませんが、
頑張って作りましたので、皆様の利用をお待ちしています。

また、郵便番号検索サービスはこれで終わりではありません。
今後更に機能を充実させて、より使いやすく、利便性に富んだサイトを構築していくつもりです。

とりあえず、ご挨拶まで・・・

GoogleAPI~郵便番号から地図を表示してみる~

せっかく郵便番号検索が出来たので、郵便番号に該当する付近の地図をGoogleMAPS APIを使用して表示したいと思います。
以前紹介したmy-hobby : 知ってると便利googleマップの使い方で表示させる方法もありますが、この方法だと地図の表示のさせ方(特に噴出し部分)のカスタマイズが、現状調べた限りでは出来ない事が分かりました。

そこでよりカスタマイズが可能なJavaScriptを使用して、地図を表示させたいと思います。
先ずは簡単な地図を表示させる為のサンプルソースを以下のサイトより取得しました。
地図の基本 – Google Maps API – Google Code
【Google マップの「Hello, World」】タブにあるリンク先のページGoogle マップ JavaScript API 使用例: 簡単な地図より取得したのが以下のソースです。

[javascript]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<title>Google マップ JavaScript API 使用例: 簡単な地図</title>
<script src="http://maps.google.co.jp/maps?hl=ja&amp;amp;file=api&amp;amp;v=2&amp;amp;key=(各自取得したAPIキーを設定)"
type="text/javascript"></script>
<script type="text/javascript">

function initialize() {
if (GBrowserIsCompatible()) {
var map = new GMap2(document.getElementById("map_canvas"));
map.setCenter(new GLatLng(35.664694, 139.700016), 13);
}
}

</script>
</head>

<body onload="initialize()" onunload="GUnload()">
<div id="map_canvas" style="width: 500px; height: 300px"></div>
</body>
</html>
[/javascript]

このソースから読み取れるのが、以下の記述の「GLatLng(35.664694, 139.700016)」で緯度と経度を設定して、その位置の地図を表示しているという事です。
map.setCenter(new GLatLng(35.664694, 139.700016), 13);
※APIの詳細な仕様については、Google Maps API リファレンス – Google Maps API – Google CodeGMap2で確認できます。

ただ、今回は郵便番号から地図を表示させたいので、上記のソースのままでは使用できません。
APIの仕様を色々探していたら、住所から緯度経度を検索し、そこから地図を表示させるAPI(クラス)GClientGeocoderを発見しました。

早速このクラスを元に、サンプルソースを作成してみました。

[javascript]<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /><meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Expires" content="-1" />
<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key=(各自取得したAPIキーを設定); type="text/javascript" charset="utf-8"></script>
<script type="text/javascript" >
//<![CDATA[
var map;
var geocoder;
function load() {
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.addControl(new GMapTypeControl());
map.addControl(new GLargeMapControl());
geocoder = new GClientGeocoder();
geocoder.getLatLng(document.mapform.address.value, showMap);
}
}

function showMap(latlng){
if (latlng){
//緯度経度が検索された場合
map.setCenter(latlng, 15);
var marker = new GMarker(latlng);
map.addOverlay(marker);
marker.openInfoWindowHtml(document.mapform.address.value);
}else{
//緯度経度が検索できなかった場合、全国の地図を表示する。
map.setCenter(new GLatLng(37.055177, 139.174805), 5);
}
}
//]]>
</script>
</head>

<body onload="load()" onunload="GUnload()">
<form name="mapform" id="mapform">
<div id="map" style="width: 700px; height: 500px"></div>
<input type="hidden" id="address" name="address" value="東京都港区芝公園4丁目2-8">
</form>
</body>
</html>[/javascript]

上記スクリプトをブラウザで表示させると以下の様な感じになります。

※東京タワーの住所を設定しています。
サンプルソースを作成するに当たり、以下のサイトを参考にしました。
住所から緯度と経度を取得(GClientGeocoderクラス, getLatLngメソッド) – ジオコーディング – Google Maps入門

結局、住所から地図を表示する方法は見つかりましたが、郵便番号から緯度経度を検索するAPI(クラス)は見つかりませんでした。
そこでダメもとで住所の代わりに郵便番号(〒105-0011)を引数にして設定してみると、
なんと郵便番号でも地図が正しく表示されました。


※東京タワーの郵便番号を設定していますが、若干位置がずれています。
これは、〒105-0011は「東京都港区芝公園」全体を指している為、東京タワーの位置にピンポイントでマーカーが当たらなかった為と思われます。
住所は位置を特定できますが、郵便番号は範囲の為、この程度の誤差は仕方が無いでしょう。

実はこのクラスって、住所以外の情報でも緯度経度を検索できるのでは?と思い、試しに「東京タワー」という文字をセットしてみたところ、、、
地図が正しく表示されました。

API仕様では住所と明言されていますが、実際に試した結果キーワード検索と同じ様な機能になっているようです。
もしこれが公式な情報になれば、地図表示の自由度(汎用性)がより高くなりますね。

ちなみに、APIの仕様がバージョンアップされているようです。
http://code.google.com/intl/ja/apis/maps/documentation/v3/
今回は旧バージョンで記事を書きましたが、新バージョンで今回の記事に関する変更があれば、また紹介したいと思います。