研究筆記 - 多App 同 sensor 的分析
目的
- 多個 App, 很有可能提供某種相同類別的感測器資料,比方說溫度。但是在資料上呈現的樣子卻有一點小差異,比方說 sensor 在系統內的10-20 中選的位置不同,或是感測器不同,所以精度可能也有差異。但是基本上都是溫度的資料,系統應該能有整合共用這些資料的能力。
- 這裡想研究,如何分析這些資料,以及如何顯示這些資料,給系統設計一些 Input
情境
- App-A 有使用 PM2.5 感測器
- App-B 使用相同 PM2.5 感測器
分析需求
使用者需求
- 在地圖上看到目前所有此 sensor 的感測值 [研究筆記 - Javascript plot]
規格
設計
- 全 Client 方法:
- 利用 lass.py 將 log 轉換成 javascript 可以方便使用的 .js 檔(當資料 input )
- 利用 Google maps javascript api 在地圖上顯示出來
- 此內含 Javascript 的 html 可以放在 github 給大家隨時取用
- temp sensor value input jason format:
- var data_jason = ’[ \
- {"device_id" : "LASS-DUST-LJ", "data_D" : "33.00","lat" : 24.797717, "lng": 121.000916}, \
- {"device_id" : "LASS-DUST-LJ", "data_D" : "23.00","lat" : 24.817717, "lng": 121.010916}, \
- {"device_id" : "LASS-DUST-LJ", "data_D" : "13.00","lat" : 24.827717, "lng": 121.020916}, \
- {"device_id" : "LASS-DUST-LJ1", "data_D" : "5.00","lat": 24.807717, "lng": 121.030916} \
- ]’;

- 使用方式:
- 1. 使用 lass.py 產生資料檔 data.jason
- 2. 下載網頁範例,放在同一個目錄
- 3. 用瀏覽器開啟網頁,即可看到資料
- Log 轉 Jason 的設計考量
- lass.py 需可以 sync ftp 上的 log 到 local.
- 為了避免太多 filter 要實作,在 import log 端做一個 regular expression 的 filter, 可以很有彈性的濾 device_id, app, format, data-x
- 濾完的 data 仍有多維的特性
- 維度:
- gps 位置 => 在地圖上
- 時間 => 需要實作時間的 filter, 目前已經有
- 不同的硬體 => 用 Maker 的 label 顯示,和畫圈
- 特殊選項
- 一些想法
- 可考慮 lass.py 做週期產生 jason data file(比方說每分鐘). html 也做週期 reload. 這樣就可以一直看到目前的資料
- 建議:
- javascript的 jason檔案,副檔名通常都是 .json 檔
- 用 GeoJSON 的格式定義 lass 給 Client javascript 的資料
- PM2.5 sensor 值,建議有 5-10 分鐘的平均值(可在轉出資料的時候做)
- 需定義打算 sensor 值轉換成圈圈的邏輯
- 比方說,
- 不同的 PM2.5 值該轉成什麼顏色?
- 圈圈的大小是不是固定的,還是根據值來改變大小
- 目前系統初期建議畫 5km 的圈(先畫畫看),待更多研究以及更多節點再來修正
- 目前 GeoJSON
- lass_callback({"type":"FeatureCollection","metadata":{"generated":1395197681000,"url":"https://github.com/LinkItONEDevGroup/LASS","title":"LASS Sensors data","status":200,"api":"0.7.1","count":3},"features":[{"type":"Feature","properties":{"data_d":7.0,"ver_format":2,"fmt_opt":0,"app":"EXAMPLE_APP2","ver_app":"0.7.1","device_id":"LASS-DUST-LJ","tick":160839412,"date":"2015-10-15","time":"06:26:14","device":"LinkItONE","data-0":16100.00,"data-1":100.00,"data-2":1.00,"data-3":0.00,"data-D":9.00,"gps-lat":25.023487,"gps-lon":121.370950,"gps-fix":0,"gps-num":0,"gps-alt":13},"geometry":{"type":"Point","coordinates":[121.370950,25.023487,8.7]},"id":""},
- {"type":"Feature","properties":{"data_d":5.0,"ver_format":2,"fmt_opt":0,"app":"EXAMPLE_APP2","ver_app":"0.7.1","device_id":"LASS-DUST-LJ","tick":160839412,"date":"2015-10-15","time":"06:26:14","device":"LinkItONE","data-0":16100.00,"data-1":100.00,"data-2":1.00,"data-3":0.00,"data-D":9.00,"gps-lat":25.023487,"gps-lon":121.370950,"gps-fix":0,"gps-num":0,"gps-alt":13},"geometry":{"type":"Point","coordinates":[121.390950,25.023487,8.8]},"id":""}],"bbox":[-179.463,-60.7674,-2.9,178.4321,67.0311,609.13]});
- Server 方法:
- 建議:產生 GeoJSON 資料,類似地震資料的觀念
- [ 另外設計 ]
驗證
里程碑
問題討論
Q1 : csv, kml, json, GeoJSON三者的使用情境有什麼不同?
A1 : kml : 主要使用在轉出給 google map, google earth 使用。一般用在靜態資料轉出
- GeoJSON: 由於 google map 在 JavaScript 上整合完整,也簡單,可以做動態的處理,豐富 Client 端的資料呈現。而 JavaScript 基本上支援 JSON format, 而 google 地理方面資料的提供走的是 GeoJSON. 所以目前打算在 Client 端也有 JavaScript 上的支援,而 Sensor 得資料,以 GeoJSON 的格式來提供。短期 GeoJSON 可以用 lass.py 轉出,為還也很容易接上 Server 提供的資料
- 目前 github 上也有 json 的檔案,那只是開發的暫存格式,會統一使用 GeoJSON
參考資料
- The GeoJSON Format Specification
- quakes.geo.json
- google map import data
- Google Maps JavaScript API V3 Reference
- 透過 Google Maps API 處理 GeoJSON 資料