summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormvglasow <michael -at- vonglasow.com>2018-10-06 21:52:34 +0200
committermvglasow <michael -at- vonglasow.com>2018-10-06 21:52:34 +0200
commitf4eca99cb392f114fd2aa98fba4541543ff31bae (patch)
treebeefef929497de633c3a141257bfc5557f010b08
parentbcff3d35a95b35aab96e16bf3cbebd5e9e04afc7 (diff)
downloadnavit-f4eca99cb392f114fd2aa98fba4541543ff31bae.tar.gz
Add:traffic:Add support for lane closures and contraflow
Signed-off-by: mvglasow <michael -at- vonglasow.com>
-rw-r--r--navit/traffic.c28
-rw-r--r--navit/traffic.h6
2 files changed, 34 insertions, 0 deletions
diff --git a/navit/traffic.c b/navit/traffic.c
index 46895eb17..eee544518 100644
--- a/navit/traffic.c
+++ b/navit/traffic.c
@@ -3294,6 +3294,18 @@ static struct seg_data * traffic_message_parse_events(struct traffic_message * t
if (speed_factor > 30)
speed_factor = 30;
break;
+ case event_restriction_lane_blocked:
+ case event_restriction_lane_closed:
+ case event_restriction_reduced_lanes:
+ /* Assume speed is reduced proportionally to number of lanes, and never higher than 80 */
+ speed = 80;
+ /* TODO determine actual numbers of lanes */
+ speed_factor = 67;
+ break;
+ case event_restriction_contraflow:
+ /* Contraflow: assume 80, unless explicitly specified */
+ speed = 80;
+ break;
default:
break;
}
@@ -4353,6 +4365,8 @@ enum event_type event_type_new(char * string) {
return event_restriction_carriageway_blocked;
if (!g_ascii_strcasecmp(string, "RESTRICTION_CARRIAGEWAY_CLOSED"))
return event_restriction_carriageway_closed;
+ if (!g_ascii_strcasecmp(string, "RESTRICTION_CONTRAFLOW"))
+ return event_restriction_contraflow;
if (!g_ascii_strcasecmp(string, "RESTRICTION_CLOSED"))
return event_restriction_closed;
if (!g_ascii_strcasecmp(string, "RESTRICTION_CLOSED_AHEAD"))
@@ -4363,6 +4377,10 @@ enum event_type event_type_new(char * string) {
return event_restriction_entry_reopened;
if (!g_ascii_strcasecmp(string, "RESTRICTION_INTERMITTENT_CLOSURES"))
return event_restriction_intermittent_closures;
+ if (!g_ascii_strcasecmp(string, "RESTRICTION_LANE_BLOCKED"))
+ return event_restriction_lane_blocked;
+ if (!g_ascii_strcasecmp(string, "RESTRICTION_LANE_CLOSED"))
+ return event_restriction_lane_closed;
if (!g_ascii_strcasecmp(string, "RESTRICTION_OPEN"))
return event_restriction_open;
if (!g_ascii_strcasecmp(string, "RESTRICTION_RAMP_BLOCKED"))
@@ -4371,6 +4389,8 @@ enum event_type event_type_new(char * string) {
return event_restriction_ramp_closed;
if (!g_ascii_strcasecmp(string, "RESTRICTION_RAMP_REOPENED"))
return event_restriction_ramp_reopened;
+ if (!g_ascii_strcasecmp(string, "RESTRICTION_REDUCED_LANES"))
+ return event_restriction_reduced_lanes;
if (!g_ascii_strcasecmp(string, "RESTRICTION_REOPENED"))
return event_restriction_reopened;
if (!g_ascii_strcasecmp(string, "RESTRICTION_ROAD_CLEARED"))
@@ -4461,6 +4481,8 @@ const char * event_type_to_string(enum event_type this_) {
return "RESTRICTION_CLOSED";
case event_restriction_closed_ahead:
return "RESTRICTION_CLOSED_AHEAD";
+ case event_restriction_contraflow:
+ return "RESTRICTION_CONTRAFLOW";
case event_restriction_entry_blocked:
return "RESTRICTION_ENTRY_BLOCKED";
case event_restriction_entry_reopened:
@@ -4471,6 +4493,10 @@ const char * event_type_to_string(enum event_type this_) {
return "RESTRICTION_EXIT_REOPENED";
case event_restriction_intermittent_closures:
return "RESTRICTION_INTERMITTENT_CLOSURES";
+ case event_restriction_lane_blocked:
+ return "RESTRICTION_LANE_BLOCKED";
+ case event_restriction_lane_closed:
+ return "RESTRICTION_LANE_CLOSED";
case event_restriction_open:
return "RESTRICTION_OPEN";
case event_restriction_ramp_blocked:
@@ -4479,6 +4505,8 @@ const char * event_type_to_string(enum event_type this_) {
return "RESTRICTION_RAMP_CLOSED";
case event_restriction_ramp_reopened:
return "RESTRICTION_RAMP_REOPENED";
+ case event_restriction_reduced_lanes:
+ return "RESTRICTION_REDUCED_LANES";
case event_restriction_reopened:
return "RESTRICTION_REOPENED";
case event_restriction_road_cleared:
diff --git a/navit/traffic.h b/navit/traffic.h
index 494250001..f1c8f8b34 100644
--- a/navit/traffic.h
+++ b/navit/traffic.h
@@ -131,6 +131,7 @@ enum event_type {
* otherwise indicated in supplementary information) */
event_restriction_carriageway_closed, /*!< Carriageway closed (main carriageway, unless
* otherwise indicated in supplementary information) */
+ event_restriction_contraflow, /*!< Contraflow */
event_restriction_closed, /*!< Closed until `q_time` (refers to the entire
* road; separate codes exist for closures of
* individual lanes or carriageways) */
@@ -141,10 +142,15 @@ enum event_type {
event_restriction_exit_blocked, /*!< `q_int` th exit slip road blocked */
event_restriction_exit_reopened, /*!< Exit reopened */
event_restriction_intermittent_closures, /*!< Intermittent short term closures */
+ event_restriction_lane_blocked, /*!< `q:int` lanes blocked */
+ event_restriction_lane_closed, /*!< `q:int` lanes closed */
event_restriction_open, /*!< Open */
event_restriction_ramp_blocked, /*!< Ramps blocked */
event_restriction_ramp_closed, /*!< Ramps closed */
event_restriction_ramp_reopened, /*!< Ramps reopened */
+ event_restriction_reduced_lanes, /*!< Carriageway reduced from `q_ints[1]` lanes to `q_int[0]`
+ * lanes (quantifiers are currently not implemented for this
+ * event type) */
event_restriction_reopened, /*!< Reopened */
event_restriction_road_cleared, /*!< Road cleared */
event_restriction_single_alternate_line_traffic, /*!< Single alternate line traffic (because the