以前、ローコード開発の勉強ということで、簡単なリアルタイムトラッキングシステムを作ってみたことがあります。GPSトラッカーを所有する人や車両の現在位置を取得し、地図上にマッピングする、いわゆる移動体管理システムです。今回は、そのシステムをどのように実現したか、簡単に紹介してみたいと思います。
Googleスプレッドシートをデータベース代わりに使う
スプレッドシートはGoogleが提供する表計算アプリです。業務で利用される方も多いのではないでしょうか。これをデータベースとして利用します。
こんな感じで、1つのシートでGPSのログを管理するテーブルを表現しました。このシートにGPSトラッカーから送られる情報を随時記録していくことが出来れば、移動体管理が実現できそうですが… Google Apps Script (GAS) を利用することで、それも可能となります。
GASによって、スプレッドシートを操作するWebAPIが作成可能です。作成したWebAPIを利用してGPSトラッカーからのリクエストを処理し、スプレッドシートを更新することで、ログを追記するようにしました。
参考:Qiita
function doPost(e) {
// GPS端末から送られてきたパラメータを解析します。
if (e == null || e.postData == null || e.postData.contents == null) {
return;
}
var requestQuery = e.postData.contents;
var params = requestQuery.split("&");
var paramArray = {};
for (var i in params) {
var kv = params[i].split("=");
paramArray[kv[0]] = kv[1];
}
// スプレッドシートオブジェクトを取得
var ss = SpreadsheetApp.getActiveSpreadsheet();
// 端末から送られた情報をスプレッドシートに書き出します。
// シートオブジェクトを取得します。
var sheet = ss.getSheetByName("シート1");
// ヘッダ行を取得します。
var headers = sheet.getRange(1,1,1,sheet.getLastColumn()).getValues()[0];
// 新しく追加する行の入れ物として、配列valuesを定義します。
var values = [];
for (var i in headers) {
// パラメータを取得
var header = headers[i];
var value = paramArray[header];
// パラメータの値が取得できればその値を配列valuesに追加、なければ空文字を追加
if (value != null) {
values.push(value);
} else {
values.push("");
}
}
// シートに1行分のデータを追加します。
sheet.appendRow(values);
var output = ContentService.createTextOutput("true");
output.setMimeType(ContentService.MimeType.TEXT);
return output;
}
参考までに…
現在はSORACOMのようなIoTプラットフォームもありますので、今回紹介したようなトラッキングシステムも、もっと高品質に、より簡単に実現できてしまうかもしれません。ただ、今回紹介したスプレッドシート+Google Apps Scriptによる簡易データベースは地図アプリ以外にも応用が利く技術かと思われます。ちょっとしたアイディアをWebアプリにしたい時などに利用してみてはいかがでしょうか。
ちょっと宣伝
当社が公開している地図アプリ「どすごいマップ」を利用すると、 スプレッドシートのデータを簡単に可視化できます。GPSログもこの通り。