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