Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

@honjo

Carmenでジオコーダーを作る

この記事は FOSS4G Advent Calendar 2019 の25日目の記事です

はじめに

Carmen国土数値情報の行政区域データを使ってジオコーダーを作りました。

Carmenとは

ベクタータイル(MVT)ベースのジオコーダーです。MapboxのGeocoding APIはこれを使って実装されています。

サンプル

Forward Geocoding

22時〜9時の間は停止します、また、時期をみて予告なく閉じます、ご了承ください

パラメータ

  • access_token
    • 認証用。ここでは無視して構いません
  • q
    • Forwad Geocodingしたい地名

出力結果(GeoJSON)

{
  "type": "FeatureCollection",
  "query": [
    "大",
    "磯",
    "町"
  ],
  "features": [
    {
      "id": "data.771",
      "type": "Feature",
      "place_type": [
        "data"
      ],
      "relevance": 1,
      "properties": {
        "code": "14341"
      },
      "text": "神奈川県中郡大磯町",
      "place_name": "神奈川県中郡大磯町",
      "matching_text": "大磯町",
      "matching_place_name": "大磯町",
      "bbox": [
        139.25085050564633,
        35.29728800863472,
        139.33406953288272,
        35.33443858597201
      ],
      "center": [
        139.29246001926452,
        35.315863297303366
      ],
      "geometry": {
        "type": "Point",
        "coordinates": [
          139.29246001926452,
          35.315863297303366
        ]
      }
    }
  ]
}

Reverse Geocoding

22時〜9時の間は停止します、また、時期をみて予告なく閉じます、ご了承ください

パラメータ

  • access_token
    • 認証用。ここでは無視して構いません
  • q
    • Reverse Geocodingしたい経度,緯度

出力結果(GeoJSON)

{
  "type": "FeatureCollection",
  "query": [
    141.353611,
    43.0625
  ],
  "features": [
    {
      "id": "data.143",
      "type": "Feature",
      "place_type": [
        "data"
      ],
      "relevance": 1,
      "properties": {
        "code": "01101"
      },
      "text": "北海道石狩振興局札幌市中央区",
      "place_name": "北海道石狩振興局札幌市中央区",
      "bbox": [
        141.20187360558248,
        42.997474721281435,
        141.3896355507402,
        43.0861158375759
      ],
      "center": [
        141.29575457816134,
        43.04179527942867
      ],
      "geometry": {
        "type": "Point",
        "coordinates": [
          141.29575457816134,
          43.04179527942867
        ]
      }
    }
  ]
}

当該都道府県が「北海道」の場合、該当する支庁・振興局の名称が入ります

carmen.png

手順

  1. 国土数値情報の行政区域データ(GeoJSON)を最適化
  2. tippecanoeでベクタータイル化
  3. carmen-index.jsでインデックス化
  4. これでジオコーダに必要なデータが作成される
    1. ***.fuzzy
    2. ***.grid.rocksdb
    3. ***.mbtiles
  5. 後はCarmenにクエリーを投げるだけ

手順4までが事前に準備しておくものですが、今回の場合、数分で完了しました。
また、ベクタータイル, インデックス共にz12までとしています。

補足

Carmenでgeocodingした結果をそのまま出力する仕様です。詳細はここを参照してください(ソースコードへのリンク切れてますが...)。

余談

Rustで作り直すプロジェクトが進んでいるようです。Mapboxのリポジトリを見渡してみるとRustを使ったものがちょっとずつ増えてきている気がします。GolangではないのはGoogle製だからでしょうか。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
1
Help us understand the problem. What are the problem?