うちの車に積んであるカーナビは、WindowsCEにSDを挿して動く安価なポータブルナビ(これではないが、こんな感じの。というかこのユピテルYPL433siはゼノサーガのKOSMOSの声でナビってくれるらしい。すげえ欲しい。)で、地図もなにも全データひっくるめて2Gしか持っていない。でも、走っている現在位置の大まかな地名(××県○○市、くらい)は表示してくれる。無論、単なる安ナビなので、ネットワークには繋がっていない。スタンドアローンである。この表示は、勿論、緯度経度の情報から現在の住所を探索しているわけだ。
緯度経度からその住所を引く、これを逆ジオコーディング(Reverse Geocoding)と呼ぶらしい。緯度経度を住所に変換したいだけであれば、そんなに難しいことはなく、巷にあるいわゆる地図サービスを使えばいいわけである。例えば、Yahoo!地図やマピオンで緯度経度で地図を表示させれば、HTMLのどこかに「××県○○市△△町周辺」等という文字列が出てくるし、あるいはもっとちゃんとするならGoogle Mapの逆ジオコーディングAPIもある。それで、車載したGPSから取った緯度経度を、サーバに投げて地図サービスを引いて住所に、等ということをしていたのである。
が、不満がなくはないのである。
外部のサービスはネットワークが繋がってないと使えないので、通信できないところでは使用できない。電波の届かないところを走るときだってあるので、若干不便である。ではローカルデバイスの中だけでなんとかしようと思うと、この変換データというのが大きくて、軽々に導入できそうにない。国交省の位置参照情報データは、CSVで1Gもある。保持しておくのも大変だし、探索も大変である。
そんなわけで、外部のサーバを使わない、組み込み可能な逆ジオコーディング機能を作ったらどんな塩梅になるかと思って作ってみたのである。
これである。緯度経度住所コンバータ
軽量にしようといろいろ試行錯誤した結果、街区符号以下は諦めることとして、丁目番地・大字レベルまでのデータで、圧縮かけて大体25Mくらいのデータサイズになった。というか、かなり頑張ったんだけど、これ以上データサイズを減らす方法を思いつかなかった。内訳は、参照ポイントデータに21M、都道府県市区町村名に0.2M、丁目番地に3.8Mである。参照ポイント数は、元の約1200万から1/4くらいに減らしている。まあ、レンタルサーバの容量が100Mなので、25Mはまあまあ安心できるサイズではあろうか。探索時間は入力と状態によるだろうが、最大10秒くらい。これも、短縮しようとすると参照ポイントデータに細工が必要で容量が増えたりするので悩ましいところ。実用性とのバランスが難しい。
例えば、北緯35.42.29.83東経140.52.10.36は、「千葉県銚子市犬吠埼」。探索3秒。うーむ、あとどこに改良の余地があるだろう。。。
▼レンタルサーバー・VPS比較表を見る▼