| | |
| | | RemoveTargetReduceRec(TargetReduceRec, key); |
| | | } |
| | | } |
| | | |
| | | if (RoadMap.calibrate == 1) |
| | | goto GET_DISTANCE_OF_NEARBY_TARGET; |
| | | |
| | | // 人行道、公交站、学校 |
| | | for (int i = 0; i < RoadMap.specialAreas.size(); i++) { |
| | | if (RoadMap.specialAreas[i].type == GRID_AREA || RoadMap.specialAreas[i].road != RoadMap.roads[roadIndex].id) |
| | |
| | | } |
| | | } |
| | | |
| | | GET_DISTANCE_OF_NEARBY_TARGET: |
| | | if (nearbyTarget.size() > 0) { |
| | | sort(nearbyTarget.begin(), nearbyTarget.end()); |
| | | return nearbyTarget[0]; |
| | |
| | | if (CrashTheLine(RoadMap.roads[road].stopLine[x].line, car, CarModelList)) { |
| | | DEBUG("越过路口 road %d 路口 %d", road, x); |
| | | |
| | | CrossRoadCallback(road, x, RoadMap.roads[road].stopLine[x].active, car); |
| | | CrossRoadCallback(RoadMap, road, x, ExamSchemeCrossing(RoadMap, road, x), car); |
| | | |
| | | if (!(it->second & REDUCE_SPEED)) { |
| | | // 不按规定减速,不合格 |
| | | DEBUG("不按规定减速"); |
| | | if (RoadMap.calibrate == 0) { |
| | | if (!(it->second & REDUCE_SPEED)) { |
| | | // 不按规定减速,不合格 |
| | | DEBUG("不按规定减速"); |
| | | |
| | | if (RoadMap.roads[road].stopLine[x].active == ROAD_ACTIVE_FORWARD) { |
| | | AddExamFault(41, rtkTime); |
| | | } else if (RoadMap.roads[road].stopLine[x].active == |
| | | ROAD_ACTIVE_TURN_LEFT) { |
| | | AddExamFault(43, rtkTime); |
| | | } else if (RoadMap.roads[road].stopLine[x].active == |
| | | ROAD_ACTIVE_TURN_RIGHT) { |
| | | AddExamFault(46, rtkTime); |
| | | if (ExamSchemeCrossing(RoadMap, road, x) == ROAD_ACTIVE_FORWARD) { |
| | | AddExamFault(41, rtkTime); |
| | | } else if (ExamSchemeCrossing(RoadMap, road, x) == |
| | | ROAD_ACTIVE_TURN_LEFT) { |
| | | AddExamFault(43, rtkTime); |
| | | } else if (ExamSchemeCrossing(RoadMap, road, x) == |
| | | ROAD_ACTIVE_TURN_RIGHT) { |
| | | AddExamFault(46, rtkTime); |
| | | } |
| | | } |
| | | if (!(it->second & STOP_CAR) && RoadMap.roads[road].stopLine[x].stopFlag) { |
| | | // 不停车瞭望,不合格 |
| | | DEBUG("不停车瞭望"); |
| | | if (ExamSchemeCrossing(RoadMap, road, x) == ROAD_ACTIVE_FORWARD) { |
| | | AddExamFault(42, rtkTime); |
| | | } else if (ExamSchemeCrossing(RoadMap, road, x) == |
| | | ROAD_ACTIVE_TURN_LEFT) { |
| | | AddExamFault(44, rtkTime); |
| | | } else if (ExamSchemeCrossing(RoadMap, road, x) == |
| | | ROAD_ACTIVE_TURN_RIGHT) { |
| | | AddExamFault(47, rtkTime); |
| | | } |
| | | } |
| | | } |
| | | if (!(it->second & STOP_CAR) && RoadMap.roads[road].stopLine[x].stopFlag) { |
| | | // 不停车瞭望,不合格 |
| | | DEBUG("不停车瞭望"); |
| | | if (RoadMap.roads[road].stopLine[x].active == ROAD_ACTIVE_FORWARD) { |
| | | AddExamFault(42, rtkTime); |
| | | } else if (RoadMap.roads[road].stopLine[x].active == |
| | | ROAD_ACTIVE_TURN_LEFT) { |
| | | AddExamFault(44, rtkTime); |
| | | } else if (RoadMap.roads[road].stopLine[x].active == |
| | | ROAD_ACTIVE_TURN_RIGHT) { |
| | | AddExamFault(47, rtkTime); |
| | | } |
| | | } |
| | | |
| | | RemoveTargetReduceRec(TargetReduceRec, it->first); |
| | | goto RECHECK; |
| | | } |
| | | } |
| | | |
| | | if (RoadMap.calibrate == 1) |
| | | return; |
| | | |
| | | RECHECK2: |
| | | for (auto it = TargetReduceRec2.begin(); it != TargetReduceRec2.end(); ++it) { |
| | | int x = it->first; |
| | | Line line; |
| | | int roadIndex = 0; |
| | | int x = it->first; |
| | | Line line; |
| | | int roadIndex = 0; |
| | | |
| | | for (; roadIndex < RoadMap.roads.size(); ++roadIndex) { |
| | | if (RoadMap.roads[roadIndex].id == RoadMap.specialAreas[x].road) |
| | | break; |
| | | } |
| | | |
| | | PointF point2 = CalcProjectionWithRoadEdge(RoadMap.roads[roadIndex].leftEdge, |
| | | RoadMap.specialAreas[x].area[0]); |
| | | MakeLine(&line, &RoadMap.specialAreas[x].area[0], &point2); |
| | | |
| | | if (CrashTheLine(line, car, CarModelList)) { |
| | | if (RoadMap.specialAreas[x].type == ZEBRA_CROSSING && |
| | | !(it->second & REDUCE_SPEED)) { |
| | | DEBUG("人行道 不按规定减速"); |
| | | AddExamFault(48, rtkTime); |
| | | } |
| | | if (RoadMap.specialAreas[x].type == BUS_STATION_AREA && |
| | | !(it->second & REDUCE_SPEED)) { |
| | | DEBUG("公交站 不按规定减速"); |
| | | AddExamFault(50, rtkTime); |
| | | } |
| | | RemoveTargetReduceRec(TargetReduceRec2, it->first); |
| | | goto RECHECK2; |
| | | } |
| | | for (; roadIndex < RoadMap.roads.size(); ++roadIndex) { |
| | | if (RoadMap.roads[roadIndex].id == RoadMap.specialAreas[x].road) |
| | | break; |
| | | } |
| | | |
| | | PointF point2 = CalcProjectionWithRoadEdge(RoadMap.roads[roadIndex].leftEdge, |
| | | RoadMap.specialAreas[x].area[0]); |
| | | MakeLine(&line, &RoadMap.specialAreas[x].area[0], &point2); |
| | | |
| | | if (CrashTheLine(line, car, CarModelList)) { |
| | | if (RoadMap.specialAreas[x].type == ZEBRA_CROSSING && |
| | | !(it->second & REDUCE_SPEED)) { |
| | | DEBUG("人行道 不按规定减速"); |
| | | AddExamFault(48, rtkTime); |
| | | } |
| | | if (RoadMap.specialAreas[x].type == BUS_STATION_AREA && |
| | | !(it->second & REDUCE_SPEED)) { |
| | | DEBUG("公交站 不按规定减速"); |
| | | AddExamFault(50, rtkTime); |
| | | } |
| | | RemoveTargetReduceRec(TargetReduceRec2, it->first); |
| | | goto RECHECK2; |
| | | } |
| | | } |
| | | } |