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


関連記事

aws

Amazon Linux 2でLet’s Encryptが使えない

1 はじめに2 Amazon Linux 22.1 Amazon Linux Extras Library3 Let’s Encrypt4 本題5 さいごに はじめに 知人からタイトルのよ ...

mkcertで簡単にオレオレ証明書を発行する

1 はじめに2 前提3 mkcert3.1 概要3.2 インストール3.3 証明書作成3.4 証明書設置と設定3.5 接続確認4 さいごに5 おすすめ書籍 はじめに ローカルのwebサーバにhttps ...

CircleCIを使ってみた(RailsのRSpecとデプロイのサンプル)

1 はじめに2 導入するにあたって3 項目B4 補足4.1 開発環境とCI環境でdatabase.ymlが異なる5 さいごに はじめに 個人的に作成しているアプリケーションのCIツールとして、Circ ...

https-portalで既存のdocker環境をhttps化

1 はじめに2 https-portalとは3 設定ファイル3.1 docker-compose.yml3.2 default.conf4 説明4.1 docker-compose.yml4.2 de ...

WordPressとRailsアプリケーションを相乗りさせた時の話

1 はじめに1.1 前提条件2 サブドメインを設定する3 Nginxの設定3.1 ステージング環境用の設定3.2 ステージング環境の設定を読み込ませる3.3 Nginxの再起動4 SSL化する4.1 ...

フォロー

follow us in feedly

blog-page_side_responsive

2019年11月
 12
3456789
10111213141516
17181920212223
24252627282930

アプリ情報

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