|
|
@ -369,8 +369,11 @@ public class DcTrafficSectionDataServiceImpl |
|
|
|
initializeTrafficSectionData(upwardData, dcDevice, reportTime, LaneDirection.UPWARD); |
|
|
|
initializeTrafficSectionData(downwardData, dcDevice, reportTime, LaneDirection.DOWNWARD); |
|
|
|
|
|
|
|
// 初始化上行和下行的车流量和累计平均速度
|
|
|
|
// 初始化上行和下行的车流量
|
|
|
|
int upwardTrafficVolume = 0, downwardTrafficVolume = 0; |
|
|
|
// 初始化上行和下行的累计大车流量
|
|
|
|
int upwardLargeTrafficVolume = 0, downwardLargeTrafficVolume = 0; |
|
|
|
// 初始化上行和下行的累计平均速度
|
|
|
|
double upwardCumulativeAverageSpeed = 0.0, downwardCumulativeAverageSpeed = 0.0; |
|
|
|
|
|
|
|
// 遍历车道信息,计算上行和下行的车流量和累计平均速度
|
|
|
@ -383,20 +386,23 @@ public class DcTrafficSectionDataServiceImpl |
|
|
|
|
|
|
|
// 根据车道方向累加车流量和累计平均速度
|
|
|
|
int totalTrafficFlow = laneData.getInteger("totalTrafficFlow"); |
|
|
|
double cumulativeAverageSpeed = calculateCumulativeAverageSpeed(laneData); |
|
|
|
int cumulativeAverageSpeed = calculateCumulativeAverageSpeed(laneData); |
|
|
|
int cumulativeLargeTrafficVolume = calculateCumulativeLargeTrafficVolume(laneData); |
|
|
|
|
|
|
|
if (isDownward) { |
|
|
|
downwardTrafficVolume += totalTrafficFlow; |
|
|
|
downwardCumulativeAverageSpeed += cumulativeAverageSpeed; |
|
|
|
downwardLargeTrafficVolume += cumulativeLargeTrafficVolume; |
|
|
|
|
|
|
|
} else { |
|
|
|
upwardTrafficVolume += totalTrafficFlow; |
|
|
|
upwardCumulativeAverageSpeed += cumulativeAverageSpeed; |
|
|
|
upwardLargeTrafficVolume += cumulativeLargeTrafficVolume; |
|
|
|
} |
|
|
|
} |
|
|
|
// 设置上行和下行的车流量和累计平均速度
|
|
|
|
setUpTrafficSectionData(upwardData, upwardTrafficVolume, upwardCumulativeAverageSpeed); |
|
|
|
setUpTrafficSectionData(downwardData, downwardTrafficVolume, downwardCumulativeAverageSpeed); |
|
|
|
setTrafficSectionData(upwardData, upwardTrafficVolume, upwardCumulativeAverageSpeed, upwardLargeTrafficVolume); |
|
|
|
setTrafficSectionData(downwardData, downwardTrafficVolume, downwardCumulativeAverageSpeed, downwardLargeTrafficVolume); |
|
|
|
|
|
|
|
// 将上行和下行的交通段数据放入结果映射中
|
|
|
|
resultMap.put(LaneDirection.UPWARD, upwardData); |
|
|
@ -437,9 +443,11 @@ public class DcTrafficSectionDataServiceImpl |
|
|
|
* @param data 交通路段数据对象,用于存储交通路段的相关信息。 |
|
|
|
* @param trafficVolume 该路段的交通量,单位通常为车辆数。 |
|
|
|
* @param cumulativeAverageSpeed 该路段的累积平均速度,单位通常为千米/小时。 |
|
|
|
* @param largeTrafficVolume 大型车交通量。 |
|
|
|
*/ |
|
|
|
private void setUpTrafficSectionData(DcTrafficSectionData data, int trafficVolume, double cumulativeAverageSpeed) { |
|
|
|
private void setTrafficSectionData(DcTrafficSectionData data, int trafficVolume, double cumulativeAverageSpeed, int largeTrafficVolume) { |
|
|
|
data.setTrafficVolume(trafficVolume); // 设置交通量
|
|
|
|
data.setLargeTrafficVolume(largeTrafficVolume); // 设置大车流量
|
|
|
|
data.setAverageSpeed(0); |
|
|
|
if (trafficVolume != 0) { // 当交通量不为0时,计算并设置平均速度
|
|
|
|
data.setAverageSpeed((int) Math.round(cumulativeAverageSpeed / trafficVolume)); // 平均速度 = 累积平均速度 / 交通量
|
|
|
@ -475,6 +483,27 @@ public class DcTrafficSectionDataServiceImpl |
|
|
|
laneData.getInteger("motorcycleTrafficVolume") * laneData.getInteger("averageSpeedOfMotorcycle"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 计算累积大型交通流量。 |
|
|
|
* 该方法用于根据给定的车道数据,计算出特定类型的车辆(包括公共汽车、中型货车、大型货车、特大型货车和集装箱车)的交通量总和。 |
|
|
|
* |
|
|
|
* @param laneData 包含车道交通量数据的JSONObject对象。该对象应包含以下键: |
|
|
|
* - "busTrafficVolume":公共汽车交通量 |
|
|
|
* - "mediumTruckTrafficVolume":中型货车交通量 |
|
|
|
* - "largeTruckTrafficVolume":大型货车交通量 |
|
|
|
* - "extraLargeTrucksTrafficVolume":特大型货车交通量 |
|
|
|
* - "containerTruckTrafficVolume":集装箱车交通量 |
|
|
|
* @return 返回各种类型大型车辆交通量的总和,类型为int。 |
|
|
|
*/ |
|
|
|
private int calculateCumulativeLargeTrafficVolume(JSONObject laneData) { |
|
|
|
// 计算各种类型大型车辆的交通量总和
|
|
|
|
return laneData.getInteger("busTrafficVolume") + |
|
|
|
laneData.getInteger("mediumTruckTrafficVolume") + |
|
|
|
laneData.getInteger("largeTruckTrafficVolume") + |
|
|
|
laneData.getInteger("extraLargeTrucksTrafficVolume") + |
|
|
|
laneData.getInteger("containerTruckTrafficVolume"); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|
* 将缓存中的数据统计后保存至数据库。 |
|
|
|
*/ |
|
|
|