From 6f4957aeb6befbfeca2524e402c7a7325187f1ba Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 May 2020 13:14:36 -0400 Subject: [PATCH 01/25] Clarify each lane entry repesents a single lane --- feed-content/data-tables/lanes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feed-content/data-tables/lanes.md b/feed-content/data-tables/lanes.md index 79ad5b1d..76b9bf53 100644 --- a/feed-content/data-tables/lanes.md +++ b/feed-content/data-tables/lanes.md @@ -1,7 +1,7 @@ # lanes **Optional** -This table identifies and describes individual lanes within a road event. +This table identifies and describes individual lanes within a road event. Each entry in this table represents a single lane. This table is related to the [road_events](/feed-content/data-tables/road_events.md) table by the foreign key road_event_id. For every record in the road_event table there may exist one or more record(s) in the lanes table. From ecee2f951e55063590975d06a94288d04018e29f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 May 2020 13:17:05 -0400 Subject: [PATCH 02/25] Remove comment about not numbering shoulders --- feed-content/data-tables/lanes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feed-content/data-tables/lanes.md b/feed-content/data-tables/lanes.md index 76b9bf53..d2b14997 100644 --- a/feed-content/data-tables/lanes.md +++ b/feed-content/data-tables/lanes.md @@ -13,6 +13,6 @@ Data Name|Data Type|Description|Conformance|Notes lane_id|ID|Identifies the lane_info record|Required|Primary key [road_event_id](/data-tables/road_events.md)|ID|Identifies the road event to which a lane information is related.|Required|Foreign key lane_edge_reference|Enumeration; Text|The roadside edge from which lanes are assigned numbers.|Conditional: required if lane_number is not null|Counting begins from the edge of the improved surface. See [Lane Edge Reference Enumerated Type](/feed-content/enumerated-types/lane_edge_reference.md) -lane_number|Non-negative Integer|The number assigned to a lane (not including shoulders)|Optional|Assigned by counting from right or left edge of the improved surface. Counting begins from the edge indicated in the lane_edge_reference field. Useful for text to voice translation. +lane_number|Non-negative Integer|The number assigned to a lane |Optional|Assigned by counting from right or left edge of the improved surface. Counting begins from the edge indicated in the lane_edge_reference field. Useful for text to voice translation. lane_status|Enumeration; Text|Status of the lane for the traveling public|Required|Allowed values: open, closed, shift-left, shift-right, merge-right, merge-left, alternating-one-way. See [Lane Status Enumerated Type](/feed-content/enumerated-types/lane_status.md) lane_type|Enumeration; Text|An indication of the type of lane or shoulder|Required|See [Lane Type Enumerated Type](/feed-content/enumerated-types/derived-from-its-standards/lane_type.md) From 0591fa5c420922d9bb3c06d84347ca6a28813ece Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 May 2020 14:14:03 -0400 Subject: [PATCH 03/25] Remove plural lane types, cleanup --- .../derived-from-its-standards/lane_type.md | 149 +++++++++--------- 1 file changed, 72 insertions(+), 77 deletions(-) diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index 18135e66..8f690745 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -1,84 +1,79 @@ # Lane Type -*Note:* LaneRoadway is imported into TMDD from SAE 2540 (ITIS Standard) +*Note:* The LaneRoadway enumeration is imported into TMDD from SAE 2540 (ITIS Standard) ## Enumeration -TMDD LaneRoadway Enumeration | Lane Type Enumeration | Description +WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description --- | --- | --- -**all-roadways (8192)** | all | Indicates that road all lanes are open or
closed; if all lanes are closed then road is
effectively closed -**through-lanes (8193)** | | Not used -**left-lane (8194)** | left-lane | The left most lane (inside lane) -**right-lane (8195)** | right-lane | The right most lane (outside lane) -| | left-2-lanes | the two most left lanes -| | left-3-lanes | The three most left lanes -| | right-2-lanes | The two most right lanes -| | right-3-lanes | The three most right lanes -**center-lane (8196)** | | Not used -**middle-lanes (8197)** | middle-lane | The center most lane where are a total of
an odd number of lanes -**middle-two-lanes (8198)** | middle-two-lanes | The center most lanes where are a total
of an even number of lanes -**right-turning-lanes (8199)** | right-turning-lane | A right lane where right turns are permissible -**left-turning-lanes (8200)** | left-turning-lane | A left lane where left turns are permissible -**upper-deck-lanes (8201)** | | Note used -**lower-deck-lanes (8202)** | | Note used -**reversible-lanes (8203)** | | Note used -**right-exit-lanes (8204)** | right-exit-lane | The right lane where the lane provides an
egress with a ramp -**left-exit-lanes (8205)** | left-exit-lane | The left lane where the lanes where the
lane provides an egress with a ramp -**right-merging-lanes (8206)** | right-merging-lane | The right lane where the lane ends with a
gradual merge with the second most lane -**left-merging-lanes (8207)** | left-merging-lane | The left lane where the lanes ends by a
gradual merge with the second most left
lane -**right-exit-ramp (8208)** | right-exit-ramp | The (first) exit ramp with an egress on the
right in the direction of flow at an
interchange -**right-second-exit-ramp (8209)** | right-second-exit-ramp | The second exit ramp with an egress on
the right in the direction of flow at an
interchange -**right-entrance-ramp (8210)** | right-entrance-ramp | The (first) entrance ramp with an ingress
on the right in the direction of flow at an
interchange -**right-second-entrance-ramp (8211)** | right-second-entrance-ramp | The second entrance ramp with an
ingress on the right in the direction of flow
at an interchange -**left-exit_ramp (8212)** | left-exit-ramp | The (first) exit ramp with an egress on the
left in the direction of flow at an
interchange -**left-second-exit-ramp (8213)** | left-second-exit-ramp | The second exit ramp with an egress on
the left in the direction of flow at an
interchange -**left-entrance-ramp (8214)** | left-entrance-ramp | The (first) entrance ramp with an ingress
on the left in the direction of flow at an
interchange -**left-second-entrance-ramp (8215)** | left-second-entrance-ramp | The second entrance ramp with an
ingress on the left in the direction of flow
at an interchange -**escape-ramp (8216)** | | Not used -**hard-shoulder (8217)** | | Not used -**soft-shoulder (8218)** | | Not used -**right-shoulder (8219)** | | Not used -**left-shoulder (8220)** | | Not used -**median (8221)** | | Not used -**sidewalk (8222)** | sidewalk | The sidewalk or pedestrian way -**highways (8223)** | | Not used -**right-hand-parallel-lanes (8224)** | | Not used -**left-hand-parallel-lanes (8225)** | | Not used -**connecting-lanes (8226)** | | Not used -**express-lanes (8227)** | | Not used -**local-lanes (8228)** | | Not used -**toll-lanes (8229)** | | Not used -**electronic-toll-lanes (8230)** | | Note used -**toll-plaza (8231)** | | Not used -**inspection-lane (8232)** | | Not used -**hov-lanes (8233)** | | Not used -**bus-lanes (8234)** | | Not used -**carpool-lanes (8235)** | | Not used -**truck-lanes (8236)** | | Not used -**emergency-lanes (8237)** | | Not used -**passing-lanes (8238)** | | Not used -**climbing-lanes (8239)** | | Not used -**slow-lane (8240)** | | Not used -**service-road (8240)** | | Not used -**service-road (8241)** | | Not used -**cycle-lane (8242)** | | Not used -**tracks (8243)** | | Not used -**bridge (8244)** | | Not used -**overpass (8245)** | | Not used -**elevated-lanes (8246)** | | Not used -**underpass (8247)** | | Not used -**tunnel (8248)** | | Not used -**all-exit-lanes (8249)** | | Not used -**all-entry-lanes (8250)** | | Not used -**either-shoulder (8251)** | | Not used -**shoulder-work (8252)** | | Not used -| | bike-lane | Bike lane -| | none | No lanes (open or closed) -| | unknown | Unknown which lane is referenced -| | alternating-flow-lane | Signal or flagger controls lanes flow -**right-shoulder (8219)** | outside | The outer lane or the right most lane -**left-shoulder (8220)** | inside | The inner lane or the left most lane -| | both | Both inside and outside shoulders -| | none | Not needed if field is optional; this is the default
value -| | unknown | Unknown if shoulder is open, closed or not existing +**left-lane** | left-lane (8194) | The left most lane +**right-lane** | right-lane (8195) | right-lane | The right most lane +**middle-lane** | middle-lanes (8197) | The center most lane where the total number of lanes is odd +**middle-two-lanes** | middle-two-lanes (8198) | One of the center most lanes where the total number of lanes is even +**right-turning-lane** | right-turning-lanes (8199) | A right lane where right turns are permissible +**left-turning-lane** | left-turning-lanes (8200) | A left lane where left turns are permissible +**right-exit-lane** | right-exit-lanes (8204) | The right lane where the lane provides an egress with a ramp +**left-exit-lane** | left-exit-lanes (8205) | The left lane where the lanes where the lane provides an egress with a ramp +**right-merging-lane** | right-merging-lanes (8206) | The right lane where the lane ends with a gradual merge with the second most lane +**left-merging-lane** | left-merging-lanes (8207) | The left lane where the lanes ends by a gradual merge with the second most left lane +**right-exit-ramp** | right-exit-ramp (8208) | The (first) exit ramp with an egress on the right in the direction of flow at an interchange +**right-second-exit-ramp** | right-second-exit-ramp (8209) | The second exit ramp with an egress on the right in the direction of flow at an interchange +**right-entrance-ramp** | right-entrance-ramp (8210) | The (first) entrance ramp with an ingress on the right in the direction of flow at an interchange +**right-second-entrance-ramp** | right-second-entrance-ramp (8211) | The second entrance ramp with an ingress on the right in the direction of flow at an interchange +**left-exit-ramp** | left-exit_ramp (8212) | The (first) exit ramp with an egress on the left in the direction of flow at an interchange +**left-second-exit-ramp** | left-second-exit-ramp (8213) | The second exit ramp with an egress on the left in the direction of flow at an interchange +**left-entrance-ramp** | left-entrance-ramp (8214) | The (first) entrance ramp with an ingress on the left in the direction of flow at an interchange +**left-second-entrance-ramp** | left-second-entrance-ramp (8215) | The second entrance ramp with an ingress on the left in the direction of flow at an interchange +**sidewalk** | sidewalk (8222) | The sidewalk or pedestrian way +**bike-lane** | cycle-lane (8242) | Bike lane +**alternating-flow-lane** | | Signal or flagger controls lanes flow +**right-shoulder** | right-shoulder (8219) | The outer shoulder or the right most shoulder +**left-shoulder** | left-shoulder (8220) | The inner shoulder or the left most shoulder + +The following values from the TMDD LaneRoadway Enumeration are not used in the WZDx specification: + +``` +all-roadways (8192) +through-lanes (8193) +center-lane (8196) +upper-deck-lanes (8201) +lower-deck-lanes (8202) +reversible-lanes (8203) +escape-ramp (8216) +hard-shoulder (8217) +soft-shoulder (8218) +right-shoulder (8219) +left-shoulder (8220) +median (8221) +highways (8223) +right-hand-parallel-lanes (8224) +left-hand-parallel-lanes (8225) +connecting-lanes (8226) +express-lanes (8227) +local-lanes (8228) +toll-lanes (8229) +electronic-toll-lanes (8230) +toll-plaza (8231) +inspection-lane (8232) +hov-lanes (8233) +bus-lanes (8234) +carpool-lanes (8235) +truck-lanes (8236) +emergency-lanes (8237) +passing-lanes (8238) +climbing-lanes (8239) +slow-lane (8240) +service-road (8240) +service-road (8241) +tracks (8243) +bridge (8244) +overpass (8245) +elevated-lanes (8246) +underpass (8247) +tunnel (8248) +all-exit-lanes (8249) +all-entry-lanes (8250) +either-shoulder (8251) +shoulder-work (8252) +``` ## Used By The **Lane Type** enumeration is used by the following fields From b23c502fe876dfbdcfbe765f2286b072285a029b Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 May 2020 14:16:42 -0400 Subject: [PATCH 04/25] Update lane types enumeration in JSON schema --- create-feed/schemas/wzdx_v2.0_feed.json | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/create-feed/schemas/wzdx_v2.0_feed.json b/create-feed/schemas/wzdx_v2.0_feed.json index 9a5b3b7c..50e718a0 100644 --- a/create-feed/schemas/wzdx_v2.0_feed.json +++ b/create-feed/schemas/wzdx_v2.0_feed.json @@ -340,13 +340,8 @@ "title": "Lane Type Enumerated Type", "description": "An indication of the type of lane or shoulder", "enum": [ - "all", "left-lane", "right-lane", - "left-2-lanes", - "right-2-lanes", - "left-3-lanes", - "right-3-lanes", "middle-lane", "middle-two-lanes", "right-turning-lane", @@ -365,12 +360,9 @@ "left-second-entrance-ramp", "sidewalk", "bike-lane", - "none", - "unknown", "alternating-flow-lane", - "outside", - "inside", - "both" + "right-shoulder", + "left-shoulder" ] }, "lane_restriction_unit": { From b4a1d53da5624fe6569510dfac399fe8d702d111 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 May 2020 14:26:42 -0400 Subject: [PATCH 05/25] Require lane_number --- create-feed/schemas/wzdx_v2.0_feed.json | 5 +---- feed-content/data-tables/lanes.md | 4 ++-- images/road_event_erd.png | Bin 35849 -> 68736 bytes 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/create-feed/schemas/wzdx_v2.0_feed.json b/create-feed/schemas/wzdx_v2.0_feed.json index 50e718a0..c820077b 100644 --- a/create-feed/schemas/wzdx_v2.0_feed.json +++ b/create-feed/schemas/wzdx_v2.0_feed.json @@ -242,10 +242,7 @@ } } }, - "required": ["lane_status", "lane_type"], - "dependencies": { - "lane_number": ["lane_edge_reference"] - } + "required": ["lane_status", "lane_type", "lane_number", "lane_edge_reference"] }, "lane_restriction": { "title": "Lane Restriction", diff --git a/feed-content/data-tables/lanes.md b/feed-content/data-tables/lanes.md index d2b14997..b460a91c 100644 --- a/feed-content/data-tables/lanes.md +++ b/feed-content/data-tables/lanes.md @@ -12,7 +12,7 @@ Data Name|Data Type|Description|Conformance|Notes -|-|-|-|-| lane_id|ID|Identifies the lane_info record|Required|Primary key [road_event_id](/data-tables/road_events.md)|ID|Identifies the road event to which a lane information is related.|Required|Foreign key -lane_edge_reference|Enumeration; Text|The roadside edge from which lanes are assigned numbers.|Conditional: required if lane_number is not null|Counting begins from the edge of the improved surface. See [Lane Edge Reference Enumerated Type](/feed-content/enumerated-types/lane_edge_reference.md) -lane_number|Non-negative Integer|The number assigned to a lane |Optional|Assigned by counting from right or left edge of the improved surface. Counting begins from the edge indicated in the lane_edge_reference field. Useful for text to voice translation. +lane_edge_reference | Enumeration; Text | The roadside edge from which lanes are assigned numbers. | Required | See [Lane Edge Reference Enumerated Type](/feed-content/enumerated-types/lane_edge_reference.md) +lane_number | Non-negative Integer | The number assigned to a lane | Required | Assigned by counting from right or left edge of the improved surface. Counting begins from the edge indicated in the lane_edge_reference field. Useful for text to voice translation. lane_status|Enumeration; Text|Status of the lane for the traveling public|Required|Allowed values: open, closed, shift-left, shift-right, merge-right, merge-left, alternating-one-way. See [Lane Status Enumerated Type](/feed-content/enumerated-types/lane_status.md) lane_type|Enumeration; Text|An indication of the type of lane or shoulder|Required|See [Lane Type Enumerated Type](/feed-content/enumerated-types/derived-from-its-standards/lane_type.md) diff --git a/images/road_event_erd.png b/images/road_event_erd.png index 2829096d3db5deb79d2ffa88821bf286a0569f72..d7bcf8ff50e1b5945a3321b07df4c7c6a887714f 100644 GIT binary patch literal 68736 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%0DZE%k=J<#qVmJ{*(jRDv`H|A#DaO9pT8x% z4wuK-``MS}vNwnKO~otu7tUsC>-lJv9yFw-5LRlrl4<|kdGXe3;`}VlIeL`;mD!|c z$@F`|+KB!`6#Vn#sHJ`O+_PT2Nfj@lNmV7=?L#X2yR^5};RE40KsY_5S+xX)KVV_T`DwtBK^>quv28Cr zZ(?FAkPQ(cDP2m(V?A7H z?^lOfq)g1RXesbap`U`IitySH4%^VrhRT>C&OAq(1oISfOC@x(_L;zf$Rs z5C-+SJ}=sGtD4+nq*n)5vZW>3XBUz$C8Bq+J?guUu$=8s(xQ=^ziTEcXbFD?L10oo zEK8y#{<+>i$zNaj5DX%`ln022!@_6)PjH-A){UNAPYOi$W9I%L*XZ4gp;P^e9T7(7 z%X?E3%mLJePrz$gVrf-js8s!r!3mz>WuuOVeaTz&V?i^jsnt5C2loe>;+)JLs=Tvi z8!DH^-Mt~eW&+{eW!ghWK)u(B4UP( z<9cXk(#(LN&6N779qVE}Hi6}PKk@dR&?Y@oKmN-dIk3+5c?b`KD8tYv-~qE0jnRa| zcm6@6Z}WRyMwc>&RoYknX}v(h*{TrNnrfPRNrhD-bbDiRb|DIbdg^mmoTI}Bn;Yu_ znl(ka8*ZGD%Hk&@@#xisgvayi@b(9Q!LldjhV_s3OgwCL_lIOR%6xM<%f z7JRsspA!1kD>bXX!03i!7-*=zi6?_Qs_EOH_-tbF#oh7!K~5G^XKh5j#EBQfz5dsD z@*Yp|V!e76C+uYBFd}(~ef11Z3UTS^NObv~wzFQrrZzeyBWylmV12t?YTV}M4#BFJ_|H1CD9JaXf!jlo6K7YUFSM=qf<_1P~&38g6$N^9DSEEvsjc`s;_3d*G zJsLInbRV4DcgzqH1V=G!Z_;isR_;)vr()0##ZtzQH!xlI0<5{EMSI>|r8aYq=+wQ9 z@gk89LsSLQ(pYv$5v!b2O-w!}&hbs?(L&u^$6WmblXe7+LZ}XQ4@cCB_Y;@ZnERvh zCC9sy@?iopp2?ynBa<8Q4E&m=jUT*rgN3@ImF+KoLI6@8hq~yoYckh(@-cI*V*fsE z<=$Jho#;sCK^)297jVIH2t=GycFuT0xG#hUPgKJoy&J;kUK9iU(ahs*C*qz#PjT|n z>9i_5BOT=yNb#%URqy=sZIMUaA?%{zsx>Q9XBL^lH3rd)*LO~REY6OnWfZ>NveL)> z8&V2}LaQyeXszWyGl_Y0)7&Ca)3?An^{?$cZiEl$k@2&rOf!Vnd)b?2;XXP~x>=)~ z)<4mlEfnZe#G2d@;sKJ{7&*kV)hl~3<{xtqst^YFAsNNJ@v=|2ofn2!Gb_WW;2Vuk^`8Vq7zBbn}EJ{q2@)p9&lvTPhx5Z242lWCjjbnFkpW?MwLs$H} zt;xAEh@`QWn}mDgX}!l&ddiEAzvHi^JqAzOtMui|o!&3Lf!Zje;+_!YG%#c;wStQ6 zUJ*{zZt&rY^L;IuSE?f^-xOC^4mXJTc0YR8+jphU`P{+O|NY_l9^!*x;(NNqa;NvG zy}Mb7(orvu7s)+lm|x0V6ict=sISt{SPc#As2!* zK2cGcziAIsbkxp{ou#$)H!Dj@N=lY^T|3@yR;#8#7+5TXg?cr``3LQkjpqeo=q}~y zxk&@Z)aon)$G-ml?vas^f{{0CwOBrsHZ)5U;YYWrhvzS3-R7L9ipO#OLx4N1`f3}s z!wtoEX&gvK3^N34vjnzHn2x-}dW@>8tS1#bJz*pa&A=M-U-((o1e1oQ<7&FIFa|rT z(VRPCPtDVzUYeo8^CjZ!rWf-2C>NL$Mi8 zK-JIEd2j$eoERMVlu@+?>(DfRRz{|UEME~5!Z(I|lc9<~mLdf-b;0u~gvmUG{tnSC zYyjpM?tT6cSgrjxrFCHj;JzIR4$l9OjWXb64}s&oti#{Vz#qF#ญl%^QzZ5|` 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%0D*0$PTw3R`K4sW(`4xlg%X>({ln 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 N#Dt^-bDyZY{vYFv>;M1& literal 35849 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 From 4034459f36eff06ff766cb466d1a08233c1a39b0 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 May 2020 15:42:46 -0400 Subject: [PATCH 06/25] Update middle-lane description --- .../enumerated-types/derived-from-its-standards/lane_type.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index 8f690745..e4e64eb2 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -6,8 +6,7 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description --- | --- | --- **left-lane** | left-lane (8194) | The left most lane **right-lane** | right-lane (8195) | right-lane | The right most lane -**middle-lane** | middle-lanes (8197) | The center most lane where the total number of lanes is odd -**middle-two-lanes** | middle-two-lanes (8198) | One of the center most lanes where the total number of lanes is even +**middle-lane** | middle-lanes (8197) | A lane that is not in the direct center or on the inside or outside **right-turning-lane** | right-turning-lanes (8199) | A right lane where right turns are permissible **left-turning-lane** | left-turning-lanes (8200) | A left lane where left turns are permissible **right-exit-lane** | right-exit-lanes (8204) | The right lane where the lane provides an egress with a ramp @@ -24,9 +23,9 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description **left-second-entrance-ramp** | left-second-entrance-ramp (8215) | The second entrance ramp with an ingress on the left in the direction of flow at an interchange **sidewalk** | sidewalk (8222) | The sidewalk or pedestrian way **bike-lane** | cycle-lane (8242) | Bike lane -**alternating-flow-lane** | | Signal or flagger controls lanes flow **right-shoulder** | right-shoulder (8219) | The outer shoulder or the right most shoulder **left-shoulder** | left-shoulder (8220) | The inner shoulder or the left most shoulder +**alternating-flow-lane** | | Signal or flagger controls lanes flow The following values from the TMDD LaneRoadway Enumeration are not used in the WZDx specification: From 0e28ffbf5e3fb590c100d287e6bac9ee3eba74b4 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 May 2020 15:45:16 -0400 Subject: [PATCH 07/25] Typo, remove 'center' --- .../enumerated-types/derived-from-its-standards/lane_type.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index e4e64eb2..bced7233 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -6,7 +6,7 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description --- | --- | --- **left-lane** | left-lane (8194) | The left most lane **right-lane** | right-lane (8195) | right-lane | The right most lane -**middle-lane** | middle-lanes (8197) | A lane that is not in the direct center or on the inside or outside +**middle-lane** | middle-lanes (8197) | A lane that is not the rightmost or leftmost lane **right-turning-lane** | right-turning-lanes (8199) | A right lane where right turns are permissible **left-turning-lane** | left-turning-lanes (8200) | A left lane where left turns are permissible **right-exit-lane** | right-exit-lanes (8204) | The right lane where the lane provides an egress with a ramp From 687a8c9f08d13826d2839ca98d7429dfffc0debb Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 May 2020 15:50:22 -0400 Subject: [PATCH 08/25] Remove 'middle-two-lanes' from JSON schema --- create-feed/schemas/wzdx_v2.0_feed.json | 1 - 1 file changed, 1 deletion(-) diff --git a/create-feed/schemas/wzdx_v2.0_feed.json b/create-feed/schemas/wzdx_v2.0_feed.json index c820077b..2b2af6fd 100644 --- a/create-feed/schemas/wzdx_v2.0_feed.json +++ b/create-feed/schemas/wzdx_v2.0_feed.json @@ -340,7 +340,6 @@ "left-lane", "right-lane", "middle-lane", - "middle-two-lanes", "right-turning-lane", "left-turning-lane", "right-exit-lane", From 6ae88aad450eaef8227c29c50a40320d9cd90c26 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 3 Jun 2020 15:27:25 -0400 Subject: [PATCH 09/25] Move schema changes to draft v3.0 --- create-feed/schemas/wzdx_v2.0_feed.json | 18 +++++++++++++++--- create-feed/schemas/wzdx_v3.0_feed.json | 15 +++------------ 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/create-feed/schemas/wzdx_v2.0_feed.json b/create-feed/schemas/wzdx_v2.0_feed.json index 2b2af6fd..9a5b3b7c 100644 --- a/create-feed/schemas/wzdx_v2.0_feed.json +++ b/create-feed/schemas/wzdx_v2.0_feed.json @@ -242,7 +242,10 @@ } } }, - "required": ["lane_status", "lane_type", "lane_number", "lane_edge_reference"] + "required": ["lane_status", "lane_type"], + "dependencies": { + "lane_number": ["lane_edge_reference"] + } }, "lane_restriction": { "title": "Lane Restriction", @@ -337,9 +340,15 @@ "title": "Lane Type Enumerated Type", "description": "An indication of the type of lane or shoulder", "enum": [ + "all", "left-lane", "right-lane", + "left-2-lanes", + "right-2-lanes", + "left-3-lanes", + "right-3-lanes", "middle-lane", + "middle-two-lanes", "right-turning-lane", "left-turning-lane", "right-exit-lane", @@ -356,9 +365,12 @@ "left-second-entrance-ramp", "sidewalk", "bike-lane", + "none", + "unknown", "alternating-flow-lane", - "right-shoulder", - "left-shoulder" + "outside", + "inside", + "both" ] }, "lane_restriction_unit": { diff --git a/create-feed/schemas/wzdx_v3.0_feed.json b/create-feed/schemas/wzdx_v3.0_feed.json index 70abca1f..7c5a14cf 100644 --- a/create-feed/schemas/wzdx_v3.0_feed.json +++ b/create-feed/schemas/wzdx_v3.0_feed.json @@ -245,7 +245,7 @@ } } }, - "required": ["lane_status", "lane_type"] + "required": ["lane_status", "lane_type", "lane_number"] }, "lane_restriction": { "title": "Lane Restriction", @@ -340,15 +340,9 @@ "title": "Lane Type Enumerated Type", "description": "An indication of the type of lane or shoulder", "enum": [ - "all", "left-lane", "right-lane", - "left-2-lanes", - "right-2-lanes", - "left-3-lanes", - "right-3-lanes", "middle-lane", - "middle-two-lanes", "right-turning-lane", "left-turning-lane", "right-exit-lane", @@ -365,12 +359,9 @@ "left-second-entrance-ramp", "sidewalk", "bike-lane", - "none", - "unknown", "alternating-flow-lane", - "outside", - "inside", - "both" + "right-shoulder", + "left-shoulder" ] }, "lane_restriction_unit": { From bbf803353b38b0e1e1f62ca91a86ad6f393f8dc2 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 30 Jun 2020 22:37:52 -0400 Subject: [PATCH 10/25] Correct TMDD ID --- .../enumerated-types/derived-from-its-standards/lane_type.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index bced7233..6adfcc5b 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -71,7 +71,7 @@ tunnel (8248) all-exit-lanes (8249) all-entry-lanes (8250) either-shoulder (8251) -shoulder-work (8252) +shoulder-work (8253) ``` ## Used By From 232f6e1c28bccda1368f3912daea4c5cf0b3de7a Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 30 Jun 2020 23:07:28 -0400 Subject: [PATCH 11/25] Add 'bidirectional' lane type --- .../enumerated-types/derived-from-its-standards/lane_type.md | 1 + 1 file changed, 1 insertion(+) diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index 6adfcc5b..aeaa80e0 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -26,6 +26,7 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description **right-shoulder** | right-shoulder (8219) | The outer shoulder or the right most shoulder **left-shoulder** | left-shoulder (8220) | The inner shoulder or the left most shoulder **alternating-flow-lane** | | Signal or flagger controls lanes flow +**bidirectional** | | Lane is able to be traveled on in either direction The following values from the TMDD LaneRoadway Enumeration are not used in the WZDx specification: From 1b78aaabe95b08430bced73819228cc5950fa87d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Jul 2020 15:22:26 -0400 Subject: [PATCH 12/25] Remove bidirectional and add center-left-turn-lane and reversible-lane --- .../enumerated-types/derived-from-its-standards/lane_type.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index aeaa80e0..f1c64cd8 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -26,7 +26,8 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description **right-shoulder** | right-shoulder (8219) | The outer shoulder or the right most shoulder **left-shoulder** | left-shoulder (8220) | The inner shoulder or the left most shoulder **alternating-flow-lane** | | Signal or flagger controls lanes flow -**bidirectional** | | Lane is able to be traveled on in either direction +**center-left-turn-lane** | | A lane in the center of a bidirectional roadway in which traffic from both directions pulls to make a left turn +**reversible-lane** | | A lane in which traffic may travel in either direction, depending on certain conditions such as time of day The following values from the TMDD LaneRoadway Enumeration are not used in the WZDx specification: @@ -80,4 +81,4 @@ The **Lane Type** enumeration is used by the following fields Field Name | Data Table --- | --- -lane_type | [lanes](/feed-content/data-tables/lanes.md) \ No newline at end of file +lane_type | [lanes](/feed-content/data-tables/lanes.md) From 2f117cfc3b9ace9413836e63ca9b61433f50f5eb Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Jul 2020 15:23:59 -0400 Subject: [PATCH 13/25] Add hov-lane --- .../enumerated-types/derived-from-its-standards/lane_type.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index f1c64cd8..4a2a96f9 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -25,6 +25,7 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description **bike-lane** | cycle-lane (8242) | Bike lane **right-shoulder** | right-shoulder (8219) | The outer shoulder or the right most shoulder **left-shoulder** | left-shoulder (8220) | The inner shoulder or the left most shoulder +**hov-lane** | hov-lanes (8233) | A high-occupancy vehicle lane **alternating-flow-lane** | | Signal or flagger controls lanes flow **center-left-turn-lane** | | A lane in the center of a bidirectional roadway in which traffic from both directions pulls to make a left turn **reversible-lane** | | A lane in which traffic may travel in either direction, depending on certain conditions such as time of day @@ -54,7 +55,6 @@ toll-lanes (8229) electronic-toll-lanes (8230) toll-plaza (8231) inspection-lane (8232) -hov-lanes (8233) bus-lanes (8234) carpool-lanes (8235) truck-lanes (8236) From 16df4e1ae0302c2650bb212e8115806b9fb668a6 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Jul 2020 15:28:02 -0400 Subject: [PATCH 14/25] Change total_num_lanes conformance to conditional --- feed-content/data-tables/road_events.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feed-content/data-tables/road_events.md b/feed-content/data-tables/road_events.md index 474185a9..1e4da1a7 100644 --- a/feed-content/data-tables/road_events.md +++ b/feed-content/data-tables/road_events.md @@ -45,7 +45,7 @@ Field Name | Data Type | Description | Conformance | Notes **start_date_accuracy**|Enum: Estimated or Verified|A measure of how accurate the start Date Time is.|Required|see [Time Verification Enumerated Type](/feed-content/enumerated-types/time_verification.md) **end_date_accuracy**|Enumeration: Estimated or Verified|A measure of how accurate the end Date Time is.|Required|see [Time Verification Enumerated Type](/feed-content/enumerated-types/time_verification.md) **event_status** |Enumeration; Text|The status of the event|Optional|See [Event Status Enumerated Type](/feed-content/enumerated-types/event_status.md) -**total_num_lanes** |Integer|The total number of lanes associated with the road segment designated by the event geometry|Optional|A segment is a part of a roadway in a single direction designated the event geometry +**total_num_lanes** |Integer|The total number of lanes associated with the road segment designated by the event geometry|Conditional: Required if there are lanes associated with the road event|A segment is a part of a roadway in a single direction designated the event geometry **vehicle_impact**|Enumeration; Text|The impact to vehicular lanes along a single road in a single direction|Required| See [Vehicle Impact Enumerated Type](/feed-content/enumerated-types/vehicle_impact.md) **workers_present**|Boolean|A flag indicating that there are workers present in the event space|Optional **reduced_speed_limit**|Integer|The reduced speed limit posted within the event space|Optional| From 1c5b17473b57100db8cd05b071afeb3e75c137d5 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 7 Aug 2020 10:39:04 -0400 Subject: [PATCH 15/25] No lane edge reference; start from the left --- create-feed/schemas/wzdx_v3.0_feed.json | 15 ++------------- feed-content/data-tables/lanes.md | 3 +-- .../enumerated-types/lane_edge_reference.md | 14 -------------- 3 files changed, 3 insertions(+), 29 deletions(-) delete mode 100644 feed-content/enumerated-types/lane_edge_reference.md diff --git a/create-feed/schemas/wzdx_v3.0_feed.json b/create-feed/schemas/wzdx_v3.0_feed.json index 7c5a14cf..f0925cf0 100644 --- a/create-feed/schemas/wzdx_v3.0_feed.json +++ b/create-feed/schemas/wzdx_v3.0_feed.json @@ -134,9 +134,6 @@ "type": "integer", "exclusiveMinimum": 0 }, - "lane_number_start_side": { - "$ref": "#/definitions/lane_number_start_side" - }, "vehicle_impact": { "$ref": "#/definitions/vehicle_impact" }, @@ -201,10 +198,7 @@ "start_date_accuracy", "end_date_accuracy", "vehicle_impact" - ], - "dependencies": { - "lanes": ["lane_number_start_side"] - } + ] }, "type_of_work": { "title": "Type of Work", @@ -245,7 +239,7 @@ } } }, - "required": ["lane_status", "lane_type", "lane_number"] + "required": ["lane_status", "lane_type"] }, "lane_restriction": { "title": "Lane Restriction", @@ -326,11 +320,6 @@ "roadway-creation" ] }, - "lane_number_start_side": { - "title": "Lane Number Start Side Enumerated Type", - "description": "The side of the roadway from which lane number counting begins", - "enum": ["left", "right"] - }, "lane_status": { "title": "Lane Status Enumerated Type", "description": "The status of the lane for the traveling public", diff --git a/feed-content/data-tables/lanes.md b/feed-content/data-tables/lanes.md index b460a91c..4fed3345 100644 --- a/feed-content/data-tables/lanes.md +++ b/feed-content/data-tables/lanes.md @@ -12,7 +12,6 @@ Data Name|Data Type|Description|Conformance|Notes -|-|-|-|-| lane_id|ID|Identifies the lane_info record|Required|Primary key [road_event_id](/data-tables/road_events.md)|ID|Identifies the road event to which a lane information is related.|Required|Foreign key -lane_edge_reference | Enumeration; Text | The roadside edge from which lanes are assigned numbers. | Required | See [Lane Edge Reference Enumerated Type](/feed-content/enumerated-types/lane_edge_reference.md) -lane_number | Non-negative Integer | The number assigned to a lane | Required | Assigned by counting from right or left edge of the improved surface. Counting begins from the edge indicated in the lane_edge_reference field. Useful for text to voice translation. +lane_number | Non-negative Integer | The number assigned to a lane | Optional | Assigned by counting from the **left** edge of the improved surface. Useful for text to voice translation. lane_status|Enumeration; Text|Status of the lane for the traveling public|Required|Allowed values: open, closed, shift-left, shift-right, merge-right, merge-left, alternating-one-way. See [Lane Status Enumerated Type](/feed-content/enumerated-types/lane_status.md) lane_type|Enumeration; Text|An indication of the type of lane or shoulder|Required|See [Lane Type Enumerated Type](/feed-content/enumerated-types/derived-from-its-standards/lane_type.md) diff --git a/feed-content/enumerated-types/lane_edge_reference.md b/feed-content/enumerated-types/lane_edge_reference.md deleted file mode 100644 index d95c8e8f..00000000 --- a/feed-content/enumerated-types/lane_edge_reference.md +++ /dev/null @@ -1,14 +0,0 @@ -# Lane Edge Reference - -## Enumeration -Type | Description ---- | --- -**left** | Lane are assigned numbers from the left side of the road. -**right** | Lane are assigned numbers from the right side of the road. - -## Used By -The **Lane Edge Reference** enumeration is used by the following fields - -Field Name | Data Table ---- | --- -lane_edge_reference | [lanes](/feed-content/data-tables/lanes.md) From f2c71e3276f1e709bdcbcc8f11d45ebe08df6a57 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 7 Aug 2020 10:47:13 -0400 Subject: [PATCH 16/25] Leave flexibility in total_num_lanes --- feed-content/data-tables/road_events.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feed-content/data-tables/road_events.md b/feed-content/data-tables/road_events.md index 1e4da1a7..474185a9 100644 --- a/feed-content/data-tables/road_events.md +++ b/feed-content/data-tables/road_events.md @@ -45,7 +45,7 @@ Field Name | Data Type | Description | Conformance | Notes **start_date_accuracy**|Enum: Estimated or Verified|A measure of how accurate the start Date Time is.|Required|see [Time Verification Enumerated Type](/feed-content/enumerated-types/time_verification.md) **end_date_accuracy**|Enumeration: Estimated or Verified|A measure of how accurate the end Date Time is.|Required|see [Time Verification Enumerated Type](/feed-content/enumerated-types/time_verification.md) **event_status** |Enumeration; Text|The status of the event|Optional|See [Event Status Enumerated Type](/feed-content/enumerated-types/event_status.md) -**total_num_lanes** |Integer|The total number of lanes associated with the road segment designated by the event geometry|Conditional: Required if there are lanes associated with the road event|A segment is a part of a roadway in a single direction designated the event geometry +**total_num_lanes** |Integer|The total number of lanes associated with the road segment designated by the event geometry|Optional|A segment is a part of a roadway in a single direction designated the event geometry **vehicle_impact**|Enumeration; Text|The impact to vehicular lanes along a single road in a single direction|Required| See [Vehicle Impact Enumerated Type](/feed-content/enumerated-types/vehicle_impact.md) **workers_present**|Boolean|A flag indicating that there are workers present in the event space|Optional **reduced_speed_limit**|Integer|The reduced speed limit posted within the event space|Optional| From 68dc0a2beab9b3ef129803329419f606aae96be8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 7 Aug 2020 10:56:22 -0400 Subject: [PATCH 17/25] Update lane types --- create-feed/schemas/wzdx_v3.0_feed.json | 7 ++++++- .../derived-from-its-standards/lane_type.md | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/create-feed/schemas/wzdx_v3.0_feed.json b/create-feed/schemas/wzdx_v3.0_feed.json index f0925cf0..cf304852 100644 --- a/create-feed/schemas/wzdx_v3.0_feed.json +++ b/create-feed/schemas/wzdx_v3.0_feed.json @@ -332,6 +332,7 @@ "left-lane", "right-lane", "middle-lane", + "lane", "right-turning-lane", "left-turning-lane", "right-exit-lane", @@ -350,7 +351,11 @@ "bike-lane", "alternating-flow-lane", "right-shoulder", - "left-shoulder" + "left-shoulder", + "shoulder", + "hov-lane", + "reversible-lane", + "center-left-turn-lane" ] }, "lane_restriction_unit": { diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index 4a2a96f9..546f1c18 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -7,6 +7,7 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description **left-lane** | left-lane (8194) | The left most lane **right-lane** | right-lane (8195) | right-lane | The right most lane **middle-lane** | middle-lanes (8197) | A lane that is not the rightmost or leftmost lane +**lane** | | Generic lane type, intended to be used for regular, driveable lanes where `left-lane`, `right-lane`, and `middle-lane` are unsuitable (e.g. single-lane roadway) **right-turning-lane** | right-turning-lanes (8199) | A right lane where right turns are permissible **left-turning-lane** | left-turning-lanes (8200) | A left lane where left turns are permissible **right-exit-lane** | right-exit-lanes (8204) | The right lane where the lane provides an egress with a ramp @@ -23,6 +24,7 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description **left-second-entrance-ramp** | left-second-entrance-ramp (8215) | The second entrance ramp with an ingress on the left in the direction of flow at an interchange **sidewalk** | sidewalk (8222) | The sidewalk or pedestrian way **bike-lane** | cycle-lane (8242) | Bike lane +**shoulder** | | Generic shoulder; useful when the shoulder is neither left nor right (e.g. between HOV Lane and main roadway). It can also be used in place of `left-shoulder` or `right-shoulder`. **right-shoulder** | right-shoulder (8219) | The outer shoulder or the right most shoulder **left-shoulder** | left-shoulder (8220) | The inner shoulder or the left most shoulder **hov-lane** | hov-lanes (8233) | A high-occupancy vehicle lane From 5f72b282e634bb040cab338035397500922d2bf6 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 7 Aug 2020 11:26:29 -0400 Subject: [PATCH 18/25] Add order and remove prefixes from type, status, restrictions --- create-feed/schemas/wzdx_v3.0_feed.json | 15 ++++++++++----- feed-content/data-tables/lanes.md | 13 +++++++------ .../derived-from-its-standards/lane_type.md | 11 +---------- feed-content/enumerated-types/lane_status.md | 2 +- 4 files changed, 19 insertions(+), 22 deletions(-) diff --git a/create-feed/schemas/wzdx_v3.0_feed.json b/create-feed/schemas/wzdx_v3.0_feed.json index cf304852..40be8026 100644 --- a/create-feed/schemas/wzdx_v3.0_feed.json +++ b/create-feed/schemas/wzdx_v3.0_feed.json @@ -220,18 +220,23 @@ "description": "An individual lane within a road event", "type": "object", "properties": { - "lane_status": { + "order": { + "description": "The position (index) of the lane in sequence on the roadway, where '1' represents the left-most lane", + "type": "integer", + "minimum": 1 + }, + "status": { "$ref": "#/definitions/lane_status" }, - "lane_type": { + "type": { "$ref": "#/definitions/lane_type" }, "lane_number": { - "description": "The number (index) assigned to the lane (not including shoulders)", + "description": "The number assigned to the lane to help identify its position. Flexible, but usually used for regular, driveable lanes", "type": "integer", "minimum": 1 }, - "lane_restrictions": { + "restrictions": { "description": "A list of restrictions specific to the lane", "type": "array", "items": { @@ -239,7 +244,7 @@ } } }, - "required": ["lane_status", "lane_type"] + "required": ["status", "type", "order"] }, "lane_restriction": { "title": "Lane Restriction", diff --git a/feed-content/data-tables/lanes.md b/feed-content/data-tables/lanes.md index 4fed3345..0c9b75f8 100644 --- a/feed-content/data-tables/lanes.md +++ b/feed-content/data-tables/lanes.md @@ -8,10 +8,11 @@ This table is related to the [road_events](/feed-content/data-tables/road_events This table is related to the [lane_restrictions](/feed-content/data-tables/lane_restrictions.md) table. For each record in the lanes table there may exist one or more records in the lane_restrictions table. The lane_id field acts as the foreign key in the lanes table. ## Lanes Table Structure -Data Name|Data Type|Description|Conformance|Notes --|-|-|-|-| -lane_id|ID|Identifies the lane_info record|Required|Primary key -[road_event_id](/data-tables/road_events.md)|ID|Identifies the road event to which a lane information is related.|Required|Foreign key +Data Name | Data Type | Description | Conformance | Notes +- | - | - | - | - | - +lane_id | ID | Identifies the lane_info record | Required | Primary key +[road_event_id](/data-tables/road_events.md) | ID | Identifies the road event to which a lane information is related. | Required | Foreign key +order | Integer | The position of a lane in sequence on the roadway. This value is used as an index to indicate the order of all WZDx lanes provided for a road event. | Required | A value of `1` must represent the **left-most** lane and an increase in 1 must represent moving a single lane over from the **left**. +type | Enumeration; Text | An indication of the type of lane or shoulder | Required | See [Lane Type Enumerated Type](/feed-content/enumerated-types/derived-from-its-standards/lane_type.md) +status | Enumeration; Text | Status of the lane for the traveling public | Required | See [Lane Status Enumerated Type](/feed-content/enumerated-types/lane_status.md) lane_number | Non-negative Integer | The number assigned to a lane | Optional | Assigned by counting from the **left** edge of the improved surface. Useful for text to voice translation. -lane_status|Enumeration; Text|Status of the lane for the traveling public|Required|Allowed values: open, closed, shift-left, shift-right, merge-right, merge-left, alternating-one-way. See [Lane Status Enumerated Type](/feed-content/enumerated-types/lane_status.md) -lane_type|Enumeration; Text|An indication of the type of lane or shoulder|Required|See [Lane Type Enumerated Type](/feed-content/enumerated-types/derived-from-its-standards/lane_type.md) diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index 546f1c18..46586d09 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -35,7 +35,6 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description The following values from the TMDD LaneRoadway Enumeration are not used in the WZDx specification: ``` -all-roadways (8192) through-lanes (8193) center-lane (8196) upper-deck-lanes (8201) @@ -44,10 +43,7 @@ reversible-lanes (8203) escape-ramp (8216) hard-shoulder (8217) soft-shoulder (8218) -right-shoulder (8219) -left-shoulder (8220) median (8221) -highways (8223) right-hand-parallel-lanes (8224) left-hand-parallel-lanes (8225) connecting-lanes (8226) @@ -64,7 +60,6 @@ emergency-lanes (8237) passing-lanes (8238) climbing-lanes (8239) slow-lane (8240) -service-road (8240) service-road (8241) tracks (8243) bridge (8244) @@ -72,10 +67,6 @@ overpass (8245) elevated-lanes (8246) underpass (8247) tunnel (8248) -all-exit-lanes (8249) -all-entry-lanes (8250) -either-shoulder (8251) -shoulder-work (8253) ``` ## Used By @@ -83,4 +74,4 @@ The **Lane Type** enumeration is used by the following fields Field Name | Data Table --- | --- -lane_type | [lanes](/feed-content/data-tables/lanes.md) +type | [lanes](/feed-content/data-tables/lanes.md) diff --git a/feed-content/enumerated-types/lane_status.md b/feed-content/enumerated-types/lane_status.md index 9e349df4..854c9c18 100644 --- a/feed-content/enumerated-types/lane_status.md +++ b/feed-content/enumerated-types/lane_status.md @@ -17,4 +17,4 @@ The **Road Restriction** enumeration is used by the following fields Field Name | Data Table --- | --- -lane_status | [lanes](/feed-content/data-tables/lanes.md) +status | [lanes](/feed-content/data-tables/lanes.md) From ed6234d3e1af921aa8ca178ab8bcb5cf335ac33d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 7 Aug 2020 11:28:11 -0400 Subject: [PATCH 19/25] Add center lane type --- create-feed/schemas/wzdx_v3.0_feed.json | 1 + .../enumerated-types/derived-from-its-standards/lane_type.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/create-feed/schemas/wzdx_v3.0_feed.json b/create-feed/schemas/wzdx_v3.0_feed.json index 40be8026..b46cd75c 100644 --- a/create-feed/schemas/wzdx_v3.0_feed.json +++ b/create-feed/schemas/wzdx_v3.0_feed.json @@ -337,6 +337,7 @@ "left-lane", "right-lane", "middle-lane", + "center-lane", "lane", "right-turning-lane", "left-turning-lane", diff --git a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md index 46586d09..6302ecdb 100644 --- a/feed-content/enumerated-types/derived-from-its-standards/lane_type.md +++ b/feed-content/enumerated-types/derived-from-its-standards/lane_type.md @@ -7,6 +7,7 @@ WZDx Lane Type | TMDD LaneRoadway Enumeration Value | Description **left-lane** | left-lane (8194) | The left most lane **right-lane** | right-lane (8195) | right-lane | The right most lane **middle-lane** | middle-lanes (8197) | A lane that is not the rightmost or leftmost lane +**center-lane** | center-lane (8196) | The center-most lane when the total number of lanes is odd **lane** | | Generic lane type, intended to be used for regular, driveable lanes where `left-lane`, `right-lane`, and `middle-lane` are unsuitable (e.g. single-lane roadway) **right-turning-lane** | right-turning-lanes (8199) | A right lane where right turns are permissible **left-turning-lane** | left-turning-lanes (8200) | A left lane where left turns are permissible @@ -36,7 +37,6 @@ The following values from the TMDD LaneRoadway Enumeration are not used in the W ``` through-lanes (8193) -center-lane (8196) upper-deck-lanes (8201) lower-deck-lanes (8202) reversible-lanes (8203) From 09a95bc39f46c80b84caf0c473cd7089225620db Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 7 Aug 2020 11:37:04 -0400 Subject: [PATCH 20/25] Update examples to use order --- .../examples/linestring_example.geojson | 34 +++++++++---------- .../examples/multipoint_example.geojson | 34 +++++++++---------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/create-feed/examples/linestring_example.geojson b/create-feed/examples/linestring_example.geojson index 0b0ba87c..2ee88c19 100644 --- a/create-feed/examples/linestring_example.geojson +++ b/create-feed/examples/linestring_example.geojson @@ -42,11 +42,11 @@ ], "lanes": [ { - "lane_edge_reference": "left", + "order": 1, "lane_number": 1, - "lane_status": "open", - "lane_type": "left-lane", - "lane_restrictions": [ + "status": "open", + "type": "left-lane", + "restrictions": [ { "restriction_type": "reduced-width", "restriction_value": 10, @@ -55,16 +55,16 @@ ] }, { - "lane_edge_reference": "left", + "order": 2, "lane_number": 2, - "lane_status": "closed", - "lane_type": "middle-lane" + "status": "closed", + "type": "middle-lane" }, { - "lane_edge_reference": "left", + "order": 3, "lane_number": 3, - "lane_status": "closed", - "lane_type": "right-lane" + "status": "closed", + "type": "right-lane" } ] }, @@ -270,21 +270,21 @@ ], "lanes": [ { - "lane_edge_reference": "left", + "order": 1, "lane_number": 1, - "lane_status": "open", - "lane_type": "left-lane", - "lane_restrictions": [ + "status": "open", + "type": "left-lane", + "restrictions": [ { "restriction_type": "no-trucks" } ] }, { - "lane_edge_reference": "left", + "order": 2, "lane_number": 2, - "lane_status": "open", - "lane_type": "right-lane" + "status": "open", + "type": "right-lane" } ] }, diff --git a/create-feed/examples/multipoint_example.geojson b/create-feed/examples/multipoint_example.geojson index 6c3804d2..7fe436bf 100644 --- a/create-feed/examples/multipoint_example.geojson +++ b/create-feed/examples/multipoint_example.geojson @@ -42,11 +42,11 @@ ], "lanes": [ { - "lane_edge_reference": "left", + "order": 1, "lane_number": 1, - "lane_status": "open", - "lane_type": "left-lane", - "lane_restrictions": [ + "status": "open", + "type": "left-lane", + "restrictions": [ { "restriction_type": "reduced-width", "restriction_value": 10, @@ -55,16 +55,16 @@ ] }, { - "lane_edge_reference": "left", + "order": 2, "lane_number": 2, - "lane_status": "closed", - "lane_type": "middle-lane" + "status": "closed", + "type": "middle-lane" }, { - "lane_edge_reference": "left", + "order": 3, "lane_number": 3, - "lane_status": "closed", - "lane_type": "right-lane" + "status": "closed", + "type": "right-lane" } ] }, @@ -118,21 +118,21 @@ ], "lanes": [ { - "lane_edge_reference": "left", + "order": 1, "lane_number": 1, - "lane_status": "open", - "lane_type": "left-lane", - "lane_restrictions": [ + "status": "open", + "type": "left-lane", + "restrictions": [ { "restriction_type": "no-trucks" } ] }, { - "lane_edge_reference": "left", + "order": 2, "lane_number": 2, - "lane_status": "open", - "lane_type": "right-lane" + "status": "open", + "type": "right-lane" } ] }, From fcfe5364acbe5967cff321fab5f493093ed2fc21 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 12 Aug 2020 13:25:35 -0400 Subject: [PATCH 21/25] Update enums notes for v3.0 changes --- spec-content/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/README.md b/spec-content/README.md index 2db595cc..0ad32fb9 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -78,6 +78,6 @@ Field Name | Table | Enumerated Type | Notes `restrictions` | [road_events](/spec-content/data-tables/road_events.md) | [Road Restriction](/spec-content/enumerated-types/road_restriction.md) | Enumeration created in WZDx v1.0 `type_name` | [types_of_work](/spec-content/data-tables/types_of_work.md) | [Work Type Name](/spec-content/enumerated-types/work_type_name.md) | Enumeration created in WZDx v2.0 `status` | [lanes](/spec-content/data-tables/lanes.md) | [Lane Status](/spec-content/enumerated-types/lane_status.md) | Enumeration created in WZDx v2.0 -`type` | [lanes](/spec-content/data-tables/lanes.md) | [Lane Type](/spec-content/enumerated-types/derived-from-its-standards/lane_type.md) | Enumeration adapted from TMDD LaneRoadway +`type` | [lanes](/spec-content/data-tables/lanes.md) | [Lane Type](/spec-content/enumerated-types/derived-from-its-standards/lane_type.md) | Enumeration adapted from TMDD LaneRoadway, updated in WZDx v3.0 `restriction_type` | [lane_restrictions](/spec-content/data-tables/lane_restrictions.md) | [Road Restriction](/spec-content/enumerated-types/road_restriction.md) | Individual lane restrictions | Enumeration created in WZDx v1.0 `restriction_units` | [lane_restrictions](/spec-content/data-tables/lane_restrictions.md) | [Lane Restriction Unit](/spec-content/enumerated-types/lane_restriction_unit.md) | This is an intial list, created in WZDx v2.0, and is not intended to be complete. More values will be added as needed. From 2d2f6a94dad68ee2d96c691cb06fed9f7430c8e6 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 12 Aug 2020 17:08:48 -0400 Subject: [PATCH 22/25] Fix table rendering --- spec-content/data-tables/lanes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/data-tables/lanes.md b/spec-content/data-tables/lanes.md index 1f7cacdb..fe6333c8 100644 --- a/spec-content/data-tables/lanes.md +++ b/spec-content/data-tables/lanes.md @@ -9,7 +9,7 @@ This table is related to the [lane_restrictions](/spec-content/data-tables/lane_ ## Lanes Table Structure Data Name | Data Type | Description | Conformance | Notes -- | - | - | - | - | - +--- | --- | --- | --- | --- lane_id | ID | Identifies the lane_info record | Required | Primary key [road_event_id](/spec-content/data-tables/road_events.md) | ID | Identifies the road event to which a lane information is related. | Required | Foreign key order | Integer | The position of a lane in sequence on the roadway. This value is used as an index to indicate the order of all WZDx lanes provided for a road event. | Required | A value of `1` must represent the **left-most** lane and an increase in 1 must represent moving a single lane over from the **left**. From 102e972846409e14a66f9f4cd2d5fbeb85bbafc1 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 12 Aug 2020 17:15:34 -0400 Subject: [PATCH 23/25] Update lane_number and order types to positive integer --- spec-content/data-tables/lanes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/data-tables/lanes.md b/spec-content/data-tables/lanes.md index fe6333c8..749b3eb5 100644 --- a/spec-content/data-tables/lanes.md +++ b/spec-content/data-tables/lanes.md @@ -12,7 +12,7 @@ Data Name | Data Type | Description | Conformance | Notes --- | --- | --- | --- | --- lane_id | ID | Identifies the lane_info record | Required | Primary key [road_event_id](/spec-content/data-tables/road_events.md) | ID | Identifies the road event to which a lane information is related. | Required | Foreign key -order | Integer | The position of a lane in sequence on the roadway. This value is used as an index to indicate the order of all WZDx lanes provided for a road event. | Required | A value of `1` must represent the **left-most** lane and an increase in 1 must represent moving a single lane over from the **left**. +order | Positive Integer | The position of a lane in sequence on the roadway. This value is used as an index to indicate the order of all WZDx lanes provided for a road event. | Required | A value of `1` must represent the **left-most** lane and an increase in 1 must represent moving a single lane over from the **left**. type | Enumeration; Text | An indication of the type of lane or shoulder | Required | See [Lane Type Enumerated Type](/spec-content/enumerated-types/derived-from-its-standards/lane_type.md) status | Enumeration; Text | Status of the lane for the traveling public | Required | See [Lane Status Enumerated Type](/spec-content/enumerated-types/lane_status.md) -lane_number | Non-negative Integer | The number assigned to a lane | Optional | Assigned by counting from the **left** edge of the improved surface. Useful for text to voice translation. +lane_number | Positive Integer | The number assigned to a lane. | Optional | Assigned by counting from the **left** edge of the improved surface. Useful for text to voice translation. From f4efb821d9c31f7f2c51ca85c717abfeaae9ebb7 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 12 Aug 2020 17:17:01 -0400 Subject: [PATCH 24/25] Update lane_number description --- spec-content/data-tables/lanes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/data-tables/lanes.md b/spec-content/data-tables/lanes.md index 749b3eb5..03a65657 100644 --- a/spec-content/data-tables/lanes.md +++ b/spec-content/data-tables/lanes.md @@ -15,4 +15,4 @@ lane_id | ID | Identifies the lane_info record | Required | Primary key order | Positive Integer | The position of a lane in sequence on the roadway. This value is used as an index to indicate the order of all WZDx lanes provided for a road event. | Required | A value of `1` must represent the **left-most** lane and an increase in 1 must represent moving a single lane over from the **left**. type | Enumeration; Text | An indication of the type of lane or shoulder | Required | See [Lane Type Enumerated Type](/spec-content/enumerated-types/derived-from-its-standards/lane_type.md) status | Enumeration; Text | Status of the lane for the traveling public | Required | See [Lane Status Enumerated Type](/spec-content/enumerated-types/lane_status.md) -lane_number | Positive Integer | The number assigned to a lane. | Optional | Assigned by counting from the **left** edge of the improved surface. Useful for text to voice translation. +lane_number | Positive Integer | The number assigned to the lane to help identify its position. Flexible, but usually used for regular, driveable lanes. | Optional | Assigned by counting from the **left** edge of the improved surface. Useful for text to voice translation. From 98c5ca719c0f424112f3108eddc4c42f93b3a8e5 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 13 Aug 2020 10:10:45 -0400 Subject: [PATCH 25/25] Update lane_number minimum value to 1 in schema --- create-feed/schemas/wzdx_v3.0_feed.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/schemas/wzdx_v3.0_feed.json b/create-feed/schemas/wzdx_v3.0_feed.json index b466ec6a..b46cd75c 100644 --- a/create-feed/schemas/wzdx_v3.0_feed.json +++ b/create-feed/schemas/wzdx_v3.0_feed.json @@ -234,7 +234,7 @@ "lane_number": { "description": "The number assigned to the lane to help identify its position. Flexible, but usually used for regular, driveable lanes", "type": "integer", - "minimum": 0 + "minimum": 1 }, "restrictions": { "description": "A list of restrictions specific to the lane",