技術情報
Sigfox GPSトラッカーをNode-REDでマップ表示
2018.10.29
Sigfox CallbackとIBM Watson IoT Platformとの連携は、Sigfox CallbackとIBM Watson IoT連携で記載しましたが、ここでは、Sigfox対応のGPSトラッカーの位置情報を地図表示してみます。
前提(Sigfox GPSトラッカー)
ここでは、緯度経度を下記のJSONでSigfox Callbackから転送することを前提に話を進めます。
{ "device": "{device}", "time": {time}, "data": "{data}", "lat": {customData#lat}, "lng": {customData#lng} }
このように緯度経度の値として{customData#lat}と{customData#lng}を使うためには、Custom Payload Configでlatとlngをfloat等で宣言しておく必要があります。
Node-REDの設定
Node-REDでは、Node-RED Libraryで、世界中のユーザが作成したノードが公開されており、自身のフローに追加することができます。
ここでは、worldmapというノードを使用します。
worldmapノードをフローに追加する
Node-REDの右上メニューから"パレットの管理"メニューを選択し、検索バーで"worldmap"と検索します。

"node-red-contrib-web-worldmap"というノードが一覧に表示されるので、[ノードを追加]ボタンをクリックします。
左メニューの"location"グループに"worldmap"ができるので、フロー上にドラッグ&ドロップします。

worldmapノードをダブルクリックすると、各種設定が可能ですが、worldmapのプロパティ設定は、Base mapに対象地図データを選択するだけで結構です。(今回は"OpenStreetMap"を選択)

Watson IoT Platformから位置情報をworldmapに表示する
最終的なフローは下図の通りとなります。Watson IoT Platformから取得したJSONメッセージからGPS情報を切り出し、worldmapに展開する"Plot GPS" functionノードと、地図のパンニング(移動)とズーミングをする"Move and Zoom" functionノードを作成します。

GPS位置情報を切り出す(Plot GPS)functionノードの作成
Watson IoTからは、msgオブジェクトとして、下記のJSONが送られてきます。
{ "topic": "iot-2/type/5a17978f5005747c7760123d/id/7B0DE2/evt/message/fmt/json", "payload": { "device": "7B0DEx", "time": 1540797562, "data": "0b8d274f056fffea002003f5", "lat": 35.6422308, "lng": 139.7415464 }, "deviceId": "7B0DEx", "deviceType": "5a17978f5005747c7760123x", "eventType": "message", "format": "json", "_msgid": "631ce355.88a95c" }
ここから、緯度(lat)、経度(lng)、デバイスID(device)を取得し、worldmapに最低限必要なlat、lon、nameにマッピングします。(ついでにアイコンも設定します)

パンニングとズーミング(Move and Zoom)functionノードの作成
パンニングとズーミングを行うMove and Zoom functionの設定は下図の通りとなります。msg.payload.commandに緯度経度(lat, lon)を指定しパンニング、ズームサイズ(zoom)を指定します。

動作確認
デプロイし、[Ctrl]+[Shift]+[m]キーを押すと、地図ダッシュボード画面に遷移します。
通常、Node-REDのURLがhttps://xxx.mybluemix.net/red の場合、地図ダッシュボードのURLはhttps://xxx.mybluemix.net/worldmap/ となります。

GPS位置情報を元に位置更新する地図ビューアが作成できました。
worldmapノードには、他にもエリアや線の描画、ヒートマップなどの機能があります。こちらを参考にしてください。