ジオコーディング)というらしい。APIなんかの外部のサービスを利用すればよいのだけど、そういうのが使えない状況ってのがたまにある。するかというのが今回の問題。結果としては、国土交通省が位置参照情報ダウンロードサービスで提供している街区レベル位置参照情報を使って自前で準備する。いろいろな制約もある。制約なく使えそうなものとしてOpenStreetMapのNominatimというジオコーディングのWebAPIもあるが、あれはちょっと違う。近くの通りの名前をベースに引いてくるらしいので、日本的な住所を調べるには少し方向が違う。やってみるまずは、なにはなくとも街区レベル位置参照情報を位置参照情報ダウンロードサービスからダウンロードする。都道府県単位を選択し、ダウンロードしたいところを選択、そのうち「街区」レベルにチェックを入れてダウンロード。福岡県の場合、だいたい3.5MB程度のzipファイルがダウンロードされるはず。重要なのは中にあるcsvファイル。展開するとだいたい24MBくらい。中身は後述の様なフィールドに分かれている。重要なのは住所に関する項目と緯度経度。それ以外のフィールドは必要に応じて利用する。これらのフィールドをDBなどに格納して検索すれば良い。近い住所を取得したいので、SQL的には例えば以下の様なものになる。1;逆に、住所から位置情報を取得したい(ジオコーディング)場合は逆に引けばいい。街区レベル位置参照情報の住所の正規化みたいな話はしておかないと中々満足な結果は出ないかも。言っても今回は特に必要ないのであまり考えない。簡単に作って試してみたところ、おおむね位置情報から住所を取得できるようになった。正確な住所のエリアを持っているわけではないため、それぞれに単純に一番近い住所を引っ張ってきている。変則的な形をしている町丁目だったり、複数の間に位置するような地点だと若干のズレが確認できる。このズレが許容できるかどうかは個別に判断するべきこと。言っても元ネタになるデータの問題でもあるので、より細かい情報があれば改善できるだろう。どっかにあれば良いのだけど。データの更新についても自前で準備するものである以上自分でやる必要がある。変わるものではないと思うが、ある程度考えておかないと「は?」って結果が出てきそうな感じ。日本全国でやろうとすると検索速度なんかも問題になってくるがその辺はDBの問題なので今は考えない。急ぐならPostgreSQL+PostGISとか使うと良いんじゃないかな。海外についても今は考えない。ちなみになにも考えずに以下の様なテーブルを作ってSqlite3にぶち込んだら25MB程度になった。もとのCSVがそのくらいの容量なのでそんなもんかな。都道府県名や住所の正規化をせずにそのまま文字列で放り込んでいるので、そんなもんと言われればそんなもんなのかもしれない。1つの街区符号が複数の代表点に対応付けられる場合などに、そのうちの1つに便宜的に代表フラグを立てています。2007年度および2008年度データに含まれるフラグを立てています。2009年度以降のデータに含まれるフラグを立てています。paperboy&c...2011-09-20画像からIPTC情報を取得するGoogleのPicasaなどで入力したコメントやタグをPHPで取得する。自動運転の自動車について思うこと。(2)はてなブログをはじめよう!atyksさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。