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您还可以实现更多的需求。希望这个教程可以启发您的思路,为您以后的探索学习奠定基础。