目次


Geospatial Analytics サービスを利用してモバイル端末をモニターする

IBM Cloud 上で Geospatial Analytics と Node.js を使用して、リアルタイムの位置情報モニタリング・アプリケーションを作成する

Comments

モノのインターネットにはすでに何十億台もの端末が接続されており、今後数年間は飛躍的な成長率になることが予測されています。これらの端末の多くは、(スマートフォンやネットワーク接続された車両など) モバイル性があることから、移動中の端末の位置情報を利用した、新しい画期的なアプリケーションを作成できる可能性が広がります。そのような新しいアプリケーションをサポートするには、大量のデータをリアルタイムで分析できる、極めてスケーラブルなサービスが必要です。

IBM Cloud で提供されている Geospatial Analytics サービスを利用すると、モノのインターネットに接続された移動中の端末をモニターすることができます。Geospatial Analytics サービスは、1 つ以上の地域に関して端末の位置情報をリアルタイムで追跡するもので、いくつかの使用ケースをサポートするアプリケーションのビルディング・ブロックとして使用することができます。例えば、小売業の場合は、店舗の近くにいる潜在顧客をモニターし、そのような人々にプッシュ通知やツイートで販促情報を送信するなどといったことが考えられます。また、ネットワーク接続された車両の運転手が事故や、気象条件、あるいは一時的な行事のために通行を回避した方がよい地域に差し掛かっていることを、Geospatial Analytics サービスを利用して検知することもできます。

このチュートリアルでは、Node.js で (SDK for Node.js を利用して) 作成された、Geospatial Analytics サービスを利用するスターター・アプリケーションを取得、実行、拡張する方法を紹介します。geo-starter というこのサンプル・アプリケーションでは、以下のものを使用しています。

  • デモ MQTT ブローカー。ネバダ州ラスベガス近郊の地域を対象にシミュレーションした端末情報を生成します。
  • デモ MQTT メッセージ・ブローカー上で MQTT トピックをサブスクライブするためのサービスを構成する、Geospatial Analytics サービスの REST API。このサブスクライブによって、各端末の現在地に関する情報を含むメッセージがサービスに送信されます。
  • サービスでモニターする 3 つの地域を定義する、Geospatial Analytics サービスの REST API。3 つの地域のうちの 2 つは、端末がその地域に入ってきたときにのみイベントがトリガーされるように定義され、もう 1 つは、端末がその地域に入ってきたとき、またはそこから出ていくときにイベントがトリガーされるように定義されます。

Geospatial Analytics サービスは、定義された一連の地域に関して、各端末の位置情報を分析します。端末がいずれかの地域に入ってくると (オプションによっては、いずれかの地域から出ていくと)、地域内位置情報 (region-location) イベントを MQTT に送信します。geo-starter アプリケーションは、これらの地域内位置情報イベントを処理して、イベント・リストに表示します。以下に、このアプリケーションのフロー図を示します。

geo-starter アプリケーションを構成するコンポーネントのブロック図
geo-starter アプリケーションを構成するコンポーネントのブロック図

Geospatial Analytics サービスを利用すると、モノのインターネットにおいて位置情報を利用した新しいアプリケーションの可能性は無限に広がります。その可能性を制限するのは人だけです。

アプリケーションを作成するために必要となるもの

アプリを実行するコードを入手する

ステップ 1: IBM Cloud アプリケーションを作成して Geospatial Analytics サービスをバインドする

  1. IBM Cloud にログインします。ダッシュボードで「CREATE AN APP (アプリの作成)」ボタンをクリックします。アプリの種類として「WEB」を選択し、「SDK for Node.js」を見つけてクリックします。「CONTINUE (続行)」をクリックし、「APP NAME (アプリ名)」に名前を入力して「FINISH (完了)」をクリックします。
  2. 「VIEW APP OVERVIEW (アプリの概要の表示)」をクリックしてアプリケーションの概要ページを表示し、「ADD A SERVICE OR API (サービスまたは API の追加)」ボタンをクリックします。カタログの (「Big Data (ビッグデータ)」セクションにある) 「Geospatial Analytics」サービスをクリックし、「CREATE (作成)」をクリックしてアプリケーションにバインドします。

ステップ 2. ソース・コードの独自のコピーを入手する

ソース・コードの独自のコピーを取得するには、以下の手順に従います。

  1. geo-starter.zip ファイルをダウンロードします (またはこのチュートリアルの「コードを取得する」ボタンをクリックします)。
  2. エクスポートしたファイルをローカルに保存して、ファイルの中身を解凍します。
  3. 解凍されたファイルを格納するディレクトリーの名前を、ステップ 1 で作成したアプリケーションの名前と同じになるように変更します。

ステップ 3. アプリケーションをデプロイする

ここで、スターター・アプリケーションをそのままの状態でデプロイします。現時点では、コードは変更しませんが、チュートリアルの後のほうで、アプリケーションをカスタマイズして再デプロイします。

  1. OS のコマンド・ラインから、カレント・ディレクトリーを、解凍されたアプリケーションを格納するディレクトリーに変更します。
    cd myapp
  2. 以下のコマンドを実行して、Cloud Foundry の IBM Cloud インスタンスに接続します。
    cf api https://api.ng.bluemix.net
    cf login
  3. 以下のコマンドを実行して、アプリケーションをデプロイします。
cf push myapp

ステップ 4. 実行中のアプリケーションを表示する

  1. IBM Cloud で、アプリケーションの経路をクリックしてアプリケーションを開きます。「Welcome to the Geospatial Analytics Starter Application! (Geospatial Analytics スターター・アプリケーションへようこそ!)」というタイトルの基本的な Web ページが表示されます。 ウェルカム・ページのスクリーンショット
    ウェルカム・ページのスクリーンショット
  2. このページの以下のセクションでアプリケーションのステータスと結果を確認します。
    • 「Application Flow (アプリケーション・フロー)」セクションには、アプリケーションが現在実行しているステップとそれぞれのステップのステータスが一覧表示されます。
    • 「Event List (イベント・リスト)」セクションには、Geospatial Analytics サービスによって生成され、アプリケーションが受信した地域内位置情報イベントが表示されます。
  3. 同じ Web ページで、「geo-starter Visualizer (geo-starter バーチャライザー)」リンクをクリックします。これによって開かれるページでは、地図ビューに端末の現在位置とモニターしている地域を表示します。 バーチャライザー・ページのスクリーンショット
    バーチャライザー・ページのスクリーンショット
  4. IBM Cloud に戻って、Geospatial Analytics サービスのサービス・ダッシュボードを表示します。ダッシュボードにアクセスするには、いくつかの方法があります。その 1 つは、アプリケーションに表示されている Geospatial Analytics アイコンをクリックすることです。 サービス・アイコンのスクリーンショット
    ダッシュボードには、このサービスとサービス・メトリックの現在のステータスが表示されます。例えば、MQTT から受信した端末メッセージの数や、サービスによって生成された地域内位置情報イベントの数などです。

ステップ 5. ソース・コードをレビューする

geo-starter アプリケーションは、カスタマイズせずに実行できる、完成された単純なアプリケーションです。このアプリケーションを理解するために、アプリケーションのコードを調べます。

  1. app.js ファイルを開いてアプリケーション・ロジックを確認します。app.js に含まれるコードは、アプリケーションが以下の順に実行する 5 つの主要なステップを中心に構成されています。
    1. Geospatial Analytics REST API を使用するために必要な環境情報を抽出します。
    2. Geospatial Analytics サービスを起動し、このサービスを MQTT デモ・サーバーに接続します。
    3. このサービスがモニターする 3 つの地域を作成します。
    4. 端末が該当する地域に入ったとき、またはそこから出たときに生成されるイベントを処理します。
    5. イベント・ターゲットに達した後、Geospatial Analytics サービスを停止します。
  2. Geospatial Analytics サービス資格情報の抽出について、より詳しく調べます。IBM Cloud の他のサービスやアドオンの場合と同じく、VCAP_SERVICES ランタイム環境変数から、Geospatial Analytics サービスの資格情報とサービス URL を抽出する必要があります。

    以下に、Geospatial Analytics サービスに対して返される環境情報の例を示します。

    {
      "Geospatial Analytics": {
        "name": "Geospatial Analytics",
        "label": "Geospatial Analytics",
        "plan": "Free",
        "credentials": {
          "geo_host": "streams.mybluemix.net",
          "geo_port": 443,
          "start_path": "/jax-rs/geo/start/service_instances/xxxx/service_bindings/xxxx",
          "stop_path": "/jax-rs/geo/stop/service_instances/xxxx/service_bindings/xxxx",
          "restart_path": "/jax-rs/geo/restart/service_instances/xxxx/service_bindings/xxxx",
          "add_region_path": "/jax-rs/geo/addRegion/service_instances/xxxx/service_bindings/xxxxx",
          "remove_region_path": "/jax-rs/geo/removeRegion/service_instances/xxxx/service_bindings/xxxx",
          "status_path": "/jax-rs/geo/status/service_instances/xxxx/service_bindings/xxxx",
          "dashboard_path": "/jax-rs/dashboard/xxxx",
          "userid": "xxxxx",
          "password": "xxxxx"
        }
      }
    }

    サービスの REST API を使用するために必要な情報は、すべて credentials サブセクションに含まれています。このサブセクションには、API のホストとポート、続いて API の各操作に対するパスが記載されています。最後に記載されている userid および password は、API に対するそれぞれの呼び出しで渡す必要があります。
  3. サービスの REST API 上で起動操作を呼び出すコードを調べます。以下に、そのコードのサブセットを記載します。
    jsonObject = JSON.stringify({
            "mqtt_uri" :  "mqtt1.m2m4connectedlife.com:1883",
            "mqtt_input_topics" : "iot-2/cars/#",
            "mqtt_notify_topic" : notify_topic_string,
            "device_id_attr_name" : "ID",
            "latitude_attr_name" : "lat",
            "longitude_attr_name" : "lon"
    });
    start を呼び出す際の構成パラメーターは、1 つの JSON オブジェクトにまとめられます。これらのパラメーターには、まず MQTT の URI、サービスがサブスクライブするトピックが記述されています。さらに、サービスが地域内位置情報イベントをパブリッシュするトピックを格納するための変数が指定されています。そして最後に、サービスが端末を識別し、その現在位置を判断するために使用する端末メッセージの属性が記述されています。
  4. サービスの REST API の addRegion 操作を使用して、モニターする地域を追加するためのコードを調べます。以下は、そのコードのサブセットです。
    jsonObject = JSON.stringify({
            "regions" : [
              {
               "region_type" : "regular",
               "name" : "Promo Zone 1",
               "notifyOnExit" : "false",
               "center_latitude" : "36.121",
               "center_longitude" : "-115.224",
               "number_of_sides" : "10",
               "distance_to_vertices" : "850"
              },
              {
               "region_type" : "regular",
               "name" : "Promo Zone 2",
               "notifyOnExit" : "false",
               "center_latitude" : "36.121",
               "center_longitude" : "-115.101",
               "number_of_sides" : "10",
               "distance_to_vertices" : "750"
              },
              {
               "region_type" : "custom",
               "name" : "Tracking Path",
               "notifyOnExit" : "true",
               "polygon" : [
       {"latitude" : "36.135795", "longitude" : "-115.148584"},
    {"latitude" : "36.134096", "longitude" : "-115.148584"},
    {"latitude" : "36.133247", "longitude" : "-115.147254"},
    {"latitude" : "36.131427", "longitude" : "-115.147254"},
    {"latitude" : "36.131427", "longitude" : "-115.148327"},
    {"latitude" : "36.132849", "longitude" : "-115.148327"},
    {"latitude" : "36.133698", "longitude" : "-115.149657"},
    {"latitude" : "36.135795", "longitude" : "-115.149657"}
               ]
              },
            ]
          });

    上記のコードも、操作に渡すパラメーターにフォーカスしています。2 つの正多角形の地域を作成するために、その中心点と半径が指定されます。さらに、不規則な多角形を定義する点を記載することによって、3 つ目のカスタム地域が指定されます。

ステップ 6. アプリケーションをカスタマイズまたは拡張する

スターター・アプリケーションについて十分に理解できたところで、アプリケーションのソース・コードに変更を加え、以下に示すいくつかの興味深い方法のいずれかでアプリケーションをカスタマイズまたは拡張することをお勧めします。

  • アプリケーションの実行時間を長くするには、event_target 変数の値を 100 からもっと大きい値に変更します。
  • サービスでモニターする地域を追加または変更するには、サービスの REST API の addRegion 操作に渡すパラメーターを変更します。
  • 地域内位置情報イベントの受信時に何らかのアクションを実行します。例えば、端末がモニター対象地域に入ると、その端末にプッシュ通知を送信するようにアプリケーションを拡張するのも一考です。
  • 別の MQTT データ・ソースに切り替えます。独自の MQTT データ・ソースがある場合、サービスの REST API のstart 操作に渡すパラメーターを変更することで、独自の MQTT を使用することができます。

アプリケーションに変更を加える場合、次の作業を行ってください。

  1. 変更内容を計画します。
  2. ソース・コードを変更して目的のカスタマイズを反映させます。
  3. 変更後のアプリケーションをデプロイします。

まとめ

接続された移動中の端末を追跡するのは、最初は不可能なように思えるかもしれませんが、それほど難しいことではありません。Geospatial Analytics サービスを利用すれば、重要な地域を対象に、移動中の端末の位置をリアルタイムでモニターすることができます。このチュートリアルで使用したスターター・アプリケーションは、要件を満たすように Geospatial Analytics サービスを制御する方法を具体的に示しています。Geospatial Analytics サービスを利用すると、モノのインターネットにおいて位置情報を利用した新しいアプリケーションの可能性は無限に広がります。その可能性を制限するのは人だけです。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=Mobile development, Cloud computing, Information Management, Cognitive computing, Internet of Things
ArticleID=1002666
ArticleTitle=Geospatial Analytics サービスを利用してモバイル端末をモニターする
publish-date=02052018