Get the Driving Lane Status in form of bool vector.
- Parameters
-
- Returns
- std::vector<bool>
Definition at line 743 of file denm_getters.h.
788
795inline TimestampIts getReferenceTime(const DENM& denm) { return denm.denm.management.reference_time; }
796
803inline uint64_t getReferenceTimeValue(const DENM& denm) { return getReferenceTime(denm).value; }
804
811inline uint8_t
getStationType(
const DENM& denm) {
return denm.denm.management.station_type.value; }
812
819inline double getLatitude(
const DENM& denm) {
return getLatitude(denm.denm.management.event_position.latitude); }
820
828
835inline double getAltitude(
const DENM& denm) {
return getAltitude(denm.denm.management.event_position.altitude); }
836
844 if (denm.denm.location_is_present) {
845 if (denm.denm.location.event_position_heading_is_present) {
846 return getHeadingCDD(denm.denm.location.event_position_heading);
847 } else {
848 throw std::invalid_argument("Heading is not present!");
849 }
850 } else {
851 throw std::invalid_argument("LocationContainer is not present!");
852 }
853}
854
862 if (denm.denm.location_is_present) {
863 if (denm.denm.location.event_position_heading_is_present) {
865 } else {
866 throw std::invalid_argument("Heading is not present!");
867 }
868 } else {
869 throw std::invalid_argument("LocationContainer is not present!");
870 }
871}
872
880 if (denm.denm.location_is_present) {
881 return denm.denm.location.event_position_heading_is_present;
882 } else {
883 throw std::invalid_argument("LocationContainer is not present!");
884 }
885}
886
893inline double getSpeed(
const DENM& denm) {
894 if (denm.denm.location_is_present) {
895 if (denm.denm.location.event_speed_is_present) {
896 return getSpeed(denm.denm.location.event_speed);
897 } else {
898 throw std::invalid_argument("Speed is not present!");
899 }
900 } else {
901 throw std::invalid_argument("LocationContainer is not present!");
902 }
903}
904
912 if (denm.denm.location_is_present) {
913 return denm.denm.location.event_speed_is_present;
914 } else {
915 throw std::invalid_argument("LocationContainer is not present!");
916 }
917}
918
927 denm.denm.location.event_speed);
928}
929
938inline gm::PointStamped
getUTMPosition(
const DENM& denm,
int& zone,
bool& northp) {
939 return getUTMPosition(denm.denm.management.event_position, zone, northp);
940}
941
949 int zone;
950 bool northp;
951 return getUTMPosition(denm.denm.management.event_position, zone, northp);
952}
953
960inline uint8_t
getCauseCode(
const DENM& denm) {
return denm.denm.situation.event_type.cause_code.value; }
961
968inline uint8_t
getSubCauseCode(
const DENM& denm) {
return denm.denm.situation.event_type.sub_cause_code.value; }
969
979 if (denm.denm.situation_is_present) {
981 std::string cause_code_type = "undefined";
982
983 if (cause_code == CauseCodeType().TRAFFIC_CONDITION)
984 cause_code_type = "traffic condition";
985 else if (cause_code == CauseCodeType().ACCIDENT)
986 cause_code_type = "accident";
987 else if (cause_code == CauseCodeType().ROADWORKS)
988 cause_code_type = "roadworks";
989 else if (cause_code == CauseCodeType().IMPASSABILITY)
990 cause_code_type = "impassibility";
991 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION)
992 cause_code_type = "adverse weather condition - adhesion";
993 else if (cause_code == CauseCodeType().AQUAPLANNNING)
994 cause_code_type = "aquaplanning";
995 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION)
996 cause_code_type = "hazardous location - surface condition";
997 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD)
998 cause_code_type = "hazardous location - obstacle on the road";
999 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD)
1000 cause_code_type = "hazardous location - animal on the road";
1001 else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD)
1002 cause_code_type = "human presence on the road";
1003 else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING)
1004 cause_code_type = "wrong way driving";
1005 else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS)
1006 cause_code_type = "rescue and recovery in progress";
1007 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION)
1008 cause_code_type = "adverse weather condition - extreme weather condition";
1009 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY)
1010 cause_code_type = "adverse weather condition - visibility";
1011 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION)
1012 cause_code_type = "adverse weather condition - precipitation";
1013 else if (cause_code == CauseCodeType().SLOW_VEHICLE)
1014 cause_code_type = "slow vehicle";
1015 else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE)
1016 cause_code_type = "dangerous end of queue";
1017 else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN)
1018 cause_code_type = "vehicle breakdown";
1019 else if (cause_code == CauseCodeType().POST_CRASH)
1020 cause_code_type = "post crash";
1021 else if (cause_code == CauseCodeType().HUMAN_PROBLEM)
1022 cause_code_type = "human problem";
1023 else if (cause_code == CauseCodeType().STATIONARY_VEHICLE)
1024 cause_code_type = "stationary vehicle";
1025 else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING)
1026 cause_code_type = "emergency vehicle approaching";
1027 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE)
1028 cause_code_type = "hazardous location - dangerous curve";
1029 else if (cause_code == CauseCodeType().COLLISION_RISK)
1030 cause_code_type = "collision risk";
1031 else if (cause_code == CauseCodeType().SIGNAL_VIOLATION)
1032 cause_code_type = "signal violation";
1033 else if (cause_code == CauseCodeType().DANGEROUS_SITUATION)
1034 cause_code_type = "dangerous situation";
1035
1036 return cause_code_type;
1037 } else {
1038 throw std::invalid_argument("SituationContainer is not present!");
1039 }
1040}
1041
1051 if (denm.denm.situation_is_present) {
1054 std::string sub_cause_code_type = "undefined";
1055 if (cause_code == CauseCodeType().TRAFFIC_CONDITION) {
1056 if (sub_cause_code == 0)
1057 sub_cause_code_type = "unavailable";
1058 else if (sub_cause_code == 1)
1059 sub_cause_code_type = "not defined";
1060 else if (sub_cause_code == 2)
1061 sub_cause_code_type = "traffic jam slowly increasing";
1062 else if (sub_cause_code == 3)
1063 sub_cause_code_type = "traffic jam increasing";
1064 else if (sub_cause_code == 4)
1065 sub_cause_code_type = "traffic jam strongly increasing";
1066 else if (sub_cause_code == 5)
1067 sub_cause_code_type = "traffic stationary";
1068 else if (sub_cause_code == 6)
1069 sub_cause_code_type = "traffic jam slightly decreasing";
1070 else if (sub_cause_code == 7)
1071 sub_cause_code_type = "traffic jam decreasing";
1072 else if (sub_cause_code == 8)
1073 sub_cause_code_type = "traffic jam strongly decreasing";
1074 } else if (cause_code == CauseCodeType().ACCIDENT) {
1075 if (sub_cause_code == 0)
1076 sub_cause_code_type = "unavailable";
1077 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
1078 sub_cause_code_type = "not defined";
1079 else if (sub_cause_code == 8)
1080 sub_cause_code_type = "assistance requested (e-Call)";
1081 } else if (cause_code == CauseCodeType().ROADWORKS) {
1082 if (sub_cause_code == 0)
1083 sub_cause_code_type = "unavailable";
1084 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
1085 sub_cause_code_type = "not defined";
1086 else if (sub_cause_code == 4)
1087 sub_cause_code_type = "short-term stationary roadworks";
1088 else if (sub_cause_code == 5)
1089 sub_cause_code_type = "street cleaning";
1090 else if (sub_cause_code == 6)
1091 sub_cause_code_type = "winter service";
1092 } else if (cause_code == CauseCodeType().IMPASSABILITY)
1093 sub_cause_code_type = "not defined";
1094 else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_ADHESION) {
1095 if (sub_cause_code == 0)
1096 sub_cause_code_type = "unavailable";
1097 else if (sub_cause_code >= 1 && sub_cause_code <= 10)
1098 sub_cause_code_type = "not defined";
1099 } else if (cause_code == CauseCodeType().AQUAPLANNNING)
1100 sub_cause_code_type = "not defined";
1101 else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_SURFACE_CONDITION) {
1102 if (sub_cause_code == 0)
1103 sub_cause_code_type = "unavailable";
1104 else if (sub_cause_code >= 1 && sub_cause_code <= 9)
1105 sub_cause_code_type = "not defined";
1106 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_OBSTACLE_ON_THE_ROAD) {
1107 if (sub_cause_code == 0)
1108 sub_cause_code_type = "unavailable";
1109 else if (sub_cause_code >= 1 && sub_cause_code <= 7)
1110 sub_cause_code_type = "not defined";
1111 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_ANIMAL_ON_THE_ROAD) {
1112 if (sub_cause_code == 0)
1113 sub_cause_code_type = "unavailable";
1114 else if (sub_cause_code >= 1 && sub_cause_code <= 4)
1115 sub_cause_code_type = "not defined";
1116 } else if (cause_code == CauseCodeType().HUMAN_PRESENCE_ON_THE_ROAD) {
1117 if (sub_cause_code == 0)
1118 sub_cause_code_type = "unavailable";
1119 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
1120 sub_cause_code_type = "not defined";
1121 } else if (cause_code == CauseCodeType().WRONG_WAY_DRIVING) {
1122 if (sub_cause_code == 0)
1123 sub_cause_code_type = "unavailable";
1124 else if (sub_cause_code == 1)
1125 sub_cause_code_type = "vehicle driving in wrong lane";
1126 else if (sub_cause_code == 2)
1127 sub_cause_code_type = "vehicle driving in wrong driving direction";
1128 } else if (cause_code == CauseCodeType().RESCUE_AND_RECOVERY_WORK_IN_PROGRESS) {
1129 if (sub_cause_code == 0)
1130 sub_cause_code_type = "unavailable";
1131 else if (sub_cause_code >= 1 && sub_cause_code <= 5)
1132 sub_cause_code_type = "not defined";
1133 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_EXTREME_WEATHER_CONDITION) {
1134 if (sub_cause_code == 0)
1135 sub_cause_code_type = "unavailable";
1136 else if (sub_cause_code >= 1 && sub_cause_code <= 6)
1137 sub_cause_code_type = "not defined";
1138 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_VISIBILITY) {
1139 if (sub_cause_code == 0)
1140 sub_cause_code_type = "unavailable";
1141 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
1142 sub_cause_code_type = "not defined";
1143 } else if (cause_code == CauseCodeType().ADVERSE_WEATHER_CONDITION_PRECIPITATION) {
1144 if (sub_cause_code == 0)
1145 sub_cause_code_type = "unavailable";
1146 else if (sub_cause_code >= 1 && sub_cause_code <= 3)
1147 sub_cause_code_type = "not defined";
1148 } else if (cause_code == CauseCodeType().SLOW_VEHICLE) {
1149 if (sub_cause_code == 0)
1150 sub_cause_code_type = "unavailable";
1151 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
1152 sub_cause_code_type = "not defined";
1153 } else if (cause_code == CauseCodeType().DANGEROUS_END_OF_QUEUE) {
1154 if (sub_cause_code == 0)
1155 sub_cause_code_type = "unavailable";
1156 else if (sub_cause_code >= 1 && sub_cause_code <= 8)
1157 sub_cause_code_type = "not defined";
1158 } else if (cause_code == CauseCodeType().VEHICLE_BREAKDOWN) {
1159 if (sub_cause_code == 0)
1160 sub_cause_code_type = "unavailable";
1161 else if (sub_cause_code == 1)
1162 sub_cause_code_type = "lack of fuel";
1163 else if (sub_cause_code == 2)
1164 sub_cause_code_type = "lack of battery";
1165 else if (sub_cause_code == 3)
1166 sub_cause_code_type = "engine problem";
1167 else if (sub_cause_code == 4)
1168 sub_cause_code_type = "transmission problem";
1169 else if (sub_cause_code == 5)
1170 sub_cause_code_type = "engine cooling problem";
1171 else if (sub_cause_code == 6)
1172 sub_cause_code_type = "braking system problem";
1173 else if (sub_cause_code == 7)
1174 sub_cause_code_type = "steering problem";
1175 else if (sub_cause_code == 8)
1176 sub_cause_code_type = "tyre puncture";
1177 } else if (cause_code == CauseCodeType().POST_CRASH) {
1178 if (sub_cause_code == 0)
1179 sub_cause_code_type = "unavailable";
1180 else if (sub_cause_code == 1)
1181 sub_cause_code_type = "accident without e-Call triggered";
1182 else if (sub_cause_code == 2)
1183 sub_cause_code_type = "accident with e-Call manually triggered";
1184 else if (sub_cause_code == 3)
1185 sub_cause_code_type = "accident with e-Call automatical triggered";
1186 else if (sub_cause_code == 4)
1187 sub_cause_code_type = "accident with e-Call triggered without a possible access to a cell network";
1188 } else if (cause_code == CauseCodeType().HUMAN_PROBLEM) {
1189 if (sub_cause_code == 0)
1190 sub_cause_code_type = "unavailable";
1191 else if (sub_cause_code == 1)
1192 sub_cause_code_type = "glycaemia problem";
1193 else if (sub_cause_code == 2)
1194 sub_cause_code_type = "heart problem";
1195 } else if (cause_code == CauseCodeType().STATIONARY_VEHICLE) {
1196 if (sub_cause_code == 0)
1197 sub_cause_code_type = "unavailable";
1198 else if (sub_cause_code == 1)
1199 sub_cause_code_type = "human problem";
1200 else if (sub_cause_code == 2)
1201 sub_cause_code_type = "vehicle breakdown";
1202 else if (sub_cause_code == 3)
1203 sub_cause_code_type = "post crash";
1204 else if (sub_cause_code == 4)
1205 sub_cause_code_type = "public transport stop";
1206 else if (sub_cause_code == 5)
1207 sub_cause_code_type = "carrying dangerous goods";
1208 } else if (cause_code == CauseCodeType().EMERGENCY_VEHICLE_APPROACHING) {
1209 if (sub_cause_code == 0)
1210 sub_cause_code_type = "unavailable";
1211 else if (sub_cause_code == 1)
1212 sub_cause_code_type = "emergency vehicle approaching";
1213 else if (sub_cause_code == 2)
1214 sub_cause_code_type = "prioritized vehicle approaching";
1215 } else if (cause_code == CauseCodeType().HAZARDOUS_LOCATION_DANGEROUS_CURVE) {
1216 if (sub_cause_code == 0)
1217 sub_cause_code_type = "unavailable";
1218 else if (sub_cause_code == 1)
1219 sub_cause_code_type = "dangerous left turn curve";
1220 else if (sub_cause_code == 2)
1221 sub_cause_code_type = "dangerous right turn curve";
1222 else if (sub_cause_code == 3)
1223 sub_cause_code_type = "multiple curves starting with unknown turning direction";
1224 else if (sub_cause_code == 4)
1225 sub_cause_code_type = "multiple curves starting with left turn";
1226 else if (sub_cause_code == 5)
1227 sub_cause_code_type = "multiple curves starting with right turn";
1228 } else if (cause_code == CauseCodeType().COLLISION_RISK) {
1229 if (sub_cause_code == 0)
1230 sub_cause_code_type = "unavailable";
1231 else if (sub_cause_code == 1)
1232 sub_cause_code_type = "longitudinal collision risk";
1233 else if (sub_cause_code == 2)
1234 sub_cause_code_type = "crossing collision risk";
1235 else if (sub_cause_code == 3)
1236 sub_cause_code_type = "lateral collision risk";
1237 else if (sub_cause_code == 4)
1238 sub_cause_code_type = "collision risk involving vulnerable road user";
1239 } else if (cause_code == CauseCodeType().SIGNAL_VIOLATION) {
1240 if (sub_cause_code == 0)
1241 sub_cause_code_type = "unavailable";
1242 else if (sub_cause_code == 1)
1243 sub_cause_code_type = "stop sign violation";
1244 else if (sub_cause_code == 2)
1245 sub_cause_code_type = "traffic light violation";
1246 else if (sub_cause_code == 3)
1247 sub_cause_code_type = "turning regulation violation";
1248 } else if (cause_code == CauseCodeType().DANGEROUS_SITUATION) {
1249 if (sub_cause_code == 0)
1250 sub_cause_code_type = "unavailable";
1251 else if (sub_cause_code == 1)
1252 sub_cause_code_type = "emergency electronic break lights";
1253 else if (sub_cause_code == 2)
1254 sub_cause_code_type = "pre-crash system activated";
1255 else if (sub_cause_code == 3)
1256 sub_cause_code_type = "ESP (electronic stability program) activated";
1257 else if (sub_cause_code == 4)
1258 sub_cause_code_type = "ABS (anti-lock breaking system) activated";
1259 else if (sub_cause_code == 5)
1260 sub_cause_code_type = "AEB (automatic emergency breaking) activated";
1261 else if (sub_cause_code == 6)
1262 sub_cause_code_type = "break warning activated";
1263 else if (sub_cause_code == 7)
1264 sub_cause_code_type = "collision risk warning activated";
1265 }
1266 return sub_cause_code_type;
1267 } else {
1268 throw std::invalid_argument("SituationContainer is not present!");
1269 }
1270}
1271
1279 return getBitString(driving_lane_status.value, driving_lane_status.bits_unused);
1280}
1281
1289 return getBitString(light_bar_siren_in_use.value, light_bar_siren_in_use.bits_unused);
1290}
1291
1292}
Getter functions for the ETSI ITS Common Data Dictionary (CDD) v1.3.1.
std::vector< bool > getLightBarSirenInUse(const LightBarSirenInUse &light_bar_siren_in_use)
Get the Lightbar Siren In Use in form of bool vector.
std::vector< bool > getDrivingLaneStatus(const DrivingLaneStatus &driving_lane_status)
Get the Driving Lane Status in form of bool vector.
double getHeading(const DENM &denm)
Get the Heading object.
std::string getCauseCodeType(const DENM &denm)
Get the Cause Code Type object.
std::vector< bool > getBitString(const std::vector< uint8_t > &buffer, const int bits_unused)
Get a Bit String in form of bool vector.
gm::PointStamped getUTMPosition(const T &reference_position, int &zone, bool &northp)
Get the UTM Position defined by the given ReferencePosition.
double getHeadingConfidence(const DENM &denm)
Get the Heading confidence.
double getHeadingCDD(const Heading &heading)
Get the Heading value.
double getLongitude(const Longitude &longitude)
Get the Longitude value.
double getHeadingConfidenceCDD(const Heading &heading)
Get the Heading value.
uint8_t getStationType(const DENM &denm)
Get the stationType object.
uint8_t getSubCauseCode(const DENM &denm)
Get the Sub Cause Code object.
bool getIsSpeedPresent(const DENM &denm)
Get the IsSpeedPresent object.
std::string getSubCauseCodeType(const DENM &denm)
Get the Sub Cause Code Type object.
double getLatitude(const Latitude &latitude)
Get the Latitude value.
uint8_t getCauseCode(const DENM &denm)
Get the Cause Code object.
double getAltitude(const Altitude &altitude)
Get the Altitude value.
bool getIsHeadingPresent(const DENM &denm)
Get the IsHeadingPresent object.
double getSpeed(const Speed &speed)
Get the vehicle speed.