IoT データをリアルタイムに地図上に可視化してみた!

Document created by takahiro_kamiyaesrij-esridist Employee on Jun 26, 2018Last modified by takahiro_kamiyaesrij-esridist Employee on Jun 27, 2018
Version 10Show Document
  • View in full screen mode

はじめに

 

各種のセンサー機器から取得したデータをリアルタイムに地図に表示したい、また、ダッシュボードなどで加工された様々なセンサーデータをグラフィカルに表示したいといったニーズが、ここ数年の「IoT(モノのインターネット)」の流行りと共に爆発的に増えていることと思います。

このようなデータは、弊社製品の ArcGIS プラットフォームを活用することで簡単に Web 上で可視化することができます。

 

そこで今回は、GPSトラッカーという、GPS と 3G 通信を使用して位置情報をトラッキングする端末を使用して、トラッキング情報を ArcGIS Online のダッシュボードを利用して可視化しました。

ArcGIS Online は、マップを作成、利用、管理するポータル環境を提供するクラウド GIS です。

                          ArcGIS Online に構築したダッシュボード(GPS トラッカー軌跡の解析)

 

ArcGIS Online 上で作成したダッシュボードは、「GIS コミュニティフォーラム 2018 TR313J ダッシュボード (GPS トラッカー奇跡の解析)」から実際に操作することができます。

 

トラッキング情報のデータのやり取りは、IoT プラットフォームの SORACOM を使用しています。その SORACOM  プラットフォームに送信したトラッキングデータを地図に可視化するため、ArcGIS と連携する仕組みを構築してみました。

 

本記事では、その仕組みの具体的な中身を紹介します。

 

SORACOM を採用した理由

 

IoT をはじめるにあたり、よくある課題として、デバイスとの通信を行うための通信インフラやセキュリティ、通信サービスの費用といったことがあると思います。その解決策として、特に SORACOM では、通信のセキュリティが強固で、かつ通信費用が安いというのが魅力的でした。また、多くの便利な関連サービスが用意されており、ArcGIS プラットフォームとの連携を比較的簡単に行うことができました。そういったところが、IoT の通信プラットフォームとして SORACOM が多くの顧客を獲得している理由でしょう。

 

 

連携の仕組み

 

ArcGIS との連携では、SORACOM Beam というサービスを使用しています。SORACOM Beam からのデータを直接 AWS 上のサービスを利用して処理し、処理したデータを ArcGIS に登録しています。

※ SORACOM Beam SORACOM Air SIM を使用したデバイスからのデータ・アップロード時にクラウド側でデータ処理を行うためのプロキシーサービスです。

 

 

SORACOM Beam から AWS との接続は、「SORACOM Beam を使用して AWS と接続する」を参考にしました。

 

具体的なデータの流れ

 

  1. GPS トラッカーから TCP で送信されたデータは、SORACOM Beam により 受信され、デバイスに固有のデータを付与した上で、Amazon API Gateway TLS 暗号化されたセキュアな状態で送信されます。
  2. 次に Amazon API Gateway は受け取ったデータを加工し、デバイス固有の情報をデータに含めた上で、AWS LambdaPython コードを実行します。
  3. AWS Lambda で実行されたコードは、受け取ったデータを ArcGIS Online に登録します。

 

AWS Lambda で実行する Python コードでは、ArcGIS REST API フィーチャ サービスを使用してデータを登録しています。ArcGIS では REST API の仕様が公開されており、それを使用することで、他のプラットフォームとの連携をシームレスに行うことができます。REST API 以外にも ArcGIS API for JavaScript ArcGIS API for Python などの API を使用するという選択肢もありましたが、外部の API を使用するには、ZIP 化してアップロードするなどの手続きが必要となるため、今回は、データ登録だけでしたので、REST API を直打ちにしました。

 

今後、空間検索などのより複雑な処理を実行する場合は、ArcGIS API for Python などの使用を検討していきたいと思います。

 

あらかじめ ArcGIS Online で使用する GPS トラッカー用のフィーチャ サービスを作成し、フィーチャ サービスの REST エンドポイントを使用してデータ登録を行っています。

 

次のコードは GPS トラッカーからのデータ(位置情報・属性情報)をフィーチャ サービスの REST エンドポイントに登録している部分です。

// GPS トラッカー用のフィーチャ サービスのエンドポイント
AGOL_applyEdits = r"https://utility.arcgis.com/usrsvcs/servers/46a76439b3a64b119bf85cdc8cc5ac51/rest/services/GCF2018_ArcGISxSORACOM/FeatureServer/0/applyEdits"
:
:
#>> 送信処理 #############################
def sendData(geometry_dic, attributes_dic):

    # 測地系設定:固定 (WGS 1984 で設定)
    spatialReference_dic = {}
    spatialReference_dic["latestWkid"] = 4326
    spatialReference_dic["wkid"] = 4326
    geometry_dic["spatialReference"] = spatialReference_dic

    # パラメータ作成
    devData_dic = {}
    devData_dic["geometry"]=geometry_dic
    devData_dic["attributes"]=attributes_dic

    # Featureに追加する
    return AddFeature(devData_dic)

def AddFeature(devData_dic):

    # 属性データの辞書を JSON に変換
    json_str = json.dumps(devData_dic)

    # 属性 JSON を URL エンコード
    import urllib.parse
    json_q = urllib.parse.quote(json_str)

    # 送信パラメータを構築
    sendData = "adds=" + json_q + "&f=pjson"

    # 送信 (POST)
    headers = {"Content-Type" : "application/x-www-form-urlencoded", "referer" : referer}
    req = urllib.request.Request(AGOL_applyEdits, headers=headers, data=sendData.encode('utf-8'))
    with urllib.request.urlopen(req) as response:
        response_body = response.read().decode("utf-8")
        json_dict = json.loads(response_body)
        return json_dict

 

データの登録には、フィーチャ サービスの Apply Edits (Feature Service/Layer) を使用して、POST でリクエストしています。パラメータとしては、adds f を使用しています。adds はデータの追加用のパラメータで、「geometry」 と 「attributes」 の配列を JSON 化したものを設定しています。f は応答形式で pjson (Pretty JSON) と設定しています。

 

まとめ

 

SORACOM を利用することで、GPS トラッカーからデータを受け取る部分は簡単に構築することができました。なお、SORACOM にはこれ以外にも多くの連携用の機能やサービスがあります。

 

本記事で紹介した内容や他の連携パターンを踏まえて、7 12 日に開催のセミナー「ここまでできる!ArcGIS で実現する IoT×GIS システム連携」でもより詳細な情報をお伝えする予定です。是非お誘いあわせの上、奮ってご参加ください。

 

■関連リンク

1 person found this helpful

Attachments

    Outcomes