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)到現在的所有結果。

GET {{staBaseUrl}}/Locations?$expand=Things/Datastreams($filter=ObservedProperty/name eq 'available_bikes'),Things/Datastreams/Observations($filter=phenomenonTime lt 2017-02-13T17:00:00-05:00;$orderby=phenomenonTime desc;$top=1)

請注意,時間表示是依照 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)”,lege分別代表“小於或等於(less-than-or-equal-to)”和“大於或等於(greater-than-or-equal-to)”。

一天之內自行車的可用性變化

為了讓事情變得有趣,讓我們嘗試一種可視化數據的方法可以:

  • 顯示一些有意義的資訊。

  • 顯示在一天之中的變化。

對任何人而言,一個站點只要至少有一輛可用的自行車(假設使用者只需要一輛)或至少一個車位(假設使用者需要還車)。因此,為了可視化這一點:

  • 取回available_bikesavailable_docks數據,這可以通過刪除查詢中$filter=ObservedProperty/name eq 'available_bikes'來實現。

  • 下方地圖紅色圓圈表示站點是空的,即沒有自行車或者沒有車位。

在 SensorThings Share 上查看代碼

時光飛逝

現在讓我們通過下列查詢來看看哪些站點是空的:在$filter中修改phenomenonTime為特定時間。

GET {{staBaseUrl}}/Locations?$expand=Things/Datastreams($filter=ObservedProperty/name eq 'available_bikes'),Things/Datastreams/Observations($filter=phenomenonTime lt 2017-02-13T00:00:00-05:00;$orderby=phenomenonTime desc;$top=1)
午夜
上午三點
上午六點
上午九點
中午
下午三點
下午六點
晚上九點

通過觀察可以得出,在白天的某些較為集中的地方,有很多自行車站點都是空的。也就是說,我們以一天作為數據點,可以展開一些潛在的問題,比如是否自行車和車位因為工作日或週末而不同?類似這樣的問題,可以留給您繼續探索。

總結

這個系列教程中,我們逐步介紹了如何從SensorThing服務器取得位置Locations以及與其關聯的觀測值Observations,並在地圖上進行了可視化展示。當然了,通過SensorThings您還可以實現更多的需求。希望這個教程可以啟發您的思路,為您以後的探索學習奠定基礎。