无SegmentID时,如何通过GPS坐标获取HERE实时交通Flow图层平均速度
解决方案
方法一:直接通过经纬度查询Flow数据(无需转换segmentID)
你不需要先获取segmentID,可以直接基于GPS坐标构建范围查询,拉取附近路段的实时Flow数据:
- 使用SDK的
QueryBuilder创建一个围绕目标坐标的缓冲区查询,比如设置50米半径,确保覆盖坐标所在的道路路段 - 针对
HERE Real Time Traffic的Flow图层执行查询,过滤出匹配的路段数据 - 从返回结果中提取
averageSpeed字段
示例代码片段:
// 目标GPS坐标 Coordinate targetCoord = new Coordinate(lat, lon); // 构建50米半径的缓冲区查询 Query query = QueryBuilder.withinCircle(targetCoord, 50.0) .build(); // 获取Flow图层的数据客户端 DataClient flowClient = DataClientFactory.createFlowClient(); // 执行查询 CompletionStage<Iterable<FlowSegment>> result = flowClient.query(query); // 处理结果,提取平均速度 result.thenAccept(segments -> { for (FlowSegment segment : segments) { System.out.println("路段平均速度: " + segment.getAverageSpeed()); } });
方法二:通过坐标匹配获取segmentID
如果确实需要先拿到segmentID,可以通过HERE的道路匹配功能实现:
- 针对
HERE Map Content的Roads图层,构建坐标附近的查询,匹配到对应的道路segment - 从返回的道路数据中提取
segmentId - 用该ID查询Flow图层的实时数据
示例代码片段:
Coordinate targetCoord = new Coordinate(lat, lon); Query roadQuery = QueryBuilder.withinCircle(targetCoord, 30.0) .build(); DataClient roadClient = DataClientFactory.createRoadClient(); CompletionStage<Iterable<RoadSegment>> roadResult = roadClient.query(roadQuery); roadResult.thenAccept(roadSegments -> { for (RoadSegment roadSeg : roadSegments) { String segmentId = roadSeg.getSegmentId(); // 用segmentID查询Flow数据 Query flowQuery = QueryBuilder.withId(segmentId).build(); flowClient.query(flowQuery).thenAccept(flowSegments -> { // 处理Flow数据 }); } });
注意:缓冲区半径建议根据道路密度调整,城市区域用30-50米,郊区可以适当放大,避免匹配到无关路段。
内容的提问来源于stack exchange,提问作者NutsFly
相关产品推荐
相关产品推荐

