LoginSignup
5
5

More than 3 years have passed since last update.

オープンデータを使って住所検索ライブラリを作りました

Posted at

オープンデータな住所データを使用して文字列と緯度経度で住所検索できるNode.jsのモジュールを作りました。

japan-address-search
https://github.com/uedayou/japan-address-search

従来、住所検索を行う場合、GoogleやYahooなど外部のWebサービス・Web APIと連携して検索するものが多いと思います。少数のデータを検索する場合は特に問題ないですが、大量のデータを検索したい場合には外部サービスの制限やレスポンスの問題など利用するには不向きです。

このモジュールは、モジュール内のデータについて検索するので、大量のデータでも外部サービスに影響なくローカルで検索することができます。

このモジュールは、経済産業省のIMIコンポーネントツールを元に作成していますので、住所表記の正規化も行えます。

npmリポジトリにも公開しているので、npmコマンドで手軽にインストールできます。

インストール方法

コマンドラインで使う場合は 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-searchIMIコンポーネントツールを改修して作成したものです。改修の経緯は以下のQiitaの記事にまとめています。

  1. IMI住所変換コンポーネントでいろんな住所を正規化してみた
  2. IMI住所変換コンポーネントを改造してリバースジオコーディングに対応してみた
  3. IMI住所変換コンポーネントを魔改造して昔の地名を検索できるようにしてみた

また、オープンデータとして

を利用しています。
各ツール・データを公開していただいている皆様には深く感謝いたします。

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5