オープンデータな住所データを使用して文字列と緯度経度で住所検索できるNode.jsのモジュールを作りました。
japan-address-search
https://github.com/uedayou/japan-address-search
従来、住所検索を行う場合、GoogleやYahooなど外部のWebサービス・Web APIと連携して検索するものが多いと思います。少数のデータを検索する場合は特に問題ないですが、大量のデータを検索したい場合には外部サービスの制限やレスポンスの問題など利用するには不向きです。
このモジュールは、モジュール内のデータについて検索するので、大量のデータでも外部サービスに影響なくローカルで検索することができます。
このモジュールは、経済産業省のIMIコンポーネントツールを元に作成していますので、住所表記の正規化も行えます。
npmリポジトリにも公開しているので、npmコマンドで手軽にインストールできます。
https://www.npmjs.com/package/japan-address-search
インストール方法
コマンドラインで使う場合は npm でグローバルにインストールしてください。
$ npm install -g japan-address-search
Node.js のコード内で利用したい場合はローカルにインストールします。
$ npm install japan-address-search
使い方
コマンドラインで、文字列検索したい場合は以下のように実行します。
$ japan-address-search -s 神保町
緯度経度による逆ジオコーディング検索は以下のようになります。
$ japan-address-search --lat 35.675551 --lng 139.750413
どちらもデフォルトで最大10件表示されます。任意の件数を得たい場合はパラメータに--limit 5
のように追加してください。
コード内での利用は
https://github.com/uedayou/japan-address-search#readme
を参照してください。
出力結果
検索結果は、JSONで以下のように出力されます。
町・丁目レベルには代表点として緯度経度が得られます。
{
"@context": "https://imi.go.jp/ns/core/context.jsonld",
"場所": [
{
"@type": "場所型",
"住所": [
{
"@type": "住所型",
"表記": "神保町",
"都道府県": "千葉県",
"都道府県コード": "http://data.e-stat.go.jp/lod/sac/C12000",
"市区町村": "船橋市",
"市区町村コード": "http://data.e-stat.go.jp/lod/sac/C12204",
"町名": "神保町",
"種別": "位置参照情報"
}
],
"地理座標": {
"@type": "座標型",
"緯度": "35.762159",
"経度": "140.051552"
}
},
{
"@type": "場所型",
"住所": [
{
"@type": "住所型",
"表記": "神保町",
"都道府県": "新潟県",
"都道府県コード": "http://data.e-stat.go.jp/lod/sac/C15000",
"市区町村": "見附市",
"市区町村コード": "http://data.e-stat.go.jp/lod/sac/C15211",
"町名": "神保町",
"種別": "位置参照情報"
}
],
"地理座標": {
"@type": "座標型",
"緯度": "37.500056",
"経度": "138.970828"
}
},
{
"@type": "場所型",
"住所": [
{
"@type": "住所型",
"表記": "神保町",
"都道府県": "千葉県",
"都道府県コード": "http://data.e-stat.go.jp/lod/sac/C12000",
"市区町村": "船橋市",
"市区町村コード": "http://data.e-stat.go.jp/lod/sac/C12204",
"町名": "大神保町",
"種別": "位置参照情報"
}
],
"地理座標": {
"@type": "座標型",
"緯度": "35.773812",
"経度": "140.061923"
}
},
{
"@type": "場所型",
"住所": [
{
"@type": "住所型",
"表記": "神保町",
"都道府県": "東京都",
"都道府県コード": "http://data.e-stat.go.jp/lod/sac/C13000",
"市区町村": "千代田区",
"市区町村コード": "http://data.e-stat.go.jp/lod/sac/C13101",
"町名": "神田神保町",
"種別": "位置参照情報"
}
]
}
]
}
その他の機能
japan-address-search
モジュールには、現在の住所以外に明治時代以前の地名についても、文字列と緯度経度で検索することができます。コマンドラインでは、--old
をつけると検索対象が明治時代以前の地名になります。
$ japan-address-search -s 神保町 --old
$ japan-address-search --lat 35.675551 --lng 139.750413 --old
japan-address-search について
japan-address-search
はIMIコンポーネントツールを改修して作成したものです。改修の経緯は以下のQiitaの記事にまとめています。
- IMI住所変換コンポーネントでいろんな住所を正規化してみた
- IMI住所変換コンポーネントを改造してリバースジオコーディングに対応してみた
- IMI住所変換コンポーネントを魔改造して昔の地名を検索できるようにしてみた
また、オープンデータとして
を利用しています。
各ツール・データを公開していただいている皆様には深く感謝いたします。