Server

RubyでOSM Nominatimを使ってみた

投稿日:

はじめに

こんにちは。カイザーです。今回はRubyから、Open Street MapのNominatimを使ってみましたので、紹介します。

Nominatimは、Open Street Mapのデータを、建物名や住所から検索したり、リバースジオコーディングしたりして、利用するAPIです。
これを、Rubyから簡単に利用できるGemを紹介します。

導入

以下をGemfileに追記します。

もしくは、直接インストールします。

 

検索

建物や地名のジオ情報を、キーワードや住所によって検索します。検索結果については、こちらのデモページで実際に確認することができます。

建物名による検索の実装例

OpenStreetMap::Clientsearch メソッドを使用することで、検索APIを呼び出せます。
q に建物名や、住所を渡すことで、検索することができます。

以下のようなハッシュが result に入ります。

Hashで返って来るため、以下のように内容を取り出すことができます。

住所による検索の実装例

住所による検索も可能ですが、番地レベルまで指定すると、検索結果は0件になりました。
うまくできた例を紹介します。

Request:

Response:

海外の住所では、詳細な住所でもうまくいくケースが多いようです。

リバースジオコーディング

緯度経度情報から、ジオ情報を取得するAPIです。リバース結果については、こちらのデモページで実際に確認することができます。

実装例

Request:

zoom は、ジオ情報の詳細レベルを指定します。0が国レベルで、18が建物レベルです。
必ず、緯度経度近くの建物名が欲しい時は、 18 を設定しておきます。逆に、大まかな地域だけで良い場合は、 10 (City)を設定しておくと良いでしょう。
詳細レベルについては、先ほどのデモページで試しながら、決めるのがオススメです。

Response:

このように、近くに建物があれば、建物名までレスポンスされます。精度が高く、驚きました。
近くに建物がない場合は、市町村区レベルまではレスポンスされます。

住所の整形

海外向けの場合、レスポンスの display_name をそのまま表示すれば良いですが、日本向けの場合は住所表記を逆転する必要があります。
また、”日本”や”○○地方”も表記不要のため、こちらも除去していきます。

Open Street Map Nominatimの制約事項

デフォルトでは、 https://nominatim.openstreetmap.org/ にリクエストするようになっていますが、この場合はNomatim Usage Policyが適用されます。
https://operations.osmfoundation.org/policies/nominatim/

制約は、個人的・小規模なサービスであればクリアできそうですが、大規模なサービスの場合は、同APIを提供するMapQuestのサブスクリプション等を利用するか、自前でNomatimサーバを構築する必要があります。

具体的には、以下のような制約があります。

  • 1IPからの1秒間に1回のリクエストまで
  • 1IPからの並列リクエスト、分散インスタンスからのリクエストの禁止
  • 同じリクエストを何度も送信することは禁止。(キャッシュさせる必要がある)
  • オートコンプリートの実装禁止
  • データを全部取得するような、体系的なクエリの禁止
  • 詳細ページのスクレイピング禁止
  • ODbLライセンスを守ること

さいごに

このGemは、Nominatimを簡単に使用できるため、ぜひ試してみてください。

おすすめ書籍

パーフェクトRuby on Rails メタプログラミングRuby 第2版 Effective Ruby

blog-page_footer_336




blog-page_footer_336




-Server
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

DockerのQuickstart:Compose and Railsをやってみた

1 はじめに1.1 環境1.2 Docker for Macのインストール2 Railsプロジェクトを作成するまで2.1 Railsのプロジェクトディレクトリの作成2.2 Dockerfileの作成2 ...

MyCoachのDocker環境を変えてみた

1 はじめに2 なんで改修しようと思ったか3 構成3.1 使用するコンテナ3.2 各Dockerfile3.3 docker-compose.yml3.4 Unicorn3.5 database.rb ...

InnoDBでauto_incrementの値が戻る?

はじめに 花粉症が辛い季節になりました。 花粉症も困りますが、本日はMySQL関連で困って調べたことをまとめたいと思います。 タイトルですが、InnoDBだとDBを再起動した際にauto_increm ...

aws

Amazon EC2を使ってみる

1 はじめに2 事前準備2.1 ルートアカウントのMFAを有効化2.2 個々のIAMユーザの作成(及びグループの作成)2.3 IAMユーザのMFAを有効化2.4 IAMパスワードポリシーの適用3 EC ...

icon

ブログ運営で最も気をつけること(障害報告)

1 お詫び2 障害報告書2.1 障害内容2.2 障害期間2.3 障害の原因2.4 障害の長期化の原因2.5 詳細3 対応3.1 決済に使用するクレジットカードを変更する3.2 一つ前のOSバージョンで ...

フォロー

blog-page_side_responsive

2019年11月
 12
3456789
10111213141516
17181920212223
24252627282930

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。