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

MyCoachの本番環境をAWS上に構築する 〜EC2編〜

1 はじめに1.1 関連記事2 MyCoachで利用しているインスタンス3 設定する項目4 キーペアの作成5 セキュリティグループの作成6 インスタンスの作成6.1 Webサーバのインスタンスを作成6 ...

Conohaのサーバーを借りて、CentOS+MySQL+nginxの環境を作ってみた。

1 はじめに1.1 環境2 Conohaでサーバーをレンタル3 サーバーの初期設定3.1 サーバーにrootユーザーでログイン3.2 ユーザー作成3.3 SSHログインを許可3.4 秘密鍵を生成3.5 ...

aws

MyCoachの本番環境をAWS上に構築する 〜ネットワーク編〜

1 はじめに1.1 関連記事2 MyCoachのネットワーク構成3 VPCとは3.1 設定する項目4 VPCの設定5 インターネットゲートウェイの設定6 サブネットの設定6.1 公開ネットワークの設定 ...

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

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

Google

【Google Invisible reCAPTCHA】Railsサイトにキャプチャ導入

1 はじめに2 reCAPTCHAとは3 Site keyとSecret keyの取得4 Rails gemの導入5 サイトへの組み込み6 さいごに はじめに こんにちは、最近休みなく仕事をいただいて ...

フォロー

blog-page_side_responsive

2019年11月
 12
3456789
10111213141516
17181920212223
24252627282930

アプリ情報

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