Commit 0474913b authored by zhoushiguang's avatar zhoushiguang

路况优化

parent 40f2ac9d
......@@ -72,6 +72,8 @@ public class RidProcessWindow extends ProcessWindowFunction<CarTrackModel, LaneT
long windowEndTs = context.window().getEnd();
List<CarTrackModel> list = StreamSupport.stream(elements.spliterator(), false).collect(Collectors.toList());
//筛选速度大于1m/s
list = list.stream().filter(o->o.getSpeed()>3.6).collect(Collectors.toList());
//进口车道
// List<CarTrackModel> inLaneList = list.stream().filter(o -> Objects.equals(2, o.getRoadnet().getLaneType())).collect(Collectors.toList());
......@@ -109,30 +111,30 @@ public class RidProcessWindow extends ProcessWindowFunction<CarTrackModel, LaneT
//过滤轨迹覆盖度较低情况
if (avgSpeed > 0 && segmentCarSize > 10) {
trafficIndex = ArithOfBigDecmial.div(freeSpeed, avgSpeed);
double tti = 0;
double ttiFree = 0;
Map<String, List<CarTrackModel>> groupBy = list.stream().collect(Collectors.groupingBy(o -> o.getRoadnet().getSegmentId()));
Map<String, Integer> segmentList = BaseLaneCache.getInstance().getSegmentLaneNumberMap();
for (Map.Entry<String, Integer> entry : segmentList.entrySet()) {
List<CarTrackModel> carlist= new ArrayList<>() ;
if (groupBy.containsKey(entry.getKey()))
carlist = groupBy.get(entry.getKey());
//渠化段上所有车辆
long segCarCount = carlist.stream().map(o->o.getId()).distinct().count();
//渠化段车辆平均行驶速度
double avgSpd = this.getAvgSpeed(carlist, freeSpeed);
//渠化段长度
double length = carlist.isEmpty()?0: carlist.get(0).getRoadnet().getLaneLength();
//渠化段ttl计算
double travelTimeIndex = (length/1000 / avgSpd) * segCarCount;
double freeTimeIndex = (length/1000/freeSpeed) * segCarCount;;
tti += travelTimeIndex;
ttiFree += freeTimeIndex;
}
if (ttiFree>0) {
trafficIndex = tti / ttiFree;
}
// double tti = 0;
// double ttiFree = 0;
// Map<String, List<CarTrackModel>> groupBy = list.stream().collect(Collectors.groupingBy(o -> o.getRoadnet().getSegmentId()));
// Map<String, Integer> segmentList = BaseLaneCache.getInstance().getSegmentLaneNumberMap();
// for (Map.Entry<String, Integer> entry : segmentList.entrySet()) {
// List<CarTrackModel> carlist= new ArrayList<>() ;
// if (groupBy.containsKey(entry.getKey()))
// carlist = groupBy.get(entry.getKey());
// //渠化段上所有车辆
// long segCarCount = carlist.stream().map(o->o.getId()).distinct().count();
// //渠化段车辆平均行驶速度
// double avgSpd = this.getAvgSpeed(carlist, freeSpeed);
// //渠化段长度
// double length = carlist.isEmpty()?0: carlist.get(0).getRoadnet().getLaneLength();
// //渠化段ttl计算
// double travelTimeIndex = (length/1000 / avgSpd) * segCarCount;
// double freeTimeIndex = (length/1000/freeSpeed) * segCarCount;;
//
// tti += travelTimeIndex;
// ttiFree += freeTimeIndex;
// }
// if (ttiFree>0) {
// trafficIndex = tti / ttiFree;
// }
}
......@@ -168,15 +170,15 @@ public class RidProcessWindow extends ProcessWindowFunction<CarTrackModel, LaneT
}
}
//采用tti判定范围
if (trafficIndex <= 1.35) {
trafficState = CongestEnum.NO_CONGEST.getType();
} else if (trafficIndex < 1.55) {
trafficState = CongestEnum.LIGHT_CONGEST.getType();
} else if (trafficIndex < 1.85) {
trafficState = CongestEnum.MODERATE_CONGEST.getType();
} else {
trafficState = CongestEnum.HEAVY_CONGEST.getType();
}
// if (trafficIndex <= 1.35) {
// trafficState = CongestEnum.NO_CONGEST.getType();
// } else if (trafficIndex < 1.55) {
// trafficState = CongestEnum.LIGHT_CONGEST.getType();
// } else if (trafficIndex < 1.85) {
// trafficState = CongestEnum.MODERATE_CONGEST.getType();
// } else {
// trafficState = CongestEnum.HEAVY_CONGEST.getType();
// }
LaneTrafficStateResult outModel = new LaneTrafficStateResult();
outModel.setId("Rid_Traffic_State");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment