数据查询
通过TSDB客户端进行查询和时空过滤,使用格式和时序数据库一致,此外扩展了Filter的时空过滤能力。
注意:地理位置信息不支持聚合运算和降采样
首先,数据查询需要先构建一个Query对象。Query对象表示查询条件,用于指定Tag、Metric和聚合查询条件等。创建方式和时序数据库一样,Query 对象使用方式也保持一致, 请参考查询数据。
时间范围内的轨迹查询
查询出目标物体在给定时间范围内每一时刻的地理位置信息,这样就可以通过其他工具进行轨迹展示;
注意:“metric”需要指定为”coordinate”
例:
Query query = Query.timeRange(1538130000, 1538140328)
.sub(SubQuery.metric("coordinate").aggregator(Aggregator.NONE)
.tag("sensor":"IOTE_8859_0001|IOTE_8859_0001").build()).build();
tsdb.query(query);
返回结果:使用 Query 方法查询的数据以List
BBOX时空过滤查询
返回位置在给定的矩形框内的所有点。
使用方法:
FilterType指定为GeoBBox;
Metric可以为已写入的任意指标;
Filter的过滤条件的第一个字段为过滤方式(within或existed),后面的字段为指定的矩形框的地理信息。
例:
Query geoQuery =
Query.timeRange(1538130000, 1538140328)
.sub(SubQuery.metric("coordinate")
.aggregator(Aggregator.NONE).tag(tags)
.filter(FilterType.GeoBBox,
"within, 117.63954, 38.97943, 117.77481,39.07358").build())
.build();
List<QueryResult> queryResults = tsdb.query(geoQuery);
返回结果:使用 Query 方法查询的数据以List
Distance
返回以给定位置为圆心,给定距离为半径的圆内的所有点。
使用方法:
FilterType指定为GeoDistance;
Metric可以为已写入的任意指标;
Filter的过滤条件的第一个字段为过滤方式(within或existed ),详见下文的过滤方式小节;第二和第三个字段表示圆心的经纬度信息,第四个字段表示半径(米)。
例:
Query geoQuery =
Query.timeRange(1538130000, 1538140328)
.sub(SubQuery.metric(coordinateMetric)
.aggregator(Aggregator.NONE).tag(tags)
.filter(FilterType.GeoDistance,
"within, 117.63954, 38.97943, 1000").build())
.build();
List<QueryResult> queryResults = tsdb.query(geoQuery);
返回结果:使用 Query 方法查询的数据以List
过滤方式
无论BBOX还是Distance,Filter字段里有两种过滤方式:within和existed。
within:查询只存在于给定时空范围信息的所有点。
例:查询下午2:00-6:00时间段出现给定地理位置范围内(通过BBOX或者Distance指定地理位置过滤条件)的符合条件的所有数据点。
existed:查询曾经出现在给定时空范围内的所有点。
比如某个目标的时间线为T1(未出现)| T2(出现)| T3 (未出现)| T4(未出现)| T5(未出现)| T6(未出现)
查询条件:时间范围(T2 – T5)
返回时间点: T2, T3, T4, T5, (由于时间T2出现在BBox内,所以返回T2 ~ T6的所有时间点)
说明查询下午2:00-6:00在给定地理范围内曾经出现过的符合条件的目标的完整轨迹(2:00-6:00的轨迹信息)。