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

page_footer_responsive




-Server
-

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Google

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

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

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

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

laravel logo

Laravel Cashierでサブスクリプションを実装する

1 はじめに2 Stripeの準備3 Laravel Cachierの初期設定3.1 インストール3.2 APIキーの設定3.3 Userモデルへの実装4 支払い方法の登録4.1 支払い方法の登録5 ...

aws

Amazon ECSでGoのEchoサーバを立ち上げる

1 はじめに2 全体の流れ3 サービスの概要3.1 IAM(Identity and Access Management)3.2 VPC(Virtual Private Cloud)3.3 ECR(E ...

aws

AWS LambdaとAPI GatewayでサーバレスなAPIを実装

1 はじめに2 AWS Lambdaとは2.1 利用できる言語2.2 Lambdaの制約3 LambdaでAPIをリリースするためにやること4 Lambda関数の作成4.1 関数の作成4.2 ランタイ ...

フォロー

blog-page_side_responsive

2019年11月
 12
3456789
10111213141516
17181920212223
24252627282930

アプリ情報

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