Languages: English • 简体中文 • 繁體中文
SensorThings API - 時間旅行
在 第三部分 中, 我們:
-
從SensorThings服務器取回了
@iot.nextLink
連結的所有Locations
。 -
調整了地圖以顯示更多的可用數據。
available_bikes
的觀測屬性ObservedProperty
的觀測值Observations
。但如需了解數據跟隨時間的變化情況,歷史數據也很重要。在這部分中,我們將展示如何從SensorThings服務器取回通過phenomenonTime
排序過的數據。
過濾觀測值(Observations)
之前為了取回available_bike
,我們過濾了Datastreams
裡面對應的ObservedProperty
。我們也可以對各種其他屬性進行$filter
,包括了Observations
裡面的phenomenonTime
。
這是我們之前使用過的查詢,不同的是,這裏我們修改了返回結果的時間日期,任選一個時間,比如返回從2017年2月13日下午5點(美国东部标准时间或UTC-5)到現在的所有結果。
請注意,時間表示是依照 ISO 8601 合併日期與時間的擴展格式。雖然這裏我們不展開討論 時區和時差 問題,但建議您可以適當了解一下這方面的知識,包括與UTC時間的關係,尤其如果涉及到夏令時,問題會更加複雜。
通過組合不同的$filter
和$orderby
,可滿足不同的查詢需要。舉例來說:
-
取在某個特定時間之前的數據,以降序排列:
$filter=phenomenonTime lt [iso8601-time]
and$orderby=phenomenonTime desc
-
取在某個特定時間之後的數據,以升序排列:
$filter=phenomenonTime gt [iso8601-time]
and$orderby=phenomenonTime asc
-
取一段時間之內的所有的數據:
$filter=phenomenonTime ge [iso8601-time] and phenomenonTime lt [iso8601-time]
lt
代表“小於(less-than)”,gt
代表“大於(greater-than)”,le
和ge
分別代表“小於或等於(less-than-or-equal-to)”和“大於或等於(greater-than-or-equal-to)”。
一天之內自行車的可用性變化
為了讓事情變得有趣,讓我們嘗試一種可視化數據的方法可以:
- 顯示一些有意義的資訊。
- 顯示在一天之中的變化。
對任何人而言,一個站點只要至少有一輛可用的自行車(假設使用者只需要一輛)或至少一個車位(假設使用者需要還車)。因此,為了可視化這一點:
-
取回
available_bikes
與available_docks
數據,這可以通過刪除查詢中$filter=ObservedProperty/name eq 'available_bikes'
來實現。 -
下方地圖紅色圓圈表示站點是空的,即沒有自行車或者沒有車位。
時光飛逝
$filter
中修改phenomenonTime
為特定時間。
通過觀察可以得出,在白天的某些較為集中的地方,有很多自行車站點都是空的。也就是說,我們以一天作為數據點,可以展開一些潛在的問題,比如是否自行車和車位因為工作日或週末而不同?類似這樣的問題,可以留給您繼續探索。
總結
這個系列教程中,我們逐步介紹了如何從SensorThing服務器取得位置Locations
以及與其關聯的觀測值Observations
,並在地圖上進行了可視化展示。當然了,通過SensorThings您還可以實現更多的需求。希望這個教程可以啟發您的思路,為您以後的探索學習奠定基礎。