From 4964c1b6b321b9ab68d976c034442ca06129b0f9 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 14:59:38 -0400 Subject: [PATCH 001/388] Add v4.0 base schema --- create-feed/schemas/wzdx_v4.0_feed.json | 561 ++++++++++++++++++++++++ 1 file changed, 561 insertions(+) create mode 100644 create-feed/schemas/wzdx_v4.0_feed.json diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json new file mode 100644 index 00000000..9e906ca8 --- /dev/null +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -0,0 +1,561 @@ + +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/create-feed/schemas/wzdx_v4.0_feed.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "WZDx v4.0 Feed", + "description": "The GeoJSON output of a WZDx v4.0 data feed", + "type": "object", + "properties": { + "road_event_feed_info": { + "$ref": "#/definitions/RoadEventFeedInfo" + }, + "type": { + "description": "The GeoJSON type", + "enum": ["FeatureCollection"] + }, + "features": { + "description": "An array of GeoJSON Feature objects which represent WZDx road events", + "type": "array", + "items": { + "$ref": "#/definitions/RoadEventFeature" + } + }, + "bbox": { + "$ref": "#/definitions/BoundingBox" + } + }, + "required": ["road_event_feed_info", "type", "features"], + "definitions": { + "BoundingBox": { + "title": "GeoJSON Bounding Box", + "description": "Information on the coordinate range for a Geometry, Feature (RoadEventFeature), or FeatureCollection (WZDxFeed)", + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + }, + "RoadEventFeedInfo": { + "title": "Road Event Feed Information", + "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", + "type": "object", + "properties": { + "publisher": { + "description": "The organization responsible for publishing the feed", + "type": "string" + }, + "contact_name": { + "description": "The name of the individual or group responsible for the data feed", + "type": "string" + }, + "contact_email": { + "description": "The email address of the individual or group responsible for the data feed", + "type": "string", + "format": "email" + }, + "update_frequency": { + "description": "The frequency in seconds at which the data feed is updated", + "type": "integer", + "minimum": 1 + }, + "update_date": { + "description": "The UTC date and time when the data feed was last updated", + "type": "string", + "format": "date-time" + }, + "version": { + "description": "The WZDx specification version used to create the data feed, in 'major.minor' format", + "type": "string", + "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$" + }, + "license": { + "description": "The URL of the license that applies to the data in the WZDx feed. This *must* be the string \"https://creativecommons.org/publicdomain/zero/1.0/\"", + "enum": ["https://creativecommons.org/publicdomain/zero/1.0/"] + }, + "data_sources": { + "description": "A list of specific data sources for the road event data in the feed", + "type": "array", + "items": { + "$ref": "#/definitions/RoadEventDataSource" + }, + "minItems": 1 + } + }, + "required": ["update_date", "version", "publisher", "data_sources"] + }, + "RoadEventDataSource": { + "title": "Road Event Data Source", + "description": "Describes information about a specific data source used to build the work zone data feed", + "type": "object", + "properties": { + "data_source_id": { + "description": "Unique identifier for the organization providing work zone data", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization for the authoritative source of the work zone data", + "type": "string" + }, + "contact_name": { + "description": "The name of the individual or group responsible for the data source", + "type": "string" + }, + "contact_email": { + "description": "The email address of the individual or group responsible for the data source", + "type": "string", + "format": "email" + }, + "update_frequency": { + "description": "The frequency in seconds at which the data source is updated", + "type": "integer", + "minimum": 1 + }, + "update_date": { + "description": "The UTC date and time when the data source was last updated", + "type": "string", + "format": "date-time" + }, + "location_method": { + "$ref": "#/definitions/LocationMethod" + }, + "location_verify_method": { + "description": "The method used to verify the accuracy of the location information", + "type": "string" + }, + "lrs_type": { + "description": "Describes the type of linear referencing system used for the milepost measurements", + "type": "string" + }, + "lrs_url": { + "description": "A URL where additional information on the LRS information and transformation information is stored", + "type": "string", + "format": "uri" + } + }, + "required": ["data_source_id", "organization_name", "location_method"] + }, + "LocationMethod": { + "title": "Location Method Enumerated Type", + "description": "The typical method used to locate the beginning and end of a work zone impact area", + "enum": [ + "channel-device-method", + "sign-method", + "junction-method", + "other", + "unknown" + ] + }, + "RoadEventFeature": { + "title": "Road Event Feature (GeoJSON Feature)", + "description": "The container object for a WZDx road event; an instance of a GeoJSON Feature", + "type": "object", + "properties": { + "id": { + "description": "A unique identifier issued by the data feed provider to identify the WZDx road event", + "type": "string" + }, + "type": { + "description": "The GeoJSON object type; must be 'Feature'", + "enum": ["Feature"] + }, + "properties": { + "$ref": "#/definitions/RoadEvent" + }, + "geometry": { + "oneOf": [ + { + "$ref": "https://geojson.org/schema/LineString.json" + }, + { + "$ref": "https://geojson.org/schema/MultiPoint.json" + } + ] + }, + "bbox": { + "$ref": "#/definitions/BoundingBox" + } + }, + "oneOf": [ + { + "properties": { + "properties": { + "required": ["road_event_id"] + } + } + }, + { + "required": ["id"] + } + ], + "required": ["type","properties","geometry"] + }, + "RoadEvent": { + "title": "Road Event", + "description": "Describes an activity taking place along a road segment", + "type": "object", + "properties": { + "data_source_id": { + "description": "Identifies the data source from which the road event data is sourced from", + "type": "string" + }, + "event_type": { + "$ref": "#/definitions/EventType" + }, + "relationship": { + "$ref": "#/definitions/Relationship" + }, + "road_names": { + "description": "A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "direction": { + "$ref": "#/definitions/Direction" + }, + "beginning_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event begins", + "type": "string" + }, + "ending_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event ends", + "type": "string" + }, + "beginning_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event begins", + "type": "number", + "minimum": 0 + }, + "ending_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event ends", + "type": "number", + "minimum": 0 + }, + "beginning_accuracy": { + "$ref": "#/definitions/SpatialVerification" + }, + "ending_accuracy": { + "$ref": "#/definitions/SpatialVerification" + }, + "start_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "end_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "start_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "end_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "event_status": { + "$ref": "#/definitions/EventStatus" + }, + "vehicle_impact": { + "$ref": "#/definitions/VehicleImpact" + }, + "workers_present": { + "description": "A flag indicating that there are workers present in the road event", + "type": "boolean" + }, + "reduced_speed_limit": { + "description": "The reduced speed limit posted within the road event", + "type": "integer", + "minimum": 0 + }, + "restrictions": { + "description": "Zero or more road restrictions applying to the road event", + "type": "array", + "items": { + "$ref": "#/definitions/RoadRestriction" + }, + "uniqueItems": true + }, + "description": { + "description": "Short free text description of the road event", + "type": "string" + }, + "creation_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was created (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "update_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was last updated (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "types_of_work": { + "description": "A list of the types of work being done in a road event", + "type": "array", + "items": { + "$ref": "#/definitions/TypeOfWork" + } + }, + "lanes": { + "description": "A list of individual lanes within a road event (roadway segment)", + "type": "array", + "items": { + "$ref": "#/definitions/Lane" + } + }, + "road_event_id": { + "description": "***DEPRECATED*** A unique identifier issued by the data feed provider to identify the work zone project or activity", + "type": "string" + }, + "road_number": { + "description": "***DEPRECATED*** The road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", + "type": "string" + }, + "road_name": { + "description": "***DEPRECATED*** Publicly known name of the road on which the event occurs", + "type": "string" + }, + "total_num_lanes": { + "description": "***DEPRECATED*** The total number of lanes associated with the road event", + "type": "integer", + "exclusiveMinimum": 0 + } + }, + "anyOf": [ + { "required": ["road_name"] }, + { "required": ["road_names"] } + ], + "required": [ + "data_source_id", + "direction", + "beginning_accuracy", + "ending_accuracy", + "start_date", + "end_date", + "start_date_accuracy", + "end_date_accuracy", + "vehicle_impact" + ] + }, + "Relationship": { + "title": "Relationship", + "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", + "type": "object", + "properties": { + "first": { + "description": "Indicates the first (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "next": { + "description": "Indicates the next (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "parents": { + "description": "Indicates entities that the road event with this relationship is a part of, such as a work zone project or phase. Values can but do not have to correspond to a WZDx entity", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "children": { + "description": "Indicates entities that are part of the road event with this relationship, such as a detour or piece of equipment. Values can but do not have to correspond to a WZDx entity", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + } + } + }, + "TypeOfWork": { + "title": "Type of Work", + "description": "A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway", + "type": "object", + "properties": { + "type_name": { + "$ref": "#/definitions/WorkTypeName" + }, + "is_architectural_change": { + "description": "A flag indicating whether the type of work will result in an architectural change to the roadway", + "type": "boolean" + } + }, + "required": ["type_name"] + }, + "Lane": { + "title": "Lane", + "description": "An individual lane within a road event", + "type": "object", + "properties": { + "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/LaneStatus" + }, + "type": { + "$ref": "#/definitions/LaneType" + }, + "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": 1 + }, + "restrictions": { + "description": "A list of restrictions specific to the lane", + "type": "array", + "items": { + "$ref": "#/definitions/LaneRestriction" + } + } + }, + "required": ["status", "type", "order"] + }, + "LaneRestriction": { + "title": "Lane Restriction", + "description": "A lane-level restriction, including type and value", + "type": "object", + "properties": { + "restriction_type": { + "$ref": "#/definitions/RoadRestriction" + }, + "restriction_value": { + "type": "number" + }, + "restriction_units": { + "$ref": "#/definitions/LaneRestrictionUnit" + } + }, + "required": ["restriction_type"], + "dependencies": { + "restriction_value": ["restriction_units"] + } + }, + "EventType": { + "title": "Road Event Type Enumerated Type", + "description": "The type of WZDx road event", + "enum": ["work-zone", "detour"] + }, + "Direction": { + "title": "Direction Enumerated Type", + "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", + "enum": ["northbound", "eastbound", "southbound", "westbound"] + }, + "SpatialVerification": { + "title": "Spatial Verification Enumerated Type", + "description": "An indication of how a geographical coordinate was defined", + "enum": ["estimated", "verified"] + }, + "TimeVerification": { + "title": "Time Verification Enumerated Type", + "description": "A measure of how accurate a date-time is", + "enum": ["estimated", "verified"] + }, + "EventStatus": { + "title": "Event Status Enumerated Type", + "description": "The status of the road event", + "enum": ["planned", "pending", "active", "completed", "cancelled"] + }, + "VehicleImpact": { + "title": "Vehicle Impact Enumerated Type", + "description": "The impact to vehicular lanes along a single road in a single direction", + "enum": ["all-lanes-closed", "some-lanes-closed", "all-lanes-open", "alternating-one-way", "unknown"] + }, + "RoadRestriction": { + "title": "Road Restriction Enumerated Type", + "description": "The type of vehicle restriction on a roadway", + "enum": [ + "no-trucks", + "travel-peak-hours-only", + "hov-3", + "hov-2", + "no-parking", + "reduced-width", + "reduced-height", + "reduced-length", + "reduced-weight", + "axle-load-limit", + "gross-weight-limit", + "towing-prohibited", + "permitted-oversize-loads-prohibited", + "local-access-only" + ] + }, + "WorkTypeName": { + "title": "Work Type Name Enumerated Type", + "description": "A high-level text description of the type of work being done in a road event", + "enum": [ + "maintenance", + "minor-road-defect-repair", + "roadside-work", + "overhead-work", + "below-road-work", + "barrier-work", + "surface-work", + "painting", + "roadway-relocation", + "roadway-creation" + ] + }, + "LaneStatus": { + "title": "Lane Status Enumerated Type", + "description": "The status of the lane for the traveling public", + "enum": ["open", "closed", "shift-left", "shift-right", "merge-left", "merge-right", "alternating-one-way", "alternating-flow"] + }, + "LaneType": { + "title": "Lane Type Enumerated Type", + "description": "An indication of the type of lane or shoulder", + "enum": [ + "lane", + "right-turning-lane", + "left-turning-lane", + "right-exit-lane", + "left-exit-lane", + "right-entrance-lane", + "left-entrance-lane", + "sidewalk", + "bike-lane", + "alternating-flow-lane", + "shoulder", + "hov-lane", + "reversible-lane", + "center-left-turn-lane", + "left-lane", + "right-lane", + "middle-lane", + "center-lane", + "right-shoulder", + "left-shoulder", + "right-merging-lane", + "left-merging-lane", + "right-exit-ramp", + "right-second-exit-ramp", + "left-exit-ramp", + "left-second-exit-ramp", + "right-entrance-ramp", + "right-second-entrance-ramp", + "left-entrance-ramp", + "left-second-entrance-ramp" + ] + }, + "LaneRestrictionUnit": { + "title": "Lane Restriction Unit Enumerated Type", + "description": "Units of measure used for the lane restriction value", + "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] + } + } +} From 0a20bc9f166bb461c06f93153623b2e2e10076f2 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 15:08:58 -0400 Subject: [PATCH 002/388] Update readmes to reference v4.0 --- README.md | 5 +++-- create-feed/README.md | 8 +++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index dd84d2ed..3ba10c33 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [WZDx v2.0 Feed](/create-feed/schemas/wzdx_v2.0_feed.json) - [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) - [WZDx v3.1 Feed](/create-feed/schemas/wzdx_v3.1_feed.json) + - [WZDx v4.0 Feed](/create-feed/schemas/wzdx_v4.0_feed.json) - [**Specification Content**](/spec-content) - [**Objects**](/spec-content/objects) - [WZDXFeed](/spec-content/objects/WZDxFeed.md) @@ -60,7 +61,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [Project Description](#project-description) - [Contact Information](#contact-information) - [Release Notes](#release-notes) - - [Release v3.1 (Apr 2021)] + - [Release v3.1 (Apr 2021)] - [Getting Started](#getting-started) - [Contributions](#contributions) - [Versioning](#versioning) @@ -128,7 +129,7 @@ The WZDWG welcomes feedback and comments on the WZDx 3.1 Specification. Comments 2. Learn about using GitHub as a [tool for collaboration and support](/create-feed/README.md#collaborate-via-github). 3. Use [Specification Content](/spec-content) page to understand the data components of the specification. 4. [Create your own feed](/create-feed) using example feeds and follow the business rules. -5. Validate your feed output using the [WZDx v3.1 Feed JSON Schema](/create-feed/schemas/wzdx_v3.1_feed.json) +5. Validate your feed output using the [WZDx v4.0 Feed JSON Schema](/create-feed/schemas/wzdx_v4.0_feed.json) 6. Publish your feed and tell us about it via avdx@dot.gov. ## Contributions diff --git a/create-feed/README.md b/create-feed/README.md index 3f689390..1af7609f 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -3,7 +3,8 @@ This directory contains information regarding creation of a WZDx feed, such as t ## Feed Format and File Type -The WZDx v3.1 data feed is formatted according to the [GeoJSON](https://geojson.org/) specification. GeoJSON is the file format of choice because: +Since v2.0, WZDx has been formatted according to the [GeoJSON](https://geojson.org/) specification. GeoJSON is the file format of choice because: + - It is a lightweight data exchange format. - It is easy for humans to read and write. - It is easy for machines to parse and generate. @@ -48,6 +49,7 @@ The [schemas](/create-feed/schemas) directory includes a JSON Schema for the fol * [WZDx v2.0 Feed](/create-feed/schemas/wzdx_v2.0_feed.json) * [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) * [WZDx v3.1 Feed](/create-feed/schemas/wzdx_v3.1_feed.json) +* [WZDx v4.0 Feed](/create-feed/schemas/wzdx_v4.0_feed.json) ## Business Rules The following business rules help assure a standardized and interpretable use of the WZDx specification. The specification describes the required structure and data fields to describe a work zone, whereas business rules are additional requirements for using the WZDx specification in a standard manner. Note that business rules are distinct from best practices in that the latter are suggestions and business rules are requirements. @@ -60,8 +62,8 @@ The following business rules help assure a standardized and interpretable use of 6. If the `lanes` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object is provided, it must include one entry for every lane in the road event. Providing lane information for only some of the lanes in a road event is not allowed. ## Data Validation -### WZDx v2.0, v3.0, and v3.1 -Use the corresponding JSON schema linked above to validate WZDx v2.0, v3.0, and v3.1 feeds. +### WZDx v2.0 and later +Use the corresponding JSON schema linked above to validate WZDx v2.0 and later. ### WZDx v1.0 To validate data feeds and measure compliance with the v1.1 specification, the GSA/18F team have developed a prototype data validation tool. This validation service that checks work zone activities against the WZDx v1.1 JSON schema specification is available [here](https://github.com/18F/usdot-jpo-ode-workzone-data-exchange/wiki). From 4a3be2f1ba045428b77e3b5013c742c1dd2cf6f1 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 15:12:44 -0400 Subject: [PATCH 003/388] RClarify that reduced_speed_limit should be in miles per hour --- create-feed/schemas/wzdx_v4.0_feed.json | 2 +- spec-content/objects/RoadEvent.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 9e906ca8..8c9c3721 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -266,7 +266,7 @@ "type": "boolean" }, "reduced_speed_limit": { - "description": "The reduced speed limit posted within the road event", + "description": "If applicable, the reduced speed limit posted within the road event, in miles per hour", "type": "integer", "minimum": 0 }, diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 0efb5775..46f64725 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -24,7 +24,7 @@ Name | Type | Description | Conformance | Notes `event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `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 | +`reduced_speed_limit` | Integer | If applicable, the reduced speed limit posted within the road event, in miles per hour. | Optional | `restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From 92a101c7043c00eebbdcc9be4f213307a113807b Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 15:24:12 -0400 Subject: [PATCH 004/388] Add clarifying sentence to reduced_speed_limit description --- spec-content/objects/RoadEvent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 46f64725..c315a6bb 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -24,7 +24,7 @@ Name | Type | Description | Conformance | Notes `event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `workers_present` | Boolean | A flag indicating that there are workers present in the event space. | Optional | -`reduced_speed_limit` | Integer | If applicable, the reduced speed limit posted within the road event, in miles per hour. | Optional | +`reduced_speed_limit` | Integer | The reduced speed limit posted within the road event, in miles per hour. This property only needs to be supplied if the speed limit within the road event is lower than the posted speed limit of the roadway. | Optional | `restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From 09f27d6876de472d9a1a350c9b734d3be3d29242 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 16:06:35 -0400 Subject: [PATCH 005/388] Deprecate lane_number --- create-feed/schemas/wzdx_v4.0_feed.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 9e906ca8..80e95543 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -411,7 +411,7 @@ "$ref": "#/definitions/LaneType" }, "lane_number": { - "description": "The number assigned to the lane to help identify its position. Flexible, but usually used for regular, driveable lanes", + "description": "***DEPRECATED*** The number assigned to the lane to help identify its position. Flexible, but usually used for regular, driveable lanes", "type": "integer", "minimum": 1 }, From 0c31357acb12d31e8098d47ace056c994b359d4f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 16:21:04 -0400 Subject: [PATCH 006/388] Remove deprecated properties from RoadEvent object --- create-feed/schemas/wzdx_v4.0_feed.json | 24 ++---------------------- spec-content/objects/RoadEvent.md | 4 ---- 2 files changed, 2 insertions(+), 26 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 9e906ca8..9117470e 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -305,29 +305,8 @@ "items": { "$ref": "#/definitions/Lane" } - }, - "road_event_id": { - "description": "***DEPRECATED*** A unique identifier issued by the data feed provider to identify the work zone project or activity", - "type": "string" - }, - "road_number": { - "description": "***DEPRECATED*** The road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", - "type": "string" - }, - "road_name": { - "description": "***DEPRECATED*** Publicly known name of the road on which the event occurs", - "type": "string" - }, - "total_num_lanes": { - "description": "***DEPRECATED*** The total number of lanes associated with the road event", - "type": "integer", - "exclusiveMinimum": 0 } }, - "anyOf": [ - { "required": ["road_name"] }, - { "required": ["road_names"] } - ], "required": [ "data_source_id", "direction", @@ -337,7 +316,8 @@ "end_date", "start_date_accuracy", "end_date_accuracy", - "vehicle_impact" + "vehicle_impact", + "road_names" ] }, "Relationship": { diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 0efb5775..6bf0a171 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -29,10 +29,6 @@ Name | Type | Description | Conformance | Notes `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`road_event_id` (DEPRECATED) | String | *This property is deprecated; use the `id` property on the parent [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object instead* — A unique identifier issued by the data feed provider to identify the road event activity. | Optional | This property will be removed in a future version of WZDx. -`road_number` (DEPRECATED) | String | *This property is deprecated and will be removed in a future version; include road numbers within the `road_names` array instead* — The road number designated by a jurisdiction such as a county, state, or interstate. | Optional | Examples I-5, VT 133. -`road_name` (DEPRECATED) | String | *This property is deprecated and will be removed in a future version; include road names within the `road_names` array instead* — Publicly known name of the road on which the event occurs. | Conditional: required if `road_names` property is not provided. | -`total_num_lanes` (DEPRECATED) | Integer | *This property is deprecated and will be removed in a future version* — 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. ## Used By Property | Object From 6c1802bd9ffe3a3157e7675484e365b6486c1737 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 16:22:12 -0400 Subject: [PATCH 007/388] Remove deprecated alternating-one-way LaneStatus --- create-feed/schemas/wzdx_v4.0_feed.json | 2 +- spec-content/enumerated-types/LaneStatus.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 9117470e..09cb7118 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -494,7 +494,7 @@ "LaneStatus": { "title": "Lane Status Enumerated Type", "description": "The status of the lane for the traveling public", - "enum": ["open", "closed", "shift-left", "shift-right", "merge-left", "merge-right", "alternating-one-way", "alternating-flow"] + "enum": ["open", "closed", "shift-left", "shift-right", "merge-left", "merge-right", "alternating-flow"] }, "LaneType": { "title": "Lane Type Enumerated Type", diff --git a/spec-content/enumerated-types/LaneStatus.md b/spec-content/enumerated-types/LaneStatus.md index 773003d3..21611c13 100644 --- a/spec-content/enumerated-types/LaneStatus.md +++ b/spec-content/enumerated-types/LaneStatus.md @@ -11,7 +11,6 @@ Value | Description `merge-left` | The lane gradually tapers while merging into the lane directly to the left `merge-right` | The lane gradually tapers while merging into the lane directly to the right `alternating-flow` | Traffic may travel in either direction, depending on certain conditions. Example conditions include time of day (e.g. reversible lanes), automated controls, or on-site personnel -`alternating-one-way` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `alternating-flow` instead* — The lane alternates the direction of travel via either automated controls or onsite personnel ## Used By Property | Object From 47d4dbb7220a5459544351669e3d046deabd6ce8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 16:40:31 -0400 Subject: [PATCH 008/388] Remove references to deprecated properties --- create-feed/schemas/wzdx_v4.0_feed.json | 14 +------------- spec-content/objects/RoadEvent.md | 2 +- spec-content/objects/RoadEventFeature.md | 2 +- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 09cb7118..fcb55658 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -175,19 +175,7 @@ "$ref": "#/definitions/BoundingBox" } }, - "oneOf": [ - { - "properties": { - "properties": { - "required": ["road_event_id"] - } - } - }, - { - "required": ["id"] - } - ], - "required": ["type","properties","geometry"] + "required": ["id","type","properties","geometry"] }, "RoadEvent": { "title": "Road Event", diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 6bf0a171..f9ba9b77 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -12,7 +12,7 @@ Name | Type | Description | Conformance | Notes `end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | `beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | `ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | -`road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Conditional: required if `road_name` is not provided. | This property captures the functionality of the deprecated `road_number` and `road_name` properties and conformance will be required in a future release. +`road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | `direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) `vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | `relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index 27eaa543..b105e940 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -4,7 +4,7 @@ The `RoadEventFeature` object is the container object for a WZDx [RoadEvent](/sp ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`id` | String | A unique identifier issued by the data feed provider to identify the WZDx road event. | Conditional; Required if road event's ID is not provided via the `road_event_id` property on the road event (detailed in the `properties` property). | In prior versions of WZDx, the road event ID was given by a `road_event_id` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object. Now, `road_event_id` is deprecated and this `id` should be used instead. This property will be required in a future version of WZDx. This is a GeoJSON property. +`id` | String | A unique identifier issued by the data feed provider to identify the WZDx road event. | Required | This is a GeoJSON property. `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. `properties` | [RoadEvent](/spec-content/objects/RoadEvent.md) | The specific details of road event. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3) | The geometry of the road event. The Geometry object's `type` property MUST be [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3). `LineString` allows specifying the entire road event path and should be preferred. `MultiPoint` should be used when only the start and end coordinates are known. | Required | This is a GeoJSON property. From c40359640ab3558720643a00555ef5e5aa6ec5e6 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 16:50:47 -0400 Subject: [PATCH 009/388] Remove deprecated lane types --- create-feed/schemas/wzdx_v4.0_feed.json | 25 ++++------------------- spec-content/enumerated-types/LaneType.md | 15 -------------- 2 files changed, 4 insertions(+), 36 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index fcb55658..0665bb44 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -493,31 +493,14 @@ "left-turning-lane", "right-exit-lane", "left-exit-lane", - "right-entrance-lane", - "left-entrance-lane", - "sidewalk", - "bike-lane", - "alternating-flow-lane", - "shoulder", - "hov-lane", - "reversible-lane", - "center-left-turn-lane", - "left-lane", - "right-lane", - "middle-lane", - "center-lane", - "right-shoulder", - "left-shoulder", - "right-merging-lane", - "left-merging-lane", "right-exit-ramp", - "right-second-exit-ramp", "left-exit-ramp", - "left-second-exit-ramp", "right-entrance-ramp", - "right-second-entrance-ramp", "left-entrance-ramp", - "left-second-entrance-ramp" + "sidewalk", + "bike-lane", + "shoulder", + "center-left-turn-lane" ] }, "LaneRestrictionUnit": { diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index 66793461..fd21ffbc 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -17,21 +17,6 @@ Value | Description `bike-lane` | A lane on the roadway for cyclists only `shoulder` | A generic shoulder `center-left-turn-lane` | A lane in the center of a bidirectional roadway in which traffic from both directions uses to make a left turn -`left-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `lane` instead* - The leftmost lane -`right-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `lane` instead* - The rightmost lane -`middle-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `lane` instead* - A lane that is not the rightmost or leftmost lane -`center-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `lane` instead* - The center-most lane when the total number of lanes is odd -`right-shoulder` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `shoulder` instead* — The outer shoulder or the rightmost shoulder -`left-shoulder` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `shoulder` instead* — The inner shoulder or the leftmost shoulder -`right-second-exit-ramp` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `right-exit-lane` instead* — The second exit ramp with an egress on the right in the direction of flow at an interchange -`left-second-exit-ramp` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `left-exit-lane` instead* — The second exit ramp with an egress on the left in the direction of flow at an interchange -`right-second-entrance-ramp` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `right-entrance-lane` instead* — The second entrance ramp with an ingress on the right in the direction of flow at an interchange -`left-second-entrance-ramp` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `left-entrance-lane` instead* — The second entrance ramp with an ingress on the left in the direction of flow at an interchange -`right-merging-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify merging lanes via the lane's `status` property* — The right lane where the lane ends with a gradual merge with the second most lane -`left-merging-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify merging lanes via the lane's `status` property* — The left lane where the lanes ends by a gradual merge with the second most left lane -`hov-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify hovs via the lane's `restrictions` property* — A high-occupancy vehicle lane -`alternating-flow-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify alternating flow via the lane's `status` property (value of `alternating-flow`)* — A lane where signal or flagger controls lane flow | -`reversible-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify reversible status via the lane's `status` property (value of `alternating-flow`)* — A lane in which traffic may travel in either direction, depending on certain conditions such as time of day | ## Used By Property | Object From d00f41b308ab7921a6b5e57acf6c417fee540d16 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 22:08:50 -0400 Subject: [PATCH 010/388] Note lane_number is deprecated in markdown --- spec-content/objects/Lane.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/Lane.md b/spec-content/objects/Lane.md index c89bb88a..41de7473 100644 --- a/spec-content/objects/Lane.md +++ b/spec-content/objects/Lane.md @@ -7,8 +7,8 @@ Name | Type | Description | Conformance | Notes `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` | [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. | Required | `status` | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Status of the lane for the traveling public. | Required | -`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. `restrictions` | Array; \[[LaneRestriction](/spec-content/objects/LaneRestriction.md)\] | A list of specific restrictions that apply to the lane. | Optional | +`lane_number` (DEPRECATED) | Positive Integer | *This property is deprecated; use `order` to indicate lane positions* — 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. ## Used By Property | Object From b9b80f3ae04cede914508ec5a3a867899c4e1ac8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 22:16:38 -0400 Subject: [PATCH 011/388] Remove lrs_type and lrs_url properties from RoadEvenDataSource --- create-feed/schemas/wzdx_v4.0_feed.json | 9 --------- spec-content/objects/RoadEvent.md | 4 ++-- spec-content/objects/RoadEventDataSource.md | 2 -- 3 files changed, 2 insertions(+), 13 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 9e906ca8..bd94a56b 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -121,15 +121,6 @@ "location_verify_method": { "description": "The method used to verify the accuracy of the location information", "type": "string" - }, - "lrs_type": { - "description": "Describes the type of linear referencing system used for the milepost measurements", - "type": "string" - }, - "lrs_url": { - "description": "A URL where additional information on the LRS information and transformation information is stored", - "type": "string", - "format": "uri" } }, "required": ["data_source_id", "organization_name", "location_method"] diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 0efb5775..16605e15 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -19,8 +19,8 @@ Name | Type | Description | Conformance | Notes `lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | `beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | `ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | -`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. -`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. +`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. +`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. `event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `workers_present` | Boolean | A flag indicating that there are workers present in the event space. | Optional | diff --git a/spec-content/objects/RoadEventDataSource.md b/spec-content/objects/RoadEventDataSource.md index 81ad0493..91968c67 100644 --- a/spec-content/objects/RoadEventDataSource.md +++ b/spec-content/objects/RoadEventDataSource.md @@ -12,8 +12,6 @@ Name | Type | Description | Conformance | Notes `contact_name` | String | The name of the individual or group responsible for the work zone data source. | Optional | Example: `Jo Help` `contact_email` | String; [email](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.2) | The email address of the individual or group responsible for the data source. | Optional | `location_verify_method` | String | The method used to verify the accuracy of the location information. | Optional | Example: `Survey accurate GPS equipment accurate to 0.1 cm` -`lrs_type` | String | Describes the type of linear referencing system (LRS) used for the milepost measurements. | Optional | Example: `Use of milemarkers posted by the roadways. These are registered to a dynamic segmentation of statewide LRS basemap.` -`lrs_url` | String; [uri](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.5) | A URL where additional information on the LRS information and transformation information is stored. | Optional | Example `https://aaa.bbb.com/lrs` ## Used By Property | Object From 540ebdd1ff1cbd2be6c3cfc370bede3ad914eec9 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 8 Jul 2021 22:20:44 -0400 Subject: [PATCH 012/388] Remove lrs_type and lrs_url from all example feed files --- .../comprehensive_linestring_example.geojson | 16 ++++------------ ...only_bidirectional_linestring_example.geojson | 4 +--- .../scenario1_simple_linestring_example.geojson | 8 ++------ ...cenario2_laneshift_linestring_example.geojson | 4 +--- ...ulder_bidrectional_linestring_example.geojson | 4 +--- .../scenario4_detour_linestring_example.geojson | 4 +--- ...cenario5_recurring_linestring_example.geojson | 4 +--- .../comprehensive_multipoint_example.geojson | 16 ++++------------ ...only_bidirectional_multipoint_example.geojson | 4 +--- .../scenario1_simple_multipoint_example.geojson | 8 ++------ ...cenario2_laneshift_multipoint_example.geojson | 4 +--- ...ulder_bidrectional_multipoint_example.geojson | 4 +--- .../scenario4_detour_multipoint_example.geojson | 4 +--- ...cenario5_recurring_multipoint_example.geojson | 4 +--- 14 files changed, 22 insertions(+), 66 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 830d5027..a6169e8f 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" }, { "data_source_id": "2", @@ -28,9 +26,7 @@ "update_frequency": 60, "update_date": "2020-06-18T14:39:01Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" }, { "data_source_id": "3", @@ -40,9 +36,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:05Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" }, { "data_source_id": "4", @@ -52,9 +46,7 @@ "update_frequency": 60, "update_date": "2020-06-18T14:38:59Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson index 32be0c50..8131155f 100644 --- a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index a6f6b451..33127d3b 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" }, { "data_source_id": "2", @@ -28,9 +26,7 @@ "update_frequency": 60, "update_date": "2020-06-18T14:39:01Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index 3ec8ffaf..10e94e70 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson index 3febad6d..a04d1225 100644 --- a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 0e5ed38b..76546f1e 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson index fc1817e7..b31b09e0 100644 --- a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index 9c2d4ab3..e6ef292e 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" }, { "data_source_id": "2", @@ -28,9 +26,7 @@ "update_frequency": 60, "update_date": "2020-06-18T14:39:01Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" }, { "data_source_id": "3", @@ -40,9 +36,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:05Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" }, { "data_source_id": "4", @@ -52,9 +46,7 @@ "update_frequency": 60, "update_date": "2020-06-18T14:38:59Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson index f3891e37..055d7bd6 100644 --- a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 04e4b0c0..26d9844e 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" }, { "data_source_id": "2", @@ -28,9 +26,7 @@ "update_frequency": 60, "update_date": "2020-06-18T14:39:01Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson index 9605e016..90bc65e4 100644 --- a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson index b0e5af91..95fcfb19 100644 --- a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson index 8946a76b..a58d89b5 100644 --- a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, diff --git a/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson index 366150cd..73dfd158 100644 --- a/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson @@ -16,9 +16,7 @@ "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", "location_verify_method": "GPS", - "location_method": "channel-device-method", - "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "location_method": "channel-device-method" } ] }, From 5d790d0ea69cabbf39bac52b5745c6a656374486 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 30 Jul 2021 10:26:07 -0400 Subject: [PATCH 013/388] Deprecate lrs info properties instead of removing --- create-feed/schemas/wzdx_v4.0_feed.json | 9 +++++++++ spec-content/objects/RoadEventDataSource.md | 2 ++ 2 files changed, 11 insertions(+) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index bd94a56b..e93112df 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -121,6 +121,15 @@ "location_verify_method": { "description": "The method used to verify the accuracy of the location information", "type": "string" + }, + "lrs_type": { + "description": "**DEPRECATED** Describes the type of linear referencing system used for the milepost measurements", + "type": "string" + }, + "lrs_url": { + "description": "**DEPRECATED** A URL where additional information on the LRS information and transformation information is stored", + "type": "string", + "format": "uri" } }, "required": ["data_source_id", "organization_name", "location_method"] diff --git a/spec-content/objects/RoadEventDataSource.md b/spec-content/objects/RoadEventDataSource.md index 91968c67..718a9547 100644 --- a/spec-content/objects/RoadEventDataSource.md +++ b/spec-content/objects/RoadEventDataSource.md @@ -12,6 +12,8 @@ Name | Type | Description | Conformance | Notes `contact_name` | String | The name of the individual or group responsible for the work zone data source. | Optional | Example: `Jo Help` `contact_email` | String; [email](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.2) | The email address of the individual or group responsible for the data source. | Optional | `location_verify_method` | String | The method used to verify the accuracy of the location information. | Optional | Example: `Survey accurate GPS equipment accurate to 0.1 cm` +`lrs_type` (DEPRECATED) | String | *This property is deprecated and will be removed in a future version* — Describes the type of linear referencing system (LRS) used for the milepost measurements. | Optional | Example: `Use of milemarkers posted by the roadways. These are registered to a dynamic segmentation of statewide LRS basemap.` +`lrs_url` (DEPRECATED) | String; [uri](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.5) | *This property is deprecated and will be removed in a future version* — A URL where additional information on the LRS information and transformation information is stored. | Optional | Example `https://aaa.bbb.com/lrs` ## Used By Property | Object From ad9d7dcbdf266cebb8b23123b94826d1aa210e6e Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 30 Jul 2021 10:46:11 -0400 Subject: [PATCH 014/388] Rename lane LaneType to general --- .../comprehensive_linestring_example.geojson | 52 +++++++++---------- ...y_bidirectional_linestring_example.geojson | 2 +- ...cenario1_simple_linestring_example.geojson | 22 ++++---- ...ario2_laneshift_linestring_example.geojson | 6 +-- ...er_bidrectional_linestring_example.geojson | 8 +-- ...cenario4_detour_linestring_example.geojson | 4 +- ...ario5_recurring_linestring_example.geojson | 10 ++-- .../comprehensive_multipoint_example.geojson | 52 +++++++++---------- ...y_bidirectional_multipoint_example.geojson | 2 +- ...cenario1_simple_multipoint_example.geojson | 22 ++++---- ...ario2_laneshift_multipoint_example.geojson | 6 +-- ...er_bidrectional_multipoint_example.geojson | 8 +-- ...cenario4_detour_multipoint_example.geojson | 4 +- ...ario5_recurring_multipoint_example.geojson | 10 ++-- create-feed/schemas/wzdx_v4.0_feed.json | 2 +- spec-content/enumerated-types/LaneType.md | 2 +- 16 files changed, 106 insertions(+), 106 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 830d5027..a790491f 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -147,7 +147,7 @@ { "order": 1, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "local-access-only" @@ -286,7 +286,7 @@ { "order": 1, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "reduced-width", @@ -298,7 +298,7 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" } ] }, @@ -620,17 +620,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -719,17 +719,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -831,17 +831,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -990,17 +990,17 @@ { "order": 2, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 3, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 4, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 5, @@ -1120,12 +1120,12 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, @@ -1197,12 +1197,12 @@ { "order": 1, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 2, "status": "open", - "type": "lane" + "type": "general" }, { "order": 3, @@ -1300,7 +1300,7 @@ { "order": 2, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "reduced-width", @@ -1312,7 +1312,7 @@ { "order": 3, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 4, @@ -2083,7 +2083,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -2176,7 +2176,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -2261,7 +2261,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -2346,7 +2346,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -2431,7 +2431,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, diff --git a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson index 32be0c50..64df6e2f 100644 --- a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson @@ -111,7 +111,7 @@ { "order": 1, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "local-access-only" diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index a6f6b451..c0d1f7be 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -118,7 +118,7 @@ { "order": 1, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "reduced-width", @@ -130,7 +130,7 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" } ] }, @@ -452,17 +452,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -551,17 +551,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -663,17 +663,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index 3ec8ffaf..3f8309a8 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -66,17 +66,17 @@ { "order": 2, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 3, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 4, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 5, diff --git a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson index 3febad6d..59d0bdf7 100644 --- a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson @@ -65,12 +65,12 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, @@ -142,12 +142,12 @@ { "order": 1, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 2, "status": "open", - "type": "lane" + "type": "general" }, { "order": 3, diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 0e5ed38b..bf7ccad3 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -74,7 +74,7 @@ { "order": 2, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "reduced-width", @@ -86,7 +86,7 @@ { "order": 3, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 4, diff --git a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson index fc1817e7..bbdfa695 100644 --- a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson @@ -62,7 +62,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -155,7 +155,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -240,7 +240,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -325,7 +325,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -410,7 +410,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index 9c2d4ab3..cef2f7b7 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -131,7 +131,7 @@ { "order": 1, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "local-access-only" @@ -230,7 +230,7 @@ { "order": 1, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "reduced-width", @@ -242,7 +242,7 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" } ] }, @@ -312,17 +312,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -403,17 +403,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -491,17 +491,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -566,17 +566,17 @@ { "order": 2, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 3, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 4, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 5, @@ -640,12 +640,12 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, @@ -705,12 +705,12 @@ { "order": 1, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 2, "status": "open", - "type": "lane" + "type": "general" }, { "order": 3, @@ -788,7 +788,7 @@ { "order": 2, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "reduced-width", @@ -800,7 +800,7 @@ { "order": 3, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 4, @@ -1003,7 +1003,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -1064,7 +1064,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -1125,7 +1125,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -1186,7 +1186,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -1247,7 +1247,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, diff --git a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson index f3891e37..a8ab1bdd 100644 --- a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson @@ -95,7 +95,7 @@ { "order": 1, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "local-access-only" diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 04e4b0c0..151a8bec 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -102,7 +102,7 @@ { "order": 1, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "reduced-width", @@ -114,7 +114,7 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" } ] }, @@ -184,17 +184,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -275,17 +275,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, @@ -363,17 +363,17 @@ { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, "status": "open", - "type": "lane" + "type": "general" }, { "order": 4, "status": "open", - "type": "lane" + "type": "general" }, { "order": 5, diff --git a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson index 9605e016..d13883d4 100644 --- a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson @@ -66,17 +66,17 @@ { "order": 2, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 3, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 4, "status": "shift-right", - "type": "lane" + "type": "general" }, { "order": 5, diff --git a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson index b0e5af91..9924a692 100644 --- a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson @@ -65,12 +65,12 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 3, @@ -130,12 +130,12 @@ { "order": 1, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 2, "status": "open", - "type": "lane" + "type": "general" }, { "order": 3, diff --git a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson index 8946a76b..b5957d67 100644 --- a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson @@ -74,7 +74,7 @@ { "order": 2, "status": "open", - "type": "lane", + "type": "general", "restrictions": [ { "restriction_type": "reduced-width", @@ -86,7 +86,7 @@ { "order": 3, "status": "closed", - "type": "lane" + "type": "general" }, { "order": 4, diff --git a/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson index 366150cd..fa155557 100644 --- a/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson @@ -62,7 +62,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -123,7 +123,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -184,7 +184,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -245,7 +245,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, @@ -306,7 +306,7 @@ { "order": 1, "status": "open", - "type": "lane" + "type": "general" }, { "order": 2, diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 9e906ca8..45153ec8 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -520,7 +520,7 @@ "title": "Lane Type Enumerated Type", "description": "An indication of the type of lane or shoulder", "enum": [ - "lane", + "general", "right-turning-lane", "left-turning-lane", "right-exit-lane", diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index 66793461..4b59b0e5 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -4,7 +4,7 @@ A description of the type of a lane on the roadway. ## Values Value | Description --- | --- -`lane` | Generic lane type, intended to be used for normal, driveable lanes +`general` | The most generic lane type, intended to be used for general purpose travel lanes. `right-turning-lane` | A lane where right turns are permissible `left-turning-lane`| A lane where left turns are permissible `right-exit-lane` | A lane with an egress on the right From 254c2a1c1c9354b961e10144e4e13e345196723f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 30 Jul 2021 10:56:04 -0400 Subject: [PATCH 015/388] Remove turning lane LaneTypes --- create-feed/schemas/wzdx_v4.0_feed.json | 2 -- spec-content/enumerated-types/LaneType.md | 2 -- 2 files changed, 4 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 45153ec8..ba38c664 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -521,8 +521,6 @@ "description": "An indication of the type of lane or shoulder", "enum": [ "general", - "right-turning-lane", - "left-turning-lane", "right-exit-lane", "left-exit-lane", "right-entrance-lane", diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index 4b59b0e5..53c8ab37 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -5,8 +5,6 @@ A description of the type of a lane on the roadway. Value | Description --- | --- `general` | The most generic lane type, intended to be used for general purpose travel lanes. -`right-turning-lane` | A lane where right turns are permissible -`left-turning-lane`| A lane where left turns are permissible `right-exit-lane` | A lane with an egress on the right `left-exit-lane` | A lane with an egress on the left `left-exit-ramp`| An exit ramp with an egress on the left in the direction of flow at an interchange From fe8b8fc1fa529a275a6501e0a10612ca68a3d127 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 30 Jul 2021 12:48:10 -0400 Subject: [PATCH 016/388] Remove all deprecated lane types --- create-feed/schemas/wzdx_v4.0_feed.json | 27 +++++------------------ spec-content/enumerated-types/LaneType.md | 15 ------------- 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index ba38c664..3ea6d531 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -521,33 +521,18 @@ "description": "An indication of the type of lane or shoulder", "enum": [ "general", + "right-turning-lane", + "left-turning-lane", "right-exit-lane", "left-exit-lane", - "right-entrance-lane", - "left-entrance-lane", - "sidewalk", - "bike-lane", - "alternating-flow-lane", - "shoulder", - "hov-lane", - "reversible-lane", - "center-left-turn-lane", - "left-lane", - "right-lane", - "middle-lane", - "center-lane", - "right-shoulder", - "left-shoulder", - "right-merging-lane", - "left-merging-lane", "right-exit-ramp", - "right-second-exit-ramp", "left-exit-ramp", - "left-second-exit-ramp", "right-entrance-ramp", - "right-second-entrance-ramp", "left-entrance-ramp", - "left-second-entrance-ramp" + "sidewalk", + "bike-lane", + "shoulder", + "center-left-turn-lane" ] }, "LaneRestrictionUnit": { diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index 53c8ab37..633913d9 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -15,21 +15,6 @@ Value | Description `bike-lane` | A lane on the roadway for cyclists only `shoulder` | A generic shoulder `center-left-turn-lane` | A lane in the center of a bidirectional roadway in which traffic from both directions uses to make a left turn -`left-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `lane` instead* - The leftmost lane -`right-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `lane` instead* - The rightmost lane -`middle-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `lane` instead* - A lane that is not the rightmost or leftmost lane -`center-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `lane` instead* - The center-most lane when the total number of lanes is odd -`right-shoulder` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `shoulder` instead* — The outer shoulder or the rightmost shoulder -`left-shoulder` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `shoulder` instead* — The inner shoulder or the leftmost shoulder -`right-second-exit-ramp` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `right-exit-lane` instead* — The second exit ramp with an egress on the right in the direction of flow at an interchange -`left-second-exit-ramp` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `left-exit-lane` instead* — The second exit ramp with an egress on the left in the direction of flow at an interchange -`right-second-entrance-ramp` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `right-entrance-lane` instead* — The second entrance ramp with an ingress on the right in the direction of flow at an interchange -`left-second-entrance-ramp` (DEPRECATED) | *This value is deprecated and will be removed in a future version; use `left-entrance-lane` instead* — The second entrance ramp with an ingress on the left in the direction of flow at an interchange -`right-merging-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify merging lanes via the lane's `status` property* — The right lane where the lane ends with a gradual merge with the second most lane -`left-merging-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify merging lanes via the lane's `status` property* — The left lane where the lanes ends by a gradual merge with the second most left lane -`hov-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify hovs via the lane's `restrictions` property* — A high-occupancy vehicle lane -`alternating-flow-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify alternating flow via the lane's `status` property (value of `alternating-flow`)* — A lane where signal or flagger controls lane flow | -`reversible-lane` (DEPRECATED) | *This value is deprecated and will be removed in a future version; specify reversible status via the lane's `status` property (value of `alternating-flow`)* — A lane in which traffic may travel in either direction, depending on certain conditions such as time of day | ## Used By Property | Object From f7029fcb2643f25ca5f19c92bdde12dfbb81a999 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 30 Jul 2021 12:55:01 -0400 Subject: [PATCH 017/388] Remove turning lane types --- create-feed/schemas/wzdx_v4.0_feed.json | 2 -- 1 file changed, 2 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 3ea6d531..c5328beb 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -521,8 +521,6 @@ "description": "An indication of the type of lane or shoulder", "enum": [ "general", - "right-turning-lane", - "left-turning-lane", "right-exit-lane", "left-exit-lane", "right-exit-ramp", From bf6a80ad8264cf83a5cdb3308fc82adbf08eebe9 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 6 Aug 2021 10:54:07 -0400 Subject: [PATCH 018/388] Add parking LaneType --- create-feed/schemas/wzdx_v4.0_feed.json | 1 + spec-content/enumerated-types/LaneType.md | 1 + 2 files changed, 2 insertions(+) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index c5328beb..8d233c93 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -530,6 +530,7 @@ "sidewalk", "bike-lane", "shoulder", + "parking", "center-left-turn-lane" ] }, diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index 633913d9..b4a52ffe 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -14,6 +14,7 @@ Value | Description `sidewalk` | A sidewalk or pedestrian way `bike-lane` | A lane on the roadway for cyclists only `shoulder` | A generic shoulder +`parking` | A lane used for parking, not allowed for travel `center-left-turn-lane` | A lane in the center of a bidirectional roadway in which traffic from both directions uses to make a left turn ## Used By From c919592d0c168422e54ed5c975d65ecd20ce75dd Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 6 Aug 2021 11:11:38 -0400 Subject: [PATCH 019/388] Remove left and right from exit/entrance LaneType & add entrance-lane --- create-feed/schemas/wzdx_v4.0_feed.json | 10 ++++------ spec-content/enumerated-types/LaneType.md | 22 ++++++++++------------ 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 8d233c93..3356b055 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -521,12 +521,10 @@ "description": "An indication of the type of lane or shoulder", "enum": [ "general", - "right-exit-lane", - "left-exit-lane", - "right-exit-ramp", - "left-exit-ramp", - "right-entrance-ramp", - "left-entrance-ramp", + "exit-lane", + "exit-ramp", + "entrance-lane", + "entrance-ramp", "sidewalk", "bike-lane", "shoulder", diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index b4a52ffe..465e0870 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -4,18 +4,16 @@ A description of the type of a lane on the roadway. ## Values Value | Description --- | --- -`general` | The most generic lane type, intended to be used for general purpose travel lanes. -`right-exit-lane` | A lane with an egress on the right -`left-exit-lane` | A lane with an egress on the left -`left-exit-ramp`| An exit ramp with an egress on the left in the direction of flow at an interchange -`right-exit-ramp` | An exit ramp with an egress on the right in the direction of flow at an interchange -`right-entrance-ramp` | A lane or ramp with an ingress on the right -`left-entrance-ramp` | A lane or ramp with an ingress on the left -`sidewalk` | A sidewalk or pedestrian way -`bike-lane` | A lane on the roadway for cyclists only -`shoulder` | A generic shoulder -`parking` | A lane used for parking, not allowed for travel -`center-left-turn-lane` | A lane in the center of a bidirectional roadway in which traffic from both directions uses to make a left turn +`general` | A generic lane type, intended to be used for general purpose travel lanes. +`exit-lane` | A lane leading towards an egress from the current roadway. An `exit-lane` usually becomes an `exit-ramp` after a gore point. +`exit-ramp`| A lane at an interchange leading away from the mainline to another roadway. +`entrance-lane` | A lane leading towards an ingress to another roadway. An `entrance-lane` usually becomes an `entrance-ramp` after a gore point. +`entrance-ramp` | A lane at an interchange leading away from the current roadway to another roadway. +`sidewalk` | A path for pedestrians, usually on the side of the roadway. +`bike-lane` | A lane on the roadway for use by cyclists only. +`shoulder` | A portion of the roadway that is outside (either right or left) of the main travel lanes on the roadway. A shoulder can have many uses but is not intended for general traffic. +`parking` | A lane used for parking, not allowed for travel. +`center-left-turn-lane` | A lane in the center of a bidirectional roadway that traffic from both directions uses to make a left turn. ## Used By Property | Object From 44449a37d469a09a020b2c5d8a0c555d5c31921e Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 6 Aug 2021 13:14:47 -0400 Subject: [PATCH 020/388] Add median LaneType --- create-feed/schemas/wzdx_v4.0_feed.json | 1 + spec-content/enumerated-types/LaneType.md | 1 + 2 files changed, 2 insertions(+) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 3356b055..57f728e3 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -529,6 +529,7 @@ "bike-lane", "shoulder", "parking", + "median", "center-left-turn-lane" ] }, diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index 465e0870..c524131a 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -13,6 +13,7 @@ Value | Description `bike-lane` | A lane on the roadway for use by cyclists only. `shoulder` | A portion of the roadway that is outside (either right or left) of the main travel lanes on the roadway. A shoulder can have many uses but is not intended for general traffic. `parking` | A lane used for parking, not allowed for travel. +`median` | An often unpaved, non-drivable area that separates sections of the roadway. In most cases a median should only be described if it separates lanes in a single direction of travel, as per [business rule #1](/create-feed/README.md) each direction of travel must be represented a separate road event. `center-left-turn-lane` | A lane in the center of a bidirectional roadway that traffic from both directions uses to make a left turn. ## Used By From 8808b8844b37ba45ba4f9bdfd075788edaa332d3 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 6 Aug 2021 13:16:43 -0400 Subject: [PATCH 021/388] Clarify shoulder lane type description --- spec-content/enumerated-types/LaneType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index c524131a..c4708285 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -11,7 +11,7 @@ Value | Description `entrance-ramp` | A lane at an interchange leading away from the current roadway to another roadway. `sidewalk` | A path for pedestrians, usually on the side of the roadway. `bike-lane` | A lane on the roadway for use by cyclists only. -`shoulder` | A portion of the roadway that is outside (either right or left) of the main travel lanes on the roadway. A shoulder can have many uses but is not intended for general traffic. +`shoulder` | A portion of the roadway that is outside (either right or left) of the main travel lanes. A shoulder can have many uses but is not intended for general traffic. `parking` | A lane used for parking, not allowed for travel. `median` | An often unpaved, non-drivable area that separates sections of the roadway. In most cases a median should only be described if it separates lanes in a single direction of travel, as per [business rule #1](/create-feed/README.md) each direction of travel must be represented a separate road event. `center-left-turn-lane` | A lane in the center of a bidirectional roadway that traffic from both directions uses to make a left turn. From ec4f7a2703cbb04cd47a2b2eb2c0bbc84b618eb7 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 6 Aug 2021 13:19:59 -0400 Subject: [PATCH 022/388] Update examples to match exit/entrance-lane types --- .../comprehensive_linestring_example.geojson | 4 ++-- .../scenario1_simple_linestring_example.geojson | 4 ++-- .../comprehensive_multipoint_example.geojson | 4 ++-- .../scenario1_simple_multipoint_example.geojson | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index a790491f..d8ae58bc 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -635,7 +635,7 @@ { "order": 5, "status": "open", - "type": "right-entrance-ramp" + "type": "entrance-lane" }, { "order": 6, @@ -734,7 +734,7 @@ { "order": 5, "status": "open", - "type": "right-exit-lane" + "type": "exit-lane" }, { "order": 6, diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index c0d1f7be..fa6df9b6 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -467,7 +467,7 @@ { "order": 5, "status": "open", - "type": "right-entrance-ramp" + "type": "entrance-lane" }, { "order": 6, @@ -566,7 +566,7 @@ { "order": 5, "status": "open", - "type": "right-exit-lane" + "type": "exit-lane" }, { "order": 6, diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index cef2f7b7..945566ed 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -327,7 +327,7 @@ { "order": 5, "status": "open", - "type": "right-entrance-ramp" + "type": "entrance-lane" }, { "order": 6, @@ -418,7 +418,7 @@ { "order": 5, "status": "open", - "type": "right-exit-lane" + "type": "exit-lane" }, { "order": 6, diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 151a8bec..418cdf45 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -199,7 +199,7 @@ { "order": 5, "status": "open", - "type": "right-entrance-ramp" + "type": "entrance-lane" }, { "order": 6, @@ -290,7 +290,7 @@ { "order": 5, "status": "open", - "type": "right-exit-lane" + "type": "exit-lane" }, { "order": 6, From 84da0cb740247311a92f764439e86db45c80d232 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 6 Aug 2021 13:21:08 -0400 Subject: [PATCH 023/388] Update lane type description wording --- spec-content/enumerated-types/LaneType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index c4708285..fe068370 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -6,7 +6,7 @@ Value | Description --- | --- `general` | A generic lane type, intended to be used for general purpose travel lanes. `exit-lane` | A lane leading towards an egress from the current roadway. An `exit-lane` usually becomes an `exit-ramp` after a gore point. -`exit-ramp`| A lane at an interchange leading away from the mainline to another roadway. +`exit-ramp`| A lane at an interchange leading away from the current roadway to another roadway. `entrance-lane` | A lane leading towards an ingress to another roadway. An `entrance-lane` usually becomes an `entrance-ramp` after a gore point. `entrance-ramp` | A lane at an interchange leading away from the current roadway to another roadway. `sidewalk` | A path for pedestrians, usually on the side of the roadway. From c84859450b725cbe40a5ca72cefac717c6e20971 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 6 Aug 2021 15:41:09 -0400 Subject: [PATCH 024/388] Update description of LaneType --- spec-content/enumerated-types/LaneType.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index fe068370..7867ed55 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -1,5 +1,5 @@ -# Lane Type -A description of the type of a lane on the roadway. +# Lane Type +A description of the static properties a physical section of the roadway, intended to reflect information about its function that is not covered by its status (see [LaneStatus](/spec-content/enumerated-types/LaneStatus.md)). ## Values Value | Description From 231d823819afb1ca16460dd2ba3944671d897b0f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 6 Aug 2021 15:44:58 -0400 Subject: [PATCH 025/388] Fix typo in LaneType description --- spec-content/enumerated-types/LaneType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index 7867ed55..69213bf0 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -1,5 +1,5 @@ # Lane Type -A description of the static properties a physical section of the roadway, intended to reflect information about its function that is not covered by its status (see [LaneStatus](/spec-content/enumerated-types/LaneStatus.md)). +A description of the static properties of a section of the roadway, intended to reflect information about its function that is not covered by its status (see [LaneStatus](/spec-content/enumerated-types/LaneStatus.md)). ## Values Value | Description From dc39ccb1555b00b2a339a0de3674a82e8a00fb72 Mon Sep 17 00:00:00 2001 From: Dunge Date: Thu, 12 Aug 2021 15:03:53 -0400 Subject: [PATCH 026/388] #159 Additional vehicle_impact to enable real time field data --- spec-content/enumerated-types/VehicleImpact.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/VehicleImpact.md b/spec-content/enumerated-types/VehicleImpact.md index 8dfe099b..349266da 100644 --- a/spec-content/enumerated-types/VehicleImpact.md +++ b/spec-content/enumerated-types/VehicleImpact.md @@ -9,7 +9,13 @@ Value | Description `all-lanes-open` | All lanes are open `alternating-one-way` | The roadway is alternating one way `unknown` | The vehicle impact is unknown - +`some-lanes-closed-merge-left` | Some lanes merge to the left +`some-lanes-closed-merge-right` | Some lanes merge to the right +`all-lanes-open-shift-left` | All lanes are open, shift to the left +`all-lanes-open-shift-right` | All lanes are open, shift to the right +`some-lanes-closed-split` | Some lanes end and split & merge to the right and left +`flagging` | A flagging operation is in effect +`temporary-traffic-signal` | A temporary traffic signal ## Used By Property | Object --- | --- From b1cc3a77f0f754e809adc11bc4dfbcde0b219ea1 Mon Sep 17 00:00:00 2001 From: Dunge Date: Thu, 12 Aug 2021 15:11:32 -0400 Subject: [PATCH 027/388] #159 Additional vehicle_impact to enable real time field data | clarification --- spec-content/enumerated-types/VehicleImpact.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/enumerated-types/VehicleImpact.md b/spec-content/enumerated-types/VehicleImpact.md index 349266da..24edbc70 100644 --- a/spec-content/enumerated-types/VehicleImpact.md +++ b/spec-content/enumerated-types/VehicleImpact.md @@ -8,14 +8,14 @@ Value | Description `some-lanes-closed` | Some lanes are closed `all-lanes-open` | All lanes are open `alternating-one-way` | The roadway is alternating one way -`unknown` | The vehicle impact is unknown `some-lanes-closed-merge-left` | Some lanes merge to the left `some-lanes-closed-merge-right` | Some lanes merge to the right `all-lanes-open-shift-left` | All lanes are open, shift to the left `all-lanes-open-shift-right` | All lanes are open, shift to the right `some-lanes-closed-split` | Some lanes end and split & merge to the right and left `flagging` | A flagging operation is in effect -`temporary-traffic-signal` | A temporary traffic signal +`temporary-traffic-signal` | A temporary traffic signal is in operation +`unknown` | The vehicle impact is unknown ## Used By Property | Object --- | --- From 472aefb6d64531075b63fcfb24f36a4e9c230f82 Mon Sep 17 00:00:00 2001 From: Dunge Date: Thu, 12 Aug 2021 17:06:35 -0400 Subject: [PATCH 028/388] #159 Additional vehicle_impact to enable real time field data --- spec-content/enumerated-types/VehicleImpact.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/VehicleImpact.md b/spec-content/enumerated-types/VehicleImpact.md index 8dfe099b..24edbc70 100644 --- a/spec-content/enumerated-types/VehicleImpact.md +++ b/spec-content/enumerated-types/VehicleImpact.md @@ -8,8 +8,14 @@ Value | Description `some-lanes-closed` | Some lanes are closed `all-lanes-open` | All lanes are open `alternating-one-way` | The roadway is alternating one way +`some-lanes-closed-merge-left` | Some lanes merge to the left +`some-lanes-closed-merge-right` | Some lanes merge to the right +`all-lanes-open-shift-left` | All lanes are open, shift to the left +`all-lanes-open-shift-right` | All lanes are open, shift to the right +`some-lanes-closed-split` | Some lanes end and split & merge to the right and left +`flagging` | A flagging operation is in effect +`temporary-traffic-signal` | A temporary traffic signal is in operation `unknown` | The vehicle impact is unknown - ## Used By Property | Object --- | --- From 1e55dddcd6c2c563fcfdfb73f657d6d651c8bc8e Mon Sep 17 00:00:00 2001 From: Dunge Date: Thu, 12 Aug 2021 17:17:40 -0400 Subject: [PATCH 029/388] Additional vehicle_impact to enable real time field data | Adapt schema --- create-feed/schemas/wzdx_v4.0_feed.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 9e906ca8..47655552 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -473,7 +473,7 @@ "VehicleImpact": { "title": "Vehicle Impact Enumerated Type", "description": "The impact to vehicular lanes along a single road in a single direction", - "enum": ["all-lanes-closed", "some-lanes-closed", "all-lanes-open", "alternating-one-way", "unknown"] + "enum": ["all-lanes-closed", "some-lanes-closed", "all-lanes-open", "alternating-one-way", "some-lanes-closed-merge-left", "some-lanes-closed-merge-right", "all-lanes-open-shift-left", "all-lanes-open-shift-right", "some-lanes-closed-split", "flagging", "temporary-traffic-signal", "unknown"] }, "RoadRestriction": { "title": "Road Restriction Enumerated Type", From 38c6a7e06e86e44b39abd9f0e20d2c53dd71fc86 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 17 Aug 2021 08:50:49 -0400 Subject: [PATCH 030/388] Update update_date description in v4.0 schema to match main --- create-feed/schemas/wzdx_v4.0_feed.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 9e906ca8..c5c9dc08 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -59,7 +59,7 @@ "minimum": 1 }, "update_date": { - "description": "The UTC date and time when the data feed was last updated", + "description": "The UTC date and time when the GeoJSON file (representing the instance of the feed) was generated", "type": "string", "format": "date-time" }, From 6f54bc01a07ba0bdc98cff1fa7b44d82b5dbeddd Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 14:57:09 -0400 Subject: [PATCH 031/388] Create RoadEvent-RestrictionsNotice.md --- .../objects/RoadEvent-RestrictionsNotice.md | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 spec-content/objects/RoadEvent-RestrictionsNotice.md diff --git a/spec-content/objects/RoadEvent-RestrictionsNotice.md b/spec-content/objects/RoadEvent-RestrictionsNotice.md new file mode 100644 index 00000000..b54f51a9 --- /dev/null +++ b/spec-content/objects/RoadEvent-RestrictionsNotice.md @@ -0,0 +1,31 @@ +# RoadEvent - Restrictions Notice Object +The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone`, `restrictions-notice`, and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | +`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same WZDx GeoJSON document. +`beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | +`ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | +`road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | +`direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) +`vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | +`restrictions` | Array; \[[Restriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more restrictions applying to the road event being described. | Conditional: required if `lanes` is not provided. | +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Conditional: required if `restrictions` is not provided. | +`relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | +`beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | +`ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | +`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. +`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. +`description` | String | Short free text description of the road event. | Optional | This will be populated with formal phrases in later version of this specification. +`creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. +`update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. + +## Used By +Property | Object +--- | --- +`properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) + +## Important Notes +The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. From a75e1c457e32a11500b19395a94902e65680c19d Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:16:05 -0400 Subject: [PATCH 032/388] Update EventType.md --- spec-content/enumerated-types/EventType.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spec-content/enumerated-types/EventType.md b/spec-content/enumerated-types/EventType.md index ff565054..4c295499 100644 --- a/spec-content/enumerated-types/EventType.md +++ b/spec-content/enumerated-types/EventType.md @@ -5,6 +5,7 @@ The type of a WZDx road event. Value | Description --- | --- `work-zone` | An area of a trafficway with highway construction, maintenance, or utility-work activities. A work zone is typically marked by signs, channeling devices, barriers, pavement markings, and/or work vehicles. It extends from the first warning sign or flashing lights on a vehicle to the "End of Road Work" sign or the last traffic control device. A work zone may be for short or long durations and may include stationary or moving activities.
Inclusions:
  1. Long-term stationary highway construction such as building a new bridge, adding travel lanes to the roadway, and extending an existing trafficway.
  2. Mobile highway maintenance such as striping the roadway, median, and roadside grass mowing/landscaping, and pothole repair.
  3. Short-term stationary utility work such as repairing electric, gas, or water lines within the trafficway.
Exclusions:
  1. Private construction, maintenance, or utility work outside the trafficway.
*The AASHTO term equivalent to roadway is traveled way.
*The AASHTO term equivalent to trafficway is highway, street, or road.

Source: https://www.fhwa.dot.gov/publications/publicroads/99mayjun/workzone.cfm +`restrictions-notice` | A linear segment, of the transportation network, with a permanent or persistent restriction(s). Restrictions are regulations that limit how the transportation network can be used. `detour` | A temporary rerouting of road users onto an existing trafficway to avoid a work zone or other impedance.

Source: https://mutcd.fhwa.dot.gov/htm/2009/part6/part6c.htm ## Used By From bb12057e09a3d73cbd51f88d74a59c5a478b5e6e Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Mon, 23 Aug 2021 14:23:04 -0500 Subject: [PATCH 033/388] Deprecate Location Verify Method Deprecating location verify method from schema --- create-feed/schemas/wzdx_v4.0_feed.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index c5c9dc08..eecf63e9 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -118,10 +118,6 @@ "location_method": { "$ref": "#/definitions/LocationMethod" }, - "location_verify_method": { - "description": "The method used to verify the accuracy of the location information", - "type": "string" - }, "lrs_type": { "description": "Describes the type of linear referencing system used for the milepost measurements", "type": "string" @@ -130,6 +126,10 @@ "description": "A URL where additional information on the LRS information and transformation information is stored", "type": "string", "format": "uri" + }, + "location_verify_method": { + "description": "***DEPRECATED***The method used to verify the accuracy of the location information", + "type": "string" } }, "required": ["data_source_id", "organization_name", "location_method"] From b6f7e29ef29946d56afe97f6dea49bb9a62323e7 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:25:22 -0400 Subject: [PATCH 034/388] Update and rename RoadRestriction.md to Restriction.md --- spec-content/enumerated-types/Restriction.md | 26 +++++++++++++++++++ .../enumerated-types/RoadRestriction.md | 26 ------------------- 2 files changed, 26 insertions(+), 26 deletions(-) create mode 100644 spec-content/enumerated-types/Restriction.md delete mode 100644 spec-content/enumerated-types/RoadRestriction.md diff --git a/spec-content/enumerated-types/Restriction.md b/spec-content/enumerated-types/Restriction.md new file mode 100644 index 00000000..0d232d81 --- /dev/null +++ b/spec-content/enumerated-types/Restriction.md @@ -0,0 +1,26 @@ +# Restriction +The type of vehicle restriction on a roadway. + +## Values +Value | Description +--- | --- +`local-access-only` | Only vehicles accessing addresses along the segment being described are allowed; this includes emergency services, deliveries, and direct property access +`no-trucks` | Trucks are prohibited from traveling this part of the network. +`travel-peak-hours-only` | Travel restricted to travel peak hours only +`hov-3` | Travel restricted to high occupancy vehicles of three or more +`hov-2` | Travel restricted to high occupancy vehicles of two or more +`no-parking` | No parking along the segment being described. +`reduced-width` | Lane width reduced along the segment being described. +`reduced-height` | Height restrictions reduced along the segment being described. +`reduced-length` | Vehicle length restrictions reduced along the segment being described. +`reduced-weight` | Vehicle weight restrictions reduced along the segment being described. +`axle-load-limit` | Vehicle axle-load-limit restrictions reduced along the segment being described. +`gross-weight-limit` | Vehicle gross-weight-limit restrictions reduced along the segment being described. +`towing-prohibited` | Towing prohibited along the segment being described. +`permitted-oversize-loads-prohibited` | “Permitted oversize loads” prohibited along the segment being described; this applies
to annual oversize load permits. + +## Used By +Property | Object +--- | --- +`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) diff --git a/spec-content/enumerated-types/RoadRestriction.md b/spec-content/enumerated-types/RoadRestriction.md deleted file mode 100644 index 5be636d4..00000000 --- a/spec-content/enumerated-types/RoadRestriction.md +++ /dev/null @@ -1,26 +0,0 @@ -# Road Restriction -The type of vehicle restriction on a roadway. - -## Values -Value | Description ---- | --- -`local-access-only` | Travel allowed only for vehicles accessing addresses in the work zone area; this includes emergency services, deliveries, and direct property access -`no-trucks` | Trucks are prohibited from traveling in work zone area -`travel-peak-hours-only` | Travel restricted to travel peak hours only -`hov-3` | Travel restricted to high occupancy vehicles of three or more -`hov-2` | Travel restricted to high occupancy vehicles of two or more -`no-parking` | No parking in work zone area -`reduced-width` | Lane width reduced in work zone area -`reduced-height` | Height restrictions reduced in work zone area -`reduced-length` | Vehicle length restrictions reduced in work zone area -`reduced-weight` | Vehicle weight restrictions reduced in work zone area -`axle-load-limit` | Vehicle axle-load-limit restrictions reduced in work zone area -`gross-weight-limit` | Vehicle gross-weight-limit restrictions reduced in work zone area -`towing-prohibited` | Towing prohibited in work zone area -`permitted-oversize-loads-prohibited` | “Permitted oversize loads” prohibited in work zone area; this applies
to annual oversize load permits. - -## Used By -Property | Object ---- | --- -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) From ccd110135a50fdcae1b5f5548b6f0e8489681cbb Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Mon, 23 Aug 2021 14:28:23 -0500 Subject: [PATCH 035/388] Deprecate location verify method Deprecate location verify method and add reference to spatial verification which defines using a GPS equipped device for verification. --- spec-content/objects/RoadEventDataSource.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEventDataSource.md b/spec-content/objects/RoadEventDataSource.md index 81ad0493..755c83b6 100644 --- a/spec-content/objects/RoadEventDataSource.md +++ b/spec-content/objects/RoadEventDataSource.md @@ -11,9 +11,9 @@ Name | Type | Description | Conformance | Notes `update_frequency` | Integer | The frequency in seconds at which the data source is updated. | Optional | `contact_name` | String | The name of the individual or group responsible for the work zone data source. | Optional | Example: `Jo Help` `contact_email` | String; [email](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.2) | The email address of the individual or group responsible for the data source. | Optional | -`location_verify_method` | String | The method used to verify the accuracy of the location information. | Optional | Example: `Survey accurate GPS equipment accurate to 0.1 cm` `lrs_type` | String | Describes the type of linear referencing system (LRS) used for the milepost measurements. | Optional | Example: `Use of milemarkers posted by the roadways. These are registered to a dynamic segmentation of statewide LRS basemap.` `lrs_url` | String; [uri](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.5) | A URL where additional information on the LRS information and transformation information is stored. | Optional | Example `https://aaa.bbb.com/lrs` +`location_verify_method` (DEPRECATED) | String | *This property is deprecated and will be removed in a future version; verified locations must use GPS devices as defined in the `Spatial Verification` enumerations* — The method used to verify the accuracy of the location information. | Optional | Example: `Survey accurate GPS equipment accurate to 0.1 cm` ## Used By Property | Object From 1e6f232fc6f02ad1b029aeef928d306801f54593 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:36:00 -0400 Subject: [PATCH 036/388] Update and rename LaneRestrictionUnit.md to RestrictionUnit.md --- .../{LaneRestrictionUnit.md => RestrictionUnit.md} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename spec-content/enumerated-types/{LaneRestrictionUnit.md => RestrictionUnit.md} (65%) diff --git a/spec-content/enumerated-types/LaneRestrictionUnit.md b/spec-content/enumerated-types/RestrictionUnit.md similarity index 65% rename from spec-content/enumerated-types/LaneRestrictionUnit.md rename to spec-content/enumerated-types/RestrictionUnit.md index c50a4030..b22749f1 100644 --- a/spec-content/enumerated-types/LaneRestrictionUnit.md +++ b/spec-content/enumerated-types/RestrictionUnit.md @@ -1,5 +1,5 @@ -# Lane Restriction Unit -Units of measure used for a lane restriction value. +# Restriction Unit +Units of measure used for a restriction value. ## Values Value | Description @@ -14,4 +14,4 @@ Value | Description ## Used By Property | Object --- | --- -`restriction_units` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) +`restriction_units` | [Restriction](/spec-content/objects/Restriction.md) From f5089b7df2a38ffca932abafe8a576282da1f20b Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:37:15 -0400 Subject: [PATCH 037/388] Update Restriction.md --- spec-content/enumerated-types/Restriction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/Restriction.md b/spec-content/enumerated-types/Restriction.md index 0d232d81..33eda6ec 100644 --- a/spec-content/enumerated-types/Restriction.md +++ b/spec-content/enumerated-types/Restriction.md @@ -23,4 +23,4 @@ Value | Description Property | Object --- | --- `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) +`restriction_type` | [Restriction](/spec-content/objects/Restriction.md) From 57907aa6de393d4a27e327a9bc90bbf0915b97cf Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:39:41 -0400 Subject: [PATCH 038/388] Update Restriction.md --- spec-content/enumerated-types/Restriction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/Restriction.md b/spec-content/enumerated-types/Restriction.md index 33eda6ec..3b577b50 100644 --- a/spec-content/enumerated-types/Restriction.md +++ b/spec-content/enumerated-types/Restriction.md @@ -22,5 +22,5 @@ Value | Description ## Used By Property | Object --- | --- -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent-RestrictionsNotice.md) `restriction_type` | [Restriction](/spec-content/objects/Restriction.md) From c5464a20569f1babbaf5828f368fc9706a81ec43 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:41:35 -0400 Subject: [PATCH 039/388] Update and rename Restriction.md to RestrictionType.md --- .../enumerated-types/{Restriction.md => RestrictionType.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename spec-content/enumerated-types/{Restriction.md => RestrictionType.md} (98%) diff --git a/spec-content/enumerated-types/Restriction.md b/spec-content/enumerated-types/RestrictionType.md similarity index 98% rename from spec-content/enumerated-types/Restriction.md rename to spec-content/enumerated-types/RestrictionType.md index 3b577b50..573d5bfc 100644 --- a/spec-content/enumerated-types/Restriction.md +++ b/spec-content/enumerated-types/RestrictionType.md @@ -1,4 +1,4 @@ -# Restriction +# Restriction Type The type of vehicle restriction on a roadway. ## Values From 7cc1e140f178dca455269cd2623ebc54144a5f87 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:43:30 -0400 Subject: [PATCH 040/388] Update RestrictionType.md --- spec-content/enumerated-types/RestrictionType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/RestrictionType.md b/spec-content/enumerated-types/RestrictionType.md index 573d5bfc..4081515b 100644 --- a/spec-content/enumerated-types/RestrictionType.md +++ b/spec-content/enumerated-types/RestrictionType.md @@ -23,4 +23,4 @@ Value | Description Property | Object --- | --- `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent-RestrictionsNotice.md) -`restriction_type` | [Restriction](/spec-content/objects/Restriction.md) +`restrictions` | [Lane](/spec-content/objects/Restriction.md) From d479b1bfa3b118ab4d9c2ba06357c87cb33fc6fc Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:44:33 -0400 Subject: [PATCH 041/388] Update Lane.md --- spec-content/objects/Lane.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/objects/Lane.md b/spec-content/objects/Lane.md index c89bb88a..3dbc03ba 100644 --- a/spec-content/objects/Lane.md +++ b/spec-content/objects/Lane.md @@ -8,9 +8,9 @@ Name | Type | Description | Conformance | Notes `type` | [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. | Required | `status` | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Status of the lane for the traveling public. | Required | `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. -`restrictions` | Array; \[[LaneRestriction](/spec-content/objects/LaneRestriction.md)\] | A list of specific restrictions that apply to the lane. | Optional | +`restrictions` | Array; \[Restriction](/spec-content/objects/LaneRestriction.md)\] | A list of specific restrictions that apply to the lane. | Optional | ## Used By Property | Object --- | --- -`lanes` | [RoadEvent](/spec-content/objects/RoadEvent.md) \ No newline at end of file +`lanes` | [RoadEvent](/spec-content/objects/RoadEvent.md) From 0634bb7602243b011374aa1698134972e7e720d9 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:45:17 -0400 Subject: [PATCH 042/388] Update RestrictionType.md --- spec-content/enumerated-types/RestrictionType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/RestrictionType.md b/spec-content/enumerated-types/RestrictionType.md index 4081515b..9b9b3a31 100644 --- a/spec-content/enumerated-types/RestrictionType.md +++ b/spec-content/enumerated-types/RestrictionType.md @@ -23,4 +23,4 @@ Value | Description Property | Object --- | --- `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent-RestrictionsNotice.md) -`restrictions` | [Lane](/spec-content/objects/Restriction.md) +`restrictions` | [Lane](/spec-content/objects/Lane.md) From c1072efcc12eda69f73a408814d4862bdd212401 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:48:27 -0400 Subject: [PATCH 043/388] Update LaneRestriction.md --- spec-content/objects/LaneRestriction.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec-content/objects/LaneRestriction.md b/spec-content/objects/LaneRestriction.md index 7476b7d3..5c92141c 100644 --- a/spec-content/objects/LaneRestriction.md +++ b/spec-content/objects/LaneRestriction.md @@ -1,14 +1,14 @@ -# Lane Restriction Object -The `LaneRestriction` object describes a restriction on a specific lane within a road event. +# Restriction Object +The `Restriction` object describes a restriction on a road event. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`restriction_type` | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | The type of restriction being enforced. | Required | +`restriction_type` | [RoadType](/spec-content/enumerated-types/RestrictionType.md) | The type of restriction being enforced. | Required | `restriction_value` | Number | The measure of the restriction type. | Optional | -`restriction_units` | [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.md) | Units of measure for the restriction value. | Conditional: required if `restriction_value` is not null | +`restriction_units` | [RestrictionUnit](/spec-content/enumerated-types/RestrictionUnit.md) | Units of measure for the restriction value. | Conditional: required if `restriction_value` is not null | ## Used By Property | Object --- | --- -`restrictions` | [Lane](/spec-content/objects/Lane.md) \ No newline at end of file +`restrictions` | [Lane](/spec-content/objects/Lane.md) From 3d7d2e86b0c503fce6d72527fab75dfd4d0c3958 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:49:37 -0400 Subject: [PATCH 044/388] Update LaneRestriction.md --- spec-content/objects/LaneRestriction.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec-content/objects/LaneRestriction.md b/spec-content/objects/LaneRestriction.md index 5c92141c..e8a3461e 100644 --- a/spec-content/objects/LaneRestriction.md +++ b/spec-content/objects/LaneRestriction.md @@ -4,11 +4,12 @@ The `Restriction` object describes a restriction on a road event. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`restriction_type` | [RoadType](/spec-content/enumerated-types/RestrictionType.md) | The type of restriction being enforced. | Required | +`restriction_type` | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | The type of restriction being enforced. | Required | `restriction_value` | Number | The measure of the restriction type. | Optional | `restriction_units` | [RestrictionUnit](/spec-content/enumerated-types/RestrictionUnit.md) | Units of measure for the restriction value. | Conditional: required if `restriction_value` is not null | ## Used By Property | Object --- | --- +`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) `restrictions` | [Lane](/spec-content/objects/Lane.md) From 613fa3f77c3b6689c2bbc88268bfc23f88b5c230 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:51:03 -0400 Subject: [PATCH 045/388] Update and rename LaneRestriction.md to Restriction.md --- spec-content/objects/{LaneRestriction.md => Restriction.md} | 1 + 1 file changed, 1 insertion(+) rename spec-content/objects/{LaneRestriction.md => Restriction.md} (88%) diff --git a/spec-content/objects/LaneRestriction.md b/spec-content/objects/Restriction.md similarity index 88% rename from spec-content/objects/LaneRestriction.md rename to spec-content/objects/Restriction.md index e8a3461e..7386fd62 100644 --- a/spec-content/objects/LaneRestriction.md +++ b/spec-content/objects/Restriction.md @@ -12,4 +12,5 @@ Name | Type | Description | Conformance | Notes Property | Object --- | --- `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`restrictions` | [RoadEvent-RestrictionsNotice](/spec-content/objects/RoadEvent-RestrictionsNotice.md) `restrictions` | [Lane](/spec-content/objects/Lane.md) From 4cabb95d22dad180d74c0f2ba949e8f33e225281 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:53:12 -0400 Subject: [PATCH 046/388] Update and rename RoadEvent-RestrictionsNotice.md to RestrictionEvent.md --- .../{RoadEvent-RestrictionsNotice.md => RestrictionEvent.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename spec-content/objects/{RoadEvent-RestrictionsNotice.md => RestrictionEvent.md} (99%) diff --git a/spec-content/objects/RoadEvent-RestrictionsNotice.md b/spec-content/objects/RestrictionEvent.md similarity index 99% rename from spec-content/objects/RoadEvent-RestrictionsNotice.md rename to spec-content/objects/RestrictionEvent.md index b54f51a9..83b1b012 100644 --- a/spec-content/objects/RoadEvent-RestrictionsNotice.md +++ b/spec-content/objects/RestrictionEvent.md @@ -1,4 +1,4 @@ -# RoadEvent - Restrictions Notice Object +# RestrictionEvent Object The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone`, `restrictions-notice`, and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). ## Properties From fa91c70baee87ea99899806ec1d11a4d23fc2508 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 15:59:35 -0400 Subject: [PATCH 047/388] Update and rename RestrictionEvent.md to RoadEvent-RestrictionsNotice.md --- .../{RestrictionEvent.md => RoadEvent-RestrictionsNotice.md} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename spec-content/objects/{RestrictionEvent.md => RoadEvent-RestrictionsNotice.md} (99%) diff --git a/spec-content/objects/RestrictionEvent.md b/spec-content/objects/RoadEvent-RestrictionsNotice.md similarity index 99% rename from spec-content/objects/RestrictionEvent.md rename to spec-content/objects/RoadEvent-RestrictionsNotice.md index 83b1b012..3116eba6 100644 --- a/spec-content/objects/RestrictionEvent.md +++ b/spec-content/objects/RoadEvent-RestrictionsNotice.md @@ -1,4 +1,4 @@ -# RestrictionEvent Object +# RestrictionEvent - Restrictions Notice Object The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone`, `restrictions-notice`, and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). ## Properties From e1ae86f754329fb19eea1f6344cca3d8fe10fcdb Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 16:00:36 -0400 Subject: [PATCH 048/388] Update Lane.md --- spec-content/objects/Lane.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/Lane.md b/spec-content/objects/Lane.md index 3dbc03ba..9e3ed9f2 100644 --- a/spec-content/objects/Lane.md +++ b/spec-content/objects/Lane.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes `type` | [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. | Required | `status` | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Status of the lane for the traveling public. | Required | `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. -`restrictions` | Array; \[Restriction](/spec-content/objects/LaneRestriction.md)\] | A list of specific restrictions that apply to the lane. | Optional | +`restrictions` | Array; \[Restriction](/spec-content/objects/Restriction.md)\] | A list of specific restrictions that apply to the lane. | Optional | ## Used By Property | Object From 4e84271173f4239e49c6fcd348ae77b40884847c Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 16:02:56 -0400 Subject: [PATCH 049/388] Update Lane.md --- spec-content/objects/Lane.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec-content/objects/Lane.md b/spec-content/objects/Lane.md index 9e3ed9f2..b3782bac 100644 --- a/spec-content/objects/Lane.md +++ b/spec-content/objects/Lane.md @@ -8,9 +8,10 @@ Name | Type | Description | Conformance | Notes `type` | [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. | Required | `status` | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Status of the lane for the traveling public. | Required | `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. -`restrictions` | Array; \[Restriction](/spec-content/objects/Restriction.md)\] | A list of specific restrictions that apply to the lane. | Optional | +`restrictions` | Array; [Restriction](/spec-content/objects/Restriction.md) | A list of specific restrictions that apply to the lane. | Optional | ## Used By Property | Object --- | --- `lanes` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`lanes` | [RoadEvent-RestrictionsNotice](/spec-content/objects/RoadEvent-RestrictionsNotice.md) From 3cbbfe857efdd77e1d179ea14bd8978c2743c422 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 16:05:44 -0400 Subject: [PATCH 050/388] Update RestrictionType.md --- spec-content/enumerated-types/RestrictionType.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/RestrictionType.md b/spec-content/enumerated-types/RestrictionType.md index 9b9b3a31..05de6bb1 100644 --- a/spec-content/enumerated-types/RestrictionType.md +++ b/spec-content/enumerated-types/RestrictionType.md @@ -22,5 +22,6 @@ Value | Description ## Used By Property | Object --- | --- -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent-RestrictionsNotice.md) +`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`restrictions` | [RoadEvent-RestrictionsNotice](/spec-content/objects/RoadEvent-RestrictionsNotice.md) `restrictions` | [Lane](/spec-content/objects/Lane.md) From dbde2f390fdcbcfd93efef7def1e18a93be2550f Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:13:03 -0400 Subject: [PATCH 051/388] Update RoadEvent.md --- spec-content/objects/RoadEvent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 0efb5775..84a1cce4 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -25,7 +25,7 @@ Name | Type | Description | Conformance | Notes `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `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 | -`restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. +`restrictions` | Array; \[[Restriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From 012f6bf28e32e61ee172b4fe2c9ca88ef5156bb2 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:13:39 -0400 Subject: [PATCH 052/388] Update RoadEvent.md --- spec-content/objects/RoadEvent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 84a1cce4..440324d0 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -25,7 +25,7 @@ Name | Type | Description | Conformance | Notes `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `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 | -`restrictions` | Array; \[[Restriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. +`restrictions` | Array; \[[Restriction](/spec-content/enumerated-types/Restriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From cb14e30c1204b7a886f270698b1144c5c961b8d1 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:15:01 -0400 Subject: [PATCH 053/388] Update RoadEvent.md --- spec-content/objects/RoadEvent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 440324d0..417003e8 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -25,7 +25,7 @@ Name | Type | Description | Conformance | Notes `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `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 | -`restrictions` | Array; \[[Restriction](/spec-content/enumerated-types/Restriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. +`restrictions` | Array; \[Restriction](/spec-content/objects/Restriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From c05f23b7334a4d305f5ee9e475bfa46911267d37 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:15:37 -0400 Subject: [PATCH 054/388] Update RoadEvent.md --- spec-content/objects/RoadEvent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 417003e8..b90d7a71 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -25,7 +25,7 @@ Name | Type | Description | Conformance | Notes `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `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 | -`restrictions` | Array; \[Restriction](/spec-content/objects/Restriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. +`restrictions` | Array; [Restriction](/spec-content/objects/Restriction.md) | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From b7692b702c9aec23a8f8f3c815142825544db2dd Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:19:08 -0400 Subject: [PATCH 055/388] Update and rename RoadEvent-RestrictionsNotice.md to RoadEvent.RestrictionNotice.md --- ...RestrictionsNotice.md => RoadEvent.RestrictionNotice.md} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename spec-content/objects/{RoadEvent-RestrictionsNotice.md => RoadEvent.RestrictionNotice.md} (91%) diff --git a/spec-content/objects/RoadEvent-RestrictionsNotice.md b/spec-content/objects/RoadEvent.RestrictionNotice.md similarity index 91% rename from spec-content/objects/RoadEvent-RestrictionsNotice.md rename to spec-content/objects/RoadEvent.RestrictionNotice.md index 3116eba6..0d47bdc2 100644 --- a/spec-content/objects/RoadEvent-RestrictionsNotice.md +++ b/spec-content/objects/RoadEvent.RestrictionNotice.md @@ -1,5 +1,5 @@ -# RestrictionEvent - Restrictions Notice Object -The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone`, `restrictions-notice`, and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). +# RoadEvent-RestrictionNotice Object +The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone`, `restriction-notice`, and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). ## Properties Name | Type | Description | Conformance | Notes @@ -11,7 +11,7 @@ Name | Type | Description | Conformance | Notes `road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | `direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) `vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | -`restrictions` | Array; \[[Restriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more restrictions applying to the road event being described. | Conditional: required if `lanes` is not provided. | +`restrictions` | Array; \[[Restriction](/spec-content/objects/Restriction.md)\] | Zero or more restrictions applying to the road event being described. | Conditional: required if `lanes` is not provided. | `lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Conditional: required if `restrictions` is not provided. | `relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | `beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | From 31d2a055fb4b9ebad7b3f898c0d3f1bb01a087d9 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:19:42 -0400 Subject: [PATCH 056/388] Update RestrictionType.md --- spec-content/enumerated-types/RestrictionType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/RestrictionType.md b/spec-content/enumerated-types/RestrictionType.md index 05de6bb1..ed2a1856 100644 --- a/spec-content/enumerated-types/RestrictionType.md +++ b/spec-content/enumerated-types/RestrictionType.md @@ -23,5 +23,5 @@ Value | Description Property | Object --- | --- `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`restrictions` | [RoadEvent-RestrictionsNotice](/spec-content/objects/RoadEvent-RestrictionsNotice.md) +`restrictions` | [RoadEvent-RestrictionNotice](/spec-content/objects/RoadEvent-RestrictionNotice.md) `restrictions` | [Lane](/spec-content/objects/Lane.md) From 82a6786408a5f0c4094a35bc33badaccfb648069 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:20:12 -0400 Subject: [PATCH 057/388] Rename RoadEvent.RestrictionNotice.md to RoadEvent-RestrictionNotice.md --- ...dEvent.RestrictionNotice.md => RoadEvent-RestrictionNotice.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spec-content/objects/{RoadEvent.RestrictionNotice.md => RoadEvent-RestrictionNotice.md} (100%) diff --git a/spec-content/objects/RoadEvent.RestrictionNotice.md b/spec-content/objects/RoadEvent-RestrictionNotice.md similarity index 100% rename from spec-content/objects/RoadEvent.RestrictionNotice.md rename to spec-content/objects/RoadEvent-RestrictionNotice.md From 2eeb4559346c4d266c1966a1ebb764331ce97c22 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:20:44 -0400 Subject: [PATCH 058/388] Update Restriction.md --- spec-content/objects/Restriction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/Restriction.md b/spec-content/objects/Restriction.md index 7386fd62..2ec15d42 100644 --- a/spec-content/objects/Restriction.md +++ b/spec-content/objects/Restriction.md @@ -12,5 +12,5 @@ Name | Type | Description | Conformance | Notes Property | Object --- | --- `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`restrictions` | [RoadEvent-RestrictionsNotice](/spec-content/objects/RoadEvent-RestrictionsNotice.md) +`restrictions` | [RoadEvent-RestrictionNotice](/spec-content/objects/RoadEvent-RestrictionNotice.md) `restrictions` | [Lane](/spec-content/objects/Lane.md) From 252819d45ee4e61f8fe7a50644e8e77b2d5d48fe Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:46:21 -0400 Subject: [PATCH 059/388] Create restriction-notice.geojson --- .../examples/restriction-notice.geojson | 190 ++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 create-feed/examples/restriction-notice.geojson diff --git a/create-feed/examples/restriction-notice.geojson b/create-feed/examples/restriction-notice.geojson new file mode 100644 index 00000000..782bebb9 --- /dev/null +++ b/create-feed/examples/restriction-notice.geojson @@ -0,0 +1,190 @@ + + "road_event_feed_info": { + "update_date": "2021-07-01T15:00:00Z", + "publisher": "New York State DOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 300, + "version": "3.1", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "New York City DOT", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 60, + "update_date": "2021-07-01T00:00:00Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { + "event_type": "restriction-notice", + "data_source_id": 1, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "road_names": "[\"HRP\",\"Hutchinson Parkway\",\"Hutchinson River Parkway\"]", + "direction": "northbound", + "vehicle_impact": "all-lanes-open", + "restrictions": "[{\"restriction_type\":\"reduced-height\",\"restriction_value\":10.16,\"restriction_units\":\"feet\"}]", + "stroke": "#ff0000", + "stroke-width": 4, + "stroke-opacity": 1 + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83857488632202, + 40.83782481579416 + ], + [ + -73.8385534286499, + 40.83905758069452 + ], + [ + -73.83834958076477, + 40.84045773030475 + ], + [ + -73.83817791938782, + 40.841269397695825 + ], + [ + -73.83692264556885, + 40.84498467829638 + ], + [ + -73.83683949708939, + 40.84519569836051 + ], + [ + -73.83674025535583, + 40.84555483673242 + ], + [ + -73.83666649460793, + 40.84582976902955 + ], + [ + -73.83646667003632, + 40.84667890696712 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "event_type": "restriction-notice", + "data_source_id": 1, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "road_names": "[\"HRP\",\"Hutchinson Parkway\",\"Hutchinson River Parkway\"]", + "direction": "southbound", + "vehicle_impact": "all-lanes-open", + "restrictions": "[{\"restriction_type\":\"reduced-height\",\"restriction_value\":9.0,\"restriction_units\":\"feet\"}]", + "stroke": "#ff0000", + "stroke-width": 4, + "stroke-opacity": 1 + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83725792169571, + 40.84455654898646 + ], + [ + -73.8378158211708, + 40.84294748850873 + ], + [ + -73.83808672428131, + 40.84214192905569 + ], + [ + -73.83834153413773, + 40.84133635981177 + ] + ] + } + }, + { + "type": "Feature", + "properties": { + "event_type": "restriction-notice", + "data_source_id": 1, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "road_names": "[\"HRP\",\"Hutchinson Parkway\",\"Hutchinson River Parkway\"]", + "direction": "southbound", + "vehicle_impact": "all-lanes-open", + "restrictions": "[{\"restriction_type\":\"reduced-height\",\"restriction_value\":11,\"restriction_units\":\"feet\"}]", + "stroke": "#ff0000", + "stroke-width": 4, + "stroke-opacity": 1 + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83834153413773, + 40.841335852523244 + ], + [ + -73.8384260237217, + 40.84103300059402 + ], + [ + -73.83847497403622, + 40.84082856207721 + ], + [ + -73.83851654827595, + 40.84063071775089 + ], + [ + -73.83855678141117, + 40.84045722300951 + ], + [ + -73.83865937590599, + 40.83983324694044 + ], + [ + -73.83872039616108, + 40.8393289888175 + ], + [ + -73.83875325322151, + 40.838710582522424 + ], + [ + -73.83877135813236, + 40.838443230352674 + ], + [ + -73.83877202868462, + 40.83817942829337 + ], + [ + -73.83877471089363, + 40.83773502091179 + ], + [ + -73.83877538144588, + 40.83721857114785 + ], + [ + -73.83877336978912, + 40.83710442404608 + ] + ] + } + } + ] +} From 0c27143d4e03ecab890d2966045cc67fe6b9f2e4 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:47:26 -0400 Subject: [PATCH 060/388] Update and rename create-feed/examples/restriction-notice.geojson to create-feed/examples/restriction-notices/restriction-notice.geojson --- .../{ => restriction-notices}/restriction-notice.geojson | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) rename create-feed/examples/{ => restriction-notices}/restriction-notice.geojson (99%) diff --git a/create-feed/examples/restriction-notice.geojson b/create-feed/examples/restriction-notices/restriction-notice.geojson similarity index 99% rename from create-feed/examples/restriction-notice.geojson rename to create-feed/examples/restriction-notices/restriction-notice.geojson index 782bebb9..4b76fec7 100644 --- a/create-feed/examples/restriction-notice.geojson +++ b/create-feed/examples/restriction-notices/restriction-notice.geojson @@ -1,5 +1,6 @@ - "road_event_feed_info": { +{ +"road_event_feed_info": { "update_date": "2021-07-01T15:00:00Z", "publisher": "New York State DOT", "contact_name": "Frederick Francis Feedmanager", From e26905b1dae1063ef9f741928cb7ca375bb91e22 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:51:13 -0400 Subject: [PATCH 061/388] Update RestrictionUnit.md --- spec-content/enumerated-types/RestrictionUnit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/RestrictionUnit.md b/spec-content/enumerated-types/RestrictionUnit.md index b22749f1..904f3ea8 100644 --- a/spec-content/enumerated-types/RestrictionUnit.md +++ b/spec-content/enumerated-types/RestrictionUnit.md @@ -1,4 +1,4 @@ -# Restriction Unit +# UnitType Units of measure used for a restriction value. ## Values From 16f94fa7a13056cdda13f20fa8ff4b6c1aad566e Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:51:36 -0400 Subject: [PATCH 062/388] Rename RestrictionUnit.md to UnitType.md --- spec-content/enumerated-types/{RestrictionUnit.md => UnitType.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spec-content/enumerated-types/{RestrictionUnit.md => UnitType.md} (100%) diff --git a/spec-content/enumerated-types/RestrictionUnit.md b/spec-content/enumerated-types/UnitType.md similarity index 100% rename from spec-content/enumerated-types/RestrictionUnit.md rename to spec-content/enumerated-types/UnitType.md From 1b9d148eb4562ea93973999993bbb64ca6a223a9 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 19:52:14 -0400 Subject: [PATCH 063/388] Update Restriction.md --- spec-content/objects/Restriction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/Restriction.md b/spec-content/objects/Restriction.md index 2ec15d42..68831320 100644 --- a/spec-content/objects/Restriction.md +++ b/spec-content/objects/Restriction.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `restriction_type` | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | The type of restriction being enforced. | Required | `restriction_value` | Number | The measure of the restriction type. | Optional | -`restriction_units` | [RestrictionUnit](/spec-content/enumerated-types/RestrictionUnit.md) | Units of measure for the restriction value. | Conditional: required if `restriction_value` is not null | +`restriction_units` | [UnitType](/spec-content/enumerated-types/RestrictionUnit.md) | Units of measure for the restriction value. | Conditional: required if `restriction_value` is not null | ## Used By Property | Object From d057881126eb7cd3e2f56eb041d60e872eae5c05 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:07:27 -0400 Subject: [PATCH 064/388] Add files via upload --- ...ect_diagram_v4.0_restrictions_branch.drawio | 1 + ...object_diagram_v4.0_restrictions_branch.jpg | Bin 0 -> 187792 bytes 2 files changed, 1 insertion(+) create mode 100644 images/wzdx_object_diagram_v4.0_restrictions_branch.drawio create mode 100644 images/wzdx_object_diagram_v4.0_restrictions_branch.jpg diff --git a/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio b/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio new file mode 100644 index 00000000..e3fc7c5a --- /dev/null +++ b/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/images/wzdx_object_diagram_v4.0_restrictions_branch.jpg b/images/wzdx_object_diagram_v4.0_restrictions_branch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37490309b434f38597b76f61bd79d4dc22fe5f77 GIT binary patch literal 187792 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 E9o)bDk^lez literal 0 HcmV?d00001 From 54488566e94620f51a10b0d111e660e6f936d0e8 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:09:05 -0400 Subject: [PATCH 065/388] Add files via upload --- ...dx_object_diagram_restriction_notice.drawio | 1 + .../wzdx_object_diagram_restriction_notice.jpg | Bin 0 -> 216159 bytes 2 files changed, 1 insertion(+) create mode 100644 images/wzdx_object_diagram_restriction_notice.drawio create mode 100644 images/wzdx_object_diagram_restriction_notice.jpg diff --git a/images/wzdx_object_diagram_restriction_notice.drawio b/images/wzdx_object_diagram_restriction_notice.drawio new file mode 100644 index 00000000..d7f9a4ea --- /dev/null +++ b/images/wzdx_object_diagram_restriction_notice.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/images/wzdx_object_diagram_restriction_notice.jpg b/images/wzdx_object_diagram_restriction_notice.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d22e9a3827851f0ee5aeed295115a3af180b2c1a GIT binary patch literal 216159 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 z zjtZ|Pr`A+oo`hRJFCUmI5v}rA&KbU@^VMjl?`sQ@IH-|WdbaxRtbqU@10I54)Q88^ z(9ya=Z#&}g-cS{pw>>W0f8U_o_S5-v`K}mAp}s)jq@>M9`L$f;DDNtTkVJbcTF9zQ zr!yi_1N&4CtPE*r0YtJxpS{Sf>MC)c?6FVp$QofVgyWDrH(Wa#Z}3DN7<~Ci)3Ph{ ze~iYVkNR;$Zo$}Yjm!Nbe_Qdf$qOj9+KN(`4NF2**t69(1Vxa7HxW7UK4aV<@En|l zi^83#1LzMVRcX{I%TAzb*I3I4hL$`g(_BG4t$f&{fYj689EZ16HpvBqprr2xY1WGixYn zi*wHT9O$^MYI0;Vb=_j(6H1NC2o_W{<;b=l#f;uc8B=%OEqSUN;u8u}V0fd_r(vh< zRWH)iB2{9zsYCw`h|a(5&`Yx=j&irX&0|{@h~Pknb8i)Yovwx5W2wt;o z?0Go1SeI9g$oe&3HP+aA+Z&~Uc$u{L5jM}dr0p|yR_-%G=^8{Up-Q}q+z9qghr=Te zDve(%BnB&G>+k-J$rY2y=;luiq& zM3QOyg%+l7ThwFTkHT@wQ*{o>=N^csoxeA=M-hxS7$1}79t-`qT zS6pVWD8UyzXBC-~n_j*P%-ib4`Wih7)Rjd$gG670hyxEH({G1g?^H_bW^HWE#y5c#-ux^!P(R9x+Tf_E<27zxlcM#GP58J$g4e~95{6G7_X9762OS}goI#U7>797ON#rv4yz}Hy`VdS&g>Tv z#n6WO%Ok{-9ibv{aQ4t{JC!^R)1hF6bojWXJTBXF=;KmHzFtzA0J`{Cn97M~WX!T` z-`d`7Up7zqeUD~Ioh6$A(xa(azTqc*xAZLWCO?}*>DQ+ZCnpHs?%ztc&C^uPvOe0I z1eS3)+!QFoBjz(-I6jl`o+$zefU3XLlz!F!o3EtH_KI>)m#JW1UNx3Mh6xJ$^=dTl zr#>OfLVr7J|#eMB?UZn25T*Lkt=&U0_8%ms!n*=_^o zvC2!}VN&m>rx!s;8A4`+JIzON`_J*86L|kZE&cb$al`R@y>hPt;^d#fb5uwG5^iB! zmrT2a5OL}oFM#xY1>x6|+`n13e8s9h{j(2egA#C9E+4g-xx2e6&+}3;Fsj=)gs>I) zl?S#g_g;H2>HRU<^Q!u_z~7IMPML<+uB4zJ-N_6@C0JiEy;)eF$Ivz;yTb6D$0cT& zc&lWy`L|iaZ+d;ogNuMMKAKlGD3koD_D|OxJ|qX)i+4-hsa>~u!$&h~UgH*OQuJ9X zm=^FN+0^Xtz4ZbOu7&x{E^TDHOr+g3S6k{!ZcJc_#75KtNO(JDvlR*4DwQ7Az4jdS~b&K9{v~psK56R{u@BGzxUFGi=Qr} zhX@?+3y@Pk-rJ1n+32v&AlYo6Jk z-%~ryC#44rOC0x&oh}sKQ0*JS?xj^czIF3kaHGZC84mR_OH}UD?|K7cWx;Qjr3dE* z$r;L*R5vJ5lbo?sUdywhaSFLVC3LQgWU&oLo*btHC)G`KxE=rMFfU+Ffn#|i95SA5YTy%x zCQGeIeR+xo#qA1TrbJj4^;4uk(-WSa$n(}Io@DmcjdbI#S{GTyXSv`RrWu1&S)U+d z0baUR&qi+mWqO86cwK`k1*P9okJ1on>p~I58j$YNd7jWb-kLaUWI32vDwBsP)3ERR+5QPm~e4Q zX3=DN3CQw6_}M^>lS;PuvAYxfW_7*!0;t{68*Hwg&zBQtN(2U#*FR7Gi^HT^9r^Xg zaTN}6yPuS*oeuZjJyo^gHLTmB%GS(HGESw))d)^OSaS}j%mZ4uWpU^=0;L{L`Fa%=bmSyFM0*yXcBuT@ zeVaWU$*_c3v)I`a3M+utIFdw?3Mv?as&jpl`6*z=!#J2=lsdq{!^QU!s%m-XPEJgB zn_Mq$Q;5&GZ>XNpSRTs4s|pAGSdTwSx$z0opLDY&p#c*iaGkZ_meSItraYc`8NvWwvc|Es#$f-3y?2w!*dN(>Uso8YLan`Xx|Ji*Y zS_moUHzylEfNjoh9YWHgNnzZA-2BrDX(->e!!<6HM#1k4W=*R|i2tkJtk(u)MlbMu zrf=55R{geaNdYdS^hn4;0LF1T)NqQ@`&Cf8DQoV6^cT4N^OD7RmkR>G=x;hd5zDL( z_dC0Lv)9Y9KRk*1e{}CwTT{KDz&P16QVtF;L7#Il^S~)IRDnl+C1|etQ9(OslV{;+!B92IQGZ%>t~4zGI0*L zCI{1sN&`%LM~WhqSqLkTkc7Ptyg}5-k9a=Vx!wD_%_(*06QLsA^rf2XANAd|?q2@M zK6{q5cN!lzq0>!2S#Z)Uc04-)uzCt+G$klVKQo)|7@kK0>3OJaT`HBKcC$q#$FCQZ z%47m=*cEfqB&=EqjoCuUGg!d1WBzP<@tdfv7sm^f@);S@P_;eaMmy%9w6;FSI;UIM zbKU*Y%^jPr8ObQqOs48hbCP&HUKl{;MG>XA+$YOgSv70?<7!+TDK7FN_dR09^Ns2s zycDnWeDz)=d;I3R_X{+%qt0|PzR*Y0FG`IAR8l6`j`ZhInkuoHjU7z;-7qt#roPA8 zpbBsR_y}YA4GhmvO=o`ob^{V#6LmI4Up;$;Et@9_&9=qX=5$En_>~h81o+CmyZj%% zU5Gls7Cf|haY|(&Dp^`d*0j}RG+_Pt*=ok)(~?#~Q31jF4kaFq2QEENMtl1f<|k&xj}G8KJ2+e}n|t5lnCXVNh>L5_5j#Cn zE<|cj^gM@poz$i;GJRyJhUT;|(YWhfo7~b8d%k-!>@rCPVbfTow!=x1cFY!l!F97G ztl^Rp7P}q4B_>kJyd8xkdmHY@j3@A=sN}3weDK3#iu4~)K{_XZoW_c56921O4gj(B zR@R;5dEKOp;;(0dKS~*QEsS1g9r&9eQ`i%0 zIY>!w^|HF`YH^_7I~+3v3kx`qCe%s*wXF|B6yuUoGM9b@ zw1jBfxDY0GYYp?xl0)PmXaADKm5Abs;eCDIAjG^?Oz~nzv7d;ln5Tg)!`QK_ zV({&EUlh~8z{g6c1sy&dhgQ*w4PJ$nvdfCZd+&_ga;P&mKVJ!YodnT{Zc@mW;0E@> zFm)$&Wlm1t#8eR8uYW#vGO{*bduy=6Cb{RLcc%B)Y_{j^ZQwiJdKE%|+t`?3oya$F zXARj9sW*>HB_+)5Edo9T{gAD`u$>n7t)W46K~yZ;I)sk=%&vTn^pE~^toEN_{_olU ztxBkPN13Nn!zqr6%D9|KsBcyizlW#Hy|PHo&2PN4-3$QD5Rf5r+A*W^5!h&MwMMkh zmsEdFR7re!iXDIRsT&Vp@L2Rz=UK7e-VUVDzw)Dx1m0$fldBF%0(mmDVFo4Ia&`b&G)_ILHEPjKhng{2sn zTkQLx&~8#+$1`(0wH2wcRL9sMY&YlOYjI;dOameoFL5<@Bs6(=)u($O>1&;4Ttk0_ z4g}QpyIPA0%LF2pJZbWT#`sBHsXd#>BmECf?#RM*Y~jF|@#lLU{c1Ru=e6ogKlj1> z!UP^*WO3}xz_(dh&pDmWrVdeu8n|SStOE{NnuDojUn*~dP zNQr1g9rWGuwhU6VD(^?%0*8rNPnFANEre4kmVM$72ah>~oO4=DgW!g`v<>VhsyZ-K z{c7f@9U~x_V1tpQ&{xaDiJmmnSYw*1uCYvP+2suWNa}#tv z1-q`T9D&L;Y79d733_Uglq-uJbT-V$LsXe5i{?&gDPBU>cc3Pq5son69$VKbK{?I~ zX2IJ^%3r$zy zn!!dTcjdBk;OEoBJS^k)Xem3`qKh?R-@^3P-gBkV&BCJdFE_^NwPnlB?FS3lf)XzJ zruyEAW@882gvIQCaoi2UUxdvRFO&~Wtp~dsRaGpl?rxgYTkjM(8RO@THO!y`xA6p1 zeU}iW39v5EpC`Q8IRR}YV-RjOY7zX#J`Z$lXboSQ7bsj#?;!qWs%-VX3@Wi{>e~><;TLxN z-uhUYddQInn@M8kKf@-@M!-wxO4IW9ac*IbTqHKcPJxcKXZTQorPvnHeI$N5tDaJf z_6^2bgk?-%>W$5+#QUQ6HQ128KskD7?JL{J?QFsPB-!L$uZwJVQzOh)e@3fKp?2S! z2ZfO5FdV!zUBH&7@k-Ks&(y}75K%kN)=XTc(=2GUm(l(RwTyQ{A&HAUK5t`Opl?`mJ zozDbb=)(Z7rtIj7cT-F-ime2dDQN;8>KI(EUe9=@E-=Nn3|UKeiE3giTdO2U0{~fu zpmR&k@p2MisCc*hw{1tU0f}oxhsSAP3EoS+wE9P? z>d*t_c$OuL>=WyCDNhJZ%+v0`Cxrodc)w&U_aL`7IJ0Kqhk-Ub*)?0meGE5><7Y4u+j0ucgcZ(qTd=-~; zCM@I5EBj6B`U>fK~L ztAq_Cwh3waV&wF(z_T#Y<~?T7wOwX&@H!KA?3=gr z&fC=wBAAJJsM_?DV+aowe>bK1H z9^2Q1xglMgZQr@sN0f&oXp5nNnixJ=;?<(oL82CBmxAC)JEdZZ3ZuQ+`eV>86wh+p zTvXTIMDuUESd;wC4bOB+ew?<^7K4IvS0Sv z3hA#A>P*K2v(E@bV*~B^Dt)cjswegA#BdpeCp=NwH3v%#yJ&NP{-LbAy49(h|_8{xZX7 z=6oRK!+e{e+P^I{1f{%DPnVbIRU2;54s@%GF4~2oQqX?!Ow_%MCY>c^d)&i;hZkaG zWMFh70|O+f;Dy0)_DO*Ozw6u7mHYOH1D$$&rtiYXyF&33FOu_@U-V6^{5Z->Unv7n z9xY<*+d6-^`_(!Jl7nRjk`5=87Ml^ERb3mR2Rs zW-C^;RCx+S;TBB+fBeZGxOVJ_M)spM*K_OOGi_&2-))G>n+@A8A53(f5D8$`M%=@m zvjZ@i)J%x1m3stlJ*1A~K&2<^r%qqcKeJ$7PVq@F3d@u_t<5_yW0J(!e z5lWI=c=1PmagkSkJ700E*!!3JgZ#BUPg8>X4!!cq1{4HIT)W8y$Be01g0!f>{qzMu zE?h(r2JcHA90*ESZ8=}%9`TOoJhBW8#80{N28WCa)k+6gc_?7CzKo1$E3upN$pq6i z@kks@0RUeS)j3WfedH=#El<6(`BvM@+BW=(a1EOORA^Q0QHHg_>-1#yPf@A@^IsgG zAUs1_Sv7tTuNA8OG$f)bMcw37^$m zkOR9hacuO-)kAvqff$!0sJfyeMf{s#T6YzWOv_i#>nrBg$o%V#U_=61 zVoI0EarK)@6}pEG%4oOKk+N3=-LQ?k*PZNW356oYcg*9{#Jfb?EFU*l70x`^V`l35 zp|y*CV{INGjiPAH-2+bh`HCJTR10RFN|GCB@Yz?4IVsQjRaz=kQ0? zOJ>ajv9H?z*c3P(1e0#zhF|VL5#~O$=c@{>p$=t$J$D& z?n~S$vrZ*CuR7teQjc;bsh^d>L0MgxhiiX`R7OpQ*+{aM8uoTSllwe-nhVtXF1ySd z3%-g`w?Zb)Kv%H6s%G&&fTIwpgw5$8B&evE98=ozE5tkDvz&CzbXk9IUOCa}UmPj- z6j3%h#pCPwa3@eQD--q%Z7=ajmwNE~?SEeb{{HaKQqwwI&V`wkPu_g?Q zn7yYURq~DP7YD-NXw7zAOKBMmoUcP_u zRg~2xGp**U@gE)mrj3Lq^D`W1i@gCNK$c0(z;F=8q)%M`G&8&tkko< z^6AVUgdYhOX0a@yqE_s@o|7poN*HLaK6WH7NP0*5J@>@xI)lNUUPBz?VBV;Ex$R?n z6R1IOJiMf$7ABn+zAO}<{wJqGj{jaLN^^^NXD$ z(pxyw&7T#g8cVPTqHDpHq%PKz4vv*?QH9FJAwGBey+)?2Od}RWLZ2?G$~W=#`8C&< z_xh7>4_ncRv>peHtR4YndJ6`(yWB8Qk5sEBUP`i;zUZyf-A2h~(es;>& zDue9dhd0IvpZD*3T=qv0>F9J^;ww4XpmGgtcjM&GvlC+*}?)o_)%l2dLB&|CwLL-3;VPxSH$ zR$t6B8Fy;?ku`ed4X!;ESopb_w-=mh?WerNmA+Z$SIiyWMN`8(p(yK|@LJir!+Nhi zxhL!(GKjjZmOSf7frae{upOs$^Awd0`5T41mT>o=phwoJbZvkJfl7dXvXY)ih^$ws zaal-Rap=<0_zl+%?>syNd;_y{*T9D{qw(uk{GZIA`iZT~wF;KWPqCi5^99HDFh-5c zqHkvLy_0_rr~l{qe{T18qyhVXFpdE}p4-&;FzITV$sI1Po7r2_m$iWH^8Vnl=xMrK zlK~#gyfY@h59btNp-hxzCz*Si){dhl^<@^~QJI!~@}t(bkY+fZ@6{9w&3U^2GbX~s z!_yNh@WQ|#@?kn!vB;;&IDvi8n7w?VILjqPM5_tXTVZq4_SVD#&}{II5uthDBx*OS znNF1fVW~5ULdEh48X4(h3!kBy5K>7QF{3PT__=I8E6L%U@-cJi3a7hN7^X$h1fYeL z9w*?S3ZN>N-;*~$P@H9y2T_mmsIS{JZ&xJmL(PN}m3TzGa~vLF2fTI%8s9w{RW zq07Rf@Ox<{<=dsC+@ChDm)yTh+2l07aWynh=Q=8;=VF#_{Z1v+Q&~o+BkbJtAL_?% z^xrFF#*)S`u=XU7XZFjCWFzx|8u(#1rrkQl58ACf2LPs;;1n&6f!jyv5pKFJS+zd$-eUto9k_|R4=`JNfoD55)^R) z`6d;yXkW&_XNo_D6D%4h6itnJ6`YSwda!~`rEk{g`()JJ+06klmX;^;(X%`r!T&H^kJ3LvDs& z3O(W366NJ=THKEW;>lnj*Yop%hXvw2UnaiX8}D}+hvnD~MVHgTZdJS?=FXv{=*2Nn zMHL(cprC-?SB8}`BhPlEHh9nJsN3eupvMKzJlY#3x>Qg;RKCtXs_#ML2n*t)TRLpg zkCR&IArtVDTPt_hR#-I!FNE9-ztqYXiI*Pfh1%rdT+CLzFbVLDxP@bV4xM2) zfaMHsVSsIlHjN8&WSI0_FONW8DP9CSZ`{@AQo04?3{IHL2*aGDX3$QUyrV_x&W_v8 z+>!U3s`z1fDq91AsVH=Avw>%2g+;%vB_sHw6{5^Dhh%U*`sn3>M@=mnHMDIdHAi-e zQ4e>@RCDYTWL{Tbj6yewcG~01E%R;}0~8*9lwi4CX%sJ2+jlS7Yt0tzoM=cIAgL zD@j450w*d}4@g%~$xHHNmhh^!Pk+7qsw#x1d569YyoKh~%Oy=`Yl=J?@GbRONj2MN ztiG>bd|TgW#e8S$t#4FCHa}h@t7+&x*I;3oDHdgTR;XviC{9v>)uj%DHOh(P*~I}xETr4)+G*I7c|0Sd+%tIz==&l6dnT&Z zWJ62JYWE9b<6Yxu@>kLR_uY{%3y!Q^x>m?x33A1>S{jdSH%vSE>tBhz_hC6A;8J^I zx0|O;CRj*1PUBS;G)d9H2!%H?4OEvSpY9uQx8fFCem8$SVWZ)!EkG&PB=Y9stG?;( z>iNDWdc&3Sn^)nw|Kh;6wl=&rLmM{UM{_nYEojK>TW*fliXT31YmtB1VvAN&546MM zpL3EN4OS=D9bo!Fu%6if#`r9Zbm@GcM|BKUC2H}feT9a5K>54PB@_74u%0 z1$X14;FLNefoPW+(PpiRfLR&1Xy zx4q}05Cnok(zScsYZRc87Hhzf7p-q_{Risc1W0m!{hbo|!M@}~uuY-rAOkiN`!9}) zTkZEP*Yk6_8Kcn*mY+**LX-vcJhInpEcmUd>!8qKTsH`=v$d%GruoD*?*6i*`lR5o z*61yxCf1^RcU<0Zpp6OeV#@O~PoqwW-u#ZIPCb1cG9ij;LO9zUe)7fW6`1Eew>N*F z(mIXDLn}_su>|W4>Qu+En&)eU&&oa4bNs2{ajkG#Ejx$UT-3bylLk>e61oloLG=ax zbjh%YsI9cFTBr|PR#|KGt4FQTdXLP_#X;yPAMLh%Vg7J>b1YfZbSjTxn~tG&TprIT%!8waez39<>YB;uRO>hi)5 zuWX7;D>7-vbRrXN8cFLaM7jYrBhdUx9oF`C2e7HnA50!dO#IF{Y-b*mVb+-%&-H}( zq7r0$hrxg+Fs1e#1^x01hd^#IQRQUo#E~)ffli5A@b1^x=&?!5))Xga9$X}iZulLskD@*9r!fVlhtfwZ9gZ@bf(S=bTuTF;3VI>aswZKZ4dq?5*!CH|z zk#**@phdKYqr!@pmwvXVI!z#%W)XJ_1gl)%cdm9K463r$-(mpiaiV$xEow-T-*OoO z{j6eq1_o7`(JJ;g8(ms!3_n-ysa26vi&j2I@2*sG)xm~H)VxTC`-bB0g?%jh-($SD zr#ULgBLV)r9fL~b8AoR#&xx6nq)hSJpg(1}=qOsYBw)+1amDcS!$lWcikO%t#T!#q zgmU<0{m0#LuE$Hn>}tc$WmCAq+TGr(;wTnXjh(<%IYGfG?2dN5^+fLaqvdu;h?_ ziU`oZ2PPv2Uc18QxAMa>;plbrL%YPv#?Sa-n7GDK1{@a1))-KlfQxXpCWIS&yXgCI9!H&QUl&Rcl}=q+*%+?u zqH%rpaSeMAp1t|$8l@xZ1&)lKO_OAu(M$<2%k=o)@%ocExL2m{@UvPye&C-S32aKXgl@KyKNfNT@J4^ZVyHZ zP(1#{aq^C{Yw#%RhSEtNcA+w0$6^KfaLGByS{Z4sSCWtLR_3@d#-2*pa(q z?7fkl#2>Dsa#zeZsRhc4+JD`M zQtO6X9~15b-yPSlXu6#0QWhS?J~X9y)%l1oefw_B70r+|D@KNel8p5<61wOUcBo94 zd=DdYnfxs3=|oA0APYT}^K1g(`~g&h77N zS=kP^npI&fa>-fAoPm&N$gkAC{c8`gfBgHX@|*2+FT189zk26NTftvdzyDzEKm5yK z<-cILY4yo_9gKFI+|qUKIvh~jGRWrJ-NCHbWy0SU{_HVANs0c4)n>QNiHMEbE%H$B z1(7n(dv@$emU#gPL){QWjJO_X^q<%NL}yoOujx}ey{Cll7n(Gl3KljK>wV%bS5hmz zS7+}wNOgT<_=sAOoQIoY+@)z@0Yi!*qV`rg=mV+dn}3{WH1^cy$>0&ixn1b_^9-%b zKsN!W0WlVb_D%VW3xz9mFrlS0)(HrT^4!Tx2|?e=i=&ZWF;vU4TK%uem!GBoFlB6u zp^*x~RuY=Y?Jx3x!R>-mVu0cuah7~ z#);TBkb#vu(#}3!H=j9S<+L<7;?NC$`)odY| zs8-r64gcWbL0(f{-lm(+#H=`MJvMuo6W%8_2W(%f(_&uHzcMNMrPWetyHh( z!h{GYSKKGUE6BlR+Amw;Fp0;b(_Xs;?3!}w<;_?@Z*uAzF<(RqSIMwr`7nZjGEqp+ zd%+Q&Q|+cTrNY$$n9DNHOmNQTpT5hT5rBb1R6pncINcKF-`REDcG^FNHI(3f%bc0< zn|XBK#^*TOmumy7GDxB1G;&&0TA<}2055!<w+G!h%!dmyhe-aSNQl>pjvHpE?UXTj1-OhZms1RXuw|gZW1Nw_s(fGpa--~ zZ4_T?G?eiTMx{ViyO>4d-W)vWUqeDcY=x72>8kFK56E=FaCKew%`Y@@bf78RMwMdK zgM)ucZBVEK6lF*=jZ_cMsb21;4ieL>>y8DDh&C}9rIh!t4Mt_)s*8_IeE=DN__kQ@ z|Fza|qWte_{s#Y;{m*#+r%k}$F|mIYFOJFf{jxa>KeDs|fA19$uJZkJN#n82oRKAu zb;|WaRL_0hgNwlKyYYRwZe|{hU*r~P0M<0qlPDuK>uF5;o8iEjQqK0R;a1JtwlWzB zY6NR={E*5}ZVxi6-(@{B=w=*DIb#f}-UHJxI>JS+${0lo?Jk`|R%?~{Ykx1U6}a$9 zRAEyX&J)+TJXed<#a&Zw>(E|Nxp@p6Sr?oBT!>dnx>8H5oz^%C>#M-W)W{4Mjkri; z)Q#9w?If>)tUm)e6&F4R>DD*QBqlYu?=TMS3hP7(Gec(fiL!TlY;w9j897Z$D3agl zC+X5anUWIVCmft^^%K^(6B3z*LAl1FJ#VpEIf5tEJ)*=fG%wBu%%q1726%-C@WVu` zYVeVbFt766o+?|jXwS`w=~<*%j2BL^gLK`!pK@_VMHCZb5@Lpr;0n*P<=+0%G~2Vz zAw@j=oo1U|-nVdMa2F?Q(}Q0gTy^gbg*%%)P80PPwqmYn)Hw<1A!vfqeJlbAmCsbr z%CKv-$8Fu5eQI?52$;JwU!%G0en0Xn_Wu1J|Kj)-yT}3Yagr$>Rko`;;0?6(8>obV z`k79*t4zKBeVOPy!;UUN(e~=G89)I1i*@6C>xV5zD7plYIau4sL+B4CK`NM@Xm8>u zqDj}U2u25>CBQ)GG!_TMdDLL{i%#SAxc-?1o?IWL<-2uPYbwx@u%C9z4cz-PS&t;G zcy7V_@H8n50rjBmP`f1X+68gjvnlL9R! zlP9lXTGoHgwXvZ!;W|0)HhWF!=BJw!)&7^BitNT? z#luBh$+cfnlIq3h;{i{t2}`GyfienB6GuiRDn66n@r9Bm+g3g*WwHfV`&X9^x;79s zy)>eyxkoCs)YfQUZ+K-L z=Hkzb!mbopzl? zt;98=(QdYHjt`G`&4O$Q9#2$eNQqaUvikf}Jd7@Sn?pT_XOzpZE04zFbP%)6gu67% zjM9(V@)jefw2Oshs_x24zVI7(IhczfHdkG!G$^t0{IgMyncLhZW#yBU^Fz963>wmb zwxdEyhZW_9v`S$?*aCCZNIe`3*eq0*Q0S|Af1HSUHsnQg52xH*b7@p;+w1|hQp#L4 zr6f`Wp{En+Tq0wd$C_G8*P8FmTGc)OT`<4<+xVJF-OW4odqWEf&NEF(9t{^nlg5~m zgcfTn2{5%NbQ*U7Sht0#Izi)BXdG>ks^B=GT-PH?=XJC|;#WU<7$r5^n#69IEsMXg z{G$Lqh2#BTfZ_=Uj5aAlDw-VgKNvku_~2PG=Cz&@kjspUGA}m9opImimW~HRev9A|#fjL9wsaj)xr^=D2 zEK-$O>JJuK1Y@BR&_Xk+d~W246_w;2q4ZCEyH|eBNYYfo0k)s7NSRCsXs!gA%B#dv(Nxm*CH7;`PW?8#%A*949 z7mwPmTXL}F$G*;z@cyW(f&yx7JkLa3R!Hiqn*PQqoJvNe+73xDPPY;f{|Jg2)4%r} z&&2?+T6i==-DA2?-Kd>Z;<)h}eP1R_O&8d&#p8aQA#c}O?j;+RG!xO0Eq^C%Ij>Nd zR(Gh|!Cb#td`+kyn({b~h-fsv70PmZ!?v9>o$Q+6ccpNo=)IglDx2?J84697W6e>P zmXa^>lDDeRW%pG=nOg+V-CPw%RuP2T=uPjl8S&w;vAlJYcF3e!|Fk(t!dwDzA+Yk5 z+r27!9hL-fcv-w3%|I!$F_Vrp%!OE4DZ=g+CHd}=afJQr25kC7*ElEm;rC0?{9CN5 zsb7FIbB6nYI)tvmb$AVo@TM?bIflbHA%LTxMnMj%QPDNHgt0f`B5^cZga%sc#!C8T z>z8s?Vaz``8u-vH^Va}R09_Ko07q8xN7>euqdC!IG`X)$AH%U!Q`;WTPhLO&(f|DH zQuE+XvK4BQff)LeZ0kZVQ~RT6&C)M|+h;%@VIkkaG3cw#?J?i1#~GqQ;2A2>(P|Cx zQ7&vbZmEW#QUz515pOSvI$6ns`7-SrH+@_!deanqj$DF?5rTlLmnESgDq6J3S7Y-D zVggVu{J~~e{!cO@$pm+R`APPTO`w=Wyh0+D9@G3u_JT^IS;%jdwk*obCX=_FbLw;J zxM}v%7d2y>2Ak_B8ghFvwXfy5L$#FkN)=wYpN5%y#}KiI1MCD3r|XU1vh-V1Y&5 za(B2HZW^lcXid3lfyphlrQI1!k@)*MV??~ZwVGbbGd?Hd@@`j7!I!n=m2r>D7L)T5 zCPoFtL)uymylX$5%RT%_hIshn!e25%hC8rn+1O5`7!o-UZh6QNpoy{zxmiDuF|KU` znrF-{1{2Vw+96e=N@_1OifvKB5C+SM+9l2w*gO;d@Ox2C z6e{OZ!$>4XzJWxvmCrgk)^}nhWs_k7;7h68l*8I zRLB^XQGdMeXF{hz8)6#24nSffzl+W}jXNS){E1!xuQUyX zj#SPX`NPv=;#Nc%-#o<54~l?!ix$+7kvnE4rS$EJ%T9X+%r4creqlEB=gTtvnbbki z*DfKi=Fdky_4Wjm?-4x*`WnmchFX?0G#eG zAJQ3A)l|e5d{F7e1DOadl0i)%`OgYtWmqXiOPza+fYzIA`S3DP-00d9$((EC zOFl)8>JhX1`uH9D?Y1}Q#!&lcq)f8-TqU(bBAgkS!Y2KufL+1;{s7&sY!w|)VFxog zT#k-7mu<;J(#@fk>YI_7P$!-J_5h!~ql_9_0c!D$=00QE&bTX__5GJXxW#zS3$R7i zqy_BAq&&$3(a@w9$zlyuF4cCb&BzGvttMgATf6nGLZ%vXOVT@#{7)@Jo%J5lxM_;X zlxlM7P{6{II5d-L#XxmUjpZiQ>uQPe0yRV>7xHpi>-K_n$F%q7x4m$^P^~rcg{o$O zR3sM@s|`G3TQyh2#q{Zoql(y`YYFYup_HwqYKia6tPW{c5v3B5!wI2y8sSV(1#P}u zicBk{{(2kf>P8tC|Ou3vSYG>lyxG^!huZd}np?777_f&13DQw%hf> z4fAvJhd0Ni^uERT(UJHi-BjgfQ?+Rt)EiJ`6YbLV=iz+6i_dAfy&Z`ZY#wWl7p<-? zmyk4fGU*84P_}brhoK$TMosP?DJWlq&Wa}Tc*??;*Qn&%x!^+*{*gZM+{PlJl$Si# zEjp1O-X4ByQQdya%fhXzR7F3--|uu!xt2bfRmQ~D1Vx_D8%AQ;`l#fn624;Q*uXi` z%?rh|`!IS1%q+895xk$(3bDA>uq|EL?us$--X)LCt8~wG?Z#gXQbK(1Zi|z&M}p_b zi0Uy+HFpPFk(FYExnltfjj6nqigN))4gmG6N32(WTHcCu2uMID_r;ej0?fxbvsJx{ zN>Zzv@5w+{V0OO4s?$9Y8!byFcM`NUmpVzcuv)>FF%t^r+~gG4oRHy=8s!$b%zFJ@ zackl9dnZl|XS>cpuc3Gs7K#!mtztvj!=lqh#=!zSlO^O=3*pb++$z`39f%w3Z$~cT z3(UC+#(Hk-J}DqZtdTy67|_8t8R;k`*{ePPb3DUtsP0G(Iq|bFB~a` zyr+4pdb(+xZkd?1V&NNBMb~nS)JKwbfSmV_H2v9dso3xYW(+*faP*3OCD0@yj{{Jd z9qO1#f#QB8YmzBYjs(?(HZlGvamKJLg^Z0Fdq&M!T5%iSBb}7Y(e~sbY>F>sYu&qS zTdLCzlLeGGr9T`Ke9WMh@2l{oe6l5w}=O8Q710C7FjBGIzR`do6xRO znz_P~AsQWyJ$O98I-NxFJX>?kaAU#=6`eJvfYnnYUP}QD%i|*%28I)UEt+bkGpLzq5^TszLDX?$e?yj|3%`8 zV&(^Uu#NuMLm5w8U+z+!#tES43k-|4_&i&iXO!s|5@xf8n1#xOawa?|h~sZVh4G$% zbZp$w!Ue`0TvpFsBCrBdQK~Ro@SG9KNc&mg7A!rrIYB!7z@DIT%^^x8BFRx&WW>Z! zDTuBN3OW|Ztn5c>0l1J_G4w0K9OsMH^0@6R$E~%jvla^D_E=Qdw$974S~l{G}{`SJ`YBn^&5X1d2BEO_>efFs>V8f3zR98f` zTN%k%%s=#!z4(VxyWXhOd`Wsh@%Cn2Jn8&mEosNF?~}pN;ba#XX(<19cn`_QE}3?} z=au=r_-W~Zry^barpMPjHFOJpz<^ex!}G>kA!4MrOFKep&DTl6X8+6H$s5fyXpsCv z0Cu8^e3)vNr?eKutytM+dN`#+IzMX&Vb zw(QEdw@H%zsT6xxKk!!b`3fO|XTsO(w-K_dQY0h`N>aspQObOR_d6vd50 z4o)fr0KvlGr?)E!B0jCPqyw>8urSBC-MjRl2pxsAqJS^ozb0@K%z|Er_TRSn&`v{N zW%lp~piuco-#;7ZnCuD4K@StMA7_!&-twKW!HfwpBke`u+ng^YyM3ebIQh6XOTYH( zDrGXVt$=0P$b9Vi?hZ7nQ7lTT0qk8cZA5rx0ZCPdR9GZv0T_Iw_Uy%9iszpKuyW@) z2D1-OD*#& z+Uo%+r@u7x3#6>l6#b$gpOXmyirjAt33CG4o5py z9}8v$#pD8-VVo14hf)2f29R|6qL(PliYJfO#XhV`Ag@2sZmk0WN5jU9hoHu4LugLY z@`K}i9w1gx`_k`+NRH5{Ojq%9+PbGYd-)}~Qugo|3WcYrt8tM)cij`+J_(XPASS6B z58!QjYD^c~EWW$>;5(>xktepv2`Jl{Tj<&E>&jfrDdONOYO0&@Bg&nTdc7oGKXtVQ z(?JrSJ_Hj~qMlH;1{^PwT;t%Jf)EYBV190$9fwSW28~KoUA^zTJzI=I!zeM-I5z|w zs^UUG9(T6o7NOwjP=K(yKc}pMO$px&=e?V;*(YDrBh7|%pXelG*BoG~+G%;o^7AsXDW%w4v*x|V2b7kdEy5B_za4YibBHYL#UT?@R1zfAN5IVK zKtDYua`8w^p*R-E>}Elg>(hB73z#2IZ%?p3x+)gkkl+^TEf^jTHxU4m`xU$U^vol**HPRaUtT{t{_SVV`LUsrbec0XE zhu&T>un*bo)`19ZiM{@haOf;@+KuB#fnLnkG>wfs#tPX)3mo;Pmx*jrsM!Vpn_FV; zwa(=>RW>5IXvTMILHEoiRO_C0EfIY4q6M9u9@Hbh+|=miG!o+ts#OM!2J5aXiOqNq zVD)2%pp{F)Jd&nI)Eg#2#=Ayagl8+OIhcgng31UsYhVTVsfv@lAnd7>lc?EKoe&Wf zx!Mp|G?a6@rYLGmaoYhT(23?*YqEP4zgO_PFlwi z{1U~uQq?i2qZme-c2z(Ms4MK1-WJ=LZxtoG$PhisG{QTUEoH$dqQFq4tmJ9vgRtgp z`pnEKQ{5VVnqy|CwcvBe2D&gXOt2pNVpr|FEKBw}gx-fyLP9|Y`$zQ$`~Gb%Fy z&6p5jVNDKW+A6(|=Y#KuJQ}aX_{X-^#iTP*=~lkOBJ1jTxYVyqT)96y^i(Z9iPAnK zeHnD$(TM?)L+m3wP9GAc1Pz`NRw)XSLpIk0wz>jp{V}whx4n22-kX$~7>J0@5E8s% z_z7J3Z$IgF10TH4Hg(5~l)91=Lcs1{aybm-lia3>O%qwN= zXeJ8N?pvrLb8}0j)M3q*#CiDZ0nLC#FlsFVx`>XP#X)`DkDEV}++~g~_s_w0!ayFO z@lsKu`}__B)-*2Qfv3Eqc3T9I%XOjF0!7X-9&p}P$tlFqGynV7ypHcR6Z}4!*0&`z zWG+V9tXmr-Na)}2&o;I>)Xt?84}y&KF$&ZwIdb8(@G;jchb^=wK#oMyFNu|7Hv3tS z*OCZF;tm211&{JU88d!dVeoMh>f66@Ar3t+VmO3Ri{z%` zN-gHDAz}5OyqlKQ0}G$-i~Eh`zF&I$m6)dW5lcg9A64?MQY!}==+Lf^2E{FpyUH}t z(thpM%DU;mEgtrmZCgNsje^DbCl=w^_BGt?di+gU-iFz9mlprwKiEn;y9_RWVqqg z?OORyLG3)90oO`=CL7nivL*Wv`7sMwxJ6kRi})e41ef~Xn;~rx<>N^IMhI&{S+wu& zeC0UgZs^qyp%qs;ZxK8Aho;Ox)<&SVAPf5T=G>7@VMi6z-d*$@Rdvw)Na4eg1JJ;f zZ4Lbd2W#@)9Qe!HqDlv%p1cY*R(<{9bwu|xTy4KPN=SJNa1izU#jzJ7o^5FBUrft? z<@ft*=+8$<8Wf;y53SWpm(TR{NfYR=d;Z`5m|uT6EO!<=_IHwUi_%tq3Y%`XmAJ@3 zfT>?cQBV4HH;PcBy@k^@IAyx(DknOXeq9zZQW`Xt-Yi|E@QlGM>l<}Hvwnpl--1sT z;2Ky)m1{q#tlE^S^nUWMz8%6kb^=PG zY6n$DuE&s3D!~kcYO!GTu7QDZF3w?wCzr|UoEsO2+S@GI(mG?#Y&mk%?#GO#uh3r-1e7$) z+TJ-GrIf$I+mKl&swd3MtzbRZMN?B55njJQ5_k;Q?zvqnl~++cC@aH5;qQ#&3^i!; zr=3YqgB6i>-sR~lnM(d5yRhiMN9fxonWox4#*_R+w+}DF>t3>`klguV=6SFzBf;JI z`q#1Q%82W34deq7Aj}7N^r*LlLzVPb20sIB_f4r-NqXw!IsDDHJt=R%ddQ}V=0%hA zJRCM%nPXGH#L0rJ`=PA~lLK;8l$wBtB#QS9t!U59zv47X<@U`FWn^66axw{_XH|dn z4%*-k(f#oep~Ll4*d=SFizJ=iL&gf>qh zOVyDmoMk1b)AFrfBwyPj*@2iu9{n*A+Jv@8T%mYKG$hQ0PGT%ID;ABIF+y^KX_ORp z=5$KW>ph2`?$CW9`6(AfEYQ>sz{G@QH(&b{?mKI&@Xu=r3Z(@M-RKgL{J`+rIEGxH z@IDWl|0Skg( zbc`ZmCR#j+(8n!rf?ZVn(&DrfuIQsR%m1g8U zFTH-FepowU0@!&}_32qC6wI|D|E!!CA(auQd~sE#m2ZB&gR39R+ZUWz2IdgH->w}p z4F>QyG5;tD*yd=0w1PBj6$S4$(i7F5b9OFf>FjV+k4N;n3^OjG-{^k8zR?c^0C+h8 zPG}JJ8KYfMj*g{<9-E6^O>IhaDy=E2x_x;6 znjD;|J3C%q-t5ho_2cBWf`!KLNeIG$*Vhic39Y$dsS3cbw6zT>*i863`8PV5W!ihH z>(p2=f~Rd85YH3^V^t&q9?}Nf!LPy7+RJ#THlj>)zeOd-u`PwB~C& zpu}y{Wn9+yd{j%DPBb)tRH%PXbqmaw8`%(-}z) zXU4{s7VYq#GG*jP9+ys>-WUP3M57(EB|}`2g}JtUJ}ztJTe>db|9x_ z_l09_PHx4aGbL5+=0vyM9R0d8V)(Cl#l+y|ePg0x_Us}+soZAsXij#QUnlYlynUa- z%{=#C-r6d>o)@YgarShzs^I$bAUj3U9{9iY^Q-ppY~Ei^BDemqfBZ%JI4{&{GFD1Z z#l!j2Xq~F5M>Eq<#mrz!=KWqbFxa-f>$C1>*oWmwoD7qD{)(g5{F@I_rLE~2vHt2s zXVFx@Y~Aw!=6f5RY!Q-r`=WI_@>5BpR(;v9k6FV3DkLvDgI`}e%=R?gL-ZHtR!pNW z=8+`UG}cPK4`f>C*ni@Z`6Vrq=WeX;Kpp=x$g%-(Y_t8=GcTJcr6k^y1heD2yzl-e z!GErae|V8z{Z$+#0!-fL$TA>xZM}RB`hG&&Jvi`yajG zfA0N%wp`*XGm&1k9!`W6r{t%5k&}-{r+$x9j8&xWuj>A+q_! z+S+WK`1#LX_p9f~AL@m;quQMPm#+eN^Z&J*G~>E_&yuB=_iH822WzUGj9S@DUy&&O zii>JVW1|WRMQU92>z!5)Uz~Pc`bD8v)bv#ItU4)5ZTr(p?_g8BsULgp(5hU380#?u zYwg+L=5*xb_{O6wy#s8hkB*|FYKG)X>CJcE3poW~(_DT%#&;MA$0PX4qlBO`_1$P+ z_U{3dtG&`$a}xJ*Ha=#&8^XnufEqa_(5B%b;XiJPw|(-7ehW`ZnnJ?ooyfY#I+M}W6d^3~Dyw7UDBaD1mm@1qlF_F( zWwWq2No`h6^Ye!yFwS${=VOYow&hCVixzzJUX&ek%|$h~Z13xzLEH`G-}~T_Y-00^ z2MuKF>;RQxUt?3~aV0ZuV&@f#9X>u7tEW);&IE~jd2~BE zST~~p`%25n=JzPjVHPZW!5YULX~#V;p4DB$f~g^p^NGaK?rIWrrnj8TW&!CkvD@dY z-EkP*ve#)4yQqd2d0lKQH@qINv@7KvC}h?Ft)W~ol{j(}e03aMNo=K*Cln8K&1`Yy z?PjAGKoQ?CacHJ=!^?QY416504rZ;LGZ%WbeC6P!6)+`^g{d1?za$Lg+iNEb)M-#KUGm0Jo;`5=IHyn}{V;u<%bt!UUIweREB`#`yhz)D!N zwtA_JKqgRdN5_T0@kpYxmn~db(RR+rO5%26rF7fZtm%$W#@c2`d0OAWv^I;&lotQE zF+*u6IY}>AfC~YBY#(t@kRGH*p_V8Js-Mxc@N%{^Fry0@{F+%i2aR5JRukEV5sY#x zBbLZz=3$_NF$a;Aw^!{F)$e%f2ry14wZ=YYlXfdq#IysjZeZ_}Nuaj6>au%VSG20g zao{DB(X!?vk43;jicYIx!A;u+X|pQTFR}N`0%RCaY=FeZs`IA-jJ#w8@qXWnZDNI|OA@#3ml^>(vC*PwrAQTmT!rT;rg z{*7DzHDK2-kwVns%*(+y+vq~!OuetP%-%6}5z~_!kndYZtPZJTQy_P}TsO-VJ3yVi}o;Dln{dQWt61 zyvP(ORXj!=H%~chh^zSKiqua#qNc?T8r zHTR|wRJ;Yiv{mWZH34RnYOJ;Two8gPNjM-C{^m9eDoP=_f@UqeI4 zHfLnr!FK!XV4M>oI(K7hWXV}T>V}ViPq1UE6D=ye}AE0{#uQBc`v$w)_+c?O{S!3N*;+->{?#F#8FB~LvMZMt! zJ>h@Xy@`;~hNNh$%*ukIdXiHOQ`>WXo%Rg-JBMW(T0axj3 zBouX74mx^TDEl)|CXtDR-6(}QYgclVk;q>EC=kSW7b}uEPlvw>cJDDOjIuWLyq7nU zm@|wL9@qW-C6y{-b-N@+q&3-wik-&ad5a|H=|BL_K01GJq1j<&KivQK!htzrK48kX zYL7u*zgOaJPSV?|JAm{Uyu1-LlSDv-@`On|(Y$S+jXRR(p$5Vilpv$`A+^0g!0l8r zUXQ3|qM=HO&8qz<=$sSGEI}!%K|=}JP&uRLw7t)IUigg-$NjiPa+)TwEkQ@ERP-XpcxVR*3TBBs z9p#H{vEQ2cUhYLq-4Jm<-d-qit~~X6acHNEbiBEKPg`G7FG>DAHn_cAL@-6JL2z?L z*&wNe-3zkwDCKiHdqDd%AcA@Sd6fUe=cTDmlJmWQdxE?(Uj?UhT>@dr1t4a{rUiWb z?h!WD4K`|7;cAr8)#-H`q2J^WiJ$TXFKc)qMjK%c?+)ULgpi%Bw>+c8Z!R(GdfVw< z)x{Z$tt7gCeI*Q2Z>9ebQUg@3iFe;3H>jRUJ26}-?yD{?37l}&^5^$3_&#AU@|pLY z#IQjLrSWGW6^8Q3JP+V9O=&nX27xgM%e~wjM7%F}KU9QV7J*cK`)IR-9}S0bK$2HC z#Bx63B=h&2_|~4#J*Fu}eNfyh8MH`8Sy)~BC8Za7zr#MX>@)PY>IFnJ`-ij5Jqug5 z%KM}=`?2MM9!bldnP{QPs&^trcksYBVnr}BGVh%E?dhE>x|j2R$>f*+Nsd%)|A@l8 z8MUC9om{*tSdaRm_Zw5V)V(HOZA(O(hzYPe()Cx9-G56`ZX}ES1zvh<+OYJ-vzu=;C-aj}??0RJdM*4$7dM|t zr^5ncg{jqK6Mid?Bc;Sf6dv6_-+iXQrrgbAA#`T%5@ z|F}ofnr~cEjaLlgW%6_QFzk%^dZ)AX)7Y+gy~6SCU+P4*D+p|rfN|cyD&khH8Vam3|f!%{OQ8Kh>%;d9t4v>mN z+bZGa`=J%lZtE(Bnp7!Q{dt%$cor=S=o0spj0!a(g3)7(*ilfqPfSXitu=4EkV6`@ z(PMFtMl3khW2shhnM?6)M1qMzCUvSZ@%_r|qwqDQ9{FzR)uMt-sOuwqb-FgDE>8aD7EMo35q!tfw)Iats$Y$eYZ@PU;|j6!;Rbl1`VfPmzrD)=w72AkgOJGnYO zdKCde`;rA(8D|&X??-@4&A%EcwYq<-yO$vJc&SXXMK{ZO8>*r(i^4!3jOI3ofZ+DR zqK5)fUskCKOYoi1yLZxDR@VAOxpRUjU~BW`d!npBV9fAxs*1+|w9=uNpz{fm;*vJ_ z-7|i`>fla2FZneSgzh9uR!TYUB<@O?`}mVY)F23`Y1W`gM;*h+6=j_f#{0}MXvf1w zeM!c3==ZX%H+5@Fa=(pF7oXCM-H2LAo?MuE0;u)PBYcRPvI=?s{8p4+vK3C^iV)a< zuYvc(K3r=I)1k>I>kz4`O&-xz9mC^f3nlth4&Thl#9zpX`XGB!l>4I$IX8d-P>N^7 z+z-bpq(e5~3cgNC+|>qfiIFK~AIvEHeLc6Me}spsdvw9w3jK-ZR3|3#Q$}8A8%Pj< zT8}X!XTpFAHYt)=b-AUi%gj62jCy&0!(AV#mTlFhS_tHGT%5L1@yOOL&xE2VU?H8Z z!WZ~KCd7g_TIt`82I8BvdA}8L$2y;Y zeEGQh6ODf$#Xrf`WG8BxEmeYllFj+pqb!aJkq-}|DuvQdyn;KQ2FS?G(O5|c%}cKx z3sz?XXw83{C9b{|qhC@i(~c!6+9sdoD)~}LL=MdAK1LM;u)oqD7RGUci6%*+o!*73uN)X@%%sh(tm=mLw5p2DVlAn1-MS4NQNsYC~hS$ z0+Rk2K-JQlUtr@}Ud8|B)o_ugB5$(kv+D2umFlkg{pjiBSu}PnopXX{;&AD=B|Az$ zQS0*Nj^7-6Ywz92v%DOAhKePQFInNoykd%n)SPvpKSJ%#tz*_~-*;I_CWXx#qqOqe zxY%TrQCGsQ4tuU@VH-6a2Ub$Ra%#ssbuouIVKW;nc*23_AS_&7vfs}D+VkVngD*m7 zN~JRicPN!|;8O6eEbRE^y?zK`_#P_+$g4k&XY|@vdh}>^!i4F|YWdVB{%qi5`>Yn+ zDrM_S%8U)|?kepxudJ+bNF{oqjdcF(`1#pBr*^J;4-Qa>WgOBj_dYN+UhALrTA@wp@TW=>}Uq-*UMo=W>9t|c&ohs4U)Z2k)K;-jX!P0>5-}O5; zz`*NT)Iajth;mXdzgJdUj+mpZjOYUN;`Qcgn)0jW#?8LOIqMnX*wo#$Q*_!8a|kD{ zAvIuwMiZ_b0VVq$_Q7d@0=HN}E7Dq6@J<|;od3q(JXE2~pC2XcfAAHbp zAfh#J^RFSF-K!UdjJljj-Y zU3m-mHeJ;fI+sdUon^c8*HjerW4~%oqBA(4nKF<+{wq@q2*s!nqZ7=Y2IJ&FUN)5o6*mET%gvJQi zwvpV~0lg+);FvYKhjxjj8@}CMk3=tLJrd!J;Y)xXX`WpD`yKA0-Y+Iul8exS;PrbX5>_4L|HzjvAE==eevnNGk-qZ|n;~s7zDmNXBSe~V? zYwn6=S|B`S8%Pj;-kqq5hh0;#{+T1E*QNh@ulGQYHFr%!la1Kxdd}RHI7y5HsW2G%H6Rqe=&i4Xg@!g8P!2NTPGzcv4Z?*3OX7XN{4 z{rmm!KM=|P^N;*zN~#>$gW^+%^zsm|8}1%PSq-}K>zFromuH{Yi8yvQ1AqeSU5C?8 zWkPzN%2@p3&_7vr22DJ?+U61pW}wbLX&1?leocezlkSh{LO-XPs2V?5yQrx(*2-u_ z6^lxE>T^Y8L61_TD-VO@oy5=4F29dY(I-y?ou~4bg_do%Vq= zF@HP!Ej`%BFTRA%!bHGCYr<0FId-4eUk@xNeC=<)s$@T#%&U*F9bFawG-$^0^f()! zhge6_`uj6M?DVQaBN3+8+d^_RJ5(d2U)N^xS$nb5r3hTvj~Xr3+F3i)!?z1_Z=bRA z_u30zQBdQyfmVgm+@z9W=s(yd*X9ILc`zAwgN|QMoptewXWLCY6zC>2J+V5z>Fu`I zTafc9y34h&GVaE63Y$Rr4!?-2aW^mpl|g%PUsO3bWi~rV8~_r>%=7!xKi0S7BK&B7 z^pGwzrVdS$=yFa>MbFL8n@nJ*cb}dZ5Z{hXbbqCV7%2tH)+-?m~f%=9omx~ z8B7!0{o@Wf=!{GfvSb>ut*^R}5_wiYGX6-LeEZ0`b@eCNroVX+O0$3C3ttxdg5)aapZdY@h2WL&u{)!ChJW!5LQ1&hr^0BVLGvD499Z##anv(e$n zFi_gIck;H0g1Uj9@1#)a*bW=D+H3`n-0T@rrTIFmNhQ)(0 zLWATh1Bf!2DGyNlWO;QFdYC2l6IDLkdgcl(!}jk(4U(1z0Gj>m|w zeg~^gPl6!m3hU)rs0KQ`YEu9ztaT#tY}kVDX0PIQ0dnN++rIU}p$z<3>h-OwzRAvT zT)G?n$9!C3#GwQ(;)%>V1RtnW)kZ?mD;~)!SopLpf^0~StI<(%JQs0HS=NQ0yxiGa zjTUWJotQ9w_T-u{yB&XvdF?!tj#a_f!$1L?x|*H)VMU}$d9`VLn@4|SF_ZFiuU4wG zk=rN7V|LWn)jE}#N}oAzlRG~Y9%qcHroM?u^rSNq7~+G^Z6(ZZx32*1d-dp$Bb564 zWASUs?`LZ5=Odpd+saCAeF9}Z!hHKkIk2U9HCzp~)OM0sx$x=s`j*!j2NXJz|63|C z-=XD$cLLpzPQf}Tzsv%hps7!E)P*7UVh~T~Tq1VyWEboI# zgz}4d0UKi-^0)P5~IfI7>imrxfhNC zpeD9&Eh~H?h{8yYu6ROrbnqwyYOFiME7{dH+=R~XY4MFgjHEmre~VO=cG}eAvmR_8 zICMX`Y+Rrv(jLmHDw3uBsl#+d8lEopP>)Y`595D&va``P8fic=m_9fbB3v3SK+hZ_ zJ;XbUxmWEZS>3B7m(3oS+zaA^MNBCKAftU5uWmmq|G{7ch5)Nu9#870l*c(2Q9wKt zpA6H{Fv-zq?oS!FH>Cm{GudV5W|d;u7j77VCytK>$Gl#sWK`u;S|;YD^OL-n>D>BQ zeB#D*jZ|&m6&R?10RKR3y9y`gc(48Fvp9}c5i7bjS7qzZgWzx{_tblQ#iEuKtQ49e zAb}Ka?Zpl#!*g0rf!!`UwxGs7*tkBlUI+}DLO9a{gB4rvWm2ZURZZ(pL^U(+Xk%A9 zH?_97c)BmtAnNNk0xm^$6Hhu;CTdO=S?WSf({=T^nQr6-hYyuOXsS4N2PaR}9A5nE zS?}*prWZX5Bw7%m?O$?S?m(i(;XWMS`xhFL?r(p6TeC}?*&|W>Y*AgdxR&y1?SkS3 z-sy^mhweE)$$s#WI8H9K{J{XuwyqQg65zi-%cCo818%zVqNr(!<&vs7*Sf7DK8KNy^EBjBKAWpQxEVK5G z2!I0|Gj2Kit06aBzqms9RI;BPIaH!+9bmEilPu6X@h4e_I-9P(+g88wv4m8oV=Wte zdY#q#qTa8z-Cv{0d+|4o)(v@N0P|l=$+vznKU3t8#r|qamifi}%=_-|Bp2ckIY=xq zaI^k_Sqg0~IXx8WUWRaE(P6j@++sle=NcZ<6!|smrVkNcQp_192F7^C2Kluzd?=< zB&2xqG$r;*3JpE|6b`-WSb4>m1tnxwpaCTTTTEWRSk-^E-#2zUkEJVrGch9SScqZr z(q0YRC7fT*DKoOHrjWA;uK;X{DsAw zFWc;V+dadYaSt||fJ~^jN$|uLNu~G8EYi>D%>;EzuHG+*_tfPR6XfLP!kLg*xaXXi zjzHu;$)E~w#na#IW&cKn-Ymp@Kmg#V(B*;SLAgz^cacVhO-%$)crKF*fudL_4fS1n zrLp)SwkaH)&P#$0|E-ehjQ4!20gj&^u@Q(|!rPAo`T6pNx_9Qt--PViqb@57`%;M) zfeN~!1CK;ECxQoV8J8#PN^6*$1Vs%OON37pc!Gk$glvpb5zv?ioo@lv#WI%>P{x>? zu!9$$e=VP1o17TAG07(ETJg=z;~G;GM(p;I0Dj!=dt!VOMynpx?JwtmR`RP}FJase zk(Mt%cnPmg10$0RoAKG6rqzyZ3C>IsAk=VkBZqM(Y1r-bj|vRYigCTmp7OW;rKs_6 z*838KQI=j@pVjRc5PPofsqfgq9Pl6!;yC2EUyjkrIFQ4}-T0r-H4F^?{N!Az->9LGFHHL8BxB$v4$LX``BgMh{28Q(1Zt=>8gScy#18|`~+ zz9hb{KBU&qnwyv4%vj?Vs$fQ<(+2z2A54B!{PY=4h0KZvW5j~$a*k?+8Eo<{dGJ<8 z>KFh)fC20HrLGBXTo6HY`fYzw>k;A zFKuj@n1zQKJ76_gaTLrqh0|5b%sGS|d0Io+7EO}W{(@M3_pitMfB2PuZ(EaMha9b} zrZn}wxo>JO-mp+mL*t1^#8nLI)!_ZE%k?_HJ{YNz3DNQs72NI@F*E#0wg-(mI|}gvc{-dWg@<|A{uyTb5nQ`du^hRmon+MeM}%*Jn}0|u-MkcT zyw~am)F@c`BP`$e^d}iB=hX`>pl4P!*lc~bKQG*yDR~|l6G%2k|3PS?LnmM2k8t$X z$fs77FE3DG=J6Xgz`?{n!+&P&$!GEAVl^+}|6Q}1J1K_|EKk1S#(25fWy`OWuZJeA z%VTtp!coe(W<#ykH^#x#_h6zbJK{=l#9Q_sW~2iw;!wnq$A;&=Ie%JzR#G9gt$Ei) zy@HfGwX~}jZD&ko^k@pLkD9-x7}7qZn5N7U(e-mM*{t$D{wq42N+qUh{*7@x5Tlf=U7N+&-E?F!kAOVrQF}A5R1GmQ8A!Wksd+td|Fy=UAb@ z8~ciuLZXTFh<_8$-D3+XeZ{$I5V4%NSNDxC(1dRGo4F5j6bRd{{gbQ**uOh4_U%## z!X0e1Ft<-cLmcm%R{w}J`KDA^kRO2`;uQ_WSY>VJ#Jjy3ij`EyyBa_$pBF0htMltl zFnPw?7|Z03?0VhF9Wc`DD9b9!_u11P!>~!1s)_0%!P@FK?}h?Lx@FpB31lo9W{DL$ zn{sOoJM)rBs(3unLOsk(m|_ZZF}H;fIpNWv8uKh`T$X0c{G44+K^1bCQ|WNy_p%%# z&r7irR$lq?3^g+ARZ(jzDR{ck672z154v?QBcDq@-0^*!cA(bAY}G_<8<}e|7QvnO z#FOcU?DVzRdv_`*2T5F3wsP9}big5OXW0A>v?Ub8$gVJ<<%H&9513?H8(Ed@nh|XY`z=5)|kT-m#}i66=gneI2lwS z!slH-!U&0XSz`|$&pJcISbfCSb{wk0RyhL%_+Ew8w-m z^|o%Gs<}d743_oj9-#v5aMh4V)Ap8FvPARm!rIz?YIQDTu7IpyWRd|=->vHwOKq5z zEn2RkjlDcc$399evg=Z$>xj(;J>7wcL!{Q%jQi+UI*Dri<`H-M);01z_P3NqNMbD5 z$?7`k1g!DzSrJ2vz-Gl*7J|PM6TJp%R7E~i*no?x61@80Lc91P2Dz9rrn{tp=&Dbu zEhrZDKXc+b*UD<3Px_h-nCGoy8yp(eRTB&yXc-wc0|8_N5VU%b|=n1tv{+0@fF zo}%n?`JddTFu4pGW)AjOeBgHzhXpu7>^P?bfCBPGzhAqzK)9Dr^|{9-$50-Zof}(D zJ!cJ&Wnyeee8XCa)7GxiKHeJ&lI&}7oFt}CjGtTX+Pq_W=S6sF%fKj>Tsv5A!4=5A z*b18;YzVtjHSbkZE1sJR_+r9;dH|pa3#j|c)bPKNpZ}lvg4OZ(;ULa~KV%NwE|SIw z%tuuwF%rEY+iA@UlAHB~Y-H51bzTh7b#Wx?~&WBkizP+$9OZSMoRQw5fK*ebD)VmO_ zr!ueNnqJzcf(zMHL^_MT$YIzOZSp}79>I~9`aTmAQA8q9`Vwe+?|5fu zuB%B{hrb-@0Sj-SSIT(bo>@+avOY{cF4$Dq>($OGdnnYJgxf`(QBDPg=Y%9M#0g%( z1+&Q6v@X;n+`>ep0Gv|950^IiOSabc4$nsq><4eR)u|z0rNL_|`L5C1-f6J6+cXcf zyef}bQutroy?0bo-McP|pB)7S0i{bIK}tXpLI*`^5?bgGia;m=uN896%a(!@8H``-0O#+YlYl{w!z*P3h2_kEw| z$>0`O=(TdYgSMvSD%xAcW1fqIH!`il!WYCU^1CCN3;pL>fqDsb){Hu;Yy3(50H z9XtruL&0K~IhgZj@Q!m*jz03p+`%FJtFdL>F^N$zl0*3Pc$xsV0KyRB{U!wn-h3Q1 zEe#h?MNGtCr>i2{FNtr=XVh2~v&5Ngoz7U4Gf403mk>VVwYd;o|4ii>el6Q?2CtsR zZAi_;w?4l3mQZkzR05w#==y;DK9`aHHC2`_^JN1CQd=+4?{_GKYxpwUgmr&o+uV4n zh-JyXQ6|+KpmYPUnDma>M_S9?=F2s{w-npl$M@)V0{ApRnmU#COW zfQ@YB*|)FWX{8_I$XyOYGUYr%FUyGBQvxR%+|F^aNwOomcP1zv-N5#KSgGmQ-~yPW z*Dp1t6!)Zz0G5NnN#f$3tU5MGqWRUkZRIJpZW-JGJEKwzul}U7{MH;0@QQIs_toZn z0lPpXv*1Fn4eV2aF-g&v(7;4&k8gEVCv-UKQORiI)zo=plo%2KCgdx23$#m=HxIah828zRJ9>HieAh@dvV@v5xT7i)%;Q*48GMh{ieb?m?JA& zr?itby)OwT&K*9&sIVucK=aiGUx+=r!gGb9sLE7{VZTaqIXBGy_`;)$Lyy;V%?7X6 ze;X8hGq&e2645CvQ0c>-maS3WMiX}$wW28uJnwoLJ$G~8(0YbVSx9dSr0!V;fD5+e zR}|?NyJcL>E?%81qha*;=k}-GRk4in2K_t+IOUYvu(xc><0WNP40McXkJ?(aSIuZ?ptX+3wL+D_9=Q$ z9weC}_032~=m&;#wdPLqa;DLoxOPPt^h$(#$amFu7Dom8mMy(srbS9>JHNz;J^CYp z+e`jlYS4FUcEZm#B4>Olh{(Xa1=shUIpe z_`Yop8WB4pbwA8EcGkD@bh-rv4j!oJIfNP?`cHn)s)Pv1+C}!3;XrC}j7Vxm&H!Ag z-zU=y@s80z)2tALQO7vW1urT6Onr~9L4Z}$)E3x5FpD2X_Q}Imo~w3>-Nnf;QA)eg z`MoiOnOj9{qsV>jiYws~EA!*uv`~iEzxhuk>v@+CYCN&o<>?a8YI;nOjDmj`7Jyw

zQ#@kO!@lEl0`}q`zRZ41`|9nb+;v%}l2ak*o%2o>8fA^ux_t0OY zxnsxGHo)NU@UfK3D1KP5n%x{7)z@2*UPDgOW?Ivqj3?{wQiqNDqGvoU$dH)<$Hwj8 z=}ojphplOa5>x!`PKn*j%&D=cNJ@qcz@^x=^;Fg{TfL#GWhX_Wiiyde>2hD3a}j$+ zxakTV-8s$QzU_1;Rr?_>ZN#5+X>PZ^zzQDl6fA_KCX63??c9nIGIC-(b~RrSXHzdZBGE64$e(Nj0-0 z0-u2y#bkhdI^z>sO9i+~%S7DvGl9U-AQ$=#(fRWcQd}hb2D9DE^qUewP1RE zLmCo*9|D0$tp5tk;xji_~kk)goXtd(EDbCo(OMJOT zqb#*+cUJ}jA7`6gUzQuWf#AF|Rw%Q0E=ry$GZt@CdHgq+TmH7((fd}>KJ$ZW&F6Tu zOjm^OqZ!DW4kwA!o?d?MkaJiERpQU02g@~LpN|@+@-8~Bv)ZM{o2I+?JqOl3>yCL} zYaptZq8fFxnZIJx1VzkKtJizt%SFXQAs5qrZU3*mCgBrY>hW@u#3*rvsW($QXXQDR z{>{O&e365<%!@OTdAspNKyvR`7{~b{wOX(=cT6M0)fwq4!j9}S2Ju&c}rSQ2S(E?zSKA(KWRD!jT98h z^FHm#ZE`Y%C=9o~P!TOJl?5lx`_SKUevZG~vtG zOZGe$J7SRoFM$i1n;!xu#RL=hw@>W+Y9`Mw=xKF!?lOt6n?IcQccfe(wns8+Ht|rp ziflshiU1+(tMwyJrAsectj{l08|ECPop`lmo}-br_Qu&k5$z7)ecY3@c(Ay0tMpBY zSQn^%Vh$Ns(JD~DkMh6K)AQOz>6eOrgJ~a)ZJ9NW{2VfwdXr!R`=jf$im|9#k8Ooe zY+(r}$w1SSo?lt?NFW;=2SUebFl}98<;7a2ujrwWq!M8B*E z^Jurol#U?xwOTO?C7Z;F^l>!5YDyb_Pp z(L3bvGiVrRj4v*Ug9X1F$h5c_XnD74y89h6+(CNJOHKs+@$Gf>$cQPoy0Pi>_Esi7 zB5;+uklImzXmSxK?thECc=)%2T)IumiY!<+kn<;9TTppk*Jfv*(rB4&Oj6Yil~J8H z27qoJJ;kS7r+^T!j0dGxDCVtEe(}_oP7)BXZBG0x6Zh=NyO)#Wmvq~2)Y!p;Q;C!Z zYBAH2pSu?|Rn&Ul{xi~n{0-|_BixQ!)7GbM#CS6#{M|&u^3j0bwB5GtO2=k^HgMHK{E-uiiAc-8XNK@L{5@p< zuc*P_LH21W&VLKp2mBSK_`8Siujt0#4blID3IVe@60UaVC|@dB+a-FN=n>z4%BohB zh0mB)QSJ?J#(<_=qs}caj@3-W_zI~9uR4GMzhy%H{&D)>Q~Edj3?`Tzd{^AJSKY1K zcmLv3bmEwI=SZV}B5cmB&)fUiNeI*vOYsuF`{D_W*eObfICQY7QN@19GrkxR5}Wr? zaQ4@)jthEbvyxTKII&Ny&d)PU)H<5`CnV(Qy=U`Fg5NGay~qXGDhjZMV#}`n^KPCS z{$D9SpWHanE;i+#{O`_BLtN!P4r;$h?Kjn&`F>+Cw<$Witpp|B{PBqFc`Z}#VrLr*X|oJ^mBsj zdi?kYRT3lc(_6(f7C1@vBruJpM&OvHGz(y4_Zw->$kMh>_`QMucfW!syIV5g_S+OnRP2+*~t#D^k4u?b%veFCZQm zHtGUNrnHMv>xwBta3(hg2UX>N9kGGmMrR3{bTR$21-9W#VcfyK!Kd zLLpVvlww*uY8#c>*)YEKWkj_YLcCkw)cIs=IbMP4V}R_jh05x@tk*u(mMzGDT+Rh{ zd(V*PJ^t00>VH0>|6)wep*$*8JYHO(3aRrr^)wFD)BY$did{%> zP94pD*`tq~v)n)B{5|ORQMAfpR0s#$0;kRsoIxDuP^8bW1p&^#W866x7*$KSxZHXH{71Bt<@X;K(wI}IA)DiYcdWa(m2hNw$;@!c4Pl|-=I>NRS*90 zqCNU&he96y$LAF*wIg^`n0QnB+dmJ!C_1g@tznCdHyS}$iol)FRKpZQ?YZW9|oxLJiCU&gAjiC(W2)LP^r)L z7g$V}!_)1z7bl|BRq;?*+2Ab_d}8NH(^v^d9c#J74f2a8Smzim0C!=YmGJp`iK8&Ly(b$Y%uNami^ z4_)~*h6cgZm4i3Jz9(y*%PybdIt!$(kL1Y(2hH3EYkR)2Il6GK0RB0w%;A_=#QM!R zF_gn^PqXK+>EStC>sdS|Lt((xpS3K(X5QraJ z)Rqqz$X(Rstzj%SJkT$CT_E{=X1!f1p90SD(=vDf)iPJN&RryEH57m5C+9>`5mK?q zLtgXM56?>2x5RJ^1xeo+*ll(M4A?JMEb}nAM*u9(^DzZ6F|isqDx^+A8+T5$w`ixL0VghhKNMaH~Kw&(e z=mhWQ71nd)vd`cvLz{Qmyt>ykY;O3Cf!^Q)JL7e-exlNoXMJ|_TK|&y!JWZsekc+_>Bx-PJ8-S34%zJ-5Ekoxm+S)-dkn}%4 zGR^r-;qjkz47K;Sj3=dT#vqQd)pEIPjlSyv3d0L>1pvXww?s0Awo+G&&Z=(aKw9Vz zoJXo1gPu}5B513pM>v$=-%7K1Z ze+x{h7ESHrE6ie*xXY?~WH2fvznvX%AXV`4HG$~usj7~3I$X3=rIT&_aC>j_fnTJ- znlHipp!T4tSM((og-+wXB+mdYbXS))_g!w-fw4>0iUh|})f#zT`A%G7%i&1*n0Bv! zI&!pH1Xu1A1mNDWSVmeD*{j&zp%i{7k@DY%2K^t6JOAsFhQ@{d3qSN*St~K@(TieVV&7JV7Z>4|XPc`d_|$9ilW^D$C_G^)!CyepQkK!FNK67g&;9 zJvnwRT6ZWt%M9G-F^|@{0yjZ*FjL==u>i3sK2CMT?3JIY#`4~!TF1#cRA75u4;Gq* zHZ-ELuoh1mYX}urmORNN2rQEqDO}$a?*JgWXzXCz+D}4h-~`SWkD25PFGSY9%yALI zL6VW+D|=SH9kq{Po;YEeTo*grs-547_J*7>%S`KqYs4J2fxNa&o`HABy93{Qs-I(* z3JV^8TOrpfeA9O}LBPwhA`w>yFg501EbOGldKKt1|D-!V2>Bi(-0Nf8_Ib6u!a6st zJioPFThk^&mfTl@b(zV)DXK9EVQBQ?f6}SYo!!H4W6FnWTCJ7FQFb#nMrjk-WDIp3 zHoALPMnB`zICn!LjZgKHK9_;&MpS$?^anfMFTZvWox)#x#x87K$6n6iBwjfws)kb} zdlT5^P+Dy}0gBpA{uqR>hI*vEGICH?UmUP3zd88;sGGf1BVqB#7-+4?EqmG;3u;;6 zf3TnYIU7e!`hEs(=BADbOv<23_cNh9|H6N+ZcHAD6ny_74FbNA-y6{G#*OfE5H`n! ztVVUf#vlMNbuHsCE=HTQbY;J*O`Si>%HH=Ut82ownWiQDeM;hIxxsBd`nB2xq1vn5 zQRm=H8Lp1aC=}IB@`dNjgT_eKl%(k>W|8xY)1uD=2z?_?eAQ z14^ONURkjb0?9%tqxND~+@Dd)DNdfk@VuOQaT$M2xXKp>*mW^4Rc%HvBX=NsH z%w^omv9w|e%g+akPqfdT4`?WLkJi!1Oh!h6s6lZq+b>SMw#)-ik#WRtjw;0gP>-3`qtYMuj8Bxzi*;7SDkaqR#<#?_rGmh z2z_=FP&R5+edP+*jT^c5``-Bs+5ZFFyR6ERQD=Ws8BJRKTvE>D9rNv5M##;kNp6H!FZ zjTc2W3d3W=-<+1GV&6L873=vLsMImNQ57QTasLh0O@O3nKM_9-=A(_Tfb|I`CMLRt z@^R^UN7i0|(`p%QW9_>V&%l@kN+9%B`z#}B?aOYIn>B32w~n85&t&K<6!vu52ER3o zpP5kPIF_|*y7wVMt0XyVaWtNlaQLBhLu?8XcBPVnj&E{6KxUm$@x^q!1Bz0jHR7YQ zO8pS?wM{FVL+E~2OLruGDOa>8Z7d)kzK!=?dHVAY=o;}SLqt`JX=DGsZ6$YF@xj#^ zn~w~OUg?8q*&8E1Lr=&b!kLPDR;~}UnJCWaiv5UEd$s?NE<~{!`{k>cMp>$1V_lsT zTAHDaG~TVQ4KB)wb;dPblDIZEF%AE$Tyk!b=2w&4Ly6q0e&Y)@uKxM%zCrZp;=sF= ztE`FTm7>oDq^0UpFjhKUk&!Vf+dv?N-Y}eO#`JSwsP^_*Hit$xBa>W=$0a>4DVS6i zxa83j+pU=%Y?e8{mQT~?u|iD$7$K$KpqdM(KAadRGf!L0RF#$Y$@F?^nJ?+>u5Og? zSt>`!-rOnd^8Hvvcy$(&i|uF#tqr>8f#Q&wl&3vFuTQj_V;y+`RK|Yx?E?F;2auc? zE0a1Y%kSwud9ZpjBv?pb9UZ(vBseSMH|-lw*(ziT+*)2i0zqp^1Ms`AlvLr&={LFYw0ex!&dlw z7qbKs*7JBV>(WiLAeoz6q4Dr=wbLJa!8tpaql~M5bc_rGy9}t@!N8Rgg3jH1o!qS#_=GtVbLp5X-+88D-_M>u{9%%;v@Ri=N5CjQ6#f~TOMWaUcM&YbA>EQrM-x$5v?>e9V0B*6*}>9{#dordb?!!xA{lszK& zaJki>sS+CgNx%~esWyj~|a>;47Z0S5#9x19ZA1k&P83r7BTBb4cvUQA&jc=dk%@paPqirCQDBv-C&DWq7RJq+ zpWuk4hQ^celR~v$tO$?qz|X0;mB8VSrSfX)lKrp0h;0ZzEox69Uf%tpulYQ6!xfph zR^%NJR??Y=5&|r7J4^DO5+D@lKY4LmB~aSsOyN3k&^>BB?3Ah0weoZgHYCi^)Em%i zS3DgZ=}lXDY(oL)j+WR)@^Iv^Qcf8xP2a~EA3lD%`~C}1Z(>Z=xM#`uyAm^8m`nsl zEp$V-FhxinybJT`d4+Po+!lK(8$Ms#8bW~C^J^0CR#rv7PlRR(LEZ_wq6rj1YWj<8 zl~`GBc{Ts(f5on`r@WCXGAfvXd}{oyjpV-;NOW+w*) z%wBOyReh33edSQRq152CWu+KzKWLj=En3g-MXuhCU~a65pEJ}1rd1hZ&tjS$wp^h(_kmFS$SWMksfPop&6JjTo@ z2^6{o^~iagx>ch+hQkJyd3cvcZjlTf%0h=T4Jgqg_Gg3}y0PP2Qk*a$#2TIohlvcD zY;YSe?9O+*`uVn5V=085rqtQkG{^9M*2w49;L)s38e>RJ9{45sMD~e}uOPe9dl62} zdFRG1`Ou4!R;DSYxSiN#Gn=#*v4mw~Rt6VP0X%*L6D%bsf&w}$Ht%QdX7W{VKXt$R zag0e?q+?U?!?iH7fupaDnozfX`tTwU46N0Lb5NtiXdg!*{`bVEQD>&wtLQujC8qdI zK}L7e=Qsu>nAMddR?N7f{6#0Ge5@)mhdGovli{P!u)c7V(1>IPahS$bG_>1$Y_s0~ z9SRum*)6#IaFD(5t@pG{JxTy+u?95{z-icPQJf}mt&ign=3KCCO)>6`>zgllgw5h7 zM&7DD0+BzGyNFnIk$^+5My`R>|(zuEXL%k%%JF3msM_MbRYfA?nmN|4AohfNv3 z+mO;~@7AC8OuyaFHGByu?5l|b6$miL2{=~yyJ4)iPGp{VHZab8(~d`hR4-Q6SneF;0k_>*y%CnVkmdDeScPla5s{Ur44ywK&neX}^0SeoET` zjxbyUJ0RYtFtcI5+M#_WW4T+D`@EvR%ayfdSK`Z4U08pfh1Ii6C*_!rkE{co%!5Wt zgr|K<;1DRo=9yQ%#ioq1HoB<957&NJY(@>HD43C5Uu;DmH&1*tkDR+DtJuT;6?vF2 z1RBCh$WPH2r zi}cv=J};^!Tv91ht)fZ*Dbpl5%|5F<@5UAKbRi`xYD^7pBR2w7?;6+27VaB^kv;Mn zr4=?6p&;c7#(l~d-er-T`rN{#r~Z94gdd(b=(@)FHRq*ikJBJj{! zD%-zBf8K^jOziFNpAmmZqgy}GME4f!TXr!yiiZA5?tUbZFd%nK^2+c8x#K^=F#u5-x?8hNs>RO+tnO1kwRZwX_iHFXx+;rv?ejl>b9Lmnq>(nSXBrZKD z_H*|{>WNayXq;$-w`Dw%T5c5M5+;@TkxSB07&wi*nGv867OtzkBq; z*}N%x3sA;P)f|*rzwG>p5({>Q+P5!G83!^w7y+>FJI`f+q$B`-{%RKG1Ekrf2{www z)uK@yg>WQ;Og=h#61%6bZr|unH~r9#DS64QgaAt%1M7oiEhr$ggB#M7;C3_j=OMFp zrO(xD3)V*eYm|q-&RhQjnasabG-=1L^8!s!>{mICr+;a;{Q|d_n!P<@A#Jc;V6bXb zEdZlOdoR3VY*Rh&DNz6Id6h6UuC@1oMo(9pQHX$Vt7Gn`{^tKo(%j5@T7BcL9lRab z^#~2>LY|8VwqtLX-Oj4v^c>4W##it554biIN(Og!+X8rs0wtW1Ke?>WbP%)UW;{NF z(nU&^r|aa|S^S4}as2VCSakDPSO5hj(rozpRD8X15-DzC;OzyDX6Nm1DvXvBE22}F z-rR6=1KjTVMD>DU@#y-Sfi~>4VGMW}_3fOcfF|>Nig= z9;Z16%J^7H>I`0|kRAZgH>zScx_zo^qsBODevGO=(8k>93-mU8x9~bo_`;=e=_(Qn zX{jl+KW_G?t+LGIcExZ|%By*a&832XFVl@@45C^6oJIF4( zCr&i-ZQXS$ew!b#&GO;|NnFEcbYhYq{n^3FP7la36IGw<+c6lFj(cp?i`wtcvd4QK*(%v{3OM<$Hg6!$uiwMOvE>CtJ)*zIG&#* zT{BLva_C|=0SLyEa^jxgMFsl(3=41!S!G@-F=oZXQ~rv_{jqP;=vCq8UZS=d~Adp*}>_)DCaHCEK}0^NvP)!G6McNEJN!`HrWfBQCLC*jE6W!gF2AuuX@ks@MwpUpuv zA~W-iOf`Hn;i76Sxf&UXFlx+0(Oqi0sP3|$@rXAK0oAnUO7LF91Hd%A^W`6}|9T03 zKTegY|CI2Z9y@ibtrk%Fn}bvD_bdOmlurDr*ho)fTGlxdb($~x9=N?qXLOsU(esOc za?m9e>Yed%6&tnmmPu}KE*^6uDccuZ_`w1TM=&5D0!bNLjk)b-f7AK#8Z;}Mic71P z`jKiz2bwKNj!uNawor+v;7}L#^5;0!5KyCe}s};?H1|_?yE*!Pd zzHhYZ8#9*C(6TE^^dQyfHg5gdM7@C#Llf;`H|5O?;fWa~)nF+)**?Z$?%Q2}yTi*% z5^UQi&}^Ka>~!{U1L#cryR0aUbC`vFxivB5x~p~?Yu=sziXPbh!*f6VRnqP5hq>gu zeLprCr=)wklbgUHqWKBDDA!&oRAlO<@;PZlA0vlAX{to(b4mh(V&4hYylcUQsl;NE z#*2BFjO4yf7nM+4+@3GK$;Ewz>L7aH9|topPd*zKWFh)q%=GL?!hd^D=cP5kNOcWl z_CH%XQeTN8+%>uv<84|0aKWy!+w+T%m&F3Rj%02VTZ)>!x{IAH?sVs!Bv6d;uC{hJ zM?)uj%mw=U!&Dc{4)LL07WWwAgQSpx_ zP|HnG_2Ko4eJkpg_ZKV19pr&s)=A@@x&m{Vg+2%TKC$?zptrT-CNHLX*Nn_@OVZmn zs_%agc{ZhnlN2}Y7eZy-oAW%6W=P$t(Bce7h)dAxW?Sme$ri>j^$oGNIOqV{%1KAe zsoJ{T`h?8kSofou1Dcofb6S8~NLioP{O7pBZ;@Rp2Jy$46{xE3S%4-hoyHgNlKx4J zOkA?2pu+W3L@;SqkW-oI*_mWd`Aj(vI`7j`;SRAj#&3&kHo41*Hs{<4k?Z==wFR6% z{h@$0p-b%khk5I}GxcxQNGc{a6*6P#Mo?Xx%ai3va9Bl)Z)ea-7G#7EQ*R!>I3HVp z9w0BkRRl+sndOKU$>VoVX8IQBxL3ePZsyy`>pGU&P}V5ZwojXs%sX1C%W!mDAI{jL z>7!)RTt{tF{Fl_u#-t^Pw&3V4DN6-bxD@GA~5Mm(VfOa|wbgM%A48CyuyeUyjIMYD*r)p1Y%O+?88W>*7yLrQ-Sh z^R?Up3vtn3f1lBQjla@no?mzZY0%%lj{ihF_BUPe1p7b@o$uGkhd1xGVENx%uLs@X zFf96-*`&=J8|Si^!ppK9C@|!4}No*@~Dl;Vf28s*_!V#-#Gc7}@ z#|bmrkY)SNK5bG@?YD+I#>Q_j*I}R*=}q0jtbCqV!8%zR8nChiU`D}!WCn-93qRMF zy{2q>*dmKN2{w+@PdDOw?(n3H=nBedLYG?w0`r&^W171gJV9yeJON-1e-m+7Yhpio zK%HcsR}(yLuU>gy1*O2(Sx)^njl@p6ailc5xBght?0{A{J{#t8K4u#9I^HZ0c?&nY z@RJt{q9AK*P?Qo;$T2BYLA$vc>K@gAg;(NfF)!7JUM86Dz4$})?l-MV#^QUfa-j3E zeUV%7NZ}RYfbY?YkdvQEJbMM=4m|M2*Anhql34=$zFUtn*yNR?^$?V_nA;RLt_VRs zzn?~`!b_@-7OuaBLerEHQPDX@rl=p_uJe+qt4%_qb<_4G5 zf<|)Zt2FifzMfrp!&cKbE@augg2GV%wA5o3C6dXlfBJL)Nmks{x{}&rKUmfHj<-AQ zp=z9sFjvf1H_0%C!ckzp>Zr`25wlzpfn+de$@5yciZlDGUMijh6!FQvqd)*51j~j)p|t z&^Mgo1j^ve6D{5*^Ft@%b*JyQL{wcwY@ewe$A;@BU`}J>E#_`Is&7)e0(dUm{rq&= zrU>nc1&a2)Y7{bWe#^~ZIuNcyW`%O zRdmH+azQy$^N&2l$C*a^nj>lrF;&HT*R*%NzHOAtX>U$nUC5TKeA)=E=x7fuWIi`# z6IoIDNJxD@j{21QW!#5!Dci8dNCzL2NN0KGvC?Ta4Bj+AVbW)yj;F_5lbRAl516Uv z+b(D=pp;HDcWvLDHi7d?fs_*?CVV0X1UsFe2r_Noek(LKM7G$?UD8C&$68Zj6K{9q!)23g`q{i0#6OA4 zhQ0_@eVjF17DdoZY7kDQ+J}&;-&!)Gx-Lhenxx*}9n;+#y4LVk}(pLZL=7uf%LN_xbI@7H?2H z0CTCLK}_-pZ(-rc5uAy~o_b>={85**_? z1Mq5(6m(SMH|r!_g6o+b+;Z1{00@c`vt9NX+QXZc=5ZOa;nORV7~wv)=Y`#AfeCdC zohs(5d``j3%=J>l-PKz1bm-!dFB^C5AKH^9*PAJ{EVR0wtwOV*k3F%=6t}F(X00Ai zqEKg9i_2o@cEJvGM`@2Wk&f=a8b@a^v!>+l9`|Xrcw8A0sOy5A%8E?>FjOM4Oi&2=)g1d29qThrT@@)JUjHb z|6{So43c>=b`OViN_7b0MT~s7L7wQ3kEBy7zQb_`jXQtmvMQkvNK0>it*Wv~M<;P~ z`m~afnoS%Awxv^67rQK*lp`*&Y5^~FQha#;fr@Q^PNZX=${jFAsTnDeo|QKV#*SWF z(Q%h)76InVX^U1HG>fg5*oCRx`OStBGh45yM)sd^*Y z8DfZqmuK9O&D0$2=?NdC-E{JV^vO<9==~Or3?ph!N!g0gn~ZUfCKRTkuz6l9WyAz{ z^W8QvGbX_^^+RjWKWq8z_rDYfIx+Y)H^ynT$hnI=>uj8C(`X;6FvW6hc;|-gP(XTT z?68d1Gj~1&5>szs&8*lcQ#0+$bDZ}pP~cbD#lM#e{6B#`_#eEGapLAsq_*s^LboC@ zf%W*}{ZvbW@d_Wp-mP{x6>kQFql&zC04UyL%`+{32epWD%RDH}vq|hwcw+4HQn9N! zBP}G@Cd{OXvbfsDX$G<(97RDq2#fm3pj2n41E7DB8|3)z+7}Qn-o7zhFl9-&Yw>oK zC9X^_31lJLyTGi1R87&i!(}FPi{xA2`nJF)OY9TprCdXrak`pze;5fKr3|cI6 zs+wBxRTX<`#Esa$)U<&>O!?LkhieoG=p>%ylPCVp?Eh}?n%^FAjp^!w!Jf^Qf}z&+ z8Q=c1yyjzd>?H`f)rszG~PrYi%_2 z!vO3;wb|igbxGiSX>&1*L(Yt{`vBEex_d@N0v!SIyPjr`a#bFbYQz2>NNO?{tNN$w9BLEsp%P(+~ zcZLb%@k?cZlB$Z5(pW{*DK8Z^W)wwwJf$S-0@T7?3Q`)pE#>9*h2w`gb@s4ddJ^#l zZbBU#EZurdaYx?`s(a)aaxB{Pe?+^v-PPBqklU9P?j63OX^^ZLFYkcAH-mH5$A=bD zua6aoarHGnh<5=c)sKN>TF*>UK8yhO_U`S@KiCQN_A5Mi zFv|7J?1_ZLA89-v03&O$#1HClMK-bueQv?>0&e8a)tNvJ^4@uL;@FqR`Fm=RgSr^$ za@@6jZF{3lQ@4rE_?eHxLcI`P!Q9}6s~m>$k6vc2 zzbQA^{i*Z_M{z729$@6pa=UH6oQ-pAulkyfndR9LQV&ZPOswsk zJFw8vp5z)@1k#|0qKXzsXzqFCw7N~nY$r}R<}>LUz&PpKxO#TA@Vlkp=gN!#%~5 zhxqny$qXkeB_pKm@Ue$Tm)W~=gT@7G%UoSjIRiry6Gs+fK_J)_axCD@YS7LwK%%Ue zcoef2B_B}wqf4QDeJn-uMQdq7Nkc)6r!nEjCdN|TpiaB!OPbKBmI?TS5i@~ExYLXN zKj}EA*`@jI8k4=wyV=i`w9np1lKX?-px_NB=IB|cux{8**9=MR7fzBD@=XcyI7FT% z4D=vw$|kRW;h=G+b+@#!)ub2bIF+uu%a!V~6$Wr}JawfT zfXXVdK?*XQ(lpx@*s5lopRt=h3vJ(=Ew!x|DN0>gHqt3mxsvH=P#}PJ4tNaYHL3#c8j)$fZyGid4J;`sT{P zASURa^Z`fmlj!2g%W^PNVbjBX76o>H%I4|17}^sDYF-gT4@xfj!|~c<{Jd8nb3%X8 zy;mL;U1ou}1MMWXH)b22aF=+My#vzY+Zi*5r^}oY@Om}4HUv#v^KCx(KtgFi{c{sOP?+u4>3RwM#Ed8P?rs8O+PCe9tBdV0;Xerr`EJ|vwXS6UbLN`>(qS2XTn@c4ahvY?d;te_AmeugRNu;T0j&8>! zg_q!wN%C5UIEpDtMKBP$VP6>9R4R%`x*v$Zx2h7qT2*52h&`_=pw1Z591(pPp5|GR z>uDBk%m{QsHF9-WGd6ZWRjn#*hbz2XTAHf$!IFlI;dq0tdN5=pv8E4!A!GYkex9{9 z;d7S>E6&r8OblkW7lE4h6L42^1HMBwU~dMzyQ*W`Pm&Q>;)>SbOQV@H>k2$J4Ibam zkfB6PM3i-5fGY`+8bUNE{6G}Hch>0#n0ioLv|#dfQ$&2jak5IL{C%Nl9aGoaHJLZ9 z`seyeQ`id&fz=Z^2G08Wm05Gc92)4*nqrv)GwTd}#X!sWuj=AT;KwM4E2)5tFy|Iv z0@9YndyUNg5PrqTqj<*9gD7{FHrgz?W;A2VVUujDBQ~gQNalWVUzJtk{bbXgo766Q z;G?E^A;~nO^ZXM(2M$8U&`xH}skK7_l}0~Z9?z+(s}NLP+Po-~xrjw4>Sxb-~)zQxy>7Vo(7Sc9f@?{A3RSCih;zIB!SfFJBFmXKI@iO*y%2T;`%VJDxr!B{D zl<}N(DOOjxyqfpqr#tbe*drS6GjSKN)c@*Uy8eObSo+tLZE<&0irFN}CIiNxMIrAq z80$RfY|}?EG<;5$zqiO^SHics#HR3pPWj{*l0i zFHG}lVoZaGonM;EpQ-P#@VhtqGJ3iPh0TcG%mH_OOy3x=D+G02OlkfO{Hz~~CvHA5 zOFJnjAA9`T#}@WdZKmCVYWyXT-WW8p!rDij?~q$oa8T9G&MneRYfSQ7XAhulG3on*5Z_KPSN*wXK zU(>lL|DXs$zy9*R=@B^FyApjqr2X=tju6lp=|BeEgI8NQC(TW6a9HMNz6zx}jmPd! zIU4YGSDRmmOxot_v9wFJyi?FnZyBuUN7lHX=;GZR`>rwf&ATdCJ2Hl&)5{`3y4#bq zr*7_*saWylzKMhzvo;vAq}$LR7O*D%R%TJxYq5ZzU!kI_7)w(08-#@vr+3;nM_uf2 zXti(l!!#UsIP}4>EZ(pcJ=69=fO1fA;RfZ)5~$81cgvFi(@%I{3$W^uOjK`#m2)cA9y#*+jR_ z5xp*6S_9YZ8CXExS-Y8)m3sbctp4>VUFGOKC##RfTP3R1{D?RO!(_#gd2o?+UuM~X zZc3ocUwUu9mKArWe7`rAzQP=t)X-$lG}Z%+vEUzuB2&UY5LFdb@iPtH0IZwd9|C*`@fXy zel7pkZ$yqkrylM3?nP2Y)=`)aX+A>0TSOi`g6^Q&Rn$ zHIUl-wBx;3l5WuBSNZ1$hHV+*+A0W=XqYqZ9|O z?v3%mk5$8W$JYY^isIbvJXCIF+u7RpYLCFZnMNkOYW0*Zd%+Tb##Mc|GCR*2On_>k z`IT*FCv~K9Wx(iIu(u_f=LjeF(_+-RI;d>&wdBTJANv_M>M<<^)DU2bsg6$Ngud4k z7BIeUqN7?{_kNwQn7UC0-}9NBsMlp1R>hR6XRVnu9#|GPnj|#e>ihnvY%b#Qe)EOU zYwzw`G?taTdg8rO9b%1pS+Ah+tBt=6a4F3>^LL#=Uwq!=ztfFTzXBA0efJ`U>{&A9 z!5`OIFb>%#dH5%KXlxn&5}(-puhBpKU%h+%_y7Mt6WK5QEzVDaS<=zn3{ZE8UC0#{ z#rM5o4ZsYj-9JyGo{MtZc~gzVqEeSr*o%Accz!4?rsnuBm7iULU=UvuhVp>Lp9`dl zasx*3dec}iweZGY0J?tK7Q*Aw#Hqt`<1OM;h0rQ3w?&H7^E*Zarvri%tKLK8^nMS2yM^bUqz zl`d79AXwJT+Q0LhgZJLO&p!8```mN){3B#O8DnP5!OSz6t#b7o!EvD$fqPQhT7RDzy10F=9p=V*SXZbG zgP{}aaJpT0)xE0?DaTTKR~P)c4rhUNE)I1ZHxHkk8N**O++`N+R4VAt?TN5)&u-Cr zG2Wf}t^C&G6m-r+a<>Ps*$b{W$QW(|YPDsp%|oBHd&-T&!7|G5CC$msxOm?`1A-9}B(A5VjwH2xuw{SUY! zp9|D&-7ma8<>iyd%4hGax}UqFV~&&9;3z3yaAD)hX$t)eniNPNX78X7I;oc0VQs9{ z+W2ReAM`aCId{-wcs`20J|e7fe)bk_MCfqgXe)u?6>Ln*Do+-W29Rw2ZAQ9*_OWDD zw=0D9_nFGe`TU?}x@50R+m-}omP^n6w-O}|R^Dcivu%1ZH;Pob@6GK3RUr_-iDxLU)}-&w{OqqSdxhER=d|z(>R#3N`Z@%qGt^-(U^hopBJv0D0Dh z*h`=AyjSSZh8U7(KYS9eM9gM2zE915waj(Yk>2+Fsr zctX6;8Mx{4BK*URmfMSQhB`ltx~#k}7dt0ZDkLlU<~yYu=EE}h1-}tVI0L-XWxKd3 zMWfQCG36l5c8>fWX^!vUD3`Bb+qr8j*0K)8cLKOIyrGv_A%Z0Gwdy6uzN(18@%rpP zHV%&3O>|d($Ht87RhG26x?egnGRG3HkNUHvQaIxFduV> zG-~#oOR;`4wQl8(3SAG-Dl3*IUhzpbx<%Y1_}cn z(dJ8{FV)*4RbNe;ga*LKdUjJJ>fKn%jB_8q0EM9LdPia6qL3pwWlGP{p(xk<(eh1@ z5qoX6*@)YiN$*ZiQ$8`CBLH&ARW&R=_Btg+$% zPKY!nb>v(c3W|l_VC&Y)%!zRre5s>4GeOL~o~_fRP;^mzVCzZ|p2G?zNE*9!SHxK^ zBBH+rQvx;M4im4NjO=pdqY8J-xIG7AQ#OD&6%l>#e9n4_a||ZKL3palAt1*7_?6^S zet^54Fwv6M=7Zbrxi&yT0da6EC`KwSXCX!h3=ACN&O4V_j?aqn zJ^VatF<9kmF#$zLDhVIECwyz?8mjS2AVM*!(2o;=UfkJVe8cDV1yVS#*l-ipU92wY zUMO7VPR-j(jckP*-d=i=V#z~_gELc!LvfSZDj&IZ&Lurjto)g|UY*$<{*&|eE;Kn| z*TU!~zR&Gi4rhVdW$h{-m2;9Mu)-%`*Z~Pin3?E1@&1?X{0}VNKWw@G99R1oO}=Ta z>oG^I3(96qxz1`D8L_VaCWMhXq~u5?!1vYHS+pyuEvm!a!j_@Y?!Y?@gUZXdFi(@; zihP5X9bWy%pCAR~|3n=WZi#nJJovBA{%czVlf>+gY?5%T4tz`%_}W0YL61M>=} zKUu!W6jA5EGAiE0wInyatrb-vp1ML$)IRsVwhnfKp-EK8@Z)M8bl zVbLVQ_W-BNBHRDC~MQ5)#hj;!ot<~U2jH~06YlKuZ zH8^Urt*3;itjyy|rEtG`G{XuXb$U(wtKu%DFlWK8!zszlU7z2Oqp zqezO*ZC+4L{%QTlTJ!iFx?M!dY*_|=%Q8k2o5_6bmGf7|hDIZIe|`4;H355zbZL{P zhIgZb%%;>_jUDNgZ7ah;XwwdLhdO_Odr2x$=*!7Eaf-0Y(kpFC{VrtU7j7XS!In4iv zgx#UR6uT3;U8SH>yI`E{P|VqDo4XeR(>?Lg;Lk9<7rLHBVzZqRUy1Zk{zin(qn4P3 zS;FW8ASA4-9%IW)^ow;&f8A1sJrfvS19O+fg$P>-;qr=wzv*8jYUYwZ*1(*->kFj? z5~$mn5IRlf@Ux3&4d%(kQEN68ACqR&v)4UI$NWPbqLPiO2$@|mvwAkRgylD3Mr16P z6~CajQ25nJcb&*XasY20)$RU(#4NDFSNzIzjpAatC!vY#`~;xpaWikZ z^uci^+IBs;G;rk1t-;8Q3Wvr%PK5%$-@66xM}NFIma)hZ4}gYREpKi{T!<~Bj)M0; z8ETt}6DKW0hmhI#FH~rhbZ=MPz0z}MyPT(u zwfD)hbhkAv=nr7ELA@tp(zfmd(BAm0=*&3VUIVuA>4MWw@DIIPN9o+Qqx(-0AGg1r zfmUU`ZGagM6@#8l11|wbBBP*CQ183KNBJO@8{c>WUh?1H{<%L>{xb?SaRi;@qb4eUtoCHgF*n#eilkbT;0yRkeV`wcsZ_3j~5FP3}ykyZK^Sx>dIztjUj-1;AwOJ9Oqu( zfTT%jH?i%L1v3dD>8bx?Ue8>b7d$8HSD&V3GKk#!5QaU>n5@t!x*5i7?!M3-5+%yw zD#j=uvsjV|k@_l1xVL_FT|2U0upCZwtk;chH2U*Gnga#khQlK8*oZQ)35=`A^{(}} z>6A0_pni8`vhZb4(@O-IM)i5yfk;2uwCS@Hy}?o2)|mVz_QJu!SNjSuqp+lR2iO=X zEipdI8w94rR=-MBHSi;AM-KWXok>-mT!q{U#xeJKIx0@f9T^Gcth+mU`>{+%jpR_{ z+P+=6CYH%HWqIA9tFLb)`#zpMbS+TId<|~b9a&_&B2qTU7~l%*Mmh+On^MUXg|*~- z*G6YcQnn$TP}|<;4C@CEETmO*qYQSX@1DQewZd@Sj^es@p_wk#ehhpBZsdIHNe17f z;7jo5{m97B#_@U%@ddUq?b&5@ta|sIxCd_T1}?)>L@T~mQX311)^(JSI1ekzNE?pa&_r&y^18@5`xWTXQ;BdWHrj!` zTc|=aqPtD>O^_XJ!OWyt(Ae?g>|oeKeaP~>sMU(CZtnFXX*|r89BhU8}6ZR?JkO z7)fFr|28dZo!h}GCd-UmJ>=(BwpB()v&x(~o4MqBgDQ{G@QDAg0D@F@VGOmLb|C>- zi7Zv*DQKu__l4>azs%YC(EFos&3oUZKdmid?RoSq;#@2Xwi@`lT*BuiM_xYY7S;b_ zXD+ik+c^;tn0)Z}8KeH|J7?wXE5?ZGgb0n71W0JAbUu@@xOC%~wVK=3ICOw_!7A%X z7pdHTW~EdfQP}AB=>VZyR%?#O%iK%ge|Rsoq%+01X66nq;XSzWmUM=hCk-+?;P}n! zL!;}*-z;n=L)11zOV)3;+IX^kzlfo9#=9v%T^`_2RT`m*HioK>$$Nr}PhvD76A|H_ zM>Uh*AaT~t7W|xX(haqbAL;uBG)}tPxN_WjQCPCygBP!Mthdn#YcXW4bLRtRonihh z_rXC)d;v+V^A>Ij@v@5_nur!Rt`UP#rRT47`HU(91Ek5aKF*T@#ILMrO+7=!qNWV@ zVQdj@gei+=5AhozkRJk_)YKZTb-Y4w<4fsXAS?7EpTH6G!5OH#@)i5L<4Q*6?odD- z%Z|DGROd%oIGWU#tPOQj*sM~@!YLW8@PcHJC=|vF$Ar2&>2)@@|Fg&Dv($$2%AUEN ztlP7(JW`Hh!`Pb9$V5VzUe&N9b`?PvAm3TsNh6(cG9L&=qqvhG1N1lx4oj&MUYKh! zDzmEtBI`s6Y_1|oCXMAw3(43E^T}j_reo8|f3t7D=%G9}`Gt?+UjQYB)6v#n>EJ}@ z_Uu1%@M{&;S3S+2eD!-S**0`Swe{9Z9_!#Sd%?Q#ctHgle(Wn}Bzrgi^xKx1-b2Pa z%il99(lvipulOcyzi_I~mW*k(<|{!VoR)mPga8x}@T)e$2@rlupIBQ$|Hb5z(-lUXT#7fCe%53EG2|0;$e76MiO&^y3gERBcg8f zZ!&*Qc(pTxp0y3gsZ`A=3E$Skxc%9cDcB>BgpUJOk4S^=>?G?rP_N5CFar6L+)_aG zEW=nT!bwiwk!g|BPcJpiS$*D4p54ezk@Br`1l6^~$>8i6ffp)DN0ta6csfe9Rth%d z)3oxkBHh=pAD*&l3O(hR={U(@gbCUYUR!gmoicd=tGf&|oRfj0NSg~@_qf4_Z_)O$ z*5`1rOzRkY&x;w6&9&0Y?5N6KJK~=hbSkp&ldq{#idxk)2AzDR4II((=*!Qik zdW-vf`lQw}BOXR3fVI!>qsS4Le5Gml7^yJ!7T<*4+P6EHw*pMWfke(>5h%lPiE^Tu zq3N`)I``|_G2h$;xx};59v?ma@afJN^_D>Fb~aE7$6K8 zUGBQGfw)Yk%mPvq8J}!b_ekE&;h&6_%~qg&oUcnU{Mjw$Bpcc%(_;n${Ekw0kE`tgTXPZ zH(_7Xaq6IGjHPkB0EsSm0P5=f2<9?-I?-ujHLQF$vjb%}dfdSfqSdju{N)%}Y`l&Z zUi)H$oIqnIIt=;k3A{O8`_0-`gVBx;Q0h*Gi@gc?`jxb+i|Y>rW-VA)in%EjHD3=snI)7J5yq>dGhCN1EX{J~i1GJ8pO=XH?9!%=8q#YtpnCX>AG?*&=MKXh zsJ1{}KNJlylq1dzA(6$^9Pi%&&JwLmM;|`E1NJjEomlpLz1WtlcRMG}eHoO<195>G z-b&TXnj!fmbV#=^9dC&TIiVn4d8S>N{Wy&&2l>m;0<-I|g2{X29d++_B$Y)@%ABP+ z_6~HLAHQ$&{pE?2gv@^qN7Z?o2P;(~vED>G>5g5%xLwLhi?T34=oKn9#5a{Ez|_~I zmS3)R2zztxnyobabi@~8&1B2%&y6tK`Em4@V#=MlVSkO`p!`W;m&YLSRw1T_q|Y8u z>Du>sF&dqoH49dMD1N`lwwOGJ5Q68!5B*|FO=d?p6~4_V6=ztPe=T4?u?)Zms67f@ z=9aK_MaxXh;Lze(gjTdo)WFd(5xm7+Svgo9;U#I=NNwL?8gO$Q23y0) zFZJarDIcOt!fa0{-b2gF)H;>0#qzWCRXt_MeET>>%4Bkhg|F98er7UGTn?&YThY*b zc=46J&F0+MW$K6M?Wd0}+2YD!mhtzYMU`;GdyL1@A&VQl>J6L!)RG)yepyMN@q zHLzEf)3VvT`|d#)bFuY`zo%jH)rl(Fs^LzWgBTz}$upe)`j_&1iKX~UTOp3-${;PV z_smIq@t);okV}zkWJ@f1fdoV$xhEt7jTd>iSu1)Jnwj3<4(+sdI!?;D9`n z75po7YTN1NNBt&sn)e+`<(UNw)|)J%QL*LPJ7qy)Lfx$hUoWt*Bt%B+T6i>%k)A>YR^vqaU_@iC z!e%A`bMN!(TZ6gMH-sJaR}mlU^AiwDchS_DEp6<^8k{ZKy1K=Lt2(P7>*aRL8!Iybsj0~>veO%q2WL!meXp4YHbV{C8{cA8)44oZ;JCQrJy%oO-GM5|zZRs2}`+UZ+>+qUunTEMl$U|3xX6 zToFl16kd7pKz0TeyQhMG`-BBW^aeGhFmNsX@g(?n~bueO{! zAau_X-&H91L6u#{2r5Mk6XE+|v_L7e{}Imrl}T6WRCg|xVzTmdh|pFY_*=!+BHPiM zf{kqCG2Y~Qs%P*j-JgEX%j%#Dd!8BG0c4fmR41jVJ4xU4YC4^1R8zd$+Aq2#9mt+# zZ92VFv@*ovs8G+B)e-Rb8K9FF8~`Vw@4h@dN?%bYssKIclkVsIPC5u=nIC9IMs^(NmjZ=U1o?Q)s-G_52)7FG7l1Np1(mB)Y&yyY4wrAJvZ0cWf zilp}iw<|rFLyJJ&h)GzzOigPQfdD>;YeHA30G)1%zfaR_jHeH<7f^BPTRj@V{4bQLUnl+JeEO&>ceLgWa@kB7tZ@x zhVAC6CQR8x3;x?IIMfL&)Kx8+k4jLzisF*Dq3FGbbWU}zsR1@5gZGR;0~|BOd7q9 z8Fm)%=>>|VEsna3Wn-}!-j_2?(lBBvxz<6*L3}*KRk)t$<3d%Bm(%_bOCeEW3$dXi z8sD^iwJ!J6bY{;i!Z0?44pQ-7M&yJ2p?qD)wm9CdahD2)L>C6+w^9~f1~q4#7Oy(8 z+^aEqk$><@vd^|mhgsbCqL0Y@A~YxXzGQhp9LO~@`wjF7j<>15M(Fy!D`!Xpr>iw9 zMDEedLm+qB$6gQ4hHk7oV}r$^4|gxrB$yHgD(_{7BOG!p>FYX)dLHrvU{uHA*3@2Q z_213-KX1L_aN%km{CCqyHhfUhcc}=I4Wrs3_0x1Ah0=$e9~LHZW@V@OSUQ zn;o3S=;DfnF?m5_cNNNl%Jvcni9*D|p8afSj|V(Kp;}@_LiaeKMU6B%iSs28jgr?8 z`OneBauTYNGUWN(PjA=paj`yaz0v2%8xy17XT>U_YTpooo&bz=-Y!j2n}nrq`Fc+L zJe$%{Zf*a1Oo5IK@y}rHy1jI>zkm7)%^qC99lpt661ih$*=pVKv18-tdKcx%=0 zqW;Vo`H%|bD^5q>6>giIxWlDWzt{t2i(c$d;r<}+mq9a(iPlWjf1jL z+iaYz{l!z#>(72^bZX&Kn{hJ?5W|~&nlYPrcUm<4^y;Yg%h-=NM{J?oCMU9Nhxbm) z$)EeB)#(wQ7MkZ-^o>}vFKE_WXzDm~y3sEq{NLj?08N=gn85f^+VZZS=4#E7kEetY zU-euA&kjT)ceW+y#1vP^;T=r{wn8%7lJ5`$mNc~j&WikdvjRXx*!h;_PszW)n2cj! z+98h;?4`Ykiw_Drj5rdh8rbE`EO)9ioofUP5yqIdA@a56{7y^L|JPGMclG{XeVCb0 zN&^8eHaZkv%s5{*BpWT66Mj?_&9&sA4Jq%E4TeR~2E3Z49T6A1)hjG`y1>)+GvGiy z&)nlBT4@FJmTO2{TK-QTslrWK=XCb;)TO`A2y{MKuGv*QzMddsAtR}2Dv|tXJX`XS z&xLCn*t^w>n)8yp1A^6KMAHtmay8H0Q$MUTKJrr;t8qF_{bB+2Jg2|pl;L=J%0B${ zOQTaG$vka1PMe2|ryDJ;VxFeMM7~Lt9ez4(H%?oJv!@&VGQLx0vF^>hj1@1!Bv- zrIN0u)i48Y8sz9I73`*lSsf(Kg@|M(Ty<0s3j#JtevlM+O+sn!SM&2<(fY6d(*Ktp zHI&pjv4+7Xw_y84WE}x3q&Y#k>SY%eMC}IiR&EpsP{M@yEl2!V=qv|+N~;XS?s+Gx zRCV@ki)^{R&*nF4NHNG8*zf(&LW2pSUl*0ZGSMJ{@ zW&Wo??Ck$Zvg+5`Swe^sgdPx_xft!hK>|4U-^-v)KIU=`pTwa%h0y1`X& z_qqGp*J!aS>T)mkB>gOJdhWZ~!Gzgw*g8VqnTI>y6|yhniYQnl678>rd!@B+ZlJm1 zcM@%!OBy;G>XfSK!atJF{_U#&w=ch>gy{sfr@X>51!1PA%TRtf`zJqhn#%Ir|KQx@ zJ#|COr)KgQ9oKz@t-W7U*-UWzga*X>%k)pOQX3PJ(ZByBCS>#R{e7mbgL=(;*KtD- zDOp&4$=7^CjY+RIFYvcq2%MC0k-&10V_)J*+U2u%^bHjxw9Z8Mz~L0Ku{zSBj4lF(l((spj&w@MM~$C)Iv(Wu2*GYWFV=o_(kAN<+bsr1 zf`MI)@fhjE$0FADYq8l$gux;Ug7DF`NuSH4H}spJs|<`4$tk*Aw*!_USHqOY6zZxD zoEk^PB<1&_bXOiO-Sk)Q%wOfm!sA98*BnO$fbFhO@Z=?af#e%^2Sta#7#=WzvnIDC zt=%0fh)gUF2TOws)Eia~LC`uhe5B+mgSaT2J)%5-22df0r8me8U zl37=|JGovYnDc$yS7u;cqH9=y4haFO6KOMX_1b;+<+*bu1Sg+Ax^cM|WvXb+IyL3T zlKmtvv&WF+MWyP;i!q5Wp(32SD{bIHzHC1`h~B%3DI zyIwt*_$ZG?1zJr7Tr9t?trOahcw&8B*Y+Fe{2XW|py{P4hQ=?gR5;J_JqdkU-r195mv zd|!?|rkduDnh#~x7{=jqmacBaM-RxEw6oPvv+f3!sOc6T!D?3q*BHG_v-tUx`|JxU z;Vpt^pFd)kf8rzh4x4E%4GM1u!;>TWQqZuJ-h~QPqRwLy5~YcJ!M|V|i(amZs#vPq zsDjV`i6OAPLHMd&a`j)PbaxXnFG=&G!gA#0(1yEaWC$PpWq*`sW{dcmRW}ybn9Z4Q z&9a22Z7tj*R=!9-zmT1onCd~izKE8ROBl(vgq^QUzT+SwJtj@p8czX946HlSJbLiup((+H(%<%@E2b4%6oYl1fVtXbm^V{L}K^GD&tj;dcvT zrV6KgmJ#_arRa!!^8~<7x`58 zEV}YSPIsLI06(0hvr+*UsNc}^_pT;9b1komW=EyVKx`2)Ge-3b6Y+vMWcBgFC6?D= zVfV;7In~=6`*A}m8Ekmpfa$HunkUEHR(|!2+SSr~!~J0r)=)yNI!dcNZpM#;hk*NK$C{PK4^oGe}a_T=uhP%kKYQ;X%vrHDNN){s>9;Ux11RRZJ;WE*T$5H zu-8+8`uZ&~m8C?RD7|uI+-!>^L=-X_I0XMBHP9*B_OKzkBf=i>yX+*Df2VLt_!?{L zwut0*JIM)sX~o%4iY~|DgwyCHh-AR-DS7dxk?d>R6e2iH6qbpFG#vR2z7>+c29iO$ zs?DKU6c&stWAnn)bqsk5{U-M>dWN*gN&S%&2b3?cP6GmE5v7>U#;1VyFv zRikcUP(m?PIqQ+U?R#fvg@c2JOM%0JAbH7x_n>np&dkK<5^LZEbhn(-Yl>!(ar0vh+Med*Qz@DPMsq2Y7VUp#xuVrKqmUW+({$d zu+24klcz(|9H31U<(jgS)bylI;FG+S+!z7iGUx))(%PyjFR}TA3!&|>^$pV3={`Mn zS85#S##Pv{whi#k?oe-sqzQK@al^zRVk8{__Kqn}nb}!Q%_xhUFT?Lfo!T~KZ+osa z{1HEd^R#c#AW|BB2anz=@-Sg(=jGNAZpBx35z+h>o76>=Cq8w3!cN9F@Pct=Jp7Wi zF9m|{nVh>mo$pmbq+fl3`9d(Zo+*BXY!cgDsXEpwkdbOHPg0l(`fUET&=dQhFMk>>hg;$nf^rXT~ zJTWQw?=#u$A_BYoY7s!WmoACrZCeZxJ>6+p9)NCsvl87;Y)6BgkE9Ph9#I_yB{`Mc zh{H552Zdp5DW!?gw3Wl{^|8i}hy*jsq`vXou~Ch3T#r4F;2M@fdVGFPwC1DU*_0{IaF$D{Bqa4YAF*J+m&;Ly7{uj(8E;cf?!& z$kJpfAV<+*@iXJ@1%Uxj>pR~7S4OOLz;OomiQnVTU!Njs(LSc(vl{OeKs>Jlv5_5H zoPVFGUgVTevZ7In$1~to7KN@6Q5EgwmL%63?r;oT?E@V{Aj-0E=c|l^f~YhLn2{lN zLG#nNNf#ntot{3|AqeP_3CzGw?>v$=7`WSaztnuuB9~aSXu(8YGOy4%)NVB#HSJHy z1J*EWx?PV#L0#&Dy32KN!mk{=QPKXaz&HOX!`NNRkW~m3 z5J1qXcDvOHD2)$%FYS!xUNuDDN0Q++tHeg(an?96H2m>c`W6Xswad<2{Kj+Dz=lih zn7qZ_n0)uR-}pG>!E80Mvr@5~C570L1$uScXGzJkX{<%3SbI%QpZ#_DKcq?XDRL>y z-&mSP3`SpIk|BLh23td6U>Xz;ayE^AZq*UTjVQop{t};1&Hj_TP%$P%a_oDBer-4p_^@m1uT#C(t@->2fV$w zc6Z#WJwM8HukX+(=Os>K1_Rzcn?JjuG}_wXvP%~*bb5+*HxSvyV6u z>Oi0iFF+sA=bv7Jpuq+wD+(V|FM_&n+YEQ7nHjQ%yaN~#(m3_fyC)KCYFgPt8V^Z}z=yJV|PVI4yUoLm- z`VA)wy*279NsnOrSUf|AT^+(NOgjTywfJl^zF1$QMolj^MG3;dH$g%aYg&JUZ9n7N zYZ-7(wx~=I^%FI@{d(I;7;kfSn19`C_isA4yX)U)Mkkuh9fql<x)29Gq&gzU&oGlWo@#NokdsMqms>Z`yZ1-YxC9C zA$V@ETf{orNs=E2q8u{;JK~l+hw;$@1Q;l!+|q0Pjx$9k3c1)5@ow#oR343n1hMow zUeJ@QU(zDhcsey|6T;XX~#mSAFOp(L?5tj0j|1+*rv#^DM)W|J#D$6; zrjZ|8asm79(xG;Y=3vJL6%!K~a6gE#z>?woR3X4}I)Fid7}1h&5*CQNQ~f~5vzgYf z*b{G=nsT+IIzl%{u&K$}+KGiU8C$);C+f+%E*Hx?$2Ei?8mpr;IZg^K8>S{|q!J8W zL|3H}7kb0@tQ`(X2&$8%E{&4RvqX1nl^@c#d#8(rub$?jI=wA>b!w0I&#sR7{+&@S z56)^ajFO_?_vcPP!5re-ZnxVbaWda|Tlnk%Rts5b#8ihWfWCtl&-Amgy&v-LD%#ba zigi5FPc(NGsrPw3onlp$$R^JYXG)KpPxO*W2!2|5@r7Q&;!i^%R!VVwbB$U)24V8} z`hoYQS!MO^B!4^bBH99^o4?>aT$Wk2O}x*OgaJlb2U#wA?F_|_%~-u#GtCqPgIbe8Q- z;~~MHT@zWE7umHcMHVU`jmq<|juj8dh9R%aG?6sgDP=eoqZyz6_lg~YLn37h(o6`KIPn~^maY#j zPnv&U47M^v_*(LP)mf72`S4^q%H?NF4IaY>=AY?&b>UT8@w+!JB5cL}GCR|GiJJHW z+{captZ=(S;WpPlDI z4$=O0zJSiCBuJQlIy>ehC6t44>3$H>3)fWO(VNhsj({Frd>EtE9 zZl`_~C6W4fqFXE`zeJG!SLjoDu**Pv(4`c{PzguN{I)+M4}y3nF{(aA=U&d+}xO)Ki8*_hMzc&yd@l@#zZ*%!tJ;r4tUdl3gS5N>{ON zVPN?_wJv>n^Bk^f^oL+paj=J1!Oi%90Mh7KOQOiOq;7XoFu;tvDjykN9}k2`3G}O@ z>Fn7zDI0T1(s>DFTMuFjwXrntx+!O6GLMACTVOV>dY+iNve$k85=6i+8Qa_<-)Zpe zE=HMA?z%rPHGQGJ;%wThDXrJZntj=E!dSWeQt{ak#GTLiqU*&(SsL1f7Q*O$H&A1; z#t@Jf}nL93Gx+Qjt7>?Mi}M&%&4G4!IAeBlJp&&R4S z<#s`5;hT*M8%0G}@rSY;mq7_>kYY%HX2;UrAF;Q|j|UrL(D3V}BGL`N#icCD!K_0f zzZZ9|B1fxttR2=z--Xw%S)QzUG$#hjprwdJq>iMa3*ueQr@2x%rrNN;;NEKS>yA+w zaNfx7N~`b<>CWhivwHVj8(*d1bC2&3Po`&5Og~&=`VOdg4ahHK6|wF(m}}6RNX(VD z=8xq!S2w~}S-T3)aAUJJ!i+#Z=AmmABnGm-AXZHg6afm;~h3Q7`M8CmOfp z3|mM_zrYJ`dyab2Nw8IQodTQ};cnu>mg8pxa}>w2JENNNfjsWO3c9i$mz4J{PE z&rlh>`_-(ip^Z`VhIMA~2aI_0a@>x?QWL1)QNL<8owX~bwrsQ!tG7xnEe8=5DqSIfMf z<%(AFJf~2EEk8VCQQxtPaU{0>B}>SyRzcQuOdW=GqMx>(2V;m#GErA+#j}gpYW4a$j#sxg{cqv^o7MErp{81R5Dx zgN;Q_ekuY^n=T%6BgN*dBQHxPO6Uofo)-Wt#Wp!Z-j3-$p+de|ZQtW&(8{0S{+ZT3 z>Ro4IWKJP3R4SUSlqVHwEq3eR77VM2T0VDRcCxww~0U9z7Vr4;7y@jDt zUCAt<;=FC>;}nN+7*wwxFcP$<&p(UaR_>@{71s_(K@?QJk9*rdh{$2Ag^hHbPZ1(N zOpz;Tg!&5e4(rVjboAM7@QLqnW)AW2d0JzAeK|W6BJz{{fr!5;x<~YKhuZ*gF<)Fy1YxZlN-O!fx6Qwj z^MtVyRstlfZ|j?QndA+kN|4Fig0c>Vf_@S`41a}(mP`;of?zU`$FvH*$?@6@<(kQ| zrU8yol?SEE}tL*Ty6)}8aT2g0h+DV{sum3zf6e}*krW#E+Kjk!^R9k#UhW%$ zU<-g#hlIwxcuc6uxW*?WxBaxzH?dd&c6}pz1|uVBs4$c*s2o6OblM|yP748?Db&v+ z@GI^RSCsW~omZ4Hb+fEkVpnv=hAtgjQJ&Qb#sHGzu%7@$sXrouC|R7iML|2->h;=% zRh9RdXiykU67J>FTG5ehV~8-Id%zexU~mcjUdNpu!#}eYaomYiS*Vwc+dD z%tfu5qA8Var7^3q!uj5;K(#kh6|haC(3)u-(jvq!7m7nkPtX3G@2=ZsO#0~C6-o5G4qrr) z=Pz$Z@w;cU7V+0a0ja{Ar4i2SZ`K6TWRBq4eY7}WwACzNT)TGvigZqOunBRA16GxA zH`;2frJ@8DaxHW^;lh3ZJBgCt4g7r@MU8dcgCO6mZ}h{5#U4$Wf~_?=M69}vgWy^C zMo%^rl?(yiOeo*rAipo;4>%S&is_u68qP^R#KxmnfboBoy=~=2M|c;jyhMmvdQA|u zy1IqRjf-oEHG1E})UAdozKV2748mgkq+pmtMwLUZ`A>eC%ngyHj{KD0$9lZMc6>68{GBW>SiJcSX4fihy2&i%>gxiaY2FM4)pe?rFgD+}9cG{D(^^K1Sm-A{8X>aiZoBN&G5^@k z(_3Fp?nd}F);``z4-mI%oUL9*r4$@0a;nCTsw`p7FaV5kNL192sAp-ypCY)ZK6y9i zC9s+n*RAJ@{?MqvCtiofw~>=-U%5psZPb*Zs><`4OTDLY6YIoa4&ejxk%QnoZx-U! z%M}tpd&D;1IXzsYe0vS>E~ucH!#jIc2libJQ#Nc!NgX*D$O&dp3Bz^cqarUeTtyG!QEn^Kz{IXtBXA(!w3;m+5eR6x-kZx^4dJ$l6*u&tLpWc3tNXpY!RAT%`^4g` z731LO&P+n=Ti>lV!TG97s$&TW^TG>0bmV*muyzWeBEn~pF9LDoTSuh~WES^iVlGJY zCCtwe@NuSn;$odLhC2>4+ly@FH)i4__f5VPJ8?fSZSara{OL>7urx#UJ^h@pypO2+aPkg`nw<;M^_BXW~l_P*&s zPQGr|pb<_EL&Px<1J@-{^F1HlL6i~@Uup|;Yc_UO6gTf33pTIGTyt=+O+y`+FF5CD zl|T<=@5R8W3PDB5SW06qT?5uh5=wY|Xm}?KvLAF!YI8JcNq8h#;_*!t?gX2~q|qnA z+L4L;3o#})O4h^@yBSojF_<>RdZj4SlsdW1Dw|&M`p8j|RDGLi zwz#xWG)SLCxRS~wtUg)00Eh5lH8o?nZy^d496get!&3x}4j~7Vt(5Xli-=Co76rzr zb$10**V_?f#eM-B_oqHgy@{1rYe_shf7Lu$(y&-?Vr}Fm!OX0aU=f#p$Q37jIUgDbHh`>`Ph-?j{_*7_#a)fFeJTWu ztK84rej3V9*h{(+Yuo!c>_V%=tPfTu{+2khiqjb^uILh{{P&rM<2XHc-W zS>(zTFE*v|Bhp-7IEz$U{I*>$y}y0~1xrqLpNX(DBO84uzqEMs12!raa(!67&L!>7 z;?kE7oB=IOVt^M8ApikAp(VZtyyCUFFkSF5+1QWHO{ixrTDD?xj&Tt8$s55gbNP|6 zuN$Gy-PptOBfzU7A-))y6XqN+Yv=Y}$ju z#%^3q#tQ7E3X%n3pZ}09N`CVGL|pV^mMV!thMM&>z+|J=fu<>@PSrldfv($c9U z6PC7$S3Llu(#qUTvZXYirm~_Lnp<$WaS`g zXVqXJae>)@N*1mxixhf3*=fn&%Z$a;>w44CpvC%}g$a8zYsX`x>8O=Ys1u-VNYK{31gMF+(e@JVy^6}1 zlGn6V*?2kUudEci%A4^Tmw;v^E?uL0QR**cIT2+LaiFyz>w0AMk}Fl%g7UJcjOhd8 z2mra{&29@Njuf{`B_A9z>qb#2hj2&-iISYS1v=tQVF~Of<6!omYdjdL_uVqrWKqM0zmv9?7eqXQ`;UbjP-~LN>!=?3B4%2qYz3$lio#v z1VR-sAYG+*NFWfZ^bXQOhaD`I}Q~rt@iH;*UH+^Z5S|1AO`4lnV)U4Bz4dgnuKq&^`y+6n+-6G@2atymhOg zSl5AAy|b<-3)dLTsG>=RMPrI$Vjo7SVz{Tlm^}GEg8^Cg$*4wUT9I|UsL5%~yWNZc z`P_s}m1Mh`w`}?i+xk%h73|Ve zr@mNL4+S+j+s>pY)bi|*DtM`EUpd;|Yq2|7X}EHk?A7bl>iH$-m$6~iP8Ba!n(lV? zrpnRRhS+wotwuX;OJ97Ub%^;J&8mLg4c&y;e*8$l&Ikb-HxM@k#^M^e5i z?C2RsnVnKwKHFq<%QNPI>PUt)n>W1}WhKKdHQL@VB$#EnbgP;~y;~Z;#46yfa};O3 z`H=9u_Wi5JbTpxcZ!YX)XLXoG0xCgutdLKg=Rb+ERGjsm4XzaQ1GZLDeO?W`jdfF; zOkHt+G!AWg`7vr7<@`t-DygV@@DjhI{Xb*hN`p=9SYCX;)C19BJ&>SS|A1;6*;QeBUOGH zthX@<@1(f{7h|r2s~Dh^{aIOg60}iq^Z*Qo94FtoCQWc_w|U<|5#xMj4g9@D6UYNj z6M^(Zrs^(8vL;<2R6z+yt2AJ?J>A(f$uax&4Y^b2@vWMoTLvoC{!$6R3I4=;EZ;9; zAJ-sA7_I9U)Mnw|zY`6e5!B*4?5A31eQSD?CXpWl<{oHOOd4;TRM+~4ONme@YFI%kkPr>9%4gb20Y5BJ?XN? zmV<54+Rq(W@K@IvTJL*>P=JlF3`HadG%CKUF}Ee=8q7+BcBK3y@|AaA84ObL+NxSh zQ|AC=*(!J{J3sIsdGaUz1)C&2Cj24L%hO*%M~}G+y`nCw)CYMP%Z^?nBf})zIAVT8 ztNwS5XxhwLH)&jdPV3Ks-5P;i?fr(3zJgosc@i|=IIb3}PBa3{5Db4pHJ8=-5^yD64sJWhfBgWd1L#}hlgSy?P z&ioOMu$LpOAO6DE{B9`)r5XrJR`-AVv_h{OUSQ6T*Kg&Q3JYu6W%`N_DfpYtlIq#- z`>aQ(#WP+`qHam4w3J$36L|}5ysT{i2zBy|=wMtwRQ>u`+}On-k}-!DG8ag`?EM>7 z&G>vo%|Iw~kRdCWRwvZ0kvvypSxMW4G0H&dC3Y$ziwoNS`Niv z#s26#(V1k*&|KU#>DmRBURLw|tj3$p`ARH`yf(bXNWa`8skd%_TMim{{}2c`IvTwM z-J!V?MP5SChgEu5Yd9u0_rt@8&hT#Uo>E zfD{%=Ytb|uioM~0Sj&Tdp&JBf!&|~v#&7M_IyJA_UuaZLE6Si!t)I_;dbYc}Z6%`_ zCb90up;22I%@+C8GaLj0!M{nL*CQ)CHt4ar|+=`(6*0Avna-!f91{Em7y;$l_2OZn45C{k$!52fBm-Eg-SNMLE@3Sx=VE~_m4DecyMmK ztG~$adIQe+IOHPjAL(C*Tde9fUwOVRb|&xh>>uf(;DPHAzjMLA{kvm=yTmDt*vQAX zW3_)>&_6Cqv`>oRJPglpdtx)AC=*n&&hS@C4@-%-XjennJ`~!{NNv?SB>hJ!pswg+ z&L)n%OZ#18V1er-@E<8nPDWGd{|y&j(Llf$56K;>*zDbQ&cJ*0vL~G86U`_Zwhwz) zQmx~PlS8tjh_1^&{Y}Y(Fmm9@UtImaC+q(OXa0v+_J91Gu%7+DeE$zz{!72Hs6PFc z`x751@EZhs{a+#Za%HYv<_hPgi*v4zXhn8Ii)TMFT~MW65-awcG)gY z@!DeiB)ZVW9Lb2Dca6?@*9{?`_>O4@@A6OinDoc57O(2Y<4B}tu>+!oy_lY1erEHw zaGGrL+-}<>l@j7faSRxkB{cjdY=%$lN+!`CkNKVmgi7+MI^vpDjgD6&VAD%HN5)~! zNye^*kw6Y1x?b@`n{^;vbY@uCkyNC2&n<(mr8N_?fF$h2_DoP=l|N56bEHDnj`F~x z1>~njY-mCkX`d#wS1X)_S7_%_|FsC{A@}@`O4j!)6a$Q0L8z}hn`=~#;-JyV*)Da; z5qU?5Cbj=Jrdxp8Vs?J!C!a=+-t?`1yq*1CSKzWvQiF8PhxfK%xGH@%BYJ&NIEREa zM$n!gtQidO)P(NXn&=XV*{g+GtJm3L$SD$(J93tH`A3)JQ=jy4JHZ1!gI~{tEm!%m zrCY64cmdPkyag6EV8la$Lj8Sw{yV;XCAngXvARd*$Y)-(U*=A8VUb`;3b%rIu%gDu z2tQaIhyhdy9ODJk6FO8XNzNu)=*%zay)%Rzx*-L~6Ys`{w8G4@9B~t(nCBD~hzg`K z#A*uv=+7-kz7v!;=La#rT^^J0EI#-q1EpP0uUX}z$u4MT4stmyseKxO2$#&toY6GW zn(9|3L9JOL>3JdQt2vY4f~@FLH)IA7>Qv5VA7|;n8mn6<@AOWCd@=X^1ZX{N5#VT7 znNuCs*F2+$dvYaF$X5kXv{0Dd&Treo${~o29pYCoU+A648pHX5+(M&CNYXDwyS0&v z)mzJ|f{KDVs;;*p?vRvPBd3(6I~SL@7q|1fPH*l7%jQ0tfVWC38>WcRA+l-*p5`EJ zUR4>HZ14sU(N{_+AIdNdvAvFVw>sA;7P*8q>d`aTw>K)HNQkO<%9Fy+)`ijve4HJP z6Yf&2O;Jc?aEZ4@cuSeb^HGnu@+;HFZ_y$X!{oY^rk<*3`Ft8?pj?T&i?UPFiYN)B zLI!)AxwjHIdmK~ewRAb^JZWBT_c|83Ju6}Oy5HP^(vrj)G+w5Z&5v~xwN1Jrm>2>s zvB)u-aBh$q$Xhmdd#xOns!bKK)LpA1IGi00yv@rUKwJ$&oAGDZsb@jQoY7q}Lk^`3 zg+$K6z%&D6tw`y8()UxvW^Tp`3#iT7gfTm|DyG^!0o{&rXd6WR>-VS8j8io8#jiF8 z)EymY>FySkedoz#G22v%nH&)Y;{;4OGJ)lqVV`4_48D8bc0QLCA}u4jU;q3)BUkvy zqEIW8HlO9$5%14h|@&cm`%;CvAArrxfeiS0Sl#EyzmM)v@Ic>mZuI#A^S>L&|gAxGK zWDdbhFP#CTpAa;?zrGU2RS}HM-evgQuie_X{9xYjHxk>Wg7qVkJf}UCa+a3TDoa*d z6+5z|kc2Ty2WsOS052`~?L}5CxML+Y@2b-DcNPKOP3oAhD`{iPvEMNxfGe)lyALke11@e9?RXmsP9{ce?d($3W z$+^7MpX<-_b=D$Ln|&SI#n7cAe{~b`JgoKxQZVw}{aJcfQum)eBqK-(2>2=oB{C3$UUs=e} zjYAsfpTB8JEo>6I?7UBle%@8uBZ(M!wn&1L5X=^}5pyxQ7am+jH+@`myR->N8`Rqq zQ7<1*YjaZalZfS2Tb)AjIYR#+T%?<(Gjn05%!U#>O{Gv0`7nvu(RybeJ$ zg2JvSFV440XpEV@JWj6krbELhiXBfj-{W>qV6@`nWg~4>vq4L3)u0UJz`=+bHN0=e zkG9ejqsyNY3!kqjJdJ|w6v4V$n9OeNh(lYfP&5v-0CGL1;pw4urNN$gFrE#zVAxJJ z;lML=GVLy$Xmdq~B5h&hP4d#}?odqL;FmlFTu@Q|QxR&#dkpGq6ijp+5^2V_T+aj| zYkm5D%(!IKm2?WYW2&`JMDM2t z6;}VKh@g?-j0Ck&KV5)V@jvc#dskE3(l_`;SCQ4yaOo_9!%*87_;C$;BEoBz;~3CFecbezIK3j3nw*vA2Lj&WHJ1XvK*33d1S0g2j5`3MTX{k_ABk1BSH_X}cvh(z#} zuzRM~`Y(v++qA$yYi-Fm+qiCl#8e%QxsXV+2@rG^Ksz^idE<`{1*y+!r-9_<+GfMN z0tq8A*Ub;6HM6lX-R6m`a4-{WUFr1H-#euM;P2)3(k}K*dznWeXK~Y?MwV?s$`)~C zBj7!cgzwMSry@@8y&C3c0CetkRcP_^$nFfVl?yK4)mlJLt+mP7$h{Jg?eUh9lP;^$ zxWI*I2+He^;4$O)rNN!zVcyD!<$D-tvasXj{FQ4`*Jeqs4&GylZcFzL=ea(!FVcznwujr)MN?($sN~B^j^>_AF} zqIvYSfpecYmP$a4L$N|NLi|pU9$PcCH;+RM4|Qx<^?o!{KJO6m3M*fx0!FGg&tEj- zST#eP>Pwaj_@jMvy-S9+iD)Ezpk~W=w9-0}SC(8^csXq-YJv%rg~_`K=^O$f1wC10 zQeDh*a5kK-4ttivrY63VFEv>d!#|A;3w-kFe)dgfkc0820(haQ59Apd>FM(+jO}dv z{K=MBl-VTWW!#^i3umRml*Ow_o>bf8wVLyanMk_eE6W^#6sxJ8f+tf=ZD0`}S#SADwg${Hw7&x!!jtUB;sVjs*1HnZ)x@ zL`|;_3XyV&y{@lJYQ`E270!c@I(B;XEu|q~{5(UJUXR?Z5-=Jm+D9J~-hW?xfA71@ z0JZ+9rWt8_hJD@bo*a|sT@@wr6dLL2uMI}lguo#`iF9RYWIKcUIN37I z%V_+!qu1CmTVlU@^lsNZ#O4IQ1qeH-8C(_RAH59$<3)_l03KXNVZ1yO)w`#g4xE@o z&gR*&=Jkb{Z}%uv$NS1`qvk8#zdEDIKF*Bt6`^VaKn!DRaaDsJ^$ul-*&uVx`VWwkPMJIejwUWLvSImOLYrr?`TEAp!Wal}=|kZMd8NDKa#H88yKdii&V0gr$OzI{qv!o9 z|Luf1q~S;kEd{J7*obvqy=`e}oJ!ZnZvyXmv>8x#644_aQLT$WPQ{W#G{Q9n%k5Tr zKbPTyNPQP9%c3$<-Dqw-`N#GD7Htojd$@U;BSsCjK}%mijm%y4oov-2#p-il%6%WF zh!M83=wXFb`2dZ9Ko(^y7J>1=(AnV}(_Z(2qtaLp&@Zn`0eiD>E!E; zACWrVqx>aS_^|d^4}yGPLylTg{2^Wql=CR)m$e9Cp76l`|A+r`9?oxygoH&df9rnx z+M{XvoV)EWm`SAQskv+x(jc1pVLfoW>`ojk1CYkS)7yJm*Lz(BQYI5Co#Niq+qm0t zO`9-BgkKo?ZP|xlk%qKu4j4{%=o9HR{U^cVp7CkbA(^ zG-W*KowA|9#HkT&ZvhrKzR@w+-j7Y8-Q+1`kqw#1M4!cJPQiuPkw_u-&QJsmnfE?F zQ^(gD`G^7yu(Lo#8SX2MJxJ^ESW${s!V%f^PeSd_R8BOWVZj-4!LlS55Fw6XwY8+N z*=d+NG)@Gw&aJnRp{1w4tg2@X9Z3o~)z<%LUjtNA2n*2x0w2Z^-vM#}$WS2Fy-VkJ zE_JyW1XmU8F^#P2>|=V|Otfhwq4&xd!uhC-xD$s$E)^ztWyofU=5@=C#?b)|J%^r* zZVDm0zp1|*T0Duhu74k=x~DzIDTK;ly;goRC?*EA+*PBRfVNPcuz*b0#nuGc616M{ zI_~y5k$~W6{?9!i*rDI|mBxkGRd(F|hEd2jf$?w!kP(?J2xRbFQGv=33@_E)w`T8RzmWzBL64R#8`-drXi&0V|b>JngWKZ#qR4im9nv}|2;SM z$ojAsWy9se@e{M6v*|EZa}HPPWM`-d6NXjQn8QJI2DPP(uyLVNm;z+c*~sd%I9dr~ zr+o_*6R`c*1qxjqYO)+T&#=j88eHv^pJHi(HVQ8i$-jNxOqFr($8w+T_)UhvqPc*f zta{kmozu`gk$623AZ_s@&)N!CaX>EsrVR^c_*3G(TXK1knWuZsCX0x$A-$6%v=)h2 z66r{Y@|D7Ymy&x!>!KZYqL$bVXDp)^sru*LmQIDn;4^L(d>!$N`Th@A+hLzNWb_9g z2dM6wGOvqFTTeNzRa6zZOwqe7N}Dvl>!z%5pgi z%UYZgB(~Jv12FJ~g+lFLL96ClMRCH1diS|>T*{f!O_F_`C>Rcf)qz3+#t>aF{}QNz z38c8g!6D-pbWP>I?{O}kxVbgn3e@W_#@%k8I6W83t!{|5L~uGK81#nWYI=cf-06iG zk|$vp$X$i^dJMzWeeGGps!w|yX-&jN3hS8KP!vEx!`2?l&ey%sH*md1@12_&;k>CV znigVh7T9pSR4bUY_|hi>wXF5lpmEz!?vrb_!J<(5UKhJ;8*|9PDWa$unZ5C)+3TMD z18QPNv|=fH^@rM|w)egqPhC=-&}#O}ZHeC+{YRU7v#VGe-iIkR>x%BnGdvnfpAqKC zO)`q$PdO+u3WU7W%;7|a!51NZ-A zhUACdT+y}~T$Y$$sya~>jp2bQJtZsR9RG~s2@7g(K%no{<~@ez8QkXXqZzTdUOLKW zk=f-s>*4a7xuXxJ0qK~mZuo7W-1iaS5jhTn=gJuj5^kAn;!*Bp#Y zb7@+8lK&Bw?DTXk{CC>SxGM$=dT3gxDtho6-Ea?p> zbS-Z0-m9}p(DX^v2*tbT)aG&&-eA}Fh{Tx{XY;^Q@_x+3Z7e`yEIAUB1+0v7@HU0NTG**X@E6F#4H=ycvvlYaA90- zi%E;8A9IDZzn+ofk~Puvk)5Eupvr3V6nx%A!%%q;R>T7n9ILqfhOAu`<_L{T7i

a)6{IV{3i8OCbwnz0nPE)g&cl#pIb!ZxO~AD04o_j zdc8dtcqfJJVql$K{X7-tN%VPXpl`nw|H3?%3;sz|eiHeXR8eGr;wO>iA?dHfq>04n z=Olj}EBfnikBOF?J$LcA$g>5X&5MjLSEB!K`nCDNVU~zPVxEF88~^nfV_gV8AN5n- zJ(g|h#ck3@xWDgU!O63K+eWV?VFbqy^XjG7|x6c9P+JePGiB`O?%3LORAn zLNDO|pg$57!4Y>&@ZJV1DcHLn=$S^c%qrF4vEG)c>$4VU=i`}O5Kg1S; zo(u0d+}^o!L(vZ}q%8G3<*eFi-^~ttKDB+>@$XK;F|^WLVwI_m?uCW73M#ub%c|OF z0Ewr65?RM&W`-VNqVKsyHW%-qzctq@JKpqp+hr{F{1y}G0f5EcjxRWsD#vMttrWdn zLzF~FLL+2_{6`|8;YE7EY8y;B-#U=4Dt01IBf zo%0)q{TWwl)!m%q+p#UNU&`)&la&=-89K)78oKffdC=G!MG*TsJx#RT|NJCFrGu9VB*5YR=~nw+uI8Vgzv%)J$}SMR z2ndE;L^=uyE79}nD{DB8yoN;UsVt@d*pdssO@^e>7q#-|i|aw%T@srWg0WUImn;|*|XMq)BP?Imsn!D^(T;}qVNWLF@>`~X=Pb68X zgQ!46bHG28-n>e!K`RKmt7M0cLPDO!#5w+2?6~tU*~I_A#3m>wGM(SM!w+Mh(7_DzRW8HeQ^@M2reBJQ-qEKRU+H7SBRB{Uyy$6-Vk&GlNe z48M>**VGI$@AXtL@=2~0{tYgPe_ zuyFrt3v6JE;nww0W0gKBZG7Z%dV&oddvv^z97{VnsqBeOIl9_b{0EKnJ{jd&$IDe> z$jXLlmi0;z&NI@}@dz=*lG66h97XOpc#S36& zRRxn4Q#bR-z|F4m=XoTI1(xGLm;>$Y_|G?iNtKEQVhoz}&bb4sBV?#dwR?;! z-}yN`XhpI&@hbGY!_o5_AB{G zL7plG@4U*Ha@3qXd&2s_#^##WWw^?{w{1~*WaJAb0>=K;8>+8$dc5IN^IKrtWLO8V zGvAKga`Co>=%(1+Ijud_(VUK;$@*&t)iIA^I2K%;;mxkm=)Tk>j_;F9*+1ykH8+1+eZKGoNUr!^Fq2?bojAB?;yBb|7q=omr^m zoWBh(-Il5{Xw2`?25DMnKOLTD0aX$rD?pz`dT80GXi<(_9Tr_Arl1|f)GYM2@5Y)B z4F?+59^A5Wd9=W5q)QfW4Q@8_rdmbT2oGZIG2*Jx+r@HJ@&)cCDNAoEot)l0>(7x= zHSz6f;rSXd#JoiMND*c_11SS!C}A_g7SX#ZgGcL>;{y``Fca8hx-r^Ofnl z1{kjrnj?f{xMtIzxm|^sE33Q)XIb z*F~=UX;H~ZVUvTW&ESw>V>=5dNiJVKo-i__=OY*mB-^zxdt5GBoo~iT?^}vDCI}P7 zTzii({4S~2Wp|XHE+|j&u+vFqDrv#UCa6@6Vr?-K7XIC#ZC9r#rL}`@u8;uq?u!29hgQV$nr#m&49=$H^vxzZ}!V3Z0`jd|?P*n+L-CXSODfk@z zC@1*kWghPD=K4F3i8xnrEypRjJU8w(nrX@2N?si!Ye*Tl1Pwzp1MER+{?eLzpf~W#mHo)-VMb9;1|jyT1~MJ|^v?Nm^YcE9ygLiAYRjrmRE_j_~y09#HSlIbEG23a&)`PjFltj06S)nc%J(+&>hLe%HX?R$0vE)Act7FuL&pT0w zmc?Kyc?o2|f!;P|`LhX$tD46Axv$4R;iaTpw2zF7++L50PF%I0u*Z>eBE>OJ&S;b zXcnJ5j>H-lP*D!5R9n?DbuD=-i%oq>$C(&mG&Rm)OCw`gfz5R(lO{K&xw@9eHa)w& z_h9JmrB4{ID<0*l};hS-5g8JGFeou zi&XEqScK0j0}{&Hby|DwVNSZ$ro)Dvkx|ON&3RPhXcdm5B*;XBKag`e2I&yVFG%Zl z4{`fC_}u~q(J1B-HS)%IQ|*&(%=Y25!>25c!22SiX&~iuihedI61D1pT~c@|v>EN@ z=#%-aH!;e{6jv2xq}aZ-^}q>~c+&!60D3d$JP?IaSPG1-srE}Vj%xxMJ|SqQ|BcxS z{>c9@L--%Zimt9~RIujZ%pL8rs-8{N2%B0)4ChyoRMwf;TB#`mm7>Wh*1gTp@twRp zD2}IvxGWm#mXVhw;&n?A9LT1p4=7;fPM$XWtHkvvh7L^hFrWx~;(&X!0T(&rG^CzV z(jX63Knau>T3w`0ErMH@a1huPmpg_Zt96kJ%HfY!=^Z=bV|wzuV)NAMYOo8QBY86U zu;|cOykRo*Np2yx`)mD*K8}Dye^+TH2=tf0VheOBX=Surb2L~=yGYp}H*B=1*}yc# z#)3hJ?%LC=IRKO_@kcd^BZ5MRw=%lXkTdB>20{b7HtuYdo?o;;={{nKX)T`#Li z8pHtzxfmNSNK`s#v^Vo1hDB4S4i9Ke&VQXv9Gi0k-(nDk#$>OgRrE!FDXI?&35rb@ zkq(jR!r5VfS0T)5rwN+S(Dco%%=?QJW+P_bP+B_ledIjZUF>}ye<(qNS~t3P^uHni z=@A3hL(O>UT!}u-*S17!HsReZHY{x%G@{aDF~{Cawr6l+Cob~4Rp#aM)yi)UEYkKD{L!iHkDV6{Du5)gl3Qev zA$#iw9rN4Q;I=$PHcYRf&$~cf+X(97@-F!8EF<<_RJq+lESSvI0lNZwQ|%7-d%6o( z$bdkyUr(`H&ElQ2j{>HmQd#0-J57o0?)g2OfM8#R$3#cXPU5^2Q{#=+iW!6huFJ9Rxrx}= zT}Sv)j|bnpIn5lR`8hMs9s&lkyWMz79@}O;hn_c`s8Zxy=gs}FD4;=lB>u7!Qo>e* z7y9i_XK67^75W6dwI78uhu`350aLeCHSWtE3^N5BfDd)UihksOG#(cjy_-X^4!vCj zj$=5GMjF|rapB=31Gat^sotwO%v<;J4inNZD5ZGlzcfF1B({MJYc}wU^PAQKRlAlB_BJ+X^ z=3p%&GHgzw!G|Ff7~NKR`>$T<>Te{^e^bdG5I4mbt*ySWy(gBIrBfNs7^|fgez)3o zVJaUg-;)>~or#^1?~OE*sykw;92fct&%|@rdFCfi;|l zGa3?AfXoTSYqT@6E}9?3X+mOmhsDg(^XUR zOxtz%xidWK%LMu{JmIO6i&_4vg`{@AsN_N^LzdvCj*@`8z$~f7BI~-VT^md4$rJwL z(Z**c6AJ0|t$W`5>Btb|9)_ElnAPXqW(;nPw< zjyy~Y20H%k1@W~Nanyq5@;o-%Jhzo&VjE-gNGWU#fPVG!Op-BvQKMWQ%%Fndf-}|} z_M8r=iHSl(B+LD_iGo1g6MehDL0THoiY!uWoN~Wm3}~-PbD;j*J#m7Ce8B0emU_R~w12->d5}8xO6U7Z_%*)A({!+0%%{3mQ6wBgl(COiqEI-1?6x zJ2SIl%Jw7nZF}oS(&#&X2->qb(th zL^{#-GIk8UeBnBt2^V)TVqP~UzG;S1UDVU;wC4OlA@HG!r9g<+-V0O=dFJhKwQ7~T z;kd)%HY|ir$jLSz^}MBu+`J_x&AKR_Zvf;VO-pBpqMtBEaFjC(-Q%BuXlhsb-_k-b zPTd$<9GLvz4yceY87)rntKTQ~*5VPJ43P+dBteXIr|C7_$ZW0o0!dQ_so1nnBGt+T zm%?VSxa)>K#)EKpr&EU`+saXd=O1;Gaok2Z(o36t&2?h z^=>_Y2BR&>ju@r$kzR7ZV{v7uXu7&_?$ty}tpS0fW&#N56%B z59iV+$2g2~U(pgznZb4-tp+V>)>AzS%3e7~(rK>feVfZ7Z_?;ioPnDkQ)e6TQaRr0 zZ*}^FK_ka(<~m%rXUbest|9AjnTyZ+c^ZrA%F4>&x%lB%$U!kFl6-nuU>BrsRdopb zfDx(6DOByZnbFd@ITI~kQtUu8!tZNVI~6kZqihYL9vGY0dKQ@RA;sa7iE=A!0#oak zd7O7kDn{V*YuWY;>Mr*DvSV)w4$$-ZTRi zRic6Du@O*SqMMF6Gr&9iOf;~$^vD}1p|w?AW;_Bo-b0XY8@dw=OAKt zwsrJCm3sJ;-mpWU+x}s1i7RU@;+Se^_T?DY7XU7^vJ0ho1ASVS3P6rR=dUVwO>0v9 zM>iWHf|XO@vv1;|zE1f&nb=Ovuzo^JZmaKj+-$FA*I)fGtW&UdRx zN*J>A#yI0kj(EMG_PH8sN!hoFY%I)j+|k9d&oxBjo*`c)2zObwSwF!!7k82EpG91M zi8Ov0SJnR{+|10 z8UyOleD4QRVx@&PUEemi=cDNDK|PIKoSCKN<(Ndueyrv0cvebh=*rD$n#x=zNzM4C zPncUycFM?^9t`L^NL7cj_c+h6g8Xf9QkmBF{0feV30Hm}+$=vHc!Lz5S1_W?w~6tg?MRy7j*zV~ zV0|o@MctaA#}9G&;$e||UnLQP?&++ba0~PNIJu+#Ho-4w_D)ag)_hOO%+yxv#a-F} z^~n?gQE#wo2>e26Gidzabkodu)QpneKYofL;v+mp8FJUgP9g5(mLXN0Mbkv8o>fAS z%U!O*kG5It%O=!EZRoTb^7pp5595(sVJJt4M(rSNM%offuCL*c0?bgDZ@h}34Hey7 z814Tg7%nFra5cZ4lwR2hls-O_`a)T&oEkYEnyt}gvNA7P6q9OKWf8Jbf6*jU;X#xr zWmAN5R0!_@Ki1x}$n*6!w}Q~^ATWvDRyc)}tL4)nS<0}){2-S#Utuzpmv@c@M@cZZ z_n4(gAD#}C&6)GfnpS}KOfDrlX3wq;ZkH-wzlV^X1lbncwcjq*wCHw`HF9B2wKGo8 z%KFq=pDIR|pb{CZ_3G?(DYtIUeJ&b-?qWI(Nmki#HHl9E<49+jKnGvv@w&ILf6ep= zqip_r!jHap9e()O+rgSsRp9hmJpTkb3M#gWm2UQ2U8;!h6roo(%2UCDh3MdF>q3P{ zqa4*92?f~R<}Rc`a@ZpP(D$({JW2uUOT4-BWcBlAjz9E8uzpueIi*ZtU^(}yoj!K;Zb}e%cGwu#isCMQypcwcQW2E1AhOqtf{K({rL)|Cr0jwW-_V~g4WD~!rDA#D7S5rVCI0k(-e z(Rs>7*`NqX)W|{x3tlp?^iAQZGz^XA72VGJ6Nc?JVW_OvbsV9H94IoP;|NsKIM7Fs z4ME^w1gI!RZL3zBarp?7YouCZlr7fwuCEigD5MlI7 z>ykRPhaQ8sB*NtL3VR;pG{S1_#9djG5sW}+1-gG*=hQGQL{5Y?^86_le2S=cgsl;mQr`uU~eq) z-5YhEP}kMbTG+sG!_;ec)2-#6I(t?cY7d1!-Lsad(W}H=6Lq_PAR+cm?KZJrmH~ad zlueh{Vh{*bO8~0W@!TuQ!$lzXqqB*Wt8`jPB3W@vi@g*IFxBZKK5YkfB-Yqk#d=MB zt7<9zPC2Y2IQIBMXmtZp1n@@q;*O-8~|WHJjFreF=o04`L6^ z&odtvtZeL4A zNn$i7$UQN%M^Q7ro>Z1QM1vz;+Op*xL`I@1?#?@j@7Lwj5c#PZMWlI!>VPyS(B-N; zr)AbyATow)n?34j-^mL<2>3ExyC(E%B=XDW zHK-T^*L0jXgmMv?$`84LiwIS)$a-DHFF5t~pA#^`h~3}(+lUBR9E8E>@_1aEVEa$- zG+vxL(_(3$R#(*8u&X(v8ju;KfKvCH36mJG)`{S1Zw z;NTGY5Y~xh(R4jla`!!WAnou?<}2f`M4IR^K~5+VK_V#mc9$8aV%g#Us34-eefNy7 z`NZpapkk_Yj!L+v@N!3!U0pj~^yJQcNmIiAQD9m9b;nnJC4c;R{eN@rK~CnN(aJfn zNWtxjLYbygFz2oX6^PHhlq0)vsd zF}9N~U@l~AEunEKp;r3`;Pbz6D8*A(R!#1<3fX8@m|nu!%#Mi1w4rrEM@)LHfzNr- zblxfovyMDjIyW^Q#*{O&Xhz!MW7!op2rN}!?oLQ{)^S_SV>ab;epyD}DW;kfh z;F%FT7G63nGZ>`vuHftE@>*D9N-I-eKwRClb}ZnS3@?4}wIuy|QTLIZZdPei^Ec+c zKpji|Y|SZTkKfc_vL-dmt_TE{mK?5$PM}2b^ZaS^cMpT42Z+0EbgwxDN9@88r!qy- z*z;L9dLA^N#f_4@-341f`(<_>NrOD1U4yrBtX25#=Hdm%ZLLq$mWD;hm7|J6NoMZMoRaFD@#R!!}7`}+yR9FhXQ(;XF)mnUU>Q1 zw-bRC)$Nq0%Y-*ZSRZwsTrK#!g8l_B5qSR+dV~A_LYLYP?+tb6c!#%ng)tJ`(JvvJ z|Ba^`$$zvNNVWy`&v`gvnx+m{|noHVD*(sh<7c_=x`pDiDYJH4m3V8@EU+FQqOnuA+is zwPIUiulPN{Q#7u6X<=cc;ybxlK#WBoMH55VkpN5a+uv+TuW5q>Z*diW@}OEnL+yLx z(lpnSDJMwUA=>LvGv=K9PuYhQJnp%y$X^U9l#ECTRCd@oO>W7yXKHG2jBXVgVk4?Y zdaSAtCwi0V(PX?skJH&Xr{WIMDx;rk1`RFI9 z%m-Hp9a5#Lw{Pdhl=hk)&qm_+M22e43p^)H<(L_&pBX*!W5}YJxAlmjc4mz@d{_y5 z_r3ohSp1UqOPS4TVVYxogQBo{@qW9r_D+1AnVNG?fTN*z&o)|8sR3&%D-=i3laZ0y z=5*N(MM;yz6qy`#88xMycJR}|7ux#@ruS~hx~~ex7`EF`iHAw&)0iBpOu-{NqJd`# zG<}C|LHi=UfE-|3Ad*Po=yW$>uxf%pzfom?(MQ%i*MYkaDI(j-lK13%p@*h8%6dfw zS6xi;rRcbA>#&k*Y`M?88LhamwNgU5&8aU=#GK^(pJ^gHz4)sO|9CvE9L|4?`*4i+ zb^c%GX-CpNT!j{;3cNgrUs5^EWCDSjKED3U2(3iv-J3X3TDaPpGjX{5s~7~rYKqJg zkhwN(PFR`c!Cbak-?@^AX`&kDrO#NdWEIY;0gKaQcRN#nPUwr z-$_ruI$Gmv4*ce($4k4!EISkG(}{*M<5PrdXbf2kdURpn{>GEfTTMzIaZ`K1&RjYHN9VIicP ztN>t-aqIoF#goo zARtxhaKXW7RxZ24b6dPD(@GTUW{S1bOT=J2Q2Y8(9$zNRUR~O%C>80;rgwzg1E-A; zCUV@gTg)R0hEk47m4bqk{V#%l`{&6%jypY4mbE>m{rcdzVb*`*2>s7r_#;-1RoDJz zVS4l-E-9m}-1z&8@^%L?V|ngE`4K5AZ9RD!!?DeqSjVgQ)g~HTH7R*hHZYK7k8@qV z?KrAYN~Ny{HPx>FeP7AqE@^;AFc!tE8_4zU@@C-eA?4E2=F=edypjG~t%g}0w*~7Q z`@-80C?B|$RcfOsorM7C4y(ISGw|uGyk)$(t?Jz{Pd^%hGhHpr8S(ZGPZ9ca{l*I5 zD<)GBYA_%hDlYt$AU+=!e$r0*@^vMBC#`PtR zMI}_Rtk5ZMM-knkHzCGRJtvUeYKR(?4NenyhWCV2_w*$&5E zPd6$2#wNr%XKaiDK@-t?lZkr_0i~#!0Hr>bA(`udEN+#%3tX~{roQ)1rKYXkV8==@ z#;dVX_D(~wE9-SuLe$PvVc{oe)>MPbefZ)G;n3NJSUkecS2N?q&~}+b=HR!Mk~@XA zkb5WNu9uX>Q0yzZ?HSSDGeS)%N5b<3G`G!bMNV0Dz6H_{Py}rKwU5pM}g6R2cheN;9A;`beeTT<> zqL}1cGJ*h03{N~wEbdsWdQ`2eTzsEwD^>OAOABAwk3?pbC|sk!qP#tHHKw`~<>1&u z_e=ck{}XF}dvfY^N0GJ2Qghj~Z|*x&e}Z3^ZDL>)tRc*Bzm@|)nDEFWh=McDCZW?Y z1l|6xEF!?g_o(|haPdQM&F+WMl~+IZN1lI;u4;M8G#PxDyY%5e6NBEz;(qd_HwY;D zx=5+2gYkLB{D~zZj~s!8R5HwV-5fW@Hpbdo75jx<(ng*c14@I7Ipu7`*dN>!su1iIlxA!$L(Cjbr+!A<8+?r z(aZgAM(5g{8;!(__I^~p4rDPr1|DZDKC9*x;R2zpMq35|{L*|f%8(>uzM^DpKw4!+ z)1)r`78f-RQ$A(NrUo-+>J~5z*vLtH za_Ldt36Z-rq9JM zy|2JpJ2n~cro*qVvsabVJnc@hQ1v%sB5vNk`Gr$E^{==p2UeC4eZxK@4Iyk9HuwW*wMY;cx@g0+3_+x3(sT}efCmr$7QX*@ z`F|B`BOSM>w3Y2L{n+p^GL2o?Fyf6)o^zRphI4tkxUF{R7nP!ny10~7vE@hV^0RQv zwi<%n@K|Z**!)hn?b~o;R2UbQVR`7MlC@#DLnhcE@oICIjFxL^D~qa<(OzmQm#Y-7Xq|95KGu$pC^^fP=Y_0Wkn}B=OOg)NaG|AdMFXmc zXd@xYg2|Qn!C^jdQSme_0a28C5V+G(rdwvp**d(z$$JMA_uqwwuKiA+b^Or?L9JbVIgi&`oM_1X845#vrL- z%|DR#>OmefUq;QOycXSQ|DM|p?o}dsl=Y3a#ZDPbbI_+}&$un+SH7B7Z#TQ>oDy_F zJM80Wlm_c!O2f;9ZOX^A!35R`$ed8c;p3hEs>gUIWOoenX$#cNjrby;v%@g;SDo2% zU}ToXDP{h}KEp?~1eStqEZ!Iiy%wJ6#i*?F7MHfe(HuQgW>dzk2iJal!nUknh|}Qu zdJ)?toLJ$xLL6|M0Boc|O*^(_F691~E#AOYPMWEdKU|M-zwWj|Fzt?aqNIw+%vPfr z6X4GZI5!DR;UbrCNm%*jKFClffmz zy3L%Nm_*C7Nc*5^c{o4KX^Qu$Tl*KpSGgMy&?!mYBmM3MM>P8h{A|QbM~c{KiDE>3 ztr|}Na8DxbC+f&eo|U4z!-XzK48^tcJtbFDruMjCMvN+s-l8HlJ|!vGAW1Ty$xjq7nUR3PFP7?UD& z_3O|C$&?BTRF<?J&KWQm733zl z%JPy52b~4O=veQKP8Mp$y;`K8rOQG+TUJ*BE;VrA;a1jt0C0F)v+>M5b)}*!(1}Ni z%o*HZ5v*Qxz4_m+p#KJjc#NnNXXp9^sZI9FAwB;!Py};QBG|+~PN9o0NUuE2$s_9t zw^Nqknn>|HTl2k|!1G0JUa_T#mX}55OKZ%28FZzp>i0~Q^czB`c&ULZK*hZn$q!7~ z($jD;IKYLU1}W|O*kI*?AYY9Y<%%#AQC^%i&8 zjAyKQ{XtA~c_lp_(?=38!ITPYm?fR!W~>eC$@Rmk7p`yPcXhkLOr>Vz~(af+e!S~%ec9Ar9RiE4wABt7Ysm3Vh}Nw{xSRO z3l+rp&|Nim%}A6Wm<7M=+|1N!49+x?X_qE?viqizQr(!Fm!++oq4=__gf-@hLR&58 zZGWu+>OtV5G})y;p6~P|ozJpjesFw}qx?8=yxG|{!8Ykq>nkgGyy9f1=oZ2$OYXzV zZg|sIk^J7GD|5--1`0S%aF9p-30kZbb=$SYXH8tVda2Qj-A@f_=AS%5cEgF$@|}oo z#!M)6F>!%S^A)LhI+nIv{krWIlBA&XE6&u1bHmkEPD~T^gHtd*%!Bn|%Q>m04?*Jbji9{C&ij!yzqHjVRRqv+=uzaYTZ* zI^k$D-yq;N-7*k5Rsl&)Ml4&VgzT#^WYuAGy|{v($(dLxX=#|m36mwFhov$aMacAS z(0Fmdg@NX$P5yWW!nnehHpE#9Wij2L#$HM&ok?tOHZV3eYEYVd>wYk&F8oZ3F#*Gx z@aX@<$xrLXhh{&K4Ufgi{|iw^hDwOj)^23yR)gGBZ+fJ&OqO}yP?m!~>#tfN8#O5r zALlw2v*TL#-h8v-*poPjt~_S&JY6>o?*YGDy*0ExUH%vi`0(R8c1OP_nwqe->Z4f+ z6q*U;H1hfQ5%fJX-M(_e(M{Qm$|liE@FTGRANOMJ`#dkcTYGKO;>%_3Y*Xs_0DO^9 zzbqd|d2xp~5mhwQlrZGBd1Q@Acw$})D=ffdKqfGf2^lX6b)ho2q|daku}tJueG#vj?ACm z@;N83bhGqUQ$jR0wNqk#M!3UW?VJV?!nt0M`@)G+`MFjw_Zr;l4ZHUDfgjK2`=2-4 z(NMk(MX=&BME#KOkk@7B6_B9pLdc|Ka*Xqiy$+6z^mxumyHQFDB~*-Ur&uY+L#gG# ztL%#Ra~*NS2{hZMr}_={=^%tGD+8L?z=}^c#%5D=5a}FU_J1_*Sx5bN`j(U3Y}M*N z8mU{3I#aHsXXJ^@DRBVsUBTY0&8|H^QG_-{1UnK2Wf%d;9!*zVeQ? zH@*J8l9NcMjn>4c12kBm*ALd~Gs^eN|c(b+X0F$5* zbL72sa7k`nFwCv|`Iy{TT_IGq_@%4Cx40~?re+qV!m^vy+%s#T)`<#z>z*|mZCI%duTOV1Ax0J1yEk45?4SIrB@)M55`W^b-ZRE%-e{))WgzdOEwC#4i(zF`)DA=1 zPKno}tX1sUvB8YNRH0|$s)_c$1ygEOij$lydr|s7oLO*fDV4exw=LkpAyrO$NB+aM z@BTWeTR$B{M0SGR+a~@ljyHG7D!$xOudc=+`g&~d7CV8^Xk*$e$@-Psb3HP?Po;ZD zdGP)v4mVYfe$O`r5!tlbrq93Dnzc*0OTSDrPAMP~0KLgkAdsPeHCv-u$M^B-zXIXr zKL+`eSb-l)_l=50Z2Zz?Yke3pqGP+CIZHMT5AJ<}o-a@!x53a|cXtg>$a>ZqEb0_& z8)kvnzSzM~B_*}WaA>bRZ4ntxHN3Yhib9Ec zBY(c4Py?vWm}ms9GrpSva}>N@@nAd8Cc;Yjw3*M%L62v&A>)h>O$4r}83^k^){$eA z445^*I>0DbK$PCUs=1xM$a-G#*4wnh2FhhrGAG$G02qmkAWo;0uAOm~;bdHH0K*9- z^th)jkqOUO&S*V|=-LqU;t+pM^7>pRYXW{E-@ z(D zl;bEv-U*PEztmZy`1y__!rXci9!#oPN#N}Jz+WIwO(F}9CP9tLa#qv}nlhRTM1PZ2 z6(vj6G0FG&c*MQCLWpC3opvV;AwB%&q0WrEH7z_HznE+t*TJm&DgNi|@y`_D|7wBb zScT%a@*HJLa!Kty&q&48%&)1D~4j+Va0;RNefa1dzuvr$$9yee6!6bfeYB6BTp~cgToa%qId=-nvUQC-n zm#{_Av?>jNUs{~zDehp8M-yLsA+jg=UzC=9exo9{T`F;dv69$-p%_i_m%4rkMKBRy z;Jz@Y=@gxOYi^Smt8Jr$|MJj^G=l*)$y$1wuK6AeOop$Lw4{@s{+imrtfH-?HJ>-p zgkLA?1!xgtT zarOJ_Hvw?%&j#am1vPdaPg;fZ4n$B@6w4~&Z|;|MuLU%i$dIJGl@f0vm}N(G7w9Ol{yb|Cj&6V@NqVH&e%75Yl4~VR>AUTo z!&B#iyF`Sz&QfqBZ=nd!P#g6kf0HA&=YQVO4-%is-{G_kRRj|lT0_m90?0lJgqV6z zs!3h8HYQi^z^RD+{u#i>=ET>dy0v&(=0$RqzcgrYHXbh5cyWGVFam(jgxvWUm`t9# zK|iyeuNt*;{7har*5(H(^V9NGLG<{SigNyPvVoAt-F>LE$Ic)&>aX+j$`W0+`hM-^ z^BC@@w#>EDvL#(s#nAv*sOC3VEunS@a5XQpMYs4Do9;x!Dt(TD`dat3-ah4?*r(1t36jg5JEa77&;gd->ye0qH>jDKqUo0>QizHZb&E>ESt z<+tHi7d?Tm3Y0>8g5KN6D(sX_#v3RQfV!{qWjMXX_nc^US{r5uuuHrBA+@M$c>$&0 z0WpV8Cy(z5CAd$tLx;8{U3iNc*AH_Yw)jRrJ@%QHMxVquZjsAOwd#9n!*&+kggEGN z?|~{!Mc7yZonFYbDGQTb2<0ey-g?>RD8apBVVoRqAQ%+>ylcV=d< zYD;8CiIfRv&ey6r4$VA68SCpnE>fjs?PJR=UFX6De=8Y)fNlUTK{$TKio-|vL&EH#so)e;yI^2-c`|3*}hrAyk)#ErxQ|PbF;w% zkwZQb`Rt({iwDwfcvV552u0a_5OR|%A_D+yihc4Hu+;JQBqzvrqITkjZa(;{ zoBsLuzXejmJSh!p9IKo)af=@+?(9mOv^@PzMoy2h08N@2+$CMn(-kqQj_-{^638ck(hV z_I!9&JMI@FkIO9&-wAKkfAxdp7_zWjd&E5x{po05%T!WEcTJqD;n_16ZWmx5GnVw6 z{~pO{w@tPpWye4p4NNa`6oh^Bk@U;HP~cx(aE{iIR6=nyBVKhvPyp=25CVl`?VYy7MJz-TDAIb zv0{Bjw^yt<^)R=(k_Jo(wKwn4XIqv6znhe^ZF zot~v$$%Gd)tt%>EJD#!4NX8KjjgZOGj(2>_bjA5-!2)(a_fml+rm()p+;8A{}|CEeobm_7|*98_Y92piuJVP?DT1fqW z;Y>Qse(9T%i(EV93QleK1gbUdS3D(_alOtTij2@ikWvy2O5H{~Swp7USk0olfvs0}*5&-JYUh~Jn*cvK`d-Mcg`m@XeP z)0Y|z3h=3@E@9#-&^1mO_PrClx-{yrB38m3h{@^e3md$bM#nR!ofl;6@g~+VDd1$8(jS)VyZ6R!dui6RGz*r?90LtWK+`6 zL025UCjNw`h+0X$(2pi%AQ0T8Ch@Fr-C4R5w{l)){F2tT$q^IqkV;OSi1s-zn&gvq z4Qd)8M8Rsh-k}jNKe`0fK0YugyCb=I6!JaQgJHkImG}LIe1tL~=CW(Hk8dK03za&; zHr5GZY{(V=6lx)X#ZP{=5Bh-FyN!ze4VOFpQiuAZ;GD;5BiQTur^%8;UX_3}=z>`7 z9m2lB*u=oy`ob13mdxDphw(+!VeRb@{-V^vpc^q|_5!MK(?h5rzB?XA-Iz}!k z%c~rQ`@V;BAfMOW{~ z@=Cg=bz38o?+hmNj$J)*Cfu#Vgky^VE~jJ8Hyv5!@S9cAC&FU_F9L z?$rLIx3B9)$9%JZQeh$V@QZoS^h~NU zV};h;yka1>(9dKhX!Mm!J~^I-YGofxw4!E2d{&Rj_-eY#si(@Gzng6BE2h)<(tQRK zhU;s^a(T95ilW{$<%9xWHWfFPs@6;@*Cf!_8 z_{^x7+JL#`v1AF{&2~$jgBF12FH+sLoLW{m>#@!{NbTw0PTEjijn}|y?3LAVi$O+i zx2q4OM4aX3E!D+@?W+6x`$>PvO#bsS^;3bt=qCrf2S*<{UZ40$SoG>Y%!B^@*MEYe zhW-z!7oo>$8b^C($}3e)cQZU@_fv>zW-!)yS;JSPYSEO53loGcc}7#xoJkebn*qwS z=$9!dE1ACRW-MQ8xFAr+lB)RYTXH#KP@F7D0I*0Uugn)tJbJrA(1K&G zzRZ_;T10n2oV!*+#MZ~g`8TN$9C2@;{{zx*BEEg zmve(B2CZyEf>@mNe^XlW$G#iSI!$amAVDFiXU-lRmALZMjtqalQe5Su7xnHBbTr;- zyjnT);_lW~))OP`a4b>%^xAko}f1NRP zx$?<{b20rwJqnQJe>I+mXq-G46KG`of<850mcvxZBF@ywOlo|JRD}jTQ&}@mywd$q zj#h{#(wsX;uExpFUm$H4{QenA#~=PJ;q(`?KR^0!WV(+^T|Z5q$96mZD^J6lI6#!q zt#m*rr+tIcJW*yo1-~4^5w!PfmxJP_NOtYFIP+KCnQ>8reh17Az1OOrOy8gYl(*e_ zBwF9TaXhLwH_IimkO}UsQ=wtkkvRxF=S2xO=}+#$9{7O;HKR81uY0su;VUbk0)Bi8 zoDb5W2j&-l_Q71Rtij(Hk)LcAD>?AEn+@Y=Ovoxk6h_U&*FtdI1@#r@)XNXTaV(g8 zpX(e$AwqkkGD9PNA~6wO@3o8MfBn&zz3AFpl@DW2l=$9^ps^zk5%EUv3hURCHjNuB+{+b~+& z9`6v_GunTvKHKO4G+N2ueeV7#=k6AMa#%?77`Eh4>!J1ZS%c01c;Lmr0 zsPVzFnaYDTc)G79vS>RmCL{*-zMRNY1TL9{w`>b)b<`P%?3% z-T@yNUWpH06XAfku0S-534$X6OSR_7bIPgryFbMhCkA*B9vT{@R>m^dl3dF{E=cN& zY|9Ow7_K~$kQmDx)O_GPr6LntFm^Nf!yW%vXYMDr4; zZ7c1a_$b0{>R)5EqEV6kcC_Li%k|`zpsW4S-G~AmH;=^6&ME)PN_Lw0gL_^bG^9;3 ze-Dugk*z?fMvDo|9sy1d7=&^tvPRP5&KFh^0@7FuENY<7PewThq*npbHgzn*KY64O z^8NHoqzK{wuCuK#EMCAaO*2NsHC!J0c1=8jg)NUd)E1OhWJ^Dx>4vy-#n?{XbaO;5 z*_$}gDb`a|Ht2J$ocARTw6%7=W3p zh<1VkP;)oN;`8j>$*_TyZ_f5nw-!K2+mpe>B_g9H)L`yge#@GaP=7xe-cxNHm|PqJwb(&K0?nMmf;G$`6l?=Ce+0J?c=#q<>j}imY}(8 z@z;q0MR}+We**ej|4=DYk1JA}-#b{UVjjGy0|_cjdB?kf9rV3g`5?kswP54z%S>7e zJVmG9;Wg#AbX`>1Y5wajWSDD8M4p#A#ELCiXOs*3&SRcc%VFZbPiJ2QKT!Yj9P#n< zo_us%*^vd}=Cf%^21z~BLNB;w!a^4NR2Beol)kh`IQ5*OFh7Ayf0i#i;rPzBz(?iY z>Wbnfe)^ReW!{W~a_NMYSd5s@8*f6NW;E8;6pO_|qw6uB?hNgMSt1rsAzfUtMfGNI ze9n^BtbR6Y3%fFxeEWA`n4ZC-ln0}b~y(8463o%*ipW^IYJGUv{K7BbWWx| zc;M6^1cwpO{xlF(!;U7~6jW;5L_X1*c{?y?P1B`9`{T9P=`Mc@UX_BVBQWadi3RI! zq`R136h1}iku^k1=Sa{rHY{%N{uk#J)F?;NNqW$u`Wc{XLfQ{(Q&G;>5p^^LYoHf$PpFNV}>l{h^= z>m4Ezc_^e5btZjx9VaJ)A&|7dY&ooyg%VE%q;~fsvXkEA-W$KNut85{&pTnBrNbLC z+c?%b(4cg&te!gUc5{i*jH#h(G*S)gH@HqWbRm50a1E>XPM#drv9E8 z{s|_U#r}#m0DH^Qrvjt|Ez|x~Q0L@Y$^s-s&keN`?*?VPzf5gryB9DfW8@#%3i3Ts zSlw&;JQv$rknAqr;q$ifcRKrh1eWWOZ`_Pjo}BQ_ZN2_cf3CO*`?22?2ZV|4yqbv< zq-S1C(Mhk25Vm%zpbkWJq4;@1udu_jYXlE}8#HXWp$%Q+@b+D({E1RnQqjzc_BatcXe4l%R`%X^{05rtt*+iFjrJLKN4c*AHIjLkQpXm=(PFb_ka| zVcV|LJh?3GB2Wp%QZMkozesTsI00ux20uN5u^qkYs z=QHxUxzI>l%tG}nHeb;&Gm*PO0mqUqH(*YQeX>mXH7Z%6Y`KbTTLE!g4+Bd zEZFAB>pOdhQMH4KwGq)Dmzo+xcY&i#kq;m4-lj@wUJi&HIUoD}y=iGi2vr1zV6-3I z>E)711U6}{V8onxlH84r30x^!PHZt!V_dB+@Ib38t75NeJhxW&&DpA9<^JIfPJ57U zTmSG!N$(9~XsN8LHe_BKL4>GR=P3Wjqzttz}xz(TN8 z=kelJ6VjkK1HjueACHW2mI_~qXOMhHwN%@w>P-2Zd9HbN+q!`sba6&_IiN3Q} z_cxo|xxe7{su4YycvHRJviChWc8};C=x|h+wmi@$v9J&)f)Sf|Eq~5I27;+Tc#4!+ z=Lcmt)-L0vECXzV&}Q`9{@X?_3{9d~twuYO<(X1{?_nLS!7z{-UxCbW#zi16HRIsP zk&{%r!nGT=0Q6nN`_?4m0f$_{TR-e|U0TC%-6KoQ9}67XvlpqTZ}B%9$?jL;XjAx0 z4gR>De87{%r!(H}pQ5)f3mTiE>>f*B&bo7uz?z7DMElo>_%|c+7(22rxt=}5rO5X> zV)DH8kZYyzU3ge<)@uhA3+XP+@JFgM0DcLXBVZ2m(Zr^8uj5~?Qx1>OabvGXOY0gQ z8IlXI&3D*6fkM|xld7{xe zNkfC2r-(17bFGz-)2zwH5aAWhj6Eq)-Rvv*UxX79)B=;o9ZgC=<-r4cyj2f*wSsV~ z@h@hOh%#^It67@GvI>#uD;cIX<~mS`^FVg0(t_8EnmUgRn@jb%Oi6BDFWz|Xmq55P z0ZdJ+!=k|C9q`UO$cwAtk(FBjO%TE_%Bx+?==6Dop3)EF3Y3S85cLa(LAW(e;6R zR8ClSd*90^AN(cz;xaPwPEAK#3#@TCR);E~ zQBU$T-*ppCK&|KG43`x3u|Wkyz!0GUEsc=QnUENWxHk}s&!*%Xabm)6$u;iA))ZAX z$1P{;px$4|#n(P@d#_L&{fHRtA>rm^=ucVUGS_+Y+h9BB2J+(>3xE1sg;aAZfx<+t zMkH6BZhE3+i|@e}r9okC(EXFJjfg3_kh{X)W`!$S3uZv02d5h5t3RkyTEjXyJCDwBRI22_6p)%{$lJxeznaou7B_Qi%_|O|Vc`lC(^p~!+ zyP!8PHz?$boacJV*SX$mudDxx;v<8he<>dSWRHHFvUuEVf=S-oKSYQsIRnC&Hz%{V zd_$i0aC`_FOY=cOGo}|)F6S2BcOrj9%BRtXue`%G8(Pp` zn&a(W-d*yx_s@rkR_e#|pARD8bncf=RnUjxwX$1egebEdQfA$$pJT#iCTkq@gPOf+ zKb{>#U}%&X>m%YtMQ?>vy{otQBpE>vzU2|3>-UiZ*;@q?H4r}v3C1ETsICO+y3P{@ovf}>lgW93N(S|8z*LFCfS{l=Gz?~p=@}MEmJu)@ z1EZoMFL1vcmgzMtu`+Zx?30aN#W)A5_3rW5iwm}<7sy-dmIi(G0F`$3#l%b z-Wx6%ThhLhUWe}_&ORCAr#Qn~l5Y<$zkJ7yOxB3?%Lr86MR=IU?4IHpyqf@ZXfbuG zA(NT8u-}fBKa#Hou|p|XnMIeu@4&t5zqYmqk9_d=tYWflU?TWz+Ar*+J&d#k3hk6* z@!OS(S!XL*X}WKrtL4c(Ero>jEFQGi28W}etuN=WQr!3m-wmKMGj+t^Z-vQ;eYz1Hp%ROC)?}Kie3z)YSs}&5P0;KM$nsiY zQFg?HF0+~l-zAdsn1F}KLdQ}#soW}oKq!h{Bo0iQe8UpJwRhTvGeOH?%z*343b!TS z%lL-KEe%^Qc41C17~qF=7$uSE&ey6_TV&vj?#0u&Xq{J~`8Ug)VE2?W1+^{6elN?H*^l#3tyiJ)^9XaFELsZ6TZZ@Cp{9L zg8|vv_X#ObNnZi@IZqi^Z~B>-O+k&9As_weSgqmoTPo2PzFJJIO)OrTxqE?EO(y%D z&F^$0yx(uoX1-s0;`i-@V_1O_!6K#m#iw9*?Rjj$0#V+)s=GqVf?&Qc4J2hNz8CAr zH~KZ%>0NRBh_E3sM$Qqof4Y3sS9W0ZQwAp)s*WhDO%;^VmeLi-&UKSK5iS%jeg?%c%A^CP*HI%H6sa`JGKpyxJ!qh zZviUvlApbX4GIp$BG6&ZtTO(k&SA>3$uVwyOiQfs4Leg#;hV`2Z$UxhBERgY>X=ux zTq~0Hu7swt>Jn%FH1OqAca+^)seeX%?;seH&cQwf_;_IK=T}Yle#o&l7dzQbuvJa? zMcYk|Qc6;88p-J^dhqxm|26rEgu&&{5#;?6#*QEC8N7vf-|>%r_)WC z`xb*J&M+#uYZE-#0ypyxa&ctbEF1~FE1Sa@uHj^Vb zp9vPx(Q}_KxX;!7p@wWIw>EB8W3R9fvSpp&CMp9w+?6p5SOEQNtpDTL@rnEY>uSfD zHz(G&9=%IO+6=j^#VRICE*?4DW4*b>YOi>YWC2>5Hd`R#Xox>~kCJO3jD){w0;*t^-uv$tYCL05L&kZm8)%X^_kzBPL;q8h zTcuVo2#P9#*GB2`kF)szzJ&6Jt?o2`ncFm9v}vONW6{Blb)*ziXfe*t$aBn?AHSfh zl0Y`fhKb8wH?}l=jIz)h{T$}kOcj6#MgxRQlYUvg*B;I0XsNJ>4d7RR6Ig9DQOjDo z!}Y~U?_VH%1sC2BXVS)H(0rW@Cqm2{w>BL|(Ac46KX$Lw zuenDDRH`z!-<(!g$paJN74Hp)Awuyw&lUDmvAR9P|A1Zo|9^K-7FT+Z8-)+T%q*Hu zFe34*l!s3oO(A^+g%S~+ckCkThYca(8g^O>b1+#pq*gK?Ol8fy=Bw}LA7vIc{X%!U zS^e7*Y@OIJSIQKTvuUKL^*qH?NJqYot876wqsb5Yx zxRG5pm+=kc0cZlUrX`%6q17`hCiKIO8Kl^gs-!x zjK|Bdr@J4vcSgy1)}xhdHt-yHIR8}%(!IwGMp zm15`g74FDnakIM^<5LNaS6c%%-`;w4R0pb)t?2d_PALH%xez(WJ)^-kcufJ zqdf2)rD@nF1z;@9vqDOU41*qt>8WiC2nh18#YWEm3X798&r$TVORT$Tt@|O@&S)`E zA}nPQVeM0JdZ>1AI4Fg+ke0-&?9Y*3415A#R&>SbElUGYPb`B&XvlI8@SJpM21?d4_D{rBty3cvM z(hx+5z?DohV@8dF=lthT!Obd<+yGa^uF)q=ZQuEw4jM)lTVjW$W+_ZYDwmXXI@B#y z>aXuQXoUI9#@?AX9{484ERS6UN@j6F(?!AqsjX69Dy+5TPm(+(UQV^3$Rct0sn@=8>1us1Lo#$B;j zp{2%HU#tb^`-70KYGt=_ZZji+tAc5AYULGaKj`OHCawpZb##=%Ko)319xlt_D8c2{8XKbt;sJJ7d(pbo=^ceC}<_^ML}lo3!Z_x}U%2 zDycwnal9`HTcjB4zE_xkzGa>GPKNW-f0MHx-(EOT%HP74HsSWs!B%d>GcDyC;}z+G zYV52j>uUtstd_vanlB*hVcUbW+mCB_?z)On%Z;o5DDBnxOvWvwvq>uG#_9L$kxql} zM85*U_(M3%!RB3{@bZgVH-HJrH`6s&uIeD1umS_V1kcUcBes``q`AbHFBP~V*X1yba)s7n;PhO0v#9T zta#CRgOYtXGxPhC@ySZsJpW1t%4|~OljQ+obm37AQKpc~D)AG_lCkK~tFxM<@wJhH z+hIW|T{4n_&ZMhH9J=WV-xksl`NG#4HueoNr@qkfY7W5;Hw^BVP z2VbEN?miR5u7GncdQA3_4LIa5LU}>0N1o2=wr5xdgEfYV+7c5Nk7Nh(1d+17{{FjA z*V5rnDH>_4)ruDbDhwK?Qz9PU#nlk!WIeGHn2L!;-!{+J_7a+ZLVl*6=IW`QqAQ9%`_1g{D3yP?$TlqGeZ9T;e5B!d z<>UWf4<|DqGY0jY&-lXC|J*xRCHqYU8Y}@9K;GobgGN1CWQ<_fKy=D6Y2o|Bgq*1_ z*}2p8v8P*|N@Zhe)t*v#8d{(i*WM%XmXP4sm1I!k2?%)C;e`B2qnF{1>whjX!R_?= zK)5Myq^-IH3jV4718lXmuj@H;D3o^b~r%RMD_RJZc{V&HJZG9UwEP~4?Z^Q`XPSX1oaY|HtX-)wDXu3j?> zi9YsJd=SY^MVr~k2R<#{)B6r+A**d&Z6cG_CR5O8a3_0FQa*erYRc!wup*CK4PN!J z)or-Rn;}H;`{eXw)(pi2NVRoo`V&xy^%6`#;<8M7JWBT7<)?J=w`wJXawK_U)}#W0 zZVFW@H87Nn@fLY8)2oDxpA5+1u*En?d2Up}H@;QCQEmr(-o9?qfIxDCJsW3v#o(-b#}OfF91;&2*P3cHx(3h+Z-0bU za%p2<(~-p9n*IVxWzF8Ko>tm_)TqQoeZ9A#WWKw%T&tKKg+Fj@X{Bm*JNQFeIl2Eawrqjk` zXU)puDd`dTm~4E(5KlpEL34T9@=e;xkJ>H7Cc`>>lgLvXv%3?NM1s1hUt^|^K0}F~ z7(ikl6}<|j%AJcs*k*y`%C%%a5lNrw`Us}wz2hBE7Cmxq^o~ExPP0I#CD~aYmJMTRZpZZag`%V$)h;DW9N>P7@pCdys4zQ+H$y`@|Z}c`viY>lq%( z(+~ch2{VKz?GU=GE2Q}8bLnymNC0fAOj};>7ZarI;>cYU3lr{&!koM9h(dvGzZIt5 z0U_cuO8x9%0KFsFZ-;GAY*lM%tnO&>Ms<%vUWr?Lo!Q*yAj$Sat8t_=!5WY}2kpq% z=i5x;s!!iSuU*5=uim*Tr?28>2;G?I$pE2phD#qEzz{4X{7Sv47Je88ri>;~b)Sb7 zJ9K3d%Rar8N8TP|L7KL9X!r2>Wd>f)b{OO!jP7ozSwqkL#@r6Q%p_|*O7G*sKYdP= zs>|diJvMB$w!vl7vCWsJ)1I63dlyZ|GDZVx)b;cHB)|}YdM+X^31wAp$q4vnX7!V% z_?pkheh@=3rb!Pkn1@)sWofBR5ML>e2IoyeVpK8wx<-2K85TBk8YZ1zAoTInTFX62 z#TOmVvj-qi_0r6#cY0z@?k%_yoEnGtsrDQv1;oO{bS)y*xC?N{OYpn$ACkc6XY5M1 z$t#odSyq2~bacXEL#ikjL*oDy$ibBn}C`90ot&-nmf15k$h_gSLF9&y|L-aer14%kK{}k@ORQ zns}#;W5}C`)tYrVYqT50iniLA1m(VSmay0AGf4@b@vu$*+B+$ys1w8d0R3P7Knlxpy*VieK1$OoOk-L>y3_|HdszQ@{AB;26_7!lqnmu@*7e+vu^8anhz8_Na?WM{JFU-+_P9snp+Ju(FGJt@&Qg zLex_{nmF6-<*Ay*nBv@NxbX#vG@Y>3%d_D58%s&xfB z5a5ioUH?d+y9VF2ZXCX%wxvS01Hy?F-sp_OOHo@1>DJSFRDKo~-v$U~_m=et-iN3J zpw7E8YA4JuI9Dusj@k-!Hw%S{K}0u6xsk9-m3rMc7AGuzBu8$7+=;bCIj1JwLRGi$ z3YL_%^iYw)@Yx=^^v0wz%h2dSMv(z=g>VjAV`g_%taC8GT|>9=tkR@#Pf1w2w2xD6 zk6^cTvG5(ukf7p=((_u`u({smMz)_cwDc;ECE5EVr1bk{`3kX9O)=(W)vT2{W;#i| z-dUY>2jD>Ka>9Y0F%A|quCVM5{(^DkrOGawxkqM{OLjE+Q>nIYLEv#RR&q_(QeV>; zmc}V;i?G^AJ|<36+k}KByGhfJ@@7U~(XuBaa?p57jZ91r3k=Sr-B?69iHd5bP`tB^ z7QgzJ^|SjJL)I{o7rWN)%ovdiT7@cDNG;JHq@|`)hlfpFrRk*NvS<&lyX1 zo-tin$*xA*0&O#v^bj%1bAP9H3U=MJ=x{ko~ zvK`r55_3{s`;tCye5=HQX|A7IoMg>#`H0@Fbw|;!(CPuNU~hK&TYv2~jiK;W%O^JI z@M?OWfm#mv_qI0C=Vxxg)a7slzpD{Jh9v?W- zu<4}VC93Y&LayVb5-{+AQw0UjkZ)QE?+1fv=S(yTCz6f(3RuHlbO%kU9dd%VGE$sq)(OYCDG7LbSATjmi zVj{aI6197#@!y9Xt;K2J+OJZ=->&8bMy7p_^xdM}i~KY2KyQOD&_b_tWYerFJ48_! zKl_a{?FWA;cdFEm!Qkydwn3K0gjcbairbMFql1A3jt#ZB_qdbt^mU9%s-&&G>cZ?l zeSxLdsr?e_kDqk~e`=}HD#`r89VQIzCONNj?k;K8`fPuD$Wtj)j zgUWS*y4?8fw-K2Sz~eR3!|FZgO1Iu*6kKe({b`+PYRhIeMpEsqRxCkohQ%hpBQ9>@ z0S!au+v);?5`}RQrTnK<&lnOID?DE9^r&7SI!})tf(mP$7Q=i7NfZr)F~#F?9JJ@) z@Silg-!svBGy2{ z0~#wdfR88g8{f^Dh4A>8N6n%HZH{cHHAjMyIIoTWte#|36;%Ui4Hi!#5w4xXfA4g> z{>AzJXEVFWYFtA~V;5(4I_BOniwhl5?pvEmFRl39xx zZr{HmJUL^B?v8JF*32|OmjlYvAl1@p!F$hK@USTlOh^(F*K*Rl%AraqrU`3HEps{zaELHw0xJNQ$5 zHk=)}O{#`pmtVFBFqps|9?(INPLt_*r)MvnBJ54pm&ul&Lba@`rJ zBi9zZpKiY-lRgKK$^BV*$05fPjULUt%$>Q;&|*612}>J3R ztG38`de{^F!pHhbwVV}vE%Pa4s8(2G`b%R2wyGZC&Z^DZY##hWSCaLYcQkyD{W#Lz zeK(0Qz|!f3E@_3v#bw{RBL8=%d(*!3O_pr+4M{>x#ba3!|KGQg@H;96I2=L2hp^V^ zEejTb!AwN0UJhV;dx!l0(MF_NvuuCD%Iyw6-nlNwc=6cB?1p&RvZk}uvLehvW^_^0 zKEf2`@7@VDARg@r&h`6zUHMP>j~D7?M&61o3@+@)zE-L0alD0omt}NrgDYqBN28zo z$DD}+|HY5l-^V~RJ|$k8$Bv(5K&HpIN zsfK1bD}iH85F zk@IzhHJKm6j>;^NCN2)8Vpem~3@#jz{3!IrgeSmA^G!s!U`ak^%DkRd8BAAL5Olfq zV(;!C8W*pXusR;`p0+V@jAM3lV!#{DY0 z#5?H+<%O4yESOYP$b#CnVhZMd|3BA;zdWz~_jm=I4qv{mUsv*qa#L}Ys_JFRQEI%D z_WOH0mXQvIUam?rmTD>u&H5rp1u2e0Zl!U6n$H0%tSq%FcHv!S(vLYdtY7rX5xz^p zb(ycV_CM5dX-IUschKk=yi4HvLR8^&77~07F8ed^)x0_X&>lR0OcBA*Dv(f(Y z#>+265;(ZfTsHn33mS?fdcXwbIp1&YXW6H|lqF4?6*u|WYi#18lXBmsEWv`p8IyCF zSnp8{x_iEMkG}jqLI~Ea+1Iw(u5dxs9SY z*Os2=Ov6~Blx)L^TZ&j_+D}bmv?;*PYNIBdUqiSATq)yEl4Fi&vIeMz+9dq-8h!1r z?pj@s!Q|}$haX)T8rUTRiI!3pH50a45;V2gh`n6RtzKgBtFU@ad4_1L!tL!SH9-d% z*B9?*D6wa{mw(dC_i4#x=?6ilzdTz&JEsUx9i;gGpt-K%bGZj2RDS(gypXg7b50d* zrciA&gnxNuGXq#g#vyH+`L0X63=knpDVS`pAbNZ3LKo}`Dnhji9UHJ}Vz6}G z{$%z-KMZ6gcv(c|nqFmr>4YEGx_SLOxVP3x@fcBQ8<@US?4=vzDLyOxrcvYz3@F@$ z&@yE>Q_@H}5=-D;9oenhUY!Gc1MY5Mt*nh2zy74z;Gan2osh6jrn-yRODzngYsQ)y zJ}c@>?5blO7^@I3rA5p-Tt*3Kxvm_*rlS1y^HoEd<=5~lLC*XYin}~PrfVMC&rExWVUX2&dKHMDuw0X7v9z<`Ih3%% zZVE&|TJ=ZUDetT^W`95Fojs+;6wL!gAA0xQ@G#G~)YWXfSte=|)~0If>-AeV*L!XI zn!2%&DMM0e3ZV#RE&YMr>(mm6s{j1kWYcf|uyDLo^tZ{TSE7G!XGinan_^xq zO$_F3NX77oZEE0G4Jdt$0F<#vLvPfU5nsK;KD;-sUT`k1Hwg3nX6IgI5cNGglMEhpnzaC0({9jk}#h5wzA**|p#^(OsyzG-*=!PM(dvp@dp z5BF;b1^DLH3l)6m)IJ7$CNtRCMqFHpKIFkJ=4 z8C$QZT7R)a!4h@H%oilN&yd*x}sd=QRjusvT4z7vk3P z7P?j}#Z{dol$mg*0M;&id+v?%G@B*bVT{qR{ovKt9WCS}TF2;7kG&||bU9|Nrnrk^ z2s=^9==tn7C#PpmckrHvcMc7baqM#9w!PhbniovJ=ZnBOs7O;obub_zu^=rv#RO$s z=QgiXy7AU&rpd!f7Miy*IV~_t3?nps0o2?Q9TE1r^ij61--ytFf*k~Tf;c_i8YmNY zpZ(@#m**kC2qpW8$@bZ4lS1>o(WLJA{D?(`ei1iix*IsEgPGP_v*6=F9x`MW69=zn z@m}p)Uug)yCtCMzfrPu(nVuAjOarU@J?aFhB!j(-zsAU4uYW9p)>XbSJvn-)JE|9) zadDWhW31@{5suxrLgB}(UKhJt#YKbuqR+jFSl)d}e0wPTlcx5H&QBW3kc6u6_j=AB zV}6(36)aQjP79311|ZNio%xT^Y+1{4gq$BkWztNLm>x8ti+Q@*bX0Cn}d<7j1b?wFUDu`$DQvxf$ zaq@K;y9UL*FZrA@%Zh~_{Wi{oZLHa;7 zhOP@S2@7)9&>zJS_9garKQO9lcKYeue4Mx@V`ZQ6uI_s67$h^%M489?2f0Qg`8s|Y zwl%fq@m7MMvLQ0;$<9nQtqtR71rFUy7r$c@3aROv3yV06utoO6!^vgdeF!A;J{t}i z=aIv#*Bcj}t}-YD@vNbkpN4)Axv0jibuIaIRS@mdWnC`<$59${kWe`; zn2~4p$J=S8Mv_=Z_PCatzfc)MImT&gv?%_d!&`^9JO90 zy(wpGSr0|LE;6i=%eu?^Aun z-aBll7xC|U=+4K_zb&TBPPbbagXDVKSd-IrKR444&&Z$u-E3JYJaH($2D{?e6p3b? zISLVI1k5E17Qe3XoskB5J}Aq16O3c~qFd#mW8iT6EvB%npnIKMtp0(Pu)vtZF8q0f`$c;uTf46()wCSB-mexVu-i(7F-^+v~u6 zU^>AGFS-f!nc{w-nsmXMNRenH9s*toEy3vTOt2)7R@tOd96mI^*OXS4l+rWm!jBVnJ z$9-y4Pc7;DW`}8x+k6~{PPta3Vg;KJy<49z8%ZSFs)@fzwi!DXEy3ZFYBJ;)vTJ!>UicAw`Z>!5*{0qa1g-MAJs`A-p6FE`G6d<&Ux*5*C$)@aI6Y5|o2FzC!T>(+oy9Y>?}A*W-^`SLEj*-kEW2N1 zA+*?no8DMvOlt|D3)Hq6jvr0M_abgS`1|voL`~y6ZaCP`PRofoS*=+L104$a zIuk})U6V#g-A+2DH9{K0)rgq@iqH^xxEegPU%p+k0~Nn*;2+p|Kit6tV?moPBe&1A zQV4(sWlN-heVZau<*BlxXqEd~)^w%6H1mF9?M=!;YAET=$;I={F4J2IZDqZw*iCxg z2dI=ro6?I@*9DwMROZa_Z()ABdh&D^$P#R$2x3Fl7lcuPJRE%G)#9XM@_tOzw91@) zK};*P6z+uKEgFuv6U#mUZs>=VjZ!h#(H=<&&bXxR<5SJdb85`d%yEr*utD!EgeqT; zyeW|Q^5L{0tS{^g=v;V#K$dKvs3}$g=JLoiI6aC&>F)dc@%m3=`4l$#6x-!>?DmGB za9YZiP26C1MafRkw+ELaEs!fm-L_W)BHNkBGYh$UNQh*R&Xj8Mpr5} z!F82B^lN`y385LE+o;$S3C`1bdLjbHxoPnFRn0n2hTw?AXi;fnM)tHFF~p}`dfhk) z|Dc4P-Z@m^i2hEQ@1Th%FWb02$1wq9ONM~sPGT|AX)VNma))fX;=_e(wNUlFAO{p5}ho_f@B)r z)>80cw-zyCwvGo@#0(=hinXT08@UTUq3=Jy6sg^wB$b6_$@|y3y@)Zt;aDz&PN97E zN9oNXy^WdTdZW63(p(VfDU&MjxjuEvO!ph)g+b(#XUj)Y`8gIPIvtTbKdg7^!NAgGkJ?jQW?sR>;!17ii&qR=#8CSX18*Mvh_VSe@yKoIp zLKnFhlO}uqG1T{546L5zenPo({q3 z`VU0CMW$ksp}B=peE<33m;eWP{_YYhPf-?6-%%LatE?AW3leTJiSL!MKwQ1L?@51t z1)CAK<{L4_%%9uPpP?$*2|VyqbBxcAzPH*ru9XM#L|$uDn$P>#0$WUP4wqV$E^$aH zeZZ(Djgeq>(?ZXEheUS)&+E>Sq1qp_I~K|f$B<6(clE}_QHs)=R#qfs*HzUH4VWIF zXMJ26u8#{AZitKPWVZV>WeLfMRr27$&NoFLjVl-^!%e|bQj<0qLumDV?`zTz0mJ$% zcR)b!pq^KlQM_1G9nGGq`!=l|i*{Z9dU6fJ&Kqd% z;AWor=Js2YS3`S^(tD-{tuX_om+u!Vvwr}ctI%g78}C*bc^iGX>MZppiG<5C?|>TowxZfi4batMCJ|U5sFUzf*TiK@E^$J=uBLh-M2So3LNd>c=9fxqx7LZW zSq)wUUTYLrQw-39NE@?X3%WYmb6WBF%=BQ0A(1TY&TCEvAEiGLh6+dbIbi$P7b5J%M zkqu$mmchodLPe9TRkNw=`+^WEbAmvX*g|c4J|-tvO@QUwy0`4%=4UT?2;Rw>(y5Sl z%xz@izg=$l0=wEJst)F&v$2-t&`V}yPaT66RVlqchH7GOHU6jJ>+c;feNzayU~q%r1sn(1Wrh^dFGa0*9*Ih zB_3V6OcMN-UuM`s6rYBhRLuy^b<~uWi=me@n=-DC-PWssc=iNI@MWT%BN?0Y`?2P! zfPN|vMDPRuCfB2aD*Z!5?yQ@fJH0rE{*t$KX|L03tCj9XfHuYuvSgm;bPff-GH^Z> zgD}mCa@;xC7+qJ-Np%ZTw;+_5b1sQK4X6^7w>ROx6(XVDj@BC6upaEyOaxt$JA^Cp zrB*$z{?pN0$JUX%CNz>|HoiU7)#?fvW-R9nrPdoI$ouC5pTDy3Z?zbQv0Xu#g*nux zr49=CuW}~CWSBD%j{)078v+Tfl*!Q{N4{-;h=->^da)ytwc-uQQ?4iqKa<!+|=} zFCKg1nntLyWMKxEuU&2Wm^H7IO#$z3P5q1+5PuyrW^n@!Hd2d+g4u+a28RyowpJ}j z3zuuV77T<2^Hf^oEC?Gtcd9Opa=B(`6w~7!CYxjBB=&IfDb5Hs(;r3774sMyw->W} zoF>aI1Lxx&Kbx@PtZ-~=mI-qMII~D_zu~Kv4JIa>FhPnfRTXdNlW$AUDC6C6no! z+aVze5uopQUQ=G@vuK z^X=vDWS5N=lO|ALb`EkM6RSYn&kn1FKk?wF2MjoW^U)xvCK9k5cI}mfUOy?N49vZ9 z0HZphrT*TrX@I9^2P~0b9~cZ3~^DzmA`7<*aO(FuU_gq@$g(@ zt~_WN_0h&78!DkSWFf=5TkH=(Yw6Zr3VD7gOifXaPsT}5t05-O>1skbhNhFd_YVCO zr=P}cuX^;{kt~|J)@wprn6yfE>E}iTMxf>|2~6Hd7=II{cbV_S z%fh;6j@%E8WxrgrR{W%EderN8MF$e64P5YKMxhh(=A! z3?6NJJZf+4DHDC8Y1m^ulCC$BZl@m)v9iiEQXR-&u4;eLd?%03xW(Bn9Mgbv$QN*dY$@ipBG^jI}YbG&M(T> zImhwR7A9ahSfs4%=4a;j>B9*~&fI6OS>&UKba3o=Zr_IUR=GrXu-=15W0l0w5um7X zntq+^bGIH}Nzu|Y0UI)|&!py9`#xR0jWMZTO!5-)i(LNzz(emlF>e=mEs(B#+0HjF zW|#Z-2>rd@>|61L`4j!gjG|A81)^NIF}Qspw=7^dyj&Dvlzfew;-T0U8jG6H3s5wj z2FnU)2tb{=XqidyQ0sIn2N|ToLI1R<8aP*{OH{Q^5V9ubVW--)FVdu(cKe^?8RtL2KU@^_Z{GK(Q%-F{f)%catft$ei>HHe=F@9*}V zx5QiZMT-@)zu%QfTQDVQ!hi<|SOM;l4CB2IbC3B0W-Op0VkPB5tB4%u&BhZ~)N@jf z;;N>-tL6uA(RO(^b~IC6aR9VIIR56ZT4nxqom3N08~8Z_{_atv^;&qvYGVEpAXmZq!h9~6$r1v69E#>( z{W`Ce%=b9o6GC~wo59hx^x(0ogbG1_pISpJ&kZOvA^=9AxS~Wyh&1?6@Xg`m>Q=!-sOJ8wsNAN97g+mqmn_dAZ_nAj z*p|y^NHZBsEyR8Jv&7eV{F_LIHs` z=32yEs^diR^)*;JXZrFRQ!egkM2KIKvr(UZ(SBJ)3R|9|h}-L8>D3&Q{2(atVNR9rU$e|VOe|++ ztd}1wTFA4Q}tuDq3A)SfIApli# zrN<9Vk)NL$)Oo327HHPUEGtSz_WQW-Q;W1A?KnN(C~UqojAxd2m#gu@Rm#WAS+=O% zWa*?CO6PvhrEEZN$i|2xin~*4P_xKMKUac@XQONg`6HhG+P$wQ^RmwQ{1rWG`V@&$ z;pRBqRH1@UX4Wf;w<*40M5>bXBn)A}t>=-KObY3Zo0hhE<@@be)c-`4T zE^at5lP0dMWD{EoWV7KkLk$g`6F-v;S@8N-(^5WK9!4dM8mpxfoNJK{ZCqMM(px zR9mV^CWPlt8XlMJEk}cRYoT^&6QPty4yAdxO-PcKy9{8+j|yc`ZKLbQZ2WS1zrfY0 zc;{2($NvUz5-K3I>U0qi^{1RC_z`a#>ZDc^?g$)uyxBrc<~1k3$#UcN`Zi0loBC*& zXXFGNOcO9>iXv-4-`^_T+NNlr^|yO3V z<-h)baS>;V>VwP+H}A08vt7P-Z#uQ|okAa*VFQ6-bbnw>mYp3N*V}*%ZsQ(mu^0Bw ze!b}zBNS^h{MKUDQXbT|fl#3X8+`QT$dtK(pm$&h;R2|v_(H1H_b}E(ifY*3wa;t& z@6SK=i#p33*Rr!ITHd^tnx_7u!5Lzi_M7NvH1tW;NdnU}Vi*q01%yNmy9>^to2<)m zUvupp;hB1XZm|23R@KMLllj1D1|U;{O2MG=kl>>Mdf^yc8j~x;ig~`l@%yP}jXc#C z$!0W6&rdZg|LMLk`{P{c>3%%j7p%9abwH>3k>}LOX`9l(TmLH#II;1mTHm+6mi~G- z0W~NYRg3;}H8wj&H0mQWSpUuP%1D!buBxWG(gz;vy-i7UBhQzSU*xm@Ee;cAG}kGy zf(2b-^lLv{9(CwZbmW!X?KXJ)z;f1naVL{C_!AH7-C(x0vqJyjZt{<~T(^!w%gG1Z z8(khCG|+q~ktk~jC9sa6-|w>O+1O}csrDnhLF{xFtalE|m=z*pCR_~0HDh(|`~Zob z7)#j032rNq39x$BqS1-_tzT&sDvE6wh*$=!rHI`rFg10GN<7$#ndLUWUoSBPX3WqW z+&d`hhA%E9E@_zh=;JKD$Q2B%^Q?-`t{F1Qc(QfA`BqX}DpcJA61(Bi9y)2OSvbu; z+pf6_4~l)d6@`-r<*&GaILk(7qh+_td+Y2TIQ&U3KUD4EO@HuyP+69Z2gCxqNwSxa~yp222pf{tw5Q;`g zV9e!=j+jz)-rc!ug(FGfqG3U*h?@rq#iRT)d}rgucn4mz2yiv+Xby(`{K}53h8mPuFa2Z3EPku-|uj z6Ka%3sMW>%sGEmz&Q}ZH)Mc5gn#Fdd9;$rW5dZ95yW`Js7uqhE*yunCNSy$`0WPI z|AvnGWloMbl`}k5=yhtbMx&>!Zo8`R!??(2FB+{0n{Yr|_4`kMEm$@e^;p6!t>2hU z=unq`38H&8KB_+n%~lyJS@gTQ{^1>7o)9-1h@M97fmR%kKhMWGsehy+zq}4+G;{14 zwG>h(b<83^o1&zsmP`11?gM7T?cB3-5e4|cy7M%i=5s+N65SJWMF}BYq2js{MN4xqBSb1oqn4bRusp^@pd8JZnzJO7hAyUFE^yzaqyurR?dlp}XCFD|mRinu+Y%IE)GDruhRagn*5VjM z;=}CO02-R*_XkzMYXCQoch zi^t_G6Xx}wJ)7{D66%KtWtv;lhl_~M*c#Z{XjfmH42Lh(yiV{04|>lyNs`3WMAZrC ziDzeHYZmV4>MhmD3dRU!tvLl7amJXtIbg7 z1FnL;E&B8yyy2QA6kWNmu{s;{FpoKcl%u{8FwJ?xW7mq)_lLkFMWNBPXbV&+V-J+aoV6 zj=s!OXig3HUtGEVRTuofCZB(rb*Ov&;_-6c2=DMl8xWT!O?E316~KIqy$p-*iW^+h zvYEd}2F+2T>Tf>j{7G{vcXa=AdL)0EAYK37_8mjR7L706UWl&y(g}AHy z!PEk$ouJJ-B8W;qx!7*{HF-q2p;)XFNaf4j@lf)5-TItn=Va}MLn#mmsor)2GIPty z-uu4I`x|a%nFWifXWB~^COWrHbq;`JlR4y!yEDdGwQ9x!)6G!%z{T5}_S!zcG^aaG zZjY)H4%QixYE{QDbfBsGtK2r^b2ufJrm*yU%@oI(m&U0)=XbT{=Dx>@_FmDANm~PE z22G9^+#k%XQAlH`0Bp{J$J$os?ut%*&#kG5Ic(c2WIPx z93f*LcDa`Q^6wX~G-}3&mmgodJ!!{k>}U{$GkxhO)rfIaaQ6csVX!(k_jK5UZ#;p6 zmK*rom+5aD<50&XtOaNbg5V8MC2bT1>hz=nk|E42*6yEBhk&6BIH?|oq;p8~1 z%M5_mmXG{%m*wkH%jLekk;RX!>c-9V#$Tqo#kgshQms+*1XTO&vl3mbC6FaYb&T1m z=Y|na(c{J4bf}d_R=QsdH$H$5=bC%9YI0!v;?S@(SO#^eK;A~oG)pA)^kfsJ=FaenflmppkwH8vNj7QOIn&P;g8HtCv(YcixGm zPnfz9%FLC@?&>GUl;JO3PNFXk2GvsS*GZx<5>?GW9B0v(oCn1XNG5*1a6OOkU|95s zO@7!|Kx08#C~2C16*wV2nrCDH2eR{Y2VZGv)fww$hu=U=uPO5aFmy^W0qE;mtNdLU zwASm=A|xpQaP%byL+@WQY_rpPv(MdSky0|#VO0Fyp5*OVG$o-tI)}-#kcJ0l#FZu! zghT73A*z*i1XfL}#oe3iC3=+T`-x}8ZKCRB_l2}#jED6!Ukoo&oIL8Xh3YxrOonE!a5B_j!%Eegxt_<$dKzB*ubBHY)S`Img*^fu2iTIq+)gk4og=`>ZN zAoy9eR0jW}gms5CjC6bQO^>IIVzNxVNKmx60@lQ{ZpnQ>jQT8)M`g_?CntSAS*_Wk zN(;lt`_EneC7L+3eWA_T@MW5;#deP9;l00<5vR9@U7U%s$aXy}!ew2iJnkor=PXZ#(KP+nj9YhCl0QQm-n&<2 zWEMAl5c(hNy?HoWeY^LqS4Ub}V~e6l5QLg%tyu^fvxF*Q2!c>E9Zf+D2{BV7W@?PF z)v9@(XKl@;Xw_7mt|!-h?`Pk-_jBL-+3#^Y@ALlgu0O~+Bw4Yt*6(-z&hz|!zD93W zZrS$@G^I(!!485#?FGgS1Y=y@BcIFYK0EnAfBTQ<*#sRpbc(C4djk4XoXz6yU6p6) zgjqvNg3T|+k#&Kb(E_-$Joak%qxF}ol&)I8z^&EO>Mbtcl%q}4wzMO{9pp8kp(^K? zkb0p8#a$%jI(DiCpY-;-7phf$0)Nzpn)>+=~^v#s}kC1p0QnhAKrbif`5}AIw12D_%*C26r`($-Je-4)K@`makhG zbN46u3i~29R=d*uFH-S@)a|!mq3Glu^&+DA&7kd{peY^~*awZ}r#qB#%;^`yYa*8X zn5A4y@-#axe~tjzX>js~Brhj!{6)UmMzu$lLl1q<}8 zPU{5`)p^Oq27}gSGJuhhP%-kpI~r_lwk96kj}Pj%q0fp~V!2Z(dM*_D9V&9&pgp2w z0f85tu89b>3e(iykC@vm)?VCupX`CuS_nOwKD68?jy|t2dzZ=mox6`4KWlc-+r0Nk zKQV7Yfe4FVR!kwU`Ym{SGj)@vCo-e_377H$q^F3r86FupJWE(wnluGliynpu>ejs$ zw`u>7w>pbXo?q!I+&}nwy{#x2G%GSWzM)*#y_8peKX$3u=*1|Ix5h{YBh3)?&yW7a z+SXWNKKreqN{rQ@IWM^Hn?FZ%C_5h9AjeyP16B{zeT7dV0>hRr9r9l*R>^*EqF>kG zd@2b2ODb{c(jA1r3)h5pKiDazx6zAN0lW}F?COm}<2%R~Jt~v7q4AFK5VY{ORh#42 zpQ^U1Ho#(W;FzobL&9A+Fw5qd8hEgpCUZv~46>7y*Bgg*`b?E?R2C+jcm(4h)Z z1z219G1-6p{L8NDE)pd<)Vt!x-|m|KCkOm(v6-LYn{T_%bE~uJhtcWD{)>Q?v>ZDT zoD~eOkp^C=!%sFX<`OfF$92&c;S{lzTs@Vj*e(do$;9?qQ=c`WBXOGNUdUDHTpXKL zvOv<&>nW4X%xc=mgTGtlWO{1Tg|rhNMx zn!VVX)51nGU()J`G4Y7~+I^Y}=W;hGRU2qlQBk6yiXA!`k)-$$E-JY+&;VtzK+1cX zb_C9d7pw58f$K+;eHDr_02qr$2Tv{cTD;To5e3aGEm`r1xj7Yo14ni@4-qogSvI8- zyRRjI`uaVXx2`B9Mhex8a{%iI0GeAkimrX_sa0 zeRPTaj@4h#kXBqwVf_Nx3buDX%<6I7{TS0FB(m11#jtkpfhu_=9H1rp5@q{S(qd^>8o zUT7}OdS&VebT{6xmt1h0)TdX@!U!1NVrvG!+W8V>#3~`om27)E^|POKLLo8bYNrlR zF-)eq8Ote%e_BT4!{(FuF|92v>Q=IY*%WIaw;*q+@V7=3x|?|o&mdABUMM9Bwv%Zj2Ba$dJ@)vf>;J78<$u%NXLXk28xZIxHfcb(gx{Fhn zl?RZ3_UtHOD8FiwDJU*2x1IOgpEN*@q>aM+2g84xGfw>Y@0Qd4xK#vC$zGZz8{F>Q z+{9q-(h-vFa5GTX*IiuFitl3c#b1|h{ul^TiHlh zFmr{w&n(vaRim#;iu!XWnU7#$ycwWS5n}+*)#u5Pi6*JY!$(PLbpi)!JYdxl=DPpY zdrp80QgVE`+e1WGEO%=x``pIvg1%~gF#Chy5BIKr41FHhAyz)Q_)8)`!*aV{k+$l_ zlAO`~x4wAe1+&T3Ka{ZWm>-D{Oh~{l0=}D2ic&3G`_Po%W#%tt-5Ve7+w;YU2Fgg9V_bK^rd^xM>Gb>hxzs$~6b+SBVIpy4F0ajRsy&Ne>b)_#i?)aP@qELlZnT+gi%S~^hA z-cZS6ET2|hFr072TQKsO2Sc;->iW-uZ&Ri4lwujn=G32tyca5GGYj6HeF3eTsohV> zMt?x+`DQ1k=u+TwQifektbGGD509t%Zv9Dv4-{N__a{y1GS4;NTiYjW)qJnHRiN5!)vI2+VeO-e-w1uV`Vo6IVt`hzdeT?U?UsloJkyH=H`Gc)p5)$z`cvaK z6dw4ae%>zF7M@I9-S?fY;Bk``z2s-}0?)``et+zj>DHTo_~^b!pin|cyu%)C<<{_Z zo3O+3am6grHvU^i(Csy!h-HG;TDJH78iE~Yr7LxAryIZgiJYBp_{Aj4kWN(}cKinO zeEU|>;p{sqUBzx_s0;O_a~Bk=`NktBAm&-P3bGUlcz<)2%j)V=u)xc+{R?86cm}GM z`T|+TL~4xQskFXxo69t40NnQ}#Ps`4Canoy^IiAy!#lP30p&@}V0;uYk00Fcnw~X# z(YocyglK3+nRf~=sa@hnMblst`A?cJE|Z2$V^ya5Nfn+qW^CDMrP+G<1-kpZxKd9i z3Hs$u$SW57It{}qBuGVDjTzsqvwghKZ4Ha<~hGP)))y#9*DgNTbSx7eju^a4>2L7=~Qm!YF1!ycz!fev%I^n zxc04wty`4E{8~-%icz&=W3hqtRVvxZgI8EzXFPC1p0tDX@OWb3pPKXN+=+qxU(AdD zeILrlX1{mAKl)#f8yAM0uLtFbZuyb}2GuUNm7=BJMu<`rqjg~9$x1yV0J~5<|5x4a z&Ua}pluYMCSh;t)f+SCDFF#lmt{*+#d8NX|9syO1Sd&cVh)oX_yMfc2QN?_Ed?L9@ zS47V+rcv9uE@>F(pa%5o36joAL`gJ6Cte>LNhpfCpI^L>H+~W@CntaPG%SCB8-904 z@s^sb>4$6hOa+Y7YZGQs$G+Hch^rpeemOD=0j;d#6&yu_)VS9mVtQ|5X#@uR0!E1_ zo_qs?-kxJ{|L)T?a0anlan>|qAcIv`!5x34E*FFzCxb93K0bKVpEL;Wp(cHl76jLd z({*CFH6f(MFzaq%8X50DN3F~0;}HQr))Arl8YO#~z?^_QnoFDw+G2-nK>^!(SL3<- zqYW7wUbI{-9NXA?m$P}~z1ny9sWsqp=jisWC=>i7nBHKs31Q#u|-Cq!+Et) zOPWjF-|J!Q-cr+)*+=IdYvd|A#A*Afgo++t47#t++Ed+>Wd}0SvXF202DH=%8Hl`~ z_t_})b93R6IUo3E zX}x~-#=o8DPc+Ae&{gNvJTor5_1chwQ-MLc*YEGX-TNp6}HXc zt5#;?4j7OX)li>9_*{no2KIA|9EJLP76dfI-N#i(t{#%wm<%qdL7}_5y;aB6?)k4j z2e6$RvLRX{Br`XC;nL+I_p;OjnXFCR767cDuUO~QDLZ-nz<**H`;j=qShaC9-QHN% zE~Ic#f+EOuZ%l}obYpTBC%(^CE8^Glutv3FgxXnr!@}y`j2^7F3A`Nx*6;?NnJHGQ z;y`93vImHQRvYN3!|@fY*|u6j`*Jt%^AYN06@alvIXj zkEExWrs5P+zu;8-kfB5s)91`?uifa8i67)zOoUmm%v`m91i#lI)v4ru4 z1Q_j}o&HWEnu=f`@bk?HzW|Qa3qq^!O7`?rHpVCP*qRNETHeI#8=?E`mmuQO6i8ZH z8hcUy;pbD&dWXv;GLm1UL-Ny`1q*9jQM>J=PXq6hQ;1n>O6b?1n&GS)>$+4yV5t0? zsKBtM-pQxv)nEDLX+rqmG)B@J>)_hEGIX8pBGyXaa;NOa>|FDWmD7$*seK<4c~>|W z%o+!!uz>1F-TqOeQ!-OzL5=lHRcRAuKzz{t-RM_PDTlRu#dMDcBu(3wEX9k#)}@Dce@H7GfO?I=P#8J^9a?f(7W@%^Gy9Z z(^KV&kttaPb18^f0sEzEhZmb;g3LjW3O80>qb>rT7gB+8?4n6dJxzLggzBhc^!C$P zTP}eOWpU2#b#($q(e{^XmDgOG3N#Ogi#{ZTLrgYgGH^Rk@_wx$e^E7fTq3~V@yJWt zb=kp6UQ+wcYd;LH2Zv{_a?tdJfQib}|`EqL4_37JN%`nN#A$uXeFBHnV_6Hae4U zLgk##UoK7Rq67T*N3?+rlIf!ZyU2NBQ!{BlENe$gxz z`8`I`_kyaje0HZc=~KgHHmT<`jv2?%&L1Z4?)U0<`^tR%A%tmhtf^$j*Xf3Ox17NW zEa#9xwC>$lS{a44oHU!l<>a3%J=c6+`0+@w)wfb|BpMci>Yu%wGrYOP2-Gu9$j8tL zBy50OJ)ewcYg_(Esa}JmwP)~44poIj^bXy?h01chWM4GBy#I{F@X5zGTi~+>!azoR zxvr1Hf~Ka{cb%;i>q&l#$Kpa!CD&>#8dkc?M<`Qp)|ibzK(Fzl^y^v|bwAn3S-iIO z6>Y>>aU)+<*wacU0yIK^+T$5Z^dC zwK)s}`pf_gpCk+M^UlO6IqW%PGGGplhgdOk_)Ef=V(`Yni3a;3>UJ)@9^9_7^jzN^ z90ewUVI5ueWC~W30Ov$hG;O5Ej+2{QzRL5qDkbw4nM;b0)$1$KT>#Ju@B>&(IKxpp zRDlfii_~xQb}twbS;_8l#z8a z86;4xq1+SIBZXlQ^c(U%8uly9a4Xz~TW$RO>HG1TsXJv>-CpAXeGoT#*?pioJGn{U z)OQzsQHBw8eLP-%tWIO($G6@?y!JEKu#2;qW=2ZTdG|n=sQKoy!nG7xIH@Ueh_pFi zBjA81BJ;s9k2;MHy(%9+y}NiAI3H+az4*E6OrL!g6i8f3N}}vi3MXA*dFl|zidNI5 z?(XCcUZPvAx$2t7+BHjaOU&}!I-K6i&z3#q_8rsPFUOplfBFJZzGw6`^wdp5Oi8KV zhyB8edb|ZNn=e%Rlb7Yq*;ss1xcTgDBC|(SwtiV}-%7+Z z|E^AxqmzW>8>7cR&h$a+-~UPT{9Rvu>#dnS55fA7QbRAWM{z%=Z>(Rap~_=p>q+~> zojmg!E1AjFn1tu2D?^QGThB|%v3dRIc!s011(L)Y*Zge@r<=aGDK>+8BRnZ)+J7zN>o_Q$ymnmHgIirtN0_4B(a31MYK3Fmcac3QeB zi4_}XCxWhw=E+@ZWL`;8ew!w~sIm^L3~YKFC1*U)EOQkGXs>;qjR^sz)+{%qAmC{- z&lWuK0mWx(ITEO92EpoRgTzCV`o8>|Ylt-a!0Yv&NH((_FWRDgHIr|#6Il$@tY2hc zUdC-T)pN=AxB`J=Qm_c)(%K)8nX|PUmRYs#l486Tc+F~rsPEe##E>kk$??X#91DrJ zwvePXAhHl*aPGd1@_5wociGq%(eE5&_q|QnI-nd%@Z>RG{WvI|`L~!Ie!{g|dzI}t8rT5*K4@2p+gONu25r#UlxQl$#INAk% z@j|ZT+PQ0me%$E7Z&rafwnp68OK>WWVYa7Mc!kubs%_t z6zAlui`Q;C^(1r9R?#+=0H`FtjHG-MPmrc2vBy*HPnwSim*%b~A8VlBdz*z(3M==u z@xOFeG(57br?nct7+XsvAQve$R`{p{JqU?Hb?~HwL~8vARXp@edU2VnziV~(v#Jdb zn`%nHr~XD?`R!JJuA{w|G(2R6rsYNk`#~`0_3mp=6_LHOEsxhMchO1H5!D2)eEr@~ zVI9ajg-L|^H~shIEySoM|Jki#-20%CwOljpHW-&w;Y{_iyr%4@%m;8{Av52Cp7A_N z*f#`1N%!%fMa1w)n$7=v*!S0i-}|3xAABy01uIH$UF1-BPGqVr~T zgJw#hbh4$MDVu;|97CTgZ3705ujRlO4v*Tvz(`kB*LRF39AH@QFwe}MC(B+_ams3p z)3qn!?JUg$xXQY#-}h{S21}Vad?n$wz~?U*7}HHjzlzf?xn-qF>+T9QK;4bqIl83^ zEj!IZx5E_NTP57ADtn zroQE1zB9fcXeF_cN>Gp~ZNX~?A5py(jsmaZ0-blBF1`Eyu;ZoB=a)4(M}~zKg>Otg?y{Nas2fq0>dGhwSxjX3~)53;vlvHg^uN}4vEIrVzf7gn6 z)GMt7l~T?v>*DLWo@k#PX#<|_wHMua(kQW*2*-#*H%eb{Uzy9iH8Sma?~hRN+xsOR zK07h|TzG%(YcW7x*)iCuo+8hJG`B}7dVDKPvV4ICoLL>~{%r3uY;vTDQkHXfb{kRJZ44c(%U=cYRn3M>#Y-3CeD9d~nM&$q-J>65X6njcC#(HfXLt z71M*yoaHs(B;g@U6u!Ao8jic@{B+Nv$p`ZNRYTXHyMQ15#f$NEf6_P)$PVf&$=0T1 zyVtFw2b4o5*w$O4-`(C%KbGsM>ri}aa;Lqs{8C|$+6x<&c~ifr(M3*IwU$Lf)Y96T zPM^2o_?1&K7S0Cz-rov=1T_cYP(^!!esbu&@7^ibV)I`}6!OTfwM>4`-2nNvr!i8Q z4zUFd>ki0qw_wHR&N(uQlvcjVo{uGn@`N|BeMx<>=>~VN6=BtYt6x57IC>Oin3Td3 z8~2~lq;zZzzaz05~!X`($jZcvtzT#X%=HS+;!M`R^q zk@uRVk2$JO+X#)YYh21tERAu20D+A=&Q*;5X*(+axPfSB{;#BUj-1?NQNg?$D$TnE zx*pt_!>R>#oz{`_fXSO72voI9xeld0DKRbe$mHWsBoTbQPx`y)8=L$Gyl^T1_jK|w zBw2fW>MEPbK+*$UV-{o${1Q%I{f>6^)csp5cm1ay8hUl^0L+9xQ9<`f)2q#~oXPHm zX>6-6=Z=W0jUEW%_juWyL-Y8j?ak%!D6IM9>fJwLX8SF!Xk7Jr4FYi9xS=mRX8 z+yOQe9Zk8Aq*=TFM#XcM?q&8{mgD51I$Zy=6sjr?Z#q*^;2tmnd7>Xd&|l{jcw*kG z>LTN{7v%x>FB+*k2Tr%{^w@2NL$Xgh8+k|2nOYdoVmPUg;+sq6v%|H;_2vi>2T2$R z_{{NVI^VjPGla0}QuU-mIobscErVvIDI~6Re#T=u1R!$nyU{3P{gS7u+B%In8-*&w z`*ZAhHXd$|P@yaFoB>NxX7Go96f~XQP`?vS^$>R?w*eS4DwLP{`wyi__^`-PL6<3B z<4(V>b1%Ag0D~eQyHPwb>Zh#pw z25QxKRH=*@0aS7Kcrwnw)u`H+aEomPXo@iJ$|&YN@Uc{Qy$5P@I! zoq7Rv9Wg+U0^Z!664S_O07o`T$jW;o{ZK{_Slm?Q_+;&-P(oDqW8o^v`G7@X{q`?q zxgB~C6(>Ub7!Z;Dopfm4J3U-xtvW=!v@&ey;b0?0SJGJ37#Y{7uDz73QcR2Q#|j6G z?pc%NNsN+D`DB1jYb&Uq;>}WvgUz-)XK)4)R9=EU{e-D;ZM(fito?vVSVU47X&e)f z-SgFYwQ;*D^8L$knaf5(EZ<;7Y+Zb2$)Ukj{I> z+T3mLoRsjkxJ1;I9j{AHez!X!@k4dYuhJYR^Wl9MGRROxqP92$)=p^0UX)JDz)CGP zz+76fNQa?g{mET=@;349`L6P1U`qv0MMzL6x}G{Kyf^$g+wL*I?1njX{V3JRD9iOg zhDkbQlfDx>i`5Sm15;t!#x^p$(oCbMxd(dh?p>8mOV=F`AV_|_yvX}SmAMb=Eh#nE z(oF$(b^m<;IoTCLRh1$CfiE9sklfeX~dGX5ZZU4ejR*HQlwp=*ymJ zh&3!(ASPgZbgj_ZUx`d69pH34nXG^JTlqB|xIS(L5Z2wF=UA+!&Ie$omwflsUo@sQ zzf~p11A*E3M1FKZ)1&`T#|&oSn9~{Do;XD(IZZaP&i^{8yw-#CW^L+`z>>b`!)nCTlaMpx0PW8YsOI#Z4AzG`?>q!QM_baYwb)j9D8&f! zhg2)#sW7I0mjxPsNHYF2$kEOY_`tFA)x@y!Em7z9Xl&ZCEQD)8rnhc1Vw zWP_#<0!zs4TQQ0q#=N-~#INe%_ae`d3A!ucya$4V)RkU*+I@K%9J1-O?6Sd&q5K7V z;w7=o(AuaO^BW5b)})@KtuV@#mg;PybfNxJY@n*QoOBuwQ^Dfb4SOoV=BBx%bF#H; zUH~+lBh&whZX@^FLxy+f)~oz4y*e>1{P*g&r#n(UE`Jpx-(5OP^{pdQdtiNAiYH(h zu*u53>O1>sdcG^(s58Bn5_-*d<|kf5_@$56{hs1Xa)hJXG#yQ31bRhcpl6ekTl(&> za;5&bYinaDj3QCgP4lHm2?%f7nmhYSyaSRM-(43pTuTbY3M175?>0S6*j$t>K35ZW ztop=pHR&k?tcwBh-ICBoqP|S~IpsC<2+YsEKHDhy#6M>ATC#H%_4Q`OI=R84lPXgMWCo0Wg_uOcah*{UT$d?v zc?NEJMv3l$oz8YKE2(Bs-7N)9zPdy@yK-`QyYxIe(}h_;&PQ)Y;AatUDL!z2EIGvn z{~pN^dGXE;@I6IVT**dwGc@}YQ)qrQA1^KNHt~CmkdRlp4uI2>!w8>Y;;O3EJhb)m zv4owK(wY2%wm}&xfOcKWxL-%`DPhtZgyNuHX-ISH<3d1DHa&QynwRAyIbp z!ZD294lo)}HX=d91bW zSK^ww^Q?wMyO#=bcs@nG*HvOR>aZRX)Hdk@Nxe2}*SD(D{2;rg_XVHZQ^ z7{;W#(z+TNrUfi{(N2_UH6*l4zW`rKsB_H?|h8&i{AR4w$Rb(_0xB3ZVuaP%r`Z;@|g??)uh_8 zaG=MGWAVxCTRQXF4=a6?*au4uwo%S%a?)5U=c}^zq8unI-*g)SE`X0El!MJqOr-3& zKbs$eymksiR}R*mAe$y_Wv-L$M=pKsv1W>N>fk(J=4+u4u{aB69Ai2QLAuxlP^^?l zwTkD#JoT0$-IK)_vy-RxzqL#Xn1cK&~1*7kd6;mP6SkAHS|18q+Dv{CEb4|+XnyBrO;Lywr| z&>K6db>&W)Nu*LsDJiM17u*wMYP8Xq^)H(*tlQRLT8mS)_P_WOIaca;m9zCD!ggxG zz{aD$s94wNhtJh7FmuR9o{ieu3dkMx^#^m9sYJxmO!JXavXMdu0EC+1!@464r1LpB2N>G&}aje(k95u?j%<19}K@vbUk3JO*7q zeZ==uWw$oT+vI^;#5C zgNRT|ibUxSZ*jMWF5GxTWni3Kql(Pai%rVgQ4{LN+toiBzdvSnvm9QO2(oiw2r$6(y)ogOZ^Ogxh8%0AI4k`pPrjq0m)`yB2XiFptdBlJ~cVIzr=Nv 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 US9AXXg!|{;!~UWLx*ucz5A&@gq5uE@ literal 0 HcmV?d00001 From ca4e16eab3e7d1e0729ad84f2e8e4f822e7dce75 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:13:05 -0400 Subject: [PATCH 066/388] Delete wzdx_object_diagram_restriction_notice.drawio --- images/wzdx_object_diagram_restriction_notice.drawio | 1 - 1 file changed, 1 deletion(-) delete mode 100644 images/wzdx_object_diagram_restriction_notice.drawio diff --git a/images/wzdx_object_diagram_restriction_notice.drawio b/images/wzdx_object_diagram_restriction_notice.drawio deleted file mode 100644 index d7f9a4ea..00000000 --- a/images/wzdx_object_diagram_restriction_notice.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file From 4e3513dc197b07327887e67fea64e3cbed5e0138 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:13:13 -0400 Subject: [PATCH 067/388] Delete wzdx_object_diagram_restriction_notice.jpg --- .../wzdx_object_diagram_restriction_notice.jpg | Bin 216159 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/wzdx_object_diagram_restriction_notice.jpg diff --git a/images/wzdx_object_diagram_restriction_notice.jpg b/images/wzdx_object_diagram_restriction_notice.jpg deleted file mode 100644 index d22e9a3827851f0ee5aeed295115a3af180b2c1a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216159 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 z zjtZ|Pr`A+oo`hRJFCUmI5v}rA&KbU@^VMjl?`sQ@IH-|WdbaxRtbqU@10I54)Q88^ z(9ya=Z#&}g-cS{pw>>W0f8U_o_S5-v`K}mAp}s)jq@>M9`L$f;DDNtTkVJbcTF9zQ zr!yi_1N&4CtPE*r0YtJxpS{Sf>MC)c?6FVp$QofVgyWDrH(Wa#Z}3DN7<~Ci)3Ph{ ze~iYVkNR;$Zo$}Yjm!Nbe_Qdf$qOj9+KN(`4NF2**t69(1Vxa7HxW7UK4aV<@En|l zi^83#1LzMVRcX{I%TAzb*I3I4hL$`g(_BG4t$f&{fYj689EZ16HpvBqprr2xY1WGixYn zi*wHT9O$^MYI0;Vb=_j(6H1NC2o_W{<;b=l#f;uc8B=%OEqSUN;u8u}V0fd_r(vh< zRWH)iB2{9zsYCw`h|a(5&`Yx=j&irX&0|{@h~Pknb8i)Yovwx5W2wt;o z?0Go1SeI9g$oe&3HP+aA+Z&~Uc$u{L5jM}dr0p|yR_-%G=^8{Up-Q}q+z9qghr=Te zDve(%BnB&G>+k-J$rY2y=;luiq& zM3QOyg%+l7ThwFTkHT@wQ*{o>=N^csoxeA=M-hxS7$1}79t-`qT zS6pVWD8UyzXBC-~n_j*P%-ib4`Wih7)Rjd$gG670hyxEH({G1g?^H_bW^HWE#y5c#-ux^!P(R9x+Tf_E<27zxlcM#GP58J$g4e~95{6G7_X9762OS}goI#U7>797ON#rv4yz}Hy`VdS&g>Tv z#n6WO%Ok{-9ibv{aQ4t{JC!^R)1hF6bojWXJTBXF=;KmHzFtzA0J`{Cn97M~WX!T` z-`d`7Up7zqeUD~Ioh6$A(xa(azTqc*xAZLWCO?}*>DQ+ZCnpHs?%ztc&C^uPvOe0I z1eS3)+!QFoBjz(-I6jl`o+$zefU3XLlz!F!o3EtH_KI>)m#JW1UNx3Mh6xJ$^=dTl zr#>OfLVr7J|#eMB?UZn25T*Lkt=&U0_8%ms!n*=_^o zvC2!}VN&m>rx!s;8A4`+JIzON`_J*86L|kZE&cb$al`R@y>hPt;^d#fb5uwG5^iB! zmrT2a5OL}oFM#xY1>x6|+`n13e8s9h{j(2egA#C9E+4g-xx2e6&+}3;Fsj=)gs>I) zl?S#g_g;H2>HRU<^Q!u_z~7IMPML<+uB4zJ-N_6@C0JiEy;)eF$Ivz;yTb6D$0cT& zc&lWy`L|iaZ+d;ogNuMMKAKlGD3koD_D|OxJ|qX)i+4-hsa>~u!$&h~UgH*OQuJ9X zm=^FN+0^Xtz4ZbOu7&x{E^TDHOr+g3S6k{!ZcJc_#75KtNO(JDvlR*4DwQ7Az4jdS~b&K9{v~psK56R{u@BGzxUFGi=Qr} zhX@?+3y@Pk-rJ1n+32v&AlYo6Jk z-%~ryC#44rOC0x&oh}sKQ0*JS?xj^czIF3kaHGZC84mR_OH}UD?|K7cWx;Qjr3dE* z$r;L*R5vJ5lbo?sUdywhaSFLVC3LQgWU&oLo*btHC)G`KxE=rMFfU+Ffn#|i95SA5YTy%x zCQGeIeR+xo#qA1TrbJj4^;4uk(-WSa$n(}Io@DmcjdbI#S{GTyXSv`RrWu1&S)U+d z0baUR&qi+mWqO86cwK`k1*P9okJ1on>p~I58j$YNd7jWb-kLaUWI32vDwBsP)3ERR+5QPm~e4Q zX3=DN3CQw6_}M^>lS;PuvAYxfW_7*!0;t{68*Hwg&zBQtN(2U#*FR7Gi^HT^9r^Xg zaTN}6yPuS*oeuZjJyo^gHLTmB%GS(HGESw))d)^OSaS}j%mZ4uWpU^=0;L{L`Fa%=bmSyFM0*yXcBuT@ zeVaWU$*_c3v)I`a3M+utIFdw?3Mv?as&jpl`6*z=!#J2=lsdq{!^QU!s%m-XPEJgB zn_Mq$Q;5&GZ>XNpSRTs4s|pAGSdTwSx$z0opLDY&p#c*iaGkZ_meSItraYc`8NvWwvc|Es#$f-3y?2w!*dN(>Uso8YLan`Xx|Ji*Y zS_moUHzylEfNjoh9YWHgNnzZA-2BrDX(->e!!<6HM#1k4W=*R|i2tkJtk(u)MlbMu zrf=55R{geaNdYdS^hn4;0LF1T)NqQ@`&Cf8DQoV6^cT4N^OD7RmkR>G=x;hd5zDL( z_dC0Lv)9Y9KRk*1e{}CwTT{KDz&P16QVtF;L7#Il^S~)IRDnl+C1|etQ9(OslV{;+!B92IQGZ%>t~4zGI0*L zCI{1sN&`%LM~WhqSqLkTkc7Ptyg}5-k9a=Vx!wD_%_(*06QLsA^rf2XANAd|?q2@M zK6{q5cN!lzq0>!2S#Z)Uc04-)uzCt+G$klVKQo)|7@kK0>3OJaT`HBKcC$q#$FCQZ z%47m=*cEfqB&=EqjoCuUGg!d1WBzP<@tdfv7sm^f@);S@P_;eaMmy%9w6;FSI;UIM zbKU*Y%^jPr8ObQqOs48hbCP&HUKl{;MG>XA+$YOgSv70?<7!+TDK7FN_dR09^Ns2s zycDnWeDz)=d;I3R_X{+%qt0|PzR*Y0FG`IAR8l6`j`ZhInkuoHjU7z;-7qt#roPA8 zpbBsR_y}YA4GhmvO=o`ob^{V#6LmI4Up;$;Et@9_&9=qX=5$En_>~h81o+CmyZj%% zU5Gls7Cf|haY|(&Dp^`d*0j}RG+_Pt*=ok)(~?#~Q31jF4kaFq2QEENMtl1f<|k&xj}G8KJ2+e}n|t5lnCXVNh>L5_5j#Cn zE<|cj^gM@poz$i;GJRyJhUT;|(YWhfo7~b8d%k-!>@rCPVbfTow!=x1cFY!l!F97G ztl^Rp7P}q4B_>kJyd8xkdmHY@j3@A=sN}3weDK3#iu4~)K{_XZoW_c56921O4gj(B zR@R;5dEKOp;;(0dKS~*QEsS1g9r&9eQ`i%0 zIY>!w^|HF`YH^_7I~+3v3kx`qCe%s*wXF|B6yuUoGM9b@ zw1jBfxDY0GYYp?xl0)PmXaADKm5Abs;eCDIAjG^?Oz~nzv7d;ln5Tg)!`QK_ zV({&EUlh~8z{g6c1sy&dhgQ*w4PJ$nvdfCZd+&_ga;P&mKVJ!YodnT{Zc@mW;0E@> zFm)$&Wlm1t#8eR8uYW#vGO{*bduy=6Cb{RLcc%B)Y_{j^ZQwiJdKE%|+t`?3oya$F zXARj9sW*>HB_+)5Edo9T{gAD`u$>n7t)W46K~yZ;I)sk=%&vTn^pE~^toEN_{_olU ztxBkPN13Nn!zqr6%D9|KsBcyizlW#Hy|PHo&2PN4-3$QD5Rf5r+A*W^5!h&MwMMkh zmsEdFR7re!iXDIRsT&Vp@L2Rz=UK7e-VUVDzw)Dx1m0$fldBF%0(mmDVFo4Ia&`b&G)_ILHEPjKhng{2sn zTkQLx&~8#+$1`(0wH2wcRL9sMY&YlOYjI;dOameoFL5<@Bs6(=)u($O>1&;4Ttk0_ z4g}QpyIPA0%LF2pJZbWT#`sBHsXd#>BmECf?#RM*Y~jF|@#lLU{c1Ru=e6ogKlj1> z!UP^*WO3}xz_(dh&pDmWrVdeu8n|SStOE{NnuDojUn*~dP zNQr1g9rWGuwhU6VD(^?%0*8rNPnFANEre4kmVM$72ah>~oO4=DgW!g`v<>VhsyZ-K z{c7f@9U~x_V1tpQ&{xaDiJmmnSYw*1uCYvP+2suWNa}#tv z1-q`T9D&L;Y79d733_Uglq-uJbT-V$LsXe5i{?&gDPBU>cc3Pq5son69$VKbK{?I~ zX2IJ^%3r$zy zn!!dTcjdBk;OEoBJS^k)Xem3`qKh?R-@^3P-gBkV&BCJdFE_^NwPnlB?FS3lf)XzJ zruyEAW@882gvIQCaoi2UUxdvRFO&~Wtp~dsRaGpl?rxgYTkjM(8RO@THO!y`xA6p1 zeU}iW39v5EpC`Q8IRR}YV-RjOY7zX#J`Z$lXboSQ7bsj#?;!qWs%-VX3@Wi{>e~><;TLxN z-uhUYddQInn@M8kKf@-@M!-wxO4IW9ac*IbTqHKcPJxcKXZTQorPvnHeI$N5tDaJf z_6^2bgk?-%>W$5+#QUQ6HQ128KskD7?JL{J?QFsPB-!L$uZwJVQzOh)e@3fKp?2S! z2ZfO5FdV!zUBH&7@k-Ks&(y}75K%kN)=XTc(=2GUm(l(RwTyQ{A&HAUK5t`Opl?`mJ zozDbb=)(Z7rtIj7cT-F-ime2dDQN;8>KI(EUe9=@E-=Nn3|UKeiE3giTdO2U0{~fu zpmR&k@p2MisCc*hw{1tU0f}oxhsSAP3EoS+wE9P? z>d*t_c$OuL>=WyCDNhJZ%+v0`Cxrodc)w&U_aL`7IJ0Kqhk-Ub*)?0meGE5><7Y4u+j0ucgcZ(qTd=-~; zCM@I5EBj6B`U>fK~L ztAq_Cwh3waV&wF(z_T#Y<~?T7wOwX&@H!KA?3=gr z&fC=wBAAJJsM_?DV+aowe>bK1H z9^2Q1xglMgZQr@sN0f&oXp5nNnixJ=;?<(oL82CBmxAC)JEdZZ3ZuQ+`eV>86wh+p zTvXTIMDuUESd;wC4bOB+ew?<^7K4IvS0Sv z3hA#A>P*K2v(E@bV*~B^Dt)cjswegA#BdpeCp=NwH3v%#yJ&NP{-LbAy49(h|_8{xZX7 z=6oRK!+e{e+P^I{1f{%DPnVbIRU2;54s@%GF4~2oQqX?!Ow_%MCY>c^d)&i;hZkaG zWMFh70|O+f;Dy0)_DO*Ozw6u7mHYOH1D$$&rtiYXyF&33FOu_@U-V6^{5Z->Unv7n z9xY<*+d6-^`_(!Jl7nRjk`5=87Ml^ERb3mR2Rs zW-C^;RCx+S;TBB+fBeZGxOVJ_M)spM*K_OOGi_&2-))G>n+@A8A53(f5D8$`M%=@m zvjZ@i)J%x1m3stlJ*1A~K&2<^r%qqcKeJ$7PVq@F3d@u_t<5_yW0J(!e z5lWI=c=1PmagkSkJ700E*!!3JgZ#BUPg8>X4!!cq1{4HIT)W8y$Be01g0!f>{qzMu zE?h(r2JcHA90*ESZ8=}%9`TOoJhBW8#80{N28WCa)k+6gc_?7CzKo1$E3upN$pq6i z@kks@0RUeS)j3WfedH=#El<6(`BvM@+BW=(a1EOORA^Q0QHHg_>-1#yPf@A@^IsgG zAUs1_Sv7tTuNA8OG$f)bMcw37^$m zkOR9hacuO-)kAvqff$!0sJfyeMf{s#T6YzWOv_i#>nrBg$o%V#U_=61 zVoI0EarK)@6}pEG%4oOKk+N3=-LQ?k*PZNW356oYcg*9{#Jfb?EFU*l70x`^V`l35 zp|y*CV{INGjiPAH-2+bh`HCJTR10RFN|GCB@Yz?4IVsQjRaz=kQ0? zOJ>ajv9H?z*c3P(1e0#zhF|VL5#~O$=c@{>p$=t$J$D& z?n~S$vrZ*CuR7teQjc;bsh^d>L0MgxhiiX`R7OpQ*+{aM8uoTSllwe-nhVtXF1ySd z3%-g`w?Zb)Kv%H6s%G&&fTIwpgw5$8B&evE98=ozE5tkDvz&CzbXk9IUOCa}UmPj- z6j3%h#pCPwa3@eQD--q%Z7=ajmwNE~?SEeb{{HaKQqwwI&V`wkPu_g?Q zn7yYURq~DP7YD-NXw7zAOKBMmoUcP_u zRg~2xGp**U@gE)mrj3Lq^D`W1i@gCNK$c0(z;F=8q)%M`G&8&tkko< z^6AVUgdYhOX0a@yqE_s@o|7poN*HLaK6WH7NP0*5J@>@xI)lNUUPBz?VBV;Ex$R?n z6R1IOJiMf$7ABn+zAO}<{wJqGj{jaLN^^^NXD$ z(pxyw&7T#g8cVPTqHDpHq%PKz4vv*?QH9FJAwGBey+)?2Od}RWLZ2?G$~W=#`8C&< z_xh7>4_ncRv>peHtR4YndJ6`(yWB8Qk5sEBUP`i;zUZyf-A2h~(es;>& zDue9dhd0IvpZD*3T=qv0>F9J^;ww4XpmGgtcjM&GvlC+*}?)o_)%l2dLB&|CwLL-3;VPxSH$ zR$t6B8Fy;?ku`ed4X!;ESopb_w-=mh?WerNmA+Z$SIiyWMN`8(p(yK|@LJir!+Nhi zxhL!(GKjjZmOSf7frae{upOs$^Awd0`5T41mT>o=phwoJbZvkJfl7dXvXY)ih^$ws zaal-Rap=<0_zl+%?>syNd;_y{*T9D{qw(uk{GZIA`iZT~wF;KWPqCi5^99HDFh-5c zqHkvLy_0_rr~l{qe{T18qyhVXFpdE}p4-&;FzITV$sI1Po7r2_m$iWH^8Vnl=xMrK zlK~#gyfY@h59btNp-hxzCz*Si){dhl^<@^~QJI!~@}t(bkY+fZ@6{9w&3U^2GbX~s z!_yNh@WQ|#@?kn!vB;;&IDvi8n7w?VILjqPM5_tXTVZq4_SVD#&}{II5uthDBx*OS znNF1fVW~5ULdEh48X4(h3!kBy5K>7QF{3PT__=I8E6L%U@-cJi3a7hN7^X$h1fYeL z9w*?S3ZN>N-;*~$P@H9y2T_mmsIS{JZ&xJmL(PN}m3TzGa~vLF2fTI%8s9w{RW zq07Rf@Ox<{<=dsC+@ChDm)yTh+2l07aWynh=Q=8;=VF#_{Z1v+Q&~o+BkbJtAL_?% z^xrFF#*)S`u=XU7XZFjCWFzx|8u(#1rrkQl58ACf2LPs;;1n&6f!jyv5pKFJS+zd$-eUto9k_|R4=`JNfoD55)^R) z`6d;yXkW&_XNo_D6D%4h6itnJ6`YSwda!~`rEk{g`()JJ+06klmX;^;(X%`r!T&H^kJ3LvDs& z3O(W366NJ=THKEW;>lnj*Yop%hXvw2UnaiX8}D}+hvnD~MVHgTZdJS?=FXv{=*2Nn zMHL(cprC-?SB8}`BhPlEHh9nJsN3eupvMKzJlY#3x>Qg;RKCtXs_#ML2n*t)TRLpg zkCR&IArtVDTPt_hR#-I!FNE9-ztqYXiI*Pfh1%rdT+CLzFbVLDxP@bV4xM2) zfaMHsVSsIlHjN8&WSI0_FONW8DP9CSZ`{@AQo04?3{IHL2*aGDX3$QUyrV_x&W_v8 z+>!U3s`z1fDq91AsVH=Avw>%2g+;%vB_sHw6{5^Dhh%U*`sn3>M@=mnHMDIdHAi-e zQ4e>@RCDYTWL{Tbj6yewcG~01E%R;}0~8*9lwi4CX%sJ2+jlS7Yt0tzoM=cIAgL zD@j450w*d}4@g%~$xHHNmhh^!Pk+7qsw#x1d569YyoKh~%Oy=`Yl=J?@GbRONj2MN ztiG>bd|TgW#e8S$t#4FCHa}h@t7+&x*I;3oDHdgTR;XviC{9v>)uj%DHOh(P*~I}xETr4)+G*I7c|0Sd+%tIz==&l6dnT&Z zWJ62JYWE9b<6Yxu@>kLR_uY{%3y!Q^x>m?x33A1>S{jdSH%vSE>tBhz_hC6A;8J^I zx0|O;CRj*1PUBS;G)d9H2!%H?4OEvSpY9uQx8fFCem8$SVWZ)!EkG&PB=Y9stG?;( z>iNDWdc&3Sn^)nw|Kh;6wl=&rLmM{UM{_nYEojK>TW*fliXT31YmtB1VvAN&546MM zpL3EN4OS=D9bo!Fu%6if#`r9Zbm@GcM|BKUC2H}feT9a5K>54PB@_74u%0 z1$X14;FLNefoPW+(PpiRfLR&1Xy zx4q}05Cnok(zScsYZRc87Hhzf7p-q_{Risc1W0m!{hbo|!M@}~uuY-rAOkiN`!9}) zTkZEP*Yk6_8Kcn*mY+**LX-vcJhInpEcmUd>!8qKTsH`=v$d%GruoD*?*6i*`lR5o z*61yxCf1^RcU<0Zpp6OeV#@O~PoqwW-u#ZIPCb1cG9ij;LO9zUe)7fW6`1Eew>N*F z(mIXDLn}_su>|W4>Qu+En&)eU&&oa4bNs2{ajkG#Ejx$UT-3bylLk>e61oloLG=ax zbjh%YsI9cFTBr|PR#|KGt4FQTdXLP_#X;yPAMLh%Vg7J>b1YfZbSjTxn~tG&TprIT%!8waez39<>YB;uRO>hi)5 zuWX7;D>7-vbRrXN8cFLaM7jYrBhdUx9oF`C2e7HnA50!dO#IF{Y-b*mVb+-%&-H}( zq7r0$hrxg+Fs1e#1^x01hd^#IQRQUo#E~)ffli5A@b1^x=&?!5))Xga9$X}iZulLskD@*9r!fVlhtfwZ9gZ@bf(S=bTuTF;3VI>aswZKZ4dq?5*!CH|z zk#**@phdKYqr!@pmwvXVI!z#%W)XJ_1gl)%cdm9K463r$-(mpiaiV$xEow-T-*OoO z{j6eq1_o7`(JJ;g8(ms!3_n-ysa26vi&j2I@2*sG)xm~H)VxTC`-bB0g?%jh-($SD zr#ULgBLV)r9fL~b8AoR#&xx6nq)hSJpg(1}=qOsYBw)+1amDcS!$lWcikO%t#T!#q zgmU<0{m0#LuE$Hn>}tc$WmCAq+TGr(;wTnXjh(<%IYGfG?2dN5^+fLaqvdu;h?_ ziU`oZ2PPv2Uc18QxAMa>;plbrL%YPv#?Sa-n7GDK1{@a1))-KlfQxXpCWIS&yXgCI9!H&QUl&Rcl}=q+*%+?u zqH%rpaSeMAp1t|$8l@xZ1&)lKO_OAu(M$<2%k=o)@%ocExL2m{@UvPye&C-S32aKXgl@KyKNfNT@J4^ZVyHZ zP(1#{aq^C{Yw#%RhSEtNcA+w0$6^KfaLGByS{Z4sSCWtLR_3@d#-2*pa(q z?7fkl#2>Dsa#zeZsRhc4+JD`M zQtO6X9~15b-yPSlXu6#0QWhS?J~X9y)%l1oefw_B70r+|D@KNel8p5<61wOUcBo94 zd=DdYnfxs3=|oA0APYT}^K1g(`~g&h77N zS=kP^npI&fa>-fAoPm&N$gkAC{c8`gfBgHX@|*2+FT189zk26NTftvdzyDzEKm5yK z<-cILY4yo_9gKFI+|qUKIvh~jGRWrJ-NCHbWy0SU{_HVANs0c4)n>QNiHMEbE%H$B z1(7n(dv@$emU#gPL){QWjJO_X^q<%NL}yoOujx}ey{Cll7n(Gl3KljK>wV%bS5hmz zS7+}wNOgT<_=sAOoQIoY+@)z@0Yi!*qV`rg=mV+dn}3{WH1^cy$>0&ixn1b_^9-%b zKsN!W0WlVb_D%VW3xz9mFrlS0)(HrT^4!Tx2|?e=i=&ZWF;vU4TK%uem!GBoFlB6u zp^*x~RuY=Y?Jx3x!R>-mVu0cuah7~ z#);TBkb#vu(#}3!H=j9S<+L<7;?NC$`)odY| zs8-r64gcWbL0(f{-lm(+#H=`MJvMuo6W%8_2W(%f(_&uHzcMNMrPWetyHh( z!h{GYSKKGUE6BlR+Amw;Fp0;b(_Xs;?3!}w<;_?@Z*uAzF<(RqSIMwr`7nZjGEqp+ zd%+Q&Q|+cTrNY$$n9DNHOmNQTpT5hT5rBb1R6pncINcKF-`REDcG^FNHI(3f%bc0< zn|XBK#^*TOmumy7GDxB1G;&&0TA<}2055!<w+G!h%!dmyhe-aSNQl>pjvHpE?UXTj1-OhZms1RXuw|gZW1Nw_s(fGpa--~ zZ4_T?G?eiTMx{ViyO>4d-W)vWUqeDcY=x72>8kFK56E=FaCKew%`Y@@bf78RMwMdK zgM)ucZBVEK6lF*=jZ_cMsb21;4ieL>>y8DDh&C}9rIh!t4Mt_)s*8_IeE=DN__kQ@ z|Fza|qWte_{s#Y;{m*#+r%k}$F|mIYFOJFf{jxa>KeDs|fA19$uJZkJN#n82oRKAu zb;|WaRL_0hgNwlKyYYRwZe|{hU*r~P0M<0qlPDuK>uF5;o8iEjQqK0R;a1JtwlWzB zY6NR={E*5}ZVxi6-(@{B=w=*DIb#f}-UHJxI>JS+${0lo?Jk`|R%?~{Ykx1U6}a$9 zRAEyX&J)+TJXed<#a&Zw>(E|Nxp@p6Sr?oBT!>dnx>8H5oz^%C>#M-W)W{4Mjkri; z)Q#9w?If>)tUm)e6&F4R>DD*QBqlYu?=TMS3hP7(Gec(fiL!TlY;w9j897Z$D3agl zC+X5anUWIVCmft^^%K^(6B3z*LAl1FJ#VpEIf5tEJ)*=fG%wBu%%q1726%-C@WVu` zYVeVbFt766o+?|jXwS`w=~<*%j2BL^gLK`!pK@_VMHCZb5@Lpr;0n*P<=+0%G~2Vz zAw@j=oo1U|-nVdMa2F?Q(}Q0gTy^gbg*%%)P80PPwqmYn)Hw<1A!vfqeJlbAmCsbr z%CKv-$8Fu5eQI?52$;JwU!%G0en0Xn_Wu1J|Kj)-yT}3Yagr$>Rko`;;0?6(8>obV z`k79*t4zKBeVOPy!;UUN(e~=G89)I1i*@6C>xV5zD7plYIau4sL+B4CK`NM@Xm8>u zqDj}U2u25>CBQ)GG!_TMdDLL{i%#SAxc-?1o?IWL<-2uPYbwx@u%C9z4cz-PS&t;G zcy7V_@H8n50rjBmP`f1X+68gjvnlL9R! zlP9lXTGoHgwXvZ!;W|0)HhWF!=BJw!)&7^BitNT? z#luBh$+cfnlIq3h;{i{t2}`GyfienB6GuiRDn66n@r9Bm+g3g*WwHfV`&X9^x;79s zy)>eyxkoCs)YfQUZ+K-L z=Hkzb!mbopzl? zt;98=(QdYHjt`G`&4O$Q9#2$eNQqaUvikf}Jd7@Sn?pT_XOzpZE04zFbP%)6gu67% zjM9(V@)jefw2Oshs_x24zVI7(IhczfHdkG!G$^t0{IgMyncLhZW#yBU^Fz963>wmb zwxdEyhZW_9v`S$?*aCCZNIe`3*eq0*Q0S|Af1HSUHsnQg52xH*b7@p;+w1|hQp#L4 zr6f`Wp{En+Tq0wd$C_G8*P8FmTGc)OT`<4<+xVJF-OW4odqWEf&NEF(9t{^nlg5~m zgcfTn2{5%NbQ*U7Sht0#Izi)BXdG>ks^B=GT-PH?=XJC|;#WU<7$r5^n#69IEsMXg z{G$Lqh2#BTfZ_=Uj5aAlDw-VgKNvku_~2PG=Cz&@kjspUGA}m9opImimW~HRev9A|#fjL9wsaj)xr^=D2 zEK-$O>JJuK1Y@BR&_Xk+d~W246_w;2q4ZCEyH|eBNYYfo0k)s7NSRCsXs!gA%B#dv(Nxm*CH7;`PW?8#%A*949 z7mwPmTXL}F$G*;z@cyW(f&yx7JkLa3R!Hiqn*PQqoJvNe+73xDPPY;f{|Jg2)4%r} z&&2?+T6i==-DA2?-Kd>Z;<)h}eP1R_O&8d&#p8aQA#c}O?j;+RG!xO0Eq^C%Ij>Nd zR(Gh|!Cb#td`+kyn({b~h-fsv70PmZ!?v9>o$Q+6ccpNo=)IglDx2?J84697W6e>P zmXa^>lDDeRW%pG=nOg+V-CPw%RuP2T=uPjl8S&w;vAlJYcF3e!|Fk(t!dwDzA+Yk5 z+r27!9hL-fcv-w3%|I!$F_Vrp%!OE4DZ=g+CHd}=afJQr25kC7*ElEm;rC0?{9CN5 zsb7FIbB6nYI)tvmb$AVo@TM?bIflbHA%LTxMnMj%QPDNHgt0f`B5^cZga%sc#!C8T z>z8s?Vaz``8u-vH^Va}R09_Ko07q8xN7>euqdC!IG`X)$AH%U!Q`;WTPhLO&(f|DH zQuE+XvK4BQff)LeZ0kZVQ~RT6&C)M|+h;%@VIkkaG3cw#?J?i1#~GqQ;2A2>(P|Cx zQ7&vbZmEW#QUz515pOSvI$6ns`7-SrH+@_!deanqj$DF?5rTlLmnESgDq6J3S7Y-D zVggVu{J~~e{!cO@$pm+R`APPTO`w=Wyh0+D9@G3u_JT^IS;%jdwk*obCX=_FbLw;J zxM}v%7d2y>2Ak_B8ghFvwXfy5L$#FkN)=wYpN5%y#}KiI1MCD3r|XU1vh-V1Y&5 za(B2HZW^lcXid3lfyphlrQI1!k@)*MV??~ZwVGbbGd?Hd@@`j7!I!n=m2r>D7L)T5 zCPoFtL)uymylX$5%RT%_hIshn!e25%hC8rn+1O5`7!o-UZh6QNpoy{zxmiDuF|KU` znrF-{1{2Vw+96e=N@_1OifvKB5C+SM+9l2w*gO;d@Ox2C z6e{OZ!$>4XzJWxvmCrgk)^}nhWs_k7;7h68l*8I zRLB^XQGdMeXF{hz8)6#24nSffzl+W}jXNS){E1!xuQUyX zj#SPX`NPv=;#Nc%-#o<54~l?!ix$+7kvnE4rS$EJ%T9X+%r4creqlEB=gTtvnbbki z*DfKi=Fdky_4Wjm?-4x*`WnmchFX?0G#eG zAJQ3A)l|e5d{F7e1DOadl0i)%`OgYtWmqXiOPza+fYzIA`S3DP-00d9$((EC zOFl)8>JhX1`uH9D?Y1}Q#!&lcq)f8-TqU(bBAgkS!Y2KufL+1;{s7&sY!w|)VFxog zT#k-7mu<;J(#@fk>YI_7P$!-J_5h!~ql_9_0c!D$=00QE&bTX__5GJXxW#zS3$R7i zqy_BAq&&$3(a@w9$zlyuF4cCb&BzGvttMgATf6nGLZ%vXOVT@#{7)@Jo%J5lxM_;X zlxlM7P{6{II5d-L#XxmUjpZiQ>uQPe0yRV>7xHpi>-K_n$F%q7x4m$^P^~rcg{o$O zR3sM@s|`G3TQyh2#q{Zoql(y`YYFYup_HwqYKia6tPW{c5v3B5!wI2y8sSV(1#P}u zicBk{{(2kf>P8tC|Ou3vSYG>lyxG^!huZd}np?777_f&13DQw%hf> z4fAvJhd0Ni^uERT(UJHi-BjgfQ?+Rt)EiJ`6YbLV=iz+6i_dAfy&Z`ZY#wWl7p<-? zmyk4fGU*84P_}brhoK$TMosP?DJWlq&Wa}Tc*??;*Qn&%x!^+*{*gZM+{PlJl$Si# zEjp1O-X4ByQQdya%fhXzR7F3--|uu!xt2bfRmQ~D1Vx_D8%AQ;`l#fn624;Q*uXi` z%?rh|`!IS1%q+895xk$(3bDA>uq|EL?us$--X)LCt8~wG?Z#gXQbK(1Zi|z&M}p_b zi0Uy+HFpPFk(FYExnltfjj6nqigN))4gmG6N32(WTHcCu2uMID_r;ej0?fxbvsJx{ zN>Zzv@5w+{V0OO4s?$9Y8!byFcM`NUmpVzcuv)>FF%t^r+~gG4oRHy=8s!$b%zFJ@ zackl9dnZl|XS>cpuc3Gs7K#!mtztvj!=lqh#=!zSlO^O=3*pb++$z`39f%w3Z$~cT z3(UC+#(Hk-J}DqZtdTy67|_8t8R;k`*{ePPb3DUtsP0G(Iq|bFB~a` zyr+4pdb(+xZkd?1V&NNBMb~nS)JKwbfSmV_H2v9dso3xYW(+*faP*3OCD0@yj{{Jd z9qO1#f#QB8YmzBYjs(?(HZlGvamKJLg^Z0Fdq&M!T5%iSBb}7Y(e~sbY>F>sYu&qS zTdLCzlLeGGr9T`Ke9WMh@2l{oe6l5w}=O8Q710C7FjBGIzR`do6xRO znz_P~AsQWyJ$O98I-NxFJX>?kaAU#=6`eJvfYnnYUP}QD%i|*%28I)UEt+bkGpLzq5^TszLDX?$e?yj|3%`8 zV&(^Uu#NuMLm5w8U+z+!#tES43k-|4_&i&iXO!s|5@xf8n1#xOawa?|h~sZVh4G$% zbZp$w!Ue`0TvpFsBCrBdQK~Ro@SG9KNc&mg7A!rrIYB!7z@DIT%^^x8BFRx&WW>Z! zDTuBN3OW|Ztn5c>0l1J_G4w0K9OsMH^0@6R$E~%jvla^D_E=Qdw$974S~l{G}{`SJ`YBn^&5X1d2BEO_>efFs>V8f3zR98f` zTN%k%%s=#!z4(VxyWXhOd`Wsh@%Cn2Jn8&mEosNF?~}pN;ba#XX(<19cn`_QE}3?} z=au=r_-W~Zry^barpMPjHFOJpz<^ex!}G>kA!4MrOFKep&DTl6X8+6H$s5fyXpsCv z0Cu8^e3)vNr?eKutytM+dN`#+IzMX&Vb zw(QEdw@H%zsT6xxKk!!b`3fO|XTsO(w-K_dQY0h`N>aspQObOR_d6vd50 z4o)fr0KvlGr?)E!B0jCPqyw>8urSBC-MjRl2pxsAqJS^ozb0@K%z|Er_TRSn&`v{N zW%lp~piuco-#;7ZnCuD4K@StMA7_!&-twKW!HfwpBke`u+ng^YyM3ebIQh6XOTYH( zDrGXVt$=0P$b9Vi?hZ7nQ7lTT0qk8cZA5rx0ZCPdR9GZv0T_Iw_Uy%9iszpKuyW@) z2D1-OD*#& z+Uo%+r@u7x3#6>l6#b$gpOXmyirjAt33CG4o5py z9}8v$#pD8-VVo14hf)2f29R|6qL(PliYJfO#XhV`Ag@2sZmk0WN5jU9hoHu4LugLY z@`K}i9w1gx`_k`+NRH5{Ojq%9+PbGYd-)}~Qugo|3WcYrt8tM)cij`+J_(XPASS6B z58!QjYD^c~EWW$>;5(>xktepv2`Jl{Tj<&E>&jfrDdONOYO0&@Bg&nTdc7oGKXtVQ z(?JrSJ_Hj~qMlH;1{^PwT;t%Jf)EYBV190$9fwSW28~KoUA^zTJzI=I!zeM-I5z|w zs^UUG9(T6o7NOwjP=K(yKc}pMO$px&=e?V;*(YDrBh7|%pXelG*BoG~+G%;o^7AsXDW%w4v*x|V2b7kdEy5B_za4YibBHYL#UT?@R1zfAN5IVK zKtDYua`8w^p*R-E>}Elg>(hB73z#2IZ%?p3x+)gkkl+^TEf^jTHxU4m`xU$U^vol**HPRaUtT{t{_SVV`LUsrbec0XE zhu&T>un*bo)`19ZiM{@haOf;@+KuB#fnLnkG>wfs#tPX)3mo;Pmx*jrsM!Vpn_FV; zwa(=>RW>5IXvTMILHEoiRO_C0EfIY4q6M9u9@Hbh+|=miG!o+ts#OM!2J5aXiOqNq zVD)2%pp{F)Jd&nI)Eg#2#=Ayagl8+OIhcgng31UsYhVTVsfv@lAnd7>lc?EKoe&Wf zx!Mp|G?a6@rYLGmaoYhT(23?*YqEP4zgO_PFlwi z{1U~uQq?i2qZme-c2z(Ms4MK1-WJ=LZxtoG$PhisG{QTUEoH$dqQFq4tmJ9vgRtgp z`pnEKQ{5VVnqy|CwcvBe2D&gXOt2pNVpr|FEKBw}gx-fyLP9|Y`$zQ$`~Gb%Fy z&6p5jVNDKW+A6(|=Y#KuJQ}aX_{X-^#iTP*=~lkOBJ1jTxYVyqT)96y^i(Z9iPAnK zeHnD$(TM?)L+m3wP9GAc1Pz`NRw)XSLpIk0wz>jp{V}whx4n22-kX$~7>J0@5E8s% z_z7J3Z$IgF10TH4Hg(5~l)91=Lcs1{aybm-lia3>O%qwN= zXeJ8N?pvrLb8}0j)M3q*#CiDZ0nLC#FlsFVx`>XP#X)`DkDEV}++~g~_s_w0!ayFO z@lsKu`}__B)-*2Qfv3Eqc3T9I%XOjF0!7X-9&p}P$tlFqGynV7ypHcR6Z}4!*0&`z zWG+V9tXmr-Na)}2&o;I>)Xt?84}y&KF$&ZwIdb8(@G;jchb^=wK#oMyFNu|7Hv3tS z*OCZF;tm211&{JU88d!dVeoMh>f66@Ar3t+VmO3Ri{z%` zN-gHDAz}5OyqlKQ0}G$-i~Eh`zF&I$m6)dW5lcg9A64?MQY!}==+Lf^2E{FpyUH}t z(thpM%DU;mEgtrmZCgNsje^DbCl=w^_BGt?di+gU-iFz9mlprwKiEn;y9_RWVqqg z?OORyLG3)90oO`=CL7nivL*Wv`7sMwxJ6kRi})e41ef~Xn;~rx<>N^IMhI&{S+wu& zeC0UgZs^qyp%qs;ZxK8Aho;Ox)<&SVAPf5T=G>7@VMi6z-d*$@Rdvw)Na4eg1JJ;f zZ4Lbd2W#@)9Qe!HqDlv%p1cY*R(<{9bwu|xTy4KPN=SJNa1izU#jzJ7o^5FBUrft? z<@ft*=+8$<8Wf;y53SWpm(TR{NfYR=d;Z`5m|uT6EO!<=_IHwUi_%tq3Y%`XmAJ@3 zfT>?cQBV4HH;PcBy@k^@IAyx(DknOXeq9zZQW`Xt-Yi|E@QlGM>l<}Hvwnpl--1sT z;2Ky)m1{q#tlE^S^nUWMz8%6kb^=PG zY6n$DuE&s3D!~kcYO!GTu7QDZF3w?wCzr|UoEsO2+S@GI(mG?#Y&mk%?#GO#uh3r-1e7$) z+TJ-GrIf$I+mKl&swd3MtzbRZMN?B55njJQ5_k;Q?zvqnl~++cC@aH5;qQ#&3^i!; zr=3YqgB6i>-sR~lnM(d5yRhiMN9fxonWox4#*_R+w+}DF>t3>`klguV=6SFzBf;JI z`q#1Q%82W34deq7Aj}7N^r*LlLzVPb20sIB_f4r-NqXw!IsDDHJt=R%ddQ}V=0%hA zJRCM%nPXGH#L0rJ`=PA~lLK;8l$wBtB#QS9t!U59zv47X<@U`FWn^66axw{_XH|dn z4%*-k(f#oep~Ll4*d=SFizJ=iL&gf>qh zOVyDmoMk1b)AFrfBwyPj*@2iu9{n*A+Jv@8T%mYKG$hQ0PGT%ID;ABIF+y^KX_ORp z=5$KW>ph2`?$CW9`6(AfEYQ>sz{G@QH(&b{?mKI&@Xu=r3Z(@M-RKgL{J`+rIEGxH z@IDWl|0Skg( zbc`ZmCR#j+(8n!rf?ZVn(&DrfuIQsR%m1g8U zFTH-FepowU0@!&}_32qC6wI|D|E!!CA(auQd~sE#m2ZB&gR39R+ZUWz2IdgH->w}p z4F>QyG5;tD*yd=0w1PBj6$S4$(i7F5b9OFf>FjV+k4N;n3^OjG-{^k8zR?c^0C+h8 zPG}JJ8KYfMj*g{<9-E6^O>IhaDy=E2x_x;6 znjD;|J3C%q-t5ho_2cBWf`!KLNeIG$*Vhic39Y$dsS3cbw6zT>*i863`8PV5W!ihH z>(p2=f~Rd85YH3^V^t&q9?}Nf!LPy7+RJ#THlj>)zeOd-u`PwB~C& zpu}y{Wn9+yd{j%DPBb)tRH%PXbqmaw8`%(-}z) zXU4{s7VYq#GG*jP9+ys>-WUP3M57(EB|}`2g}JtUJ}ztJTe>db|9x_ z_l09_PHx4aGbL5+=0vyM9R0d8V)(Cl#l+y|ePg0x_Us}+soZAsXij#QUnlYlynUa- z%{=#C-r6d>o)@YgarShzs^I$bAUj3U9{9iY^Q-ppY~Ei^BDemqfBZ%JI4{&{GFD1Z z#l!j2Xq~F5M>Eq<#mrz!=KWqbFxa-f>$C1>*oWmwoD7qD{)(g5{F@I_rLE~2vHt2s zXVFx@Y~Aw!=6f5RY!Q-r`=WI_@>5BpR(;v9k6FV3DkLvDgI`}e%=R?gL-ZHtR!pNW z=8+`UG}cPK4`f>C*ni@Z`6Vrq=WeX;Kpp=x$g%-(Y_t8=GcTJcr6k^y1heD2yzl-e z!GErae|V8z{Z$+#0!-fL$TA>xZM}RB`hG&&Jvi`yajG zfA0N%wp`*XGm&1k9!`W6r{t%5k&}-{r+$x9j8&xWuj>A+q_! z+S+WK`1#LX_p9f~AL@m;quQMPm#+eN^Z&J*G~>E_&yuB=_iH822WzUGj9S@DUy&&O zii>JVW1|WRMQU92>z!5)Uz~Pc`bD8v)bv#ItU4)5ZTr(p?_g8BsULgp(5hU380#?u zYwg+L=5*xb_{O6wy#s8hkB*|FYKG)X>CJcE3poW~(_DT%#&;MA$0PX4qlBO`_1$P+ z_U{3dtG&`$a}xJ*Ha=#&8^XnufEqa_(5B%b;XiJPw|(-7ehW`ZnnJ?ooyfY#I+M}W6d^3~Dyw7UDBaD1mm@1qlF_F( zWwWq2No`h6^Ye!yFwS${=VOYow&hCVixzzJUX&ek%|$h~Z13xzLEH`G-}~T_Y-00^ z2MuKF>;RQxUt?3~aV0ZuV&@f#9X>u7tEW);&IE~jd2~BE zST~~p`%25n=JzPjVHPZW!5YULX~#V;p4DB$f~g^p^NGaK?rIWrrnj8TW&!CkvD@dY z-EkP*ve#)4yQqd2d0lKQH@qINv@7KvC}h?Ft)W~ol{j(}e03aMNo=K*Cln8K&1`Yy z?PjAGKoQ?CacHJ=!^?QY416504rZ;LGZ%WbeC6P!6)+`^g{d1?za$Lg+iNEb)M-#KUGm0Jo;`5=IHyn}{V;u<%bt!UUIweREB`#`yhz)D!N zwtA_JKqgRdN5_T0@kpYxmn~db(RR+rO5%26rF7fZtm%$W#@c2`d0OAWv^I;&lotQE zF+*u6IY}>AfC~YBY#(t@kRGH*p_V8Js-Mxc@N%{^Fry0@{F+%i2aR5JRukEV5sY#x zBbLZz=3$_NF$a;Aw^!{F)$e%f2ry14wZ=YYlXfdq#IysjZeZ_}Nuaj6>au%VSG20g zao{DB(X!?vk43;jicYIx!A;u+X|pQTFR}N`0%RCaY=FeZs`IA-jJ#w8@qXWnZDNI|OA@#3ml^>(vC*PwrAQTmT!rT;rg z{*7DzHDK2-kwVns%*(+y+vq~!OuetP%-%6}5z~_!kndYZtPZJTQy_P}TsO-VJ3yVi}o;Dln{dQWt61 zyvP(ORXj!=H%~chh^zSKiqua#qNc?T8r zHTR|wRJ;Yiv{mWZH34RnYOJ;Two8gPNjM-C{^m9eDoP=_f@UqeI4 zHfLnr!FK!XV4M>oI(K7hWXV}T>V}ViPq1UE6D=ye}AE0{#uQBc`v$w)_+c?O{S!3N*;+->{?#F#8FB~LvMZMt! zJ>h@Xy@`;~hNNh$%*ukIdXiHOQ`>WXo%Rg-JBMW(T0axj3 zBouX74mx^TDEl)|CXtDR-6(}QYgclVk;q>EC=kSW7b}uEPlvw>cJDDOjIuWLyq7nU zm@|wL9@qW-C6y{-b-N@+q&3-wik-&ad5a|H=|BL_K01GJq1j<&KivQK!htzrK48kX zYL7u*zgOaJPSV?|JAm{Uyu1-LlSDv-@`On|(Y$S+jXRR(p$5Vilpv$`A+^0g!0l8r zUXQ3|qM=HO&8qz<=$sSGEI}!%K|=}JP&uRLw7t)IUigg-$NjiPa+)TwEkQ@ERP-XpcxVR*3TBBs z9p#H{vEQ2cUhYLq-4Jm<-d-qit~~X6acHNEbiBEKPg`G7FG>DAHn_cAL@-6JL2z?L z*&wNe-3zkwDCKiHdqDd%AcA@Sd6fUe=cTDmlJmWQdxE?(Uj?UhT>@dr1t4a{rUiWb z?h!WD4K`|7;cAr8)#-H`q2J^WiJ$TXFKc)qMjK%c?+)ULgpi%Bw>+c8Z!R(GdfVw< z)x{Z$tt7gCeI*Q2Z>9ebQUg@3iFe;3H>jRUJ26}-?yD{?37l}&^5^$3_&#AU@|pLY z#IQjLrSWGW6^8Q3JP+V9O=&nX27xgM%e~wjM7%F}KU9QV7J*cK`)IR-9}S0bK$2HC z#Bx63B=h&2_|~4#J*Fu}eNfyh8MH`8Sy)~BC8Za7zr#MX>@)PY>IFnJ`-ij5Jqug5 z%KM}=`?2MM9!bldnP{QPs&^trcksYBVnr}BGVh%E?dhE>x|j2R$>f*+Nsd%)|A@l8 z8MUC9om{*tSdaRm_Zw5V)V(HOZA(O(hzYPe()Cx9-G56`ZX}ES1zvh<+OYJ-vzu=;C-aj}??0RJdM*4$7dM|t zr^5ncg{jqK6Mid?Bc;Sf6dv6_-+iXQrrgbAA#`T%5@ z|F}ofnr~cEjaLlgW%6_QFzk%^dZ)AX)7Y+gy~6SCU+P4*D+p|rfN|cyD&khH8Vam3|f!%{OQ8Kh>%;d9t4v>mN z+bZGa`=J%lZtE(Bnp7!Q{dt%$cor=S=o0spj0!a(g3)7(*ilfqPfSXitu=4EkV6`@ z(PMFtMl3khW2shhnM?6)M1qMzCUvSZ@%_r|qwqDQ9{FzR)uMt-sOuwqb-FgDE>8aD7EMo35q!tfw)Iats$Y$eYZ@PU;|j6!;Rbl1`VfPmzrD)=w72AkgOJGnYO zdKCde`;rA(8D|&X??-@4&A%EcwYq<-yO$vJc&SXXMK{ZO8>*r(i^4!3jOI3ofZ+DR zqK5)fUskCKOYoi1yLZxDR@VAOxpRUjU~BW`d!npBV9fAxs*1+|w9=uNpz{fm;*vJ_ z-7|i`>fla2FZneSgzh9uR!TYUB<@O?`}mVY)F23`Y1W`gM;*h+6=j_f#{0}MXvf1w zeM!c3==ZX%H+5@Fa=(pF7oXCM-H2LAo?MuE0;u)PBYcRPvI=?s{8p4+vK3C^iV)a< zuYvc(K3r=I)1k>I>kz4`O&-xz9mC^f3nlth4&Thl#9zpX`XGB!l>4I$IX8d-P>N^7 z+z-bpq(e5~3cgNC+|>qfiIFK~AIvEHeLc6Me}spsdvw9w3jK-ZR3|3#Q$}8A8%Pj< zT8}X!XTpFAHYt)=b-AUi%gj62jCy&0!(AV#mTlFhS_tHGT%5L1@yOOL&xE2VU?H8Z z!WZ~KCd7g_TIt`82I8BvdA}8L$2y;Y zeEGQh6ODf$#Xrf`WG8BxEmeYllFj+pqb!aJkq-}|DuvQdyn;KQ2FS?G(O5|c%}cKx z3sz?XXw83{C9b{|qhC@i(~c!6+9sdoD)~}LL=MdAK1LM;u)oqD7RGUci6%*+o!*73uN)X@%%sh(tm=mLw5p2DVlAn1-MS4NQNsYC~hS$ z0+Rk2K-JQlUtr@}Ud8|B)o_ugB5$(kv+D2umFlkg{pjiBSu}PnopXX{;&AD=B|Az$ zQS0*Nj^7-6Ywz92v%DOAhKePQFInNoykd%n)SPvpKSJ%#tz*_~-*;I_CWXx#qqOqe zxY%TrQCGsQ4tuU@VH-6a2Ub$Ra%#ssbuouIVKW;nc*23_AS_&7vfs}D+VkVngD*m7 zN~JRicPN!|;8O6eEbRE^y?zK`_#P_+$g4k&XY|@vdh}>^!i4F|YWdVB{%qi5`>Yn+ zDrM_S%8U)|?kepxudJ+bNF{oqjdcF(`1#pBr*^J;4-Qa>WgOBj_dYN+UhALrTA@wp@TW=>}Uq-*UMo=W>9t|c&ohs4U)Z2k)K;-jX!P0>5-}O5; zz`*NT)Iajth;mXdzgJdUj+mpZjOYUN;`Qcgn)0jW#?8LOIqMnX*wo#$Q*_!8a|kD{ zAvIuwMiZ_b0VVq$_Q7d@0=HN}E7Dq6@J<|;od3q(JXE2~pC2XcfAAHbp zAfh#J^RFSF-K!UdjJljj-Y zU3m-mHeJ;fI+sdUon^c8*HjerW4~%oqBA(4nKF<+{wq@q2*s!nqZ7=Y2IJ&FUN)5o6*mET%gvJQi zwvpV~0lg+);FvYKhjxjj8@}CMk3=tLJrd!J;Y)xXX`WpD`yKA0-Y+Iul8exS;PrbX5>_4L|HzjvAE==eevnNGk-qZ|n;~s7zDmNXBSe~V? zYwn6=S|B`S8%Pj;-kqq5hh0;#{+T1E*QNh@ulGQYHFr%!la1Kxdd}RHI7y5HsW2G%H6Rqe=&i4Xg@!g8P!2NTPGzcv4Z?*3OX7XN{4 z{rmm!KM=|P^N;*zN~#>$gW^+%^zsm|8}1%PSq-}K>zFromuH{Yi8yvQ1AqeSU5C?8 zWkPzN%2@p3&_7vr22DJ?+U61pW}wbLX&1?leocezlkSh{LO-XPs2V?5yQrx(*2-u_ z6^lxE>T^Y8L61_TD-VO@oy5=4F29dY(I-y?ou~4bg_do%Vq= zF@HP!Ej`%BFTRA%!bHGCYr<0FId-4eUk@xNeC=<)s$@T#%&U*F9bFawG-$^0^f()! zhge6_`uj6M?DVQaBN3+8+d^_RJ5(d2U)N^xS$nb5r3hTvj~Xr3+F3i)!?z1_Z=bRA z_u30zQBdQyfmVgm+@z9W=s(yd*X9ILc`zAwgN|QMoptewXWLCY6zC>2J+V5z>Fu`I zTafc9y34h&GVaE63Y$Rr4!?-2aW^mpl|g%PUsO3bWi~rV8~_r>%=7!xKi0S7BK&B7 z^pGwzrVdS$=yFa>MbFL8n@nJ*cb}dZ5Z{hXbbqCV7%2tH)+-?m~f%=9omx~ z8B7!0{o@Wf=!{GfvSb>ut*^R}5_wiYGX6-LeEZ0`b@eCNroVX+O0$3C3ttxdg5)aapZdY@h2WL&u{)!ChJW!5LQ1&hr^0BVLGvD499Z##anv(e$n zFi_gIck;H0g1Uj9@1#)a*bW=D+H3`n-0T@rrTIFmNhQ)(0 zLWATh1Bf!2DGyNlWO;QFdYC2l6IDLkdgcl(!}jk(4U(1z0Gj>m|w zeg~^gPl6!m3hU)rs0KQ`YEu9ztaT#tY}kVDX0PIQ0dnN++rIU}p$z<3>h-OwzRAvT zT)G?n$9!C3#GwQ(;)%>V1RtnW)kZ?mD;~)!SopLpf^0~StI<(%JQs0HS=NQ0yxiGa zjTUWJotQ9w_T-u{yB&XvdF?!tj#a_f!$1L?x|*H)VMU}$d9`VLn@4|SF_ZFiuU4wG zk=rN7V|LWn)jE}#N}oAzlRG~Y9%qcHroM?u^rSNq7~+G^Z6(ZZx32*1d-dp$Bb564 zWASUs?`LZ5=Odpd+saCAeF9}Z!hHKkIk2U9HCzp~)OM0sx$x=s`j*!j2NXJz|63|C z-=XD$cLLpzPQf}Tzsv%hps7!E)P*7UVh~T~Tq1VyWEboI# zgz}4d0UKi-^0)P5~IfI7>imrxfhNC zpeD9&Eh~H?h{8yYu6ROrbnqwyYOFiME7{dH+=R~XY4MFgjHEmre~VO=cG}eAvmR_8 zICMX`Y+Rrv(jLmHDw3uBsl#+d8lEopP>)Y`595D&va``P8fic=m_9fbB3v3SK+hZ_ zJ;XbUxmWEZS>3B7m(3oS+zaA^MNBCKAftU5uWmmq|G{7ch5)Nu9#870l*c(2Q9wKt zpA6H{Fv-zq?oS!FH>Cm{GudV5W|d;u7j77VCytK>$Gl#sWK`u;S|;YD^OL-n>D>BQ zeB#D*jZ|&m6&R?10RKR3y9y`gc(48Fvp9}c5i7bjS7qzZgWzx{_tblQ#iEuKtQ49e zAb}Ka?Zpl#!*g0rf!!`UwxGs7*tkBlUI+}DLO9a{gB4rvWm2ZURZZ(pL^U(+Xk%A9 zH?_97c)BmtAnNNk0xm^$6Hhu;CTdO=S?WSf({=T^nQr6-hYyuOXsS4N2PaR}9A5nE zS?}*prWZX5Bw7%m?O$?S?m(i(;XWMS`xhFL?r(p6TeC}?*&|W>Y*AgdxR&y1?SkS3 z-sy^mhweE)$$s#WI8H9K{J{XuwyqQg65zi-%cCo818%zVqNr(!<&vs7*Sf7DK8KNy^EBjBKAWpQxEVK5G z2!I0|Gj2Kit06aBzqms9RI;BPIaH!+9bmEilPu6X@h4e_I-9P(+g88wv4m8oV=Wte zdY#q#qTa8z-Cv{0d+|4o)(v@N0P|l=$+vznKU3t8#r|qamifi}%=_-|Bp2ckIY=xq zaI^k_Sqg0~IXx8WUWRaE(P6j@++sle=NcZ<6!|smrVkNcQp_192F7^C2Kluzd?=< zB&2xqG$r;*3JpE|6b`-WSb4>m1tnxwpaCTTTTEWRSk-^E-#2zUkEJVrGch9SScqZr z(q0YRC7fT*DKoOHrjWA;uK;X{DsAw zFWc;V+dadYaSt||fJ~^jN$|uLNu~G8EYi>D%>;EzuHG+*_tfPR6XfLP!kLg*xaXXi zjzHu;$)E~w#na#IW&cKn-Ymp@Kmg#V(B*;SLAgz^cacVhO-%$)crKF*fudL_4fS1n zrLp)SwkaH)&P#$0|E-ehjQ4!20gj&^u@Q(|!rPAo`T6pNx_9Qt--PViqb@57`%;M) zfeN~!1CK;ECxQoV8J8#PN^6*$1Vs%OON37pc!Gk$glvpb5zv?ioo@lv#WI%>P{x>? zu!9$$e=VP1o17TAG07(ETJg=z;~G;GM(p;I0Dj!=dt!VOMynpx?JwtmR`RP}FJase zk(Mt%cnPmg10$0RoAKG6rqzyZ3C>IsAk=VkBZqM(Y1r-bj|vRYigCTmp7OW;rKs_6 z*838KQI=j@pVjRc5PPofsqfgq9Pl6!;yC2EUyjkrIFQ4}-T0r-H4F^?{N!Az->9LGFHHL8BxB$v4$LX``BgMh{28Q(1Zt=>8gScy#18|`~+ zz9hb{KBU&qnwyv4%vj?Vs$fQ<(+2z2A54B!{PY=4h0KZvW5j~$a*k?+8Eo<{dGJ<8 z>KFh)fC20HrLGBXTo6HY`fYzw>k;A zFKuj@n1zQKJ76_gaTLrqh0|5b%sGS|d0Io+7EO}W{(@M3_pitMfB2PuZ(EaMha9b} zrZn}wxo>JO-mp+mL*t1^#8nLI)!_ZE%k?_HJ{YNz3DNQs72NI@F*E#0wg-(mI|}gvc{-dWg@<|A{uyTb5nQ`du^hRmon+MeM}%*Jn}0|u-MkcT zyw~am)F@c`BP`$e^d}iB=hX`>pl4P!*lc~bKQG*yDR~|l6G%2k|3PS?LnmM2k8t$X z$fs77FE3DG=J6Xgz`?{n!+&P&$!GEAVl^+}|6Q}1J1K_|EKk1S#(25fWy`OWuZJeA z%VTtp!coe(W<#ykH^#x#_h6zbJK{=l#9Q_sW~2iw;!wnq$A;&=Ie%JzR#G9gt$Ei) zy@HfGwX~}jZD&ko^k@pLkD9-x7}7qZn5N7U(e-mM*{t$D{wq42N+qUh{*7@x5Tlf=U7N+&-E?F!kAOVrQF}A5R1GmQ8A!Wksd+td|Fy=UAb@ z8~ciuLZXTFh<_8$-D3+XeZ{$I5V4%NSNDxC(1dRGo4F5j6bRd{{gbQ**uOh4_U%## z!X0e1Ft<-cLmcm%R{w}J`KDA^kRO2`;uQ_WSY>VJ#Jjy3ij`EyyBa_$pBF0htMltl zFnPw?7|Z03?0VhF9Wc`DD9b9!_u11P!>~!1s)_0%!P@FK?}h?Lx@FpB31lo9W{DL$ zn{sOoJM)rBs(3unLOsk(m|_ZZF}H;fIpNWv8uKh`T$X0c{G44+K^1bCQ|WNy_p%%# z&r7irR$lq?3^g+ARZ(jzDR{ck672z154v?QBcDq@-0^*!cA(bAY}G_<8<}e|7QvnO z#FOcU?DVzRdv_`*2T5F3wsP9}big5OXW0A>v?Ub8$gVJ<<%H&9513?H8(Ed@nh|XY`z=5)|kT-m#}i66=gneI2lwS z!slH-!U&0XSz`|$&pJcISbfCSb{wk0RyhL%_+Ew8w-m z^|o%Gs<}d743_oj9-#v5aMh4V)Ap8FvPARm!rIz?YIQDTu7IpyWRd|=->vHwOKq5z zEn2RkjlDcc$399evg=Z$>xj(;J>7wcL!{Q%jQi+UI*Dri<`H-M);01z_P3NqNMbD5 z$?7`k1g!DzSrJ2vz-Gl*7J|PM6TJp%R7E~i*no?x61@80Lc91P2Dz9rrn{tp=&Dbu zEhrZDKXc+b*UD<3Px_h-nCGoy8yp(eRTB&yXc-wc0|8_N5VU%b|=n1tv{+0@fF zo}%n?`JddTFu4pGW)AjOeBgHzhXpu7>^P?bfCBPGzhAqzK)9Dr^|{9-$50-Zof}(D zJ!cJ&Wnyeee8XCa)7GxiKHeJ&lI&}7oFt}CjGtTX+Pq_W=S6sF%fKj>Tsv5A!4=5A z*b18;YzVtjHSbkZE1sJR_+r9;dH|pa3#j|c)bPKNpZ}lvg4OZ(;ULa~KV%NwE|SIw z%tuuwF%rEY+iA@UlAHB~Y-H51bzTh7b#Wx?~&WBkizP+$9OZSMoRQw5fK*ebD)VmO_ zr!ueNnqJzcf(zMHL^_MT$YIzOZSp}79>I~9`aTmAQA8q9`Vwe+?|5fu zuB%B{hrb-@0Sj-SSIT(bo>@+avOY{cF4$Dq>($OGdnnYJgxf`(QBDPg=Y%9M#0g%( z1+&Q6v@X;n+`>ep0Gv|950^IiOSabc4$nsq><4eR)u|z0rNL_|`L5C1-f6J6+cXcf zyef}bQutroy?0bo-McP|pB)7S0i{bIK}tXpLI*`^5?bgGia;m=uN896%a(!@8H``-0O#+YlYl{w!z*P3h2_kEw| z$>0`O=(TdYgSMvSD%xAcW1fqIH!`il!WYCU^1CCN3;pL>fqDsb){Hu;Yy3(50H z9XtruL&0K~IhgZj@Q!m*jz03p+`%FJtFdL>F^N$zl0*3Pc$xsV0KyRB{U!wn-h3Q1 zEe#h?MNGtCr>i2{FNtr=XVh2~v&5Ngoz7U4Gf403mk>VVwYd;o|4ii>el6Q?2CtsR zZAi_;w?4l3mQZkzR05w#==y;DK9`aHHC2`_^JN1CQd=+4?{_GKYxpwUgmr&o+uV4n zh-JyXQ6|+KpmYPUnDma>M_S9?=F2s{w-npl$M@)V0{ApRnmU#COW zfQ@YB*|)FWX{8_I$XyOYGUYr%FUyGBQvxR%+|F^aNwOomcP1zv-N5#KSgGmQ-~yPW z*Dp1t6!)Zz0G5NnN#f$3tU5MGqWRUkZRIJpZW-JGJEKwzul}U7{MH;0@QQIs_toZn z0lPpXv*1Fn4eV2aF-g&v(7;4&k8gEVCv-UKQORiI)zo=plo%2KCgdx23$#m=HxIah828zRJ9>HieAh@dvV@v5xT7i)%;Q*48GMh{ieb?m?JA& zr?itby)OwT&K*9&sIVucK=aiGUx+=r!gGb9sLE7{VZTaqIXBGy_`;)$Lyy;V%?7X6 ze;X8hGq&e2645CvQ0c>-maS3WMiX}$wW28uJnwoLJ$G~8(0YbVSx9dSr0!V;fD5+e zR}|?NyJcL>E?%81qha*;=k}-GRk4in2K_t+IOUYvu(xc><0WNP40McXkJ?(aSIuZ?ptX+3wL+D_9=Q$ z9weC}_032~=m&;#wdPLqa;DLoxOPPt^h$(#$amFu7Dom8mMy(srbS9>JHNz;J^CYp z+e`jlYS4FUcEZm#B4>Olh{(Xa1=shUIpe z_`Yop8WB4pbwA8EcGkD@bh-rv4j!oJIfNP?`cHn)s)Pv1+C}!3;XrC}j7Vxm&H!Ag z-zU=y@s80z)2tALQO7vW1urT6Onr~9L4Z}$)E3x5FpD2X_Q}Imo~w3>-Nnf;QA)eg z`MoiOnOj9{qsV>jiYws~EA!*uv`~iEzxhuk>v@+CYCN&o<>?a8YI;nOjDmj`7Jyw

a)6{IV{3i8OCbwnz0nPE)g&cl#pIb!ZxO~AD04o_j zdc8dtcqfJJVql$K{X7-tN%VPXpl`nw|H3?%3;sz|eiHeXR8eGr;wO>iA?dHfq>04n z=Olj}EBfnikBOF?J$LcA$g>5X&5MjLSEB!K`nCDNVU~zPVxEF88~^nfV_gV8AN5n- zJ(g|h#ck3@xWDgU!O63K+eWV?VFbqy^XjG7|x6c9P+JePGiB`O?%3LORAn zLNDO|pg$57!4Y>&@ZJV1DcHLn=$S^c%qrF4vEG)c>$4VU=i`}O5Kg1S; zo(u0d+}^o!L(vZ}q%8G3<*eFi-^~ttKDB+>@$XK;F|^WLVwI_m?uCW73M#ub%c|OF z0Ewr65?RM&W`-VNqVKsyHW%-qzctq@JKpqp+hr{F{1y}G0f5EcjxRWsD#vMttrWdn zLzF~FLL+2_{6`|8;YE7EY8y;B-#U=4Dt01IBf zo%0)q{TWwl)!m%q+p#UNU&`)&la&=-89K)78oKffdC=G!MG*TsJx#RT|NJCFrGu9VB*5YR=~nw+uI8Vgzv%)J$}SMR z2ndE;L^=uyE79}nD{DB8yoN;UsVt@d*pdssO@^e>7q#-|i|aw%T@srWg0WUImn;|*|XMq)BP?Imsn!D^(T;}qVNWLF@>`~X=Pb68X zgQ!46bHG28-n>e!K`RKmt7M0cLPDO!#5w+2?6~tU*~I_A#3m>wGM(SM!w+Mh(7_DzRW8HeQ^@M2reBJQ-qEKRU+H7SBRB{Uyy$6-Vk&GlNe z48M>**VGI$@AXtL@=2~0{tYgPe_ zuyFrt3v6JE;nww0W0gKBZG7Z%dV&oddvv^z97{VnsqBeOIl9_b{0EKnJ{jd&$IDe> z$jXLlmi0;z&NI@}@dz=*lG66h97XOpc#S36& zRRxn4Q#bR-z|F4m=XoTI1(xGLm;>$Y_|G?iNtKEQVhoz}&bb4sBV?#dwR?;! z-}yN`XhpI&@hbGY!_o5_AB{G zL7plG@4U*Ha@3qXd&2s_#^##WWw^?{w{1~*WaJAb0>=K;8>+8$dc5IN^IKrtWLO8V zGvAKga`Co>=%(1+Ijud_(VUK;$@*&t)iIA^I2K%;;mxkm=)Tk>j_;F9*+1ykH8+1+eZKGoNUr!^Fq2?bojAB?;yBb|7q=omr^m zoWBh(-Il5{Xw2`?25DMnKOLTD0aX$rD?pz`dT80GXi<(_9Tr_Arl1|f)GYM2@5Y)B z4F?+59^A5Wd9=W5q)QfW4Q@8_rdmbT2oGZIG2*Jx+r@HJ@&)cCDNAoEot)l0>(7x= zHSz6f;rSXd#JoiMND*c_11SS!C}A_g7SX#ZgGcL>;{y``Fca8hx-r^Ofnl z1{kjrnj?f{xMtIzxm|^sE33Q)XIb z*F~=UX;H~ZVUvTW&ESw>V>=5dNiJVKo-i__=OY*mB-^zxdt5GBoo~iT?^}vDCI}P7 zTzii({4S~2Wp|XHE+|j&u+vFqDrv#UCa6@6Vr?-K7XIC#ZC9r#rL}`@u8;uq?u!29hgQV$nr#m&49=$H^vxzZ}!V3Z0`jd|?P*n+L-CXSODfk@z zC@1*kWghPD=K4F3i8xnrEypRjJU8w(nrX@2N?si!Ye*Tl1Pwzp1MER+{?eLzpf~W#mHo)-VMb9;1|jyT1~MJ|^v?Nm^YcE9ygLiAYRjrmRE_j_~y09#HSlIbEG23a&)`PjFltj06S)nc%J(+&>hLe%HX?R$0vE)Act7FuL&pT0w zmc?Kyc?o2|f!;P|`LhX$tD46Axv$4R;iaTpw2zF7++L50PF%I0u*Z>eBE>OJ&S;b zXcnJ5j>H-lP*D!5R9n?DbuD=-i%oq>$C(&mG&Rm)OCw`gfz5R(lO{K&xw@9eHa)w& z_h9JmrB4{ID<0*l};hS-5g8JGFeou zi&XEqScK0j0}{&Hby|DwVNSZ$ro)Dvkx|ON&3RPhXcdm5B*;XBKag`e2I&yVFG%Zl z4{`fC_}u~q(J1B-HS)%IQ|*&(%=Y25!>25c!22SiX&~iuihedI61D1pT~c@|v>EN@ z=#%-aH!;e{6jv2xq}aZ-^}q>~c+&!60D3d$JP?IaSPG1-srE}Vj%xxMJ|SqQ|BcxS z{>c9@L--%Zimt9~RIujZ%pL8rs-8{N2%B0)4ChyoRMwf;TB#`mm7>Wh*1gTp@twRp zD2}IvxGWm#mXVhw;&n?A9LT1p4=7;fPM$XWtHkvvh7L^hFrWx~;(&X!0T(&rG^CzV z(jX63Knau>T3w`0ErMH@a1huPmpg_Zt96kJ%HfY!=^Z=bV|wzuV)NAMYOo8QBY86U zu;|cOykRo*Np2yx`)mD*K8}Dye^+TH2=tf0VheOBX=Surb2L~=yGYp}H*B=1*}yc# z#)3hJ?%LC=IRKO_@kcd^BZ5MRw=%lXkTdB>20{b7HtuYdo?o;;={{nKX)T`#Li z8pHtzxfmNSNK`s#v^Vo1hDB4S4i9Ke&VQXv9Gi0k-(nDk#$>OgRrE!FDXI?&35rb@ zkq(jR!r5VfS0T)5rwN+S(Dco%%=?QJW+P_bP+B_ledIjZUF>}ye<(qNS~t3P^uHni z=@A3hL(O>UT!}u-*S17!HsReZHY{x%G@{aDF~{Cawr6l+Cob~4Rp#aM)yi)UEYkKD{L!iHkDV6{Du5)gl3Qev zA$#iw9rN4Q;I=$PHcYRf&$~cf+X(97@-F!8EF<<_RJq+lESSvI0lNZwQ|%7-d%6o( z$bdkyUr(`H&ElQ2j{>HmQd#0-J57o0?)g2OfM8#R$3#cXPU5^2Q{#=+iW!6huFJ9Rxrx}= zT}Sv)j|bnpIn5lR`8hMs9s&lkyWMz79@}O;hn_c`s8Zxy=gs}FD4;=lB>u7!Qo>e* z7y9i_XK67^75W6dwI78uhu`350aLeCHSWtE3^N5BfDd)UihksOG#(cjy_-X^4!vCj zj$=5GMjF|rapB=31Gat^sotwO%v<;J4inNZD5ZGlzcfF1B({MJYc}wU^PAQKRlAlB_BJ+X^ z=3p%&GHgzw!G|Ff7~NKR`>$T<>Te{^e^bdG5I4mbt*ySWy(gBIrBfNs7^|fgez)3o zVJaUg-;)>~or#^1?~OE*sykw;92fct&%|@rdFCfi;|l zGa3?AfXoTSYqT@6E}9?3X+mOmhsDg(^XUR zOxtz%xidWK%LMu{JmIO6i&_4vg`{@AsN_N^LzdvCj*@`8z$~f7BI~-VT^md4$rJwL z(Z**c6AJ0|t$W`5>Btb|9)_ElnAPXqW(;nPw< zjyy~Y20H%k1@W~Nanyq5@;o-%Jhzo&VjE-gNGWU#fPVG!Op-BvQKMWQ%%Fndf-}|} z_M8r=iHSl(B+LD_iGo1g6MehDL0THoiY!uWoN~Wm3}~-PbD;j*J#m7Ce8B0emU_R~w12->d5}8xO6U7Z_%*)A({!+0%%{3mQ6wBgl(COiqEI-1?6x zJ2SIl%Jw7nZF}oS(&#&X2->qb(th zL^{#-GIk8UeBnBt2^V)TVqP~UzG;S1UDVU;wC4OlA@HG!r9g<+-V0O=dFJhKwQ7~T z;kd)%HY|ir$jLSz^}MBu+`J_x&AKR_Zvf;VO-pBpqMtBEaFjC(-Q%BuXlhsb-_k-b zPTd$<9GLvz4yceY87)rntKTQ~*5VPJ43P+dBteXIr|C7_$ZW0o0!dQ_so1nnBGt+T zm%?VSxa)>K#)EKpr&EU`+saXd=O1;Gaok2Z(o36t&2?h z^=>_Y2BR&>ju@r$kzR7ZV{v7uXu7&_?$ty}tpS0fW&#N56%B z59iV+$2g2~U(pgznZb4-tp+V>)>AzS%3e7~(rK>feVfZ7Z_?;ioPnDkQ)e6TQaRr0 zZ*}^FK_ka(<~m%rXUbest|9AjnTyZ+c^ZrA%F4>&x%lB%$U!kFl6-nuU>BrsRdopb zfDx(6DOByZnbFd@ITI~kQtUu8!tZNVI~6kZqihYL9vGY0dKQ@RA;sa7iE=A!0#oak zd7O7kDn{V*YuWY;>Mr*DvSV)w4$$-ZTRi zRic6Du@O*SqMMF6Gr&9iOf;~$^vD}1p|w?AW;_Bo-b0XY8@dw=OAKt zwsrJCm3sJ;-mpWU+x}s1i7RU@;+Se^_T?DY7XU7^vJ0ho1ASVS3P6rR=dUVwO>0v9 zM>iWHf|XO@vv1;|zE1f&nb=Ovuzo^JZmaKj+-$FA*I)fGtW&UdRx zN*J>A#yI0kj(EMG_PH8sN!hoFY%I)j+|k9d&oxBjo*`c)2zObwSwF!!7k82EpG91M zi8Ov0SJnR{+|10 z8UyOleD4QRVx@&PUEemi=cDNDK|PIKoSCKN<(Ndueyrv0cvebh=*rD$n#x=zNzM4C zPncUycFM?^9t`L^NL7cj_c+h6g8Xf9QkmBF{0feV30Hm}+$=vHc!Lz5S1_W?w~6tg?MRy7j*zV~ zV0|o@MctaA#}9G&;$e||UnLQP?&++ba0~PNIJu+#Ho-4w_D)ag)_hOO%+yxv#a-F} z^~n?gQE#wo2>e26Gidzabkodu)QpneKYofL;v+mp8FJUgP9g5(mLXN0Mbkv8o>fAS z%U!O*kG5It%O=!EZRoTb^7pp5595(sVJJt4M(rSNM%offuCL*c0?bgDZ@h}34Hey7 z814Tg7%nFra5cZ4lwR2hls-O_`a)T&oEkYEnyt}gvNA7P6q9OKWf8Jbf6*jU;X#xr zWmAN5R0!_@Ki1x}$n*6!w}Q~^ATWvDRyc)}tL4)nS<0}){2-S#Utuzpmv@c@M@cZZ z_n4(gAD#}C&6)GfnpS}KOfDrlX3wq;ZkH-wzlV^X1lbncwcjq*wCHw`HF9B2wKGo8 z%KFq=pDIR|pb{CZ_3G?(DYtIUeJ&b-?qWI(Nmki#HHl9E<49+jKnGvv@w&ILf6ep= zqip_r!jHap9e()O+rgSsRp9hmJpTkb3M#gWm2UQ2U8;!h6roo(%2UCDh3MdF>q3P{ zqa4*92?f~R<}Rc`a@ZpP(D$({JW2uUOT4-BWcBlAjz9E8uzpueIi*ZtU^(}yoj!K;Zb}e%cGwu#isCMQypcwcQW2E1AhOqtf{K({rL)|Cr0jwW-_V~g4WD~!rDA#D7S5rVCI0k(-e z(Rs>7*`NqX)W|{x3tlp?^iAQZGz^XA72VGJ6Nc?JVW_OvbsV9H94IoP;|NsKIM7Fs z4ME^w1gI!RZL3zBarp?7YouCZlr7fwuCEigD5MlI7 z>ykRPhaQ8sB*NtL3VR;pG{S1_#9djG5sW}+1-gG*=hQGQL{5Y?^86_le2S=cgsl;mQr`uU~eq) z-5YhEP}kMbTG+sG!_;ec)2-#6I(t?cY7d1!-Lsad(W}H=6Lq_PAR+cm?KZJrmH~ad zlueh{Vh{*bO8~0W@!TuQ!$lzXqqB*Wt8`jPB3W@vi@g*IFxBZKK5YkfB-Yqk#d=MB zt7<9zPC2Y2IQIBMXmtZp1n@@q;*O-8~|WHJjFreF=o04`L6^ z&odtvtZeL4A zNn$i7$UQN%M^Q7ro>Z1QM1vz;+Op*xL`I@1?#?@j@7Lwj5c#PZMWlI!>VPyS(B-N; zr)AbyATow)n?34j-^mL<2>3ExyC(E%B=XDW zHK-T^*L0jXgmMv?$`84LiwIS)$a-DHFF5t~pA#^`h~3}(+lUBR9E8E>@_1aEVEa$- zG+vxL(_(3$R#(*8u&X(v8ju;KfKvCH36mJG)`{S1Zw z;NTGY5Y~xh(R4jla`!!WAnou?<}2f`M4IR^K~5+VK_V#mc9$8aV%g#Us34-eefNy7 z`NZpapkk_Yj!L+v@N!3!U0pj~^yJQcNmIiAQD9m9b;nnJC4c;R{eN@rK~CnN(aJfn zNWtxjLYbygFz2oX6^PHhlq0)vsd zF}9N~U@l~AEunEKp;r3`;Pbz6D8*A(R!#1<3fX8@m|nu!%#Mi1w4rrEM@)LHfzNr- zblxfovyMDjIyW^Q#*{O&Xhz!MW7!op2rN}!?oLQ{)^S_SV>ab;epyD}DW;kfh z;F%FT7G63nGZ>`vuHftE@>*D9N-I-eKwRClb}ZnS3@?4}wIuy|QTLIZZdPei^Ec+c zKpji|Y|SZTkKfc_vL-dmt_TE{mK?5$PM}2b^ZaS^cMpT42Z+0EbgwxDN9@88r!qy- z*z;L9dLA^N#f_4@-341f`(<_>NrOD1U4yrBtX25#=Hdm%ZLLq$mWD;hm7|J6NoMZMoRaFD@#R!!}7`}+yR9FhXQ(;XF)mnUU>Q1 zw-bRC)$Nq0%Y-*ZSRZwsTrK#!g8l_B5qSR+dV~A_LYLYP?+tb6c!#%ng)tJ`(JvvJ z|Ba^`$$zvNNVWy`&v`gvnx+m{|noHVD*(sh<7c_=x`pDiDYJH4m3V8@EU+FQqOnuA+is zwPIUiulPN{Q#7u6X<=cc;ybxlK#WBoMH55VkpN5a+uv+TuW5q>Z*diW@}OEnL+yLx z(lpnSDJMwUA=>LvGv=K9PuYhQJnp%y$X^U9l#ECTRCd@oO>W7yXKHG2jBXVgVk4?Y zdaSAtCwi0V(PX?skJH&Xr{WIMDx;rk1`RFI9 z%m-Hp9a5#Lw{Pdhl=hk)&qm_+M22e43p^)H<(L_&pBX*!W5}YJxAlmjc4mz@d{_y5 z_r3ohSp1UqOPS4TVVYxogQBo{@qW9r_D+1AnVNG?fTN*z&o)|8sR3&%D-=i3laZ0y z=5*N(MM;yz6qy`#88xMycJR}|7ux#@ruS~hx~~ex7`EF`iHAw&)0iBpOu-{NqJd`# zG<}C|LHi=UfE-|3Ad*Po=yW$>uxf%pzfom?(MQ%i*MYkaDI(j-lK13%p@*h8%6dfw zS6xi;rRcbA>#&k*Y`M?88LhamwNgU5&8aU=#GK^(pJ^gHz4)sO|9CvE9L|4?`*4i+ zb^c%GX-CpNT!j{;3cNgrUs5^EWCDSjKED3U2(3iv-J3X3TDaPpGjX{5s~7~rYKqJg zkhwN(PFR`c!Cbak-?@^AX`&kDrO#NdWEIY;0gKaQcRN#nPUwr z-$_ruI$Gmv4*ce($4k4!EISkG(}{*M<5PrdXbf2kdURpn{>GEfTTMzIaZ`K1&RjYHN9VIicP ztN>t-aqIoF#goo zARtxhaKXW7RxZ24b6dPD(@GTUW{S1bOT=J2Q2Y8(9$zNRUR~O%C>80;rgwzg1E-A; zCUV@gTg)R0hEk47m4bqk{V#%l`{&6%jypY4mbE>m{rcdzVb*`*2>s7r_#;-1RoDJz zVS4l-E-9m}-1z&8@^%L?V|ngE`4K5AZ9RD!!?DeqSjVgQ)g~HTH7R*hHZYK7k8@qV z?KrAYN~Ny{HPx>FeP7AqE@^;AFc!tE8_4zU@@C-eA?4E2=F=edypjG~t%g}0w*~7Q z`@-80C?B|$RcfOsorM7C4y(ISGw|uGyk)$(t?Jz{Pd^%hGhHpr8S(ZGPZ9ca{l*I5 zD<)GBYA_%hDlYt$AU+=!e$r0*@^vMBC#`PtR zMI}_Rtk5ZMM-knkHzCGRJtvUeYKR(?4NenyhWCV2_w*$&5E zPd6$2#wNr%XKaiDK@-t?lZkr_0i~#!0Hr>bA(`udEN+#%3tX~{roQ)1rKYXkV8==@ z#;dVX_D(~wE9-SuLe$PvVc{oe)>MPbefZ)G;n3NJSUkecS2N?q&~}+b=HR!Mk~@XA zkb5WNu9uX>Q0yzZ?HSSDGeS)%N5b<3G`G!bMNV0Dz6H_{Py}rKwU5pM}g6R2cheN;9A;`beeTT<> zqL}1cGJ*h03{N~wEbdsWdQ`2eTzsEwD^>OAOABAwk3?pbC|sk!qP#tHHKw`~<>1&u z_e=ck{}XF}dvfY^N0GJ2Qghj~Z|*x&e}Z3^ZDL>)tRc*Bzm@|)nDEFWh=McDCZW?Y z1l|6xEF!?g_o(|haPdQM&F+WMl~+IZN1lI;u4;M8G#PxDyY%5e6NBEz;(qd_HwY;D zx=5+2gYkLB{D~zZj~s!8R5HwV-5fW@Hpbdo75jx<(ng*c14@I7Ipu7`*dN>!su1iIlxA!$L(Cjbr+!A<8+?r z(aZgAM(5g{8;!(__I^~p4rDPr1|DZDKC9*x;R2zpMq35|{L*|f%8(>uzM^DpKw4!+ z)1)r`78f-RQ$A(NrUo-+>J~5z*vLtH za_Ldt36Z-rq9JM zy|2JpJ2n~cro*qVvsabVJnc@hQ1v%sB5vNk`Gr$E^{==p2UeC4eZxK@4Iyk9HuwW*wMY;cx@g0+3_+x3(sT}efCmr$7QX*@ z`F|B`BOSM>w3Y2L{n+p^GL2o?Fyf6)o^zRphI4tkxUF{R7nP!ny10~7vE@hV^0RQv zwi<%n@K|Z**!)hn?b~o;R2UbQVR`7MlC@#DLnhcE@oICIjFxL^D~qa<(OzmQm#Y-7Xq|95KGu$pC^^fP=Y_0Wkn}B=OOg)NaG|AdMFXmc zXd@xYg2|Qn!C^jdQSme_0a28C5V+G(rdwvp**d(z$$JMA_uqwwuKiA+b^Or?L9JbVIgi&`oM_1X845#vrL- z%|DR#>OmefUq;QOycXSQ|DM|p?o}dsl=Y3a#ZDPbbI_+}&$un+SH7B7Z#TQ>oDy_F zJM80Wlm_c!O2f;9ZOX^A!35R`$ed8c;p3hEs>gUIWOoenX$#cNjrby;v%@g;SDo2% zU}ToXDP{h}KEp?~1eStqEZ!Iiy%wJ6#i*?F7MHfe(HuQgW>dzk2iJal!nUknh|}Qu zdJ)?toLJ$xLL6|M0Boc|O*^(_F691~E#AOYPMWEdKU|M-zwWj|Fzt?aqNIw+%vPfr z6X4GZI5!DR;UbrCNm%*jKFClffmz zy3L%Nm_*C7Nc*5^c{o4KX^Qu$Tl*KpSGgMy&?!mYBmM3MM>P8h{A|QbM~c{KiDE>3 ztr|}Na8DxbC+f&eo|U4z!-XzK48^tcJtbFDruMjCMvN+s-l8HlJ|!vGAW1Ty$xjq7nUR3PFP7?UD& z_3O|C$&?BTRF<?J&KWQm733zl z%JPy52b~4O=veQKP8Mp$y;`K8rOQG+TUJ*BE;VrA;a1jt0C0F)v+>M5b)}*!(1}Ni z%o*HZ5v*Qxz4_m+p#KJjc#NnNXXp9^sZI9FAwB;!Py};QBG|+~PN9o0NUuE2$s_9t zw^Nqknn>|HTl2k|!1G0JUa_T#mX}55OKZ%28FZzp>i0~Q^czB`c&ULZK*hZn$q!7~ z($jD;IKYLU1}W|O*kI*?AYY9Y<%%#AQC^%i&8 zjAyKQ{XtA~c_lp_(?=38!ITPYm?fR!W~>eC$@Rmk7p`yPcXhkLOr>Vz~(af+e!S~%ec9Ar9RiE4wABt7Ysm3Vh}Nw{xSRO z3l+rp&|Nim%}A6Wm<7M=+|1N!49+x?X_qE?viqizQr(!Fm!++oq4=__gf-@hLR&58 zZGWu+>OtV5G})y;p6~P|ozJpjesFw}qx?8=yxG|{!8Ykq>nkgGyy9f1=oZ2$OYXzV zZg|sIk^J7GD|5--1`0S%aF9p-30kZbb=$SYXH8tVda2Qj-A@f_=AS%5cEgF$@|}oo z#!M)6F>!%S^A)LhI+nIv{krWIlBA&XE6&u1bHmkEPD~T^gHtd*%!Bn|%Q>m04?*Jbji9{C&ij!yzqHjVRRqv+=uzaYTZ* zI^k$D-yq;N-7*k5Rsl&)Ml4&VgzT#^WYuAGy|{v($(dLxX=#|m36mwFhov$aMacAS z(0Fmdg@NX$P5yWW!nnehHpE#9Wij2L#$HM&ok?tOHZV3eYEYVd>wYk&F8oZ3F#*Gx z@aX@<$xrLXhh{&K4Ufgi{|iw^hDwOj)^23yR)gGBZ+fJ&OqO}yP?m!~>#tfN8#O5r zALlw2v*TL#-h8v-*poPjt~_S&JY6>o?*YGDy*0ExUH%vi`0(R8c1OP_nwqe->Z4f+ z6q*U;H1hfQ5%fJX-M(_e(M{Qm$|liE@FTGRANOMJ`#dkcTYGKO;>%_3Y*Xs_0DO^9 zzbqd|d2xp~5mhwQlrZGBd1Q@Acw$})D=ffdKqfGf2^lX6b)ho2q|daku}tJueG#vj?ACm z@;N83bhGqUQ$jR0wNqk#M!3UW?VJV?!nt0M`@)G+`MFjw_Zr;l4ZHUDfgjK2`=2-4 z(NMk(MX=&BME#KOkk@7B6_B9pLdc|Ka*Xqiy$+6z^mxumyHQFDB~*-Ur&uY+L#gG# ztL%#Ra~*NS2{hZMr}_={=^%tGD+8L?z=}^c#%5D=5a}FU_J1_*Sx5bN`j(U3Y}M*N z8mU{3I#aHsXXJ^@DRBVsUBTY0&8|H^QG_-{1UnK2Wf%d;9!*zVeQ? zH@*J8l9NcMjn>4c12kBm*ALd~Gs^eN|c(b+X0F$5* zbL72sa7k`nFwCv|`Iy{TT_IGq_@%4Cx40~?re+qV!m^vy+%s#T)`<#z>z*|mZCI%duTOV1Ax0J1yEk45?4SIrB@)M55`W^b-ZRE%-e{))WgzdOEwC#4i(zF`)DA=1 zPKno}tX1sUvB8YNRH0|$s)_c$1ygEOij$lydr|s7oLO*fDV4exw=LkpAyrO$NB+aM z@BTWeTR$B{M0SGR+a~@ljyHG7D!$xOudc=+`g&~d7CV8^Xk*$e$@-Psb3HP?Po;ZD zdGP)v4mVYfe$O`r5!tlbrq93Dnzc*0OTSDrPAMP~0KLgkAdsPeHCv-u$M^B-zXIXr zKL+`eSb-l)_l=50Z2Zz?Yke3pqGP+CIZHMT5AJ<}o-a@!x53a|cXtg>$a>ZqEb0_& z8)kvnzSzM~B_*}WaA>bRZ4ntxHN3Yhib9Ec zBY(c4Py?vWm}ms9GrpSva}>N@@nAd8Cc;Yjw3*M%L62v&A>)h>O$4r}83^k^){$eA z445^*I>0DbK$PCUs=1xM$a-G#*4wnh2FhhrGAG$G02qmkAWo;0uAOm~;bdHH0K*9- z^th)jkqOUO&S*V|=-LqU;t+pM^7>pRYXW{E-@ z(D zl;bEv-U*PEztmZy`1y__!rXci9!#oPN#N}Jz+WIwO(F}9CP9tLa#qv}nlhRTM1PZ2 z6(vj6G0FG&c*MQCLWpC3opvV;AwB%&q0WrEH7z_HznE+t*TJm&DgNi|@y`_D|7wBb zScT%a@*HJLa!Kty&q&48%&)1D~4j+Va0;RNefa1dzuvr$$9yee6!6bfeYB6BTp~cgToa%qId=-nvUQC-n zm#{_Av?>jNUs{~zDehp8M-yLsA+jg=UzC=9exo9{T`F;dv69$-p%_i_m%4rkMKBRy z;Jz@Y=@gxOYi^Smt8Jr$|MJj^G=l*)$y$1wuK6AeOop$Lw4{@s{+imrtfH-?HJ>-p zgkLA?1!xgtT zarOJ_Hvw?%&j#am1vPdaPg;fZ4n$B@6w4~&Z|;|MuLU%i$dIJGl@f0vm}N(G7w9Ol{yb|Cj&6V@NqVH&e%75Yl4~VR>AUTo z!&B#iyF`Sz&QfqBZ=nd!P#g6kf0HA&=YQVO4-%is-{G_kRRj|lT0_m90?0lJgqV6z zs!3h8HYQi^z^RD+{u#i>=ET>dy0v&(=0$RqzcgrYHXbh5cyWGVFam(jgxvWUm`t9# zK|iyeuNt*;{7har*5(H(^V9NGLG<{SigNyPvVoAt-F>LE$Ic)&>aX+j$`W0+`hM-^ z^BC@@w#>EDvL#(s#nAv*sOC3VEunS@a5XQpMYs4Do9;x!Dt(TD`dat3-ah4?*r(1t36jg5JEa77&;gd->ye0qH>jDKqUo0>QizHZb&E>ESt z<+tHi7d?Tm3Y0>8g5KN6D(sX_#v3RQfV!{qWjMXX_nc^US{r5uuuHrBA+@M$c>$&0 z0WpV8Cy(z5CAd$tLx;8{U3iNc*AH_Yw)jRrJ@%QHMxVquZjsAOwd#9n!*&+kggEGN z?|~{!Mc7yZonFYbDGQTb2<0ey-g?>RD8apBVVoRqAQ%+>ylcV=d< zYD;8CiIfRv&ey6r4$VA68SCpnE>fjs?PJR=UFX6De=8Y)fNlUTK{$TKio-|vL&EH#so)e;yI^2-c`|3*}hrAyk)#ErxQ|PbF;w% zkwZQb`Rt({iwDwfcvV552u0a_5OR|%A_D+yihc4Hu+;JQBqzvrqITkjZa(;{ zoBsLuzXejmJSh!p9IKo)af=@+?(9mOv^@PzMoy2h08N@2+$CMn(-kqQj_-{^638ck(hV z_I!9&JMI@FkIO9&-wAKkfAxdp7_zWjd&E5x{po05%T!WEcTJqD;n_16ZWmx5GnVw6 z{~pO{w@tPpWye4p4NNa`6oh^Bk@U;HP~cx(aE{iIR6=nyBVKhvPyp=25CVl`?VYy7MJz-TDAIb zv0{Bjw^yt<^)R=(k_Jo(wKwn4XIqv6znhe^ZF zot~v$$%Gd)tt%>EJD#!4NX8KjjgZOGj(2>_bjA5-!2)(a_fml+rm()p+;8A{}|CEeobm_7|*98_Y92piuJVP?DT1fqW z;Y>Qse(9T%i(EV93QleK1gbUdS3D(_alOtTij2@ikWvy2O5H{~Swp7USk0olfvs0}*5&-JYUh~Jn*cvK`d-Mcg`m@XeP z)0Y|z3h=3@E@9#-&^1mO_PrClx-{yrB38m3h{@^e3md$bM#nR!ofl;6@g~+VDd1$8(jS)VyZ6R!dui6RGz*r?90LtWK+`6 zL025UCjNw`h+0X$(2pi%AQ0T8Ch@Fr-C4R5w{l)){F2tT$q^IqkV;OSi1s-zn&gvq z4Qd)8M8Rsh-k}jNKe`0fK0YugyCb=I6!JaQgJHkImG}LIe1tL~=CW(Hk8dK03za&; zHr5GZY{(V=6lx)X#ZP{=5Bh-FyN!ze4VOFpQiuAZ;GD;5BiQTur^%8;UX_3}=z>`7 z9m2lB*u=oy`ob13mdxDphw(+!VeRb@{-V^vpc^q|_5!MK(?h5rzB?XA-Iz}!k z%c~rQ`@V;BAfMOW{~ z@=Cg=bz38o?+hmNj$J)*Cfu#Vgky^VE~jJ8Hyv5!@S9cAC&FU_F9L z?$rLIx3B9)$9%JZQeh$V@QZoS^h~NU zV};h;yka1>(9dKhX!Mm!J~^I-YGofxw4!E2d{&Rj_-eY#si(@Gzng6BE2h)<(tQRK zhU;s^a(T95ilW{$<%9xWHWfFPs@6;@*Cf!_8 z_{^x7+JL#`v1AF{&2~$jgBF12FH+sLoLW{m>#@!{NbTw0PTEjijn}|y?3LAVi$O+i zx2q4OM4aX3E!D+@?W+6x`$>PvO#bsS^;3bt=qCrf2S*<{UZ40$SoG>Y%!B^@*MEYe zhW-z!7oo>$8b^C($}3e)cQZU@_fv>zW-!)yS;JSPYSEO53loGcc}7#xoJkebn*qwS z=$9!dE1ACRW-MQ8xFAr+lB)RYTXH#KP@F7D0I*0Uugn)tJbJrA(1K&G zzRZ_;T10n2oV!*+#MZ~g`8TN$9C2@;{{zx*BEEg zmve(B2CZyEf>@mNe^XlW$G#iSI!$amAVDFiXU-lRmALZMjtqalQe5Su7xnHBbTr;- zyjnT);_lW~))OP`a4b>%^xAko}f1NRP zx$?<{b20rwJqnQJe>I+mXq-G46KG`of<850mcvxZBF@ywOlo|JRD}jTQ&}@mywd$q zj#h{#(wsX;uExpFUm$H4{QenA#~=PJ;q(`?KR^0!WV(+^T|Z5q$96mZD^J6lI6#!q zt#m*rr+tIcJW*yo1-~4^5w!PfmxJP_NOtYFIP+KCnQ>8reh17Az1OOrOy8gYl(*e_ zBwF9TaXhLwH_IimkO}UsQ=wtkkvRxF=S2xO=}+#$9{7O;HKR81uY0su;VUbk0)Bi8 zoDb5W2j&-l_Q71Rtij(Hk)LcAD>?AEn+@Y=Ovoxk6h_U&*FtdI1@#r@)XNXTaV(g8 zpX(e$AwqkkGD9PNA~6wO@3o8MfBn&zz3AFpl@DW2l=$9^ps^zk5%EUv3hURCHjNuB+{+b~+& z9`6v_GunTvKHKO4G+N2ueeV7#=k6AMa#%?77`Eh4>!J1ZS%c01c;Lmr0 zsPVzFnaYDTc)G79vS>RmCL{*-zMRNY1TL9{w`>b)b<`P%?3% z-T@yNUWpH06XAfku0S-534$X6OSR_7bIPgryFbMhCkA*B9vT{@R>m^dl3dF{E=cN& zY|9Ow7_K~$kQmDx)O_GPr6LntFm^Nf!yW%vXYMDr4; zZ7c1a_$b0{>R)5EqEV6kcC_Li%k|`zpsW4S-G~AmH;=^6&ME)PN_Lw0gL_^bG^9;3 ze-Dugk*z?fMvDo|9sy1d7=&^tvPRP5&KFh^0@7FuENY<7PewThq*npbHgzn*KY64O z^8NHoqzK{wuCuK#EMCAaO*2NsHC!J0c1=8jg)NUd)E1OhWJ^Dx>4vy-#n?{XbaO;5 z*_$}gDb`a|Ht2J$ocARTw6%7=W3p zh<1VkP;)oN;`8j>$*_TyZ_f5nw-!K2+mpe>B_g9H)L`yge#@GaP=7xe-cxNHm|PqJwb(&K0?nMmf;G$`6l?=Ce+0J?c=#q<>j}imY}(8 z@z;q0MR}+We**ej|4=DYk1JA}-#b{UVjjGy0|_cjdB?kf9rV3g`5?kswP54z%S>7e zJVmG9;Wg#AbX`>1Y5wajWSDD8M4p#A#ELCiXOs*3&SRcc%VFZbPiJ2QKT!Yj9P#n< zo_us%*^vd}=Cf%^21z~BLNB;w!a^4NR2Beol)kh`IQ5*OFh7Ayf0i#i;rPzBz(?iY z>Wbnfe)^ReW!{W~a_NMYSd5s@8*f6NW;E8;6pO_|qw6uB?hNgMSt1rsAzfUtMfGNI ze9n^BtbR6Y3%fFxeEWA`n4ZC-ln0}b~y(8463o%*ipW^IYJGUv{K7BbWWx| zc;M6^1cwpO{xlF(!;U7~6jW;5L_X1*c{?y?P1B`9`{T9P=`Mc@UX_BVBQWadi3RI! zq`R136h1}iku^k1=Sa{rHY{%N{uk#J)F?;NNqW$u`Wc{XLfQ{(Q&G;>5p^^LYoHf$PpFNV}>l{h^= z>m4Ezc_^e5btZjx9VaJ)A&|7dY&ooyg%VE%q;~fsvXkEA-W$KNut85{&pTnBrNbLC z+c?%b(4cg&te!gUc5{i*jH#h(G*S)gH@HqWbRm50a1E>XPM#drv9E8 z{s|_U#r}#m0DH^Qrvjt|Ez|x~Q0L@Y$^s-s&keN`?*?VPzf5gryB9DfW8@#%3i3Ts zSlw&;JQv$rknAqr;q$ifcRKrh1eWWOZ`_Pjo}BQ_ZN2_cf3CO*`?22?2ZV|4yqbv< zq-S1C(Mhk25Vm%zpbkWJq4;@1udu_jYXlE}8#HXWp$%Q+@b+D({E1RnQqjzc_BatcXe4l%R`%X^{05rtt*+iFjrJLKN4c*AHIjLkQpXm=(PFb_ka| zVcV|LJh?3GB2Wp%QZMkozesTsI00ux20uN5u^qkYs z=QHxUxzI>l%tG}nHeb;&Gm*PO0mqUqH(*YQeX>mXH7Z%6Y`KbTTLE!g4+Bd zEZFAB>pOdhQMH4KwGq)Dmzo+xcY&i#kq;m4-lj@wUJi&HIUoD}y=iGi2vr1zV6-3I z>E)711U6}{V8onxlH84r30x^!PHZt!V_dB+@Ib38t75NeJhxW&&DpA9<^JIfPJ57U zTmSG!N$(9~XsN8LHe_BKL4>GR=P3Wjqzttz}xz(TN8 z=kelJ6VjkK1HjueACHW2mI_~qXOMhHwN%@w>P-2Zd9HbN+q!`sba6&_IiN3Q} z_cxo|xxe7{su4YycvHRJviChWc8};C=x|h+wmi@$v9J&)f)Sf|Eq~5I27;+Tc#4!+ z=Lcmt)-L0vECXzV&}Q`9{@X?_3{9d~twuYO<(X1{?_nLS!7z{-UxCbW#zi16HRIsP zk&{%r!nGT=0Q6nN`_?4m0f$_{TR-e|U0TC%-6KoQ9}67XvlpqTZ}B%9$?jL;XjAx0 z4gR>De87{%r!(H}pQ5)f3mTiE>>f*B&bo7uz?z7DMElo>_%|c+7(22rxt=}5rO5X> zV)DH8kZYyzU3ge<)@uhA3+XP+@JFgM0DcLXBVZ2m(Zr^8uj5~?Qx1>OabvGXOY0gQ z8IlXI&3D*6fkM|xld7{xe zNkfC2r-(17bFGz-)2zwH5aAWhj6Eq)-Rvv*UxX79)B=;o9ZgC=<-r4cyj2f*wSsV~ z@h@hOh%#^It67@GvI>#uD;cIX<~mS`^FVg0(t_8EnmUgRn@jb%Oi6BDFWz|Xmq55P z0ZdJ+!=k|C9q`UO$cwAtk(FBjO%TE_%Bx+?==6Dop3)EF3Y3S85cLa(LAW(e;6R zR8ClSd*90^AN(cz;xaPwPEAK#3#@TCR);E~ zQBU$T-*ppCK&|KG43`x3u|Wkyz!0GUEsc=QnUENWxHk}s&!*%Xabm)6$u;iA))ZAX z$1P{;px$4|#n(P@d#_L&{fHRtA>rm^=ucVUGS_+Y+h9BB2J+(>3xE1sg;aAZfx<+t zMkH6BZhE3+i|@e}r9okC(EXFJjfg3_kh{X)W`!$S3uZv02d5h5t3RkyTEjXyJCDwBRI22_6p)%{$lJxeznaou7B_Qi%_|O|Vc`lC(^p~!+ zyP!8PHz?$boacJV*SX$mudDxx;v<8he<>dSWRHHFvUuEVf=S-oKSYQsIRnC&Hz%{V zd_$i0aC`_FOY=cOGo}|)F6S2BcOrj9%BRtXue`%G8(Pp` zn&a(W-d*yx_s@rkR_e#|pARD8bncf=RnUjxwX$1egebEdQfA$$pJT#iCTkq@gPOf+ zKb{>#U}%&X>m%YtMQ?>vy{otQBpE>vzU2|3>-UiZ*;@q?H4r}v3C1ETsICO+y3P{@ovf}>lgW93N(S|8z*LFCfS{l=Gz?~p=@}MEmJu)@ z1EZoMFL1vcmgzMtu`+Zx?30aN#W)A5_3rW5iwm}<7sy-dmIi(G0F`$3#l%b z-Wx6%ThhLhUWe}_&ORCAr#Qn~l5Y<$zkJ7yOxB3?%Lr86MR=IU?4IHpyqf@ZXfbuG zA(NT8u-}fBKa#Hou|p|XnMIeu@4&t5zqYmqk9_d=tYWflU?TWz+Ar*+J&d#k3hk6* z@!OS(S!XL*X}WKrtL4c(Ero>jEFQGi28W}etuN=WQr!3m-wmKMGj+t^Z-vQ;eYz1Hp%ROC)?}Kie3z)YSs}&5P0;KM$nsiY zQFg?HF0+~l-zAdsn1F}KLdQ}#soW}oKq!h{Bo0iQe8UpJwRhTvGeOH?%z*343b!TS z%lL-KEe%^Qc41C17~qF=7$uSE&ey6_TV&vj?#0u&Xq{J~`8Ug)VE2?W1+^{6elN?H*^l#3tyiJ)^9XaFELsZ6TZZ@Cp{9L zg8|vv_X#ObNnZi@IZqi^Z~B>-O+k&9As_weSgqmoTPo2PzFJJIO)OrTxqE?EO(y%D z&F^$0yx(uoX1-s0;`i-@V_1O_!6K#m#iw9*?Rjj$0#V+)s=GqVf?&Qc4J2hNz8CAr zH~KZ%>0NRBh_E3sM$Qqof4Y3sS9W0ZQwAp)s*WhDO%;^VmeLi-&UKSK5iS%jeg?%c%A^CP*HI%H6sa`JGKpyxJ!qh zZviUvlApbX4GIp$BG6&ZtTO(k&SA>3$uVwyOiQfs4Leg#;hV`2Z$UxhBERgY>X=ux zTq~0Hu7swt>Jn%FH1OqAca+^)seeX%?;seH&cQwf_;_IK=T}Yle#o&l7dzQbuvJa? zMcYk|Qc6;88p-J^dhqxm|26rEgu&&{5#;?6#*QEC8N7vf-|>%r_)WC z`xb*J&M+#uYZE-#0ypyxa&ctbEF1~FE1Sa@uHj^Vb zp9vPx(Q}_KxX;!7p@wWIw>EB8W3R9fvSpp&CMp9w+?6p5SOEQNtpDTL@rnEY>uSfD zHz(G&9=%IO+6=j^#VRICE*?4DW4*b>YOi>YWC2>5Hd`R#Xox>~kCJO3jD){w0;*t^-uv$tYCL05L&kZm8)%X^_kzBPL;q8h zTcuVo2#P9#*GB2`kF)szzJ&6Jt?o2`ncFm9v}vONW6{Blb)*ziXfe*t$aBn?AHSfh zl0Y`fhKb8wH?}l=jIz)h{T$}kOcj6#MgxRQlYUvg*B;I0XsNJ>4d7RR6Ig9DQOjDo z!}Y~U?_VH%1sC2BXVS)H(0rW@Cqm2{w>BL|(Ac46KX$Lw zuenDDRH`z!-<(!g$paJN74Hp)Awuyw&lUDmvAR9P|A1Zo|9^K-7FT+Z8-)+T%q*Hu zFe34*l!s3oO(A^+g%S~+ckCkThYca(8g^O>b1+#pq*gK?Ol8fy=Bw}LA7vIc{X%!U zS^e7*Y@OIJSIQKTvuUKL^*qH?NJqYot876wqsb5Yx zxRG5pm+=kc0cZlUrX`%6q17`hCiKIO8Kl^gs-!x zjK|Bdr@J4vcSgy1)}xhdHt-yHIR8}%(!IwGMp zm15`g74FDnakIM^<5LNaS6c%%-`;w4R0pb)t?2d_PALH%xez(WJ)^-kcufJ zqdf2)rD@nF1z;@9vqDOU41*qt>8WiC2nh18#YWEm3X798&r$TVORT$Tt@|O@&S)`E zA}nPQVeM0JdZ>1AI4Fg+ke0-&?9Y*3415A#R&>SbElUGYPb`B&XvlI8@SJpM21?d4_D{rBty3cvM z(hx+5z?DohV@8dF=lthT!Obd<+yGa^uF)q=ZQuEw4jM)lTVjW$W+_ZYDwmXXI@B#y z>aXuQXoUI9#@?AX9{484ERS6UN@j6F(?!AqsjX69Dy+5TPm(+(UQV^3$Rct0sn@=8>1us1Lo#$B;j zp{2%HU#tb^`-70KYGt=_ZZji+tAc5AYULGaKj`OHCawpZb##=%Ko)319xlt_D8c2{8XKbt;sJJ7d(pbo=^ceC}<_^ML}lo3!Z_x}U%2 zDycwnal9`HTcjB4zE_xkzGa>GPKNW-f0MHx-(EOT%HP74HsSWs!B%d>GcDyC;}z+G zYV52j>uUtstd_vanlB*hVcUbW+mCB_?z)On%Z;o5DDBnxOvWvwvq>uG#_9L$kxql} zM85*U_(M3%!RB3{@bZgVH-HJrH`6s&uIeD1umS_V1kcUcBes``q`AbHFBP~V*X1yba)s7n;PhO0v#9T zta#CRgOYtXGxPhC@ySZsJpW1t%4|~OljQ+obm37AQKpc~D)AG_lCkK~tFxM<@wJhH z+hIW|T{4n_&ZMhH9J=WV-xksl`NG#4HueoNr@qkfY7W5;Hw^BVP z2VbEN?miR5u7GncdQA3_4LIa5LU}>0N1o2=wr5xdgEfYV+7c5Nk7Nh(1d+17{{FjA z*V5rnDH>_4)ruDbDhwK?Qz9PU#nlk!WIeGHn2L!;-!{+J_7a+ZLVl*6=IW`QqAQ9%`_1g{D3yP?$TlqGeZ9T;e5B!d z<>UWf4<|DqGY0jY&-lXC|J*xRCHqYU8Y}@9K;GobgGN1CWQ<_fKy=D6Y2o|Bgq*1_ z*}2p8v8P*|N@Zhe)t*v#8d{(i*WM%XmXP4sm1I!k2?%)C;e`B2qnF{1>whjX!R_?= zK)5Myq^-IH3jV4718lXmuj@H;D3o^b~r%RMD_RJZc{V&HJZG9UwEP~4?Z^Q`XPSX1oaY|HtX-)wDXu3j?> zi9YsJd=SY^MVr~k2R<#{)B6r+A**d&Z6cG_CR5O8a3_0FQa*erYRc!wup*CK4PN!J z)or-Rn;}H;`{eXw)(pi2NVRoo`V&xy^%6`#;<8M7JWBT7<)?J=w`wJXawK_U)}#W0 zZVFW@H87Nn@fLY8)2oDxpA5+1u*En?d2Up}H@;QCQEmr(-o9?qfIxDCJsW3v#o(-b#}OfF91;&2*P3cHx(3h+Z-0bU za%p2<(~-p9n*IVxWzF8Ko>tm_)TqQoeZ9A#WWKw%T&tKKg+Fj@X{Bm*JNQFeIl2Eawrqjk` zXU)puDd`dTm~4E(5KlpEL34T9@=e;xkJ>H7Cc`>>lgLvXv%3?NM1s1hUt^|^K0}F~ z7(ikl6}<|j%AJcs*k*y`%C%%a5lNrw`Us}wz2hBE7Cmxq^o~ExPP0I#CD~aYmJMTRZpZZag`%V$)h;DW9N>P7@pCdys4zQ+H$y`@|Z}c`viY>lq%( z(+~ch2{VKz?GU=GE2Q}8bLnymNC0fAOj};>7ZarI;>cYU3lr{&!koM9h(dvGzZIt5 z0U_cuO8x9%0KFsFZ-;GAY*lM%tnO&>Ms<%vUWr?Lo!Q*yAj$Sat8t_=!5WY}2kpq% z=i5x;s!!iSuU*5=uim*Tr?28>2;G?I$pE2phD#qEzz{4X{7Sv47Je88ri>;~b)Sb7 zJ9K3d%Rar8N8TP|L7KL9X!r2>Wd>f)b{OO!jP7ozSwqkL#@r6Q%p_|*O7G*sKYdP= zs>|diJvMB$w!vl7vCWsJ)1I63dlyZ|GDZVx)b;cHB)|}YdM+X^31wAp$q4vnX7!V% z_?pkheh@=3rb!Pkn1@)sWofBR5ML>e2IoyeVpK8wx<-2K85TBk8YZ1zAoTInTFX62 z#TOmVvj-qi_0r6#cY0z@?k%_yoEnGtsrDQv1;oO{bS)y*xC?N{OYpn$ACkc6XY5M1 z$t#odSyq2~bacXEL#ikjL*oDy$ibBn}C`90ot&-nmf15k$h_gSLF9&y|L-aer14%kK{}k@ORQ zns}#;W5}C`)tYrVYqT50iniLA1m(VSmay0AGf4@b@vu$*+B+$ys1w8d0R3P7Knlxpy*VieK1$OoOk-L>y3_|HdszQ@{AB;26_7!lqnmu@*7e+vu^8anhz8_Na?WM{JFU-+_P9snp+Ju(FGJt@&Qg zLex_{nmF6-<*Ay*nBv@NxbX#vG@Y>3%d_D58%s&xfB z5a5ioUH?d+y9VF2ZXCX%wxvS01Hy?F-sp_OOHo@1>DJSFRDKo~-v$U~_m=et-iN3J zpw7E8YA4JuI9Dusj@k-!Hw%S{K}0u6xsk9-m3rMc7AGuzBu8$7+=;bCIj1JwLRGi$ z3YL_%^iYw)@Yx=^^v0wz%h2dSMv(z=g>VjAV`g_%taC8GT|>9=tkR@#Pf1w2w2xD6 zk6^cTvG5(ukf7p=((_u`u({smMz)_cwDc;ECE5EVr1bk{`3kX9O)=(W)vT2{W;#i| z-dUY>2jD>Ka>9Y0F%A|quCVM5{(^DkrOGawxkqM{OLjE+Q>nIYLEv#RR&q_(QeV>; zmc}V;i?G^AJ|<36+k}KByGhfJ@@7U~(XuBaa?p57jZ91r3k=Sr-B?69iHd5bP`tB^ z7QgzJ^|SjJL)I{o7rWN)%ovdiT7@cDNG;JHq@|`)hlfpFrRk*NvS<&lyX1 zo-tin$*xA*0&O#v^bj%1bAP9H3U=MJ=x{ko~ zvK`r55_3{s`;tCye5=HQX|A7IoMg>#`H0@Fbw|;!(CPuNU~hK&TYv2~jiK;W%O^JI z@M?OWfm#mv_qI0C=Vxxg)a7slzpD{Jh9v?W- zu<4}VC93Y&LayVb5-{+AQw0UjkZ)QE?+1fv=S(yTCz6f(3RuHlbO%kU9dd%VGE$sq)(OYCDG7LbSATjmi zVj{aI6197#@!y9Xt;K2J+OJZ=->&8bMy7p_^xdM}i~KY2KyQOD&_b_tWYerFJ48_! zKl_a{?FWA;cdFEm!Qkydwn3K0gjcbairbMFql1A3jt#ZB_qdbt^mU9%s-&&G>cZ?l zeSxLdsr?e_kDqk~e`=}HD#`r89VQIzCONNj?k;K8`fPuD$Wtj)j zgUWS*y4?8fw-K2Sz~eR3!|FZgO1Iu*6kKe({b`+PYRhIeMpEsqRxCkohQ%hpBQ9>@ z0S!au+v);?5`}RQrTnK<&lnOID?DE9^r&7SI!})tf(mP$7Q=i7NfZr)F~#F?9JJ@) z@Silg-!svBGy2{ z0~#wdfR88g8{f^Dh4A>8N6n%HZH{cHHAjMyIIoTWte#|36;%Ui4Hi!#5w4xXfA4g> z{>AzJXEVFWYFtA~V;5(4I_BOniwhl5?pvEmFRl39xx zZr{HmJUL^B?v8JF*32|OmjlYvAl1@p!F$hK@USTlOh^(F*K*Rl%AraqrU`3HEps{zaELHw0xJNQ$5 zHk=)}O{#`pmtVFBFqps|9?(INPLt_*r)MvnBJ54pm&ul&Lba@`rJ zBi9zZpKiY-lRgKK$^BV*$05fPjULUt%$>Q;&|*612}>J3R ztG38`de{^F!pHhbwVV}vE%Pa4s8(2G`b%R2wyGZC&Z^DZY##hWSCaLYcQkyD{W#Lz zeK(0Qz|!f3E@_3v#bw{RBL8=%d(*!3O_pr+4M{>x#ba3!|KGQg@H;96I2=L2hp^V^ zEejTb!AwN0UJhV;dx!l0(MF_NvuuCD%Iyw6-nlNwc=6cB?1p&RvZk}uvLehvW^_^0 zKEf2`@7@VDARg@r&h`6zUHMP>j~D7?M&61o3@+@)zE-L0alD0omt}NrgDYqBN28zo z$DD}+|HY5l-^V~RJ|$k8$Bv(5K&HpIN zsfK1bD}iH85F zk@IzhHJKm6j>;^NCN2)8Vpem~3@#jz{3!IrgeSmA^G!s!U`ak^%DkRd8BAAL5Olfq zV(;!C8W*pXusR;`p0+V@jAM3lV!#{DY0 z#5?H+<%O4yESOYP$b#CnVhZMd|3BA;zdWz~_jm=I4qv{mUsv*qa#L}Ys_JFRQEI%D z_WOH0mXQvIUam?rmTD>u&H5rp1u2e0Zl!U6n$H0%tSq%FcHv!S(vLYdtY7rX5xz^p zb(ycV_CM5dX-IUschKk=yi4HvLR8^&77~07F8ed^)x0_X&>lR0OcBA*Dv(f(Y z#>+265;(ZfTsHn33mS?fdcXwbIp1&YXW6H|lqF4?6*u|WYi#18lXBmsEWv`p8IyCF zSnp8{x_iEMkG}jqLI~Ea+1Iw(u5dxs9SY z*Os2=Ov6~Blx)L^TZ&j_+D}bmv?;*PYNIBdUqiSATq)yEl4Fi&vIeMz+9dq-8h!1r z?pj@s!Q|}$haX)T8rUTRiI!3pH50a45;V2gh`n6RtzKgBtFU@ad4_1L!tL!SH9-d% z*B9?*D6wa{mw(dC_i4#x=?6ilzdTz&JEsUx9i;gGpt-K%bGZj2RDS(gypXg7b50d* zrciA&gnxNuGXq#g#vyH+`L0X63=knpDVS`pAbNZ3LKo}`Dnhji9UHJ}Vz6}G z{$%z-KMZ6gcv(c|nqFmr>4YEGx_SLOxVP3x@fcBQ8<@US?4=vzDLyOxrcvYz3@F@$ z&@yE>Q_@H}5=-D;9oenhUY!Gc1MY5Mt*nh2zy74z;Gan2osh6jrn-yRODzngYsQ)y zJ}c@>?5blO7^@I3rA5p-Tt*3Kxvm_*rlS1y^HoEd<=5~lLC*XYin}~PrfVMC&rExWVUX2&dKHMDuw0X7v9z<`Ih3%% zZVE&|TJ=ZUDetT^W`95Fojs+;6wL!gAA0xQ@G#G~)YWXfSte=|)~0If>-AeV*L!XI zn!2%&DMM0e3ZV#RE&YMr>(mm6s{j1kWYcf|uyDLo^tZ{TSE7G!XGinan_^xq zO$_F3NX77oZEE0G4Jdt$0F<#vLvPfU5nsK;KD;-sUT`k1Hwg3nX6IgI5cNGglMEhpnzaC0({9jk}#h5wzA**|p#^(OsyzG-*=!PM(dvp@dp z5BF;b1^DLH3l)6m)IJ7$CNtRCMqFHpKIFkJ=4 z8C$QZT7R)a!4h@H%oilN&yd*x}sd=QRjusvT4z7vk3P z7P?j}#Z{dol$mg*0M;&id+v?%G@B*bVT{qR{ovKt9WCS}TF2;7kG&||bU9|Nrnrk^ z2s=^9==tn7C#PpmckrHvcMc7baqM#9w!PhbniovJ=ZnBOs7O;obub_zu^=rv#RO$s z=QgiXy7AU&rpd!f7Miy*IV~_t3?nps0o2?Q9TE1r^ij61--ytFf*k~Tf;c_i8YmNY zpZ(@#m**kC2qpW8$@bZ4lS1>o(WLJA{D?(`ei1iix*IsEgPGP_v*6=F9x`MW69=zn z@m}p)Uug)yCtCMzfrPu(nVuAjOarU@J?aFhB!j(-zsAU4uYW9p)>XbSJvn-)JE|9) zadDWhW31@{5suxrLgB}(UKhJt#YKbuqR+jFSl)d}e0wPTlcx5H&QBW3kc6u6_j=AB zV}6(36)aQjP79311|ZNio%xT^Y+1{4gq$BkWztNLm>x8ti+Q@*bX0Cn}d<7j1b?wFUDu`$DQvxf$ zaq@K;y9UL*FZrA@%Zh~_{Wi{oZLHa;7 zhOP@S2@7)9&>zJS_9garKQO9lcKYeue4Mx@V`ZQ6uI_s67$h^%M489?2f0Qg`8s|Y zwl%fq@m7MMvLQ0;$<9nQtqtR71rFUy7r$c@3aROv3yV06utoO6!^vgdeF!A;J{t}i z=aIv#*Bcj}t}-YD@vNbkpN4)Axv0jibuIaIRS@mdWnC`<$59${kWe`; zn2~4p$J=S8Mv_=Z_PCatzfc)MImT&gv?%_d!&`^9JO90 zy(wpGSr0|LE;6i=%eu?^Aun z-aBll7xC|U=+4K_zb&TBPPbbagXDVKSd-IrKR444&&Z$u-E3JYJaH($2D{?e6p3b? zISLVI1k5E17Qe3XoskB5J}Aq16O3c~qFd#mW8iT6EvB%npnIKMtp0(Pu)vtZF8q0f`$c;uTf46()wCSB-mexVu-i(7F-^+v~u6 zU^>AGFS-f!nc{w-nsmXMNRenH9s*toEy3vTOt2)7R@tOd96mI^*OXS4l+rWm!jBVnJ z$9-y4Pc7;DW`}8x+k6~{PPta3Vg;KJy<49z8%ZSFs)@fzwi!DXEy3ZFYBJ;)vTJ!>UicAw`Z>!5*{0qa1g-MAJs`A-p6FE`G6d<&Ux*5*C$)@aI6Y5|o2FzC!T>(+oy9Y>?}A*W-^`SLEj*-kEW2N1 zA+*?no8DMvOlt|D3)Hq6jvr0M_abgS`1|voL`~y6ZaCP`PRofoS*=+L104$a zIuk})U6V#g-A+2DH9{K0)rgq@iqH^xxEegPU%p+k0~Nn*;2+p|Kit6tV?moPBe&1A zQV4(sWlN-heVZau<*BlxXqEd~)^w%6H1mF9?M=!;YAET=$;I={F4J2IZDqZw*iCxg z2dI=ro6?I@*9DwMROZa_Z()ABdh&D^$P#R$2x3Fl7lcuPJRE%G)#9XM@_tOzw91@) zK};*P6z+uKEgFuv6U#mUZs>=VjZ!h#(H=<&&bXxR<5SJdb85`d%yEr*utD!EgeqT; zyeW|Q^5L{0tS{^g=v;V#K$dKvs3}$g=JLoiI6aC&>F)dc@%m3=`4l$#6x-!>?DmGB za9YZiP26C1MafRkw+ELaEs!fm-L_W)BHNkBGYh$UNQh*R&Xj8Mpr5} z!F82B^lN`y385LE+o;$S3C`1bdLjbHxoPnFRn0n2hTw?AXi;fnM)tHFF~p}`dfhk) z|Dc4P-Z@m^i2hEQ@1Th%FWb02$1wq9ONM~sPGT|AX)VNma))fX;=_e(wNUlFAO{p5}ho_f@B)r z)>80cw-zyCwvGo@#0(=hinXT08@UTUq3=Jy6sg^wB$b6_$@|y3y@)Zt;aDz&PN97E zN9oNXy^WdTdZW63(p(VfDU&MjxjuEvO!ph)g+b(#XUj)Y`8gIPIvtTbKdg7^!NAgGkJ?jQW?sR>;!17ii&qR=#8CSX18*Mvh_VSe@yKoIp zLKnFhlO}uqG1T{546L5zenPo({q3 z`VU0CMW$ksp}B=peE<33m;eWP{_YYhPf-?6-%%LatE?AW3leTJiSL!MKwQ1L?@51t z1)CAK<{L4_%%9uPpP?$*2|VyqbBxcAzPH*ru9XM#L|$uDn$P>#0$WUP4wqV$E^$aH zeZZ(Djgeq>(?ZXEheUS)&+E>Sq1qp_I~K|f$B<6(clE}_QHs)=R#qfs*HzUH4VWIF zXMJ26u8#{AZitKPWVZV>WeLfMRr27$&NoFLjVl-^!%e|bQj<0qLumDV?`zTz0mJ$% zcR)b!pq^KlQM_1G9nGGq`!=l|i*{Z9dU6fJ&Kqd% z;AWor=Js2YS3`S^(tD-{tuX_om+u!Vvwr}ctI%g78}C*bc^iGX>MZppiG<5C?|>TowxZfi4batMCJ|U5sFUzf*TiK@E^$J=uBLh-M2So3LNd>c=9fxqx7LZW zSq)wUUTYLrQw-39NE@?X3%WYmb6WBF%=BQ0A(1TY&TCEvAEiGLh6+dbIbi$P7b5J%M zkqu$mmchodLPe9TRkNw=`+^WEbAmvX*g|c4J|-tvO@QUwy0`4%=4UT?2;Rw>(y5Sl z%xz@izg=$l0=wEJst)F&v$2-t&`V}yPaT66RVlqchH7GOHU6jJ>+c;feNzayU~q%r1sn(1Wrh^dFGa0*9*Ih zB_3V6OcMN-UuM`s6rYBhRLuy^b<~uWi=me@n=-DC-PWssc=iNI@MWT%BN?0Y`?2P! zfPN|vMDPRuCfB2aD*Z!5?yQ@fJH0rE{*t$KX|L03tCj9XfHuYuvSgm;bPff-GH^Z> zgD}mCa@;xC7+qJ-Np%ZTw;+_5b1sQK4X6^7w>ROx6(XVDj@BC6upaEyOaxt$JA^Cp zrB*$z{?pN0$JUX%CNz>|HoiU7)#?fvW-R9nrPdoI$ouC5pTDy3Z?zbQv0Xu#g*nux zr49=CuW}~CWSBD%j{)078v+Tfl*!Q{N4{-;h=->^da)ytwc-uQQ?4iqKa<!+|=} zFCKg1nntLyWMKxEuU&2Wm^H7IO#$z3P5q1+5PuyrW^n@!Hd2d+g4u+a28RyowpJ}j z3zuuV77T<2^Hf^oEC?Gtcd9Opa=B(`6w~7!CYxjBB=&IfDb5Hs(;r3774sMyw->W} zoF>aI1Lxx&Kbx@PtZ-~=mI-qMII~D_zu~Kv4JIa>FhPnfRTXdNlW$AUDC6C6no! z+aVze5uopQUQ=G@vuK z^X=vDWS5N=lO|ALb`EkM6RSYn&kn1FKk?wF2MjoW^U)xvCK9k5cI}mfUOy?N49vZ9 z0HZphrT*TrX@I9^2P~0b9~cZ3~^DzmA`7<*aO(FuU_gq@$g(@ zt~_WN_0h&78!DkSWFf=5TkH=(Yw6Zr3VD7gOifXaPsT}5t05-O>1skbhNhFd_YVCO zr=P}cuX^;{kt~|J)@wprn6yfE>E}iTMxf>|2~6Hd7=II{cbV_S z%fh;6j@%E8WxrgrR{W%EderN8MF$e64P5YKMxhh(=A! z3?6NJJZf+4DHDC8Y1m^ulCC$BZl@m)v9iiEQXR-&u4;eLd?%03xW(Bn9Mgbv$QN*dY$@ipBG^jI}YbG&M(T> zImhwR7A9ahSfs4%=4a;j>B9*~&fI6OS>&UKba3o=Zr_IUR=GrXu-=15W0l0w5um7X zntq+^bGIH}Nzu|Y0UI)|&!py9`#xR0jWMZTO!5-)i(LNzz(emlF>e=mEs(B#+0HjF zW|#Z-2>rd@>|61L`4j!gjG|A81)^NIF}Qspw=7^dyj&Dvlzfew;-T0U8jG6H3s5wj z2FnU)2tb{=XqidyQ0sIn2N|ToLI1R<8aP*{OH{Q^5V9ubVW--)FVdu(cKe^?8RtL2KU@^_Z{GK(Q%-F{f)%catft$ei>HHe=F@9*}V zx5QiZMT-@)zu%QfTQDVQ!hi<|SOM;l4CB2IbC3B0W-Op0VkPB5tB4%u&BhZ~)N@jf z;;N>-tL6uA(RO(^b~IC6aR9VIIR56ZT4nxqom3N08~8Z_{_atv^;&qvYGVEpAXmZq!h9~6$r1v69E#>( z{W`Ce%=b9o6GC~wo59hx^x(0ogbG1_pISpJ&kZOvA^=9AxS~Wyh&1?6@Xg`m>Q=!-sOJ8wsNAN97g+mqmn_dAZ_nAj z*p|y^NHZBsEyR8Jv&7eV{F_LIHs` z=32yEs^diR^)*;JXZrFRQ!egkM2KIKvr(UZ(SBJ)3R|9|h}-L8>D3&Q{2(atVNR9rU$e|VOe|++ ztd}1wTFA4Q}tuDq3A)SfIApli# zrN<9Vk)NL$)Oo327HHPUEGtSz_WQW-Q;W1A?KnN(C~UqojAxd2m#gu@Rm#WAS+=O% zWa*?CO6PvhrEEZN$i|2xin~*4P_xKMKUac@XQONg`6HhG+P$wQ^RmwQ{1rWG`V@&$ z;pRBqRH1@UX4Wf;w<*40M5>bXBn)A}t>=-KObY3Zo0hhE<@@be)c-`4T zE^at5lP0dMWD{EoWV7KkLk$g`6F-v;S@8N-(^5WK9!4dM8mpxfoNJK{ZCqMM(px zR9mV^CWPlt8XlMJEk}cRYoT^&6QPty4yAdxO-PcKy9{8+j|yc`ZKLbQZ2WS1zrfY0 zc;{2($NvUz5-K3I>U0qi^{1RC_z`a#>ZDc^?g$)uyxBrc<~1k3$#UcN`Zi0loBC*& zXXFGNOcO9>iXv-4-`^_T+NNlr^|yO3V z<-h)baS>;V>VwP+H}A08vt7P-Z#uQ|okAa*VFQ6-bbnw>mYp3N*V}*%ZsQ(mu^0Bw ze!b}zBNS^h{MKUDQXbT|fl#3X8+`QT$dtK(pm$&h;R2|v_(H1H_b}E(ifY*3wa;t& z@6SK=i#p33*Rr!ITHd^tnx_7u!5Lzi_M7NvH1tW;NdnU}Vi*q01%yNmy9>^to2<)m zUvupp;hB1XZm|23R@KMLllj1D1|U;{O2MG=kl>>Mdf^yc8j~x;ig~`l@%yP}jXc#C z$!0W6&rdZg|LMLk`{P{c>3%%j7p%9abwH>3k>}LOX`9l(TmLH#II;1mTHm+6mi~G- z0W~NYRg3;}H8wj&H0mQWSpUuP%1D!buBxWG(gz;vy-i7UBhQzSU*xm@Ee;cAG}kGy zf(2b-^lLv{9(CwZbmW!X?KXJ)z;f1naVL{C_!AH7-C(x0vqJyjZt{<~T(^!w%gG1Z z8(khCG|+q~ktk~jC9sa6-|w>O+1O}csrDnhLF{xFtalE|m=z*pCR_~0HDh(|`~Zob z7)#j032rNq39x$BqS1-_tzT&sDvE6wh*$=!rHI`rFg10GN<7$#ndLUWUoSBPX3WqW z+&d`hhA%E9E@_zh=;JKD$Q2B%^Q?-`t{F1Qc(QfA`BqX}DpcJA61(Bi9y)2OSvbu; z+pf6_4~l)d6@`-r<*&GaILk(7qh+_td+Y2TIQ&U3KUD4EO@HuyP+69Z2gCxqNwSxa~yp222pf{tw5Q;`g zV9e!=j+jz)-rc!ug(FGfqG3U*h?@rq#iRT)d}rgucn4mz2yiv+Xby(`{K}53h8mPuFa2Z3EPku-|uj z6Ka%3sMW>%sGEmz&Q}ZH)Mc5gn#Fdd9;$rW5dZ95yW`Js7uqhE*yunCNSy$`0WPI z|AvnGWloMbl`}k5=yhtbMx&>!Zo8`R!??(2FB+{0n{Yr|_4`kMEm$@e^;p6!t>2hU z=unq`38H&8KB_+n%~lyJS@gTQ{^1>7o)9-1h@M97fmR%kKhMWGsehy+zq}4+G;{14 zwG>h(b<83^o1&zsmP`11?gM7T?cB3-5e4|cy7M%i=5s+N65SJWMF}BYq2js{MN4xqBSb1oqn4bRusp^@pd8JZnzJO7hAyUFE^yzaqyurR?dlp}XCFD|mRinu+Y%IE)GDruhRagn*5VjM z;=}CO02-R*_XkzMYXCQoch zi^t_G6Xx}wJ)7{D66%KtWtv;lhl_~M*c#Z{XjfmH42Lh(yiV{04|>lyNs`3WMAZrC ziDzeHYZmV4>MhmD3dRU!tvLl7amJXtIbg7 z1FnL;E&B8yyy2QA6kWNmu{s;{FpoKcl%u{8FwJ?xW7mq)_lLkFMWNBPXbV&+V-J+aoV6 zj=s!OXig3HUtGEVRTuofCZB(rb*Ov&;_-6c2=DMl8xWT!O?E316~KIqy$p-*iW^+h zvYEd}2F+2T>Tf>j{7G{vcXa=AdL)0EAYK37_8mjR7L706UWl&y(g}AHy z!PEk$ouJJ-B8W;qx!7*{HF-q2p;)XFNaf4j@lf)5-TItn=Va}MLn#mmsor)2GIPty z-uu4I`x|a%nFWifXWB~^COWrHbq;`JlR4y!yEDdGwQ9x!)6G!%z{T5}_S!zcG^aaG zZjY)H4%QixYE{QDbfBsGtK2r^b2ufJrm*yU%@oI(m&U0)=XbT{=Dx>@_FmDANm~PE z22G9^+#k%XQAlH`0Bp{J$J$os?ut%*&#kG5Ic(c2WIPx z93f*LcDa`Q^6wX~G-}3&mmgodJ!!{k>}U{$GkxhO)rfIaaQ6csVX!(k_jK5UZ#;p6 zmK*rom+5aD<50&XtOaNbg5V8MC2bT1>hz=nk|E42*6yEBhk&6BIH?|oq;p8~1 z%M5_mmXG{%m*wkH%jLekk;RX!>c-9V#$Tqo#kgshQms+*1XTO&vl3mbC6FaYb&T1m z=Y|na(c{J4bf}d_R=QsdH$H$5=bC%9YI0!v;?S@(SO#^eK;A~oG)pA)^kfsJ=FaenflmppkwH8vNj7QOIn&P;g8HtCv(YcixGm zPnfz9%FLC@?&>GUl;JO3PNFXk2GvsS*GZx<5>?GW9B0v(oCn1XNG5*1a6OOkU|95s zO@7!|Kx08#C~2C16*wV2nrCDH2eR{Y2VZGv)fww$hu=U=uPO5aFmy^W0qE;mtNdLU zwASm=A|xpQaP%byL+@WQY_rpPv(MdSky0|#VO0Fyp5*OVG$o-tI)}-#kcJ0l#FZu! zghT73A*z*i1XfL}#oe3iC3=+T`-x}8ZKCRB_l2}#jED6!Ukoo&oIL8Xh3YxrOonE!a5B_j!%Eegxt_<$dKzB*ubBHY)S`Img*^fu2iTIq+)gk4og=`>ZN zAoy9eR0jW}gms5CjC6bQO^>IIVzNxVNKmx60@lQ{ZpnQ>jQT8)M`g_?CntSAS*_Wk zN(;lt`_EneC7L+3eWA_T@MW5;#deP9;l00<5vR9@U7U%s$aXy}!ew2iJnkor=PXZ#(KP+nj9YhCl0QQm-n&<2 zWEMAl5c(hNy?HoWeY^LqS4Ub}V~e6l5QLg%tyu^fvxF*Q2!c>E9Zf+D2{BV7W@?PF z)v9@(XKl@;Xw_7mt|!-h?`Pk-_jBL-+3#^Y@ALlgu0O~+Bw4Yt*6(-z&hz|!zD93W zZrS$@G^I(!!485#?FGgS1Y=y@BcIFYK0EnAfBTQ<*#sRpbc(C4djk4XoXz6yU6p6) zgjqvNg3T|+k#&Kb(E_-$Joak%qxF}ol&)I8z^&EO>Mbtcl%q}4wzMO{9pp8kp(^K? zkb0p8#a$%jI(DiCpY-;-7phf$0)Nzpn)>+=~^v#s}kC1p0QnhAKrbif`5}AIw12D_%*C26r`($-Je-4)K@`makhG zbN46u3i~29R=d*uFH-S@)a|!mq3Glu^&+DA&7kd{peY^~*awZ}r#qB#%;^`yYa*8X zn5A4y@-#axe~tjzX>js~Brhj!{6)UmMzu$lLl1q<}8 zPU{5`)p^Oq27}gSGJuhhP%-kpI~r_lwk96kj}Pj%q0fp~V!2Z(dM*_D9V&9&pgp2w z0f85tu89b>3e(iykC@vm)?VCupX`CuS_nOwKD68?jy|t2dzZ=mox6`4KWlc-+r0Nk zKQV7Yfe4FVR!kwU`Ym{SGj)@vCo-e_377H$q^F3r86FupJWE(wnluGliynpu>ejs$ zw`u>7w>pbXo?q!I+&}nwy{#x2G%GSWzM)*#y_8peKX$3u=*1|Ix5h{YBh3)?&yW7a z+SXWNKKreqN{rQ@IWM^Hn?FZ%C_5h9AjeyP16B{zeT7dV0>hRr9r9l*R>^*EqF>kG zd@2b2ODb{c(jA1r3)h5pKiDazx6zAN0lW}F?COm}<2%R~Jt~v7q4AFK5VY{ORh#42 zpQ^U1Ho#(W;FzobL&9A+Fw5qd8hEgpCUZv~46>7y*Bgg*`b?E?R2C+jcm(4h)Z z1z219G1-6p{L8NDE)pd<)Vt!x-|m|KCkOm(v6-LYn{T_%bE~uJhtcWD{)>Q?v>ZDT zoD~eOkp^C=!%sFX<`OfF$92&c;S{lzTs@Vj*e(do$;9?qQ=c`WBXOGNUdUDHTpXKL zvOv<&>nW4X%xc=mgTGtlWO{1Tg|rhNMx zn!VVX)51nGU()J`G4Y7~+I^Y}=W;hGRU2qlQBk6yiXA!`k)-$$E-JY+&;VtzK+1cX zb_C9d7pw58f$K+;eHDr_02qr$2Tv{cTD;To5e3aGEm`r1xj7Yo14ni@4-qogSvI8- zyRRjI`uaVXx2`B9Mhex8a{%iI0GeAkimrX_sa0 zeRPTaj@4h#kXBqwVf_Nx3buDX%<6I7{TS0FB(m11#jtkpfhu_=9H1rp5@q{S(qd^>8o zUT7}OdS&VebT{6xmt1h0)TdX@!U!1NVrvG!+W8V>#3~`om27)E^|POKLLo8bYNrlR zF-)eq8Ote%e_BT4!{(FuF|92v>Q=IY*%WIaw;*q+@V7=3x|?|o&mdABUMM9Bwv%Zj2Ba$dJ@)vf>;J78<$u%NXLXk28xZIxHfcb(gx{Fhn zl?RZ3_UtHOD8FiwDJU*2x1IOgpEN*@q>aM+2g84xGfw>Y@0Qd4xK#vC$zGZz8{F>Q z+{9q-(h-vFa5GTX*IiuFitl3c#b1|h{ul^TiHlh zFmr{w&n(vaRim#;iu!XWnU7#$ycwWS5n}+*)#u5Pi6*JY!$(PLbpi)!JYdxl=DPpY zdrp80QgVE`+e1WGEO%=x``pIvg1%~gF#Chy5BIKr41FHhAyz)Q_)8)`!*aV{k+$l_ zlAO`~x4wAe1+&T3Ka{ZWm>-D{Oh~{l0=}D2ic&3G`_Po%W#%tt-5Ve7+w;YU2Fgg9V_bK^rd^xM>Gb>hxzs$~6b+SBVIpy4F0ajRsy&Ne>b)_#i?)aP@qELlZnT+gi%S~^hA z-cZS6ET2|hFr072TQKsO2Sc;->iW-uZ&Ri4lwujn=G32tyca5GGYj6HeF3eTsohV> zMt?x+`DQ1k=u+TwQifektbGGD509t%Zv9Dv4-{N__a{y1GS4;NTiYjW)qJnHRiN5!)vI2+VeO-e-w1uV`Vo6IVt`hzdeT?U?UsloJkyH=H`Gc)p5)$z`cvaK z6dw4ae%>zF7M@I9-S?fY;Bk``z2s-}0?)``et+zj>DHTo_~^b!pin|cyu%)C<<{_Z zo3O+3am6grHvU^i(Csy!h-HG;TDJH78iE~Yr7LxAryIZgiJYBp_{Aj4kWN(}cKinO zeEU|>;p{sqUBzx_s0;O_a~Bk=`NktBAm&-P3bGUlcz<)2%j)V=u)xc+{R?86cm}GM z`T|+TL~4xQskFXxo69t40NnQ}#Ps`4Canoy^IiAy!#lP30p&@}V0;uYk00Fcnw~X# z(YocyglK3+nRf~=sa@hnMblst`A?cJE|Z2$V^ya5Nfn+qW^CDMrP+G<1-kpZxKd9i z3Hs$u$SW57It{}qBuGVDjTzsqvwghKZ4Ha<~hGP)))y#9*DgNTbSx7eju^a4>2L7=~Qm!YF1!ycz!fev%I^n zxc04wty`4E{8~-%icz&=W3hqtRVvxZgI8EzXFPC1p0tDX@OWb3pPKXN+=+qxU(AdD zeILrlX1{mAKl)#f8yAM0uLtFbZuyb}2GuUNm7=BJMu<`rqjg~9$x1yV0J~5<|5x4a z&Ua}pluYMCSh;t)f+SCDFF#lmt{*+#d8NX|9syO1Sd&cVh)oX_yMfc2QN?_Ed?L9@ zS47V+rcv9uE@>F(pa%5o36joAL`gJ6Cte>LNhpfCpI^L>H+~W@CntaPG%SCB8-904 z@s^sb>4$6hOa+Y7YZGQs$G+Hch^rpeemOD=0j;d#6&yu_)VS9mVtQ|5X#@uR0!E1_ zo_qs?-kxJ{|L)T?a0anlan>|qAcIv`!5x34E*FFzCxb93K0bKVpEL;Wp(cHl76jLd z({*CFH6f(MFzaq%8X50DN3F~0;}HQr))Arl8YO#~z?^_QnoFDw+G2-nK>^!(SL3<- zqYW7wUbI{-9NXA?m$P}~z1ny9sWsqp=jisWC=>i7nBHKs31Q#u|-Cq!+Et) zOPWjF-|J!Q-cr+)*+=IdYvd|A#A*Afgo++t47#t++Ed+>Wd}0SvXF202DH=%8Hl`~ z_t_})b93R6IUo3E zX}x~-#=o8DPc+Ae&{gNvJTor5_1chwQ-MLc*YEGX-TNp6}HXc zt5#;?4j7OX)li>9_*{no2KIA|9EJLP76dfI-N#i(t{#%wm<%qdL7}_5y;aB6?)k4j z2e6$RvLRX{Br`XC;nL+I_p;OjnXFCR767cDuUO~QDLZ-nz<**H`;j=qShaC9-QHN% zE~Ic#f+EOuZ%l}obYpTBC%(^CE8^Glutv3FgxXnr!@}y`j2^7F3A`Nx*6;?NnJHGQ z;y`93vImHQRvYN3!|@fY*|u6j`*Jt%^AYN06@alvIXj zkEExWrs5P+zu;8-kfB5s)91`?uifa8i67)zOoUmm%v`m91i#lI)v4ru4 z1Q_j}o&HWEnu=f`@bk?HzW|Qa3qq^!O7`?rHpVCP*qRNETHeI#8=?E`mmuQO6i8ZH z8hcUy;pbD&dWXv;GLm1UL-Ny`1q*9jQM>J=PXq6hQ;1n>O6b?1n&GS)>$+4yV5t0? zsKBtM-pQxv)nEDLX+rqmG)B@J>)_hEGIX8pBGyXaa;NOa>|FDWmD7$*seK<4c~>|W z%o+!!uz>1F-TqOeQ!-OzL5=lHRcRAuKzz{t-RM_PDTlRu#dMDcBu(3wEX9k#)}@Dce@H7GfO?I=P#8J^9a?f(7W@%^Gy9Z z(^KV&kttaPb18^f0sEzEhZmb;g3LjW3O80>qb>rT7gB+8?4n6dJxzLggzBhc^!C$P zTP}eOWpU2#b#($q(e{^XmDgOG3N#Ogi#{ZTLrgYgGH^Rk@_wx$e^E7fTq3~V@yJWt zb=kp6UQ+wcYd;LH2Zv{_a?tdJfQib}|`EqL4_37JN%`nN#A$uXeFBHnV_6Hae4U zLgk##UoK7Rq67T*N3?+rlIf!ZyU2NBQ!{BlENe$gxz z`8`I`_kyaje0HZc=~KgHHmT<`jv2?%&L1Z4?)U0<`^tR%A%tmhtf^$j*Xf3Ox17NW zEa#9xwC>$lS{a44oHU!l<>a3%J=c6+`0+@w)wfb|BpMci>Yu%wGrYOP2-Gu9$j8tL zBy50OJ)ewcYg_(Esa}JmwP)~44poIj^bXy?h01chWM4GBy#I{F@X5zGTi~+>!azoR zxvr1Hf~Ka{cb%;i>q&l#$Kpa!CD&>#8dkc?M<`Qp)|ibzK(Fzl^y^v|bwAn3S-iIO z6>Y>>aU)+<*wacU0yIK^+T$5Z^dC zwK)s}`pf_gpCk+M^UlO6IqW%PGGGplhgdOk_)Ef=V(`Yni3a;3>UJ)@9^9_7^jzN^ z90ewUVI5ueWC~W30Ov$hG;O5Ej+2{QzRL5qDkbw4nM;b0)$1$KT>#Ju@B>&(IKxpp zRDlfii_~xQb}twbS;_8l#z8a z86;4xq1+SIBZXlQ^c(U%8uly9a4Xz~TW$RO>HG1TsXJv>-CpAXeGoT#*?pioJGn{U z)OQzsQHBw8eLP-%tWIO($G6@?y!JEKu#2;qW=2ZTdG|n=sQKoy!nG7xIH@Ueh_pFi zBjA81BJ;s9k2;MHy(%9+y}NiAI3H+az4*E6OrL!g6i8f3N}}vi3MXA*dFl|zidNI5 z?(XCcUZPvAx$2t7+BHjaOU&}!I-K6i&z3#q_8rsPFUOplfBFJZzGw6`^wdp5Oi8KV zhyB8edb|ZNn=e%Rlb7Yq*;ss1xcTgDBC|(SwtiV}-%7+Z z|E^AxqmzW>8>7cR&h$a+-~UPT{9Rvu>#dnS55fA7QbRAWM{z%=Z>(Rap~_=p>q+~> zojmg!E1AjFn1tu2D?^QGThB|%v3dRIc!s011(L)Y*Zge@r<=aGDK>+8BRnZ)+J7zN>o_Q$ymnmHgIirtN0_4B(a31MYK3Fmcac3QeB zi4_}XCxWhw=E+@ZWL`;8ew!w~sIm^L3~YKFC1*U)EOQkGXs>;qjR^sz)+{%qAmC{- z&lWuK0mWx(ITEO92EpoRgTzCV`o8>|Ylt-a!0Yv&NH((_FWRDgHIr|#6Il$@tY2hc zUdC-T)pN=AxB`J=Qm_c)(%K)8nX|PUmRYs#l486Tc+F~rsPEe##E>kk$??X#91DrJ zwvePXAhHl*aPGd1@_5wociGq%(eE5&_q|QnI-nd%@Z>RG{WvI|`L~!Ie!{g|dzI}t8rT5*K4@2p+gONu25r#UlxQl$#INAk% z@j|ZT+PQ0me%$E7Z&rafwnp68OK>WWVYa7Mc!kubs%_t z6zAlui`Q;C^(1r9R?#+=0H`FtjHG-MPmrc2vBy*HPnwSim*%b~A8VlBdz*z(3M==u z@xOFeG(57br?nct7+XsvAQve$R`{p{JqU?Hb?~HwL~8vARXp@edU2VnziV~(v#Jdb zn`%nHr~XD?`R!JJuA{w|G(2R6rsYNk`#~`0_3mp=6_LHOEsxhMchO1H5!D2)eEr@~ zVI9ajg-L|^H~shIEySoM|Jki#-20%CwOljpHW-&w;Y{_iyr%4@%m;8{Av52Cp7A_N z*f#`1N%!%fMa1w)n$7=v*!S0i-}|3xAABy01uIH$UF1-BPGqVr~T zgJw#hbh4$MDVu;|97CTgZ3705ujRlO4v*Tvz(`kB*LRF39AH@QFwe}MC(B+_ams3p z)3qn!?JUg$xXQY#-}h{S21}Vad?n$wz~?U*7}HHjzlzf?xn-qF>+T9QK;4bqIl83^ zEj!IZx5E_NTP57ADtn zroQE1zB9fcXeF_cN>Gp~ZNX~?A5py(jsmaZ0-blBF1`Eyu;ZoB=a)4(M}~zKg>Otg?y{Nas2fq0>dGhwSxjX3~)53;vlvHg^uN}4vEIrVzf7gn6 z)GMt7l~T?v>*DLWo@k#PX#<|_wHMua(kQW*2*-#*H%eb{Uzy9iH8Sma?~hRN+xsOR zK07h|TzG%(YcW7x*)iCuo+8hJG`B}7dVDKPvV4ICoLL>~{%r3uY;vTDQkHXfb{kRJZ44c(%U=cYRn3M>#Y-3CeD9d~nM&$q-J>65X6njcC#(HfXLt z71M*yoaHs(B;g@U6u!Ao8jic@{B+Nv$p`ZNRYTXHyMQ15#f$NEf6_P)$PVf&$=0T1 zyVtFw2b4o5*w$O4-`(C%KbGsM>ri}aa;Lqs{8C|$+6x<&c~ifr(M3*IwU$Lf)Y96T zPM^2o_?1&K7S0Cz-rov=1T_cYP(^!!esbu&@7^ibV)I`}6!OTfwM>4`-2nNvr!i8Q z4zUFd>ki0qw_wHR&N(uQlvcjVo{uGn@`N|BeMx<>=>~VN6=BtYt6x57IC>Oin3Td3 z8~2~lq;zZzzaz05~!X`($jZcvtzT#X%=HS+;!M`R^q zk@uRVk2$JO+X#)YYh21tERAu20D+A=&Q*;5X*(+axPfSB{;#BUj-1?NQNg?$D$TnE zx*pt_!>R>#oz{`_fXSO72voI9xeld0DKRbe$mHWsBoTbQPx`y)8=L$Gyl^T1_jK|w zBw2fW>MEPbK+*$UV-{o${1Q%I{f>6^)csp5cm1ay8hUl^0L+9xQ9<`f)2q#~oXPHm zX>6-6=Z=W0jUEW%_juWyL-Y8j?ak%!D6IM9>fJwLX8SF!Xk7Jr4FYi9xS=mRX8 z+yOQe9Zk8Aq*=TFM#XcM?q&8{mgD51I$Zy=6sjr?Z#q*^;2tmnd7>Xd&|l{jcw*kG z>LTN{7v%x>FB+*k2Tr%{^w@2NL$Xgh8+k|2nOYdoVmPUg;+sq6v%|H;_2vi>2T2$R z_{{NVI^VjPGla0}QuU-mIobscErVvIDI~6Re#T=u1R!$nyU{3P{gS7u+B%In8-*&w z`*ZAhHXd$|P@yaFoB>NxX7Go96f~XQP`?vS^$>R?w*eS4DwLP{`wyi__^`-PL6<3B z<4(V>b1%Ag0D~eQyHPwb>Zh#pw z25QxKRH=*@0aS7Kcrwnw)u`H+aEomPXo@iJ$|&YN@Uc{Qy$5P@I! zoq7Rv9Wg+U0^Z!664S_O07o`T$jW;o{ZK{_Slm?Q_+;&-P(oDqW8o^v`G7@X{q`?q zxgB~C6(>Ub7!Z;Dopfm4J3U-xtvW=!v@&ey;b0?0SJGJ37#Y{7uDz73QcR2Q#|j6G z?pc%NNsN+D`DB1jYb&Uq;>}WvgUz-)XK)4)R9=EU{e-D;ZM(fito?vVSVU47X&e)f z-SgFYwQ;*D^8L$knaf5(EZ<;7Y+Zb2$)Ukj{I> z+T3mLoRsjkxJ1;I9j{AHez!X!@k4dYuhJYR^Wl9MGRROxqP92$)=p^0UX)JDz)CGP zz+76fNQa?g{mET=@;349`L6P1U`qv0MMzL6x}G{Kyf^$g+wL*I?1njX{V3JRD9iOg zhDkbQlfDx>i`5Sm15;t!#x^p$(oCbMxd(dh?p>8mOV=F`AV_|_yvX}SmAMb=Eh#nE z(oF$(b^m<;IoTCLRh1$CfiE9sklfeX~dGX5ZZU4ejR*HQlwp=*ymJ zh&3!(ASPgZbgj_ZUx`d69pH34nXG^JTlqB|xIS(L5Z2wF=UA+!&Ie$omwflsUo@sQ zzf~p11A*E3M1FKZ)1&`T#|&oSn9~{Do;XD(IZZaP&i^{8yw-#CW^L+`z>>b`!)nCTlaMpx0PW8YsOI#Z4AzG`?>q!QM_baYwb)j9D8&f! zhg2)#sW7I0mjxPsNHYF2$kEOY_`tFA)x@y!Em7z9Xl&ZCEQD)8rnhc1Vw zWP_#<0!zs4TQQ0q#=N-~#INe%_ae`d3A!ucya$4V)RkU*+I@K%9J1-O?6Sd&q5K7V z;w7=o(AuaO^BW5b)})@KtuV@#mg;PybfNxJY@n*QoOBuwQ^Dfb4SOoV=BBx%bF#H; zUH~+lBh&whZX@^FLxy+f)~oz4y*e>1{P*g&r#n(UE`Jpx-(5OP^{pdQdtiNAiYH(h zu*u53>O1>sdcG^(s58Bn5_-*d<|kf5_@$56{hs1Xa)hJXG#yQ31bRhcpl6ekTl(&> za;5&bYinaDj3QCgP4lHm2?%f7nmhYSyaSRM-(43pTuTbY3M175?>0S6*j$t>K35ZW ztop=pHR&k?tcwBh-ICBoqP|S~IpsC<2+YsEKHDhy#6M>ATC#H%_4Q`OI=R84lPXgMWCo0Wg_uOcah*{UT$d?v zc?NEJMv3l$oz8YKE2(Bs-7N)9zPdy@yK-`QyYxIe(}h_;&PQ)Y;AatUDL!z2EIGvn z{~pN^dGXE;@I6IVT**dwGc@}YQ)qrQA1^KNHt~CmkdRlp4uI2>!w8>Y;;O3EJhb)m zv4owK(wY2%wm}&xfOcKWxL-%`DPhtZgyNuHX-ISH<3d1DHa&QynwRAyIbp z!ZD294lo)}HX=d91bW zSK^ww^Q?wMyO#=bcs@nG*HvOR>aZRX)Hdk@Nxe2}*SD(D{2;rg_XVHZQ^ z7{;W#(z+TNrUfi{(N2_UH6*l4zW`rKsB_H?|h8&i{AR4w$Rb(_0xB3ZVuaP%r`Z;@|g??)uh_8 zaG=MGWAVxCTRQXF4=a6?*au4uwo%S%a?)5U=c}^zq8unI-*g)SE`X0El!MJqOr-3& zKbs$eymksiR}R*mAe$y_Wv-L$M=pKsv1W>N>fk(J=4+u4u{aB69Ai2QLAuxlP^^?l zwTkD#JoT0$-IK)_vy-RxzqL#Xn1cK&~1*7kd6;mP6SkAHS|18q+Dv{CEb4|+XnyBrO;Lywr| z&>K6db>&W)Nu*LsDJiM17u*wMYP8Xq^)H(*tlQRLT8mS)_P_WOIaca;m9zCD!ggxG zz{aD$s94wNhtJh7FmuR9o{ieu3dkMx^#^m9sYJxmO!JXavXMdu0EC+1!@464r1LpB2N>G&}aje(k95u?j%<19}K@vbUk3JO*7q zeZ==uWw$oT+vI^;#5C zgNRT|ibUxSZ*jMWF5GxTWni3Kql(Pai%rVgQ4{LN+toiBzdvSnvm9QO2(oiw2r$6(y)ogOZ^Ogxh8%0AI4k`pPrjq0m)`yB2XiFptdBlJ~cVIzr=Nv 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 US9AXXg!|{;!~UWLx*ucz5A&@gq5uE@ From 5108d6bcfd4ae6eeaad4da25b6c4186a8f00852a Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:13:20 -0400 Subject: [PATCH 068/388] Delete wzdx_object_diagram_v4.0_restrictions_branch.drawio --- images/wzdx_object_diagram_v4.0_restrictions_branch.drawio | 1 - 1 file changed, 1 deletion(-) delete mode 100644 images/wzdx_object_diagram_v4.0_restrictions_branch.drawio diff --git a/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio b/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio deleted file mode 100644 index e3fc7c5a..00000000 --- a/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file From e533f9df34fb5cab8ff17d8b93a7528566a37b51 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:13:27 -0400 Subject: [PATCH 069/388] Delete wzdx_object_diagram_v4.0_restrictions_branch.jpg --- ...object_diagram_v4.0_restrictions_branch.jpg | Bin 187792 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 images/wzdx_object_diagram_v4.0_restrictions_branch.jpg diff --git a/images/wzdx_object_diagram_v4.0_restrictions_branch.jpg b/images/wzdx_object_diagram_v4.0_restrictions_branch.jpg deleted file mode 100644 index 37490309b434f38597b76f61bd79d4dc22fe5f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187792 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 E9o)bDk^lez From af13246365366f66b76c08ddf5688b7d16dafd0f Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:17:16 -0400 Subject: [PATCH 070/388] Add files via upload --- ...dx_object_diagram_restriction_notice.drawio | 1 + .../wzdx_object_diagram_restriction_notice.jpg | Bin 0 -> 216832 bytes ...ect_diagram_v4.0_restrictions_branch.drawio | 1 + ...object_diagram_v4.0_restrictions_branch.jpg | Bin 0 -> 187792 bytes 4 files changed, 2 insertions(+) create mode 100644 images/wzdx_object_diagram_restriction_notice.drawio create mode 100644 images/wzdx_object_diagram_restriction_notice.jpg create mode 100644 images/wzdx_object_diagram_v4.0_restrictions_branch.drawio create mode 100644 images/wzdx_object_diagram_v4.0_restrictions_branch.jpg diff --git a/images/wzdx_object_diagram_restriction_notice.drawio b/images/wzdx_object_diagram_restriction_notice.drawio new file mode 100644 index 00000000..3ae4e4f5 --- /dev/null +++ b/images/wzdx_object_diagram_restriction_notice.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/images/wzdx_object_diagram_restriction_notice.jpg b/images/wzdx_object_diagram_restriction_notice.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7fef535d71105c8a4d295c0ea53938155171ab68 GIT binary patch literal 216832 zcmeFZ1z4NSwlAKxlmacKXz>;a9^CcA0tr@vdy52u7D;ia(Bc+?1Z{!fQd|oaENF3u z7I%sjZ~t_Ed!J43e}Ctkd!KvmbDsO$3CXN^XU(j4*8IlT@N?|v7r-4T7y<@dxdH%O zx%dEn&RykzC@NY!fN6mt>dJqMxJnJUa98gD08Y*xZZH*v`-Vow_kTV6hkIn@{`epC zzwj^e{XX(5cK~1z^e^K7qeq0+HttpzOy4fP9&Q)HFJ9LAf~K(jllJ;WTmDH${G#1- zVTu<#uP*-whh8JIY zfI9#NPyr}h(EnTAKlSO72>^&6007rw{`t%j0|3;#1OTWf{`rjcH2^>o1OQa`J$~f& z=x;BBckz1_4hH~sa{&NiBLIN>GXOwj@{bq&XWD<(#b1>5{zV%4i*mYLd~5-Z02{!4 z00iI+umbR2P=Ww{fB-=B=OjQ8aP8_Z_v`oCg~P+g`{fAm@vq|(5)cs)5)cv+-6FX~ zbo2I2LPBCv;@c#5?vUOgx z^XtfKSC|1;Nv~WZz4EgK!0-#Z*Z%hR4;9?Fj!%Ghv|pY}rf)eG^L+@JYh#EFnzw6!bOFSLdK z50+nXq!ij@4Iufr-+h`V^0mOj63OY~Nx^6hTpfyaKdx#>*=GXd7m9mQ_qTGJ=<4p*LW z^*2YDJvn$r@~xQQ#yhF<_AJeKe~pr}n8VyBhWm(t()_Af6xZvkdfS>CWh;YN3mu1M zR+-i51Q}Y7!Zjz)g|Iw8yzgKGkB{)G!O+Auj>N~)CK{Z^b&_Is%v=Bfn(uFQF-A)2 z9f&sUD$b;hTlMEcn{q}2R12OG8vGv>81A6uNUS$lpE{92`F?H7UENniLj&oP*;7g^8Wy>1b8XWXk*4Px}sFk^`obQbod9Pb! z?@17UGit9}hMBNWEd*6r4%G=DEhn^&o9bvAm_?)z3rM$Rna{QOPqB5DrQCW!Tk4ue zSo)Sle9t0cZ%c}SxClL&op^83(%lV`7ejYh!F4E9+2*#Ps3A~vT!`Ro z9J1dvfp?oT-md;U9b}!IO%`dlv@DCC_Bn1E*kJxWzWp0f=XX9z7HM=3oj2uXFWvPZ z{SSpEspJoHW|Oe{BsMfmiL8pq9Rn89cc6F zc7aHC0jI$f{;Ep!0A!_?z{+&F0D6Dm z6yLyao`L$a0EDQeZTO`6O4B#cbMq;)gZk(V7V9?jW z*O4vC<9M&kkOY?q9J^IKnuc_uO?7pEp|Kp@e{-!Y_?t4B<39oeu_E5S58S1lJ2k93 z>6GXtqBs*N(hCXPog36xQ3E+W=9VZpWcJ}k+OA=Lv%%5fbT{C#dj9)%0At83;mW}@ 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

NViT>JaZ#(nm;zJ2X|&c4o% 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 at>?A|6T_zy|0UV`zpdl?siI%MPyR2HP%qg4 literal 0 HcmV?d00001 diff --git a/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio b/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio new file mode 100644 index 00000000..e3fc7c5a --- /dev/null +++ b/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio @@ -0,0 +1 @@ +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 \ No newline at end of file diff --git a/images/wzdx_object_diagram_v4.0_restrictions_branch.jpg b/images/wzdx_object_diagram_v4.0_restrictions_branch.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37490309b434f38597b76f61bd79d4dc22fe5f77 GIT binary patch literal 187792 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 E9o)bDk^lez literal 0 HcmV?d00001 From 0cd9460ea8a0f3226040ddb937c2901e769fc0e1 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:23:02 -0400 Subject: [PATCH 071/388] Update README.md --- spec-content/README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index 06ee4527..de63c947 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -24,9 +24,10 @@ This section provides a tabular list of all objects used in the WZDx specificati Object | Description --- | --- [Lane](/spec-content/objects/Lane.md) | An individual lane within a road event. -[LaneRestriction](/spec-content/objects/LaneRestriction.md) | A lane-level restriction, including type and value. +[Restriction](/spec-content/objects/Restriction.md) | Restriction along a road event, including type and value. [Relationship](/spec-content/objects/Relationship.md) | Identification of both sequential and hierarchical relationships between road events and other entities. [RoadEvent](/spec-content/objects/RoadEvent.md) | Information that describes where, when, and what activity is taking place along a road segment. +[RoadEvent-RestrictionNotice](/spec-content/objects/RoadEvent-RestrictionNotice.md) | Information that describes permanent or persistant restrictions along a linear road event. [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. @@ -52,13 +53,13 @@ Enumerated Type | Description [Direction](/spec-content/enumerated-types/Direction.md) | The direction for a road event based on standard naming for US roads. [EventType](/spec-content/enumerated-types/EventType.md) | The type of a WZDx road event. [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of a road event. -[LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.md) | Units of measure used for a lane restriction value. [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | The status of a lane for the traveling public. [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. -[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | The type of vehicle restriction on a roadway. +[RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | The type of vehicle restriction on a roadway. [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | An indication of how a geographical coordinate was defined. [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. +[UnitType](/spec-content/enumerated-types/UnitType.md) | Units of measure used for restriction value. [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. ### Object Properties using Enumerated Types From ea39784659c9ad869511ea2f41202013eab4a739 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:26:33 -0400 Subject: [PATCH 072/388] Update README.md --- spec-content/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index de63c947..84d15126 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -75,8 +75,8 @@ Property | Object | Enumerated Type | Notes `event_status` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | Enumeration created in WZDx v1.0 `location_method` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | Enumeration created in WZDx v3.0 but referenced since v1.1 `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Enumeration created in WZDx v1.0 -`restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Individual lane restrictions | Enumeration created in WZDx v1.0 -`restriction_units` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.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. +`restriction_type` | [Restriction](/spec-content/objects/Restriction.md) | [Restriction](/spec-content/enumerated-types/Restriction.md) | Road and lane restrictions | Enumeration created in WZDx v1.0 +`restriction_units` | [RestrictionUnit](/spec-content/objects/Restriction.md) | [RestrictionUnit](/spec-content/enumerated-types/RestrictionUnit.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. `start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 `status` | [Lane](/spec-content/objects/Lane.md) | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Enumeration created in WZDx v2.0 `type` | [Lane](/spec-content/objects/Lane.md) | [LaneType](/spec-content/enumerated-types/LaneType.md) | Enumeration adapted from TMDD LaneRoadway; updated in WZDx v3.0 From 0ffeedc4e5d160c5c75b7a510d8caf23db581964 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:32:34 -0400 Subject: [PATCH 073/388] Update README.md --- spec-content/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index 84d15126..cc6b3a7b 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -74,9 +74,9 @@ Property | Object | Enumerated Type | Notes `event_type` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventType](/spec-content/enumerated-types/EventType.md) | Enumeration create in WZDx v3.0 `event_status` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | Enumeration created in WZDx v1.0 `location_method` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | Enumeration created in WZDx v3.0 but referenced since v1.1 -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Enumeration created in WZDx v1.0 -`restriction_type` | [Restriction](/spec-content/objects/Restriction.md) | [Restriction](/spec-content/enumerated-types/Restriction.md) | Road and lane restrictions | Enumeration created in WZDx v1.0 -`restriction_units` | [RestrictionUnit](/spec-content/objects/Restriction.md) | [RestrictionUnit](/spec-content/enumerated-types/RestrictionUnit.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. +`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md)
[RoadEvent-RestrictionNotice](/spec-content/objects/RoadEvent-RestrictionNotice.md)
[Lane](/spec-content/objects/Lane.md) | [Restriction](/spec-content/enumerated-types/Restriction.md) | Enumeration created in WZDx v1.0 +`restriction_type` | [Restriction](/spec-content/objects/Restriction.md) | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | Road and lane restrictions | Enumeration created in WZDx v1.0 +`restriction_units` | [Restriction](/spec-content/objects/Restriction.md) | [UnitType](/spec-content/enumerated-types/UnitType.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. `start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 `status` | [Lane](/spec-content/objects/Lane.md) | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Enumeration created in WZDx v2.0 `type` | [Lane](/spec-content/objects/Lane.md) | [LaneType](/spec-content/enumerated-types/LaneType.md) | Enumeration adapted from TMDD LaneRoadway; updated in WZDx v3.0 From 20787bd6d94c67116ab9789e0bc712a25ce9f7ec Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 23 Aug 2021 20:36:07 -0400 Subject: [PATCH 074/388] Create need-to-add-restrictions-to-schema-4.0 --- create-feed/schemas/need-to-add-restrictions-to-schema-4.0 | 1 + 1 file changed, 1 insertion(+) create mode 100644 create-feed/schemas/need-to-add-restrictions-to-schema-4.0 diff --git a/create-feed/schemas/need-to-add-restrictions-to-schema-4.0 b/create-feed/schemas/need-to-add-restrictions-to-schema-4.0 new file mode 100644 index 00000000..6d1ae90b --- /dev/null +++ b/create-feed/schemas/need-to-add-restrictions-to-schema-4.0 @@ -0,0 +1 @@ +Sorry Jacob, I dont know how to do this. :| From 68ae2ad542e5e2337c70057e55fcfc7d49330b6b Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 24 Aug 2021 17:14:22 -0400 Subject: [PATCH 075/388] Revert restriction-notice addition --- .../restriction-notice.geojson | 191 ------------------ 1 file changed, 191 deletions(-) delete mode 100644 create-feed/examples/restriction-notices/restriction-notice.geojson diff --git a/create-feed/examples/restriction-notices/restriction-notice.geojson b/create-feed/examples/restriction-notices/restriction-notice.geojson deleted file mode 100644 index 4b76fec7..00000000 --- a/create-feed/examples/restriction-notices/restriction-notice.geojson +++ /dev/null @@ -1,191 +0,0 @@ - -{ -"road_event_feed_info": { - "update_date": "2021-07-01T15:00:00Z", - "publisher": "New York State DOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 300, - "version": "3.1", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "New York City DOT", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 60, - "update_date": "2021-07-01T00:00:00Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "properties": { - "event_type": "restriction-notice", - "data_source_id": 1, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "road_names": "[\"HRP\",\"Hutchinson Parkway\",\"Hutchinson River Parkway\"]", - "direction": "northbound", - "vehicle_impact": "all-lanes-open", - "restrictions": "[{\"restriction_type\":\"reduced-height\",\"restriction_value\":10.16,\"restriction_units\":\"feet\"}]", - "stroke": "#ff0000", - "stroke-width": 4, - "stroke-opacity": 1 - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83857488632202, - 40.83782481579416 - ], - [ - -73.8385534286499, - 40.83905758069452 - ], - [ - -73.83834958076477, - 40.84045773030475 - ], - [ - -73.83817791938782, - 40.841269397695825 - ], - [ - -73.83692264556885, - 40.84498467829638 - ], - [ - -73.83683949708939, - 40.84519569836051 - ], - [ - -73.83674025535583, - 40.84555483673242 - ], - [ - -73.83666649460793, - 40.84582976902955 - ], - [ - -73.83646667003632, - 40.84667890696712 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "event_type": "restriction-notice", - "data_source_id": 1, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "road_names": "[\"HRP\",\"Hutchinson Parkway\",\"Hutchinson River Parkway\"]", - "direction": "southbound", - "vehicle_impact": "all-lanes-open", - "restrictions": "[{\"restriction_type\":\"reduced-height\",\"restriction_value\":9.0,\"restriction_units\":\"feet\"}]", - "stroke": "#ff0000", - "stroke-width": 4, - "stroke-opacity": 1 - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83725792169571, - 40.84455654898646 - ], - [ - -73.8378158211708, - 40.84294748850873 - ], - [ - -73.83808672428131, - 40.84214192905569 - ], - [ - -73.83834153413773, - 40.84133635981177 - ] - ] - } - }, - { - "type": "Feature", - "properties": { - "event_type": "restriction-notice", - "data_source_id": 1, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "road_names": "[\"HRP\",\"Hutchinson Parkway\",\"Hutchinson River Parkway\"]", - "direction": "southbound", - "vehicle_impact": "all-lanes-open", - "restrictions": "[{\"restriction_type\":\"reduced-height\",\"restriction_value\":11,\"restriction_units\":\"feet\"}]", - "stroke": "#ff0000", - "stroke-width": 4, - "stroke-opacity": 1 - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83834153413773, - 40.841335852523244 - ], - [ - -73.8384260237217, - 40.84103300059402 - ], - [ - -73.83847497403622, - 40.84082856207721 - ], - [ - -73.83851654827595, - 40.84063071775089 - ], - [ - -73.83855678141117, - 40.84045722300951 - ], - [ - -73.83865937590599, - 40.83983324694044 - ], - [ - -73.83872039616108, - 40.8393289888175 - ], - [ - -73.83875325322151, - 40.838710582522424 - ], - [ - -73.83877135813236, - 40.838443230352674 - ], - [ - -73.83877202868462, - 40.83817942829337 - ], - [ - -73.83877471089363, - 40.83773502091179 - ], - [ - -73.83877538144588, - 40.83721857114785 - ], - [ - -73.83877336978912, - 40.83710442404608 - ] - ] - } - } - ] -} From 9567c575775628876a4e9cd53b134decafbe7d9e Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 24 Aug 2021 17:14:37 -0400 Subject: [PATCH 076/388] Revert restriction-notice addition --- spec-content/enumerated-types/EventType.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spec-content/enumerated-types/EventType.md b/spec-content/enumerated-types/EventType.md index 4c295499..ff565054 100644 --- a/spec-content/enumerated-types/EventType.md +++ b/spec-content/enumerated-types/EventType.md @@ -5,7 +5,6 @@ The type of a WZDx road event. Value | Description --- | --- `work-zone` | An area of a trafficway with highway construction, maintenance, or utility-work activities. A work zone is typically marked by signs, channeling devices, barriers, pavement markings, and/or work vehicles. It extends from the first warning sign or flashing lights on a vehicle to the "End of Road Work" sign or the last traffic control device. A work zone may be for short or long durations and may include stationary or moving activities.
Inclusions:

  1. Long-term stationary highway construction such as building a new bridge, adding travel lanes to the roadway, and extending an existing trafficway.
  2. Mobile highway maintenance such as striping the roadway, median, and roadside grass mowing/landscaping, and pothole repair.
  3. Short-term stationary utility work such as repairing electric, gas, or water lines within the trafficway.
Exclusions:
  1. Private construction, maintenance, or utility work outside the trafficway.
*The AASHTO term equivalent to roadway is traveled way.
*The AASHTO term equivalent to trafficway is highway, street, or road.

Source: https://www.fhwa.dot.gov/publications/publicroads/99mayjun/workzone.cfm -`restrictions-notice` | A linear segment, of the transportation network, with a permanent or persistent restriction(s). Restrictions are regulations that limit how the transportation network can be used. `detour` | A temporary rerouting of road users onto an existing trafficway to avoid a work zone or other impedance.

Source: https://mutcd.fhwa.dot.gov/htm/2009/part6/part6c.htm ## Used By From 4d818021395b95027a525a2f27c4c8d994008ff9 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 24 Aug 2021 17:18:39 -0400 Subject: [PATCH 077/388] Remove unneeded used by entry on restriction type --- spec-content/enumerated-types/RestrictionType.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spec-content/enumerated-types/RestrictionType.md b/spec-content/enumerated-types/RestrictionType.md index ed2a1856..3630e724 100644 --- a/spec-content/enumerated-types/RestrictionType.md +++ b/spec-content/enumerated-types/RestrictionType.md @@ -23,5 +23,4 @@ Value | Description Property | Object --- | --- `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`restrictions` | [RoadEvent-RestrictionNotice](/spec-content/objects/RoadEvent-RestrictionNotice.md) `restrictions` | [Lane](/spec-content/objects/Lane.md) From 1f399cdaa1400d544804626c89212d2444b456ac Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 24 Aug 2021 17:21:16 -0400 Subject: [PATCH 078/388] Remove unneeded restriction-notice on list of objects --- spec-content/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spec-content/README.md b/spec-content/README.md index cc6b3a7b..922055cd 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -27,7 +27,6 @@ Object | Description [Restriction](/spec-content/objects/Restriction.md) | Restriction along a road event, including type and value. [Relationship](/spec-content/objects/Relationship.md) | Identification of both sequential and hierarchical relationships between road events and other entities. [RoadEvent](/spec-content/objects/RoadEvent.md) | Information that describes where, when, and what activity is taking place along a road segment. -[RoadEvent-RestrictionNotice](/spec-content/objects/RoadEvent-RestrictionNotice.md) | Information that describes permanent or persistant restrictions along a linear road event. [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. From cc22a663bd66a2a6bcc5bc4a37a70124ad26eac5 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 24 Aug 2021 17:24:31 -0400 Subject: [PATCH 079/388] Clean up spec-content readme --- 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 922055cd..01fffe38 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -61,6 +61,7 @@ Enumerated Type | Description [UnitType](/spec-content/enumerated-types/UnitType.md) | Units of measure used for restriction value. [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. + ### Object Properties using Enumerated Types For ease of reference, the table below describes all properties in the WZDx specification whose value is restricted by an enumerated type, as well as the object that contains that property. @@ -73,7 +74,6 @@ Property | Object | Enumerated Type | Notes `event_type` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventType](/spec-content/enumerated-types/EventType.md) | Enumeration create in WZDx v3.0 `event_status` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | Enumeration created in WZDx v1.0 `location_method` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | Enumeration created in WZDx v3.0 but referenced since v1.1 -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md)
[RoadEvent-RestrictionNotice](/spec-content/objects/RoadEvent-RestrictionNotice.md)
[Lane](/spec-content/objects/Lane.md) | [Restriction](/spec-content/enumerated-types/Restriction.md) | Enumeration created in WZDx v1.0 `restriction_type` | [Restriction](/spec-content/objects/Restriction.md) | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | Road and lane restrictions | Enumeration created in WZDx v1.0 `restriction_units` | [Restriction](/spec-content/objects/Restriction.md) | [UnitType](/spec-content/enumerated-types/UnitType.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. `start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 From c90fa7a6797dcb10df21363eb443570d72174108 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 09:04:21 -0400 Subject: [PATCH 080/388] Fix formatting --- spec-content/enumerated-types/RestrictionType.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec-content/enumerated-types/RestrictionType.md b/spec-content/enumerated-types/RestrictionType.md index 3630e724..5af0f642 100644 --- a/spec-content/enumerated-types/RestrictionType.md +++ b/spec-content/enumerated-types/RestrictionType.md @@ -4,11 +4,11 @@ The type of vehicle restriction on a roadway. ## Values Value | Description --- | --- -`local-access-only` | Only vehicles accessing addresses along the segment being described are allowed; this includes emergency services, deliveries, and direct property access +`local-access-only` | Only vehicles accessing addresses along the segment being described are allowed; this includes emergency services, deliveries, and direct property access. `no-trucks` | Trucks are prohibited from traveling this part of the network. -`travel-peak-hours-only` | Travel restricted to travel peak hours only -`hov-3` | Travel restricted to high occupancy vehicles of three or more -`hov-2` | Travel restricted to high occupancy vehicles of two or more +`travel-peak-hours-only` | Travel restricted to travel peak hours only. +`hov-3` | Travel restricted to high occupancy vehicles of three or more. +`hov-2` | Travel restricted to high occupancy vehicles of two or more. `no-parking` | No parking along the segment being described. `reduced-width` | Lane width reduced along the segment being described. `reduced-height` | Height restrictions reduced along the segment being described. @@ -17,7 +17,7 @@ Value | Description `axle-load-limit` | Vehicle axle-load-limit restrictions reduced along the segment being described. `gross-weight-limit` | Vehicle gross-weight-limit restrictions reduced along the segment being described. `towing-prohibited` | Towing prohibited along the segment being described. -`permitted-oversize-loads-prohibited` | “Permitted oversize loads” prohibited along the segment being described; this applies
to annual oversize load permits. +`permitted-oversize-loads-prohibited` | “Permitted oversize loads” prohibited along the segment being described; this applies to annual oversize load permits. ## Used By Property | Object From 4c78005529952f072f16152e23cb86addf0b3007 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 09:28:34 -0400 Subject: [PATCH 081/388] Update schema with restriction change --- create-feed/schemas/wzdx_v4.0_feed.json | 41 ++++++++++++------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index c5c9dc08..8c521917 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -271,12 +271,11 @@ "minimum": 0 }, "restrictions": { - "description": "Zero or more road restrictions applying to the road event", + "description": "A list of zero or more restrictions applying to the road event", "type": "array", "items": { - "$ref": "#/definitions/RoadRestriction" - }, - "uniqueItems": true + "$ref": "#/definitions/Restriction" + } }, "description": { "description": "Short free text description of the road event", @@ -416,33 +415,33 @@ "minimum": 1 }, "restrictions": { - "description": "A list of restrictions specific to the lane", + "description": "A list of zero or more restrictions specific to the lane", "type": "array", "items": { - "$ref": "#/definitions/LaneRestriction" + "$ref": "#/definitions/Restriction" } } }, "required": ["status", "type", "order"] }, - "LaneRestriction": { - "title": "Lane Restriction", - "description": "A lane-level restriction, including type and value", + "Restriction": { + "title": "Restriction", + "description": "A restriction on a roadway, including type and value", "type": "object", "properties": { - "restriction_type": { - "$ref": "#/definitions/RoadRestriction" + "type": { + "$ref": "#/definitions/RestrictionType" }, - "restriction_value": { + "value": { "type": "number" }, - "restriction_units": { - "$ref": "#/definitions/LaneRestrictionUnit" + "unit": { + "$ref": "#/definitions/UnitOfMeasurement" } }, - "required": ["restriction_type"], + "required": ["type"], "dependencies": { - "restriction_value": ["restriction_units"] + "value": ["unit"] } }, "EventType": { @@ -475,8 +474,8 @@ "description": "The impact to vehicular lanes along a single road in a single direction", "enum": ["all-lanes-closed", "some-lanes-closed", "all-lanes-open", "alternating-one-way", "unknown"] }, - "RoadRestriction": { - "title": "Road Restriction Enumerated Type", + "RestrictionType": { + "title": "Restriction Type Enumerated Type", "description": "The type of vehicle restriction on a roadway", "enum": [ "no-trucks", @@ -552,9 +551,9 @@ "left-second-entrance-ramp" ] }, - "LaneRestrictionUnit": { - "title": "Lane Restriction Unit Enumerated Type", - "description": "Units of measure used for the lane restriction value", + "UnitOfMeasurement": { + "title": "Unit Of Measurement Enumerated Type", + "description": "Units of measurement", "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] } } From 2c81f2fb955faa095352b809cd35095c8f7cc2f8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 11:51:07 -0400 Subject: [PATCH 082/388] Update examples to match restriction refactoring --- .../comprehensive_linestring_example.geojson | 31 +++++++++-------- ...y_bidirectional_linestring_example.geojson | 12 ++++--- ...cenario1_simple_linestring_example.geojson | 6 ++-- ...er_bidrectional_linestring_example.geojson | 6 ++-- ...cenario4_detour_linestring_example.geojson | 9 ++--- .../comprehensive_multipoint_example.geojson | 33 ++++++++++--------- ...y_bidirectional_multipoint_example.geojson | 12 ++++--- ...cenario1_simple_multipoint_example.geojson | 6 ++-- ...er_bidrectional_multipoint_example.geojson | 6 ++-- ...cenario4_detour_multipoint_example.geojson | 9 ++--- 10 files changed, 72 insertions(+), 58 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 830d5027..45a01105 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -81,7 +81,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "local-access-only" + { + "type": "local-access-only" + } ], "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", "creation_date": "2010-01-01T01:01:01Z", @@ -138,7 +140,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "local-access-only" + { + "type": "local-access-only" + } ], "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", "creation_date": "2010-01-01T01:01:01Z", @@ -150,7 +154,7 @@ "type": "lane", "restrictions": [ { - "restriction_type": "local-access-only" + "type": "local-access-only" } ] }, @@ -160,7 +164,7 @@ "type": "bike-lane", "restrictions": [ { - "restriction_type": "local-access-only" + "type": "local-access-only" } ] } @@ -289,9 +293,9 @@ "type": "lane", "restrictions": [ { - "restriction_type": "reduced-width", - "restriction_value": 10, - "restriction_units": "feet" + "type": "reduced-width", + "value": 10, + "unit": "feet" } ] }, @@ -1106,7 +1110,6 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "all-lanes-open", - "restrictions": [], "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", "creation_date": "2010-01-01T09:30:26Z", "update_date": "2010-01-01T09:30:26Z", @@ -1210,7 +1213,7 @@ "type": "shoulder", "restrictions": [ { - "restriction_type": "no-parking" + "type": "no-parking" } ] } @@ -1280,7 +1283,9 @@ "workers_present": true, "reduced_speed_limit": 55, "restrictions": [ - "reduced-width" + { + "type": "reduced-width" + } ], "description": "Simple, single direction work zone with detour.", "creation_date": "2009-12-15T14:01:01Z", @@ -1303,9 +1308,9 @@ "type": "lane", "restrictions": [ { - "restriction_type": "reduced-width", - "restriction_value": 11, - "restriction_units": "feet" + "type": "reduced-width", + "value": 11, + "unit": "feet" } ] }, diff --git a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson index 32be0c50..e1c0829e 100644 --- a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson @@ -45,7 +45,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "local-access-only" + { + "type": "local-access-only" + } ], "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", "creation_date": "2010-01-01T01:01:01Z", @@ -102,7 +104,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "local-access-only" + { + "type": "local-access-only" + } ], "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", "creation_date": "2010-01-01T01:01:01Z", @@ -114,7 +118,7 @@ "type": "lane", "restrictions": [ { - "restriction_type": "local-access-only" + "type": "local-access-only" } ] }, @@ -124,7 +128,7 @@ "type": "bike-lane", "restrictions": [ { - "restriction_type": "local-access-only" + "type": "local-access-only" } ] } diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index a6f6b451..064cc54b 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -121,9 +121,9 @@ "type": "lane", "restrictions": [ { - "restriction_type": "reduced-width", - "restriction_value": 10, - "restriction_units": "feet" + "type": "reduced-width", + "value": 10, + "unit": "feet" } ] }, diff --git a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson index 3febad6d..9ab591b9 100644 --- a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson @@ -133,7 +133,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "no-parking" + { + "type": "no-parking" + } ], "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", "creation_date": "2010-01-01T09:30:26Z", @@ -155,7 +157,7 @@ "type": "shoulder", "restrictions": [ { - "restriction_type": "no-parking" + "type": "no-parking" } ] } diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 0e5ed38b..7c6ad96c 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -53,9 +53,6 @@ "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, - "restrictions": [ - "reduced-width" - ], "description": "Simple, single direction work zone with detour.", "creation_date": "2009-12-15T14:01:01Z", "update_date": "2010-01-01T01:03:01Z", @@ -77,9 +74,9 @@ "type": "lane", "restrictions": [ { - "restriction_type": "reduced-width", - "restriction_value": 11, - "restriction_units": "feet" + "type": "reduced-width", + "value": 11, + "unit": "feet" } ] }, diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index 9c2d4ab3..b8f9a2bb 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -81,7 +81,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "local-access-only" + { + "type": "local-access-only" + } ], "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", "creation_date": "2010-01-01T01:01:01Z", @@ -122,7 +124,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "local-access-only" + { + "type": "local-access-only" + } ], "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", "creation_date": "2010-01-01T01:01:01Z", @@ -134,7 +138,7 @@ "type": "lane", "restrictions": [ { - "restriction_type": "local-access-only" + "type": "local-access-only" } ] }, @@ -144,7 +148,7 @@ "type": "bike-lane", "restrictions": [ { - "restriction_type": "local-access-only" + "type": "local-access-only" } ] } @@ -233,9 +237,9 @@ "type": "lane", "restrictions": [ { - "restriction_type": "reduced-width", - "restriction_value": 10, - "restriction_units": "feet" + "type": "reduced-width", + "value": 10, + "unit": "feet" } ] }, @@ -696,7 +700,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "no-parking" + { + "type": "no-parking" + } ], "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", "creation_date": "2010-01-01T09:30:26Z", @@ -718,7 +724,7 @@ "type": "shoulder", "restrictions": [ { - "restriction_type": "no-parking" + "type": "no-parking" } ] } @@ -767,9 +773,6 @@ "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, - "restrictions": [ - "reduced-width" - ], "description": "Simple, single direction work zone with detour.", "creation_date": "2009-12-15T14:01:01Z", "update_date": "2010-01-01T01:03:01Z", @@ -791,9 +794,9 @@ "type": "lane", "restrictions": [ { - "restriction_type": "reduced-width", - "restriction_value": 11, - "restriction_units": "feet" + "type": "reduced-width", + "value": 11, + "unit": "feet" } ] }, diff --git a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson index f3891e37..bfb1f7da 100644 --- a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson @@ -45,7 +45,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "local-access-only" + { + "type": "local-access-only" + } ], "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", "creation_date": "2010-01-01T01:01:01Z", @@ -86,7 +88,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "local-access-only" + { + "type": "local-access-only" + } ], "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", "creation_date": "2010-01-01T01:01:01Z", @@ -98,7 +102,7 @@ "type": "lane", "restrictions": [ { - "restriction_type": "local-access-only" + "type": "local-access-only" } ] }, @@ -108,7 +112,7 @@ "type": "bike-lane", "restrictions": [ { - "restriction_type": "local-access-only" + "type": "local-access-only" } ] } diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 04e4b0c0..17db08f9 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -105,9 +105,9 @@ "type": "lane", "restrictions": [ { - "restriction_type": "reduced-width", - "restriction_value": 10, - "restriction_units": "feet" + "type": "reduced-width", + "value": 10, + "unit": "feet" } ] }, diff --git a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson index b0e5af91..b6eb5f30 100644 --- a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson @@ -121,7 +121,9 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ - "no-parking" + { + "type": "no-parking" + } ], "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", "creation_date": "2010-01-01T09:30:26Z", @@ -143,7 +145,7 @@ "type": "shoulder", "restrictions": [ { - "restriction_type": "no-parking" + "type": "no-parking" } ] } diff --git a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson index 8946a76b..0339519b 100644 --- a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson @@ -53,9 +53,6 @@ "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, - "restrictions": [ - "reduced-width" - ], "description": "Simple, single direction work zone with detour.", "creation_date": "2009-12-15T14:01:01Z", "update_date": "2010-01-01T01:03:01Z", @@ -77,9 +74,9 @@ "type": "lane", "restrictions": [ { - "restriction_type": "reduced-width", - "restriction_value": 11, - "restriction_units": "feet" + "type": "reduced-width", + "value": 11, + "unit": "feet" } ] }, From 52a8b2f55b7b75f8e1a440e54ae259e5c285e7ae Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 11:53:24 -0400 Subject: [PATCH 083/388] Fix and finalize restrictions changes --- README.md | 6 ++-- spec-content/README.md | 6 ++-- .../{UnitType.md => UnitOfMeasurement.md} | 6 ++-- spec-content/objects/Lane.md | 1 - spec-content/objects/Restriction.md | 11 +++---- .../objects/RoadEvent-RestrictionNotice.md | 31 ------------------- spec-content/objects/RoadEvent.md | 2 +- 7 files changed, 15 insertions(+), 48 deletions(-) rename spec-content/enumerated-types/{UnitType.md => UnitOfMeasurement.md} (57%) delete mode 100644 spec-content/objects/RoadEvent-RestrictionNotice.md diff --git a/README.md b/README.md index 512318ed..dc6108bd 100644 --- a/README.md +++ b/README.md @@ -48,17 +48,17 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [RoadEvent](/spec-content/objects/RoadEvent.md) - [TypeOfWork](/spec-content/objects/TypeOfWork.md) - [Lane](/spec-content/objects/Lane.md) - - [LaneRestriction](/spec-content/objects/LaneRestriction.md) + - [Restriction](/spec-content/objects/Restriction.md) - [Relationship](/spec-content/objects/Relationship.md) - [**Enumerated Types**](/spec-content/enumerated-types) - [Direction](/spec-content/enumerated-types/Direction.md) - [EventStatus](/spec-content/enumerated-types/EventStatus.md) - [EventType](/spec-content/enumerated-types/EventType.md) - - [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.md) + - [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) - [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) - [LaneType](/spec-content/enumerated-types/LaneType.md) - [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) - - [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) + - [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) - [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) - [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) - [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) diff --git a/spec-content/README.md b/spec-content/README.md index 01fffe38..ba64c4d6 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -58,7 +58,7 @@ Enumerated Type | Description [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | The type of vehicle restriction on a roadway. [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | An indication of how a geographical coordinate was defined. [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. -[UnitType](/spec-content/enumerated-types/UnitType.md) | Units of measure used for restriction value. +[UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | Units of measurement (e.g. "pounds", "centimeters"). [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. @@ -74,8 +74,8 @@ Property | Object | Enumerated Type | Notes `event_type` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventType](/spec-content/enumerated-types/EventType.md) | Enumeration create in WZDx v3.0 `event_status` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | Enumeration created in WZDx v1.0 `location_method` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | Enumeration created in WZDx v3.0 but referenced since v1.1 -`restriction_type` | [Restriction](/spec-content/objects/Restriction.md) | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | Road and lane restrictions | Enumeration created in WZDx v1.0 -`restriction_units` | [Restriction](/spec-content/objects/Restriction.md) | [UnitType](/spec-content/enumerated-types/UnitType.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. +`type` | [Restriction](/spec-content/objects/Restriction.md) | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | Enumeration created in WZDx v1.0 +`unit` | [Restriction](/spec-content/objects/Restriction.md) | [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | More values will be added as needed. `start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 `status` | [Lane](/spec-content/objects/Lane.md) | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Enumeration created in WZDx v2.0 `type` | [Lane](/spec-content/objects/Lane.md) | [LaneType](/spec-content/enumerated-types/LaneType.md) | Enumeration adapted from TMDD LaneRoadway; updated in WZDx v3.0 diff --git a/spec-content/enumerated-types/UnitType.md b/spec-content/enumerated-types/UnitOfMeasurement.md similarity index 57% rename from spec-content/enumerated-types/UnitType.md rename to spec-content/enumerated-types/UnitOfMeasurement.md index 904f3ea8..d77f3f1c 100644 --- a/spec-content/enumerated-types/UnitType.md +++ b/spec-content/enumerated-types/UnitOfMeasurement.md @@ -1,5 +1,5 @@ -# UnitType -Units of measure used for a restriction value. +# Unit of Measurement +Unit of measurement. This enumerated type is intended for use across the specification and more values can be added in the future if needed. ## Values Value | Description @@ -14,4 +14,4 @@ Value | Description ## Used By Property | Object --- | --- -`restriction_units` | [Restriction](/spec-content/objects/Restriction.md) +`unit` | [Restriction](/spec-content/objects/Restriction.md) diff --git a/spec-content/objects/Lane.md b/spec-content/objects/Lane.md index b3782bac..98c38c61 100644 --- a/spec-content/objects/Lane.md +++ b/spec-content/objects/Lane.md @@ -14,4 +14,3 @@ Name | Type | Description | Conformance | Notes Property | Object --- | --- `lanes` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`lanes` | [RoadEvent-RestrictionsNotice](/spec-content/objects/RoadEvent-RestrictionsNotice.md) diff --git a/spec-content/objects/Restriction.md b/spec-content/objects/Restriction.md index 68831320..9317b456 100644 --- a/spec-content/objects/Restriction.md +++ b/spec-content/objects/Restriction.md @@ -1,16 +1,15 @@ # Restriction Object -The `Restriction` object describes a restriction on a road event. +The Restriction object describes a restriction on a roadway. This object is used by both the [RoadEvent](/spec-content/objectsRoadEvent.md) and [Lane](/spec-content/objects/Lane.md) objects. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`restriction_type` | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | The type of restriction being enforced. | Required | -`restriction_value` | Number | The measure of the restriction type. | Optional | -`restriction_units` | [UnitType](/spec-content/enumerated-types/RestrictionUnit.md) | Units of measure for the restriction value. | Conditional: required if `restriction_value` is not null | - +`type` | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | The type of restriction being enforced. | Required | +`value` | Number | A value associated with the restriction, if applicable. | Optional | For example, if `type` is `reduced-height`, `value` and `unit` together would allow indicating what value the height was reduced to. +`unit` | [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | Unit of measurement for the restriction `value`, if applicable. | Conditional: required if `value` is not null | + ## Used By Property | Object --- | --- `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`restrictions` | [RoadEvent-RestrictionNotice](/spec-content/objects/RoadEvent-RestrictionNotice.md) `restrictions` | [Lane](/spec-content/objects/Lane.md) diff --git a/spec-content/objects/RoadEvent-RestrictionNotice.md b/spec-content/objects/RoadEvent-RestrictionNotice.md deleted file mode 100644 index 0d47bdc2..00000000 --- a/spec-content/objects/RoadEvent-RestrictionNotice.md +++ /dev/null @@ -1,31 +0,0 @@ -# RoadEvent-RestrictionNotice Object -The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone`, `restriction-notice`, and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). - -## Properties -Name | Type | Description | Conformance | Notes ---- | --- | --- | --- | --- -`event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | -`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same WZDx GeoJSON document. -`beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | -`ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | -`road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | -`direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) -`vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | -`restrictions` | Array; \[[Restriction](/spec-content/objects/Restriction.md)\] | Zero or more restrictions applying to the road event being described. | Conditional: required if `lanes` is not provided. | -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Conditional: required if `restrictions` is not provided. | -`relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | -`beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | -`ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | -`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. -`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. -`description` | String | Short free text description of the road event. | Optional | This will be populated with formal phrases in later version of this specification. -`creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. - -## Used By -Property | Object ---- | --- -`properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) - -## Important Notes -The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index b90d7a71..8850669f 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -25,7 +25,7 @@ Name | Type | Description | Conformance | Notes `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `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 | -`restrictions` | Array; [Restriction](/spec-content/objects/Restriction.md) | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. +`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | Restrictions can also be provided on an individual lane. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From bf0584c4fa67d93a8eef9e54f130016d7802117c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 12:04:57 -0400 Subject: [PATCH 084/388] Remove unneeded placeholder file --- create-feed/schemas/need-to-add-restrictions-to-schema-4.0 | 1 - 1 file changed, 1 deletion(-) delete mode 100644 create-feed/schemas/need-to-add-restrictions-to-schema-4.0 diff --git a/create-feed/schemas/need-to-add-restrictions-to-schema-4.0 b/create-feed/schemas/need-to-add-restrictions-to-schema-4.0 deleted file mode 100644 index 6d1ae90b..00000000 --- a/create-feed/schemas/need-to-add-restrictions-to-schema-4.0 +++ /dev/null @@ -1 +0,0 @@ -Sorry Jacob, I dont know how to do this. :| From 0a2c3da83f2b3ab1bea08ff589c71d40f445b102 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 12:08:29 -0400 Subject: [PATCH 085/388] Clarify that a restriction can be on a roadway or lane --- create-feed/schemas/wzdx_v4.0_feed.json | 2 +- spec-content/objects/Restriction.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 8c521917..aa6c4802 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -426,7 +426,7 @@ }, "Restriction": { "title": "Restriction", - "description": "A restriction on a roadway, including type and value", + "description": "A restriction on a roadway or lane, including type and value", "type": "object", "properties": { "type": { diff --git a/spec-content/objects/Restriction.md b/spec-content/objects/Restriction.md index 9317b456..d299fe65 100644 --- a/spec-content/objects/Restriction.md +++ b/spec-content/objects/Restriction.md @@ -1,12 +1,12 @@ # Restriction Object -The Restriction object describes a restriction on a roadway. This object is used by both the [RoadEvent](/spec-content/objectsRoadEvent.md) and [Lane](/spec-content/objects/Lane.md) objects. +The Restriction object describes a restriction on a roadway or lane. This object is used by both the [RoadEvent](/spec-content/objectsRoadEvent.md) and [Lane](/spec-content/objects/Lane.md) objects. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `type` | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | The type of restriction being enforced. | Required | `value` | Number | A value associated with the restriction, if applicable. | Optional | For example, if `type` is `reduced-height`, `value` and `unit` together would allow indicating what value the height was reduced to. -`unit` | [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | Unit of measurement for the restriction `value`, if applicable. | Conditional: required if `value` is not null | +`unit` | [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | Unit of measurement for the restriction `value`, if applicable. | Conditional: required if `value` is not null. | ## Used By Property | Object From 8c4768c8233f3e1356277dc2a2dc81522b8e4171 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 12:13:00 -0400 Subject: [PATCH 086/388] Use singular for unit in schema description --- create-feed/schemas/wzdx_v4.0_feed.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index aa6c4802..99a21e35 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -552,8 +552,8 @@ ] }, "UnitOfMeasurement": { - "title": "Unit Of Measurement Enumerated Type", - "description": "Units of measurement", + "title": "Unit of Measurement Enumerated Type", + "description": "Unit of measurement, used when providing a unit to accompany a value", "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] } } From 28947add94946e182e6cadde5c3a04eee63f3735 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 12:14:31 -0400 Subject: [PATCH 087/388] Remove unneeded branch-specific diagram --- ...ect_diagram_v4.0_restrictions_branch.drawio | 1 - ...object_diagram_v4.0_restrictions_branch.jpg | Bin 187792 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100644 images/wzdx_object_diagram_v4.0_restrictions_branch.drawio delete mode 100644 images/wzdx_object_diagram_v4.0_restrictions_branch.jpg diff --git a/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio b/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio deleted file mode 100644 index e3fc7c5a..00000000 --- a/images/wzdx_object_diagram_v4.0_restrictions_branch.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/images/wzdx_object_diagram_v4.0_restrictions_branch.jpg b/images/wzdx_object_diagram_v4.0_restrictions_branch.jpg deleted file mode 100644 index 37490309b434f38597b76f61bd79d4dc22fe5f77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 187792 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 E9o)bDk^lez From 5b3576ae3c9ebb997a2806935449219517e8554a Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 12:20:28 -0400 Subject: [PATCH 088/388] Fix minor editorial issues --- spec-content/README.md | 6 +++--- spec-content/objects/Lane.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index ba64c4d6..6e2dab38 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -24,7 +24,7 @@ This section provides a tabular list of all objects used in the WZDx specificati Object | Description --- | --- [Lane](/spec-content/objects/Lane.md) | An individual lane within a road event. -[Restriction](/spec-content/objects/Restriction.md) | Restriction along a road event, including type and value. +[Restriction](/spec-content/objects/Restriction.md) | A restriction on a road event or lane, including type and value. [Relationship](/spec-content/objects/Relationship.md) | Identification of both sequential and hierarchical relationships between road events and other entities. [RoadEvent](/spec-content/objects/RoadEvent.md) | Information that describes where, when, and what activity is taking place along a road segment. [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. @@ -55,10 +55,10 @@ Enumerated Type | Description [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | The status of a lane for the traveling public. [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. -[RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | The type of vehicle restriction on a roadway. +[RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | The type of vehicle restriction on a roadway or lane. [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | An indication of how a geographical coordinate was defined. [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. -[UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | Units of measurement (e.g. "pounds", "centimeters"). +[UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | Unit of measurement (e.g. "pounds", "centimeters"). [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. diff --git a/spec-content/objects/Lane.md b/spec-content/objects/Lane.md index 98c38c61..76768632 100644 --- a/spec-content/objects/Lane.md +++ b/spec-content/objects/Lane.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes `type` | [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. | Required | `status` | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Status of the lane for the traveling public. | Required | `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. -`restrictions` | Array; [Restriction](/spec-content/objects/Restriction.md) | A list of specific restrictions that apply to the lane. | Optional | +`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of specific restrictions that apply to the lane. | Optional | ## Used By Property | Object From 007910ba9ac9da7c732a35e1d5b4bed822c6156c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 12:24:15 -0400 Subject: [PATCH 089/388] Clarify description of restrictions on the road event --- spec-content/objects/RoadEvent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 8850669f..bb8eaaee 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -25,7 +25,7 @@ Name | Type | Description | Conformance | Notes `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `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 | -`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | Restrictions can also be provided on an individual lane. +`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Optional | Restrictions can also be provided on an individual lane. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From 8116f3bf21994aec111d4f673b6d7f94b9aa580c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 12:40:50 -0400 Subject: [PATCH 090/388] Remove unneeded extra diagram files --- ...dx_object_diagram_restriction_notice.drawio | 1 - .../wzdx_object_diagram_restriction_notice.jpg | Bin 216832 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100644 images/wzdx_object_diagram_restriction_notice.drawio delete mode 100644 images/wzdx_object_diagram_restriction_notice.jpg diff --git a/images/wzdx_object_diagram_restriction_notice.drawio b/images/wzdx_object_diagram_restriction_notice.drawio deleted file mode 100644 index 3ae4e4f5..00000000 --- a/images/wzdx_object_diagram_restriction_notice.drawio +++ /dev/null @@ -1 +0,0 @@ -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 \ No newline at end of file diff --git a/images/wzdx_object_diagram_restriction_notice.jpg b/images/wzdx_object_diagram_restriction_notice.jpg deleted file mode 100644 index 7fef535d71105c8a4d295c0ea53938155171ab68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 216832 zcmeFZ1z4NSwlAKxlmacKXz>;a9^CcA0tr@vdy52u7D;ia(Bc+?1Z{!fQd|oaENF3u z7I%sjZ~t_Ed!J43e}Ctkd!KvmbDsO$3CXN^XU(j4*8IlT@N?|v7r-4T7y<@dxdH%O zx%dEn&RykzC@NY!fN6mt>dJqMxJnJUa98gD08Y*xZZH*v`-Vow_kTV6hkIn@{`epC zzwj^e{XX(5cK~1z^e^K7qeq0+HttpzOy4fP9&Q)HFJ9LAf~K(jllJ;WTmDH${G#1- zVTu<#uP*-whh8JIY zfI9#NPyr}h(EnTAKlSO72>^&6007rw{`t%j0|3;#1OTWf{`rjcH2^>o1OQa`J$~f& z=x;BBckz1_4hH~sa{&NiBLIN>GXOwj@{bq&XWD<(#b1>5{zV%4i*mYLd~5-Z02{!4 z00iI+umbR2P=Ww{fB-=B=OjQ8aP8_Z_v`oCg~P+g`{fAm@vq|(5)cs)5)cv+-6FX~ zbo2I2LPBCv;@c#5?vUOgx z^XtfKSC|1;Nv~WZz4EgK!0-#Z*Z%hR4;9?Fj!%Ghv|pY}rf)eG^L+@JYh#EFnzw6!bOFSLdK z50+nXq!ij@4Iufr-+h`V^0mOj63OY~Nx^6hTpfyaKdx#>*=GXd7m9mQ_qTGJ=<4p*LW z^*2YDJvn$r@~xQQ#yhF<_AJeKe~pr}n8VyBhWm(t()_Af6xZvkdfS>CWh;YN3mu1M zR+-i51Q}Y7!Zjz)g|Iw8yzgKGkB{)G!O+Auj>N~)CK{Z^b&_Is%v=Bfn(uFQF-A)2 z9f&sUD$b;hTlMEcn{q}2R12OG8vGv>81A6uNUS$lpE{92`F?H7UENniLj&oP*;7g^8Wy>1b8XWXk*4Px}sFk^`obQbod9Pb! z?@17UGit9}hMBNWEd*6r4%G=DEhn^&o9bvAm_?)z3rM$Rna{QOPqB5DrQCW!Tk4ue zSo)Sle9t0cZ%c}SxClL&op^83(%lV`7ejYh!F4E9+2*#Ps3A~vT!`Ro z9J1dvfp?oT-md;U9b}!IO%`dlv@DCC_Bn1E*kJxWzWp0f=XX9z7HM=3oj2uXFWvPZ z{SSpEspJoHW|Oe{BsMfmiL8pq9Rn89cc6F zc7aHC0jI$f{;Ep!0A!_?z{+&F0D6Dm z6yLyao`L$a0EDQeZTO`6O4B#cbMq;)gZk(V7V9?jW z*O4vC<9M&kkOY?q9J^IKnuc_uO?7pEp|Kp@e{-!Y_?t4B<39oeu_E5S58S1lJ2k93 z>6GXtqBs*N(hCXPog36xQ3E+W=9VZpWcJ}k+OA=Lv%%5fbT{C#dj9)%0At83;mW}@ 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

NViT>JaZ#(nm;zJ2X|&c4o% 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 at>?A|6T_zy|0UV`zpdl?siI%MPyR2HP%qg4 From bf81fd65fcb06007be5da5be52ea07f913d516e6 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 25 Aug 2021 12:49:31 -0400 Subject: [PATCH 091/388] Add empty line for consistency in formatting --- spec-content/enumerated-types/VehicleImpact.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spec-content/enumerated-types/VehicleImpact.md b/spec-content/enumerated-types/VehicleImpact.md index 24edbc70..1871a8ab 100644 --- a/spec-content/enumerated-types/VehicleImpact.md +++ b/spec-content/enumerated-types/VehicleImpact.md @@ -16,6 +16,7 @@ Value | Description `flagging` | A flagging operation is in effect `temporary-traffic-signal` | A temporary traffic signal is in operation `unknown` | The vehicle impact is unknown + ## Used By Property | Object --- | --- From bb46a197d2cb8a69f7b928b0550094f57b312415 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Wed, 25 Aug 2021 13:55:16 -0500 Subject: [PATCH 092/388] Update description Updated description of the spatial verification enumerations. --- spec-content/enumerated-types/SpatialVerification.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/enumerated-types/SpatialVerification.md b/spec-content/enumerated-types/SpatialVerification.md index a24df232..0bd2a021 100644 --- a/spec-content/enumerated-types/SpatialVerification.md +++ b/spec-content/enumerated-types/SpatialVerification.md @@ -4,8 +4,8 @@ An indication of how a geographical coordinate was defined. ## Values Value | Description --- | --- -`estimated` | Estimated location associated with work zone activities and lane closures.
An estimated measurement may be based on an approximation of a location
referencing method (e.g., lat/long or milepost), for example: a point relative to a
posted milemarker, point on a map, or GPS device that provides less than
centimeter accuracy. -`verified` | Actual reported information about work zone locations. Actual location is
typically measured by a calibrated navigation or survey system to centimeter
accuracy (six decimal places for latitude and longitude). +`estimated` | Estimated location for the work zone road event geometry. An estimated measurement is based on an approximation of the reported location of a work zone. Approximations of the location can include but are not limited to a point relative to a posted mile maker or cross street, selecting a point on a map, or locations based on project plans. +`verified` | Verified locations for the work zone road event geometry representing the actual extents of the work zone. A verified measurement is based on actual reported data from a GPS equipped device showing the measured location of the work zone. Ths actual location is measured using a GPS device that provides the verified location of the identified location. ## Used By Property | Object From fb8e17cabfc60aac14f247531ebb8ce0ae1aa36c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 26 Aug 2021 08:53:55 -0400 Subject: [PATCH 093/388] Add link to spatial verification enumerated type --- spec-content/objects/RoadEventDataSource.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEventDataSource.md b/spec-content/objects/RoadEventDataSource.md index 755c83b6..9e8f9fd3 100644 --- a/spec-content/objects/RoadEventDataSource.md +++ b/spec-content/objects/RoadEventDataSource.md @@ -13,7 +13,7 @@ Name | Type | Description | Conformance | Notes `contact_email` | String; [email](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.2) | The email address of the individual or group responsible for the data source. | Optional | `lrs_type` | String | Describes the type of linear referencing system (LRS) used for the milepost measurements. | Optional | Example: `Use of milemarkers posted by the roadways. These are registered to a dynamic segmentation of statewide LRS basemap.` `lrs_url` | String; [uri](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.5) | A URL where additional information on the LRS information and transformation information is stored. | Optional | Example `https://aaa.bbb.com/lrs` -`location_verify_method` (DEPRECATED) | String | *This property is deprecated and will be removed in a future version; verified locations must use GPS devices as defined in the `Spatial Verification` enumerations* — The method used to verify the accuracy of the location information. | Optional | Example: `Survey accurate GPS equipment accurate to 0.1 cm` +`location_verify_method` (DEPRECATED) | String | *This property is deprecated and will be removed in a future version; verified locations must use GPS devices as defined in the [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) enumerated type* — The method used to verify the accuracy of the location information. | Optional | Example: `Survey accurate GPS equipment accurate to 0.1 cm` ## Used By Property | Object From 7ec93051083b0d0eff153495e323ba7b16fd7f1d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 26 Aug 2021 08:56:56 -0400 Subject: [PATCH 094/388] Remove location_verify_method from examples --- .../comprehensive_linestring_example.geojson | 4 ---- ...local_access_only_bidirectional_linestring_example.geojson | 1 - .../scenario1_simple_linestring_example.geojson | 2 -- .../scenario2_laneshift_linestring_example.geojson | 1 - ...scenario3_shoulder_bidrectional_linestring_example.geojson | 1 - .../scenario4_detour_linestring_example.geojson | 1 - .../scenario5_recurring_linestring_example.geojson | 1 - .../comprehensive_multipoint_example.geojson | 4 ---- ...local_access_only_bidirectional_multipoint_example.geojson | 1 - .../scenario1_simple_multipoint_example.geojson | 2 -- ...scenario3_shoulder_bidrectional_multipoint_example.geojson | 1 - .../scenario4_detour_multipoint_example.geojson | 1 - .../scenario5_recurring_multipoint_example.geojson | 1 - 13 files changed, 21 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 830d5027..5c67226e 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" @@ -27,7 +26,6 @@ "contact_email": "samuel.sourcefeed@testdot.gov", "update_frequency": 60, "update_date": "2020-06-18T14:39:01Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" @@ -39,7 +37,6 @@ "contact_email": "stu.sourcefeed@testcounty1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:05Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" @@ -51,7 +48,6 @@ "contact_email": "skip.sourcefeed@testcity2.gov", "update_frequency": 60, "update_date": "2020-06-18T14:38:59Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson index 32be0c50..6a906aff 100644 --- a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index a6f6b451..08d47256 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" @@ -27,7 +26,6 @@ "contact_email": "samuel.sourcefeed@testdot.gov", "update_frequency": 60, "update_date": "2020-06-18T14:39:01Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index 3ec8ffaf..2faf8c7c 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson index 3febad6d..bbfcd26d 100644 --- a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 0e5ed38b..72037305 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson index fc1817e7..e03284fc 100644 --- a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index 9c2d4ab3..50956c69 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" @@ -27,7 +26,6 @@ "contact_email": "samuel.sourcefeed@testdot.gov", "update_frequency": 60, "update_date": "2020-06-18T14:39:01Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" @@ -39,7 +37,6 @@ "contact_email": "stu.sourcefeed@testcounty1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:05Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" @@ -51,7 +48,6 @@ "contact_email": "skip.sourcefeed@testcity2.gov", "update_frequency": 60, "update_date": "2020-06-18T14:38:59Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson index f3891e37..8c3dc3dd 100644 --- a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 04e4b0c0..109710fd 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" @@ -27,7 +26,6 @@ "contact_email": "samuel.sourcefeed@testdot.gov", "update_frequency": 60, "update_date": "2020-06-18T14:39:01Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson index b0e5af91..64b5a98e 100644 --- a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson index 8946a76b..4c2671fe 100644 --- a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" diff --git a/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson index 366150cd..44116f30 100644 --- a/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson @@ -15,7 +15,6 @@ "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" From cc20780f04388a671bed5c35d0cfd65f659903f7 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Fri, 3 Sep 2021 18:53:54 -0400 Subject: [PATCH 095/388] Create RestrictionEvent.md --- spec-content/objects/RestrictionEvent.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 spec-content/objects/RestrictionEvent.md diff --git a/spec-content/objects/RestrictionEvent.md b/spec-content/objects/RestrictionEvent.md new file mode 100644 index 00000000..f83cbac3 --- /dev/null +++ b/spec-content/objects/RestrictionEvent.md @@ -0,0 +1,19 @@ +# RestrictionEvent Object +The `RestrictionEvent` object contains information that describes where, when, and what restrictions are placed along a road segment. + +Restrictions are policies limiting road use. + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`road_event` | [RoadEvent](/spec-content/enumerated-types/RoadEvent.md) | Describes the basic characterisitics of a Road Event. | Required | +`restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | + +## Used By +Property | Object +--- | --- +`properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) + +## Important Notes +None From 7d6ae3138eac2e2e5ce1883f272c8e807b625860 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Wed, 8 Sep 2021 16:11:20 -0400 Subject: [PATCH 096/388] Create WorkerPresence.md Add new object page for new WorkerPresence object. --- spec-content/objects/WorkerPresence.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 spec-content/objects/WorkerPresence.md diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md new file mode 100644 index 00000000..66f924eb --- /dev/null +++ b/spec-content/objects/WorkerPresence.md @@ -0,0 +1,15 @@ +# Worker Presence Object +The `WorkerPresence` object presents information on the presence of workers in the `RoadEvent`'s area. + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`are_workers_present` | Boolean | Whether workers are present in the work zone event area, following the definition provided in the `worker_presence_definition` property on the `RoadEventDataSource` object. | Required | +`source` | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Data source providing information on whether workers are present in the work zone event area. | Optional | +`last_confirmed_date` | String; date-time | Date and time at which the presence of workers was last confirmed using the `source`. | Optional | +`reliability_score` | Integer, range 0-10 | Numerical score representing the data producer’s understanding of the likelihood of workers being present in the work zone event area, with 10 indicating absolute certainty. | Optional | + +## Used By +Property | Object +--- | --- +`worker_presence` | [RoadEvent](/spec-content/objects/RoadEvent.md) From 79685e97090b4d3556602bedd14ec03627cdf6b0 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Wed, 8 Sep 2021 16:22:28 -0400 Subject: [PATCH 097/388] Create WorkerPresenceDefinition.md Create new file outlining the new WorkerPresenceDefinition enumerated type --- .../enumerated-types/WorkerPresenceSource.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 spec-content/enumerated-types/WorkerPresenceSource.md diff --git a/spec-content/enumerated-types/WorkerPresenceSource.md b/spec-content/enumerated-types/WorkerPresenceSource.md new file mode 100644 index 00000000..08d987e4 --- /dev/null +++ b/spec-content/enumerated-types/WorkerPresenceSource.md @@ -0,0 +1,16 @@ +# Worker Presence Source Status + +## Values +Value | Description +--- | --- +`workers-in-work-zone-working` | Humans physically in the work zone event area, doing road work. +`workers-in-work-zone-not-working` | Humans physically in the work zone event area but not performing work. +`mobile-equipment-in-work-zone-moving` | Mobile equipment is moving within the work zone event area, implying the presence of a worker. +`mobile-equipment-in-work-zone-not-moving` | Mobile equipment is in the work zone event area but is not moving. +`fixed-equipment-in-work-zone` | Fixed equipment is in the work zone event area. +`humans-behind-barrier` | Humans are present in the work zone event area but separated from traffic by a barrier. +`humans-in-right-of-way` | Humans are present on the drivable surface. +## Used By +Property | Object +--- | --- +`worker_presence_definition` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) From 92d02adf52fc3662fe1568df2248afd7719bb7da Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Wed, 8 Sep 2021 17:31:15 -0400 Subject: [PATCH 098/388] Create WorkerPresenceSource.md Create WorkerPresenceSource enumerated type page. --- .../enumerated-types/WorkerPresenceSources.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 spec-content/enumerated-types/WorkerPresenceSources.md diff --git a/spec-content/enumerated-types/WorkerPresenceSources.md b/spec-content/enumerated-types/WorkerPresenceSources.md new file mode 100644 index 00000000..5228a2e2 --- /dev/null +++ b/spec-content/enumerated-types/WorkerPresenceSources.md @@ -0,0 +1,19 @@ +# Worker Presence Source + +## Values +Value | Description +--- | --- +`camera-monitoring` | Cameras in the work zone event area show workers are present. +`arrow-board-present` | GPS-enabled arrow board is located in the work zone event area and broadcasting its location, implying that workers are present. +`cones-present` | GPS-enabled cones are located in the road event event area, implying that workers are present. +`maintenance-vehicle-present` | GPS-enabled maintenance vehicle is located in the road event area, implying that workers are present. +`wearables-present` | Workers wearing wearable detection equipment are present in the work zone. +`mobile-device-present` | Workers with GPS-enabled mobile device tracking are present in the work zone. +`check-in-app` | Workers have checked into the work zone via a mobile app. +`check-in-verbal` | Workers have checked into the work zone via phone or radio to a remote operations center. +`scheduled` | Workers are scheduled to be in the road event area, but presence has not been confirmed. + +## Used By +Property | Object +--- | --- +`source` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) From c9ebf938bc0645f649632657c34850306e714ed4 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 9 Sep 2021 10:08:36 -0400 Subject: [PATCH 099/388] Update and rename WorkerPresenceSource.md to WorkerPresenceDefinition.md Rename file and update description of enumerated type --- .../{WorkerPresenceSource.md => WorkerPresenceDefinition.md} | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) rename spec-content/enumerated-types/{WorkerPresenceSource.md => WorkerPresenceDefinition.md} (90%) diff --git a/spec-content/enumerated-types/WorkerPresenceSource.md b/spec-content/enumerated-types/WorkerPresenceDefinition.md similarity index 90% rename from spec-content/enumerated-types/WorkerPresenceSource.md rename to spec-content/enumerated-types/WorkerPresenceDefinition.md index 08d987e4..2412a4af 100644 --- a/spec-content/enumerated-types/WorkerPresenceSource.md +++ b/spec-content/enumerated-types/WorkerPresenceDefinition.md @@ -1,4 +1,6 @@ -# Worker Presence Source Status +# Worker Presence Definition + +Situations in which workers may be considered present in a work zone. ## Values Value | Description From 9d7a9e445442c909df283acf35a98738057ccd7e Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 9 Sep 2021 10:10:21 -0400 Subject: [PATCH 100/388] Rename WorkerPresenceSources.md to WorkerPresenceSource.md --- .../{WorkerPresenceSources.md => WorkerPresenceSource.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spec-content/enumerated-types/{WorkerPresenceSources.md => WorkerPresenceSource.md} (100%) diff --git a/spec-content/enumerated-types/WorkerPresenceSources.md b/spec-content/enumerated-types/WorkerPresenceSource.md similarity index 100% rename from spec-content/enumerated-types/WorkerPresenceSources.md rename to spec-content/enumerated-types/WorkerPresenceSource.md From 4e1b5da308107308fc0753db26f691b103dfa35d Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 9 Sep 2021 10:23:47 -0400 Subject: [PATCH 101/388] Add new Worker Presence content to readme.md Add references to new worker presence object/enumerated types to the spec-content read me file. --- spec-content/README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/spec-content/README.md b/spec-content/README.md index 06ee4527..eee7b2a8 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -31,6 +31,7 @@ Object | Description [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. +[WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about the present of workers in the road event area. [WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. ### Object Diagram @@ -60,7 +61,10 @@ Enumerated Type | Description [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | An indication of how a geographical coordinate was defined. [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. +[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Method of knowing the presence of workers in the road event area. +[WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Situations in which workers may be considered present by a jurisdiction. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. + ### Object Properties using Enumerated Types For ease of reference, the table below describes all properties in the WZDx specification whose value is restricted by an enumerated type, as well as the object that contains that property. @@ -76,8 +80,11 @@ Property | Object | Enumerated Type | Notes `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Enumeration created in WZDx v1.0 `restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Individual lane restrictions | Enumeration created in WZDx v1.0 `restriction_units` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.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. +`source` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Enumerated created in WZDx v4.0 `start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 `status` | [Lane](/spec-content/objects/Lane.md) | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Enumeration created in WZDx v2.0 `type` | [Lane](/spec-content/objects/Lane.md) | [LaneType](/spec-content/enumerated-types/LaneType.md) | Enumeration adapted from TMDD LaneRoadway; updated in WZDx v3.0 `type_name` | [TypeOfWork](/spec-content/objects/TypeOfWork.md) | [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | Enumeration created in WZDx v2.0 `vehicle_impact` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | Enumeration created in WZDx v2.0 +`worker_presence_definition` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Enumeration created in WZDx v4.0 + From 6f0f243c1d499f615d6c1eae53ef5999f2e72bd2 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 9 Sep 2021 10:26:05 -0400 Subject: [PATCH 102/388] Update README.md Update main readme to reference new worker presence files --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 512318ed..16a068b8 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [Lane](/spec-content/objects/Lane.md) - [LaneRestriction](/spec-content/objects/LaneRestriction.md) - [Relationship](/spec-content/objects/Relationship.md) + - [WorkerPresence](/spec-content/objects/WorkerPresence.md) - [**Enumerated Types**](/spec-content/enumerated-types) - [Direction](/spec-content/enumerated-types/Direction.md) - [EventStatus](/spec-content/enumerated-types/EventStatus.md) @@ -62,6 +63,8 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) - [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) - [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) + - [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) + - [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) - [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) - [**Images Used throughout the Specification**](/images) - [Object Diagram](/images/wzdx_object_diagram.jpg) From 04ef838c917246ae259ad8a47e3bcb4bfb8591dd Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 9 Sep 2021 10:34:33 -0400 Subject: [PATCH 103/388] Add WorkerPresence object to RoadEvent Add new worker_presence property to RoadEvent, containing a WorkerPresence object. --- spec-content/objects/RoadEvent.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 0efb5775..b30fca08 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -22,8 +22,8 @@ Name | Type | Description | Conformance | Notes `beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. `ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. `event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | -`types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | -`workers_present` | Boolean | A flag indicating that there are workers present in the event space. | Optional | +`types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | +`worker_presence` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about whether workers are present in the road event area. | Optional | `reduced_speed_limit` | Integer | The reduced speed limit posted within the event space. | Optional | `restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version From c1ac5dc5d00a2327f2e01afdb596613e2479cb2a Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 9 Sep 2021 10:49:31 -0400 Subject: [PATCH 104/388] Add worker presence definition property Add worker presence definition property to the RoadEventDataSource object --- spec-content/objects/RoadEventDataSource.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spec-content/objects/RoadEventDataSource.md b/spec-content/objects/RoadEventDataSource.md index 81ad0493..e53da38a 100644 --- a/spec-content/objects/RoadEventDataSource.md +++ b/spec-content/objects/RoadEventDataSource.md @@ -14,6 +14,7 @@ Name | Type | Description | Conformance | Notes `location_verify_method` | String | The method used to verify the accuracy of the location information. | Optional | Example: `Survey accurate GPS equipment accurate to 0.1 cm` `lrs_type` | String | Describes the type of linear referencing system (LRS) used for the milepost measurements. | Optional | Example: `Use of milemarkers posted by the roadways. These are registered to a dynamic segmentation of statewide LRS basemap.` `lrs_url` | String; [uri](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.5) | A URL where additional information on the LRS information and transformation information is stored. | Optional | Example `https://aaa.bbb.com/lrs` +`worker_presence_definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional ## Used By Property | Object From 2d6e920bf49afba2894c502f5805c9a206fe2189 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 9 Sep 2021 10:50:41 -0400 Subject: [PATCH 105/388] Edit WorkerPresence.md for clarity --- spec-content/objects/WorkerPresence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 66f924eb..5365b5df 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -1,5 +1,5 @@ # Worker Presence Object -The `WorkerPresence` object presents information on the presence of workers in the `RoadEvent`'s area. +The `WorkerPresence` object containss information on the presence of workers in the `RoadEvent`'s area. ## Properties Name | Type | Description | Conformance | Notes From b53db2ee6a98d08381cd0faf19207f037a732400 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 9 Sep 2021 10:55:07 -0400 Subject: [PATCH 106/388] Add description to WorkerPresenceSource --- spec-content/enumerated-types/WorkerPresenceSource.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec-content/enumerated-types/WorkerPresenceSource.md b/spec-content/enumerated-types/WorkerPresenceSource.md index 5228a2e2..546aa6f1 100644 --- a/spec-content/enumerated-types/WorkerPresenceSource.md +++ b/spec-content/enumerated-types/WorkerPresenceSource.md @@ -1,5 +1,7 @@ # Worker Presence Source +Data source providing information on whether workers are present in the work zone event area. + ## Values Value | Description --- | --- From 561af8a84a421340a88206e0ddfab89911e4aca5 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 9 Sep 2021 11:15:42 -0400 Subject: [PATCH 107/388] Update wzdx_v4.0_feed.json Add worker presence changes to the JSON schema --- create-feed/schemas/wzdx_v4.0_feed.json | 72 +++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 3 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index c5c9dc08..0712960c 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -131,6 +131,14 @@ "type": "string", "format": "uri" } + "worker_presence_definition": { + "description": "A list of situations in which workers are considered to be present in the jurisdiction of the data provider." + "type": "array", + "items": { + "$ref": "#/definitions/WorkerPresenceDefinition" + }, + "uniqueItems": true + } }, "required": ["data_source_id", "organization_name", "location_method"] }, @@ -261,9 +269,9 @@ "vehicle_impact": { "$ref": "#/definitions/VehicleImpact" }, - "workers_present": { - "description": "A flag indicating that there are workers present in the road event", - "type": "boolean" + "worker_presence": { + "description": "Information about whether workers are present in the event space.", + "type": "#/definitions/WorkerPresence" }, "reduced_speed_limit": { "description": "The reduced speed limit posted within the road event", @@ -445,6 +453,36 @@ "restriction_value": ["restriction_units"] } }, + "WorkerPresence": { + "title": "Worker Presence", + "description": "Information about the presence of workers in the work zone event area", + "type": "object", + "properties": { + "are_workers_present": { + "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object." + "type": "boolean" + }, + "source": { + "description": "Data source providing information on whether workers are present in the work zone event area." + "type": "#/definitions/WorkerPresenceSource" + }, + "last_confirmed_date": { + "description": "Datetime at which the presence of workers was last confirmed using the ‘source’." + "type": "string" + "format": "date-time" + }, + "reliability_score": { + "description": " Numerical score representing the data producer’s understanding of the likelihood of workers being present in the work zone event area, with 10 indicating absolute certainty and 0 indicating." + "type": "integer" + "minimum": 0 + "maximum": 10 + }, + }, + "required": ["are_workers_present"], + "dependencies": { + "restriction_value": ["restriction_units"] + } + }, "EventType": { "title": "Road Event Type Enumerated Type", "description": "The type of WZDx road event", @@ -557,5 +595,33 @@ "description": "Units of measure used for the lane restriction value", "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] } + "WorkerPresenceSource": { + "title": "Worker Presence Source Enumerated Type", + "description": "Data source providing information on whether workers are present in the work zone event area.", + "enum": [ + "camera-monitoring", + "arrow-board-present", + "cones-present", + "maintenance-vehicle-present", + "wearables-present", + "mobile-device-present", + "check-in-app", + "check-in-verbal", + "scheduled" + ] + } + "WorkerPresenceDefinition": { + "title": "Worker Presence Definition Enumerated Type", + "description": "Situations in which workers may be considered present in a work zone.", + "enum": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving", + "mobile-equipment-in-work-zone-not-working", + "fixed-equipment-in-work-zone", + "humans-behind-barrier", + "humans-in-right-of-way" + ] + } } } From 6153a85c595497dcb37c87af4aaedd82fdee87fe Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Mon, 13 Sep 2021 11:42:48 -0400 Subject: [PATCH 108/388] Update WP in scenario1 linestring example --- ...cenario1_simple_linestring_example.geojson | 34 +++++++++++++++---- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index a6f6b451..7383b5ad 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -18,7 +18,12 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, { "data_source_id": "2", @@ -30,7 +35,10 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "humans-in-right-of-way" + ] } ] }, @@ -291,7 +299,7 @@ ], [ -93.791037923999966, - 41.622265540000058 + 41.622265540000058f ], [ -93.791219643999966, @@ -431,7 +439,9 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": false + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -530,7 +540,12 @@ "event_status": "active", "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "check-in-app", + "last_confirmed_date": "2010-01-04T15:00:00Z", + "reliability": 8 + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; second event.", @@ -642,7 +657,12 @@ "event_status": "active", "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "check-in-app", + "last_confirmed_date": "2010-01-04T15:00:00Z", + "reliability": 8 + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", @@ -781,4 +801,4 @@ } } ] -} \ No newline at end of file +} From 003384a7b977548947e90451b00e95357b7b8ed6 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Mon, 13 Sep 2021 11:44:22 -0400 Subject: [PATCH 109/388] Update WP in scenario2 linestring example --- .../scenario2_laneshift_linestring_example.geojson | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index 3ec8ffaf..f624cd5e 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -18,7 +18,12 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] } ] }, @@ -45,7 +50,10 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "all-lanes-open", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "wearables-present" + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone with lane shift", @@ -156,4 +164,4 @@ } } ] -} \ No newline at end of file +} From 4fc4059d0492c2b49d60d5e057ba6f291e373f9b Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Mon, 13 Sep 2021 11:47:13 -0400 Subject: [PATCH 110/388] Update WP in scenario4 linestring example --- .../scenario4_detour_linestring_example.geojson | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 0e5ed38b..3807da5b 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -18,7 +18,12 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] } ] }, @@ -51,7 +56,11 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "scheduled", + "reliability": 5 + }, "reduced_speed_limit": 55, "restrictions": [ "reduced-width" @@ -820,4 +829,4 @@ } } ] -} \ No newline at end of file +} From 386bda6eb86d54198214f1c8b7858eec657db432 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Mon, 13 Sep 2021 11:55:52 -0400 Subject: [PATCH 111/388] Update WP in comprehensive linestring example --- .../comprehensive_linestring_example.geojson | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 830d5027..96bd634a 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -18,7 +18,12 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, { "data_source_id": "2", @@ -30,7 +35,10 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "humans-in-right-of-way" + ] }, { "data_source_id": "3", @@ -599,7 +607,9 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": false + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -698,7 +708,12 @@ "event_status": "active", "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "check-in-app", + "last_confirmed_date": "2010-01-04T15:00:00Z", + "reliability": 8 + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; second event.", @@ -810,7 +825,12 @@ "event_status": "active", "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "check-in-app", + "last_confirmed_date": "2010-01-04T15:00:00Z", + "reliability": 8 + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", @@ -969,7 +989,10 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "all-lanes-open", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "wearables-present" + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone with lane shift", @@ -1277,7 +1300,11 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "scheduled", + "reliability": 5 + }, "reduced_speed_limit": 55, "restrictions": [ "reduced-width" From 8e3d5b474223c038df2bebb78d7e0e2529813ec7 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:00:51 -0400 Subject: [PATCH 112/388] Update WP in comprehensive multipoint example --- .../comprehensive_multipoint_example.geojson | 41 +++++++++++++++---- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index 9c2d4ab3..d37a10f0 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -18,7 +18,12 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, { "data_source_id": "2", @@ -30,7 +35,10 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "humans-in-right-of-way" + ] }, { "data_source_id": "3", @@ -291,7 +299,9 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": false + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -382,7 +392,12 @@ "event_status": "active", "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "check-in-app", + "last_confirmed_date": "2010-01-04T15:00:00Z", + "reliability": 8 + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; second event.", @@ -470,7 +485,12 @@ "event_status": "active", "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "check-in-app", + "last_confirmed_date": "2010-01-04T15:00:00Z", + "reliability": 8 + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", @@ -545,7 +565,10 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "all-lanes-open", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "wearables-present" + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone with lane shift", @@ -765,7 +788,11 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "scheduled", + "reliability": 5 + }, "reduced_speed_limit": 55, "restrictions": [ "reduced-width" From 12125c09aae4e17a348f288b919af0ef14b84d91 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:01:08 -0400 Subject: [PATCH 113/388] Update WP in scenario1 multipoint example --- ...cenario1_simple_multipoint_example.geojson | 32 +++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 04e4b0c0..52e66ef9 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -18,7 +18,12 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, { "data_source_id": "2", @@ -30,7 +35,10 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "humans-in-right-of-way" + ] } ] }, @@ -163,7 +171,9 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": false + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -254,7 +264,12 @@ "event_status": "active", "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "check-in-app", + "last_confirmed_date": "2010-01-04T15:00:00Z", + "reliability": 8 + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; second event.", @@ -342,7 +357,12 @@ "event_status": "active", "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "check-in-app", + "last_confirmed_date": "2010-01-04T15:00:00Z", + "reliability": 8 + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", @@ -397,4 +417,4 @@ } } ] -} \ No newline at end of file +} From d5675487a2c190789133df662dc1912cda6cceff Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:01:25 -0400 Subject: [PATCH 114/388] Update WP in scenario2 multipoint example --- .../scenario2_laneshift_multipoint_example.geojson | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson index 9605e016..0e9ebfec 100644 --- a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson @@ -18,7 +18,12 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] } ] }, @@ -45,7 +50,10 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "all-lanes-open", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "wearables-present" + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone with lane shift", @@ -100,4 +108,4 @@ } } ] -} \ No newline at end of file +} From 89821377fac145376db6688705afc7270e2a16a2 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Wed, 15 Sep 2021 15:01:42 -0400 Subject: [PATCH 115/388] Update WP in scenario4 multipoint example --- .../scenario4_detour_multipoint_example.geojson | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson index 8946a76b..51fadfc3 100644 --- a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson @@ -18,7 +18,12 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] } ] }, @@ -51,7 +56,11 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "workers_present": true, + "worker_presence": { + "are_workers_present": true, + "source": "scheduled", + "reliability": 5 + }, "reduced_speed_limit": 55, "restrictions": [ "reduced-width" @@ -252,4 +261,4 @@ } } ] -} \ No newline at end of file +} From f8186ab084b0304c5a5e55cd8213cf735d942b73 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 17 Sep 2021 11:14:39 -0400 Subject: [PATCH 116/388] Add FieldDeviceFeature --- spec-content/objects/FieldDeviceFeature.md | 15 +++++++++++++++ spec-content/objects/WZDxFeed.md | 2 +- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 spec-content/objects/FieldDeviceFeature.md diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md new file mode 100644 index 00000000..cc30c3c2 --- /dev/null +++ b/spec-content/objects/FieldDeviceFeature.md @@ -0,0 +1,15 @@ +# FieldDeviceFeature Object +The FieldDeviceFeature object is a GeoJSON feature representing a deployed field device. This object contains the specific details of the field device, alike to how the RoadEventFeature object in a WZDx Feed contains the RoadEvent object via the `properties` property. Currently, only point devices are supported. + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`id` | String | A unique identifier issued by the data feed provider to identify the field device. | Required | This is a GeoJSON property. +`type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. +`properties` | One of: ArrowBoard, Camera, DynamicMessageSign, FlashingBeacon, LocationMarker, TrafficSensor | The specific details of the field device. | Required | This is a GeoJSON property. +`geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | The geometry of the field device, indicating its location. The Geometry object's `type` property MUST be [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | Required | This is a GeoJSON property. +`bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this field device. Must be an array of length 2*n where n is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. + +## Used By +Property | Object +`features` | [WZDx Feed](/spec-content/objects/WZDxFeed.md) \ No newline at end of file diff --git a/spec-content/objects/WZDxFeed.md b/spec-content/objects/WZDxFeed.md index c69e2f99..22adcc8f 100644 --- a/spec-content/objects/WZDxFeed.md +++ b/spec-content/objects/WZDxFeed.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `road_event_feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. -`features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | +`features` | Array; \[One of: [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) or [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent a WZDx road event or a WZDx field device. | Required | `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. ## Used By From af74b3ff21efb6cea78c5ffef05d10941628a011 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 17 Sep 2021 11:15:42 -0400 Subject: [PATCH 117/388] Add FieldDeviceCoreDetails object --- README.md | 4 +++ spec-content/README.md | 32 +++++++++++++------ .../enumerated-types/FieldDeviceStatus.md | 15 +++++++++ .../enumerated-types/FieldDeviceType.md | 11 +++++++ .../objects/FieldDeviceCoreDetails.md | 24 ++++++++++++++ 5 files changed, 77 insertions(+), 9 deletions(-) create mode 100644 spec-content/enumerated-types/FieldDeviceStatus.md create mode 100644 spec-content/enumerated-types/FieldDeviceType.md create mode 100644 spec-content/objects/FieldDeviceCoreDetails.md diff --git a/README.md b/README.md index 512318ed..f309a514 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,8 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) - [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) + - [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) + - [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) - [RoadEvent](/spec-content/objects/RoadEvent.md) - [TypeOfWork](/spec-content/objects/TypeOfWork.md) - [Lane](/spec-content/objects/Lane.md) @@ -54,6 +56,8 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [Direction](/spec-content/enumerated-types/Direction.md) - [EventStatus](/spec-content/enumerated-types/EventStatus.md) - [EventType](/spec-content/enumerated-types/EventType.md) + - [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) + - [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) - [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.md) - [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) - [LaneType](/spec-content/enumerated-types/LaneType.md) diff --git a/spec-content/README.md b/spec-content/README.md index 06ee4527..4c325385 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -19,19 +19,30 @@ Each object is described by a table of properties, which are each defined by the - **Notes** - Additional comments, guidance, notes for future consideration, or examples. ### List of Objects -This section provides a tabular list of all objects used in the WZDx specification. +This section provides a tabular list of all objects used in the WZDx specification, sectioned by whether the object applies to the feed-level, road event features, or field devices features. +#### Feed-Level +Object | Description +--- | --- +[RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. +[RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. +[WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. + +#### Road Event Features Object | Description --- | --- [Lane](/spec-content/objects/Lane.md) | An individual lane within a road event. [LaneRestriction](/spec-content/objects/LaneRestriction.md) | A lane-level restriction, including type and value. [Relationship](/spec-content/objects/Relationship.md) | Identification of both sequential and hierarchical relationships between road events and other entities. [RoadEvent](/spec-content/objects/RoadEvent.md) | Information that describes where, when, and what activity is taking place along a road segment. -[RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. -[RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. -[WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. + +#### Field Device Features +Object | Description +--- | --- +[FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) | The GeoJSON `Feature` container object for a deployed field device. +[FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. ### Object Diagram The object diagram below indicates the relationship between the data objects. @@ -45,13 +56,11 @@ When making changes to the specification, the object diagram needs to be updated Many object properties are restricted to a finite set of values, defined by an enumerated type. The enumerations for each enumerated type as well as what object properties it is used by is described in its own file in the [enumerated-types](/spec-content/enumerated-types) directory. ### List of Enumerated Types -This section provides a tabular list of all enumerated types used in the WZDx specification. - -Enumerated Type | Description ---- | --- -[Direction](/spec-content/enumerated-types/Direction.md) | The direction for a road event based on standard naming for US roads. +This section provides a tabular list of all enumerated types used in the WZDx specification, sectioned by whether they apply to road event features or field device features. +#### Road Event Features [EventType](/spec-content/enumerated-types/EventType.md) | The type of a WZDx road event. [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of a road event. +[Direction](/spec-content/enumerated-types/Direction.md) | The direction for a road event based on standard naming for US roads. [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.md) | Units of measure used for a lane restriction value. [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | The status of a lane for the traveling public. [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. @@ -61,6 +70,11 @@ Enumerated Type | Description [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. + +#### Field Devices +[FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of a field device. +[FieldDeviceType](/spec-content/enumerated-types/EventStatus.md) | The type of a field device. + ### Object Properties using Enumerated Types For ease of reference, the table below describes all properties in the WZDx specification whose value is restricted by an enumerated type, as well as the object that contains that property. diff --git a/spec-content/enumerated-types/FieldDeviceStatus.md b/spec-content/enumerated-types/FieldDeviceStatus.md new file mode 100644 index 00000000..05db42d4 --- /dev/null +++ b/spec-content/enumerated-types/FieldDeviceStatus.md @@ -0,0 +1,15 @@ +# FieldDeviceStatus Enumerated Type +The FieldDeviceStatus enumerated type describes the operational status of a field device. The status indicates the health of the device. + +## Values +Value | Description +--- | --- +`ok` | The device is turned on and working without issue. +`warning` | The device is functional but is impaired or impacted in a way that is not critical to operation. +`error` | The device is impaired such that it is not able to perform one or more necessary functions. +`unknown` | The device's operational status is not known. + +## Used By +Property | Object +--- | --- +`device_status` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) \ No newline at end of file diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md new file mode 100644 index 00000000..4fa98aa6 --- /dev/null +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -0,0 +1,11 @@ +# FieldDeviceType Enumerated Type +The FieldDeviceType enumerated type enumerates all types of field devices described by the specification. + +## Values +Value | Description +--- | --- + +## Used By +Property | Object +--- | --- +`device_type` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) \ No newline at end of file diff --git a/spec-content/objects/FieldDeviceCoreDetails.md b/spec-content/objects/FieldDeviceCoreDetails.md new file mode 100644 index 00000000..08e90931 --- /dev/null +++ b/spec-content/objects/FieldDeviceCoreDetails.md @@ -0,0 +1,24 @@ +# FieldDeviceCoreDetails Object +The FieldDeviceCoreDetails object represents the core details—both configuration and current state—of a field device that is shared by all types of field devices. The FieldDeviceCoreDetails object can not occur directly in a data feed and does not represent a field device on its own. It is used as the value of the `core_details` property on every specific type of field device, each which is represented by its own object. + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`device_type` | [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) | The type of field device. | Required | +`road_names` | Array; [String] | A list of publicly known names of the road on which the device is located. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | +`device_status` | [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of the field device. The value of this property indicates if the device is | Required | +`update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the field device information was updated. | Required | +`has_gps_location` | Boolean | A yes/no value indicating if the field device location (parent FieldDeviceFeature's `geometry`) is from an onboard GPS (`true`) or manually set (`false`). | Required | +`name` | String | A human-readable name for the field device. | Optional | +`description` | String | A description of the field device. | Optional | +`status_messages` | Array; [String] | A list of messages associated with the device's status, if applicable. Used to provide additional information about the status such as specific warning or error messages. | Optional | The content of this property is up to the producer. +`road_event_ids` | Array; [String] | A list of one or more IDs of a RoadEventFeatures that the device is associated with. | Optional | +`milepost` | Number | The linear distance measured against a milepost marker along a roadway where the device is located. | Optional | +`make` | String | The make or manufacturer of the device. | Optional | +`model` | String | The model of the device. | Optional | +`serial_number` | String | The serial number of the device. | Optional | +`firmware_version` | String | The version of firmware the device is using to operate. | Optional | + +## Used By +Property | Object +--- | --- From e5e221057526228e472d8c9b77f2c1ee6b0d30af Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 17 Sep 2021 15:17:07 -0400 Subject: [PATCH 118/388] Add ArrowBoard field device --- README.md | 2 + create-feed/schemas/wzdx_v4.0_feed.json | 176 +++++++++++++++++- spec-content/README.md | 3 + .../enumerated-types/ArrowBoardPattern.md | 31 +++ .../enumerated-types/FieldDeviceType.md | 1 + spec-content/objects/ArrowBoard.md | 17 ++ .../objects/FieldDeviceCoreDetails.md | 3 +- 7 files changed, 231 insertions(+), 2 deletions(-) create mode 100644 spec-content/enumerated-types/ArrowBoardPattern.md create mode 100644 spec-content/objects/ArrowBoard.md diff --git a/README.md b/README.md index f309a514..3aa96866 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,9 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [Lane](/spec-content/objects/Lane.md) - [LaneRestriction](/spec-content/objects/LaneRestriction.md) - [Relationship](/spec-content/objects/Relationship.md) + - [ArrowBoard](/spec-content/objects/ArrowBoard.md) - [**Enumerated Types**](/spec-content/enumerated-types) + - [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) - [Direction](/spec-content/enumerated-types/Direction.md) - [EventStatus](/spec-content/enumerated-types/EventStatus.md) - [EventType](/spec-content/enumerated-types/EventType.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index c5c9dc08..f9f1b5c5 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -17,7 +17,14 @@ "description": "An array of GeoJSON Feature objects which represent WZDx road events", "type": "array", "items": { - "$ref": "#/definitions/RoadEventFeature" + "oneOf": [ + { + "$ref": "#/definitions/RoadEventFeature" + }, + { + "$ref": "#/definitions/FieldDeviceFeature" + } + ] } }, "bbox": { @@ -189,6 +196,139 @@ ], "required": ["type","properties","geometry"] }, + "FieldDeviceFeature": { + "title": "Field Device Feature (GeoJSON Feature)", + "description": "The container object for a specific field device; an instance of a GeoJSON Feature", + "type": "object", + "properties": { + "id": { + "description": "A unique identifier issued by the data feed provider to identify the field device described by the feature", + "type": "string" + }, + "type": { + "description": "The GeoJSON object type; must be 'Feature'", + "enum": ["Feature"] + }, + "properties": { + "oneOf": [ + { + "$ref": "#/definitions/ArrowBoard" + } + ] + }, + "geometry": { + "$ref": "https://geojson.org/schema/Point.json" + }, + "bbox": { + "$ref": "#/definitions/BoundingBox" + } + }, + "required": ["id", "type", "properties", "geometry"] + }, + "FieldDeviceCoreDetails": { + "title": "Field Device Core Details", + "description": "the core details—both configuration and current state—of a field device that are shared by all types of field devices", + "type": "object", + "properties": { + "device_type": { + "type": "string", + "description": "The type of field device" + }, + "road_names": { + "description": "A list of publicly known names of the road on which the field device is located. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "device_status": { + "$ref": "#/definitions/FieldDeviceStatus" + }, + "update_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the field device data was last updated (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "has_gps_location": { + "description": "A yes/no value indicating if the field device location (parent FieldDeviceFeature's geometry) is from an onboard GPS (true) or manually set (false).", + "type": "boolean" + }, + "name": { + "type": "string", + "description": "A human-readable name for the field device" + }, + "description": { + "type": "string", + "description": "A description of the field device." + }, + "status_messages": { + "type": "array", + "description": "A list of messages associated with the device's status, if applicable. Used to provide additional information about the status such as specific warning or error message.", + "items": { + "type": "string" + } + }, + "road_event_ids": { + "type": "array", + "description": "A list of one or more IDs of a RoadEventFeatures that the device is associated with", + "items": { + "type": "string" + } + }, + "milepost": { + "type": "number", + "description": "The linear distance measured against a milepost marker along a roadway where the device is located" + }, + "make": { + "type": "string", + "description": "The make or manufacturer of the device" + }, + "model": { + "type": "string", + "description": "The model of the device" + }, + "serial_number": { + "type": "string", + "description": "The serial number of the device" + }, + "firmware_version": { + "type": "string", + "description": "The version of firmware the device is using to operate" + } + }, + "required": [ + "device_types", + "road_names", + "device_status", + "update_date", + "has_gps_location" + ] + }, + "ArrowBoard": { + "title": "Arrow Board Field Device", + "description": "An electronic, connected arrow board which can display an arrow pattern to direct traffic", + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "pattern": { + "$ref": "#/definitions/ArrowBoardPattern" + }, + "is_moving": { + "type": "boolean", + "description": "A yes/no value indicating if the arrow board is actively moving (not statically placed) as part of a mobile work zone operation." + }, + "is_deployed": { + "type": "boolean", + "description": "A yes/no value indicating if the arrow board is in the deployed position (true) or stowed/transport position (false)" + } + }, + "required": [ + "core_details" + ] + }, "RoadEvent": { "title": "Road Event", "description": "Describes an activity taking place along a road segment", @@ -445,6 +585,40 @@ "restriction_value": ["restriction_units"] } }, + "ArrowBoardPattern": { + "title": "Arrow Board Pattern Enumerated Type", + "description": "a list of options for the posted pattern on an ArrowBoard", + "enum": [ + "bidirectional-arrow-flashing", + "bidirectional-arrow-static", + "blank", + "diamonds-alternating", + "four-corners-flashing", + "left-arrow-flashing", + "left-arrow-sequential", + "left-arrow-static", + "left-chevron-flashing", + "left-chevron-sequential", + "left-chevron-static", + "line-flashing", + "right-arrow-flashing", + "right-arrow-sequential", + "right-arrow-static", + "right-chevrons-flashing", + "right-chevrons-sequential", + "right-chevrons-static" + ] + }, + "FieldDeviceType": { + "title": "Field Device Type Enumerated Type", + "description": "The type of field device", + "enum": ["arrow-board"] + }, + "FieldDeviceStatus": { + "title": "Field Device Status Enumerated Type", + "description": "The operational status of a field device", + "enum": ["ok", "warning", "error", "unknown"] + }, "EventType": { "title": "Road Event Type Enumerated Type", "description": "The type of WZDx road event", diff --git a/spec-content/README.md b/spec-content/README.md index 4c325385..af631701 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -41,6 +41,7 @@ Object | Description #### Field Device Features Object | Description --- | --- +[ArrowBoard](/spec-content/objects/ArrowBoard.md) | An electronic, connected arrow board which can display an arrow pattern to direct traffic. [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) | The GeoJSON `Feature` container object for a deployed field device. [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. @@ -57,6 +58,7 @@ Many object properties are restricted to a finite set of values, defined by an e ### List of Enumerated Types This section provides a tabular list of all enumerated types used in the WZDx specification, sectioned by whether they apply to road event features or field device features. + #### Road Event Features [EventType](/spec-content/enumerated-types/EventType.md) | The type of a WZDx road event. [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of a road event. @@ -72,6 +74,7 @@ This section provides a tabular list of all enumerated types used in the WZDx sp [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. #### Field Devices +[ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | A list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of a field device. [FieldDeviceType](/spec-content/enumerated-types/EventStatus.md) | The type of a field device. diff --git a/spec-content/enumerated-types/ArrowBoardPattern.md b/spec-content/enumerated-types/ArrowBoardPattern.md new file mode 100644 index 00000000..74e612e0 --- /dev/null +++ b/spec-content/enumerated-types/ArrowBoardPattern.md @@ -0,0 +1,31 @@ +# ArrowBoardPattern Enumerated Type +The ArrowBoardPattern enumerated type defines a list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). + +If the arrow board pattern does not exactly match one of the values described, the closest pattern should be used. + +## Values +Value | Description +--- | --- +`blank` | No pattern; the board is not displaying anything. +`right-arrow-static` | Merge right represented by an arrow pattern (e.g. `-->`) that does not flash or move. +`right-arrow-flashing` | Merge right represented by an arrow pattern (e.g. `-->`) that flashes on/off. +`right-arrow-sequential` | Merge right represented by an arrow pattern (e.g. `-->`) that is displayed in a progressing sequence (e.g. `>` `->` `-->` or `-` `--` `-->`). +`right-chevrons-static` | Merge right represented by a pattern of chevrons (e.g. `>>>`) that does not flash or move. +`right-chevrons-flashing` | Merge right represented by a pattern of chevrons (e.g. `>>>`) that that flashes on/off. +`right-chevrons-sequential` | Merge right represented by a pattern of chevrons that is displayed in a progressing sequence. +`left-arrow-static` | Merge left represented by an arrow pattern (e.g. `<--`) that does not flash or move. +`left-arrow-flashing` | Merge left represented by an arrow pattern (e.g. `<--`) that flashes on/off. +`left-arrow-sequential` | Merge left represented by an arrow pattern (e.g. `<--`) that is displayed in a progressing sequence (e.g. `<` `<-` `<--` or `-` `--` `<--`). +`left-chevron-static` | Merge left represented by a pattern of chevrons (e.g. `<<<`) that does not flash or move. +`left-chevron-flashing` | Merge left represented by a pattern of chevrons (e.g. `<<<`) that that flashes on/off. +`left-chevron-sequential` | Merge left represented by a pattern of chevrons that is displayed in a progressing sequence. +`bidirectional-arrow-static` | Split (merge left or right) represented by arrows pointing both left and right (e.g. `<-->`) that does not flash or move. +`bidirectional-arrow-flashing` | Split (merge left or right) represented by arrows pointing both left and right (e.g. `<-->`) that flashes on/off. +`line-flashing` | A flashing line or bar (e.g. `---`), indicating warning/caution, not a merge. +`diamonds-alternating` | An alternating display of two diamond shapes (e.g. `◇ ◇`), indicating warning/caution, not a merge. +`four-corners-flashing` | Four dots on the corners of the board which flash, indiciating warning/caution, not a merge. + +## Used By +Property | Object +--- | --- +`pattern` | [ArrowBoard](/spec-content/objects/ArrowBoard.md) \ No newline at end of file diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md index 4fa98aa6..a463cb0c 100644 --- a/spec-content/enumerated-types/FieldDeviceType.md +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -4,6 +4,7 @@ The FieldDeviceType enumerated type enumerates all types of field devices descri ## Values Value | Description --- | --- +`arrow-board` | An electronic, connected arrow board which can display an arrow pattern to direct traffic. ## Used By Property | Object diff --git a/spec-content/objects/ArrowBoard.md b/spec-content/objects/ArrowBoard.md new file mode 100644 index 00000000..e221470e --- /dev/null +++ b/spec-content/objects/ArrowBoard.md @@ -0,0 +1,17 @@ +# ArrowBoard Object +The ArrowBoard object describes an electronic, connected arrow board ([example image](https://trafficlaneclosures.com/wp-content/uploads/2015/03/st4825-arrowboard.png)) which can display an arrow pattern to direct traffic. Arrow boards are often placed at the beginning of a lane closure—thus knowing the location of an arrow board can assist in programmatically generating a WZDx road event with verified spatial information. + +The ArrowBoard is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device that are shared by all types of field devices, not specific to arrow boards. | Required | This property appears on all field devices. +`pattern` | [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | The current pattern displayed on the arrow board. Note this includes `blank`, which indicates that nothing is shown on the arrow board. | Optional | +`is_moving` | Boolean | A yes/no value indicating if the arrow board is actively moving (not statically placed) as part of a mobile work zone operation. | Optional | The `is_moving` property is optional and should not be provided if it is not known if the arrow board is moving. +`is_deployed` | Boolean | A yes/no value indicating if the arrow board is in the deployed position (`true`) or stowed/transport position (`false`). | Optional | + +## Used By +Property | Object +--- | --- +`properties` | [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) \ No newline at end of file diff --git a/spec-content/objects/FieldDeviceCoreDetails.md b/spec-content/objects/FieldDeviceCoreDetails.md index 08e90931..25aa6c31 100644 --- a/spec-content/objects/FieldDeviceCoreDetails.md +++ b/spec-content/objects/FieldDeviceCoreDetails.md @@ -1,5 +1,5 @@ # FieldDeviceCoreDetails Object -The FieldDeviceCoreDetails object represents the core details—both configuration and current state—of a field device that is shared by all types of field devices. The FieldDeviceCoreDetails object can not occur directly in a data feed and does not represent a field device on its own. It is used as the value of the `core_details` property on every specific type of field device, each which is represented by its own object. +The FieldDeviceCoreDetails object represents the core details—both configuration and current state—of a field device that are shared by all types of field devices. The FieldDeviceCoreDetails object can not occur directly in a data feed and does not represent a field device on its own. It is used as the value of the `core_details` property on every specific type of field device, each which is represented by its own object. ## Properties Name | Type | Description | Conformance | Notes @@ -22,3 +22,4 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- +`core_details` | [ArrowBoard](/spec-content/objects/ArrowBoard.md) \ No newline at end of file From e0ad06cc75b47363abe90f08eb15cd1f01a40bc5 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 17 Sep 2021 15:30:37 -0400 Subject: [PATCH 119/388] Add Camera field device --- README.md | 1 + create-feed/schemas/wzdx_v4.0_feed.json | 35 ++++++++++++++++++- spec-content/README.md | 1 + .../enumerated-types/FieldDeviceType.md | 1 + spec-content/objects/Camera.md | 16 +++++++++ 5 files changed, 53 insertions(+), 1 deletion(-) create mode 100644 spec-content/objects/Camera.md diff --git a/README.md b/README.md index 3aa96866..9e532626 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [LaneRestriction](/spec-content/objects/LaneRestriction.md) - [Relationship](/spec-content/objects/Relationship.md) - [ArrowBoard](/spec-content/objects/ArrowBoard.md) + - [Camera](/spec-content/objects/Camera.md) - [**Enumerated Types**](/spec-content/enumerated-types) - [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) - [Direction](/spec-content/enumerated-types/Direction.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index f9f1b5c5..86d6b48b 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -213,6 +213,9 @@ "oneOf": [ { "$ref": "#/definitions/ArrowBoard" + }, + { + "$ref": "#/definitions/Camera" } ] }, @@ -329,6 +332,33 @@ "core_details" ] }, + "Camera": { + "title": "Camera Field Device", + "description": "A camera device deployed in the field, capable of capturing still images", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "image_url": { + "type": "string", + "format": "uri", + "description": "A URL pointing to an image file for the camera image still" + }, + "image_timestamp": { + "type": "string", + "format": "date-time", + "description": "The UTC date and time when the image was captured" + } + }, + "required": [ + "core_details" + ], + "dependencies": { + "image_url": [ + "image_timestamp" + ] + } + }, "RoadEvent": { "title": "Road Event", "description": "Describes an activity taking place along a road segment", @@ -612,7 +642,10 @@ "FieldDeviceType": { "title": "Field Device Type Enumerated Type", "description": "The type of field device", - "enum": ["arrow-board"] + "enum": [ + "arrow-board", + "camera" + ] }, "FieldDeviceStatus": { "title": "Field Device Status Enumerated Type", diff --git a/spec-content/README.md b/spec-content/README.md index af631701..23a7ceed 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -42,6 +42,7 @@ Object | Description Object | Description --- | --- [ArrowBoard](/spec-content/objects/ArrowBoard.md) | An electronic, connected arrow board which can display an arrow pattern to direct traffic. +[Camera](/spec-content/objects/Camera.md) | A camera device deployed in the field, capable of capturing still images. [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) | The GeoJSON `Feature` container object for a deployed field device. [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md index a463cb0c..05535bf3 100644 --- a/spec-content/enumerated-types/FieldDeviceType.md +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -5,6 +5,7 @@ The FieldDeviceType enumerated type enumerates all types of field devices descri Value | Description --- | --- `arrow-board` | An electronic, connected arrow board which can display an arrow pattern to direct traffic. +`camera` | A camera device deployed in the field, capable of capturing still images. ## Used By Property | Object diff --git a/spec-content/objects/Camera.md b/spec-content/objects/Camera.md new file mode 100644 index 00000000..1e6b8deb --- /dev/null +++ b/spec-content/objects/Camera.md @@ -0,0 +1,16 @@ +# Camera Object +The camera object describes a camera device deployed in the field, capable of capturing still images. + +The Camera is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device that are shared by all types of field devices, not specific to cameras. | Required | This property appears on all field devices. +`image_url` | String; [uri](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.5) | A URL pointing to an image file for the camera image still. | Optional | +`image_timestamp` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time when the image was captured. | Conditional; required if `image_url` is provided | + +## Used By +Property | Object +--- | --- +`properties` | [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) \ No newline at end of file From a1083e32f84560ecd1df15bf6525c441d3666445 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 17 Sep 2021 17:47:02 -0400 Subject: [PATCH 120/388] Add DynamicMessageSign field device --- README.md | 1 + create-feed/schemas/wzdx_v4.0_feed.json | 22 ++++++++++++++++++- spec-content/README.md | 1 + .../enumerated-types/FieldDeviceType.md | 1 + spec-content/objects/DynamicMessageSign.md | 15 +++++++++++++ 5 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 spec-content/objects/DynamicMessageSign.md diff --git a/README.md b/README.md index 9e532626..f69d7ce0 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [Relationship](/spec-content/objects/Relationship.md) - [ArrowBoard](/spec-content/objects/ArrowBoard.md) - [Camera](/spec-content/objects/Camera.md) + - [DynamicMessageSign](spec-content/objects/DynamicMessageSign.md) - [**Enumerated Types**](/spec-content/enumerated-types) - [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) - [Direction](/spec-content/enumerated-types/Direction.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 86d6b48b..7d5fc615 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -216,6 +216,9 @@ }, { "$ref": "#/definitions/Camera" + }, + { + "$ref": "#/definitions/DynamicMessageSign" } ] }, @@ -359,6 +362,22 @@ ] } }, + "DynamicMessageSign": { + "title": "Dynamic Message Sign Field Device", + "description": "An electronic traffic sign deployed on the roadway, used to provide information to travelers", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "message_multi_string": { + "type": "string", + "description": "A MULTI-formatted string describing the message currently posted to the sign" + } + }, + "required": [ + "core_details" + ] + }, "RoadEvent": { "title": "Road Event", "description": "Describes an activity taking place along a road segment", @@ -644,7 +663,8 @@ "description": "The type of field device", "enum": [ "arrow-board", - "camera" + "camera", + "dynamic-message-sign" ] }, "FieldDeviceStatus": { diff --git a/spec-content/README.md b/spec-content/README.md index 23a7ceed..e37103d7 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -43,6 +43,7 @@ Object | Description --- | --- [ArrowBoard](/spec-content/objects/ArrowBoard.md) | An electronic, connected arrow board which can display an arrow pattern to direct traffic. [Camera](/spec-content/objects/Camera.md) | A camera device deployed in the field, capable of capturing still images. +[DynamicMessagesSign](/spec-content/objects/DynamicMessageSign.md) | An electronic traffic sign deployed on the roadway, used to provide information to travelers. [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) | The GeoJSON `Feature` container object for a deployed field device. [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md index 05535bf3..8c0c1f25 100644 --- a/spec-content/enumerated-types/FieldDeviceType.md +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -6,6 +6,7 @@ Value | Description --- | --- `arrow-board` | An electronic, connected arrow board which can display an arrow pattern to direct traffic. `camera` | A camera device deployed in the field, capable of capturing still images. +`dynamic-message-sign` | An electronic traffic sign deployed on the roadway, used to provide information to travelers. ## Used By Property | Object diff --git a/spec-content/objects/DynamicMessageSign.md b/spec-content/objects/DynamicMessageSign.md new file mode 100644 index 00000000..58f06294 --- /dev/null +++ b/spec-content/objects/DynamicMessageSign.md @@ -0,0 +1,15 @@ +# DynamicMessageSign Object +The DynamicMessageSign object describes a dynamic message sign (DMS)—also known as changeable message sign (CMS) or variable message sign (VMS)—which is an electronic traffic sign deployed on the roadway used to provide information to travelers. + +The DynamicMessageSign is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device that are shared by all types of field devices, not specific to dynamic message signs. | Required | This property appears on all field devices. +`message_multi_string` | String | The MULTI (Mark-Up Language for Transportation Information, see [NTCIP 1203 v03](https://www.ntcip.org/file/2018/11/NTCIP1203v03f.pdf)) formatted string describing the message currently posted to the sign. | Optional | + +## Used By +Property | Object +--- | --- +`properties` | [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) \ No newline at end of file From 8be057305aee3249a0377e20a6b12683c59e089f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 17 Sep 2021 18:15:55 -0400 Subject: [PATCH 121/388] Add FlashingBeacon field device --- README.md | 2 ++ create-feed/schemas/wzdx_v4.0_feed.json | 30 +++++++++++++++- spec-content/README.md | 35 ++++++------------- .../enumerated-types/FieldDeviceType.md | 1 + .../FlashingBeaconFunction.md | 14 ++++++++ spec-content/objects/FlashingBeacon.md | 17 +++++++++ 6 files changed, 74 insertions(+), 25 deletions(-) create mode 100644 spec-content/enumerated-types/FlashingBeaconFunction.md create mode 100644 spec-content/objects/FlashingBeacon.md diff --git a/README.md b/README.md index f69d7ce0..c542c461 100644 --- a/README.md +++ b/README.md @@ -55,11 +55,13 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [ArrowBoard](/spec-content/objects/ArrowBoard.md) - [Camera](/spec-content/objects/Camera.md) - [DynamicMessageSign](spec-content/objects/DynamicMessageSign.md) + - [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) - [**Enumerated Types**](/spec-content/enumerated-types) - [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) - [Direction](/spec-content/enumerated-types/Direction.md) - [EventStatus](/spec-content/enumerated-types/EventStatus.md) - [EventType](/spec-content/enumerated-types/EventType.md) + - [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) - [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) - [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) - [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 7d5fc615..07035d46 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -219,6 +219,9 @@ }, { "$ref": "#/definitions/DynamicMessageSign" + }, + { + "$ref": "#definitions/FlashingBeacon" } ] }, @@ -378,6 +381,25 @@ "core_details" ] }, + "FlashingBeacon": { + "title": "Flashing Beacon Field Device", + "description": "A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something and capture driver attention", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "function": { + "$ref": "#/definitions/FlashingBeaconFunction" + }, + "is_flashing": { + "type": "boolean", + "description": "A yes/no value indicating if the flashing beacon is currently in use and flashing" + } + }, + "required": [ + "core_details" + ] + }, "RoadEvent": { "title": "Road Event", "description": "Describes an activity taking place along a road segment", @@ -664,7 +686,8 @@ "enum": [ "arrow-board", "camera", - "dynamic-message-sign" + "dynamic-message-sign", + "flashing-beacon" ] }, "FieldDeviceStatus": { @@ -672,6 +695,11 @@ "description": "The operational status of a field device", "enum": ["ok", "warning", "error", "unknown"] }, + "FlashingBeaconFunction": { + "title": "Flashing Beacon Function Enumerated Type", + "description": "Options for what a FlashingBeacon is being used to indicate", + "enum": ["vehicle-entering", "queue-warning", "reduced-speed", "workers-present"] + }, "EventType": { "title": "Road Event Type Enumerated Type", "description": "The type of WZDx road event", diff --git a/spec-content/README.md b/spec-content/README.md index e37103d7..f9422e7b 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -44,6 +44,7 @@ Object | Description [ArrowBoard](/spec-content/objects/ArrowBoard.md) | An electronic, connected arrow board which can display an arrow pattern to direct traffic. [Camera](/spec-content/objects/Camera.md) | A camera device deployed in the field, capable of capturing still images. [DynamicMessagesSign](/spec-content/objects/DynamicMessageSign.md) | An electronic traffic sign deployed on the roadway, used to provide information to travelers. +[FlashingBeacon](/spec-content/objects/FlashingBeacon.md) | A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something or capture driver attention. [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) | The GeoJSON `Feature` container object for a deployed field device. [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. @@ -59,16 +60,20 @@ When making changes to the specification, the object diagram needs to be updated Many object properties are restricted to a finite set of values, defined by an enumerated type. The enumerations for each enumerated type as well as what object properties it is used by is described in its own file in the [enumerated-types](/spec-content/enumerated-types) directory. ### List of Enumerated Types -This section provides a tabular list of all enumerated types used in the WZDx specification, sectioned by whether they apply to road event features or field device features. +This section provides a tabular list of all enumerated types used in the WZDx specification, sectioned by whether they apply to the feed-level, road event features, or field device features. + +#### Feed-Level +[LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. #### Road Event Features +Enumerated Type | Description +--- | --- [EventType](/spec-content/enumerated-types/EventType.md) | The type of a WZDx road event. [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of a road event. [Direction](/spec-content/enumerated-types/Direction.md) | The direction for a road event based on standard naming for US roads. [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.md) | Units of measure used for a lane restriction value. [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | The status of a lane for the traveling public. [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. -[LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | The type of vehicle restriction on a roadway. [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | An indication of how a geographical coordinate was defined. [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. @@ -76,27 +81,9 @@ This section provides a tabular list of all enumerated types used in the WZDx sp [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. #### Field Devices +Enumerated Type | Description +--- | --- [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | A list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). +[FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) | Describes options for what a [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) is being used to indicate. [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of a field device. -[FieldDeviceType](/spec-content/enumerated-types/EventStatus.md) | The type of a field device. - -### Object Properties using Enumerated Types -For ease of reference, the table below describes all properties in the WZDx specification whose value is restricted by an enumerated type, as well as the object that contains that property. - -Property | Object | Enumerated Type | Notes ---- | --- | --- | --- -`beginning_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Enumeration updated in WZDx v3.0 -`direction` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [Direction](/spec-content/enumerated-types/Direction.md) | Enumeration adapted from TMDD link-alignment -`end_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 -`ending_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Enumeration updated in WZDx v3.0 -`event_type` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventType](/spec-content/enumerated-types/EventType.md) | Enumeration create in WZDx v3.0 -`event_status` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | Enumeration created in WZDx v1.0 -`location_method` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | Enumeration created in WZDx v3.0 but referenced since v1.1 -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Enumeration created in WZDx v1.0 -`restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Individual lane restrictions | Enumeration created in WZDx v1.0 -`restriction_units` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.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. -`start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 -`status` | [Lane](/spec-content/objects/Lane.md) | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Enumeration created in WZDx v2.0 -`type` | [Lane](/spec-content/objects/Lane.md) | [LaneType](/spec-content/enumerated-types/LaneType.md) | Enumeration adapted from TMDD LaneRoadway; updated in WZDx v3.0 -`type_name` | [TypeOfWork](/spec-content/objects/TypeOfWork.md) | [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | Enumeration created in WZDx v2.0 -`vehicle_impact` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | Enumeration created in WZDx v2.0 +[FieldDeviceType](/spec-content/enumerated-types/EventStatus.md) | The type of a field device. \ No newline at end of file diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md index 8c0c1f25..567128e9 100644 --- a/spec-content/enumerated-types/FieldDeviceType.md +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -7,6 +7,7 @@ Value | Description `arrow-board` | An electronic, connected arrow board which can display an arrow pattern to direct traffic. `camera` | A camera device deployed in the field, capable of capturing still images. `dynamic-message-sign` | An electronic traffic sign deployed on the roadway, used to provide information to travelers. +`flashing-beacon` | A flashing beacon light of any form, used to indicate caution and capture driver attention. ## Used By Property | Object diff --git a/spec-content/enumerated-types/FlashingBeaconFunction.md b/spec-content/enumerated-types/FlashingBeaconFunction.md new file mode 100644 index 00000000..3d14f67d --- /dev/null +++ b/spec-content/enumerated-types/FlashingBeaconFunction.md @@ -0,0 +1,14 @@ +# FlashingBeaconFunction Enumerated Type +The FlashingBeaconFunction enumerated type describes a list of options for what a [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) is being used to indicate. + +## Values +Value | Description +--- | --- +`vehicle-entering` | The beacon's function is to indicate vehicles are entering the roadway. +`queue-warning` | The beacon's function is to indicate there is a queue of vehicles. +`reduced-speed` | The beacon's function is to designate a reduced speed limit. +`workers-present` | The beacon's function is to indicate that workers are present on or near the roadway. + +## Used By +Property | Object +`function` | [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) \ No newline at end of file diff --git a/spec-content/objects/FlashingBeacon.md b/spec-content/objects/FlashingBeacon.md new file mode 100644 index 00000000..51dd6a32 --- /dev/null +++ b/spec-content/objects/FlashingBeacon.md @@ -0,0 +1,17 @@ +# FlashingBeacon Object +The FlashingBeacon object describes a flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something and capture driver attention. + +The FlashingBeacon is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device that are shared by all types of field devices, not specific to flashing beacons. | Required | This property appears on all field devices. +`function` | [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) | Describes the function or purpose of the flashing beacon, i.e. what it is being used to indicate. | Required | +`is_flashing` | Boolean | A yes/no value indicating if the flashing beacon is currently in use and flashing. | Optional | The `is_flashing` property is optional as it should not be provided if the producer does not know if the beacon is flashing (e.g. if it's in error state or similar). + +## Used By +Property | Object +--- | --- +`properties` | [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) + From ad881722db36674a87dac204d36948a0a2b95886 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Sat, 18 Sep 2021 13:18:29 -0400 Subject: [PATCH 122/388] Add HybridSign field device --- README.md | 2 + create-feed/schemas/wzdx_v4.0_feed.json | 37 ++++++++++++++++++- spec-content/README.md | 4 +- .../enumerated-types/FieldDeviceType.md | 1 + .../HybridSignVariableMessageFunction.md | 14 +++++++ spec-content/objects/HybridSign.md | 17 +++++++++ 6 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 spec-content/enumerated-types/HybridSignVariableMessageFunction.md create mode 100644 spec-content/objects/HybridSign.md diff --git a/README.md b/README.md index c542c461..227f74dc 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [Camera](/spec-content/objects/Camera.md) - [DynamicMessageSign](spec-content/objects/DynamicMessageSign.md) - [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) + - [HybridSign](/spec-content/objects/HybridSign.md) - [**Enumerated Types**](/spec-content/enumerated-types) - [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) - [Direction](/spec-content/enumerated-types/Direction.md) @@ -64,6 +65,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) - [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) - [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) + - [HybridSignVariableMessageFunction](/spec-content/enumerated-types/HybridSignVariableMessageFunction.md) - [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.md) - [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) - [LaneType](/spec-content/enumerated-types/LaneType.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 07035d46..316be843 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -221,7 +221,10 @@ "$ref": "#/definitions/DynamicMessageSign" }, { - "$ref": "#definitions/FlashingBeacon" + "$ref": "#/definitions/FlashingBeacon" + }, + { + "$ref": "#/definitions/HybridSign" } ] }, @@ -400,6 +403,30 @@ "core_details" ] }, + "HybridSign": { + "title": "Hybrid Sign Field Device", + "description": "A hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "variable_message_function": { + "$ref": "#/definitions/HybridSignVariableMessageFunction" + }, + "variable_message_text": { + "type": "string", + "description": "A text representation of the message currently posted to the variable electronic component of the hybrid sign" + }, + "static_sign_text": { + "type": "string", + "description": "The static text on the non-electronic component of the hybrid sign" + } + }, + "required": [ + "core_details", + "variable_message_function" + ] + }, "RoadEvent": { "title": "Road Event", "description": "Describes an activity taking place along a road segment", @@ -687,7 +714,8 @@ "arrow-board", "camera", "dynamic-message-sign", - "flashing-beacon" + "flashing-beacon", + "hybrid-sign" ] }, "FieldDeviceStatus": { @@ -700,6 +728,11 @@ "description": "Options for what a FlashingBeacon is being used to indicate", "enum": ["vehicle-entering", "queue-warning", "reduced-speed", "workers-present"] }, + "HybridSignVariableMessageFunction": { + "title": "Hybrid Sign Variable Message Function Enumerated Type", + "description": "Options for the function of the variable message displayed by the electronic display on a HybridSign", + "enum": ["speed-limit", "travel-time", "other"] + }, "EventType": { "title": "Road Event Type Enumerated Type", "description": "The type of WZDx road event", diff --git a/spec-content/README.md b/spec-content/README.md index f9422e7b..285eaeb4 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -46,7 +46,8 @@ Object | Description [DynamicMessagesSign](/spec-content/objects/DynamicMessageSign.md) | An electronic traffic sign deployed on the roadway, used to provide information to travelers. [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) | A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something or capture driver attention. [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) | The GeoJSON `Feature` container object for a deployed field device. -[FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. +[FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. +[HybridSign](/spec-content/objects/HybridSign.md) | A hybrid sign that contains static text (e.g. on an alumium sign) along with a single electronic message display, used to provide information to travelers. ### Object Diagram The object diagram below indicates the relationship between the data objects. @@ -85,5 +86,6 @@ Enumerated Type | Description --- | --- [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | A list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) | Describes options for what a [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) is being used to indicate. +[HybridSignVariableMessageFunction] | Describes options for the function of the variable message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of a field device. [FieldDeviceType](/spec-content/enumerated-types/EventStatus.md) | The type of a field device. \ No newline at end of file diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md index 567128e9..d4d6f5e1 100644 --- a/spec-content/enumerated-types/FieldDeviceType.md +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -8,6 +8,7 @@ Value | Description `camera` | A camera device deployed in the field, capable of capturing still images. `dynamic-message-sign` | An electronic traffic sign deployed on the roadway, used to provide information to travelers. `flashing-beacon` | A flashing beacon light of any form, used to indicate caution and capture driver attention. +`hybrid-sign` | A message sign that contains both static text (e.g. on an aluminium board) along with a variable electronic message sign, used to provide information to travelers. ## Used By Property | Object diff --git a/spec-content/enumerated-types/HybridSignVariableMessageFunction.md b/spec-content/enumerated-types/HybridSignVariableMessageFunction.md new file mode 100644 index 00000000..de51fe29 --- /dev/null +++ b/spec-content/enumerated-types/HybridSignVariableMessageFunction.md @@ -0,0 +1,14 @@ +# HybridSignVaribaleMessageFunction Enumerated Type +The HybridSignVariableMessageFunction enumerated type describes options for the function of the variable message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). + +## Values +Value | Description +--- | --- +`speed-limit` | The hybrid sign message is displaying a speed limit. +`travel-time` | The hybrid sign message is displaying a travel time. +`other` | The hybrid sign message message function is not one of the other options described by this enumerated type. + +## Used By +Property | Object +--- | --- +`variable_message_function` | [HybridSign](/spec-content/objects/HybridSign.md) \ No newline at end of file diff --git a/spec-content/objects/HybridSign.md b/spec-content/objects/HybridSign.md new file mode 100644 index 00000000..7078bdd6 --- /dev/null +++ b/spec-content/objects/HybridSign.md @@ -0,0 +1,17 @@ +# HybridSign Object +The HybridSign object describes a hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers. This object is intended to be general to represent hybrid signs with multiple functions, such as variable speed limit signs (VSLS), hybrid travel time signs and other similar systems. + +The HybridSign is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to hybrid signs. | Required | This property appears on all field devices. +`variable_message_function` | [HybridSignVariableMessageFunction] | The function the variable message displayed (e.g. a speed limit). | Required | +`variable_message_text` | String | A text representation of the message currently posted to the electronic component of the hybrid sign. | Optional | +`static_sign_text` | String | The static text on the non-electronic component of the hybrid sign. | Optional | + +## Used By +Property | Object +--- | --- +`properties` | [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) From 86f78445b592479d8e04524f18a67a699269eafc Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Sun, 19 Sep 2021 13:45:32 -0400 Subject: [PATCH 123/388] Add LocationMarker field device --- README.md | 3 ++ create-feed/schemas/wzdx_v4.0_feed.json | 53 ++++++++++++++++++- spec-content/README.md | 5 +- .../enumerated-types/FieldDeviceType.md | 1 + .../enumerated-types/MarkedLocationType.md | 20 +++++++ spec-content/objects/LocationMarker.md | 15 ++++++ spec-content/objects/MarkedLocation.md | 13 +++++ 7 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 spec-content/enumerated-types/MarkedLocationType.md create mode 100644 spec-content/objects/LocationMarker.md create mode 100644 spec-content/objects/MarkedLocation.md diff --git a/README.md b/README.md index 227f74dc..32226ad7 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,8 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [DynamicMessageSign](spec-content/objects/DynamicMessageSign.md) - [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) - [HybridSign](/spec-content/objects/HybridSign.md) + - [LocationMarker](/spec-content/objects/LocationMarker.md) + - [MarkedLocation](/spec-content/objects/MarkedLocation.md) - [**Enumerated Types**](/spec-content/enumerated-types) - [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) - [Direction](/spec-content/enumerated-types/Direction.md) @@ -70,6 +72,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) - [LaneType](/spec-content/enumerated-types/LaneType.md) - [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) + - [MarkedLocationType](/spec-content/enumerated-types/MarkedLocationType.md) - [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) - [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) - [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 316be843..dfea1500 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -225,6 +225,9 @@ }, { "$ref": "#/definitions/HybridSign" + }, + { + "$ref": "#/definitions/LocationMarker" } ] }, @@ -427,6 +430,38 @@ "variable_message_function" ] }, + "LocationMarker": { + "title": "Location Marker", + "description": "Any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone)", + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "marked_locations": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/MarkedLocation" + } + } + }, + "required": ["core_details", "marked_locations"] + }, + "MarkedLocation": { + "title": "Marked Location", + "description": "Describes a specific location where a LocationMarker is placed, such as the start or end of a work zone road event", + "properties": { + "type": { + "$ref": "#/definitions/MarkedLocationType" + }, + "road_event_id": { + "type": "string", + "description": "The ID of a RoadEventFeature that the MarkedLocation applies to" + } + }, + "required": ["type"] + }, "RoadEvent": { "title": "Road Event", "description": "Describes an activity taking place along a road segment", @@ -715,7 +750,8 @@ "camera", "dynamic-message-sign", "flashing-beacon", - "hybrid-sign" + "hybrid-sign", + "location-marker" ] }, "FieldDeviceStatus": { @@ -733,6 +769,21 @@ "description": "Options for the function of the variable message displayed by the electronic display on a HybridSign", "enum": ["speed-limit", "travel-time", "other"] }, + "MarkedLocationType": { + "title": "Marked Location Type Enumerated Type", + "description": "Options for what a MarkedLocation can mark, such as the start or end of a road event", + "enum": [ + "afad", + "flagger", + "lane-shift", + "lane-closure", + "temporary-traffic-signal", + "road-event-start", + "road-event-end", + "work-zone-start", + "work-zone-end" + ] + }, "EventType": { "title": "Road Event Type Enumerated Type", "description": "The type of WZDx road event", diff --git a/spec-content/README.md b/spec-content/README.md index 285eaeb4..09256bb5 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -48,6 +48,8 @@ Object | Description [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) | The GeoJSON `Feature` container object for a deployed field device. [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. [HybridSign](/spec-content/objects/HybridSign.md) | A hybrid sign that contains static text (e.g. on an alumium sign) along with a single electronic message display, used to provide information to travelers. +[LocationMarker](/spec-content/objects/LocationMarker.md) | Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). +[MarkedLocation](/spec-contentobjects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. ### Object Diagram The object diagram below indicates the relationship between the data objects. @@ -88,4 +90,5 @@ Enumerated Type | Description [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) | Describes options for what a [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) is being used to indicate. [HybridSignVariableMessageFunction] | Describes options for the function of the variable message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of a field device. -[FieldDeviceType](/spec-content/enumerated-types/EventStatus.md) | The type of a field device. \ No newline at end of file +[FieldDeviceType](/spec-content/enumerated-types/EventStatus.md) | The type of a field device. +[MarkedLocationType](/spec-content/enumerated-types/MarkedLocationType.md) | Describes options for what a [MarkedLocation](/spec-content/objects/MarkedLocation.md) can mark, such as the start or end of a road event. \ No newline at end of file diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md index d4d6f5e1..673169a4 100644 --- a/spec-content/enumerated-types/FieldDeviceType.md +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -9,6 +9,7 @@ Value | Description `dynamic-message-sign` | An electronic traffic sign deployed on the roadway, used to provide information to travelers. `flashing-beacon` | A flashing beacon light of any form, used to indicate caution and capture driver attention. `hybrid-sign` | A message sign that contains both static text (e.g. on an aluminium board) along with a variable electronic message sign, used to provide information to travelers. +`location-marker` | Any GPS-enabled ITS device that is placed at a point in on a roadway to mark a location (often the beginning or end of a road event). ## Used By Property | Object diff --git a/spec-content/enumerated-types/MarkedLocationType.md b/spec-content/enumerated-types/MarkedLocationType.md new file mode 100644 index 00000000..42bca6b9 --- /dev/null +++ b/spec-content/enumerated-types/MarkedLocationType.md @@ -0,0 +1,20 @@ +# MarkedLocationType Enumerated Type +The MarkedLocationType enumerated type describes options for what a [MarkedLocation](/spec-content/objects/MarkedLocation.md) can mark, such as the start or end of a road event. + +## Values +Value | Description +--- | --- +`afad` | An automatic flagging device. +`flagger` | A human who is directing traffic. +`lane-shift` | A lane shift. +`lane-closure` | One or more lanes are closed. +`temporary-traffic-signal` | A temporary traffic signal. +`road-event-start` | The start point of a road event. +`road-event-end` | The end point of a road event. +`work-zone-start` | The start point of a work zone. +`work-zone-end` | The end point of a work zone. + +## Used By +Property | Object +--- | --- +`type` | [MarkedLocation](/spec-content/objects/MarkedLocation.md) \ No newline at end of file diff --git a/spec-content/objects/LocationMarker.md b/spec-content/objects/LocationMarker.md new file mode 100644 index 00000000..4ee2f1a8 --- /dev/null +++ b/spec-content/objects/LocationMarker.md @@ -0,0 +1,15 @@ +# LocationMarker Object +The LocationMarker object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The LocationMarker contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.mdMarkedLocation.md) objects which indicate to a type of location (such as the start or end) and optionally the ID of a [RoadEvent] that the location is associated with. + +The LocationMarker is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to the location marker. | Required | This property appears on all field devices. +`marked_locations` | Array; [[MarkedLocation](/spec-content/objects/MarkedLocation.md)] | A list of locations that the LocationMarker is marking. | Required | + +## Used By +Property | Object +--- | --- +`properties` | [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) \ No newline at end of file diff --git a/spec-content/objects/MarkedLocation.md b/spec-content/objects/MarkedLocation.md new file mode 100644 index 00000000..312364d0 --- /dev/null +++ b/spec-content/objects/MarkedLocation.md @@ -0,0 +1,13 @@ +# MarkedLocation Object +The MarkedLocation object describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. The marked location is typically within a road event, but is not required to be. + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`type` | [MarkedLocationType](/spec-content/enumerated-types/MarkedLocationType.md) | The type of location (e.g. start or end) that is marked. | Required | +`road_event_id` | String | The ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) that the MarkedLocation applies to. | Optional | This property is optional because the field device information producer may not always have road event information. + +## Used By +Property | Object +--- | --- +`marked_locations` | [LocationMarker](/spec-content/objects/LocationMarker.md) \ No newline at end of file From 7feaa5774e9daa8e40c0ec1bd7bdde4035e96301 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Sun, 19 Sep 2021 14:15:41 -0400 Subject: [PATCH 124/388] Add TrafficSensor field device --- README.md | 2 + create-feed/schemas/wzdx_v4.0_feed.json | 88 ++++++++++++++++++- spec-content/README.md | 2 + .../enumerated-types/FieldDeviceType.md | 1 + spec-content/objects/FieldDeviceFeature.md | 2 +- spec-content/objects/TrafficSensor.md | 20 +++++ spec-content/objects/TrafficSensorLaneData.md | 18 ++++ 7 files changed, 130 insertions(+), 3 deletions(-) create mode 100644 spec-content/objects/TrafficSensor.md create mode 100644 spec-content/objects/TrafficSensorLaneData.md diff --git a/README.md b/README.md index 32226ad7..fd81edca 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,8 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [HybridSign](/spec-content/objects/HybridSign.md) - [LocationMarker](/spec-content/objects/LocationMarker.md) - [MarkedLocation](/spec-content/objects/MarkedLocation.md) + - [TrafficSensor](/spec-content/objects/TrafficSensor.md) + - [TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) - [**Enumerated Types**](/spec-content/enumerated-types) - [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) - [Direction](/spec-content/enumerated-types/Direction.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index dfea1500..aec3cb7e 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -228,6 +228,9 @@ }, { "$ref": "#/definitions/LocationMarker" + }, + { + "$ref": "#/definitions/TrafficSensor" } ] }, @@ -431,7 +434,7 @@ ] }, "LocationMarker": { - "title": "Location Marker", + "title": "Location Marker Field Device", "description": "Any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone)", "type": "object", "properties": { @@ -462,6 +465,86 @@ }, "required": ["type"] }, + "TrafficSensor": { + "title": "Traffic Sensor Field Device", + "description": "A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval", + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "collection_interval_start_date": { + "type": "string", + "format": "date-time", + "description": "The UTC date and time where the TrafficSensor data collection started. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" + }, + "collection_interval_end_date": { + "type": "string", + "format": "date-time", + "description": "The UTC date and time where the TrafficSensor data collection ended. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" + }, + "average_speed_kph": { + "type": "integer", + "minimum": 1, + "description": "The average speed of vehicles across all lanes over the collection interval in kilometers per hour" + }, + "total_vehicle_count": { + "type": "integer", + "minimum": 0, + "description": "The total number of vehicles counted by the sensor during the collection interval" + }, + "occupancy_percent": { + "type": "integer", + "minimum": 0, + "description": "The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval" + }, + "lane_data": { + "type": "array", + "items": { + "$ref": "#/definitions/TrafficSensorLaneData" + } + } + }, + "reuqired": [ + "core_details", + "collection_interval_start_date", + "collection_interval_end_date" + ] + }, + "TrafficSensorLaneData": { + "title": "Traffic Sensor Lane Data", + "description": "data for a single lane within a RoadEvent measured by a TrafficSensor deployed on the roadway", + "properties": { + "road_event_id": { + "type": "string", + "description": "The ID of a RoadEventFeature that the measured lane occurs in" + }, + "lane_order": { + "type": "integer", + "minimum": 1, + "description": "The lane's position in sequence within the road event specified by the 'road_event_id' property" + }, + "average_speed_kph": { + "type": "integer", + "minimum": 1, + "description": "The average speed of traffic in the lane over the collection interval in kilometers per hour" + }, + "total_vehicle_count": { + "type": "integer", + "minimum": 0, + "description": "The total number of vehicles counted by the sensor in the lane during the collection interval" + }, + "occupancy_percent": { + "type": "integer", + "minimum": 0, + "description": "The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval" + } + }, + "required": [ + "road_event_id", + "lane_order" + ] + }, "RoadEvent": { "title": "Road Event", "description": "Describes an activity taking place along a road segment", @@ -751,7 +834,8 @@ "dynamic-message-sign", "flashing-beacon", "hybrid-sign", - "location-marker" + "location-marker", + "traffic-sensor" ] }, "FieldDeviceStatus": { diff --git a/spec-content/README.md b/spec-content/README.md index 09256bb5..887086a0 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -50,6 +50,8 @@ Object | Description [HybridSign](/spec-content/objects/HybridSign.md) | A hybrid sign that contains static text (e.g. on an alumium sign) along with a single electronic message display, used to provide information to travelers. [LocationMarker](/spec-content/objects/LocationMarker.md) | Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). [MarkedLocation](/spec-contentobjects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. +[TrafficSensor](/spec-content/objects/TrafficSensor.md) | A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. +[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. ### Object Diagram The object diagram below indicates the relationship between the data objects. diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md index 673169a4..b8c3bf48 100644 --- a/spec-content/enumerated-types/FieldDeviceType.md +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -10,6 +10,7 @@ Value | Description `flashing-beacon` | A flashing beacon light of any form, used to indicate caution and capture driver attention. `hybrid-sign` | A message sign that contains both static text (e.g. on an aluminium board) along with a variable electronic message sign, used to provide information to travelers. `location-marker` | Any GPS-enabled ITS device that is placed at a point in on a roadway to mark a location (often the beginning or end of a road event). +`traffic-sensor` | A device deployed on a roadway which captures traffic metrics such as speed, volume, or occupancy. ## Used By Property | Object diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index cc30c3c2..de08638f 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `id` | String | A unique identifier issued by the data feed provider to identify the field device. | Required | This is a GeoJSON property. `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. -`properties` | One of: ArrowBoard, Camera, DynamicMessageSign, FlashingBeacon, LocationMarker, TrafficSensor | The specific details of the field device. | Required | This is a GeoJSON property. +`properties` | One of: [ArrowBoard](/spec-content/objects/ArrowBoard.md), [Camera](/spec-content/objects/Camera.md), [DynamicMessageSign](/spec-content/objects/DynamicMessageSign.md), [FlashingBeacon](/spec-content/objects/FlashingBeacon.md), [LocationMarker](/spec-content/objects/LocationMarker.md), [TrafficSensor](/spec-content/objects/TrafficSensor.md) | The specific details of the field device. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | The geometry of the field device, indicating its location. The Geometry object's `type` property MUST be [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | Required | This is a GeoJSON property. `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this field device. Must be an array of length 2*n where n is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md new file mode 100644 index 00000000..6c1fe713 --- /dev/null +++ b/spec-content/objects/TrafficSensor.md @@ -0,0 +1,20 @@ +# TrafficSensor Object +The TrafficSensor object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The TrafficSensor can describe lane-level if available and if associated with a [RoadEvent](/spec-content/objects/RoadEvent.md). + +The TrafficSensor is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to traffic sensors. | Required | This property appears on all field devices. +`collection_interval_start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the TrafficSensor data began being collected at. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | +`collection_interval_end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the TrafficSensor collection interval ended. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | +`average_speed_kph` | Positive Integer | The average speed of vehicles across all lanes over the collection interval in kilometers per hour. | Optional | +`total_vehicle_count` | Integer | The total number of vehicles counted by the sensor during the collection interval. | Optional | +`occupancy_percent` | Postive Number | The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | +`lane_data` | Array; [[TrafficSensorLaneData]()] | A list of objects each describing traffic data for a specific lane—each pointing to a road event lane and indiciating the metrics of that lane. | Optional | Lane-level data can only be provided if the data producer has knowledge of the road event to assign the traffic sensor lane data to. + +## Used By +Property | Object +--- | --- +`properties` | [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) diff --git a/spec-content/objects/TrafficSensorLaneData.md b/spec-content/objects/TrafficSensorLaneData.md new file mode 100644 index 00000000..68afb8d5 --- /dev/null +++ b/spec-content/objects/TrafficSensorLaneData.md @@ -0,0 +1,18 @@ +# TrafficSensorLaneData Object +The TrafficSensorLaneData object describes data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. + +Note this structure allows a single TrafficSensor to provide data across lanes on multiple road events. It does not allow for lane data to be provided when a road event is not known. + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`road_event_id` | String | The ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) which the measured lane occurs in. | Required | +`lane_order` | Positive Integer | The lane's position in sequence within the road event (specified by `road_event_id`). The value of this property corresponds to the associated [RoadEvent](/spec-content/objects/RoadEvent.md)'s [Lane](/spec-content/objects/Lane.md)'s `order` property. | Required | +`average_speed_kph` | Positive Integer | The average speed of traffic in the lane over the collection interval. | Optional | +`total_vehicle_count` | Integer | The total number of vehicles counted by the sensor in the lane during the collection interval. | Optional | +`occupancy_percent` | Postive Number | The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | + +## Used By +Property | Object +--- | --- +`lane_data` | [TrafficSensor](/spec-content/objects/TrafficSensor.md) \ No newline at end of file From f4fb45143892dbed9f3176a6074074ffb3f56e62 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 21 Sep 2021 12:40:14 -0400 Subject: [PATCH 125/388] Link to business rules section in README and fix minor typo --- spec-content/enumerated-types/LaneType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index 69213bf0..f093208d 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -13,7 +13,7 @@ Value | Description `bike-lane` | A lane on the roadway for use by cyclists only. `shoulder` | A portion of the roadway that is outside (either right or left) of the main travel lanes. A shoulder can have many uses but is not intended for general traffic. `parking` | A lane used for parking, not allowed for travel. -`median` | An often unpaved, non-drivable area that separates sections of the roadway. In most cases a median should only be described if it separates lanes in a single direction of travel, as per [business rule #1](/create-feed/README.md) each direction of travel must be represented a separate road event. +`median` | An often unpaved, non-drivable area that separates sections of the roadway. In most cases a median should only be described if it separates lanes in a single direction of travel, as per [business rule #1](/create-feed/README.md#business-rules) each direction of travel must be represented by a separate road event. `center-left-turn-lane` | A lane in the center of a bidirectional roadway that traffic from both directions uses to make a left turn. ## Used By From 3a57555c5d3872482515a37697fbf69b3d1abce0 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 21 Sep 2021 16:02:57 -0400 Subject: [PATCH 126/388] Remove total_num_lanes from example files --- .../scenario1_simple_linestring_example.geojson | 2 -- .../comprehensive_multipoint_example.geojson | 2 -- .../scenario1_simple_multipoint_example.geojson | 2 -- 3 files changed, 6 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index a6f6b451..721f351a 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -528,7 +528,6 @@ "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", - "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, @@ -640,7 +639,6 @@ "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", - "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index 9c2d4ab3..59ab4883 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -380,7 +380,6 @@ "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", - "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, @@ -468,7 +467,6 @@ "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", - "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 04e4b0c0..c581b2c6 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -252,7 +252,6 @@ "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", - "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, @@ -340,7 +339,6 @@ "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", - "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, From 846479ddc17590548b1e2d75c17f7b5aee977042 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 07:41:16 -0400 Subject: [PATCH 127/388] Fix typo and format in restriction object description --- spec-content/objects/Restriction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/Restriction.md b/spec-content/objects/Restriction.md index d299fe65..43e72de8 100644 --- a/spec-content/objects/Restriction.md +++ b/spec-content/objects/Restriction.md @@ -1,5 +1,5 @@ # Restriction Object -The Restriction object describes a restriction on a roadway or lane. This object is used by both the [RoadEvent](/spec-content/objectsRoadEvent.md) and [Lane](/spec-content/objects/Lane.md) objects. +The `Restriction` object describes a restriction on a roadway or lane. This object is used by both the [RoadEvent](/spec-content/objects/RoadEvent.md) and [Lane](/spec-content/objects/Lane.md) objects. ## Properties Name | Type | Description | Conformance | Notes From 7c24239c7660e256a182421cd3f6fef02e55f7aa Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 08:19:38 -0400 Subject: [PATCH 128/388] Fix restriction object description --- create-feed/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/README.md b/create-feed/README.md index d2572b8d..e62217b6 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -27,8 +27,8 @@ The tables below detail the specificaton's content and describe the data used to - The [RoadEvent](/spec-content/objects/RoadEvent.md) object describes a work zone event. - The [TypeOfWork](/spec-content/objects/TypeOfWork.md) object describes the work taking place along the road. If applicable, it indicates if the work changes the roadway's architecture. +- The [Restriction](/spec-content/objects/Restriction.md) object describes a restriction on a roadway or lane. - The [Lane](/spec-content/objects/Lane.md) object identifies and describes individual lanes within an event. -- The [LaneRestriction](/spec-content/objects/LaneRestriction.md) object describes restrictions for identified lanes. - The [Relationship](/spec-content/objects/Relationship.md) object identifies sequential and hierarchical relationships between road events and other entities. The figure below models the tables and their relationships. From e0678939ca3ea3e3ffe21b76e2ace01ea6664cda Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 08:42:45 -0400 Subject: [PATCH 129/388] Add RoadEventCoreDetails object --- README.md | 1 + create-feed/schemas/wzdx_v4.0_feed.json | 48 ++++++++++++++++++++ spec-content/README.md | 1 + spec-content/objects/RoadEventCoreDetails.md | 23 ++++++++++ 4 files changed, 73 insertions(+) create mode 100644 spec-content/objects/RoadEventCoreDetails.md diff --git a/README.md b/README.md index 512318ed..142fb4bc 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) - [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) + - [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) - [RoadEvent](/spec-content/objects/RoadEvent.md) - [TypeOfWork](/spec-content/objects/TypeOfWork.md) - [Lane](/spec-content/objects/Lane.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index c5c9dc08..41082b69 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -189,6 +189,54 @@ ], "required": ["type","properties","geometry"] }, + "RoadEventCoreDetails": { + "title": "Road Event Core Details", + "description": "The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events", + "type": "object", + "properties": { + "data_source_id": { + "description": "Identifies the data source from which the road event data is sourced from", + "type": "string" + }, + "event_type": { + "$ref": "#/definitions/EventType" + }, + "relationship": { + "$ref": "#/definitions/Relationship" + }, + "road_names": { + "description": "A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "direction": { + "$ref": "#/definitions/Direction" + }, + "description": { + "description": "Short free text description of the road event", + "type": "string" + }, + "creation_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was created (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "update_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was last updated (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + } + }, + "required": [ + "event_type", + "data_source_id", + "direction", + "road_names" + ] + }, "RoadEvent": { "title": "Road Event", "description": "Describes an activity taking place along a road segment", diff --git a/spec-content/README.md b/spec-content/README.md index 06ee4527..08cddbc9 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -27,6 +27,7 @@ Object | Description [LaneRestriction](/spec-content/objects/LaneRestriction.md) | A lane-level restriction, including type and value. [Relationship](/spec-content/objects/Relationship.md) | Identification of both sequential and hierarchical relationships between road events and other entities. [RoadEvent](/spec-content/objects/RoadEvent.md) | Information that describes where, when, and what activity is taking place along a road segment. +[RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events. [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md new file mode 100644 index 00000000..e614505e --- /dev/null +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -0,0 +1,23 @@ +# RoadEventCoreDetails Object +The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events, such as work zones (see [WorkZone]()) and detours (see [Detour]()). The `RoadEventCoreDetails` cannot exist directly in a data feed and on it's own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each which is represented by its own object. + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | +`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same WZDx GeoJSON document. +`road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Conditional: required if `road_name` is not provided. | This property captures the functionality of the deprecated `road_number` and `road_name` properties and conformance will be required in a future release. +`direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) +`relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | +`description` | String | Short free text description of work zone. | Optional | +`creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. +`update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. + +#### Used By +Property | Object +--- | --- + +#### Important Notes +The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. + + From 2e8c981b4ac301b5f0256685c4e976606221a59a Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 08:53:23 -0400 Subject: [PATCH 130/388] Remove RoadEvent and add WorkZone --- create-feed/schemas/wzdx_v4.0_feed.json | 69 +++--------------------- spec-content/README.md | 2 +- spec-content/objects/RoadEvent.md | 43 --------------- spec-content/objects/RoadEventFeature.md | 2 +- spec-content/objects/WorkZone.md | 31 +++++++++++ 5 files changed, 40 insertions(+), 107 deletions(-) delete mode 100644 spec-content/objects/RoadEvent.md create mode 100644 spec-content/objects/WorkZone.md diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 41082b69..17c90e83 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -147,7 +147,7 @@ }, "RoadEventFeature": { "title": "Road Event Feature (GeoJSON Feature)", - "description": "The container object for a WZDx road event; an instance of a GeoJSON Feature", + "description": "The container object for a specific WZDx road event; an instance of a GeoJSON Feature", "type": "object", "properties": { "id": { @@ -159,7 +159,7 @@ "enum": ["Feature"] }, "properties": { - "$ref": "#/definitions/RoadEvent" + "$ref": "#/definitions/WorkZone" }, "geometry": { "oneOf": [ @@ -237,31 +237,13 @@ "road_names" ] }, - "RoadEvent": { - "title": "Road Event", - "description": "Describes an activity taking place along a road segment", + "WorkZone": { + "title": "Work Zone Road Event", + "description": "Descibes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway", "type": "object", "properties": { - "data_source_id": { - "description": "Identifies the data source from which the road event data is sourced from", - "type": "string" - }, - "event_type": { - "$ref": "#/definitions/EventType" - }, - "relationship": { - "$ref": "#/definitions/Relationship" - }, - "road_names": { - "description": "A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "direction": { - "$ref": "#/definitions/Direction" + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" }, "beginning_cross_street": { "description": "Name or number of the nearest cross street along the roadway where the event begins", @@ -326,20 +308,6 @@ }, "uniqueItems": true }, - "description": { - "description": "Short free text description of the road event", - "type": "string" - }, - "creation_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was created (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "update_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was last updated (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, "types_of_work": { "description": "A list of the types of work being done in a road event", "type": "array", @@ -353,32 +321,9 @@ "items": { "$ref": "#/definitions/Lane" } - }, - "road_event_id": { - "description": "***DEPRECATED*** A unique identifier issued by the data feed provider to identify the work zone project or activity", - "type": "string" - }, - "road_number": { - "description": "***DEPRECATED*** The road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", - "type": "string" - }, - "road_name": { - "description": "***DEPRECATED*** Publicly known name of the road on which the event occurs", - "type": "string" - }, - "total_num_lanes": { - "description": "***DEPRECATED*** The total number of lanes associated with the road event", - "type": "integer", - "exclusiveMinimum": 0 } }, - "anyOf": [ - { "required": ["road_name"] }, - { "required": ["road_names"] } - ], "required": [ - "data_source_id", - "direction", "beginning_accuracy", "ending_accuracy", "start_date", diff --git a/spec-content/README.md b/spec-content/README.md index 08cddbc9..a2c18328 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -26,12 +26,12 @@ Object | Description [Lane](/spec-content/objects/Lane.md) | An individual lane within a road event. [LaneRestriction](/spec-content/objects/LaneRestriction.md) | A lane-level restriction, including type and value. [Relationship](/spec-content/objects/Relationship.md) | Identification of both sequential and hierarchical relationships between road events and other entities. -[RoadEvent](/spec-content/objects/RoadEvent.md) | Information that describes where, when, and what activity is taking place along a road segment. [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events. [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. +[WorkZone](/spec-content/objects/WorkZone.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. [WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. ### Object Diagram diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md deleted file mode 100644 index 0efb5775..00000000 --- a/spec-content/objects/RoadEvent.md +++ /dev/null @@ -1,43 +0,0 @@ -# RoadEvent Object -The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone` and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). - -## Properties -Name | Type | Description | Conformance | Notes ---- | --- | --- | --- | --- -`event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | -`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same WZDx GeoJSON document. -`start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | -`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | -`beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | -`ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | -`road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Conditional: required if `road_name` is not provided. | This property captures the functionality of the deprecated `road_number` and `road_name` properties and conformance will be required in a future release. -`direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) -`vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | -`relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | -`beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | -`ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | -`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. -`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. -`event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | -`types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | -`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 | -`restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. -`description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version -`creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`road_event_id` (DEPRECATED) | String | *This property is deprecated; use the `id` property on the parent [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object instead* — A unique identifier issued by the data feed provider to identify the road event activity. | Optional | This property will be removed in a future version of WZDx. -`road_number` (DEPRECATED) | String | *This property is deprecated and will be removed in a future version; include road numbers within the `road_names` array instead* — The road number designated by a jurisdiction such as a county, state, or interstate. | Optional | Examples I-5, VT 133. -`road_name` (DEPRECATED) | String | *This property is deprecated and will be removed in a future version; include road names within the `road_names` array instead* — Publicly known name of the road on which the event occurs. | Conditional: required if `road_names` property is not provided. | -`total_num_lanes` (DEPRECATED) | Integer | *This property is deprecated and will be removed in a future version* — 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. - -## Used By -Property | Object ---- | --- -`properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) - -## Important Notes -The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index 27eaa543..6fec025d 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `id` | String | A unique identifier issued by the data feed provider to identify the WZDx road event. | Conditional; Required if road event's ID is not provided via the `road_event_id` property on the road event (detailed in the `properties` property). | In prior versions of WZDx, the road event ID was given by a `road_event_id` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object. Now, `road_event_id` is deprecated and this `id` should be used instead. This property will be required in a future version of WZDx. This is a GeoJSON property. `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. -`properties` | [RoadEvent](/spec-content/objects/RoadEvent.md) | The specific details of road event. | Required | This is a GeoJSON property. +`properties` | One of: [WorkZone](/spec-content/objects/WorkZone.md) | The specific details of the road event. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3) | The geometry of the road event. The Geometry object's `type` property MUST be [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3). `LineString` allows specifying the entire road event path and should be preferred. `MultiPoint` should be used when only the start and end coordinates are known. | Required | This is a GeoJSON property. `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this RoadEventFeature. Must be an array of length 2*n where n is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. diff --git a/spec-content/objects/WorkZone.md b/spec-content/objects/WorkZone.md new file mode 100644 index 00000000..185b6239 --- /dev/null +++ b/spec-content/objects/WorkZone.md @@ -0,0 +1,31 @@ +# WorkZone Object +The `WorkZone` object describes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway. + +The `WorkZone` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of the road event that are shared by all types of road events, not specific to work zones. | Required | +`start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. +`end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. +`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | +`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | +`beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | +`ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | +`vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | +`beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | +`ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | +`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. +`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. +`event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | +`types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | +`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 | +`restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. + +## Used By +Property | Object +--- | --- +`properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) \ No newline at end of file From 37e9f8882b381e2ef53d0e4cfa45bcbf981b5844 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 09:35:33 -0400 Subject: [PATCH 131/388] Add Detour road event --- README.md | 3 +- create-feed/schemas/wzdx_v4.0_feed.json | 62 +++++++++++++++++++++++- spec-content/README.md | 5 +- spec-content/objects/Detour.md | 24 +++++++++ spec-content/objects/RoadEventFeature.md | 2 +- 5 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 spec-content/objects/Detour.md diff --git a/README.md b/README.md index 142fb4bc..fb5b8e61 100644 --- a/README.md +++ b/README.md @@ -46,7 +46,8 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) - [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) - - [RoadEvent](/spec-content/objects/RoadEvent.md) + - [WorkZone](/spec-content/objects/WorkZone.md) + - [Detour](/spec-content/objects/Detour.md) - [TypeOfWork](/spec-content/objects/TypeOfWork.md) - [Lane](/spec-content/objects/Lane.md) - [LaneRestriction](/spec-content/objects/LaneRestriction.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 17c90e83..51363408 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -159,7 +159,14 @@ "enum": ["Feature"] }, "properties": { - "$ref": "#/definitions/WorkZone" + "oneOf": [ + { + "$ref": "#/definitions/WorkZone" + }, + { + "$ref": "#/definitions/Detour" + } + ] }, "geometry": { "oneOf": [ @@ -333,6 +340,59 @@ "vehicle_impact" ] }, + "Detour": { + "title": "Detour Road Event", + "description": "Descibes a detour on a roadway", + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + }, + "beginning_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event begins", + "type": "string" + }, + "ending_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event ends", + "type": "string" + }, + "beginning_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event begins", + "type": "number", + "minimum": 0 + }, + "ending_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event ends", + "type": "number", + "minimum": 0 + }, + "start_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "end_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "start_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "end_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "event_status": { + "$ref": "#/definitions/EventStatus" + } + }, + "required": [ + "start_date", + "end_date", + "start_date_accuracy", + "end_date_accuracy" + ] + }, "Relationship": { "title": "Relationship", "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", diff --git a/spec-content/README.md b/spec-content/README.md index a2c18328..c746bdf5 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -31,9 +31,12 @@ Object | Description [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. -[WorkZone](/spec-content/objects/WorkZone.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. [WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. +#### Road Events +[Detour](/spec-content/objects/Detour.md) | A detour on a roadway. +[WorkZone](/spec-content/objects/WorkZone.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. + ### Object Diagram The object diagram below indicates the relationship between the data objects. diff --git a/spec-content/objects/Detour.md b/spec-content/objects/Detour.md new file mode 100644 index 00000000..b130af6e --- /dev/null +++ b/spec-content/objects/Detour.md @@ -0,0 +1,24 @@ + +# Detour Object +The `Detour` object describes a detour on a roadway. + +The `Detour` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`road_event` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of the road event that are shared by all types of road events, not specific to detours. | Required | +`start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. +`end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. +`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | +`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | +`beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | +`ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | +`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. +`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. +`event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | + +## Used By +Property | Object +--- | --- +`properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index 6fec025d..b7e05db7 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `id` | String | A unique identifier issued by the data feed provider to identify the WZDx road event. | Conditional; Required if road event's ID is not provided via the `road_event_id` property on the road event (detailed in the `properties` property). | In prior versions of WZDx, the road event ID was given by a `road_event_id` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object. Now, `road_event_id` is deprecated and this `id` should be used instead. This property will be required in a future version of WZDx. This is a GeoJSON property. `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. -`properties` | One of: [WorkZone](/spec-content/objects/WorkZone.md) | The specific details of the road event. | Required | This is a GeoJSON property. +`properties` | One of: [WorkZone](/spec-content/objects/WorkZone.md), [Detour](/spec-content/objects/Detour.md) | The specific details of the road event. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3) | The geometry of the road event. The Geometry object's `type` property MUST be [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3). `LineString` allows specifying the entire road event path and should be preferred. `MultiPoint` should be used when only the start and end coordinates are known. | Required | This is a GeoJSON property. `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this RoadEventFeature. Must be an array of length 2*n where n is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. From 3f62a6115aeab2b5ad8d1a296d418c380a55e597 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 10:06:11 -0400 Subject: [PATCH 132/388] Remove empty line --- spec-content/objects/Detour.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spec-content/objects/Detour.md b/spec-content/objects/Detour.md index b130af6e..269e3eab 100644 --- a/spec-content/objects/Detour.md +++ b/spec-content/objects/Detour.md @@ -1,4 +1,3 @@ - # Detour Object The `Detour` object describes a detour on a roadway. From 36c3688f90d4dfefb9da2cc5c69c4b15532c3292 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 13:50:01 -0400 Subject: [PATCH 133/388] Add unknown to ArrowBoardPattern, require pattern --- create-feed/schemas/wzdx_v4.0_feed.json | 6 ++++-- spec-content/enumerated-types/ArrowBoardPattern.md | 1 + spec-content/objects/ArrowBoard.md | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index aec3cb7e..11f27be7 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -344,7 +344,8 @@ } }, "required": [ - "core_details" + "core_details", + "pattern" ] }, "Camera": { @@ -822,7 +823,8 @@ "right-arrow-static", "right-chevrons-flashing", "right-chevrons-sequential", - "right-chevrons-static" + "right-chevrons-static", + "unknown" ] }, "FieldDeviceType": { diff --git a/spec-content/enumerated-types/ArrowBoardPattern.md b/spec-content/enumerated-types/ArrowBoardPattern.md index 74e612e0..a35190b5 100644 --- a/spec-content/enumerated-types/ArrowBoardPattern.md +++ b/spec-content/enumerated-types/ArrowBoardPattern.md @@ -24,6 +24,7 @@ Value | Description `line-flashing` | A flashing line or bar (e.g. `---`), indicating warning/caution, not a merge. `diamonds-alternating` | An alternating display of two diamond shapes (e.g. `◇ ◇`), indicating warning/caution, not a merge. `four-corners-flashing` | Four dots on the corners of the board which flash, indiciating warning/caution, not a merge. +`unknown` | The arrow board pattern is not known. ## Used By Property | Object diff --git a/spec-content/objects/ArrowBoard.md b/spec-content/objects/ArrowBoard.md index e221470e..7d914b82 100644 --- a/spec-content/objects/ArrowBoard.md +++ b/spec-content/objects/ArrowBoard.md @@ -7,7 +7,7 @@ The ArrowBoard is a type of field device; it has a `core_details` property which Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device that are shared by all types of field devices, not specific to arrow boards. | Required | This property appears on all field devices. -`pattern` | [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | The current pattern displayed on the arrow board. Note this includes `blank`, which indicates that nothing is shown on the arrow board. | Optional | +`pattern` | [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | The current pattern displayed on the arrow board. Note this includes `blank`, which indicates that nothing is shown on the arrow board. | Required | `is_moving` | Boolean | A yes/no value indicating if the arrow board is actively moving (not statically placed) as part of a mobile work zone operation. | Optional | The `is_moving` property is optional and should not be provided if it is not known if the arrow board is moving. `is_deployed` | Boolean | A yes/no value indicating if the arrow board is in the deployed position (`true`) or stowed/transport position (`false`). | Optional | From 496a4fe6eef286bdba77c6beea0fc9c8828dda6a Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 13:52:43 -0400 Subject: [PATCH 134/388] Change is_deployed to is_in_transport_position --- create-feed/schemas/wzdx_v4.0_feed.json | 4 ++-- spec-content/objects/ArrowBoard.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 11f27be7..9976e1fa 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -338,9 +338,9 @@ "type": "boolean", "description": "A yes/no value indicating if the arrow board is actively moving (not statically placed) as part of a mobile work zone operation." }, - "is_deployed": { + "is_in_transport_position": { "type": "boolean", - "description": "A yes/no value indicating if the arrow board is in the deployed position (true) or stowed/transport position (false)" + "description": "A yes/no value indicating if the arrow board is in the stowed/transport position (true) or deployed/upright position (false)" } }, "required": [ diff --git a/spec-content/objects/ArrowBoard.md b/spec-content/objects/ArrowBoard.md index 7d914b82..23824108 100644 --- a/spec-content/objects/ArrowBoard.md +++ b/spec-content/objects/ArrowBoard.md @@ -9,7 +9,7 @@ Name | Type | Description | Conformance | Notes `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device that are shared by all types of field devices, not specific to arrow boards. | Required | This property appears on all field devices. `pattern` | [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | The current pattern displayed on the arrow board. Note this includes `blank`, which indicates that nothing is shown on the arrow board. | Required | `is_moving` | Boolean | A yes/no value indicating if the arrow board is actively moving (not statically placed) as part of a mobile work zone operation. | Optional | The `is_moving` property is optional and should not be provided if it is not known if the arrow board is moving. -`is_deployed` | Boolean | A yes/no value indicating if the arrow board is in the deployed position (`true`) or stowed/transport position (`false`). | Optional | +`is_in_transport_position` | Boolean | A yes/no value indicating if the arrow board is in the stowed/transport position (`true`) or deployed/upright position (`false`). | Optional | ## Used By Property | Object From cad53820aa14972cbaad3ac60f222a513c931149 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 15:45:02 -0400 Subject: [PATCH 135/388] Move location_method property to WorkZone object --- create-feed/schemas/wzdx_v4.0_feed.json | 11 ++++++----- spec-content/objects/RoadEventDataSource.md | 1 - spec-content/objects/WorkZone.md | 1 + 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 51363408..a00aaefd 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -115,9 +115,6 @@ "type": "string", "format": "date-time" }, - "location_method": { - "$ref": "#/definitions/LocationMethod" - }, "location_verify_method": { "description": "The method used to verify the accuracy of the location information", "type": "string" @@ -132,7 +129,7 @@ "format": "uri" } }, - "required": ["data_source_id", "organization_name", "location_method"] + "required": ["data_source_id", "organization_name"] }, "LocationMethod": { "title": "Location Method Enumerated Type", @@ -298,6 +295,9 @@ "vehicle_impact": { "$ref": "#/definitions/VehicleImpact" }, + "location_method": { + "$ref": "#/definitions/LocationMethod" + }, "workers_present": { "description": "A flag indicating that there are workers present in the road event", "type": "boolean" @@ -337,7 +337,8 @@ "end_date", "start_date_accuracy", "end_date_accuracy", - "vehicle_impact" + "vehicle_impact", + "location_method" ] }, "Detour": { diff --git a/spec-content/objects/RoadEventDataSource.md b/spec-content/objects/RoadEventDataSource.md index 81ad0493..321a409f 100644 --- a/spec-content/objects/RoadEventDataSource.md +++ b/spec-content/objects/RoadEventDataSource.md @@ -6,7 +6,6 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `data_source_id` | String | Unique identifier for the data source organization providing work zone data. | Required | Linked to a [RoadEvent](/spec-content/objects/RoadEvent.md) by the `RoadEvent`'s `data_source_id` property. `organization_name` | String | The name of the organization for the authoritative source of the work zone data. | Required | Example: County DOT -`location_method` | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. | Required | `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time when the data source was last updated. | Optional | All date-time formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z` `update_frequency` | Integer | The frequency in seconds at which the data source is updated. | Optional | `contact_name` | String | The name of the individual or group responsible for the work zone data source. | Optional | Example: `Jo Help` diff --git a/spec-content/objects/WorkZone.md b/spec-content/objects/WorkZone.md index 185b6239..a0ba4068 100644 --- a/spec-content/objects/WorkZone.md +++ b/spec-content/objects/WorkZone.md @@ -13,6 +13,7 @@ Name | Type | Description | Conformance | Notes `end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | `beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | `ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | +`location_method` | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. | Required | `vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | `lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | `beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | From 5b474f173380f9fff36d23eb4d88297f001f1d01 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 16:00:10 -0400 Subject: [PATCH 136/388] Add RoadEvent suffix to WorkZone and Detour --- README.md | 4 ++-- create-feed/schemas/wzdx_v4.0_feed.json | 8 ++++---- spec-content/README.md | 4 ++-- spec-content/objects/{Detour.md => DetourRoadEvent.md} | 6 +++--- spec-content/objects/RoadEventCoreDetails.md | 2 +- spec-content/objects/RoadEventFeature.md | 2 +- .../objects/{WorkZone.md => WorkZoneRoadEvent.md} | 6 +++--- 7 files changed, 16 insertions(+), 16 deletions(-) rename spec-content/objects/{Detour.md => DetourRoadEvent.md} (89%) rename spec-content/objects/{WorkZone.md => WorkZoneRoadEvent.md} (90%) diff --git a/README.md b/README.md index fb5b8e61..ccc3eed6 100644 --- a/README.md +++ b/README.md @@ -46,8 +46,8 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) - [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) - - [WorkZone](/spec-content/objects/WorkZone.md) - - [Detour](/spec-content/objects/Detour.md) + - [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) + - [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) - [TypeOfWork](/spec-content/objects/TypeOfWork.md) - [Lane](/spec-content/objects/Lane.md) - [LaneRestriction](/spec-content/objects/LaneRestriction.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index a00aaefd..58367f9b 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -158,10 +158,10 @@ "properties": { "oneOf": [ { - "$ref": "#/definitions/WorkZone" + "$ref": "#/definitions/WorkZoneRoadEvent" }, { - "$ref": "#/definitions/Detour" + "$ref": "#/definitions/DetourRoadEvent" } ] }, @@ -241,7 +241,7 @@ "road_names" ] }, - "WorkZone": { + "WorkZoneRoadEvent": { "title": "Work Zone Road Event", "description": "Descibes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway", "type": "object", @@ -341,7 +341,7 @@ "location_method" ] }, - "Detour": { + "DetourRoadEvent": { "title": "Detour Road Event", "description": "Descibes a detour on a roadway", "type": "object", diff --git a/spec-content/README.md b/spec-content/README.md index c746bdf5..1731897e 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -34,8 +34,8 @@ Object | Description [WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. #### Road Events -[Detour](/spec-content/objects/Detour.md) | A detour on a roadway. -[WorkZone](/spec-content/objects/WorkZone.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. +[DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | A detour on a roadway. +[WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. ### Object Diagram The object diagram below indicates the relationship between the data objects. diff --git a/spec-content/objects/Detour.md b/spec-content/objects/DetourRoadEvent.md similarity index 89% rename from spec-content/objects/Detour.md rename to spec-content/objects/DetourRoadEvent.md index 269e3eab..5ffba34c 100644 --- a/spec-content/objects/Detour.md +++ b/spec-content/objects/DetourRoadEvent.md @@ -1,7 +1,7 @@ -# Detour Object -The `Detour` object describes a detour on a roadway. +# DetourRoadEvent Object +The `DetourRoadEvent` object describes a detour on a roadway. -The `Detour` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). +The `DetourRoadEvent` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index e614505e..248accf7 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -1,5 +1,5 @@ # RoadEventCoreDetails Object -The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events, such as work zones (see [WorkZone]()) and detours (see [Detour]()). The `RoadEventCoreDetails` cannot exist directly in a data feed and on it's own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each which is represented by its own object. +The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events, such as work zones (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) and detours (see [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). The `RoadEventCoreDetails` cannot exist directly in a data feed and on it's own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each which is represented by its own object. ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index b7e05db7..b8478ce7 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `id` | String | A unique identifier issued by the data feed provider to identify the WZDx road event. | Conditional; Required if road event's ID is not provided via the `road_event_id` property on the road event (detailed in the `properties` property). | In prior versions of WZDx, the road event ID was given by a `road_event_id` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object. Now, `road_event_id` is deprecated and this `id` should be used instead. This property will be required in a future version of WZDx. This is a GeoJSON property. `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. -`properties` | One of: [WorkZone](/spec-content/objects/WorkZone.md), [Detour](/spec-content/objects/Detour.md) | The specific details of the road event. | Required | This is a GeoJSON property. +`properties` | One of: [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | The specific details of the road event. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3) | The geometry of the road event. The Geometry object's `type` property MUST be [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3). `LineString` allows specifying the entire road event path and should be preferred. `MultiPoint` should be used when only the start and end coordinates are known. | Required | This is a GeoJSON property. `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this RoadEventFeature. Must be an array of length 2*n where n is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. diff --git a/spec-content/objects/WorkZone.md b/spec-content/objects/WorkZoneRoadEvent.md similarity index 90% rename from spec-content/objects/WorkZone.md rename to spec-content/objects/WorkZoneRoadEvent.md index a0ba4068..e8268f23 100644 --- a/spec-content/objects/WorkZone.md +++ b/spec-content/objects/WorkZoneRoadEvent.md @@ -1,7 +1,7 @@ -# WorkZone Object -The `WorkZone` object describes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway. +# WorkZoneRoadEvent Object +The `WorkZoneRoadEvent` object describes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway. -The `WorkZone` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). +The `WorkZoneRoadEvent` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). ## Properties Name | Type | Description | Conformance | Notes From c58bcd01cc82f0c2728be883e89861d82451405e Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 16:05:16 -0400 Subject: [PATCH 137/388] Add clarifying text to road event descriptions --- spec-content/objects/DetourRoadEvent.md | 2 +- spec-content/objects/RoadEventCoreDetails.md | 2 +- spec-content/objects/WorkZoneRoadEvent.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/spec-content/objects/DetourRoadEvent.md b/spec-content/objects/DetourRoadEvent.md index 5ffba34c..a71aeaa1 100644 --- a/spec-content/objects/DetourRoadEvent.md +++ b/spec-content/objects/DetourRoadEvent.md @@ -1,5 +1,5 @@ # DetourRoadEvent Object -The `DetourRoadEvent` object describes a detour on a roadway. +The `DetourRoadEvent` object describes a detour on a roadway. The `DetourRoadEvent` can be either a segment of a detour (each segment represented by its own `DetourRoadEvent`) or the entire detour. The `DetourRoadEvent` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index 248accf7..f6abefbb 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -1,5 +1,5 @@ # RoadEventCoreDetails Object -The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events, such as work zones (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) and detours (see [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). The `RoadEventCoreDetails` cannot exist directly in a data feed and on it's own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each which is represented by its own object. +The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a "road event") that is shared by all types of road events, such as work zones (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) and detours (see [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). The `RoadEventCoreDetails` cannot exist directly in a data feed and on it's own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each which is represented by its own object. ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/WorkZoneRoadEvent.md b/spec-content/objects/WorkZoneRoadEvent.md index e8268f23..a9c74ffa 100644 --- a/spec-content/objects/WorkZoneRoadEvent.md +++ b/spec-content/objects/WorkZoneRoadEvent.md @@ -1,5 +1,5 @@ # WorkZoneRoadEvent Object -The `WorkZoneRoadEvent` object describes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway. +The `WorkZoneRoadEvent` object describes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway. A full "work zone" is represented by one or more `WorkZoneRoadEvent`s. The `WorkZoneRoadEvent` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). From 16fac5b9dacbb03562210e5dc974b5efd75287cb Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 16:19:43 -0400 Subject: [PATCH 138/388] Fix typo --- .../enumerated-types/HybridSignVariableMessageFunction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/HybridSignVariableMessageFunction.md b/spec-content/enumerated-types/HybridSignVariableMessageFunction.md index de51fe29..8f3a0b64 100644 --- a/spec-content/enumerated-types/HybridSignVariableMessageFunction.md +++ b/spec-content/enumerated-types/HybridSignVariableMessageFunction.md @@ -1,4 +1,4 @@ -# HybridSignVaribaleMessageFunction Enumerated Type +# HybridSignVariableMessageFunction Enumerated Type The HybridSignVariableMessageFunction enumerated type describes options for the function of the variable message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). ## Values From 2d42a7610668c01ae5ac4415f1eed30c0817033a Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 16:20:18 -0400 Subject: [PATCH 139/388] Fix link --- spec-content/objects/HybridSign.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/HybridSign.md b/spec-content/objects/HybridSign.md index 7078bdd6..b731f465 100644 --- a/spec-content/objects/HybridSign.md +++ b/spec-content/objects/HybridSign.md @@ -7,7 +7,7 @@ The HybridSign is a type of field device; it has a `core_details` property which Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to hybrid signs. | Required | This property appears on all field devices. -`variable_message_function` | [HybridSignVariableMessageFunction] | The function the variable message displayed (e.g. a speed limit). | Required | +`variable_message_function` | [HybridSignVariableMessageFunction](/spec-content/enumerated-types/HybridSignVariableMessageFunction.md) | The function the variable message displayed (e.g. a speed limit). | Required | `variable_message_text` | String | A text representation of the message currently posted to the electronic component of the hybrid sign. | Optional | `static_sign_text` | String | The static text on the non-electronic component of the hybrid sign. | Optional | From a56176514c0b69c548f4167f1b8a2e002bf22efd Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 16:22:19 -0400 Subject: [PATCH 140/388] Require DynamicMessageSign message_multi_string --- create-feed/schemas/wzdx_v4.0_feed.json | 3 ++- spec-content/objects/DynamicMessageSign.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 9976e1fa..07411acf 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -388,7 +388,8 @@ } }, "required": [ - "core_details" + "core_details", + "message_multi_string" ] }, "FlashingBeacon": { diff --git a/spec-content/objects/DynamicMessageSign.md b/spec-content/objects/DynamicMessageSign.md index 58f06294..fd1579c5 100644 --- a/spec-content/objects/DynamicMessageSign.md +++ b/spec-content/objects/DynamicMessageSign.md @@ -7,7 +7,7 @@ The DynamicMessageSign is a type of field device; it has a `core_details` proper Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device that are shared by all types of field devices, not specific to dynamic message signs. | Required | This property appears on all field devices. -`message_multi_string` | String | The MULTI (Mark-Up Language for Transportation Information, see [NTCIP 1203 v03](https://www.ntcip.org/file/2018/11/NTCIP1203v03f.pdf)) formatted string describing the message currently posted to the sign. | Optional | +`message_multi_string` | String | The MULTI (Mark-Up Language for Transportation Information, see [NTCIP 1203 v03](https://www.ntcip.org/file/2018/11/NTCIP1203v03f.pdf)) formatted string describing the message currently posted to the sign. | Required | ## Used By Property | Object From 5dd55d7b7d46c8a51e6c3a9d97897aa63ab4fa78 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 16:25:10 -0400 Subject: [PATCH 141/388] Populate FieldDeviceCoreDetails Used By table --- spec-content/objects/FieldDeviceCoreDetails.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/spec-content/objects/FieldDeviceCoreDetails.md b/spec-content/objects/FieldDeviceCoreDetails.md index 25aa6c31..15ae219d 100644 --- a/spec-content/objects/FieldDeviceCoreDetails.md +++ b/spec-content/objects/FieldDeviceCoreDetails.md @@ -22,4 +22,10 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`core_details` | [ArrowBoard](/spec-content/objects/ArrowBoard.md) \ No newline at end of file +`core_details` | [ArrowBoard](/spec-content/objects/ArrowBoard.md) +`core_details` | [Camera](/spec-content/objects/Camera.md) +`core_details` | [DynamicMessageSign](/spec-content/objects/DynamicMessageSign.md) +`core_details` | [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) +`core_details` | [HybridSign](/spec-content/objects/HybridSign.md) +`core_details` | [LocationMarker](/spec-content/objects/LocationMarker.md) +`core_details` | [TrafficSensor](/spec-content/objects/TrafficSensor.md) \ No newline at end of file From ca82c5fdefe40e78df358eeaed32c238d1cde7ba Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 16:25:59 -0400 Subject: [PATCH 142/388] Fix FieldDeviceFeature Used by table --- spec-content/objects/FieldDeviceFeature.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index de08638f..6779f069 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -12,4 +12,5 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object +--- | --- `features` | [WZDx Feed](/spec-content/objects/WZDxFeed.md) \ No newline at end of file From 8870fd1e8e1fdbd77d8927df6977cc17cb629073 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 22 Sep 2021 20:06:42 -0400 Subject: [PATCH 143/388] Make variable_message_text required --- create-feed/schemas/wzdx_v4.0_feed.json | 3 ++- spec-content/objects/HybridSign.md | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 07411acf..4bfd4b22 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -432,7 +432,8 @@ }, "required": [ "core_details", - "variable_message_function" + "variable_message_function", + "variable_message_text" ] }, "LocationMarker": { diff --git a/spec-content/objects/HybridSign.md b/spec-content/objects/HybridSign.md index b731f465..f4910c07 100644 --- a/spec-content/objects/HybridSign.md +++ b/spec-content/objects/HybridSign.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to hybrid signs. | Required | This property appears on all field devices. `variable_message_function` | [HybridSignVariableMessageFunction](/spec-content/enumerated-types/HybridSignVariableMessageFunction.md) | The function the variable message displayed (e.g. a speed limit). | Required | -`variable_message_text` | String | A text representation of the message currently posted to the electronic component of the hybrid sign. | Optional | +`variable_message_text` | String | A text representation of the message currently posted to the electronic component of the hybrid sign. | Required | `static_sign_text` | String | The static text on the non-electronic component of the hybrid sign. | Optional | ## Used By From a0656e4729d661e60caa20ccb18e0391e82eb31c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 23 Sep 2021 12:40:36 -0400 Subject: [PATCH 144/388] Populate RoadEventCoreDetails Used By table --- spec-content/objects/RoadEventCoreDetails.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index f6abefbb..c3c47ac1 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -16,6 +16,8 @@ Name | Type | Description | Conformance | Notes #### Used By Property | Object --- | --- +`core_details` | [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) +`core_details` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) #### Important Notes The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. From bb6ce87b8ac40160c1d3714ae0a4f63ec7ed9e6c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 23 Sep 2021 12:41:31 -0400 Subject: [PATCH 145/388] Fix formatting --- spec-content/objects/RoadEventCoreDetails.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index c3c47ac1..0115d38d 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -13,13 +13,13 @@ Name | Type | Description | Conformance | Notes `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -#### Used By +## Used By Property | Object --- | --- `core_details` | [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) `core_details` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) -#### Important Notes +## Important Notes The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. From 7ead21490cf3ec743e67ba5e12bdd246ff5f98a0 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 23 Sep 2021 12:43:01 -0400 Subject: [PATCH 146/388] Fix property name road_event -> core_details --- spec-content/objects/DetourRoadEvent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/DetourRoadEvent.md b/spec-content/objects/DetourRoadEvent.md index a71aeaa1..29687671 100644 --- a/spec-content/objects/DetourRoadEvent.md +++ b/spec-content/objects/DetourRoadEvent.md @@ -6,7 +6,7 @@ The `DetourRoadEvent` is a type of road event; it has a `core_details` property ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`road_event` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of the road event that are shared by all types of road events, not specific to detours. | Required | +`core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of the road event that are shared by all types of road events, not specific to detours. | Required | `start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | From f56366fc71e31b6857301386974dcd604eacedea Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 23 Sep 2021 17:45:50 -0400 Subject: [PATCH 147/388] Rename has_gps_location to has_automatic_location --- create-feed/schemas/wzdx_v4.0_feed.json | 6 +++--- spec-content/objects/FieldDeviceCoreDetails.md | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 4bfd4b22..7f30d7e7 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -268,8 +268,8 @@ "type": "string", "format": "date-time" }, - "has_gps_location": { - "description": "A yes/no value indicating if the field device location (parent FieldDeviceFeature's geometry) is from an onboard GPS (true) or manually set (false).", + "has_automatic_location": { + "description": "A yes/no value indicating if the field device location (parent FieldDeviceFeature's geometry) is determined automatically from an onboard GPS (true) or manually set/overidden (false)", "type": "boolean" }, "name": { @@ -320,7 +320,7 @@ "road_names", "device_status", "update_date", - "has_gps_location" + "has_automatic_location" ] }, "ArrowBoard": { diff --git a/spec-content/objects/FieldDeviceCoreDetails.md b/spec-content/objects/FieldDeviceCoreDetails.md index 15ae219d..0b593ad0 100644 --- a/spec-content/objects/FieldDeviceCoreDetails.md +++ b/spec-content/objects/FieldDeviceCoreDetails.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes `road_names` | Array; [String] | A list of publicly known names of the road on which the device is located. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | `device_status` | [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of the field device. The value of this property indicates if the device is | Required | `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the field device information was updated. | Required | -`has_gps_location` | Boolean | A yes/no value indicating if the field device location (parent FieldDeviceFeature's `geometry`) is from an onboard GPS (`true`) or manually set (`false`). | Required | +`has_automatic_location` | Boolean | A yes/no value indicating if the field device location (parent FieldDeviceFeature's `geometry`) is determined automatically from an onboard GPS (`true`) or manually set/overidden (`false`). | Required | `name` | String | A human-readable name for the field device. | Optional | `description` | String | A description of the field device. | Optional | `status_messages` | Array; [String] | A list of messages associated with the device's status, if applicable. Used to provide additional information about the status such as specific warning or error messages. | Optional | The content of this property is up to the producer. From 39a0822ce301a19c7a09b3375d1c2519a711aebc Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 23 Sep 2021 18:01:10 -0400 Subject: [PATCH 148/388] Rename variable_message to dynamic_message --- README.md | 2 +- create-feed/schemas/wzdx_v4.0_feed.json | 18 +++++++++--------- spec-content/README.md | 2 +- ....md => HybridSignDynamicMessageFunction.md} | 6 +++--- spec-content/objects/HybridSign.md | 4 ++-- 5 files changed, 16 insertions(+), 16 deletions(-) rename spec-content/enumerated-types/{HybridSignVariableMessageFunction.md => HybridSignDynamicMessageFunction.md} (61%) diff --git a/README.md b/README.md index fd81edca..1bfd68c0 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) - [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) - [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) - - [HybridSignVariableMessageFunction](/spec-content/enumerated-types/HybridSignVariableMessageFunction.md) + - [HybridSignDynamicMessageFunction](/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md) - [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.md) - [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) - [LaneType](/spec-content/enumerated-types/LaneType.md) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 7f30d7e7..1608cc48 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -418,12 +418,12 @@ "core_details": { "$ref": "#/definitions/FieldDeviceCoreDetails" }, - "variable_message_function": { - "$ref": "#/definitions/HybridSignVariableMessageFunction" + "dynamic_message_function": { + "$ref": "#/definitions/HybridSignDynamicMessageFunction" }, - "variable_message_text": { + "dynamic_message_text": { "type": "string", - "description": "A text representation of the message currently posted to the variable electronic component of the hybrid sign" + "description": "A text representation of the message currently posted to the dynamic electronic component of the hybrid sign" }, "static_sign_text": { "type": "string", @@ -432,8 +432,8 @@ }, "required": [ "core_details", - "variable_message_function", - "variable_message_text" + "dynamic_message_function", + "dynamic_message_text" ] }, "LocationMarker": { @@ -852,9 +852,9 @@ "description": "Options for what a FlashingBeacon is being used to indicate", "enum": ["vehicle-entering", "queue-warning", "reduced-speed", "workers-present"] }, - "HybridSignVariableMessageFunction": { - "title": "Hybrid Sign Variable Message Function Enumerated Type", - "description": "Options for the function of the variable message displayed by the electronic display on a HybridSign", + "HybridSignDynamicMessageFunction": { + "title": "Hybrid Sign Dynamic Message Function Enumerated Type", + "description": "Options for the function of the dynamic message displayed by the electronic display on a HybridSign", "enum": ["speed-limit", "travel-time", "other"] }, "MarkedLocationType": { diff --git a/spec-content/README.md b/spec-content/README.md index 887086a0..86248230 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -90,7 +90,7 @@ Enumerated Type | Description --- | --- [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | A list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) | Describes options for what a [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) is being used to indicate. -[HybridSignVariableMessageFunction] | Describes options for the function of the variable message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). +[HybridSignDynamicMessageFunction] | Describes options for the function of the dynamic message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of a field device. [FieldDeviceType](/spec-content/enumerated-types/EventStatus.md) | The type of a field device. [MarkedLocationType](/spec-content/enumerated-types/MarkedLocationType.md) | Describes options for what a [MarkedLocation](/spec-content/objects/MarkedLocation.md) can mark, such as the start or end of a road event. \ No newline at end of file diff --git a/spec-content/enumerated-types/HybridSignVariableMessageFunction.md b/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md similarity index 61% rename from spec-content/enumerated-types/HybridSignVariableMessageFunction.md rename to spec-content/enumerated-types/HybridSignDynamicMessageFunction.md index 8f3a0b64..d901ba66 100644 --- a/spec-content/enumerated-types/HybridSignVariableMessageFunction.md +++ b/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md @@ -1,5 +1,5 @@ -# HybridSignVariableMessageFunction Enumerated Type -The HybridSignVariableMessageFunction enumerated type describes options for the function of the variable message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). +# HybridSignDynamicMessageFunction Enumerated Type +The `HybridSignDynamicMessageFunction` enumerated type describes options for the function of the dynamic message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). ## Values Value | Description @@ -11,4 +11,4 @@ Value | Description ## Used By Property | Object --- | --- -`variable_message_function` | [HybridSign](/spec-content/objects/HybridSign.md) \ No newline at end of file +`dynamic_message_function` | [HybridSign](/spec-content/objects/HybridSign.md) \ No newline at end of file diff --git a/spec-content/objects/HybridSign.md b/spec-content/objects/HybridSign.md index f4910c07..d8b0a2be 100644 --- a/spec-content/objects/HybridSign.md +++ b/spec-content/objects/HybridSign.md @@ -7,8 +7,8 @@ The HybridSign is a type of field device; it has a `core_details` property which Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to hybrid signs. | Required | This property appears on all field devices. -`variable_message_function` | [HybridSignVariableMessageFunction](/spec-content/enumerated-types/HybridSignVariableMessageFunction.md) | The function the variable message displayed (e.g. a speed limit). | Required | -`variable_message_text` | String | A text representation of the message currently posted to the electronic component of the hybrid sign. | Required | +`dynamic_message_function` | [HybridSignDynamicMessageFunction](/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md) | The function the dynamic message displayed (e.g. a speed limit). | Required | +`dynamic_message_text` | String | A text representation of the message currently posted to the electronic component of the hybrid sign. | Required | `static_sign_text` | String | The static text on the non-electronic component of the hybrid sign. | Optional | ## Used By From 3af7c78a632a82fbe7be3f13641aaf1bda45627a Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 24 Sep 2021 15:15:33 -0400 Subject: [PATCH 149/388] Fix reference to rRestrictionType --- create-feed/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/README.md b/create-feed/README.md index e62217b6..a6bfad7b 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -84,7 +84,7 @@ Scenario 5 ([Linestring](/create-feed/examples/linestring-examples/scenario5_rec The local access only example ([Linestring](/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson)) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. - Single work zone on a bidirectional roadwith with impact to both directions, represented by two road events (IDs: `WZ389-NB`, `WZ389-SB`), one for each direction. -- Uses `local-access-only` [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md). +- Uses `local-access-only` [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). - One road event shows basic details (not lane-level), while the opposite direction road event shows detailed lane information. The detailed lane information also includes a bike lane for reference. ### Comprehensive Example From c3d8144c9feb2ec5e7b565c497ab7dfe0d699e8f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 27 Sep 2021 15:25:07 -0400 Subject: [PATCH 150/388] Fix link --- spec-content/objects/TrafficSensor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md index 6c1fe713..8eae3908 100644 --- a/spec-content/objects/TrafficSensor.md +++ b/spec-content/objects/TrafficSensor.md @@ -12,7 +12,7 @@ Name | Type | Description | Conformance | Notes `average_speed_kph` | Positive Integer | The average speed of vehicles across all lanes over the collection interval in kilometers per hour. | Optional | `total_vehicle_count` | Integer | The total number of vehicles counted by the sensor during the collection interval. | Optional | `occupancy_percent` | Postive Number | The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | -`lane_data` | Array; [[TrafficSensorLaneData]()] | A list of objects each describing traffic data for a specific lane—each pointing to a road event lane and indiciating the metrics of that lane. | Optional | Lane-level data can only be provided if the data producer has knowledge of the road event to assign the traffic sensor lane data to. +`lane_data` | Array; [[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md)] | A list of objects each describing traffic data for a specific lane—each pointing to a road event lane and indiciating the metrics of that lane. | Optional | Lane-level data can only be provided if the data producer has knowledge of the road event to assign the traffic sensor lane data to. ## Used By Property | Object From 7e2056d58696742807ffd68fc0fa81c09c71d87f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 27 Sep 2021 15:26:43 -0400 Subject: [PATCH 151/388] Fix table formatting --- spec-content/enumerated-types/FlashingBeaconFunction.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spec-content/enumerated-types/FlashingBeaconFunction.md b/spec-content/enumerated-types/FlashingBeaconFunction.md index 3d14f67d..15ce35ee 100644 --- a/spec-content/enumerated-types/FlashingBeaconFunction.md +++ b/spec-content/enumerated-types/FlashingBeaconFunction.md @@ -11,4 +11,5 @@ Value | Description ## Used By Property | Object +--- | --- `function` | [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) \ No newline at end of file From c5e54b828c2f34e0207d493b035a166b6c341c4a Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:27:12 -0400 Subject: [PATCH 152/388] Create WorkerPresenceConfidence.md Replaces numerical `reliability_score` --- .../enumerated-types/WorkerPresenceConfidence.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 spec-content/enumerated-types/WorkerPresenceConfidence.md diff --git a/spec-content/enumerated-types/WorkerPresenceConfidence.md b/spec-content/enumerated-types/WorkerPresenceConfidence.md new file mode 100644 index 00000000..116a00bc --- /dev/null +++ b/spec-content/enumerated-types/WorkerPresenceConfidence.md @@ -0,0 +1,15 @@ +# Worker Presence Confidence +A high-level description of the feed publisher's confidence in the reported [WorkerPresence](/spec-content/objects/WorkerPresence.md) value of `are_workers_present` + +## Values +Value | Description +--- | --- +`low` | Feed publisher is not confident in the reported value. +`medium` | Feed publisher is somewhat confident in the reported value. +`high` | Feed publisher is very confident in the reported value. + + +## Used By +Property | Object +--- | --- +`confidence` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) From afe306aa3b2cd607f122055f0ca22cfb465f9728 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:28:26 -0400 Subject: [PATCH 153/388] Remove WP definition for RoadEventDataSource Will be added to each WorkerPresenceObject --- spec-content/objects/RoadEventDataSource.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spec-content/objects/RoadEventDataSource.md b/spec-content/objects/RoadEventDataSource.md index e53da38a..81ad0493 100644 --- a/spec-content/objects/RoadEventDataSource.md +++ b/spec-content/objects/RoadEventDataSource.md @@ -14,7 +14,6 @@ Name | Type | Description | Conformance | Notes `location_verify_method` | String | The method used to verify the accuracy of the location information. | Optional | Example: `Survey accurate GPS equipment accurate to 0.1 cm` `lrs_type` | String | Describes the type of linear referencing system (LRS) used for the milepost measurements. | Optional | Example: `Use of milemarkers posted by the roadways. These are registered to a dynamic segmentation of statewide LRS basemap.` `lrs_url` | String; [uri](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.5) | A URL where additional information on the LRS information and transformation information is stored. | Optional | Example `https://aaa.bbb.com/lrs` -`worker_presence_definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional ## Used By Property | Object From b89138e9e9ea065c2f259f7c5f60fba76da76fd4 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:33:59 -0400 Subject: [PATCH 154/388] Replace reliability score with confidence --- spec-content/objects/WorkerPresence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 5365b5df..a56858dc 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -7,7 +7,7 @@ Name | Type | Description | Conformance | Notes `are_workers_present` | Boolean | Whether workers are present in the work zone event area, following the definition provided in the `worker_presence_definition` property on the `RoadEventDataSource` object. | Required | `source` | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Data source providing information on whether workers are present in the work zone event area. | Optional | `last_confirmed_date` | String; date-time | Date and time at which the presence of workers was last confirmed using the `source`. | Optional | -`reliability_score` | Integer, range 0-10 | Numerical score representing the data producer’s understanding of the likelihood of workers being present in the work zone event area, with 10 indicating absolute certainty. | Optional | +`confidence` | [WorkerPresenceConficence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | Data producer’s confidence in workers being present in the work zone event area at the time of feed publication. | Optional | ## Used By Property | Object From 26964eabe9e30a5cd66667010bdb40e48d402a28 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:37:39 -0400 Subject: [PATCH 155/388] Clarify name of last confirmed date Due to the potential to have several last_confirmed_date fields in the spec, add the worker_presence prefix to this object's --- spec-content/objects/WorkerPresence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index a56858dc..405c5d17 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `are_workers_present` | Boolean | Whether workers are present in the work zone event area, following the definition provided in the `worker_presence_definition` property on the `RoadEventDataSource` object. | Required | `source` | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Data source providing information on whether workers are present in the work zone event area. | Optional | -`last_confirmed_date` | String; date-time | Date and time at which the presence of workers was last confirmed using the `source`. | Optional | +`worker_presence_last_confirmed_date` | String; date-time | Date and time at which the presence of workers was last confirmed using the `source`. | Optional | `confidence` | [WorkerPresenceConficence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | Data producer’s confidence in workers being present in the work zone event area at the time of feed publication. | Optional | ## Used By From 30cfc5cf3b6c972c32e7b0fc745b0781cac7e5cf Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:38:24 -0400 Subject: [PATCH 156/388] Add definition to Worker Presence object --- spec-content/objects/WorkerPresence.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 405c5d17..4e3d4660 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -1,10 +1,11 @@ # Worker Presence Object -The `WorkerPresence` object containss information on the presence of workers in the `RoadEvent`'s area. +The `WorkerPresence` object contains information on the presence of workers in the `RoadEvent`'s area. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `are_workers_present` | Boolean | Whether workers are present in the work zone event area, following the definition provided in the `worker_presence_definition` property on the `RoadEventDataSource` object. | Required | +`definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional `source` | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Data source providing information on whether workers are present in the work zone event area. | Optional | `worker_presence_last_confirmed_date` | String; date-time | Date and time at which the presence of workers was last confirmed using the `source`. | Optional | `confidence` | [WorkerPresenceConficence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | Data producer’s confidence in workers being present in the work zone event area at the time of feed publication. | Optional | From 2f7ede9df6b2afd0ede83f7a71de0e38ca8e0b35 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 30 Sep 2021 11:12:31 -0400 Subject: [PATCH 157/388] Add WorkerPresenceConfidence enum to readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 16a068b8..3ae942f3 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) - [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) - [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) + - [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) - [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) - [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) - [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) From 8cc3c33557b0c2a6ef540235e0b67c0d8c561bc6 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 30 Sep 2021 11:20:47 -0400 Subject: [PATCH 158/388] Fix typo in WorkerPresence object --- spec-content/objects/WorkerPresence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 4e3d4660..4be08398 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes `definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional `source` | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Data source providing information on whether workers are present in the work zone event area. | Optional | `worker_presence_last_confirmed_date` | String; date-time | Date and time at which the presence of workers was last confirmed using the `source`. | Optional | -`confidence` | [WorkerPresenceConficence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | Data producer’s confidence in workers being present in the work zone event area at the time of feed publication. | Optional | +`confidence` | [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | The data producer’s confidence in workers being present in the work zone event area at the time of feed publication. | Optional | ## Used By Property | Object From 8071c9782fc71a402bce9f51fe62d69933dc5314 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 30 Sep 2021 11:25:52 -0400 Subject: [PATCH 159/388] Add worker presence confidence to spec-content readme --- spec-content/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spec-content/README.md b/spec-content/README.md index eee7b2a8..8199aa51 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -61,6 +61,7 @@ Enumerated Type | Description [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | An indication of how a geographical coordinate was defined. [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. +[WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | High-level description of the feed publisher's confidence in worker presence [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Method of knowing the presence of workers in the road event area. [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Situations in which workers may be considered present by a jurisdiction. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. From 226e957b7ed0ec8775d8dcf8af27b46cf6a4f515 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 30 Sep 2021 20:25:24 -0400 Subject: [PATCH 160/388] Update v4.0 schema to match revised WP structures --- create-feed/schemas/wzdx_v4.0_feed.json | 47 ++++++++++++++----------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 0712960c..52a02483 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -131,14 +131,6 @@ "type": "string", "format": "uri" } - "worker_presence_definition": { - "description": "A list of situations in which workers are considered to be present in the jurisdiction of the data provider." - "type": "array", - "items": { - "$ref": "#/definitions/WorkerPresenceDefinition" - }, - "uniqueItems": true - } }, "required": ["data_source_id", "organization_name", "location_method"] }, @@ -459,24 +451,30 @@ "type": "object", "properties": { "are_workers_present": { - "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object." + "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object.", "type": "boolean" }, "source": { - "description": "Data source providing information on whether workers are present in the work zone event area." + "description": "Data source providing information on whether workers are present in the work zone event area.", "type": "#/definitions/WorkerPresenceSource" }, - "last_confirmed_date": { - "description": "Datetime at which the presence of workers was last confirmed using the ‘source’." - "type": "string" + "worker_presence_last_confirmed_date": { + "description": "Datetime at which the presence of workers was last confirmed using the ‘source’.", + "type": "string", "format": "date-time" }, - "reliability_score": { - "description": " Numerical score representing the data producer’s understanding of the likelihood of workers being present in the work zone event area, with 10 indicating absolute certainty and 0 indicating." - "type": "integer" - "minimum": 0 - "maximum": 10 + "confidence": { + "description": "The data producer’s confidence in workers being present in the work zone event area at the time of feed publication.", + "type": "#/definitions/WorkerPresenceConfidence" }, + "definition": { + "description": "A list of situations in which workers are considered to be present in the jurisdiction of the data provider.", + "type": "array", + "items": { + "$ref": "#/definitions/WorkerPresenceDefinition" + }, + "uniqueItems": true + } }, "required": ["are_workers_present"], "dependencies": { @@ -594,7 +592,7 @@ "title": "Lane Restriction Unit Enumerated Type", "description": "Units of measure used for the lane restriction value", "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] - } + }, "WorkerPresenceSource": { "title": "Worker Presence Source Enumerated Type", "description": "Data source providing information on whether workers are present in the work zone event area.", @@ -609,7 +607,7 @@ "check-in-verbal", "scheduled" ] - } + }, "WorkerPresenceDefinition": { "title": "Worker Presence Definition Enumerated Type", "description": "Situations in which workers may be considered present in a work zone.", @@ -622,6 +620,15 @@ "humans-behind-barrier", "humans-in-right-of-way" ] + }, + "WorkerPresenceConfidence": { + "title": "Worker Presence Confidence Enumerated Type", + "description": "A high-level description of the feed publisher's confidence in the reported WorkerPresence value of are_workers_present", + "enum": [ + "low", + "medium", + "high" + ] } } } From ebe09818b13ebb271715abee345dd81fe480823b Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 1 Oct 2021 11:30:25 -0500 Subject: [PATCH 161/388] Update comprehensive linestring example --- .../comprehensive_linestring_example.geojson | 59 +++++++++++-------- 1 file changed, 35 insertions(+), 24 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 96bd634a..895cc346 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -18,12 +18,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" }, { "data_source_id": "2", @@ -35,10 +30,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "humans-in-right-of-way" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" }, { "data_source_id": "3", @@ -608,8 +600,11 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": false - }, + "are_workers_present": false, + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -711,8 +706,11 @@ "worker_presence": { "are_workers_present": true, "source": "check-in-app", - "last_confirmed_date": "2010-01-04T15:00:00Z", - "reliability": 8 + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -826,11 +824,14 @@ "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "check-in-app", - "last_confirmed_date": "2010-01-04T15:00:00Z", - "reliability": 8 - }, + "are_workers_present": true, + "source": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", @@ -990,8 +991,13 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "worker_presence": { - "are_workers_present": true, - "source": "wearables-present" + "are_workers_present": true, + "source": "wearables-present", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -1301,9 +1307,14 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "scheduled", - "reliability": 5 + "are_workers_present": true, + "source": "scheduled", + "confidence": "medium", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [ From 126f2c9cd193327a18fb7303578898b17d41a712 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 1 Oct 2021 12:03:03 -0500 Subject: [PATCH 162/388] Update scenario1 linestring example --- ...cenario1_simple_linestring_example.geojson | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index 7383b5ad..f5c8c5e9 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -18,12 +18,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" }, { "data_source_id": "2", @@ -35,10 +30,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "humans-in-right-of-way" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" } ] }, @@ -440,8 +432,11 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": false - }, + "are_workers_present": false, + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -543,9 +538,12 @@ "worker_presence": { "are_workers_present": true, "source": "check-in-app", - "last_confirmed_date": "2010-01-04T15:00:00Z", - "reliability": 8 - }, + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; second event.", @@ -657,12 +655,15 @@ "event_status": "active", "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", - "worker_presence": { + "worker_presence": { "are_workers_present": true, "source": "check-in-app", - "last_confirmed_date": "2010-01-04T15:00:00Z", - "reliability": 8 - }, + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", From 4478fc0ef99a26b950e34ab06914684f88c23bd4 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 1 Oct 2021 12:15:12 -0500 Subject: [PATCH 163/388] Update scenario2 linestring example --- .../scenario2_laneshift_linestring_example.geojson | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index f624cd5e..123ee8b5 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -18,12 +18,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" } ] }, @@ -52,7 +47,12 @@ "vehicle_impact": "all-lanes-open", "worker_presence": { "are_workers_present": true, - "source": "wearables-present" + "source": "wearables-present", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [], From 824c91a1276ef0a10b64ea9a6b9b6fbae623ade6 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 1 Oct 2021 12:20:47 -0500 Subject: [PATCH 164/388] Update scenario4 linestring example --- .../scenario4_detour_linestring_example.geojson | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 3807da5b..808e38b6 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -18,12 +18,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" } ] }, @@ -59,7 +54,12 @@ "worker_presence": { "are_workers_present": true, "source": "scheduled", - "reliability": 5 + "confidence": "medium", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [ From a2cc8c8789b25a9f2a62ae5da985c4b3b80ae249 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 1 Oct 2021 12:38:46 -0500 Subject: [PATCH 165/388] Update comprehensive multipoint example --- .../comprehensive_multipoint_example.geojson | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index d37a10f0..9a574403 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -18,12 +18,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" }, { "data_source_id": "2", @@ -35,10 +30,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "humans-in-right-of-way" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" }, { "data_source_id": "3", @@ -300,7 +292,10 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": false + "are_workers_present": false, + "definition": [ + "humans-in-right-of-way" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -395,8 +390,11 @@ "worker_presence": { "are_workers_present": true, "source": "check-in-app", - "last_confirmed_date": "2010-01-04T15:00:00Z", - "reliability": 8 + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -488,8 +486,11 @@ "worker_presence": { "are_workers_present": true, "source": "check-in-app", - "last_confirmed_date": "2010-01-04T15:00:00Z", - "reliability": 8 + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -567,7 +568,12 @@ "vehicle_impact": "all-lanes-open", "worker_presence": { "are_workers_present": true, - "source": "wearables-present" + "source": "wearables-present", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -789,9 +795,14 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "scheduled", - "reliability": 5 + "are_workers_present": true, + "source": "scheduled", + "confidence": "medium", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [ From 785d2d38ca11194ee77545b13acdb9538bf6ce71 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 1 Oct 2021 12:48:05 -0500 Subject: [PATCH 166/388] Update scenario1 multipoint example --- ...cenario1_simple_multipoint_example.geojson | 39 ++++++++++--------- 1 file changed, 20 insertions(+), 19 deletions(-) diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 52e66ef9..e479f6ad 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -18,12 +18,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" }, { "data_source_id": "2", @@ -35,10 +30,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "humans-in-right-of-way" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" } ] }, @@ -172,8 +164,11 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": false - }, + "are_workers_present": false, + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -265,10 +260,13 @@ "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "check-in-app", - "last_confirmed_date": "2010-01-04T15:00:00Z", - "reliability": 8 + "are_workers_present": true, + "source": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -360,9 +358,12 @@ "worker_presence": { "are_workers_present": true, "source": "check-in-app", - "last_confirmed_date": "2010-01-04T15:00:00Z", - "reliability": 8 - }, + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", From f9bb0d92aa1d950cf110a9ad0563a9a113e193f2 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 1 Oct 2021 12:49:17 -0500 Subject: [PATCH 167/388] Update scenario 2 multipoint example --- .../scenario2_laneshift_multipoint_example.geojson | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson index 0e9ebfec..ef00dc3c 100644 --- a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson @@ -18,12 +18,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" } ] }, @@ -52,7 +47,12 @@ "vehicle_impact": "all-lanes-open", "worker_presence": { "are_workers_present": true, - "source": "wearables-present" + "source": "wearables-present", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [], From 5828e81cbf66689dc45b4c27934db2554a6525b2 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 1 Oct 2021 12:51:14 -0500 Subject: [PATCH 168/388] Update scenario 4 multipoint example --- ...scenario4_detour_multipoint_example.geojson | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson index 51fadfc3..55b96081 100644 --- a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson @@ -18,12 +18,7 @@ "location_verify_method": "GPS", "location_method": "channel-device-method", "lrs_type": "milemarkers", - "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs", - "worker_presence_definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "lrs_url": "https://gis.iowadot.gov/rams/rest/services/lrs" } ] }, @@ -57,9 +52,14 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "scheduled", - "reliability": 5 + "are_workers_present": true, + "source": "scheduled", + "confidence": "medium", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [ From 0bfc1f57a9028780fb43a55d9ecd2c1177d5b387 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 1 Oct 2021 20:30:14 -0400 Subject: [PATCH 169/388] Add SwzDeviceFeed --- README.md | 4 +- create-feed/README.md | 6 +- create-feed/schemas/swz_device_feed_v1.0.json | 521 ++++++++++++++++++ create-feed/schemas/wzdx_v4.0_feed.json | 429 +------------- spec-content/README.md | 19 +- spec-content/objects/SwzDeviceFeed.md | 13 + spec-content/objects/WZDxFeed.md | 2 +- 7 files changed, 554 insertions(+), 440 deletions(-) create mode 100644 create-feed/schemas/swz_device_feed_v1.0.json create mode 100644 spec-content/objects/SwzDeviceFeed.md diff --git a/README.md b/README.md index 1bfd68c0..86274e02 100644 --- a/README.md +++ b/README.md @@ -39,9 +39,11 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) - [WZDx v3.1 Feed](/create-feed/schemas/wzdx_v3.1_feed.json) - [WZDx v4.0 Feed](/create-feed/schemas/wzdx_v4.0_feed.json) + - [SwzDeviceFeed](/create-feed/schemas/swz_device_feed_v1.0.json) - [**Specification Content**](/spec-content) - [**Objects**](/spec-content/objects) - - [WZDXFeed](/spec-content/objects/WZDxFeed.md) + - [WZDxFeed](/spec-content/objects/WZDxFeed.md) + - [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md.md) - [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) - [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) diff --git a/create-feed/README.md b/create-feed/README.md index d2572b8d..8316515e 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -91,13 +91,17 @@ The local access only example ([Linestring](/create-feed/examples/linestring-exa - The comprehensive example ([Linestring](/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson)) contains all of the examples listed above in a single GeoJSON file showing how the various road events across multiple organizations and data sources can be represented in a single WZDx feed. ## JSON Schemas -The [schemas](/create-feed/schemas) directory includes a JSON Schema for the following WZDx feed versions: +The WZDx Specification defines two "feeds" each with a JSON schema. The [schemas](/create-feed/schemas) directory includes a JSON Schema for the following WZDx feed versions: * [WZDx v2.0 Feed](/create-feed/schemas/wzdx_v2.0_feed.json) * [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) * [WZDx v3.1 Feed](/create-feed/schemas/wzdx_v3.1_feed.json) * [WZDx v4.0 Feed](/create-feed/schemas/wzdx_v4.0_feed.json) +And the following smart work zone device feed (`SwzDeviceFeed`) versions: + +- [SwzDeviceFeed](/create-feed/schemas/swz_device_feed_v1.0.json) + ## Business Rules The following business rules help assure a standardized and interpretable use of the WZDx specification. The specification describes the required structure and data fields to describe a work zone, whereas business rules are additional requirements for using the WZDx specification in a standard manner. Note that business rules are distinct from best practices in that the latter are suggestions and business rules are requirements. diff --git a/create-feed/schemas/swz_device_feed_v1.0.json b/create-feed/schemas/swz_device_feed_v1.0.json new file mode 100644 index 00000000..89f2af7a --- /dev/null +++ b/create-feed/schemas/swz_device_feed_v1.0.json @@ -0,0 +1,521 @@ +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-device/create-feed/schemas/swz_device_feed_v1.0.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "WZDx SwzDeviceFeed v1.0", + "description": "The GeoJSON output of a WZDx smart work zone device data feed (v1.0)", + "type": "object", + "properties": { + "feed_info": { + "$ref": "#/definitions/RoadEventFeedInfo" + }, + "type": { + "description": "The GeoJSON type", + "enum": ["FeatureCollection"] + }, + "features": { + "description": "An array of GeoJSON Feature objects which represent field devices deployed in a smart work zone", + "type": "array", + "items": { + "$ref": "#/definitions/FieldDeviceFeature" + } + }, + "bbox": { + "$ref": "#/definitions/BoundingBox" + } + }, + "required": ["feed_info", "type", "features"], + "definitions": { + "BoundingBox": { + "title": "GeoJSON Bounding Box", + "description": "Information on the coordinate range for a Geometry, Feature (FieldDeviceFeature), or FeatureCollection (SwzDeviceFeed)", + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + }, + "RoadEventFeedInfo": { + "title": "Road Event Feed Information", + "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", + "type": "object", + "properties": { + "publisher": { + "description": "The organization responsible for publishing the feed", + "type": "string" + }, + "contact_name": { + "description": "The name of the individual or group responsible for the data feed", + "type": "string" + }, + "contact_email": { + "description": "The email address of the individual or group responsible for the data feed", + "type": "string", + "format": "email" + }, + "update_frequency": { + "description": "The frequency in seconds at which the data feed is updated", + "type": "integer", + "minimum": 1 + }, + "update_date": { + "description": "The UTC date and time when the GeoJSON file (representing the instance of the feed) was generated", + "type": "string", + "format": "date-time" + }, + "version": { + "description": "The WZDx specification version used to create the data feed, in 'major.minor' format", + "type": "string", + "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$" + }, + "license": { + "description": "The URL of the license that applies to the data in the WZDx feed. This *must* be the string \"https://creativecommons.org/publicdomain/zero/1.0/\"", + "enum": ["https://creativecommons.org/publicdomain/zero/1.0/"] + }, + "data_sources": { + "description": "A list of specific data sources for the road event data in the feed", + "type": "array", + "items": { + "$ref": "#/definitions/RoadEventDataSource" + }, + "minItems": 1 + } + }, + "required": ["update_date", "version", "publisher", "data_sources"] + }, + "RoadEventDataSource": { + "title": "Road Event Data Source", + "description": "Describes information about a specific data source used to build the work zone data feed", + "type": "object", + "properties": { + "data_source_id": { + "description": "Unique identifier for the organization providing work zone data", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization for the authoritative source of the work zone data", + "type": "string" + }, + "contact_name": { + "description": "The name of the individual or group responsible for the data source", + "type": "string" + }, + "contact_email": { + "description": "The email address of the individual or group responsible for the data source", + "type": "string", + "format": "email" + }, + "update_frequency": { + "description": "The frequency in seconds at which the data source is updated", + "type": "integer", + "minimum": 1 + }, + "update_date": { + "description": "The UTC date and time when the data source was last updated", + "type": "string", + "format": "date-time" + }, + "location_method": { + "$ref": "#/definitions/LocationMethod" + }, + "location_verify_method": { + "description": "The method used to verify the accuracy of the location information", + "type": "string" + }, + "lrs_type": { + "description": "Describes the type of linear referencing system used for the milepost measurements", + "type": "string" + }, + "lrs_url": { + "description": "A URL where additional information on the LRS information and transformation information is stored", + "type": "string", + "format": "uri" + } + }, + "required": ["data_source_id", "organization_name", "location_method"] + }, + "LocationMethod": { + "title": "Location Method Enumerated Type", + "description": "The typical method used to locate the beginning and end of a work zone impact area", + "enum": [ + "channel-device-method", + "sign-method", + "junction-method", + "other", + "unknown" + ] + }, + "FieldDeviceCoreDetails": { + "title": "Field Device Core Details", + "description": "the core details—both configuration and current state—of a field device that are shared by all types of field devices", + "type": "object", + "properties": { + "device_type": { + "type": "string", + "description": "The type of field device" + }, + "road_names": { + "description": "A list of publicly known names of the road on which the field device is located. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "device_status": { + "$ref": "#/definitions/FieldDeviceStatus" + }, + "update_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the field device data was last updated (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "has_automatic_location": { + "description": "A yes/no value indicating if the field device location (parent FieldDeviceFeature's geometry) is determined automatically from an onboard GPS (true) or manually set/overidden (false)", + "type": "boolean" + }, + "name": { + "type": "string", + "description": "A human-readable name for the field device" + }, + "description": { + "type": "string", + "description": "A description of the field device." + }, + "status_messages": { + "type": "array", + "description": "A list of messages associated with the device's status, if applicable. Used to provide additional information about the status such as specific warning or error message.", + "items": { + "type": "string" + } + }, + "road_event_ids": { + "type": "array", + "description": "A list of one or more IDs of a RoadEventFeatures that the device is associated with", + "items": { + "type": "string" + } + }, + "milepost": { + "type": "number", + "description": "The linear distance measured against a milepost marker along a roadway where the device is located" + }, + "make": { + "type": "string", + "description": "The make or manufacturer of the device" + }, + "model": { + "type": "string", + "description": "The model of the device" + }, + "serial_number": { + "type": "string", + "description": "The serial number of the device" + }, + "firmware_version": { + "type": "string", + "description": "The version of firmware the device is using to operate" + } + }, + "required": [ + "device_types", + "road_names", + "device_status", + "update_date", + "has_automatic_location" + ] + }, + "ArrowBoard": { + "title": "Arrow Board Field Device", + "description": "An electronic, connected arrow board which can display an arrow pattern to direct traffic", + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "pattern": { + "$ref": "#/definitions/ArrowBoardPattern" + }, + "is_moving": { + "type": "boolean", + "description": "A yes/no value indicating if the arrow board is actively moving (not statically placed) as part of a mobile work zone operation." + }, + "is_in_transport_position": { + "type": "boolean", + "description": "A yes/no value indicating if the arrow board is in the stowed/transport position (true) or deployed/upright position (false)" + } + }, + "required": [ + "core_details", + "pattern" + ] + }, + "Camera": { + "title": "Camera Field Device", + "description": "A camera device deployed in the field, capable of capturing still images", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "image_url": { + "type": "string", + "format": "uri", + "description": "A URL pointing to an image file for the camera image still" + }, + "image_timestamp": { + "type": "string", + "format": "date-time", + "description": "The UTC date and time when the image was captured" + } + }, + "required": [ + "core_details" + ], + "dependencies": { + "image_url": [ + "image_timestamp" + ] + } + }, + "DynamicMessageSign": { + "title": "Dynamic Message Sign Field Device", + "description": "An electronic traffic sign deployed on the roadway, used to provide information to travelers", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "message_multi_string": { + "type": "string", + "description": "A MULTI-formatted string describing the message currently posted to the sign" + } + }, + "required": [ + "core_details", + "message_multi_string" + ] + }, + "FlashingBeacon": { + "title": "Flashing Beacon Field Device", + "description": "A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something and capture driver attention", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "function": { + "$ref": "#/definitions/FlashingBeaconFunction" + }, + "is_flashing": { + "type": "boolean", + "description": "A yes/no value indicating if the flashing beacon is currently in use and flashing" + } + }, + "required": [ + "core_details" + ] + }, + "HybridSign": { + "title": "Hybrid Sign Field Device", + "description": "A hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "dynamic_message_function": { + "$ref": "#/definitions/HybridSignDynamicMessageFunction" + }, + "dynamic_message_text": { + "type": "string", + "description": "A text representation of the message currently posted to the dynamic electronic component of the hybrid sign" + }, + "static_sign_text": { + "type": "string", + "description": "The static text on the non-electronic component of the hybrid sign" + } + }, + "required": [ + "core_details", + "dynamic_message_function", + "dynamic_message_text" + ] + }, + "LocationMarker": { + "title": "Location Marker Field Device", + "description": "Any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone)", + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "marked_locations": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/MarkedLocation" + } + } + }, + "required": ["core_details", "marked_locations"] + }, + "MarkedLocation": { + "title": "Marked Location", + "description": "Describes a specific location where a LocationMarker is placed, such as the start or end of a work zone road event", + "properties": { + "type": { + "$ref": "#/definitions/MarkedLocationType" + }, + "road_event_id": { + "type": "string", + "description": "The ID of a RoadEventFeature that the MarkedLocation applies to" + } + }, + "required": ["type"] + }, + "TrafficSensor": { + "title": "Traffic Sensor Field Device", + "description": "A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval", + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "collection_interval_start_date": { + "type": "string", + "format": "date-time", + "description": "The UTC date and time where the TrafficSensor data collection started. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" + }, + "collection_interval_end_date": { + "type": "string", + "format": "date-time", + "description": "The UTC date and time where the TrafficSensor data collection ended. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" + }, + "average_speed_kph": { + "type": "integer", + "minimum": 1, + "description": "The average speed of vehicles across all lanes over the collection interval in kilometers per hour" + }, + "total_vehicle_count": { + "type": "integer", + "minimum": 0, + "description": "The total number of vehicles counted by the sensor during the collection interval" + }, + "occupancy_percent": { + "type": "integer", + "minimum": 0, + "description": "The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval" + }, + "lane_data": { + "type": "array", + "items": { + "$ref": "#/definitions/TrafficSensorLaneData" + } + } + }, + "reuqired": [ + "core_details", + "collection_interval_start_date", + "collection_interval_end_date" + ] + }, + "TrafficSensorLaneData": { + "title": "Traffic Sensor Lane Data", + "description": "data for a single lane within a RoadEvent measured by a TrafficSensor deployed on the roadway", + "properties": { + "road_event_id": { + "type": "string", + "description": "The ID of a RoadEventFeature that the measured lane occurs in" + }, + "lane_order": { + "type": "integer", + "minimum": 1, + "description": "The lane's position in sequence within the road event specified by the 'road_event_id' property" + }, + "average_speed_kph": { + "type": "integer", + "minimum": 1, + "description": "The average speed of traffic in the lane over the collection interval in kilometers per hour" + }, + "total_vehicle_count": { + "type": "integer", + "minimum": 0, + "description": "The total number of vehicles counted by the sensor in the lane during the collection interval" + }, + "occupancy_percent": { + "type": "integer", + "minimum": 0, + "description": "The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval" + } + }, + "required": [ + "road_event_id", + "lane_order" + ] + }, + "ArrowBoardPattern": { + "title": "Arrow Board Pattern Enumerated Type", + "description": "a list of options for the posted pattern on an ArrowBoard", + "enum": [ + "bidirectional-arrow-flashing", + "bidirectional-arrow-static", + "blank", + "diamonds-alternating", + "four-corners-flashing", + "left-arrow-flashing", + "left-arrow-sequential", + "left-arrow-static", + "left-chevron-flashing", + "left-chevron-sequential", + "left-chevron-static", + "line-flashing", + "right-arrow-flashing", + "right-arrow-sequential", + "right-arrow-static", + "right-chevrons-flashing", + "right-chevrons-sequential", + "right-chevrons-static", + "unknown" + ] + }, + "FieldDeviceType": { + "title": "Field Device Type Enumerated Type", + "description": "The type of field device", + "enum": [ + "arrow-board", + "camera", + "dynamic-message-sign", + "flashing-beacon", + "hybrid-sign", + "location-marker", + "traffic-sensor" + ] + }, + "FieldDeviceStatus": { + "title": "Field Device Status Enumerated Type", + "description": "The operational status of a field device", + "enum": ["ok", "warning", "error", "unknown"] + }, + "FlashingBeaconFunction": { + "title": "Flashing Beacon Function Enumerated Type", + "description": "Options for what a FlashingBeacon is being used to indicate", + "enum": ["vehicle-entering", "queue-warning", "reduced-speed", "workers-present"] + }, + "HybridSignDynamicMessageFunction": { + "title": "Hybrid Sign Dynamic Message Function Enumerated Type", + "description": "Options for the function of the dynamic message displayed by the electronic display on a HybridSign", + "enum": ["speed-limit", "travel-time", "other"] + }, + "MarkedLocationType": { + "title": "Marked Location Type Enumerated Type", + "description": "Options for what a MarkedLocation can mark, such as the start or end of a road event", + "enum": [ + "afad", + "flagger", + "lane-shift", + "lane-closure", + "temporary-traffic-signal", + "road-event-start", + "road-event-end", + "work-zone-start", + "work-zone-end" + ] + } + } +} diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 1608cc48..c5c9dc08 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -17,14 +17,7 @@ "description": "An array of GeoJSON Feature objects which represent WZDx road events", "type": "array", "items": { - "oneOf": [ - { - "$ref": "#/definitions/RoadEventFeature" - }, - { - "$ref": "#/definitions/FieldDeviceFeature" - } - ] + "$ref": "#/definitions/RoadEventFeature" } }, "bbox": { @@ -196,358 +189,6 @@ ], "required": ["type","properties","geometry"] }, - "FieldDeviceFeature": { - "title": "Field Device Feature (GeoJSON Feature)", - "description": "The container object for a specific field device; an instance of a GeoJSON Feature", - "type": "object", - "properties": { - "id": { - "description": "A unique identifier issued by the data feed provider to identify the field device described by the feature", - "type": "string" - }, - "type": { - "description": "The GeoJSON object type; must be 'Feature'", - "enum": ["Feature"] - }, - "properties": { - "oneOf": [ - { - "$ref": "#/definitions/ArrowBoard" - }, - { - "$ref": "#/definitions/Camera" - }, - { - "$ref": "#/definitions/DynamicMessageSign" - }, - { - "$ref": "#/definitions/FlashingBeacon" - }, - { - "$ref": "#/definitions/HybridSign" - }, - { - "$ref": "#/definitions/LocationMarker" - }, - { - "$ref": "#/definitions/TrafficSensor" - } - ] - }, - "geometry": { - "$ref": "https://geojson.org/schema/Point.json" - }, - "bbox": { - "$ref": "#/definitions/BoundingBox" - } - }, - "required": ["id", "type", "properties", "geometry"] - }, - "FieldDeviceCoreDetails": { - "title": "Field Device Core Details", - "description": "the core details—both configuration and current state—of a field device that are shared by all types of field devices", - "type": "object", - "properties": { - "device_type": { - "type": "string", - "description": "The type of field device" - }, - "road_names": { - "description": "A list of publicly known names of the road on which the field device is located. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "device_status": { - "$ref": "#/definitions/FieldDeviceStatus" - }, - "update_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the field device data was last updated (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "has_automatic_location": { - "description": "A yes/no value indicating if the field device location (parent FieldDeviceFeature's geometry) is determined automatically from an onboard GPS (true) or manually set/overidden (false)", - "type": "boolean" - }, - "name": { - "type": "string", - "description": "A human-readable name for the field device" - }, - "description": { - "type": "string", - "description": "A description of the field device." - }, - "status_messages": { - "type": "array", - "description": "A list of messages associated with the device's status, if applicable. Used to provide additional information about the status such as specific warning or error message.", - "items": { - "type": "string" - } - }, - "road_event_ids": { - "type": "array", - "description": "A list of one or more IDs of a RoadEventFeatures that the device is associated with", - "items": { - "type": "string" - } - }, - "milepost": { - "type": "number", - "description": "The linear distance measured against a milepost marker along a roadway where the device is located" - }, - "make": { - "type": "string", - "description": "The make or manufacturer of the device" - }, - "model": { - "type": "string", - "description": "The model of the device" - }, - "serial_number": { - "type": "string", - "description": "The serial number of the device" - }, - "firmware_version": { - "type": "string", - "description": "The version of firmware the device is using to operate" - } - }, - "required": [ - "device_types", - "road_names", - "device_status", - "update_date", - "has_automatic_location" - ] - }, - "ArrowBoard": { - "title": "Arrow Board Field Device", - "description": "An electronic, connected arrow board which can display an arrow pattern to direct traffic", - "type": "object", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "pattern": { - "$ref": "#/definitions/ArrowBoardPattern" - }, - "is_moving": { - "type": "boolean", - "description": "A yes/no value indicating if the arrow board is actively moving (not statically placed) as part of a mobile work zone operation." - }, - "is_in_transport_position": { - "type": "boolean", - "description": "A yes/no value indicating if the arrow board is in the stowed/transport position (true) or deployed/upright position (false)" - } - }, - "required": [ - "core_details", - "pattern" - ] - }, - "Camera": { - "title": "Camera Field Device", - "description": "A camera device deployed in the field, capable of capturing still images", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "image_url": { - "type": "string", - "format": "uri", - "description": "A URL pointing to an image file for the camera image still" - }, - "image_timestamp": { - "type": "string", - "format": "date-time", - "description": "The UTC date and time when the image was captured" - } - }, - "required": [ - "core_details" - ], - "dependencies": { - "image_url": [ - "image_timestamp" - ] - } - }, - "DynamicMessageSign": { - "title": "Dynamic Message Sign Field Device", - "description": "An electronic traffic sign deployed on the roadway, used to provide information to travelers", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "message_multi_string": { - "type": "string", - "description": "A MULTI-formatted string describing the message currently posted to the sign" - } - }, - "required": [ - "core_details", - "message_multi_string" - ] - }, - "FlashingBeacon": { - "title": "Flashing Beacon Field Device", - "description": "A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something and capture driver attention", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "function": { - "$ref": "#/definitions/FlashingBeaconFunction" - }, - "is_flashing": { - "type": "boolean", - "description": "A yes/no value indicating if the flashing beacon is currently in use and flashing" - } - }, - "required": [ - "core_details" - ] - }, - "HybridSign": { - "title": "Hybrid Sign Field Device", - "description": "A hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "dynamic_message_function": { - "$ref": "#/definitions/HybridSignDynamicMessageFunction" - }, - "dynamic_message_text": { - "type": "string", - "description": "A text representation of the message currently posted to the dynamic electronic component of the hybrid sign" - }, - "static_sign_text": { - "type": "string", - "description": "The static text on the non-electronic component of the hybrid sign" - } - }, - "required": [ - "core_details", - "dynamic_message_function", - "dynamic_message_text" - ] - }, - "LocationMarker": { - "title": "Location Marker Field Device", - "description": "Any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone)", - "type": "object", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "marked_locations": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/MarkedLocation" - } - } - }, - "required": ["core_details", "marked_locations"] - }, - "MarkedLocation": { - "title": "Marked Location", - "description": "Describes a specific location where a LocationMarker is placed, such as the start or end of a work zone road event", - "properties": { - "type": { - "$ref": "#/definitions/MarkedLocationType" - }, - "road_event_id": { - "type": "string", - "description": "The ID of a RoadEventFeature that the MarkedLocation applies to" - } - }, - "required": ["type"] - }, - "TrafficSensor": { - "title": "Traffic Sensor Field Device", - "description": "A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval", - "type": "object", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "collection_interval_start_date": { - "type": "string", - "format": "date-time", - "description": "The UTC date and time where the TrafficSensor data collection started. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" - }, - "collection_interval_end_date": { - "type": "string", - "format": "date-time", - "description": "The UTC date and time where the TrafficSensor data collection ended. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" - }, - "average_speed_kph": { - "type": "integer", - "minimum": 1, - "description": "The average speed of vehicles across all lanes over the collection interval in kilometers per hour" - }, - "total_vehicle_count": { - "type": "integer", - "minimum": 0, - "description": "The total number of vehicles counted by the sensor during the collection interval" - }, - "occupancy_percent": { - "type": "integer", - "minimum": 0, - "description": "The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval" - }, - "lane_data": { - "type": "array", - "items": { - "$ref": "#/definitions/TrafficSensorLaneData" - } - } - }, - "reuqired": [ - "core_details", - "collection_interval_start_date", - "collection_interval_end_date" - ] - }, - "TrafficSensorLaneData": { - "title": "Traffic Sensor Lane Data", - "description": "data for a single lane within a RoadEvent measured by a TrafficSensor deployed on the roadway", - "properties": { - "road_event_id": { - "type": "string", - "description": "The ID of a RoadEventFeature that the measured lane occurs in" - }, - "lane_order": { - "type": "integer", - "minimum": 1, - "description": "The lane's position in sequence within the road event specified by the 'road_event_id' property" - }, - "average_speed_kph": { - "type": "integer", - "minimum": 1, - "description": "The average speed of traffic in the lane over the collection interval in kilometers per hour" - }, - "total_vehicle_count": { - "type": "integer", - "minimum": 0, - "description": "The total number of vehicles counted by the sensor in the lane during the collection interval" - }, - "occupancy_percent": { - "type": "integer", - "minimum": 0, - "description": "The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval" - } - }, - "required": [ - "road_event_id", - "lane_order" - ] - }, "RoadEvent": { "title": "Road Event", "description": "Describes an activity taking place along a road segment", @@ -804,74 +445,6 @@ "restriction_value": ["restriction_units"] } }, - "ArrowBoardPattern": { - "title": "Arrow Board Pattern Enumerated Type", - "description": "a list of options for the posted pattern on an ArrowBoard", - "enum": [ - "bidirectional-arrow-flashing", - "bidirectional-arrow-static", - "blank", - "diamonds-alternating", - "four-corners-flashing", - "left-arrow-flashing", - "left-arrow-sequential", - "left-arrow-static", - "left-chevron-flashing", - "left-chevron-sequential", - "left-chevron-static", - "line-flashing", - "right-arrow-flashing", - "right-arrow-sequential", - "right-arrow-static", - "right-chevrons-flashing", - "right-chevrons-sequential", - "right-chevrons-static", - "unknown" - ] - }, - "FieldDeviceType": { - "title": "Field Device Type Enumerated Type", - "description": "The type of field device", - "enum": [ - "arrow-board", - "camera", - "dynamic-message-sign", - "flashing-beacon", - "hybrid-sign", - "location-marker", - "traffic-sensor" - ] - }, - "FieldDeviceStatus": { - "title": "Field Device Status Enumerated Type", - "description": "The operational status of a field device", - "enum": ["ok", "warning", "error", "unknown"] - }, - "FlashingBeaconFunction": { - "title": "Flashing Beacon Function Enumerated Type", - "description": "Options for what a FlashingBeacon is being used to indicate", - "enum": ["vehicle-entering", "queue-warning", "reduced-speed", "workers-present"] - }, - "HybridSignDynamicMessageFunction": { - "title": "Hybrid Sign Dynamic Message Function Enumerated Type", - "description": "Options for the function of the dynamic message displayed by the electronic display on a HybridSign", - "enum": ["speed-limit", "travel-time", "other"] - }, - "MarkedLocationType": { - "title": "Marked Location Type Enumerated Type", - "description": "Options for what a MarkedLocation can mark, such as the start or end of a road event", - "enum": [ - "afad", - "flagger", - "lane-shift", - "lane-closure", - "temporary-traffic-signal", - "road-event-start", - "road-event-end", - "work-zone-start", - "work-zone-end" - ] - }, "EventType": { "title": "Road Event Type Enumerated Type", "description": "The type of WZDx road event", diff --git a/spec-content/README.md b/spec-content/README.md index 86248230..e77f0405 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -19,18 +19,18 @@ Each object is described by a table of properties, which are each defined by the - **Notes** - Additional comments, guidance, notes for future consideration, or examples. ### List of Objects -This section provides a tabular list of all objects used in the WZDx specification, sectioned by whether the object applies to the feed-level, road event features, or field devices features. +This section provides a tabular list of all objects used in the WZDx specification, sectioned by whether the object applies to the multiple feeds (shared), the `WZDxFeed`, or the `SwzDeviceFeed`. -#### Feed-Level +#### Shared Object | Description --- | --- [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. -[WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. -#### Road Event Features +#### WZDxFeed Object | Description --- | --- +[WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. [Lane](/spec-content/objects/Lane.md) | An individual lane within a road event. [LaneRestriction](/spec-content/objects/LaneRestriction.md) | A lane-level restriction, including type and value. [Relationship](/spec-content/objects/Relationship.md) | Identification of both sequential and hierarchical relationships between road events and other entities. @@ -38,7 +38,7 @@ Object | Description [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. -#### Field Device Features +#### SwzDeviceFeed Object | Description --- | --- [ArrowBoard](/spec-content/objects/ArrowBoard.md) | An electronic, connected arrow board which can display an arrow pattern to direct traffic. @@ -50,6 +50,7 @@ Object | Description [HybridSign](/spec-content/objects/HybridSign.md) | A hybrid sign that contains static text (e.g. on an alumium sign) along with a single electronic message display, used to provide information to travelers. [LocationMarker](/spec-content/objects/LocationMarker.md) | Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). [MarkedLocation](/spec-contentobjects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. +[SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) | The root (highest-level) object of smart work zone device feed GeoJSON document. [TrafficSensor](/spec-content/objects/TrafficSensor.md) | A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. [TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. @@ -65,12 +66,12 @@ When making changes to the specification, the object diagram needs to be updated Many object properties are restricted to a finite set of values, defined by an enumerated type. The enumerations for each enumerated type as well as what object properties it is used by is described in its own file in the [enumerated-types](/spec-content/enumerated-types) directory. ### List of Enumerated Types -This section provides a tabular list of all enumerated types used in the WZDx specification, sectioned by whether they apply to the feed-level, road event features, or field device features. +This section provides a tabular list of all enumerated types used in the WZDx specification, sectioned by whether they apply to multiple feeds (shared), the `WZDxFeed`, or the `SwzDeviceFeed`. -#### Feed-Level +#### Shared [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. -#### Road Event Features +#### WZDxFeed Enumerated Type | Description --- | --- [EventType](/spec-content/enumerated-types/EventType.md) | The type of a WZDx road event. @@ -85,7 +86,7 @@ Enumerated Type | Description [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. -#### Field Devices +#### SwzDeviceFeed Enumerated Type | Description --- | --- [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | A list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). diff --git a/spec-content/objects/SwzDeviceFeed.md b/spec-content/objects/SwzDeviceFeed.md new file mode 100644 index 00000000..ccd49d1e --- /dev/null +++ b/spec-content/objects/SwzDeviceFeed.md @@ -0,0 +1,13 @@ +# SwzDeviceFeed Object (GeoJSON FeatureCollection) +The `SwzDeviceFeed` object is the root (highest level) object of a smart work zone device feed. There is one `SwzDeviceFeed` object per feed GeoJSON document. The `SwzDeviceFeed` is a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the data feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. +`type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. +`features` | Array; \[FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which each represent a field device deployed in a smart work zone. | Required | This is a GeoJSON property. +`bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all `FieldDeviceFeature`s in the feed. The value must be an array of length `2n` where `n` is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a `bbox` follows the axes order of geometries. | Optional | This is a GeoJSON property. + +## Used By +SwzDeviceFeed GeoJSON document (one `SwzDeviceFeed` object per file). diff --git a/spec-content/objects/WZDxFeed.md b/spec-content/objects/WZDxFeed.md index 22adcc8f..c69e2f99 100644 --- a/spec-content/objects/WZDxFeed.md +++ b/spec-content/objects/WZDxFeed.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `road_event_feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. -`features` | Array; \[One of: [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) or [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent a WZDx road event or a WZDx field device. | Required | +`features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. ## Used By From 48563e90a30d39b208ef63b2bc5e9a5f3fd421ff Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 1 Oct 2021 21:51:04 -0400 Subject: [PATCH 170/388] Re-add FieldDeviceFeature to schema --- create-feed/schemas/swz_device_feed_v1.0.json | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/create-feed/schemas/swz_device_feed_v1.0.json b/create-feed/schemas/swz_device_feed_v1.0.json index 89f2af7a..f1f41f9c 100644 --- a/create-feed/schemas/swz_device_feed_v1.0.json +++ b/create-feed/schemas/swz_device_feed_v1.0.json @@ -144,6 +144,57 @@ "unknown" ] }, + "FieldDeviceFeature": { + "title": "Field Device Feature (GeoJSON Feature)", + "description": "The GeoJSON feature container for a WZDx field device", + "type": "object", + "properties": { + "id": { + "description": "A unique identifier issued by the data feed provider to identify the field device", + "type": "string" + }, + "type": { + "description": "The GeoJSON object type; must be 'Feature'", + "enum": ["Feature"] + }, + "properties": { + "oneOf": [ + { + "$ref": "#/definitions/ArrowBoard" + }, + { + "$ref": "#/definitions/Camera" + }, + { + "$ref": "#/definitions/DynamicMessageSign" + }, + { + "$ref": "#/definitions/FlashingBeacon" + }, + { + "$ref": "#/definitions/HybridSign" + }, + { + "$ref": "#/definitions/LocationMarker" + }, + { + "$ref": "#/definitions/TrafficSensor" + } + ] + }, + "geometry": { + "oneOf": [ + { + "$ref": "https://geojson.org/schema/Point.json" + } + ] + }, + "bbox": { + "$ref": "#/definitions/BoundingBox" + } + }, + "required": ["id","type","properties","geometry"] + }, "FieldDeviceCoreDetails": { "title": "Field Device Core Details", "description": "the core details—both configuration and current state—of a field device that are shared by all types of field devices", @@ -153,6 +204,10 @@ "type": "string", "description": "The type of field device" }, + "data_source_id": { + "description": "Identifies the data source from which the field device information is sourced from", + "type": "string" + }, "road_names": { "description": "A list of publicly known names of the road on which the field device is located. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", "type": "array", From 0c9a100c69940024371f6e3a2556bc89e0e79ae7 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 1 Oct 2021 21:58:20 -0400 Subject: [PATCH 171/388] Add data_source_id to FieldDeviceCoreDetails --- spec-content/objects/FieldDeviceCoreDetails.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spec-content/objects/FieldDeviceCoreDetails.md b/spec-content/objects/FieldDeviceCoreDetails.md index 0b593ad0..1d39b639 100644 --- a/spec-content/objects/FieldDeviceCoreDetails.md +++ b/spec-content/objects/FieldDeviceCoreDetails.md @@ -5,6 +5,7 @@ The FieldDeviceCoreDetails object represents the core details—both configurati Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `device_type` | [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) | The type of field device. | Required | +`data_source_id` | String | Identifies the data source from which the field device data originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) GeoJSON document. `road_names` | Array; [String] | A list of publicly known names of the road on which the device is located. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | `device_status` | [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of the field device. The value of this property indicates if the device is | Required | `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the field device information was updated. | Required | From 09b897939219cc11757cb9f9539155ddad563df4 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 1 Oct 2021 22:07:33 -0400 Subject: [PATCH 172/388] Rename RoadEventFeedInfo to FeedInfo --- README.md | 2 +- create-feed/README.md | 2 +- create-feed/schemas/swz_device_feed_v1.0.json | 4 ++-- create-feed/schemas/wzdx_v4.0_feed.json | 4 ++-- spec-content/README.md | 2 +- spec-content/objects/{RoadEventFeedInfo.md => FeedInfo.md} | 4 ++-- spec-content/objects/RoadEventDataSource.md | 4 ++-- spec-content/objects/SwzDeviceFeed.md | 2 +- spec-content/objects/WZDxFeed.md | 2 +- 9 files changed, 13 insertions(+), 13 deletions(-) rename spec-content/objects/{RoadEventFeedInfo.md => FeedInfo.md} (92%) diff --git a/README.md b/README.md index 86274e02..e0e47949 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [**Objects**](/spec-content/objects) - [WZDxFeed](/spec-content/objects/WZDxFeed.md) - [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md.md) - - [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) + - [FeedInfo](/spec-content/objects/FeedInfo.md) - [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) - [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) diff --git a/create-feed/README.md b/create-feed/README.md index 8316515e..f79d6910 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -20,7 +20,7 @@ The tables below detail the specificaton's content and describe the data used to ## Objects ### WZDx Feed Information -- The [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) object describes the data feed. +- The [FeedInfo](/spec-content/objects/FeedInfo.md) object describes the data feed. - The [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object describes the data sources used to build the work zone data feed. ### WZDx Work Zone (Road Event) Information diff --git a/create-feed/schemas/swz_device_feed_v1.0.json b/create-feed/schemas/swz_device_feed_v1.0.json index f1f41f9c..cedf23b7 100644 --- a/create-feed/schemas/swz_device_feed_v1.0.json +++ b/create-feed/schemas/swz_device_feed_v1.0.json @@ -6,7 +6,7 @@ "type": "object", "properties": { "feed_info": { - "$ref": "#/definitions/RoadEventFeedInfo" + "$ref": "#/definitions/FeedInfo" }, "type": { "description": "The GeoJSON type", @@ -34,7 +34,7 @@ "type": "number" } }, - "RoadEventFeedInfo": { + "FeedInfo": { "title": "Road Event Feed Information", "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", "type": "object", diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index c5c9dc08..17e57672 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -7,7 +7,7 @@ "type": "object", "properties": { "road_event_feed_info": { - "$ref": "#/definitions/RoadEventFeedInfo" + "$ref": "#/definitions/FeedInfo" }, "type": { "description": "The GeoJSON type", @@ -35,7 +35,7 @@ "type": "number" } }, - "RoadEventFeedInfo": { + "FeedInfo": { "title": "Road Event Feed Information", "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", "type": "object", diff --git a/spec-content/README.md b/spec-content/README.md index e77f0405..4dd5eba6 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -25,7 +25,7 @@ This section provides a tabular list of all objects used in the WZDx specificati Object | Description --- | --- [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. -[RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. +[FeedInfo](/spec-content/objects/FeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. #### WZDxFeed Object | Description diff --git a/spec-content/objects/RoadEventFeedInfo.md b/spec-content/objects/FeedInfo.md similarity index 92% rename from spec-content/objects/RoadEventFeedInfo.md rename to spec-content/objects/FeedInfo.md index f79a7dc5..e17ddf8e 100644 --- a/spec-content/objects/RoadEventFeedInfo.md +++ b/spec-content/objects/FeedInfo.md @@ -1,5 +1,5 @@ -# RoadEventFeedInfo Object -The `RoadEventFeedInfo` object describes WZDx feed header information such as metadata, contact information, and data sources. There is one `RoadEventFeedInfo` per WZDx GeoJSON document. +# FeedInfo Object +The `FeedInfo` object describes WZDx feed header information such as metadata, contact information, and data sources. There is one `FeedInfo` per WZDx GeoJSON document. ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/RoadEventDataSource.md b/spec-content/objects/RoadEventDataSource.md index 81ad0493..75aa6c1e 100644 --- a/spec-content/objects/RoadEventDataSource.md +++ b/spec-content/objects/RoadEventDataSource.md @@ -1,5 +1,5 @@ # RoadEventDataSource Object -The `RoadEventDataSource` object describes information about a specific data source used to build a work zone data feed. A WZDx feed must contain at least one `RoadEventDataSource`, included as an entry in the `data_sources` array of the `RoadEventFeedInfo` object. +The `RoadEventDataSource` object describes information about a specific data source used to build a work zone data feed. A WZDx feed must contain at least one `RoadEventDataSource`, included as an entry in the `data_sources` array of the `FeedInfo` object. ## Properties Name | Type | Description | Conformance | Notes @@ -18,7 +18,7 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`data_sources` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) +`data_sources` | [FeedInfo](/spec-content/objects/FeedInfo.md) ## Additional Notes The value of a `RoadEventDataSource`'s `data_source_id` property should match the value of the `data_source_id` property of at least one [RoadEvent](/spec-content/objects/RoadEvent.md) that is included within the same WZDx GeoJSON document. diff --git a/spec-content/objects/SwzDeviceFeed.md b/spec-content/objects/SwzDeviceFeed.md index ccd49d1e..c1a14dd5 100644 --- a/spec-content/objects/SwzDeviceFeed.md +++ b/spec-content/objects/SwzDeviceFeed.md @@ -4,7 +4,7 @@ The `SwzDeviceFeed` object is the root (highest level) object of a smart work zo ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the data feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. +`feed_info` | [FeedInfo](/spec-content/objects/FeedInfo.md) | Information about the data feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. `features` | Array; \[FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which each represent a field device deployed in a smart work zone. | Required | This is a GeoJSON property. `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all `FieldDeviceFeature`s in the feed. The value must be an array of length `2n` where `n` is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a `bbox` follows the axes order of geometries. | Optional | This is a GeoJSON property. diff --git a/spec-content/objects/WZDxFeed.md b/spec-content/objects/WZDxFeed.md index c69e2f99..97fe284d 100644 --- a/spec-content/objects/WZDxFeed.md +++ b/spec-content/objects/WZDxFeed.md @@ -4,7 +4,7 @@ The `WZDxFeed` object is the root (highest level) object of a WZDx feed. There i ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`road_event_feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. +`road_event_feed_info` | [FeedInfo](/spec-content/objects/FeedInfo.md) | Information about the WZDx feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. `features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. From 576837d742d4599d401198dc18b513edecbc4122 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 1 Oct 2021 22:12:10 -0400 Subject: [PATCH 173/388] Rename RoadEventDataSource to FeedDataSource --- README.md | 2 +- create-feed/README.md | 2 +- create-feed/schemas/swz_device_feed_v1.0.json | 4 ++-- create-feed/schemas/wzdx_v4.0_feed.json | 4 ++-- spec-content/README.md | 2 +- spec-content/enumerated-types/LocationMethod.md | 2 +- .../objects/{RoadEventDataSource.md => FeedDataSource.md} | 6 +++--- spec-content/objects/FieldDeviceCoreDetails.md | 2 +- spec-content/objects/RoadEvent.md | 8 ++++---- 9 files changed, 16 insertions(+), 16 deletions(-) rename spec-content/objects/{RoadEventDataSource.md => FeedDataSource.md} (81%) diff --git a/README.md b/README.md index e0e47949..a18fa2df 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [WZDxFeed](/spec-content/objects/WZDxFeed.md) - [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md.md) - [FeedInfo](/spec-content/objects/FeedInfo.md) - - [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) + - [FeedDataSource](/spec-content/objects/FeedDataSource.md) - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) - [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) - [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) diff --git a/create-feed/README.md b/create-feed/README.md index f79d6910..83723bdf 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -21,7 +21,7 @@ The tables below detail the specificaton's content and describe the data used to ### WZDx Feed Information - The [FeedInfo](/spec-content/objects/FeedInfo.md) object describes the data feed. -- The [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object describes the data sources used to build the work zone data feed. +- The [FeedDataSource](/spec-content/objects/FeedDataSource.md) object describes the data sources used to build the work zone data feed. ### WZDx Work Zone (Road Event) Information diff --git a/create-feed/schemas/swz_device_feed_v1.0.json b/create-feed/schemas/swz_device_feed_v1.0.json index cedf23b7..dd76d4e7 100644 --- a/create-feed/schemas/swz_device_feed_v1.0.json +++ b/create-feed/schemas/swz_device_feed_v1.0.json @@ -75,14 +75,14 @@ "description": "A list of specific data sources for the road event data in the feed", "type": "array", "items": { - "$ref": "#/definitions/RoadEventDataSource" + "$ref": "#/definitions/FeedDataSource" }, "minItems": 1 } }, "required": ["update_date", "version", "publisher", "data_sources"] }, - "RoadEventDataSource": { + "FeedDataSource": { "title": "Road Event Data Source", "description": "Describes information about a specific data source used to build the work zone data feed", "type": "object", diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 17e57672..2296dab0 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -76,14 +76,14 @@ "description": "A list of specific data sources for the road event data in the feed", "type": "array", "items": { - "$ref": "#/definitions/RoadEventDataSource" + "$ref": "#/definitions/FeedDataSource" }, "minItems": 1 } }, "required": ["update_date", "version", "publisher", "data_sources"] }, - "RoadEventDataSource": { + "FeedDataSource": { "title": "Road Event Data Source", "description": "Describes information about a specific data source used to build the work zone data feed", "type": "object", diff --git a/spec-content/README.md b/spec-content/README.md index 4dd5eba6..386b15fa 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -24,7 +24,7 @@ This section provides a tabular list of all objects used in the WZDx specificati #### Shared Object | Description --- | --- -[RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. +[FeedDataSource](/spec-content/objects/FeedDataSource.md) | Information about a specific data source used to build a work zone data feed. [FeedInfo](/spec-content/objects/FeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. #### WZDxFeed diff --git a/spec-content/enumerated-types/LocationMethod.md b/spec-content/enumerated-types/LocationMethod.md index 8c978075..4cbeb353 100644 --- a/spec-content/enumerated-types/LocationMethod.md +++ b/spec-content/enumerated-types/LocationMethod.md @@ -13,7 +13,7 @@ Value | Description ## Used By Property | Object --- | --- -`location_method` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) +`location_method` | [FeedDataSource](/spec-content/objects/FeedDataSource.md) ## Additional Information The following sections details the usage of each of the location method diff --git a/spec-content/objects/RoadEventDataSource.md b/spec-content/objects/FeedDataSource.md similarity index 81% rename from spec-content/objects/RoadEventDataSource.md rename to spec-content/objects/FeedDataSource.md index 75aa6c1e..c0ea8c30 100644 --- a/spec-content/objects/RoadEventDataSource.md +++ b/spec-content/objects/FeedDataSource.md @@ -1,5 +1,5 @@ -# RoadEventDataSource Object -The `RoadEventDataSource` object describes information about a specific data source used to build a work zone data feed. A WZDx feed must contain at least one `RoadEventDataSource`, included as an entry in the `data_sources` array of the `FeedInfo` object. +# FeedDataSource Object +The `FeedDataSource` object describes information about a specific data source used to build a work zone data feed. A WZDx feed must contain at least one `FeedDataSource`, included as an entry in the `data_sources` array of the `FeedInfo` object. ## Properties Name | Type | Description | Conformance | Notes @@ -21,4 +21,4 @@ Property | Object `data_sources` | [FeedInfo](/spec-content/objects/FeedInfo.md) ## Additional Notes -The value of a `RoadEventDataSource`'s `data_source_id` property should match the value of the `data_source_id` property of at least one [RoadEvent](/spec-content/objects/RoadEvent.md) that is included within the same WZDx GeoJSON document. +The value of a `FeedDataSource`'s `data_source_id` property should match the value of the `data_source_id` property of at least one [RoadEvent](/spec-content/objects/RoadEvent.md) that is included within the same WZDx GeoJSON document. diff --git a/spec-content/objects/FieldDeviceCoreDetails.md b/spec-content/objects/FieldDeviceCoreDetails.md index 1d39b639..da955c7b 100644 --- a/spec-content/objects/FieldDeviceCoreDetails.md +++ b/spec-content/objects/FieldDeviceCoreDetails.md @@ -5,7 +5,7 @@ The FieldDeviceCoreDetails object represents the core details—both configurati Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `device_type` | [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) | The type of field device. | Required | -`data_source_id` | String | Identifies the data source from which the field device data originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) GeoJSON document. +`data_source_id` | String | Identifies the data source from which the field device data originates. | Required | The value must match to the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) included within the same [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) GeoJSON document. `road_names` | Array; [String] | A list of publicly known names of the road on which the device is located. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | `device_status` | [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of the field device. The value of this property indicates if the device is | Required | `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the field device information was updated. | Required | diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index 0efb5775..6180441f 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -5,7 +5,7 @@ The `RoadEvent` object contains information that describes where, when, and what Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | -`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same WZDx GeoJSON document. +`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) included within the same WZDx GeoJSON document. `start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | @@ -19,8 +19,8 @@ Name | Type | Description | Conformance | Notes `lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | `beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | `ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | -`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. -`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. +`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object. +`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object. `event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `workers_present` | Boolean | A flag indicating that there are workers present in the event space. | Optional | @@ -40,4 +40,4 @@ Property | Object `properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) ## Important Notes -The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. +The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) that is included in the same WZDx GeoJSON document. From 0763a236fb9a6010f68de295a4a16c04fa25da4a Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 1 Oct 2021 22:19:08 -0400 Subject: [PATCH 174/388] Add tip to DynamicMessageSign notes --- spec-content/objects/DynamicMessageSign.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/DynamicMessageSign.md b/spec-content/objects/DynamicMessageSign.md index fd1579c5..d2358ce3 100644 --- a/spec-content/objects/DynamicMessageSign.md +++ b/spec-content/objects/DynamicMessageSign.md @@ -7,7 +7,7 @@ The DynamicMessageSign is a type of field device; it has a `core_details` proper Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device that are shared by all types of field devices, not specific to dynamic message signs. | Required | This property appears on all field devices. -`message_multi_string` | String | The MULTI (Mark-Up Language for Transportation Information, see [NTCIP 1203 v03](https://www.ntcip.org/file/2018/11/NTCIP1203v03f.pdf)) formatted string describing the message currently posted to the sign. | Required | +`message_multi_string` | String | The MULTI (Mark-Up Language for Transportation Information, see [NTCIP 1203 v03](https://www.ntcip.org/file/2018/11/NTCIP1203v03f.pdf)) formatted string describing the message currently posted to the sign. | Required | If the message is unknown, such as due to an error, the empty string `""` can be used. ## Used By Property | Object From 13820549b5f5cb3f3a99b581d6441e3ade578d7c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 1 Oct 2021 22:21:06 -0400 Subject: [PATCH 175/388] Change units to kilometers per hour --- create-feed/schemas/wzdx_v4.0_feed.json | 4 ++-- spec-content/objects/RoadEvent.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 8c9c3721..bb173736 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -265,8 +265,8 @@ "description": "A flag indicating that there are workers present in the road event", "type": "boolean" }, - "reduced_speed_limit": { - "description": "If applicable, the reduced speed limit posted within the road event, in miles per hour", + "reduced_speed_limit_kph": { + "description": "If applicable, the reduced speed limit posted within the road event, in kilometers per hour", "type": "integer", "minimum": 0 }, diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md index c315a6bb..130fc5a4 100644 --- a/spec-content/objects/RoadEvent.md +++ b/spec-content/objects/RoadEvent.md @@ -24,7 +24,7 @@ Name | Type | Description | Conformance | Notes `event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `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 road event, in miles per hour. This property only needs to be supplied if the speed limit within the road event is lower than the posted speed limit of the roadway. | Optional | +`reduced_speed_limit_kph` | Integer | The reduced speed limit posted within the road event, in kilometers per hour. This property only needs to be supplied if the speed limit within the road event is lower than the posted speed limit of the roadway. | Optional | `restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From 6205119dcf140c0d9e4a2e9354683e98dd348b52 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 4 Oct 2021 11:26:39 -0400 Subject: [PATCH 176/388] Format all example files --- .../comprehensive_linestring_example.geojson | 34 ++++----- ...cenario1_simple_linestring_example.geojson | 50 ++++++------ ...ario2_laneshift_linestring_example.geojson | 18 ++--- ...er_bidrectional_linestring_example.geojson | 2 +- ...cenario4_detour_linestring_example.geojson | 18 ++--- .../comprehensive_multipoint_example.geojson | 76 +++++++++---------- ...cenario1_simple_multipoint_example.geojson | 44 +++++------ ...ario2_laneshift_multipoint_example.geojson | 16 ++-- ...er_bidrectional_multipoint_example.geojson | 2 +- ...cenario4_detour_multipoint_example.geojson | 18 ++--- 10 files changed, 139 insertions(+), 139 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 895cc346..d2d307f4 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -599,12 +599,12 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": false, - "definition": [ + "worker_presence": { + "are_workers_present": false, + "definition": [ "humans-in-right-of-way" ] - }, + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -711,7 +711,7 @@ "definition": [ "humans-in-right-of-way" ] - }, + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; second event.", @@ -824,14 +824,14 @@ "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", + "are_workers_present": true, + "source": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", "definition": [ "humans-in-right-of-way" ] - }, + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", @@ -991,8 +991,8 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "worker_presence": { - "are_workers_present": true, - "source": "wearables-present", + "are_workers_present": true, + "source": "wearables-present", "definition": [ "workers-in-work-zone-working", "workers-in-work-zone-not-working", @@ -1307,10 +1307,10 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "scheduled", - "confidence": "medium", - "definition": [ + "are_workers_present": true, + "source": "scheduled", + "confidence": "medium", + "definition": [ "workers-in-work-zone-working", "workers-in-work-zone-not-working", "mobile-equipment-in-work-zone-moving" @@ -2517,4 +2517,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index f5c8c5e9..c0a2ae40 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -291,7 +291,7 @@ ], [ -93.791037923999966, - 41.622265540000058f + 41.622265540000058 ], [ -93.791219643999966, @@ -431,12 +431,12 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": false, - "definition": [ - "humans-in-right-of-way" - ] - }, + "worker_presence": { + "are_workers_present": false, + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -536,14 +536,14 @@ "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, + "are_workers_present": true, + "source": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; second event.", @@ -655,15 +655,15 @@ "event_status": "active", "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "source": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, + "worker_presence": { + "are_workers_present": true, + "source": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", @@ -802,4 +802,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index 123ee8b5..d31d60bb 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -46,14 +46,14 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "worker_presence": { - "are_workers_present": true, - "source": "wearables-present", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, + "are_workers_present": true, + "source": "wearables-present", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone with lane shift", @@ -164,4 +164,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson index 3febad6d..983abce2 100644 --- a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson @@ -196,4 +196,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 808e38b6..3cb7bf72 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -52,14 +52,14 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "scheduled", - "confidence": "medium", - "worker_presence_definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "are_workers_present": true, + "source": "scheduled", + "confidence": "medium", + "worker_presence_definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [ @@ -829,4 +829,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index 9a574403..02b99de2 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -291,12 +291,12 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": false, - "definition": [ - "humans-in-right-of-way" - ] - }, + "worker_presence": { + "are_workers_present": false, + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -388,14 +388,14 @@ "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, + "are_workers_present": true, + "source": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; second event.", @@ -484,14 +484,14 @@ "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, + "are_workers_present": true, + "source": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", @@ -567,13 +567,13 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "worker_presence": { - "are_workers_present": true, - "source": "wearables-present", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "are_workers_present": true, + "source": "wearables-present", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -795,14 +795,14 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "scheduled", - "confidence": "medium", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "are_workers_present": true, + "source": "scheduled", + "confidence": "medium", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [ @@ -1309,4 +1309,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index e479f6ad..71583918 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -163,12 +163,12 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": false, - "definition": [ - "humans-in-right-of-way" - ] - }, + "worker_presence": { + "are_workers_present": false, + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; first event.", @@ -260,13 +260,13 @@ "total_num_lanes": 4, "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] + "are_workers_present": true, + "source": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -356,14 +356,14 @@ "total_num_lanes": 3, "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, + "are_workers_present": true, + "source": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, "reduced_speed_limit": 55, "restrictions": [], "description": "Single-direction work zone represented by three sequential road events; third event.", @@ -418,4 +418,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson index ef00dc3c..57679bce 100644 --- a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson @@ -46,13 +46,13 @@ "event_status": "active", "vehicle_impact": "all-lanes-open", "worker_presence": { - "are_workers_present": true, - "source": "wearables-present", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "are_workers_present": true, + "source": "wearables-present", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [], @@ -108,4 +108,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson index b0e5af91..266e0f1b 100644 --- a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson @@ -164,4 +164,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson index 55b96081..c00d329c 100644 --- a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson @@ -52,14 +52,14 @@ "event_status": "active", "vehicle_impact": "some-lanes-closed", "worker_presence": { - "are_workers_present": true, - "source": "scheduled", - "confidence": "medium", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] + "are_workers_present": true, + "source": "scheduled", + "confidence": "medium", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] }, "reduced_speed_limit": 55, "restrictions": [ @@ -261,4 +261,4 @@ } } ] -} +} \ No newline at end of file From ba1f5d87cc7c82fe26e3d2b54bb349898142bf41 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 4 Oct 2021 11:31:37 -0400 Subject: [PATCH 177/388] Fix json schema refs --- create-feed/schemas/wzdx_v4.0_feed.json | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 52a02483..e9e6ced2 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -262,8 +262,7 @@ "$ref": "#/definitions/VehicleImpact" }, "worker_presence": { - "description": "Information about whether workers are present in the event space.", - "type": "#/definitions/WorkerPresence" + "$ref": "#/definitions/WorkerPresence" }, "reduced_speed_limit": { "description": "The reduced speed limit posted within the road event", @@ -455,8 +454,7 @@ "type": "boolean" }, "source": { - "description": "Data source providing information on whether workers are present in the work zone event area.", - "type": "#/definitions/WorkerPresenceSource" + "$ref": "#/definitions/WorkerPresenceSource" }, "worker_presence_last_confirmed_date": { "description": "Datetime at which the presence of workers was last confirmed using the ‘source’.", @@ -464,8 +462,7 @@ "format": "date-time" }, "confidence": { - "description": "The data producer’s confidence in workers being present in the work zone event area at the time of feed publication.", - "type": "#/definitions/WorkerPresenceConfidence" + "$ref": "#/definitions/WorkerPresenceConfidence" }, "definition": { "description": "A list of situations in which workers are considered to be present in the jurisdiction of the data provider.", From 16e812b33e2a2fb1e0d31ed1eefd2290dd92e560 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 4 Oct 2021 11:33:22 -0400 Subject: [PATCH 178/388] Remove periods from schema description --- create-feed/schemas/wzdx_v4.0_feed.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index e9e6ced2..7f7895e9 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -450,14 +450,14 @@ "type": "object", "properties": { "are_workers_present": { - "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object.", + "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object", "type": "boolean" }, "source": { "$ref": "#/definitions/WorkerPresenceSource" }, "worker_presence_last_confirmed_date": { - "description": "Datetime at which the presence of workers was last confirmed using the ‘source’.", + "description": "Datetime at which the presence of workers was last confirmed using the 'source'", "type": "string", "format": "date-time" }, @@ -465,7 +465,7 @@ "$ref": "#/definitions/WorkerPresenceConfidence" }, "definition": { - "description": "A list of situations in which workers are considered to be present in the jurisdiction of the data provider.", + "description": "A list of situations in which workers are considered to be present in the jurisdiction of the data provider", "type": "array", "items": { "$ref": "#/definitions/WorkerPresenceDefinition" @@ -592,7 +592,7 @@ }, "WorkerPresenceSource": { "title": "Worker Presence Source Enumerated Type", - "description": "Data source providing information on whether workers are present in the work zone event area.", + "description": "Data source providing information on whether workers are present in the work zone event area", "enum": [ "camera-monitoring", "arrow-board-present", @@ -607,7 +607,7 @@ }, "WorkerPresenceDefinition": { "title": "Worker Presence Definition Enumerated Type", - "description": "Situations in which workers may be considered present in a work zone.", + "description": "Situations in which workers may be considered present in a work zone", "enum": [ "workers-in-work-zone-working", "workers-in-work-zone-not-working", From 391d1fd6dd743497773502faaf7e76e6ea144c91 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 4 Oct 2021 14:48:59 -0400 Subject: [PATCH 179/388] Fix typo --- 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 8199aa51..2fa1d655 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -31,7 +31,7 @@ Object | Description [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. -[WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about the present of workers in the road event area. +[WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about the presence of workers in the road event area. [WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. ### Object Diagram From 0ee2421a5feba7a2cf7d61468b450d0a3d9a13f2 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 4 Oct 2021 14:56:22 -0400 Subject: [PATCH 180/388] Fix worker presence definition location in readme --- 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 2fa1d655..f82e262c 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -87,5 +87,5 @@ Property | Object | Enumerated Type | Notes `type` | [Lane](/spec-content/objects/Lane.md) | [LaneType](/spec-content/enumerated-types/LaneType.md) | Enumeration adapted from TMDD LaneRoadway; updated in WZDx v3.0 `type_name` | [TypeOfWork](/spec-content/objects/TypeOfWork.md) | [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | Enumeration created in WZDx v2.0 `vehicle_impact` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | Enumeration created in WZDx v2.0 -`worker_presence_definition` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Enumeration created in WZDx v4.0 +`definition` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Enumeration created in WZDx v4.0 From 91ec8c05dc0f12334fb0bcabcbac2618e7aa125b Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 4 Oct 2021 15:25:59 -0400 Subject: [PATCH 181/388] Fix formatting and alter wording --- spec-content/enumerated-types/WorkerPresenceConfidence.md | 3 +-- spec-content/enumerated-types/WorkerPresenceDefinition.md | 6 +++--- spec-content/enumerated-types/WorkerPresenceSource.md | 5 ++--- spec-content/objects/WorkerPresence.md | 4 ++-- 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/spec-content/enumerated-types/WorkerPresenceConfidence.md b/spec-content/enumerated-types/WorkerPresenceConfidence.md index 116a00bc..c309b5cb 100644 --- a/spec-content/enumerated-types/WorkerPresenceConfidence.md +++ b/spec-content/enumerated-types/WorkerPresenceConfidence.md @@ -1,5 +1,5 @@ # Worker Presence Confidence -A high-level description of the feed publisher's confidence in the reported [WorkerPresence](/spec-content/objects/WorkerPresence.md) value of `are_workers_present` +A high-level description of a feed publisher's confidence in the reported value of `are_workers_present` on the [WorkerPresence](/spec-content/objects/WorkerPresence.md) object. ## Values Value | Description @@ -8,7 +8,6 @@ Value | Description `medium` | Feed publisher is somewhat confident in the reported value. `high` | Feed publisher is very confident in the reported value. - ## Used By Property | Object --- | --- diff --git a/spec-content/enumerated-types/WorkerPresenceDefinition.md b/spec-content/enumerated-types/WorkerPresenceDefinition.md index 2412a4af..d2935916 100644 --- a/spec-content/enumerated-types/WorkerPresenceDefinition.md +++ b/spec-content/enumerated-types/WorkerPresenceDefinition.md @@ -1,17 +1,17 @@ # Worker Presence Definition - Situations in which workers may be considered present in a work zone. ## Values Value | Description --- | --- -`workers-in-work-zone-working` | Humans physically in the work zone event area, doing road work. -`workers-in-work-zone-not-working` | Humans physically in the work zone event area but not performing work. +`workers-in-work-zone-working` | Humans are physically in the work zone event area, doing road work. +`workers-in-work-zone-not-working` | Humans are physically in the work zone event area but not performing work. `mobile-equipment-in-work-zone-moving` | Mobile equipment is moving within the work zone event area, implying the presence of a worker. `mobile-equipment-in-work-zone-not-moving` | Mobile equipment is in the work zone event area but is not moving. `fixed-equipment-in-work-zone` | Fixed equipment is in the work zone event area. `humans-behind-barrier` | Humans are present in the work zone event area but separated from traffic by a barrier. `humans-in-right-of-way` | Humans are present on the drivable surface. + ## Used By Property | Object --- | --- diff --git a/spec-content/enumerated-types/WorkerPresenceSource.md b/spec-content/enumerated-types/WorkerPresenceSource.md index 546aa6f1..10658641 100644 --- a/spec-content/enumerated-types/WorkerPresenceSource.md +++ b/spec-content/enumerated-types/WorkerPresenceSource.md @@ -1,14 +1,13 @@ # Worker Presence Source - Data source providing information on whether workers are present in the work zone event area. ## Values Value | Description --- | --- `camera-monitoring` | Cameras in the work zone event area show workers are present. -`arrow-board-present` | GPS-enabled arrow board is located in the work zone event area and broadcasting its location, implying that workers are present. +`arrow-board-present` | A GPS-enabled arrow board is located in the work zone event area and broadcasting its location, implying that workers are present. `cones-present` | GPS-enabled cones are located in the road event event area, implying that workers are present. -`maintenance-vehicle-present` | GPS-enabled maintenance vehicle is located in the road event area, implying that workers are present. +`maintenance-vehicle-present` | A GPS-enabled maintenance vehicle is located in the road event area, implying that workers are present. `wearables-present` | Workers wearing wearable detection equipment are present in the work zone. `mobile-device-present` | Workers with GPS-enabled mobile device tracking are present in the work zone. `check-in-app` | Workers have checked into the work zone via a mobile app. diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 4be08398..d3011fe0 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -4,10 +4,10 @@ The `WorkerPresence` object contains information on the presence of workers in t ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`are_workers_present` | Boolean | Whether workers are present in the work zone event area, following the definition provided in the `worker_presence_definition` property on the `RoadEventDataSource` object. | Required | +`are_workers_present` | Boolean | Whether workers are present in the work zone event area. This value should be set in accordance with the definition provided in the `definition` property if it is provided. | Required | `definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional `source` | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Data source providing information on whether workers are present in the work zone event area. | Optional | -`worker_presence_last_confirmed_date` | String; date-time | Date and time at which the presence of workers was last confirmed using the `source`. | Optional | +`worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | Date and time at which the presence of workers was last confirmed using the `source`. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). `confidence` | [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | The data producer’s confidence in workers being present in the work zone event area at the time of feed publication. | Optional | ## Used By From 4c2f62710ae67aa5404615e53f2925ab188776e1 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 8 Oct 2021 09:57:57 -0400 Subject: [PATCH 182/388] Update WP last confirmed date description to unlink from the `source` property --- spec-content/objects/WorkerPresence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index d3011fe0..61f25291 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -7,7 +7,7 @@ Name | Type | Description | Conformance | Notes `are_workers_present` | Boolean | Whether workers are present in the work zone event area. This value should be set in accordance with the definition provided in the `definition` property if it is provided. | Required | `definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional `source` | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Data source providing information on whether workers are present in the work zone event area. | Optional | -`worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | Date and time at which the presence of workers was last confirmed using the `source`. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). +`worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | Date and time at which the presence of workers was last confirmed. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). `confidence` | [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | The data producer’s confidence in workers being present in the work zone event area at the time of feed publication. | Optional | ## Used By From 29a2692abd4d8bbf29991b29c7c3cb265d71aa5a Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 8 Oct 2021 10:06:56 -0400 Subject: [PATCH 183/388] Clarify `confidence` description --- spec-content/objects/WorkerPresence.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 61f25291..74b6dc65 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes `definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional `source` | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Data source providing information on whether workers are present in the work zone event area. | Optional | `worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | Date and time at which the presence of workers was last confirmed. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). -`confidence` | [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | The data producer’s confidence in workers being present in the work zone event area at the time of feed publication. | Optional | +`confidence` | [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | The data producer’s confidence in the value of `are_workers_present`. | Optional | ## Used By Property | Object From fe783b0cf006823060dfd80e267fb9e68fe59b4d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 13 Oct 2021 00:23:31 -0400 Subject: [PATCH 184/388] Fix typo --- spec-content/enumerated-types/FieldDeviceType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md index b8c3bf48..a4da5328 100644 --- a/spec-content/enumerated-types/FieldDeviceType.md +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -9,7 +9,7 @@ Value | Description `dynamic-message-sign` | An electronic traffic sign deployed on the roadway, used to provide information to travelers. `flashing-beacon` | A flashing beacon light of any form, used to indicate caution and capture driver attention. `hybrid-sign` | A message sign that contains both static text (e.g. on an aluminium board) along with a variable electronic message sign, used to provide information to travelers. -`location-marker` | Any GPS-enabled ITS device that is placed at a point in on a roadway to mark a location (often the beginning or end of a road event). +`location-marker` | Any GPS-enabled ITS device that is placed at a point on a roadway to mark a location (often the beginning or end of a road event). `traffic-sensor` | A device deployed on a roadway which captures traffic metrics such as speed, volume, or occupancy. ## Used By From c1eaa085544a901cd4f4a53b33bcfa1e00a3c472 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 13 Oct 2021 00:25:46 -0400 Subject: [PATCH 185/388] Change wording --- spec-content/enumerated-types/FlashingBeaconFunction.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec-content/enumerated-types/FlashingBeaconFunction.md b/spec-content/enumerated-types/FlashingBeaconFunction.md index 15ce35ee..77452629 100644 --- a/spec-content/enumerated-types/FlashingBeaconFunction.md +++ b/spec-content/enumerated-types/FlashingBeaconFunction.md @@ -4,10 +4,10 @@ The FlashingBeaconFunction enumerated type describes a list of options for what ## Values Value | Description --- | --- -`vehicle-entering` | The beacon's function is to indicate vehicles are entering the roadway. -`queue-warning` | The beacon's function is to indicate there is a queue of vehicles. -`reduced-speed` | The beacon's function is to designate a reduced speed limit. -`workers-present` | The beacon's function is to indicate that workers are present on or near the roadway. +`vehicle-entering` | Vehicles are entering the roadway. +`queue-warning` | There is a queue of vehicles. +`reduced-speed` | There is a reduced speed limit. +`workers-present` | There are workers are present on or near the roadway. ## Used By Property | Object From 510ffb8b700cd9508610c9f4ff949d013a51c310 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 08:42:15 -0500 Subject: [PATCH 186/388] Modify entrance-lane and entrance-ramp descrip Modified the entrance lane and entrance ramp descriptions to better clarify what they represent. --- spec-content/enumerated-types/LaneType.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index f093208d..ab0a8092 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -7,8 +7,8 @@ Value | Description `general` | A generic lane type, intended to be used for general purpose travel lanes. `exit-lane` | A lane leading towards an egress from the current roadway. An `exit-lane` usually becomes an `exit-ramp` after a gore point. `exit-ramp`| A lane at an interchange leading away from the current roadway to another roadway. -`entrance-lane` | A lane leading towards an ingress to another roadway. An `entrance-lane` usually becomes an `entrance-ramp` after a gore point. -`entrance-ramp` | A lane at an interchange leading away from the current roadway to another roadway. +`entrance-lane` | A lane leading away from an ingress from another roadway. An `entrance-ramp` usually becomes an `entrance-lane` after a gore point. +`entrance-ramp` | A lane at an interchange for traffic to ingress from another roadway to the mainline. `sidewalk` | A path for pedestrians, usually on the side of the roadway. `bike-lane` | A lane on the roadway for use by cyclists only. `shoulder` | A portion of the roadway that is outside (either right or left) of the main travel lanes. A shoulder can have many uses but is not intended for general traffic. @@ -24,4 +24,4 @@ Property | Object ## Additional Information The LaneType enumerated type was originally based on the TMDD LaneRoadway Enumeration, which is imported into TMDD from SAE 2540 (ITIS Standard). -In later release, other standards were examined for inspiration. These include SAE J2735 and the ISO 20524-1 Geographic Data Files (GDF) standard. \ No newline at end of file +In later release, other standards were examined for inspiration. These include SAE J2735 and the ISO 20524-1 Geographic Data Files (GDF) standard. From 07ea7b33b376b2675f4997f332d481470d092298 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 08:51:18 -0500 Subject: [PATCH 187/388] Modify entrance-lane descrip Modify the entrance lane description to say ingress to current roadway. --- spec-content/enumerated-types/LaneType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index ab0a8092..b7621a74 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -7,7 +7,7 @@ Value | Description `general` | A generic lane type, intended to be used for general purpose travel lanes. `exit-lane` | A lane leading towards an egress from the current roadway. An `exit-lane` usually becomes an `exit-ramp` after a gore point. `exit-ramp`| A lane at an interchange leading away from the current roadway to another roadway. -`entrance-lane` | A lane leading away from an ingress from another roadway. An `entrance-ramp` usually becomes an `entrance-lane` after a gore point. +`entrance-lane` | A lane leading away from an ingress to the current roadway. An `entrance-ramp` usually becomes an `entrance-lane` after a gore point. `entrance-ramp` | A lane at an interchange for traffic to ingress from another roadway to the mainline. `sidewalk` | A path for pedestrians, usually on the side of the roadway. `bike-lane` | A lane on the roadway for use by cyclists only. From e974eefc5f57204702c0c124468a5e7be7a4045c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 14 Oct 2021 14:47:26 -0400 Subject: [PATCH 188/388] Fix typos and wording --- .../enumerated-types/HybridSignDynamicMessageFunction.md | 6 +++--- spec-content/enumerated-types/MarkedLocationType.md | 2 +- spec-content/objects/FieldDeviceCoreDetails.md | 4 ++-- spec-content/objects/FieldDeviceFeature.md | 6 ++++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md b/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md index d901ba66..f449d429 100644 --- a/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md +++ b/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md @@ -4,9 +4,9 @@ The `HybridSignDynamicMessageFunction` enumerated type describes options for the ## Values Value | Description --- | --- -`speed-limit` | The hybrid sign message is displaying a speed limit. -`travel-time` | The hybrid sign message is displaying a travel time. -`other` | The hybrid sign message message function is not one of the other options described by this enumerated type. +`speed-limit` | The message is a speed limit. +`travel-time` | The message is a travel time. +`other` | The hybrid sign message function is not one of the other options described by this enumerated type. ## Used By Property | Object diff --git a/spec-content/enumerated-types/MarkedLocationType.md b/spec-content/enumerated-types/MarkedLocationType.md index 42bca6b9..c87eccfd 100644 --- a/spec-content/enumerated-types/MarkedLocationType.md +++ b/spec-content/enumerated-types/MarkedLocationType.md @@ -4,7 +4,7 @@ The MarkedLocationType enumerated type describes options for what a [MarkedLocat ## Values Value | Description --- | --- -`afad` | An automatic flagging device. +`afad` | An automatic flagger assistance device. `flagger` | A human who is directing traffic. `lane-shift` | A lane shift. `lane-closure` | One or more lanes are closed. diff --git a/spec-content/objects/FieldDeviceCoreDetails.md b/spec-content/objects/FieldDeviceCoreDetails.md index da955c7b..7355b506 100644 --- a/spec-content/objects/FieldDeviceCoreDetails.md +++ b/spec-content/objects/FieldDeviceCoreDetails.md @@ -7,13 +7,13 @@ Name | Type | Description | Conformance | Notes `device_type` | [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) | The type of field device. | Required | `data_source_id` | String | Identifies the data source from which the field device data originates. | Required | The value must match to the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) included within the same [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) GeoJSON document. `road_names` | Array; [String] | A list of publicly known names of the road on which the device is located. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | -`device_status` | [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of the field device. The value of this property indicates if the device is | Required | +`device_status` | [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of the field device. The value of this property indicates if the device is ok or in an error or warning state. | Required | `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the field device information was updated. | Required | `has_automatic_location` | Boolean | A yes/no value indicating if the field device location (parent FieldDeviceFeature's `geometry`) is determined automatically from an onboard GPS (`true`) or manually set/overidden (`false`). | Required | `name` | String | A human-readable name for the field device. | Optional | `description` | String | A description of the field device. | Optional | `status_messages` | Array; [String] | A list of messages associated with the device's status, if applicable. Used to provide additional information about the status such as specific warning or error messages. | Optional | The content of this property is up to the producer. -`road_event_ids` | Array; [String] | A list of one or more IDs of a RoadEventFeatures that the device is associated with. | Optional | +`road_event_ids` | Array; [String] | A list of one or more IDs of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) that the device is associated with. | Optional | `milepost` | Number | The linear distance measured against a milepost marker along a roadway where the device is located. | Optional | `make` | String | The make or manufacturer of the device. | Optional | `model` | String | The model of the device. | Optional | diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index 6779f069..cf52dca3 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -1,5 +1,7 @@ # FieldDeviceFeature Object -The FieldDeviceFeature object is a GeoJSON feature representing a deployed field device. This object contains the specific details of the field device, alike to how the RoadEventFeature object in a WZDx Feed contains the RoadEvent object via the `properties` property. Currently, only point devices are supported. +The FieldDeviceFeature object is a GeoJSON feature representing a deployed field device. This object contains the specific details of the field device, alike to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the RoadEvent object via the `properties` property. + +Currently, only point devices are supported. ## Properties Name | Type | Description | Conformance | Notes @@ -13,4 +15,4 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`features` | [WZDx Feed](/spec-content/objects/WZDxFeed.md) \ No newline at end of file +`features` | [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) \ No newline at end of file From f504022ceae4603a5d2b1684beb96c1077d24d89 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 14 Oct 2021 14:48:10 -0400 Subject: [PATCH 189/388] Fix link --- spec-content/objects/SwzDeviceFeed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/SwzDeviceFeed.md b/spec-content/objects/SwzDeviceFeed.md index c1a14dd5..33387384 100644 --- a/spec-content/objects/SwzDeviceFeed.md +++ b/spec-content/objects/SwzDeviceFeed.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `feed_info` | [FeedInfo](/spec-content/objects/FeedInfo.md) | Information about the data feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. -`features` | Array; \[FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which each represent a field device deployed in a smart work zone. | Required | This is a GeoJSON property. +`features` | Array; \[[FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which each represent a field device deployed in a smart work zone. | Required | This is a GeoJSON property. `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all `FieldDeviceFeature`s in the feed. The value must be an array of length `2n` where `n` is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a `bbox` follows the axes order of geometries. | Optional | This is a GeoJSON property. ## Used By From bc60d77938aa564f1f522a5d4158023965b6ac75 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 14 Oct 2021 15:20:10 -0400 Subject: [PATCH 190/388] Change vehicle count to volume vph --- create-feed/schemas/swz_device_feed_v1.0.json | 10 +++++----- spec-content/objects/TrafficSensor.md | 2 +- spec-content/objects/TrafficSensorLaneData.md | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/create-feed/schemas/swz_device_feed_v1.0.json b/create-feed/schemas/swz_device_feed_v1.0.json index dd76d4e7..09f86415 100644 --- a/create-feed/schemas/swz_device_feed_v1.0.json +++ b/create-feed/schemas/swz_device_feed_v1.0.json @@ -447,10 +447,10 @@ "minimum": 1, "description": "The average speed of vehicles across all lanes over the collection interval in kilometers per hour" }, - "total_vehicle_count": { + "volume_vph": { "type": "integer", "minimum": 0, - "description": "The total number of vehicles counted by the sensor during the collection interval" + "description": "The rate of vehicles passing by the sensor during the collection interval in vehicles per hour" }, "occupancy_percent": { "type": "integer", @@ -486,12 +486,12 @@ "average_speed_kph": { "type": "integer", "minimum": 1, - "description": "The average speed of traffic in the lane over the collection interval in kilometers per hour" + "description": "The average speed of traffic in the lane over the collection interval (in kilometers per hour)" }, - "total_vehicle_count": { + "volume_vph": { "type": "integer", "minimum": 0, - "description": "The total number of vehicles counted by the sensor in the lane during the collection interval" + "description": "The rate of vehicles passing by the sensor in the lane during the collection interval (in vehicles per hour)" }, "occupancy_percent": { "type": "integer", diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md index 8eae3908..bffaed03 100644 --- a/spec-content/objects/TrafficSensor.md +++ b/spec-content/objects/TrafficSensor.md @@ -10,7 +10,7 @@ Name | Type | Description | Conformance | Notes `collection_interval_start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the TrafficSensor data began being collected at. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | `collection_interval_end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the TrafficSensor collection interval ended. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | `average_speed_kph` | Positive Integer | The average speed of vehicles across all lanes over the collection interval in kilometers per hour. | Optional | -`total_vehicle_count` | Integer | The total number of vehicles counted by the sensor during the collection interval. | Optional | +`volume_vph` | Integer | The rate of vehicles passing by the sensor during the collection interval in vehicles per hour. | Optional | `occupancy_percent` | Postive Number | The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | `lane_data` | Array; [[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md)] | A list of objects each describing traffic data for a specific lane—each pointing to a road event lane and indiciating the metrics of that lane. | Optional | Lane-level data can only be provided if the data producer has knowledge of the road event to assign the traffic sensor lane data to. diff --git a/spec-content/objects/TrafficSensorLaneData.md b/spec-content/objects/TrafficSensorLaneData.md index 68afb8d5..525b5a08 100644 --- a/spec-content/objects/TrafficSensorLaneData.md +++ b/spec-content/objects/TrafficSensorLaneData.md @@ -8,8 +8,8 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `road_event_id` | String | The ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) which the measured lane occurs in. | Required | `lane_order` | Positive Integer | The lane's position in sequence within the road event (specified by `road_event_id`). The value of this property corresponds to the associated [RoadEvent](/spec-content/objects/RoadEvent.md)'s [Lane](/spec-content/objects/Lane.md)'s `order` property. | Required | -`average_speed_kph` | Positive Integer | The average speed of traffic in the lane over the collection interval. | Optional | -`total_vehicle_count` | Integer | The total number of vehicles counted by the sensor in the lane during the collection interval. | Optional | +`average_speed_kph` | Positive Integer | The average speed of traffic in the lane over the collection interval (in kilometers per hour). | Optional | +`volume_vph` | Integer | The rate of vehicles passing by the sensor in the lane during the collection interval (in vehicles per hour). | Optional | `occupancy_percent` | Postive Number | The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | ## Used By From 4aa238e50db3ff6bfe54ade85ae87312edaaa565 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 14:39:04 -0500 Subject: [PATCH 191/388] Formatting table and correcting links Formatted road events section to display as a table. Modified the corresponding objects for each property in the "Object Properties using Enumerated Types". --- spec-content/README.md | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index 1731897e..ac48934d 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -34,6 +34,8 @@ Object | Description [WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. #### Road Events +Object | Description +--- | --- [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | A detour on a roadway. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. @@ -70,18 +72,18 @@ For ease of reference, the table below describes all properties in the WZDx spec Property | Object | Enumerated Type | Notes --- | --- | --- | --- -`beginning_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Enumeration updated in WZDx v3.0 -`direction` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [Direction](/spec-content/enumerated-types/Direction.md) | Enumeration adapted from TMDD link-alignment -`end_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 -`ending_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Enumeration updated in WZDx v3.0 -`event_type` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventType](/spec-content/enumerated-types/EventType.md) | Enumeration create in WZDx v3.0 -`event_status` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | Enumeration created in WZDx v1.0 -`location_method` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | Enumeration created in WZDx v3.0 but referenced since v1.1 +`beginning_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Enumeration updated in WZDx v3.0 +`direction` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | [Direction](/spec-content/enumerated-types/Direction.md) | Enumeration adapted from TMDD link-alignment +`end_date_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 +`ending_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Enumeration updated in WZDx v3.0 +`event_type` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | [EventType](/spec-content/enumerated-types/EventType.md) | Enumeration create in WZDx v3.0 +`event_status` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | Enumeration created in WZDx v1.0 +`location_method` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | Enumeration created in WZDx v3.0 but referenced since v1.1 `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Enumeration created in WZDx v1.0 `restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Individual lane restrictions | Enumeration created in WZDx v1.0 `restriction_units` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.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. -`start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 +`start_date_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 `status` | [Lane](/spec-content/objects/Lane.md) | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Enumeration created in WZDx v2.0 `type` | [Lane](/spec-content/objects/Lane.md) | [LaneType](/spec-content/enumerated-types/LaneType.md) | Enumeration adapted from TMDD LaneRoadway; updated in WZDx v3.0 `type_name` | [TypeOfWork](/spec-content/objects/TypeOfWork.md) | [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | Enumeration created in WZDx v2.0 -`vehicle_impact` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | Enumeration created in WZDx v2.0 +`vehicle_impact` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | Enumeration created in WZDx v2.0 From 85111d280b6fc545f80fdad6dde38ccd9db8e130 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 14:42:55 -0500 Subject: [PATCH 192/388] Fix link for restrictions Fix object link for restrictions in "Object Properties using Enumerated Types" table. --- 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 ac48934d..1a151dea 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -79,7 +79,7 @@ Property | Object | Enumerated Type | Notes `event_type` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | [EventType](/spec-content/enumerated-types/EventType.md) | Enumeration create in WZDx v3.0 `event_status` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | Enumeration created in WZDx v1.0 `location_method` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | Enumeration created in WZDx v3.0 but referenced since v1.1 -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Enumeration created in WZDx v1.0 +`restrictions` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Enumeration created in WZDx v1.0 `restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Individual lane restrictions | Enumeration created in WZDx v1.0 `restriction_units` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.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. `start_date_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 From ea1c0e2a74c9ba914b7df304997cdd5f7ba504a0 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:01:50 -0500 Subject: [PATCH 193/388] Update used by objects time verification Update used by object to new work zone and detour road event for time verification --- spec-content/enumerated-types/TimeVerification.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/enumerated-types/TimeVerification.md b/spec-content/enumerated-types/TimeVerification.md index f5af5f78..13a9e5c3 100644 --- a/spec-content/enumerated-types/TimeVerification.md +++ b/spec-content/enumerated-types/TimeVerification.md @@ -10,5 +10,5 @@ Value | Description ## Used By Property | Object --- | --- -`start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`end_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`start_date_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) +`end_date_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) From 03b3427ee9237e45f4971210d46e4b5ac47d5bd1 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:02:50 -0500 Subject: [PATCH 194/388] update direction used by object Update used by object to new work zone and detour road event for direction --- spec-content/enumerated-types/Direction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/enumerated-types/Direction.md b/spec-content/enumerated-types/Direction.md index 86a8271a..01f0bb25 100644 --- a/spec-content/enumerated-types/Direction.md +++ b/spec-content/enumerated-types/Direction.md @@ -12,7 +12,7 @@ Value | Description ## Used By Property | Object --- | --- -`direction` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`direction` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) ## Additional Information The Direction enumerated type values were based on the TMDD Link-alignment Enumeration, which contains the following values: @@ -24,4 +24,4 @@ southbound (3) westbound (4) inner-loop (5) outer-loop (6) -``` \ No newline at end of file +``` From 1277c4a5cec05522da603138e0efb5a2abbf75cd Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:05:16 -0500 Subject: [PATCH 195/388] update event status used by object Update used by object to new work zone and detour road event for event status --- spec-content/enumerated-types/EventStatus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/EventStatus.md b/spec-content/enumerated-types/EventStatus.md index af1853bc..f00280a4 100644 --- a/spec-content/enumerated-types/EventStatus.md +++ b/spec-content/enumerated-types/EventStatus.md @@ -13,4 +13,4 @@ Value | Description ## Used By Property | Object --- | --- -`event_status` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`event_status` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) From 802dda0a5805ada2527f3908b92edecf75dce926 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:07:29 -0500 Subject: [PATCH 196/388] update event type used by object Update used by object to new work zone and detour road event for event type --- spec-content/enumerated-types/EventType.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/EventType.md b/spec-content/enumerated-types/EventType.md index ff565054..cf253ae1 100644 --- a/spec-content/enumerated-types/EventType.md +++ b/spec-content/enumerated-types/EventType.md @@ -10,4 +10,4 @@ Value | Description ## Used By Property | Object --- | --- -`event_type` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`event_type` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) From af89655a11b35246241794ae675d61bda4d87155 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:09:14 -0500 Subject: [PATCH 197/388] update location method used by object Update used by object to new work zone and detour road event for location method --- spec-content/enumerated-types/LocationMethod.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/LocationMethod.md b/spec-content/enumerated-types/LocationMethod.md index 8c978075..f6547eab 100644 --- a/spec-content/enumerated-types/LocationMethod.md +++ b/spec-content/enumerated-types/LocationMethod.md @@ -13,7 +13,7 @@ Value | Description ## Used By Property | Object --- | --- -`location_method` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) +`location_method` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) ## Additional Information The following sections details the usage of each of the location method From 591d6677cf71d2b723f48731c42c85c8b109c861 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:11:19 -0500 Subject: [PATCH 198/388] update road restriction used by object Update used by object to new work zone and detour road event for restrictions --- spec-content/enumerated-types/RoadRestriction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/RoadRestriction.md b/spec-content/enumerated-types/RoadRestriction.md index 5be636d4..12bf2cb3 100644 --- a/spec-content/enumerated-types/RoadRestriction.md +++ b/spec-content/enumerated-types/RoadRestriction.md @@ -22,5 +22,5 @@ Value | Description ## Used By Property | Object --- | --- -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`restrictions` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) `restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) From efa770c32556a35fd288994aee1a58f80f3f4a01 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:12:29 -0500 Subject: [PATCH 199/388] update spatial accuracy used by object Update used by object to new work zone and detour road event for spatial accuracy --- spec-content/enumerated-types/SpatialVerification.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/enumerated-types/SpatialVerification.md b/spec-content/enumerated-types/SpatialVerification.md index a24df232..a5a3f680 100644 --- a/spec-content/enumerated-types/SpatialVerification.md +++ b/spec-content/enumerated-types/SpatialVerification.md @@ -10,5 +10,5 @@ Value | Description ## Used By Property | Object --- | --- -`beginning_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`ending_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`beginning_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) +`ending_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) From 682e154b7c29c6e8ec4ec750ba4a9d63adc8a8d8 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:13:20 -0500 Subject: [PATCH 200/388] update vehicle impact used by object Update used by object to new work zone and detour road event for vehicle impact --- spec-content/enumerated-types/VehicleImpact.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/VehicleImpact.md b/spec-content/enumerated-types/VehicleImpact.md index 8dfe099b..275ddf0b 100644 --- a/spec-content/enumerated-types/VehicleImpact.md +++ b/spec-content/enumerated-types/VehicleImpact.md @@ -13,4 +13,4 @@ Value | Description ## Used By Property | Object --- | --- -`vehicle_impact` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`vehicle_impact` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) From 95f789ece022d51e5592f113a2081679a65ee0b8 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:15:03 -0500 Subject: [PATCH 201/388] update type of work used by object Update used by object to new work zone for type of work --- spec-content/objects/TypeOfWork.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/TypeOfWork.md b/spec-content/objects/TypeOfWork.md index e3aa0e85..0e795aa6 100644 --- a/spec-content/objects/TypeOfWork.md +++ b/spec-content/objects/TypeOfWork.md @@ -10,4 +10,4 @@ Property Name | Data Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`types_of_work` | [RoadEvent](/spec-content/objects/RoadEvent.md) \ No newline at end of file +`types_of_work` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) From db1a1d4d9259855d7ffa233411459abc8daa8950 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:17:04 -0500 Subject: [PATCH 202/388] update lanes used by object update used by object to new work zone road event --- spec-content/objects/Lane.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/Lane.md b/spec-content/objects/Lane.md index c89bb88a..5fce76bf 100644 --- a/spec-content/objects/Lane.md +++ b/spec-content/objects/Lane.md @@ -13,4 +13,4 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`lanes` | [RoadEvent](/spec-content/objects/RoadEvent.md) \ No newline at end of file +`lanes` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) From 4d53c9b7ee829103d3a4d29d6a33fd691ba9f150 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:18:19 -0500 Subject: [PATCH 203/388] update relationship used by object Update used by object to new core details object --- spec-content/objects/Relationship.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/Relationship.md b/spec-content/objects/Relationship.md index 952e63a3..082dfcf4 100644 --- a/spec-content/objects/Relationship.md +++ b/spec-content/objects/Relationship.md @@ -12,7 +12,7 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`relationship` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`relationship` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) ## Important Notes The value of all elements in the `Relationship`'s `first` or `next` properties must match the value of the `id` property of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) that is included in the same WZDx GeoJSON document. From 31fbbda87993c1986d3bff1499e50761010a87f2 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Thu, 14 Oct 2021 15:28:17 -0500 Subject: [PATCH 204/388] Update data source link Updated data source to renamed FeedDataSource --- spec-content/objects/FeedInfo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/FeedInfo.md b/spec-content/objects/FeedInfo.md index e17ddf8e..d2703b6f 100644 --- a/spec-content/objects/FeedInfo.md +++ b/spec-content/objects/FeedInfo.md @@ -7,7 +7,7 @@ Name | Type | Description | Conformance | Notes `publisher` | String | The organization responsible for publishing the feed. | Required | Example: `State DOT` `version` | String | The WZDx specification version used to create the data feed in `major.minor` format. Note this mandates that all data in a WZDx feed complies to a single version of WZDx. | Required | Examples: `1.1`, `2.0` `license` | String; [uri](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.5); "https://creativecommons.org/publicdomain/zero/1.0/" | The URL of the license that applies to the data in the WZDx feed. This *must* be the string "https://creativecommons.org/publicdomain/zero/1.0/". | Optional | Data in all public WZDx feeds must be licensed under the [Creative Commons - Public Domian License (CC0)](https://creativecommons.org/share-your-work/public-domain/cc0/) which permits consumers to freely publish the enclosed information. This property is currently optional but *will be required in a future release*. -`data_sources` | Array; \[[RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md)\] | A list of specific data sources for the road event data in the feed. | Required | Length of array must be at least one. +`data_sources` | Array; \[[FeedDataSource](/spec-content/objects/FeedDataSource.md)\] | A list of specific data sources for the road event data in the feed. | Required | Length of array must be at least one. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time when the GeoJSON file (representing the instance of the feed) was generated. | Required | The recency of the value of this property depends on if the feed producer is generating a new feed GeoJSON file for each request or generating the file in advance and making it available for download (WZDx does not mandate a particular distribution method). Note all date-time formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z` `update_frequency` | Integer | The frequency in seconds at which the data feed is updated. | Optional | Example: `60` `contact_name` | String | The name of the individual or group responsible for the data feed. | Optional | Example: `Jo Help` From 29a84555691f7a74ba9a47d1795c5d73413ad800 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 15 Oct 2021 09:20:26 -0400 Subject: [PATCH 205/388] Remove old restriction from event 121388-WB --- .../comprehensive_linestring_example.geojson | 3 --- 1 file changed, 3 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 45a01105..1e8deeeb 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -1190,9 +1190,6 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "all-lanes-open", - "restrictions": [ - "no-parking" - ], "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", "creation_date": "2010-01-01T09:30:26Z", "update_date": "2010-01-01T09:30:26Z", From d5340fd54a087666522698361d975e9fee52beec Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 15 Oct 2021 09:28:44 -0400 Subject: [PATCH 206/388] Re-added RoadEvent restriction to event 121388-WB Updated RoadEvent-level restriction on 121388-WB example in comprehensive linestring file --- .../comprehensive_linestring_example.geojson | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 1e8deeeb..0722fb0f 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -1190,6 +1190,11 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "all-lanes-open", + "restrictions": [ + { + "type": "no-parking" + } + ], "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", "creation_date": "2010-01-01T09:30:26Z", "update_date": "2010-01-01T09:30:26Z", From d5f3544c4460ef120a50eccceb1a832c993e0cf8 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 15 Oct 2021 10:27:49 -0400 Subject: [PATCH 207/388] Remove RoadEvent restriction from 67890 for consistency with Scenario 3 and multipoint examples --- .../comprehensive_linestring_example.geojson | 5 ----- 1 file changed, 5 deletions(-) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index 0722fb0f..5873fb20 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -1284,11 +1284,6 @@ "vehicle_impact": "some-lanes-closed", "workers_present": true, "reduced_speed_limit": 55, - "restrictions": [ - { - "type": "reduced-width" - } - ], "description": "Simple, single direction work zone with detour.", "creation_date": "2009-12-15T14:01:01Z", "update_date": "2010-01-01T01:03:01Z", From b0d9e6d7feaddf6e8a2fa232ad6596a0676f4411 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 15 Oct 2021 19:09:49 -0400 Subject: [PATCH 208/388] Add recommendation to use UUID for feature ID --- spec-content/objects/FieldDeviceFeature.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index cf52dca3..69754c17 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -6,7 +6,7 @@ Currently, only point devices are supported. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`id` | String | A unique identifier issued by the data feed provider to identify the field device. | Required | This is a GeoJSON property. +`id` | String | A unique identifier issued by the data feed provider to identify the field device. It is recommended that this identifier is a Universally Unique IDentifier (UUID) as defined in [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122). | Required | This is a GeoJSON property. `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. `properties` | One of: [ArrowBoard](/spec-content/objects/ArrowBoard.md), [Camera](/spec-content/objects/Camera.md), [DynamicMessageSign](/spec-content/objects/DynamicMessageSign.md), [FlashingBeacon](/spec-content/objects/FlashingBeacon.md), [LocationMarker](/spec-content/objects/LocationMarker.md), [TrafficSensor](/spec-content/objects/TrafficSensor.md) | The specific details of the field device. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | The geometry of the field device, indicating its location. The Geometry object's `type` property MUST be [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | Required | This is a GeoJSON property. From cced824c451f67c355abf38a1adcc6eaac37f4d8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 15 Oct 2021 19:11:23 -0400 Subject: [PATCH 209/388] Add link to GeoJSON Feature --- spec-content/objects/FieldDeviceFeature.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index 69754c17..81f65dd9 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -1,5 +1,5 @@ # FieldDeviceFeature Object -The FieldDeviceFeature object is a GeoJSON feature representing a deployed field device. This object contains the specific details of the field device, alike to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the RoadEvent object via the `properties` property. +The FieldDeviceFeature object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, alike to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the RoadEvent object via the `properties` property. Currently, only point devices are supported. From 268e0f5d5937569657efb6b9eaed9c16f9c2f0c5 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 22 Oct 2021 00:01:19 -0400 Subject: [PATCH 210/388] Change HybridSign dynamic_message_text to optional --- create-feed/schemas/swz_device_feed_v1.0.json | 3 +-- spec-content/objects/HybridSign.md | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/create-feed/schemas/swz_device_feed_v1.0.json b/create-feed/schemas/swz_device_feed_v1.0.json index 09f86415..2b3ba136 100644 --- a/create-feed/schemas/swz_device_feed_v1.0.json +++ b/create-feed/schemas/swz_device_feed_v1.0.json @@ -388,8 +388,7 @@ }, "required": [ "core_details", - "dynamic_message_function", - "dynamic_message_text" + "dynamic_message_function" ] }, "LocationMarker": { diff --git a/spec-content/objects/HybridSign.md b/spec-content/objects/HybridSign.md index d8b0a2be..bb9f2ca6 100644 --- a/spec-content/objects/HybridSign.md +++ b/spec-content/objects/HybridSign.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to hybrid signs. | Required | This property appears on all field devices. `dynamic_message_function` | [HybridSignDynamicMessageFunction](/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md) | The function the dynamic message displayed (e.g. a speed limit). | Required | -`dynamic_message_text` | String | A text representation of the message currently posted to the electronic component of the hybrid sign. | Required | +`dynamic_message_text` | String | A text representation of the message currently posted to the electronic component of the hybrid sign. | Optional | `static_sign_text` | String | The static text on the non-electronic component of the hybrid sign. | Optional | ## Used By From 3e21b06df4ad939fef7012e1ab7139d336c07293 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 22 Oct 2021 00:08:17 -0400 Subject: [PATCH 211/388] Fix link --- spec-content/objects/LocationMarker.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/objects/LocationMarker.md b/spec-content/objects/LocationMarker.md index 4ee2f1a8..3a3f004d 100644 --- a/spec-content/objects/LocationMarker.md +++ b/spec-content/objects/LocationMarker.md @@ -1,5 +1,5 @@ # LocationMarker Object -The LocationMarker object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The LocationMarker contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.mdMarkedLocation.md) objects which indicate to a type of location (such as the start or end) and optionally the ID of a [RoadEvent] that the location is associated with. +The LocationMarker object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The LocationMarker contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.mdMarkedLocation.md) objects which indicate to a type of location (such as the start or end) and optionally the ID of a [RoadEvent](/spec-content/objects/RoadEvent.md) that the location is associated with. The LocationMarker is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). @@ -12,4 +12,4 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`properties` | [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) \ No newline at end of file +`properties` | [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) From e596354309f06846cda50a90481f7c26334ab42c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 22 Oct 2021 00:12:42 -0400 Subject: [PATCH 212/388] Fix typo --- spec-content/objects/TrafficSensor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md index bffaed03..2ee666a6 100644 --- a/spec-content/objects/TrafficSensor.md +++ b/spec-content/objects/TrafficSensor.md @@ -1,5 +1,5 @@ # TrafficSensor Object -The TrafficSensor object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The TrafficSensor can describe lane-level if available and if associated with a [RoadEvent](/spec-content/objects/RoadEvent.md). +The TrafficSensor object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The TrafficSensor can describe lane-level traffic data if available and if associated with a [RoadEvent](/spec-content/objects/RoadEvent.md). The TrafficSensor is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). From 6232bc357cf0c0b8b91ca1e06778460486dbd784 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 22 Oct 2021 00:22:59 -0400 Subject: [PATCH 213/388] Fix typo --- spec-content/objects/LocationMarker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/LocationMarker.md b/spec-content/objects/LocationMarker.md index 3a3f004d..8d1112ce 100644 --- a/spec-content/objects/LocationMarker.md +++ b/spec-content/objects/LocationMarker.md @@ -1,5 +1,5 @@ # LocationMarker Object -The LocationMarker object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The LocationMarker contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.mdMarkedLocation.md) objects which indicate to a type of location (such as the start or end) and optionally the ID of a [RoadEvent](/spec-content/objects/RoadEvent.md) that the location is associated with. +The LocationMarker object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The LocationMarker contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.mdMarkedLocation.md) objects which indicate the type of location (such as the start or end) and optionally the ID of a [RoadEvent](/spec-content/objects/RoadEvent.md) that the location is associated with. The LocationMarker is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). From 4bb9e0363b3924839f6d5d8817cd64587d4af4ce Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 22 Oct 2021 00:45:27 -0400 Subject: [PATCH 214/388] Update Lane restrictions description --- spec-content/objects/Lane.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/Lane.md b/spec-content/objects/Lane.md index 76768632..5101f436 100644 --- a/spec-content/objects/Lane.md +++ b/spec-content/objects/Lane.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes `type` | [LaneType](/spec-content/enumerated-types/LaneType.md) | An indication of the type of lane or shoulder. | Required | `status` | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Status of the lane for the traveling public. | Required | `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. -`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of specific restrictions that apply to the lane. | Optional | +`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more restrictions specific to the lane. | Optional | ## Used By Property | Object From f6a29a7fea82903cf5ff386ed5198c0d687bc4e0 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 28 Oct 2021 12:44:16 -0400 Subject: [PATCH 215/388] Rename WorkerPresenceSource to WorkerPresenceMethod --- README.md | 2 +- .../comprehensive_linestring_example.geojson | 8 ++++---- .../scenario1_simple_linestring_example.geojson | 4 ++-- .../scenario2_laneshift_linestring_example.geojson | 2 +- .../scenario4_detour_linestring_example.geojson | 2 +- .../comprehensive_multipoint_example.geojson | 8 ++++---- .../scenario1_simple_multipoint_example.geojson | 4 ++-- .../scenario2_laneshift_multipoint_example.geojson | 2 +- .../scenario4_detour_multipoint_example.geojson | 2 +- create-feed/schemas/wzdx_v4.0_feed.json | 10 +++++----- spec-content/README.md | 4 ++-- spec-content/objects/WorkerPresence.md | 2 +- 12 files changed, 25 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 3ae942f3..4889a752 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) - [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) - [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) - - [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) + - [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) - [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) - [**Images Used throughout the Specification**](/images) - [Object Diagram](/images/wzdx_object_diagram.jpg) diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson index d2d307f4..63f7d94b 100644 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson @@ -705,7 +705,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "check-in-app", + "method": "check-in-app", "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", "confidence": "high", "definition": [ @@ -825,7 +825,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "check-in-app", + "method": "check-in-app", "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", "confidence": "high", "definition": [ @@ -992,7 +992,7 @@ "vehicle_impact": "all-lanes-open", "worker_presence": { "are_workers_present": true, - "source": "wearables-present", + "method": "wearables-present", "definition": [ "workers-in-work-zone-working", "workers-in-work-zone-not-working", @@ -1308,7 +1308,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "scheduled", + "method": "scheduled", "confidence": "medium", "definition": [ "workers-in-work-zone-working", diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index c0a2ae40..e70e1d9e 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -537,7 +537,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "check-in-app", + "method": "check-in-app", "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", "confidence": "high", "definition": [ @@ -657,7 +657,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "check-in-app", + "method": "check-in-app", "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", "confidence": "high", "definition": [ diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index d31d60bb..89e3fad7 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -47,7 +47,7 @@ "vehicle_impact": "all-lanes-open", "worker_presence": { "are_workers_present": true, - "source": "wearables-present", + "method": "wearables-present", "definition": [ "workers-in-work-zone-working", "workers-in-work-zone-not-working", diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 3cb7bf72..43321d3b 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -53,7 +53,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "scheduled", + "method": "scheduled", "confidence": "medium", "worker_presence_definition": [ "workers-in-work-zone-working", diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson index 02b99de2..d2a0f579 100644 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson @@ -389,7 +389,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "check-in-app", + "method": "check-in-app", "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", "confidence": "high", "definition": [ @@ -485,7 +485,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "check-in-app", + "method": "check-in-app", "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", "confidence": "high", "definition": [ @@ -568,7 +568,7 @@ "vehicle_impact": "all-lanes-open", "worker_presence": { "are_workers_present": true, - "source": "wearables-present", + "method": "wearables-present", "definition": [ "workers-in-work-zone-working", "workers-in-work-zone-not-working", @@ -796,7 +796,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "scheduled", + "method": "scheduled", "confidence": "medium", "definition": [ "workers-in-work-zone-working", diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 71583918..ded072f3 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -261,7 +261,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "check-in-app", + "method": "check-in-app", "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", "confidence": "high", "definition": [ @@ -357,7 +357,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "check-in-app", + "method": "check-in-app", "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", "confidence": "high", "definition": [ diff --git a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson index 57679bce..28af35c1 100644 --- a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson @@ -47,7 +47,7 @@ "vehicle_impact": "all-lanes-open", "worker_presence": { "are_workers_present": true, - "source": "wearables-present", + "method": "wearables-present", "definition": [ "workers-in-work-zone-working", "workers-in-work-zone-not-working", diff --git a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson index c00d329c..a74c071a 100644 --- a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson @@ -53,7 +53,7 @@ "vehicle_impact": "some-lanes-closed", "worker_presence": { "are_workers_present": true, - "source": "scheduled", + "method": "scheduled", "confidence": "medium", "definition": [ "workers-in-work-zone-working", diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 7f7895e9..e62c9137 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -453,8 +453,8 @@ "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object", "type": "boolean" }, - "source": { - "$ref": "#/definitions/WorkerPresenceSource" + "method": { + "$ref": "#/definitions/WorkerPresenceMethod" }, "worker_presence_last_confirmed_date": { "description": "Datetime at which the presence of workers was last confirmed using the 'source'", @@ -590,9 +590,9 @@ "description": "Units of measure used for the lane restriction value", "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] }, - "WorkerPresenceSource": { - "title": "Worker Presence Source Enumerated Type", - "description": "Data source providing information on whether workers are present in the work zone event area", + "WorkerPresenceMethod": { + "title": "Worker Presence Method Enumerated Type", + "description": "Describes methods for how worker presence in a work zone event area is determined", "enum": [ "camera-monitoring", "arrow-board-present", diff --git a/spec-content/README.md b/spec-content/README.md index f82e262c..15e0633f 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -63,7 +63,7 @@ Enumerated Type | Description [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | High-level description of the feed publisher's confidence in worker presence [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Method of knowing the presence of workers in the road event area. -[WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Situations in which workers may be considered present by a jurisdiction. +[WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Methods for how worker presence in a work zone event area is determined. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. ### Object Properties using Enumerated Types @@ -81,7 +81,7 @@ Property | Object | Enumerated Type | Notes `restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Enumeration created in WZDx v1.0 `restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md) | Individual lane restrictions | Enumeration created in WZDx v1.0 `restriction_units` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) | [LaneRestrictionUnit](/spec-content/enumerated-types/LaneRestrictionUnit.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. -`source` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Enumerated created in WZDx v4.0 +`method` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Enumerated created in WZDx v4.0 `start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 `status` | [Lane](/spec-content/objects/Lane.md) | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Enumeration created in WZDx v2.0 `type` | [Lane](/spec-content/objects/Lane.md) | [LaneType](/spec-content/enumerated-types/LaneType.md) | Enumeration adapted from TMDD LaneRoadway; updated in WZDx v3.0 diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 74b6dc65..9b183e41 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `are_workers_present` | Boolean | Whether workers are present in the work zone event area. This value should be set in accordance with the definition provided in the `definition` property if it is provided. | Required | `definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional -`source` | [WorkerPresenceSource](/spec-content/enumerated-types/WorkerPresenceSource.md) | Data source providing information on whether workers are present in the work zone event area. | Optional | +`method` | [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Describes the method for how worker presence in a work zone event area is determined. | Optional | `worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | Date and time at which the presence of workers was last confirmed. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). `confidence` | [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | The data producer’s confidence in the value of `are_workers_present`. | Optional | From c3a7b143ac1b1b6b8b62196fb78021e37599ef22 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 28 Oct 2021 13:38:21 -0400 Subject: [PATCH 216/388] Fix file name --- .../{WorkerPresenceSource.md => WorkerPresenceMethod.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename spec-content/enumerated-types/{WorkerPresenceSource.md => WorkerPresenceMethod.md} (100%) diff --git a/spec-content/enumerated-types/WorkerPresenceSource.md b/spec-content/enumerated-types/WorkerPresenceMethod.md similarity index 100% rename from spec-content/enumerated-types/WorkerPresenceSource.md rename to spec-content/enumerated-types/WorkerPresenceMethod.md From c4eef27bde4d5708d1a344ee20a0c33c5c3d2064 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Thu, 28 Oct 2021 13:44:17 -0400 Subject: [PATCH 217/388] Update WP confidence with examples --- spec-content/enumerated-types/WorkerPresenceConfidence.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec-content/enumerated-types/WorkerPresenceConfidence.md b/spec-content/enumerated-types/WorkerPresenceConfidence.md index c309b5cb..092d2523 100644 --- a/spec-content/enumerated-types/WorkerPresenceConfidence.md +++ b/spec-content/enumerated-types/WorkerPresenceConfidence.md @@ -4,9 +4,9 @@ A high-level description of a feed publisher's confidence in the reported value ## Values Value | Description --- | --- -`low` | Feed publisher is not confident in the reported value. -`medium` | Feed publisher is somewhat confident in the reported value. -`high` | Feed publisher is very confident in the reported value. +`low` | Feed publisher is not confident in the reported value, such as when data is manually reported or not updated frequently. +`medium` | Feed publisher is somewhat confident in the reported value, such as when the value is still manually reported but is being updated in a timely manner, or when worker presence is indirectly inferred from other equipment like smart arrow board. +`high` | Feed publisher is very confident in the reported value, such as when automated systems with GPS locations are used to generate the value. ## Used By Property | Object From dddcc03afb03fb61bae2c4401fcbb9a6e3571e59 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 28 Oct 2021 13:44:21 -0400 Subject: [PATCH 218/388] Fix method naming changes --- spec-content/enumerated-types/WorkerPresenceMethod.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/enumerated-types/WorkerPresenceMethod.md b/spec-content/enumerated-types/WorkerPresenceMethod.md index 10658641..67e8f5b7 100644 --- a/spec-content/enumerated-types/WorkerPresenceMethod.md +++ b/spec-content/enumerated-types/WorkerPresenceMethod.md @@ -1,5 +1,5 @@ -# Worker Presence Source -Data source providing information on whether workers are present in the work zone event area. +# Worker Presence Method +Describes methods for how worker presence in a work zone event area is determined. ## Values Value | Description From 6b3daf7b0fa77d52792c072e311499538e0b861d Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 14:25:29 -0400 Subject: [PATCH 219/388] Make reference to date-time consistent --- spec-content/objects/DetourRoadEvent.md | 4 ++-- spec-content/objects/WorkZoneRoadEvent.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spec-content/objects/DetourRoadEvent.md b/spec-content/objects/DetourRoadEvent.md index 29687671..5ca4c94c 100644 --- a/spec-content/objects/DetourRoadEvent.md +++ b/spec-content/objects/DetourRoadEvent.md @@ -9,8 +9,8 @@ Name | Type | Description | Conformance | Notes `core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of the road event that are shared by all types of road events, not specific to detours. | Required | `start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | -`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | +`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start date-time is. | Required | +`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end date-time is. | Required | `beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | `ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | `beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. See also the `lrs_type` property on the [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) object. diff --git a/spec-content/objects/WorkZoneRoadEvent.md b/spec-content/objects/WorkZoneRoadEvent.md index a9c74ffa..61b9ae13 100644 --- a/spec-content/objects/WorkZoneRoadEvent.md +++ b/spec-content/objects/WorkZoneRoadEvent.md @@ -9,8 +9,8 @@ Name | Type | Description | Conformance | Notes `core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of the road event that are shared by all types of road events, not specific to work zones. | Required | `start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | -`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | +`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start date-time is. | Required | +`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end date-time is. | Required | `beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | `ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | `location_method` | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. | Required | From 9b0d34ee523b1489913c557fa3ade00045013745 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 14:42:05 -0400 Subject: [PATCH 220/388] Update reference to RoadEvent in RoadEventCoreDetails page --- spec-content/objects/RoadEventCoreDetails.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index 0115d38d..900765d7 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -20,6 +20,6 @@ Property | Object `core_details` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) ## Important Notes -The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. +The value of the `RoadEventCoreDetails`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. From ab5fb5bcf31d052319410512035bf87793828941 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 14:51:11 -0400 Subject: [PATCH 221/388] Add core_details as requried field for WorkZoneRoadEvent and DetourRoadEvent --- create-feed/schemas/wzdx_v4.0_feed.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 58367f9b..ae751bb1 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -331,6 +331,7 @@ } }, "required": [ + "core_details", "beginning_accuracy", "ending_accuracy", "start_date", @@ -388,6 +389,7 @@ } }, "required": [ + "core_details", "start_date", "end_date", "start_date_accuracy", From c21c942da3f85ee39e3cce905a2499a51728d604 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 14:54:50 -0400 Subject: [PATCH 222/388] Deprecate road_event_id and require id field in RoadEventFeature --- create-feed/schemas/wzdx_v4.0_feed.json | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index ae751bb1..9e33a3bd 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -179,19 +179,7 @@ "$ref": "#/definitions/BoundingBox" } }, - "oneOf": [ - { - "properties": { - "properties": { - "required": ["road_event_id"] - } - } - }, - { - "required": ["id"] - } - ], - "required": ["type","properties","geometry"] + "required": ["type","properties","geometry", "id"] }, "RoadEventCoreDetails": { "title": "Road Event Core Details", From 0d02b34a9ec43eda12b77efc586adbbeb90c3315 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 15:45:56 -0400 Subject: [PATCH 223/388] Fix link typo --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a18fa2df..800f473a 100644 --- a/README.md +++ b/README.md @@ -43,7 +43,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [**Specification Content**](/spec-content) - [**Objects**](/spec-content/objects) - [WZDxFeed](/spec-content/objects/WZDxFeed.md) - - [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md.md) + - [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) - [FeedInfo](/spec-content/objects/FeedInfo.md) - [FeedDataSource](/spec-content/objects/FeedDataSource.md) - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) From f94f7c5f8dd070cecffbf5a5184ef7b522fd348d Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 15:59:43 -0400 Subject: [PATCH 224/388] Fix minor link and formatting issues on various READMEs --- create-feed/README.md | 2 +- spec-content/README.md | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/create-feed/README.md b/create-feed/README.md index 83723bdf..872c8618 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -91,7 +91,7 @@ The local access only example ([Linestring](/create-feed/examples/linestring-exa - The comprehensive example ([Linestring](/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson)) contains all of the examples listed above in a single GeoJSON file showing how the various road events across multiple organizations and data sources can be represented in a single WZDx feed. ## JSON Schemas -The WZDx Specification defines two "feeds" each with a JSON schema. The [schemas](/create-feed/schemas) directory includes a JSON Schema for the following WZDx feed versions: +The WZDx Specification defines two "feeds", each with a JSON schema. The [schemas](/create-feed/schemas) directory includes a JSON Schema for the following WZDx feed versions: * [WZDx v2.0 Feed](/create-feed/schemas/wzdx_v2.0_feed.json) * [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) diff --git a/spec-content/README.md b/spec-content/README.md index 386b15fa..e06dc6a5 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -69,6 +69,8 @@ Many object properties are restricted to a finite set of values, defined by an e This section provides a tabular list of all enumerated types used in the WZDx specification, sectioned by whether they apply to multiple feeds (shared), the `WZDxFeed`, or the `SwzDeviceFeed`. #### Shared +Enumerated Type | Description +--- | --- [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. #### WZDxFeed @@ -91,7 +93,7 @@ Enumerated Type | Description --- | --- [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | A list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) | Describes options for what a [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) is being used to indicate. -[HybridSignDynamicMessageFunction] | Describes options for the function of the dynamic message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). +[HybridSignDynamicMessageFunction](/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md) | Describes options for the function of the dynamic message displayed by the electronic display on a [HybridSign](/spec-content/objects/HybridSign.md). [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) | The operational status of a field device. -[FieldDeviceType](/spec-content/enumerated-types/EventStatus.md) | The type of a field device. +[FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) | The type of a field device. [MarkedLocationType](/spec-content/enumerated-types/MarkedLocationType.md) | Describes options for what a [MarkedLocation](/spec-content/objects/MarkedLocation.md) can mark, such as the start or end of a road event. \ No newline at end of file From ea103ed403753948a5ad4358a25253f719d88fc2 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 16:16:23 -0400 Subject: [PATCH 225/388] Fix minor typos in enumerated-types pages and make formatting consistent --- spec-content/enumerated-types/ArrowBoardPattern.md | 6 +++--- spec-content/enumerated-types/Direction.md | 2 +- spec-content/enumerated-types/FieldDeviceStatus.md | 2 +- spec-content/enumerated-types/FieldDeviceType.md | 2 +- spec-content/enumerated-types/FlashingBeaconFunction.md | 4 ++-- spec-content/enumerated-types/MarkedLocationType.md | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/spec-content/enumerated-types/ArrowBoardPattern.md b/spec-content/enumerated-types/ArrowBoardPattern.md index a35190b5..3ce000da 100644 --- a/spec-content/enumerated-types/ArrowBoardPattern.md +++ b/spec-content/enumerated-types/ArrowBoardPattern.md @@ -1,5 +1,5 @@ # ArrowBoardPattern Enumerated Type -The ArrowBoardPattern enumerated type defines a list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). +The `ArrowBoardPattern` enumerated type defines a list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). If the arrow board pattern does not exactly match one of the values described, the closest pattern should be used. @@ -11,13 +11,13 @@ Value | Description `right-arrow-flashing` | Merge right represented by an arrow pattern (e.g. `-->`) that flashes on/off. `right-arrow-sequential` | Merge right represented by an arrow pattern (e.g. `-->`) that is displayed in a progressing sequence (e.g. `>` `->` `-->` or `-` `--` `-->`). `right-chevrons-static` | Merge right represented by a pattern of chevrons (e.g. `>>>`) that does not flash or move. -`right-chevrons-flashing` | Merge right represented by a pattern of chevrons (e.g. `>>>`) that that flashes on/off. +`right-chevrons-flashing` | Merge right represented by a pattern of chevrons (e.g. `>>>`) that flashes on/off. `right-chevrons-sequential` | Merge right represented by a pattern of chevrons that is displayed in a progressing sequence. `left-arrow-static` | Merge left represented by an arrow pattern (e.g. `<--`) that does not flash or move. `left-arrow-flashing` | Merge left represented by an arrow pattern (e.g. `<--`) that flashes on/off. `left-arrow-sequential` | Merge left represented by an arrow pattern (e.g. `<--`) that is displayed in a progressing sequence (e.g. `<` `<-` `<--` or `-` `--` `<--`). `left-chevron-static` | Merge left represented by a pattern of chevrons (e.g. `<<<`) that does not flash or move. -`left-chevron-flashing` | Merge left represented by a pattern of chevrons (e.g. `<<<`) that that flashes on/off. +`left-chevron-flashing` | Merge left represented by a pattern of chevrons (e.g. `<<<`) that flashes on/off. `left-chevron-sequential` | Merge left represented by a pattern of chevrons that is displayed in a progressing sequence. `bidirectional-arrow-static` | Split (merge left or right) represented by arrows pointing both left and right (e.g. `<-->`) that does not flash or move. `bidirectional-arrow-flashing` | Split (merge left or right) represented by arrows pointing both left and right (e.g. `<-->`) that flashes on/off. diff --git a/spec-content/enumerated-types/Direction.md b/spec-content/enumerated-types/Direction.md index 86a8271a..d8a44bd8 100644 --- a/spec-content/enumerated-types/Direction.md +++ b/spec-content/enumerated-types/Direction.md @@ -15,7 +15,7 @@ Property | Object `direction` | [RoadEvent](/spec-content/objects/RoadEvent.md) ## Additional Information -The Direction enumerated type values were based on the TMDD Link-alignment Enumeration, which contains the following values: +The `Direction` enumerated type values were based on the TMDD Link-alignment Enumeration, which contains the following values: ``` northbound (1) diff --git a/spec-content/enumerated-types/FieldDeviceStatus.md b/spec-content/enumerated-types/FieldDeviceStatus.md index 05db42d4..95ac23bc 100644 --- a/spec-content/enumerated-types/FieldDeviceStatus.md +++ b/spec-content/enumerated-types/FieldDeviceStatus.md @@ -1,5 +1,5 @@ # FieldDeviceStatus Enumerated Type -The FieldDeviceStatus enumerated type describes the operational status of a field device. The status indicates the health of the device. +The `FieldDeviceStatus` enumerated type describes the operational status of a field device. The status indicates the health of the device. ## Values Value | Description diff --git a/spec-content/enumerated-types/FieldDeviceType.md b/spec-content/enumerated-types/FieldDeviceType.md index a4da5328..2273f9a7 100644 --- a/spec-content/enumerated-types/FieldDeviceType.md +++ b/spec-content/enumerated-types/FieldDeviceType.md @@ -1,5 +1,5 @@ # FieldDeviceType Enumerated Type -The FieldDeviceType enumerated type enumerates all types of field devices described by the specification. +The `FieldDeviceType` enumerated type enumerates all types of field devices described by the specification. ## Values Value | Description diff --git a/spec-content/enumerated-types/FlashingBeaconFunction.md b/spec-content/enumerated-types/FlashingBeaconFunction.md index 77452629..9b138620 100644 --- a/spec-content/enumerated-types/FlashingBeaconFunction.md +++ b/spec-content/enumerated-types/FlashingBeaconFunction.md @@ -1,5 +1,5 @@ # FlashingBeaconFunction Enumerated Type -The FlashingBeaconFunction enumerated type describes a list of options for what a [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) is being used to indicate. +The `FlashingBeaconFunction` enumerated type describes a list of options for what a [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) is being used to indicate. ## Values Value | Description @@ -7,7 +7,7 @@ Value | Description `vehicle-entering` | Vehicles are entering the roadway. `queue-warning` | There is a queue of vehicles. `reduced-speed` | There is a reduced speed limit. -`workers-present` | There are workers are present on or near the roadway. +`workers-present` | There are workers present on or near the roadway. ## Used By Property | Object diff --git a/spec-content/enumerated-types/MarkedLocationType.md b/spec-content/enumerated-types/MarkedLocationType.md index c87eccfd..47d5293d 100644 --- a/spec-content/enumerated-types/MarkedLocationType.md +++ b/spec-content/enumerated-types/MarkedLocationType.md @@ -1,5 +1,5 @@ # MarkedLocationType Enumerated Type -The MarkedLocationType enumerated type describes options for what a [MarkedLocation](/spec-content/objects/MarkedLocation.md) can mark, such as the start or end of a road event. +The `MarkedLocationType` enumerated type describes options for what a [MarkedLocation](/spec-content/objects/MarkedLocation.md) can mark, such as the start or end of a road event. ## Values Value | Description From d480a7dddf360e2989931688968118c02a679a80 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 17:02:24 -0400 Subject: [PATCH 226/388] Fix minor typos in object pages and make formatting consistent --- spec-content/objects/ArrowBoard.md | 4 ++-- spec-content/objects/Camera.md | 4 ++-- spec-content/objects/DynamicMessageSign.md | 4 ++-- spec-content/objects/FeedDataSource.md | 2 +- spec-content/objects/FieldDeviceCoreDetails.md | 2 +- spec-content/objects/FieldDeviceFeature.md | 4 ++-- spec-content/objects/FlashingBeacon.md | 4 ++-- spec-content/objects/HybridSign.md | 4 ++-- spec-content/objects/LocationMarker.md | 6 +++--- spec-content/objects/MarkedLocation.md | 4 ++-- spec-content/objects/RoadEventFeature.md | 2 +- spec-content/objects/TrafficSensor.md | 8 ++++---- spec-content/objects/WZDxFeed.md | 2 +- 13 files changed, 25 insertions(+), 25 deletions(-) diff --git a/spec-content/objects/ArrowBoard.md b/spec-content/objects/ArrowBoard.md index 23824108..15e5b5ce 100644 --- a/spec-content/objects/ArrowBoard.md +++ b/spec-content/objects/ArrowBoard.md @@ -1,7 +1,7 @@ # ArrowBoard Object -The ArrowBoard object describes an electronic, connected arrow board ([example image](https://trafficlaneclosures.com/wp-content/uploads/2015/03/st4825-arrowboard.png)) which can display an arrow pattern to direct traffic. Arrow boards are often placed at the beginning of a lane closure—thus knowing the location of an arrow board can assist in programmatically generating a WZDx road event with verified spatial information. +The `ArrowBoard` object describes an electronic, connected arrow board ([example image](https://trafficlaneclosures.com/wp-content/uploads/2015/03/st4825-arrowboard.png)) which can display an arrow pattern to direct traffic. Arrow boards are often placed at the beginning of a lane closure—thus knowing the location of an arrow board can assist in programmatically generating a WZDx road event with verified spatial information. -The ArrowBoard is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). +The `ArrowBoard` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/Camera.md b/spec-content/objects/Camera.md index 1e6b8deb..b8f0e06d 100644 --- a/spec-content/objects/Camera.md +++ b/spec-content/objects/Camera.md @@ -1,7 +1,7 @@ # Camera Object -The camera object describes a camera device deployed in the field, capable of capturing still images. +The `Camera` object describes a camera device deployed in the field, capable of capturing still images. -The Camera is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). +The `Camera` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/DynamicMessageSign.md b/spec-content/objects/DynamicMessageSign.md index d2358ce3..28e90b6d 100644 --- a/spec-content/objects/DynamicMessageSign.md +++ b/spec-content/objects/DynamicMessageSign.md @@ -1,7 +1,7 @@ # DynamicMessageSign Object -The DynamicMessageSign object describes a dynamic message sign (DMS)—also known as changeable message sign (CMS) or variable message sign (VMS)—which is an electronic traffic sign deployed on the roadway used to provide information to travelers. +The `DynamicMessageSign` object describes a dynamic message sign (DMS)—also known as changeable message sign (CMS) or variable message sign (VMS)—which is an electronic traffic sign deployed on the roadway used to provide information to travelers. -The DynamicMessageSign is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). +The `DynamicMessageSign` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/FeedDataSource.md b/spec-content/objects/FeedDataSource.md index c0ea8c30..a201c5db 100644 --- a/spec-content/objects/FeedDataSource.md +++ b/spec-content/objects/FeedDataSource.md @@ -1,5 +1,5 @@ # FeedDataSource Object -The `FeedDataSource` object describes information about a specific data source used to build a work zone data feed. A WZDx feed must contain at least one `FeedDataSource`, included as an entry in the `data_sources` array of the `FeedInfo` object. +The `FeedDataSource` object describes information about a specific data source used to build a work zone data feed. A WZDx feed must contain at least one `FeedDataSource`, included as an entry in the `data_sources` array of the [FeedInfo](/spec-content/objects/FeedInfo.md) object. ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/FieldDeviceCoreDetails.md b/spec-content/objects/FieldDeviceCoreDetails.md index 7355b506..445ddbe4 100644 --- a/spec-content/objects/FieldDeviceCoreDetails.md +++ b/spec-content/objects/FieldDeviceCoreDetails.md @@ -1,5 +1,5 @@ # FieldDeviceCoreDetails Object -The FieldDeviceCoreDetails object represents the core details—both configuration and current state—of a field device that are shared by all types of field devices. The FieldDeviceCoreDetails object can not occur directly in a data feed and does not represent a field device on its own. It is used as the value of the `core_details` property on every specific type of field device, each which is represented by its own object. +The `FieldDeviceCoreDetails` object represents the core details—both configuration and current state—of a field device that are shared by all types of field devices. The `FieldDeviceCoreDetails` object cannot occur directly in a data feed and does not represent a field device on its own. It is used as the value of the `core_details` property on every specific type of field device, each represented by its own object. ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index 81f65dd9..34e5b46b 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -1,5 +1,5 @@ # FieldDeviceFeature Object -The FieldDeviceFeature object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, alike to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the RoadEvent object via the `properties` property. +The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the RoadEvent object via the `properties` property. Currently, only point devices are supported. @@ -10,7 +10,7 @@ Name | Type | Description | Conformance | Notes `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. `properties` | One of: [ArrowBoard](/spec-content/objects/ArrowBoard.md), [Camera](/spec-content/objects/Camera.md), [DynamicMessageSign](/spec-content/objects/DynamicMessageSign.md), [FlashingBeacon](/spec-content/objects/FlashingBeacon.md), [LocationMarker](/spec-content/objects/LocationMarker.md), [TrafficSensor](/spec-content/objects/TrafficSensor.md) | The specific details of the field device. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | The geometry of the field device, indicating its location. The Geometry object's `type` property MUST be [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | Required | This is a GeoJSON property. -`bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this field device. Must be an array of length 2*n where n is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. +`bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this field device. Must be an array of length `2n` where `n` is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. ## Used By Property | Object diff --git a/spec-content/objects/FlashingBeacon.md b/spec-content/objects/FlashingBeacon.md index 51dd6a32..e1d006af 100644 --- a/spec-content/objects/FlashingBeacon.md +++ b/spec-content/objects/FlashingBeacon.md @@ -1,7 +1,7 @@ # FlashingBeacon Object -The FlashingBeacon object describes a flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something and capture driver attention. +The `FlashingBeacon` object describes a flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something and capture driver attention. -The FlashingBeacon is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). +The `FlashingBeacon` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/HybridSign.md b/spec-content/objects/HybridSign.md index bb9f2ca6..aad401d4 100644 --- a/spec-content/objects/HybridSign.md +++ b/spec-content/objects/HybridSign.md @@ -1,7 +1,7 @@ # HybridSign Object -The HybridSign object describes a hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers. This object is intended to be general to represent hybrid signs with multiple functions, such as variable speed limit signs (VSLS), hybrid travel time signs and other similar systems. +The `HybridSign` object describes a hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers. This object is intended to be general to represent hybrid signs with multiple functions, such as variable speed limit signs (VSLS), hybrid travel time signs, and other similar systems. -The HybridSign is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). +The `HybridSign` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/LocationMarker.md b/spec-content/objects/LocationMarker.md index 8d1112ce..a7733934 100644 --- a/spec-content/objects/LocationMarker.md +++ b/spec-content/objects/LocationMarker.md @@ -1,13 +1,13 @@ # LocationMarker Object -The LocationMarker object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The LocationMarker contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.mdMarkedLocation.md) objects which indicate the type of location (such as the start or end) and optionally the ID of a [RoadEvent](/spec-content/objects/RoadEvent.md) that the location is associated with. +The `LocationMarker` object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The `LocationMarker` contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.md) objects which indicate the type of location (such as the start or end) and optionally the ID of a [RoadEvent](/spec-content/objects/RoadEvent.md) that the location is associated with. -The LocationMarker is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). +The `LocationMarker` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to the location marker. | Required | This property appears on all field devices. -`marked_locations` | Array; [[MarkedLocation](/spec-content/objects/MarkedLocation.md)] | A list of locations that the LocationMarker is marking. | Required | +`marked_locations` | Array; [[MarkedLocation](/spec-content/objects/MarkedLocation.md)] | A list of locations that the `LocationMarker` is marking. | Required | ## Used By Property | Object diff --git a/spec-content/objects/MarkedLocation.md b/spec-content/objects/MarkedLocation.md index 312364d0..717233b3 100644 --- a/spec-content/objects/MarkedLocation.md +++ b/spec-content/objects/MarkedLocation.md @@ -1,11 +1,11 @@ # MarkedLocation Object -The MarkedLocation object describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. The marked location is typically within a road event, but is not required to be. +The `MarkedLocation` object describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. The marked location is typically within a road event, but is not required to be. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `type` | [MarkedLocationType](/spec-content/enumerated-types/MarkedLocationType.md) | The type of location (e.g. start or end) that is marked. | Required | -`road_event_id` | String | The ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) that the MarkedLocation applies to. | Optional | This property is optional because the field device information producer may not always have road event information. +`road_event_id` | String | The ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) that the `MarkedLocation` applies to. | Optional | This property is optional because the field device information producer may not always have road event information. ## Used By Property | Object diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index 27eaa543..f778f7df 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. `properties` | [RoadEvent](/spec-content/objects/RoadEvent.md) | The specific details of road event. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3) | The geometry of the road event. The Geometry object's `type` property MUST be [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3). `LineString` allows specifying the entire road event path and should be preferred. `MultiPoint` should be used when only the start and end coordinates are known. | Required | This is a GeoJSON property. -`bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this RoadEventFeature. Must be an array of length 2*n where n is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. +`bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this RoadEventFeature. Must be an array of length `2n` where `n` is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. ## Used By Property | Object diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md index 2ee666a6..799bbbeb 100644 --- a/spec-content/objects/TrafficSensor.md +++ b/spec-content/objects/TrafficSensor.md @@ -1,14 +1,14 @@ # TrafficSensor Object -The TrafficSensor object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The TrafficSensor can describe lane-level traffic data if available and if associated with a [RoadEvent](/spec-content/objects/RoadEvent.md). +The `TrafficSensor` object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The `TrafficSensor` can describe lane-level traffic data if available and if associated with a [RoadEvent](/spec-content/objects/RoadEvent.md). -The TrafficSensor is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). +The `TrafficSensor` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to traffic sensors. | Required | This property appears on all field devices. -`collection_interval_start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the TrafficSensor data began being collected at. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | -`collection_interval_end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the TrafficSensor collection interval ended. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | +`collection_interval_start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the `TrafficSensor` data began being collected at. The averages and totals contained in the `TrafficSensor` data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | +`collection_interval_end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the `TrafficSensor` collection interval ended. The averages and totals contained in the `TrafficSensor` data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | `average_speed_kph` | Positive Integer | The average speed of vehicles across all lanes over the collection interval in kilometers per hour. | Optional | `volume_vph` | Integer | The rate of vehicles passing by the sensor during the collection interval in vehicles per hour. | Optional | `occupancy_percent` | Postive Number | The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | diff --git a/spec-content/objects/WZDxFeed.md b/spec-content/objects/WZDxFeed.md index 97fe284d..7b61071e 100644 --- a/spec-content/objects/WZDxFeed.md +++ b/spec-content/objects/WZDxFeed.md @@ -7,7 +7,7 @@ Name | Type | Description | Conformance | Notes `road_event_feed_info` | [FeedInfo](/spec-content/objects/FeedInfo.md) | Information about the WZDx feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. `features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | -`bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. +`bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length `2n` where `n` is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. ## Used By WZDx GeoJSON document (one `WZDxFeed` object per file). From 20af9846f8d661eb9ee20d2d95f65e3a8ad93848 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 17:14:10 -0400 Subject: [PATCH 227/388] Add HybridSign to list of possible field device --- spec-content/objects/FieldDeviceFeature.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index 34e5b46b..590c5995 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -8,7 +8,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `id` | String | A unique identifier issued by the data feed provider to identify the field device. It is recommended that this identifier is a Universally Unique IDentifier (UUID) as defined in [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122). | Required | This is a GeoJSON property. `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. -`properties` | One of: [ArrowBoard](/spec-content/objects/ArrowBoard.md), [Camera](/spec-content/objects/Camera.md), [DynamicMessageSign](/spec-content/objects/DynamicMessageSign.md), [FlashingBeacon](/spec-content/objects/FlashingBeacon.md), [LocationMarker](/spec-content/objects/LocationMarker.md), [TrafficSensor](/spec-content/objects/TrafficSensor.md) | The specific details of the field device. | Required | This is a GeoJSON property. +`properties` | One of: [ArrowBoard](/spec-content/objects/ArrowBoard.md), [Camera](/spec-content/objects/Camera.md), [DynamicMessageSign](/spec-content/objects/DynamicMessageSign.md), [FlashingBeacon](/spec-content/objects/FlashingBeacon.md), [HybridSign](/spec-content/objects/HybridSign.md), [LocationMarker](/spec-content/objects/LocationMarker.md), [TrafficSensor](/spec-content/objects/TrafficSensor.md) | The specific details of the field device. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | The geometry of the field device, indicating its location. The Geometry object's `type` property MUST be [Point](https://tools.ietf.org/html/rfc7946#section-3.1.2). | Required | This is a GeoJSON property. `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this field device. Must be an array of length `2n` where `n` is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. From 0f88a741348343909c5e8ed537678583c7f6ae59 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Fri, 29 Oct 2021 17:38:50 -0400 Subject: [PATCH 228/388] Fix minor things in swz device feed json schema --- create-feed/schemas/swz_device_feed_v1.0.json | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/create-feed/schemas/swz_device_feed_v1.0.json b/create-feed/schemas/swz_device_feed_v1.0.json index 2b3ba136..97c82eb1 100644 --- a/create-feed/schemas/swz_device_feed_v1.0.json +++ b/create-feed/schemas/swz_device_feed_v1.0.json @@ -35,7 +35,7 @@ } }, "FeedInfo": { - "title": "Road Event Feed Information", + "title": "WZDx Feed Information", "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", "type": "object", "properties": { @@ -83,7 +83,7 @@ "required": ["update_date", "version", "publisher", "data_sources"] }, "FeedDataSource": { - "title": "Road Event Data Source", + "title": "WZDx Feed Data Source", "description": "Describes information about a specific data source used to build the work zone data feed", "type": "object", "properties": { @@ -197,12 +197,11 @@ }, "FieldDeviceCoreDetails": { "title": "Field Device Core Details", - "description": "the core details—both configuration and current state—of a field device that are shared by all types of field devices", + "description": "The core details—both configuration and current state—of a field device that are shared by all types of field devices", "type": "object", "properties": { "device_type": { - "type": "string", - "description": "The type of field device" + "$ref": "#/definitions/FieldDeviceType" }, "data_source_id": { "description": "Identifies the data source from which the field device information is sourced from", @@ -273,6 +272,7 @@ }, "required": [ "device_types", + "data_source_id", "road_names", "device_status", "update_date", @@ -364,7 +364,8 @@ } }, "required": [ - "core_details" + "core_details", + "function" ] }, "HybridSign": { @@ -463,7 +464,7 @@ } } }, - "reuqired": [ + "required": [ "core_details", "collection_interval_start_date", "collection_interval_end_date" From 0536b38b16fbe2d258dd0c016d0bef5b741ef4a5 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 Oct 2021 22:19:34 -0400 Subject: [PATCH 229/388] Clarity types for traffic sensor metrics --- .DS_Store | Bin 0 -> 6148 bytes create-feed/schemas/swz_device_feed_v1.0.json | 2 +- spec-content/objects/TrafficSensor.md | 6 +++--- spec-content/objects/TrafficSensorLaneData.md | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..977635e1cdec00730b55bfb2d023d0eba260d45f GIT binary patch literal 6148 zcmeHLzfT)67=4BV(!!9jTTkj-q-0>eqQFE|AvUBUnjcLnalHr#5>E)W4wbvz^8!xxfOdkUz=a^Vy$2zk9wr#{r-gd(8?^22f%Vj2_aB zFzJ^vWD~aK5m8Bwt#)Otk)_?C$j}fJ2nzg<3dp+~VIFO~!LIlIUM?)VeQ8#!)wi-b z+e+>8_lKXqoIdmWn`8UCox!(3z2Hb-ravz_=%Mb-j>+G{5iW#cNt<@HJOLlJ^x;fcvW0p-8F^S6!>LGM?JJuE1 eisgR=ZS0GsLQE{?2H8RjKLoT4!372GRDr+2FW`0n literal 0 HcmV?d00001 diff --git a/create-feed/schemas/swz_device_feed_v1.0.json b/create-feed/schemas/swz_device_feed_v1.0.json index 97c82eb1..89314d8d 100644 --- a/create-feed/schemas/swz_device_feed_v1.0.json +++ b/create-feed/schemas/swz_device_feed_v1.0.json @@ -444,7 +444,7 @@ }, "average_speed_kph": { "type": "integer", - "minimum": 1, + "minimum": 0, "description": "The average speed of vehicles across all lanes over the collection interval in kilometers per hour" }, "volume_vph": { diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md index 799bbbeb..95b88854 100644 --- a/spec-content/objects/TrafficSensor.md +++ b/spec-content/objects/TrafficSensor.md @@ -9,9 +9,9 @@ Name | Type | Description | Conformance | Notes `core_details` | [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details of the field device shared by all field devices types, not specific to traffic sensors. | Required | This property appears on all field devices. `collection_interval_start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the `TrafficSensor` data began being collected at. The averages and totals contained in the `TrafficSensor` data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | `collection_interval_end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time where the `TrafficSensor` collection interval ended. The averages and totals contained in the `TrafficSensor` data apply to the inclusive interval of `collection_interval_start_date` to `collection_interval_end_date`. | Required | -`average_speed_kph` | Positive Integer | The average speed of vehicles across all lanes over the collection interval in kilometers per hour. | Optional | -`volume_vph` | Integer | The rate of vehicles passing by the sensor during the collection interval in vehicles per hour. | Optional | -`occupancy_percent` | Postive Number | The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | +`average_speed_kph` | Integer (>= 0) | The average speed of vehicles across all lanes over the collection interval in kilometers per hour. | Optional | +`volume_vph` | Integer (>= 0) | The rate of vehicles passing by the sensor during the collection interval in vehicles per hour. | Optional | +`occupancy_percent` | Integer (>= 0) | The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | `lane_data` | Array; [[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md)] | A list of objects each describing traffic data for a specific lane—each pointing to a road event lane and indiciating the metrics of that lane. | Optional | Lane-level data can only be provided if the data producer has knowledge of the road event to assign the traffic sensor lane data to. ## Used By diff --git a/spec-content/objects/TrafficSensorLaneData.md b/spec-content/objects/TrafficSensorLaneData.md index 525b5a08..96516334 100644 --- a/spec-content/objects/TrafficSensorLaneData.md +++ b/spec-content/objects/TrafficSensorLaneData.md @@ -8,9 +8,9 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `road_event_id` | String | The ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) which the measured lane occurs in. | Required | `lane_order` | Positive Integer | The lane's position in sequence within the road event (specified by `road_event_id`). The value of this property corresponds to the associated [RoadEvent](/spec-content/objects/RoadEvent.md)'s [Lane](/spec-content/objects/Lane.md)'s `order` property. | Required | -`average_speed_kph` | Positive Integer | The average speed of traffic in the lane over the collection interval (in kilometers per hour). | Optional | -`volume_vph` | Integer | The rate of vehicles passing by the sensor in the lane during the collection interval (in vehicles per hour). | Optional | -`occupancy_percent` | Postive Number | The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | +`average_speed_kph` | Integer (>= 0) | The average speed of traffic in the lane over the collection interval (in kilometers per hour). | Optional | +`volume_vph` | Integer (>= 0) | The rate of vehicles passing by the sensor in the lane during the collection interval (in vehicles per hour). | Optional | +`occupancy_percent` | Integer (>= 0) | The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | ## Used By Property | Object From 24ce9288b368ae1cea90de4bc3c8f6c506d6b936 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 Oct 2021 22:20:08 -0400 Subject: [PATCH 230/388] Remove accidentally added file --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 977635e1cdec00730b55bfb2d023d0eba260d45f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHLzfT)67=4BV(!!9jTTkj-q-0>eqQFE|AvUBUnjcLnalHr#5>E)W4wbvz^8!xxfOdkUz=a^Vy$2zk9wr#{r-gd(8?^22f%Vj2_aB zFzJ^vWD~aK5m8Bwt#)Otk)_?C$j}fJ2nzg<3dp+~VIFO~!LIlIUM?)VeQ8#!)wi-b z+e+>8_lKXqoIdmWn`8UCox!(3z2Hb-ravz_=%Mb-j>+G{5iW#cNt<@HJOLlJ^x;fcvW0p-8F^S6!>LGM?JJuE1 eisgR=ZS0GsLQE{?2H8RjKLoT4!372GRDr+2FW`0n From 921fc8a37a31f0bb558e07204d18b8133e05c03d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 Oct 2021 22:32:20 -0400 Subject: [PATCH 231/388] Use singular chevron consistently --- spec-content/enumerated-types/ArrowBoardPattern.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec-content/enumerated-types/ArrowBoardPattern.md b/spec-content/enumerated-types/ArrowBoardPattern.md index 3ce000da..007b924e 100644 --- a/spec-content/enumerated-types/ArrowBoardPattern.md +++ b/spec-content/enumerated-types/ArrowBoardPattern.md @@ -10,9 +10,9 @@ Value | Description `right-arrow-static` | Merge right represented by an arrow pattern (e.g. `-->`) that does not flash or move. `right-arrow-flashing` | Merge right represented by an arrow pattern (e.g. `-->`) that flashes on/off. `right-arrow-sequential` | Merge right represented by an arrow pattern (e.g. `-->`) that is displayed in a progressing sequence (e.g. `>` `->` `-->` or `-` `--` `-->`). -`right-chevrons-static` | Merge right represented by a pattern of chevrons (e.g. `>>>`) that does not flash or move. -`right-chevrons-flashing` | Merge right represented by a pattern of chevrons (e.g. `>>>`) that flashes on/off. -`right-chevrons-sequential` | Merge right represented by a pattern of chevrons that is displayed in a progressing sequence. +`right-chevron-static` | Merge right represented by a pattern of chevrons (e.g. `>>>`) that does not flash or move. +`right-chevron-flashing` | Merge right represented by a pattern of chevrons (e.g. `>>>`) that flashes on/off. +`right-chevron-sequential` | Merge right represented by a pattern of chevrons that is displayed in a progressing sequence. `left-arrow-static` | Merge left represented by an arrow pattern (e.g. `<--`) that does not flash or move. `left-arrow-flashing` | Merge left represented by an arrow pattern (e.g. `<--`) that flashes on/off. `left-arrow-sequential` | Merge left represented by an arrow pattern (e.g. `<--`) that is displayed in a progressing sequence (e.g. `<` `<-` `<--` or `-` `--` `<--`). From 366ce2282ce0fa3a7d9f0cb80d0e03d5ad372787 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 29 Oct 2021 22:51:29 -0400 Subject: [PATCH 232/388] Use separate row for each object --- spec-content/enumerated-types/EventStatus.md | 3 ++- spec-content/enumerated-types/TimeVerification.md | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/spec-content/enumerated-types/EventStatus.md b/spec-content/enumerated-types/EventStatus.md index f00280a4..26c92ebf 100644 --- a/spec-content/enumerated-types/EventStatus.md +++ b/spec-content/enumerated-types/EventStatus.md @@ -13,4 +13,5 @@ Value | Description ## Used By Property | Object --- | --- -`event_status` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) +`event_status` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) +`event_status` | [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) diff --git a/spec-content/enumerated-types/TimeVerification.md b/spec-content/enumerated-types/TimeVerification.md index 13a9e5c3..8275a784 100644 --- a/spec-content/enumerated-types/TimeVerification.md +++ b/spec-content/enumerated-types/TimeVerification.md @@ -10,5 +10,7 @@ Value | Description ## Used By Property | Object --- | --- -`start_date_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) -`end_date_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) +`start_date_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) +`start_date_accuracy` | [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) +`end_date_accuracy` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) +`end_date_accuracy` | [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) From 7f86dc3f16e555e1ddf2007f8557f6f9de401f72 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Sat, 30 Oct 2021 00:00:40 -0400 Subject: [PATCH 233/388] Update create feed readme --- create-feed/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/create-feed/README.md b/create-feed/README.md index d2572b8d..f0fd9c34 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -25,7 +25,8 @@ The tables below detail the specificaton's content and describe the data used to ### WZDx Work Zone (Road Event) Information -- The [RoadEvent](/spec-content/objects/RoadEvent.md) object describes a work zone event. +- The [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object describes a work zone event. +- The [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) object describes a work zone event. - The [TypeOfWork](/spec-content/objects/TypeOfWork.md) object describes the work taking place along the road. If applicable, it indicates if the work changes the roadway's architecture. - The [Lane](/spec-content/objects/Lane.md) object identifies and describes individual lanes within an event. - The [LaneRestriction](/spec-content/objects/LaneRestriction.md) object describes restrictions for identified lanes. From 183164ca04e91889259c1b84e42fa5ccf46422aa Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 1 Nov 2021 14:52:28 -0400 Subject: [PATCH 234/388] Create RoadRestrictionFeed.md --- spec-content/objects/RoadRestrictionFeed.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 spec-content/objects/RoadRestrictionFeed.md diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md new file mode 100644 index 00000000..7d88b951 --- /dev/null +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -0,0 +1,13 @@ +# RoadRestrictionFeed Object (GeoJSON FeatureCollection) +The `RoadRestrictionFeed` object is the root (highest level) object of a Road Restriction (RR) feed. There is one RR feed object per Road Restriction GeoJSON document. The `RRFeed` is an instance of a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`road_event_feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. +`type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. +`features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | +`bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. + +## Used By +Road Restriction GeoJSON document (one `RRxFeed` object per file). From a71624b73cfc5c003537bfbbcdad7b14d766ebe5 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Mon, 1 Nov 2021 15:05:57 -0400 Subject: [PATCH 235/388] Update and rename RestrictionEvent.md to RestrictionRoadEvent.md --- .../{RestrictionEvent.md => RestrictionRoadEvent.md} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename spec-content/objects/{RestrictionEvent.md => RestrictionRoadEvent.md} (69%) diff --git a/spec-content/objects/RestrictionEvent.md b/spec-content/objects/RestrictionRoadEvent.md similarity index 69% rename from spec-content/objects/RestrictionEvent.md rename to spec-content/objects/RestrictionRoadEvent.md index f83cbac3..450d92f0 100644 --- a/spec-content/objects/RestrictionEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -1,12 +1,12 @@ -# RestrictionEvent Object -The `RestrictionEvent` object contains information that describes where, when, and what restrictions are placed along a road segment. +# RestrictionRoadEvent Object +The `RestrictionRoadEvent` object contains information that describes where, when, and what restrictions are placed along a road segment. Restrictions are policies limiting road use. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`road_event` | [RoadEvent](/spec-content/enumerated-types/RoadEvent.md) | Describes the basic characterisitics of a Road Event. | Required | +`road_event` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | Describes the basic characterisitics of a Road Event. | Required | `restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | From 78db4312eff77dcb6e42b1a279b587f8783221ce Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 1 Nov 2021 15:18:33 -0400 Subject: [PATCH 236/388] Update RoadRestrictionFeed.md --- spec-content/objects/RoadRestrictionFeed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index 7d88b951..8dcc48ff 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -1,5 +1,5 @@ # RoadRestrictionFeed Object (GeoJSON FeatureCollection) -The `RoadRestrictionFeed` object is the root (highest level) object of a Road Restriction (RR) feed. There is one RR feed object per Road Restriction GeoJSON document. The `RRFeed` is an instance of a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. +The `RoadRestrictionFeed` object is the root (highest level) object of a Road Restriction feed. There is one Rpad Restriction Feed object per Road Restriction GeoJSON document. The `RoadRestrictionFeed` is an instance of a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. ## Properties Name | Type | Description | Conformance | Notes From 4e81e0f94454d2b90d75a89d08bc586833c937b4 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 1 Nov 2021 15:19:14 -0400 Subject: [PATCH 237/388] Update RoadRestrictionFeed.md --- spec-content/objects/RoadRestrictionFeed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index 8dcc48ff..acbdcebe 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -1,5 +1,5 @@ # RoadRestrictionFeed Object (GeoJSON FeatureCollection) -The `RoadRestrictionFeed` object is the root (highest level) object of a Road Restriction feed. There is one Rpad Restriction Feed object per Road Restriction GeoJSON document. The `RoadRestrictionFeed` is an instance of a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. +The `RoadRestrictionFeed` object is the root (highest level) object of a Road Restriction feed. There is one Road Restriction Feed object per Road Restriction GeoJSON document. The `RoadRestrictionFeed` is an instance of a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. ## Properties Name | Type | Description | Conformance | Notes From e42e1fc901e2dd5962795993ef125569ff41c4d4 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Mon, 1 Nov 2021 16:32:34 -0400 Subject: [PATCH 238/388] Rename road_event property to core_details --- spec-content/objects/RestrictionRoadEvent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RestrictionRoadEvent.md b/spec-content/objects/RestrictionRoadEvent.md index 450d92f0..cc5be2dc 100644 --- a/spec-content/objects/RestrictionRoadEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -6,7 +6,7 @@ Restrictions are policies limiting road use. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`road_event` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | Describes the basic characterisitics of a Road Event. | Required | +`core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | Describes the basic characterisitics of a Road Event. | Required | `restrictions` | Array; \[[RoadRestriction](/spec-content/enumerated-types/RoadRestriction.md)\] | Zero or more road restrictions applying to the work zone road segment associated with the work zone. | Optional | These are included as flags rather than detailed restrictions. Detailed restrictions are coded to specific lanes. `lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | From 81757a81ad578605f83eb0acd8891ee514809188 Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 1 Nov 2021 16:37:14 -0400 Subject: [PATCH 239/388] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index ccc3eed6..a5f05218 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) - [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) - [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) + - [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) - [TypeOfWork](/spec-content/objects/TypeOfWork.md) - [Lane](/spec-content/objects/Lane.md) - [LaneRestriction](/spec-content/objects/LaneRestriction.md) From 35603d83f6051afaf6129bd24c0f67da22c2cf0e Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 1 Nov 2021 16:42:59 -0400 Subject: [PATCH 240/388] Update README.md --- spec-content/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spec-content/README.md b/spec-content/README.md index 1a151dea..20f94ed4 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -32,12 +32,14 @@ Object | Description [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. [WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. +[RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) | The root (highest-level) object of a Road Restriction Feed GeoJSON document. #### Road Events Object | Description --- | --- [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | A detour on a roadway. -[WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. +[WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. +[RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | A road event limiting how the road can be used. ### Object Diagram The object diagram below indicates the relationship between the data objects. From 641720168ba9f504438c52d2ae30f8a118b5d52c Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Mon, 1 Nov 2021 16:56:34 -0400 Subject: [PATCH 241/388] Add new schema for RoadRestrictionFeed --- .../schemas/RoadRestriction_v1.0_feed.json | 414 ++++++++++++++++++ 1 file changed, 414 insertions(+) create mode 100644 create-feed/schemas/RoadRestriction_v1.0_feed.json diff --git a/create-feed/schemas/RoadRestriction_v1.0_feed.json b/create-feed/schemas/RoadRestriction_v1.0_feed.json new file mode 100644 index 00000000..e5d7ea16 --- /dev/null +++ b/create-feed/schemas/RoadRestriction_v1.0_feed.json @@ -0,0 +1,414 @@ +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/create-feed/schemas/wzdx_v4.0_feed.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Road Restriction v1.0 Feed", + "description": "The GeoJSON output of a Road Restriction v1.0 data feed", + "type": "object", + "properties": { + "road_event_feed_info": { + "$ref": "#/definitions/RoadEventFeedInfo" + }, + "type": { + "description": "The GeoJSON type", + "enum": ["FeatureCollection"] + }, + "features": { + "description": "An array of GeoJSON Feature objects which represent WZDx restriction road events", + "type": "array", + "items": { + "$ref": "#/definitions/RoadEventFeature" + } + }, + "bbox": { + "$ref": "#/definitions/BoundingBox" + } + }, + "required": ["road_event_feed_info", "type", "features"], + "definitions": { + "BoundingBox": { + "title": "GeoJSON Bounding Box", + "description": "Information on the coordinate range for a Geometry, Feature (RoadEventFeature), or FeatureCollection (WZDxFeed)", + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } + }, + "RoadEventFeedInfo": { + "title": "Road Event Feed Information", + "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", + "type": "object", + "properties": { + "publisher": { + "description": "The organization responsible for publishing the feed", + "type": "string" + }, + "contact_name": { + "description": "The name of the individual or group responsible for the data feed", + "type": "string" + }, + "contact_email": { + "description": "The email address of the individual or group responsible for the data feed", + "type": "string", + "format": "email" + }, + "update_frequency": { + "description": "The frequency in seconds at which the data feed is updated", + "type": "integer", + "minimum": 1 + }, + "update_date": { + "description": "The UTC date and time when the GeoJSON file (representing the instance of the feed) was generated", + "type": "string", + "format": "date-time" + }, + "version": { + "description": "The WZDx specification version used to create the data feed, in 'major.minor' format", + "type": "string", + "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$" + }, + "license": { + "description": "The URL of the license that applies to the data in the WZDx feed. This *must* be the string \"https://creativecommons.org/publicdomain/zero/1.0/\"", + "enum": ["https://creativecommons.org/publicdomain/zero/1.0/"] + }, + "data_sources": { + "description": "A list of specific data sources for the road event data in the feed", + "type": "array", + "items": { + "$ref": "#/definitions/RoadEventDataSource" + }, + "minItems": 1 + } + }, + "required": ["update_date", "version", "publisher", "data_sources"] + }, + "RoadEventDataSource": { + "title": "Road Event Data Source", + "description": "Describes information about a specific data source used to build the work zone data feed", + "type": "object", + "properties": { + "data_source_id": { + "description": "Unique identifier for the organization providing work zone data", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization for the authoritative source of the work zone data", + "type": "string" + }, + "contact_name": { + "description": "The name of the individual or group responsible for the data source", + "type": "string" + }, + "contact_email": { + "description": "The email address of the individual or group responsible for the data source", + "type": "string", + "format": "email" + }, + "update_frequency": { + "description": "The frequency in seconds at which the data source is updated", + "type": "integer", + "minimum": 1 + }, + "update_date": { + "description": "The UTC date and time when the data source was last updated", + "type": "string", + "format": "date-time" + }, + "location_verify_method": { + "description": "The method used to verify the accuracy of the location information", + "type": "string" + }, + "lrs_type": { + "description": "Describes the type of linear referencing system used for the milepost measurements", + "type": "string" + }, + "lrs_url": { + "description": "A URL where additional information on the LRS information and transformation information is stored", + "type": "string", + "format": "uri" + } + }, + "required": ["data_source_id", "organization_name"] + }, + "RoadEventFeature": { + "title": "Road Event Feature (GeoJSON Feature)", + "description": "The container object for a specific WZDx road event (only RestrictionRoadEvents in the RoadRestrictionFeed); an instance of a GeoJSON Feature", + "type": "object", + "properties": { + "id": { + "description": "A unique identifier issued by the data feed provider to identify the WZDx road event", + "type": "string" + }, + "type": { + "description": "The GeoJSON object type; must be 'Feature'", + "enum": ["Feature"] + }, + "properties": { + "$ref": "#/definitions/RestrictionRoadEvent" + }, + "geometry": { + "oneOf": [ + { + "$ref": "https://geojson.org/schema/LineString.json" + }, + { + "$ref": "https://geojson.org/schema/MultiPoint.json" + } + ] + }, + "bbox": { + "$ref": "#/definitions/BoundingBox" + } + }, + "required": ["type","properties","geometry", "id"] + }, + "RoadEventCoreDetails": { + "title": "Road Event Core Details", + "description": "The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events", + "type": "object", + "properties": { + "data_source_id": { + "description": "Identifies the data source from which the road event data is sourced from", + "type": "string" + }, + "event_type": { + "$ref": "#/definitions/EventType" + }, + "relationship": { + "$ref": "#/definitions/Relationship" + }, + "road_names": { + "description": "A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "direction": { + "$ref": "#/definitions/Direction" + }, + "description": { + "description": "Short free text description of the road event", + "type": "string" + }, + "creation_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was created (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "update_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was last updated (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + } + }, + "required": [ + "event_type", + "data_source_id", + "direction", + "road_names" + ] + }, + "RestrictionRoadEvent": { + "title": "Restriction Road Event", + "description": "Descibes a detour on a roadway", + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + }, + "restrictions": { + "description": "A list of zero or more restrictions applying to the road event.", + "type": "array", + "items": { + "$ref": "#/definitions/Restriction" + } + }, + "lanes": { + "description": "A list of individual lanes within a road event (roadway segment)", + "type": "array", + "items": { + "$ref": "#/definitions/Lane" + } + } + }, + "required": ["core_details"], + "anyOf": [ + { "required": ["restrictions"] }, + { "required": ["lanes"] } + ] + }, + "Relationship": { + "title": "Relationship", + "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", + "type": "object", + "properties": { + "first": { + "description": "Indicates the first (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "next": { + "description": "Indicates the next (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "parents": { + "description": "Indicates entities that the road event with this relationship is a part of, such as a work zone project or phase. Values can but do not have to correspond to a WZDx entity", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "children": { + "description": "Indicates entities that are part of the road event with this relationship, such as a detour or piece of equipment. Values can but do not have to correspond to a WZDx entity", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + } + } + }, + "Lane": { + "title": "Lane", + "description": "An individual lane within a road event", + "type": "object", + "properties": { + "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/LaneStatus" + }, + "type": { + "$ref": "#/definitions/LaneType" + }, + "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": 1 + }, + "restrictions": { + "description": "A list of restrictions specific to the lane", + "type": "array", + "items": { + "$ref": "#/definitions/Restriction" + } + } + }, + "required": ["status", "type", "order"] + }, + "Restriction": { + "title": "Restriction", + "description": "A restriction on a roadway or lane, including type and value", + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/RestrictionType" + }, + "value": { + "type": "number" + }, + "unit": { + "$ref": "#/definitions/UnitOfMeasurement" + } + }, + "required": ["type"], + "dependencies": { + "value": ["unit"] + } + }, + "EventType": { + "title": "Road Event Type Enumerated Type", + "description": "The type of WZDx road event", + "enum": ["restriction"] + }, + "Direction": { + "title": "Direction Enumerated Type", + "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", + "enum": ["northbound", "eastbound", "southbound", "westbound"] + }, + "EventStatus": { + "title": "Event Status Enumerated Type", + "description": "The status of the road event", + "enum": ["planned", "pending", "active", "completed", "cancelled"] + }, + "RestrictionType": { + "title": "Restriction Type Enumerated Type", + "description": "The type of vehicle restriction on a roadway", + "enum": [ + "no-trucks", + "travel-peak-hours-only", + "hov-3", + "hov-2", + "no-parking", + "reduced-width", + "reduced-height", + "reduced-length", + "reduced-weight", + "axle-load-limit", + "gross-weight-limit", + "towing-prohibited", + "permitted-oversize-loads-prohibited", + "local-access-only" + ] + }, + "LaneStatus": { + "title": "Lane Status Enumerated Type", + "description": "The status of the lane for the traveling public", + "enum": ["open", "closed", "shift-left", "shift-right", "merge-left", "merge-right", "alternating-one-way", "alternating-flow"] + }, + "LaneType": { + "title": "Lane Type Enumerated Type", + "description": "An indication of the type of lane or shoulder", + "enum": [ + "lane", + "right-turning-lane", + "left-turning-lane", + "right-exit-lane", + "left-exit-lane", + "right-entrance-lane", + "left-entrance-lane", + "sidewalk", + "bike-lane", + "alternating-flow-lane", + "shoulder", + "hov-lane", + "reversible-lane", + "center-left-turn-lane", + "left-lane", + "right-lane", + "middle-lane", + "center-lane", + "right-shoulder", + "left-shoulder", + "right-merging-lane", + "left-merging-lane", + "right-exit-ramp", + "right-second-exit-ramp", + "left-exit-ramp", + "left-second-exit-ramp", + "right-entrance-ramp", + "right-second-entrance-ramp", + "left-entrance-ramp", + "left-second-entrance-ramp" + ] + }, + "UnitOfMeasurement": { + "title": "Unit of Measurement Enumerated Type", + "description": "Unit of measurement, used when providing a unit to accompany a value", + "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] + } + } +} \ No newline at end of file From d91c0ffd9ad76c05d4eb0dac8ae44666d46ce7bd Mon Sep 17 00:00:00 2001 From: Derald Dudley Date: Mon, 1 Nov 2021 17:00:42 -0400 Subject: [PATCH 242/388] Update RestrictionRoadEvent.md --- spec-content/objects/RestrictionRoadEvent.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spec-content/objects/RestrictionRoadEvent.md b/spec-content/objects/RestrictionRoadEvent.md index cc5be2dc..b7437505 100644 --- a/spec-content/objects/RestrictionRoadEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -1,7 +1,5 @@ # RestrictionRoadEvent Object -The `RestrictionRoadEvent` object contains information that describes where, when, and what restrictions are placed along a road segment. - -Restrictions are policies limiting road use. +The `RestrictionRoadEvent` object that describes where, when, and what restrictions are placed along a road segment. Restrictions are policies limiting road use. ## Properties Name | Type | Description | Conformance | Notes From ec39c3c83177150ead8e99a8d36052bfd1bdcebf Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Mon, 1 Nov 2021 17:28:22 -0400 Subject: [PATCH 243/388] Add RestrictionRoadEvent as option for RoadEventFeature --- spec-content/objects/RoadEventFeature.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index b8478ce7..8874b1f3 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -6,7 +6,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `id` | String | A unique identifier issued by the data feed provider to identify the WZDx road event. | Conditional; Required if road event's ID is not provided via the `road_event_id` property on the road event (detailed in the `properties` property). | In prior versions of WZDx, the road event ID was given by a `road_event_id` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object. Now, `road_event_id` is deprecated and this `id` should be used instead. This property will be required in a future version of WZDx. This is a GeoJSON property. `type` | String; `"Feature"` | The GeoJSON object type. This MUST be the string `Feature`. | Required | This is a GeoJSON property. -`properties` | One of: [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | The specific details of the road event. | Required | This is a GeoJSON property. +`properties` | One of: [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | The specific details of the road event. | Required | This is a GeoJSON property. `geometry` | GeoJSON [Geometry](https://tools.ietf.org/html/rfc7946#section-3.1) object with `type` of [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3) | The geometry of the road event. The Geometry object's `type` property MUST be [LineString](https://tools.ietf.org/html/rfc7946#section-3.1.4) or [MultiPoint](https://tools.ietf.org/html/rfc7946#section-3.1.3). `LineString` allows specifying the entire road event path and should be preferred. `MultiPoint` should be used when only the start and end coordinates are known. | Required | This is a GeoJSON property. `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for this RoadEventFeature. Must be an array of length 2*n where n is the number of dimensions represented in the `geometry` property, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of the `geometry`. | Optional | This is a GeoJSON property. @@ -14,3 +14,4 @@ Name | Type | Description | Conformance | Notes Property | Object --- | --- `features` | [WZDx Feed](/spec-content/objects/WZDxFeed.md) +`features` | [RoadRestrictionFeed](spec-content/objects/RoadRestrictionFeed.md) From 3ed0e26fbc79dea235293a0c77edbee5ca1d83ee Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:06:05 -0400 Subject: [PATCH 244/388] Remove accidentally added file --- .DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 3fb20fd664ae291f747a5a4bf30b18cec4275c78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHLJx?1!5Pcht;1~*&3Q-+h8X}n%iUXXE2GK`}KVk=QISboOnp`CE1JWWPMO2gs zen5zlHhm%rN{al6yxCpHyVz&a1Vv~^+Ie@oGrRBJeT>%t)JDHi0pe3Z-c`{I*I_UHkfEck`8;@l#Avv+d#A0rc zBQ#}Fi6&LqErv4b?2m0+Vlg*p(xL3;L)n#;-JvMGI_HmdI8gz*k_(oX$)A ze^$Kz_mjd|P#`F9uM|*Gb*H+)OR}|f~(#%wRx#3U{^s8i@{Io1bKisgR=Z5)f` XfS6d!4YG$8eh6q8f(r`VsRF+NnE2jE From 2598c1fd543711653c458c9f190f2650c3eb4796 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:09:55 -0400 Subject: [PATCH 245/388] Update schema --- ...eed.json => RoadRestrictionFeed_v1.0.json} | 74 +++++++++---------- 1 file changed, 35 insertions(+), 39 deletions(-) rename create-feed/schemas/{RoadRestriction_v1.0_feed.json => RoadRestrictionFeed_v1.0.json} (93%) diff --git a/create-feed/schemas/RoadRestriction_v1.0_feed.json b/create-feed/schemas/RoadRestrictionFeed_v1.0.json similarity index 93% rename from create-feed/schemas/RoadRestriction_v1.0_feed.json rename to create-feed/schemas/RoadRestrictionFeed_v1.0.json index e5d7ea16..a85ddf16 100644 --- a/create-feed/schemas/RoadRestriction_v1.0_feed.json +++ b/create-feed/schemas/RoadRestrictionFeed_v1.0.json @@ -1,8 +1,8 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/create-feed/schemas/wzdx_v4.0_feed.json", + "$id": "TODO PERMALINK", "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Road Restriction v1.0 Feed", - "description": "The GeoJSON output of a Road Restriction v1.0 data feed", + "title": "WZDx Road Restriction Feed v1.0", + "description": "The GeoJSON output of a WZDx road restriction data feed (v1.0)", "type": "object", "properties": { "road_event_feed_info": { @@ -132,7 +132,7 @@ }, "RoadEventFeature": { "title": "Road Event Feature (GeoJSON Feature)", - "description": "The container object for a specific WZDx road event (only RestrictionRoadEvents in the RoadRestrictionFeed); an instance of a GeoJSON Feature", + "description": "The container object for a specific WZDx road event (only RestrictionRoadEvent in the RoadRestrictionFeed); a GeoJSON Feature", "type": "object", "properties": { "id": { @@ -162,6 +162,35 @@ }, "required": ["type","properties","geometry", "id"] }, + "RestrictionRoadEvent": { + "title": "Restriction Road Event", + "description": "Descibes a detour on a roadway", + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + }, + "restrictions": { + "description": "A list of zero or more restrictions applying to the road event.", + "type": "array", + "items": { + "$ref": "#/definitions/Restriction" + } + }, + "lanes": { + "description": "A list of individual lanes within a road event (roadway segment)", + "type": "array", + "items": { + "$ref": "#/definitions/Lane" + } + } + }, + "required": ["core_details"], + "anyOf": [ + { "required": ["restrictions"] }, + { "required": ["lanes"] } + ] + }, "RoadEventCoreDetails": { "title": "Road Event Core Details", "description": "The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events", @@ -172,7 +201,8 @@ "type": "string" }, "event_type": { - "$ref": "#/definitions/EventType" + "description": "The type of WZDx road event", + "enum": ["restriction"] }, "relationship": { "$ref": "#/definitions/Relationship" @@ -209,35 +239,6 @@ "direction", "road_names" ] - }, - "RestrictionRoadEvent": { - "title": "Restriction Road Event", - "description": "Descibes a detour on a roadway", - "type": "object", - "properties": { - "core_details": { - "$ref": "#/definitions/RoadEventCoreDetails" - }, - "restrictions": { - "description": "A list of zero or more restrictions applying to the road event.", - "type": "array", - "items": { - "$ref": "#/definitions/Restriction" - } - }, - "lanes": { - "description": "A list of individual lanes within a road event (roadway segment)", - "type": "array", - "items": { - "$ref": "#/definitions/Lane" - } - } - }, - "required": ["core_details"], - "anyOf": [ - { "required": ["restrictions"] }, - { "required": ["lanes"] } - ] }, "Relationship": { "title": "Relationship", @@ -329,11 +330,6 @@ "value": ["unit"] } }, - "EventType": { - "title": "Road Event Type Enumerated Type", - "description": "The type of WZDx road event", - "enum": ["restriction"] - }, "Direction": { "title": "Direction Enumerated Type", "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", From ea82e155861f67400a766ac08a3cef704184e7e8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:15:52 -0400 Subject: [PATCH 246/388] Use feed_info prop naming to be consistent with SwzDeviceFeed --- create-feed/schemas/RoadRestrictionFeed_v1.0.json | 2 +- spec-content/objects/RoadEventFeedInfo.md | 1 + spec-content/objects/RoadRestrictionFeed.md | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/create-feed/schemas/RoadRestrictionFeed_v1.0.json b/create-feed/schemas/RoadRestrictionFeed_v1.0.json index a85ddf16..2d0a1851 100644 --- a/create-feed/schemas/RoadRestrictionFeed_v1.0.json +++ b/create-feed/schemas/RoadRestrictionFeed_v1.0.json @@ -5,7 +5,7 @@ "description": "The GeoJSON output of a WZDx road restriction data feed (v1.0)", "type": "object", "properties": { - "road_event_feed_info": { + "feed_info": { "$ref": "#/definitions/RoadEventFeedInfo" }, "type": { diff --git a/spec-content/objects/RoadEventFeedInfo.md b/spec-content/objects/RoadEventFeedInfo.md index f79a7dc5..0c5a175f 100644 --- a/spec-content/objects/RoadEventFeedInfo.md +++ b/spec-content/objects/RoadEventFeedInfo.md @@ -17,3 +17,4 @@ Name | Type | Description | Conformance | Notes Property | Object --- | --- `road_event_feed_info` | [WZDxFeed](/spec-content/objects/WZDxFeed.md) +`feed_info` | [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index acbdcebe..50bcc0ff 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -4,7 +4,7 @@ The `RoadRestrictionFeed` object is the root (highest level) object of a Road Re ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`road_event_feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. +`feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. `features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. From 1c441436c81b828e14c7f8cc6e41829367bd05c5 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:23:54 -0400 Subject: [PATCH 247/388] Fix schema RestrictionRoadEvent description --- create-feed/schemas/RoadRestrictionFeed_v1.0.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/schemas/RoadRestrictionFeed_v1.0.json b/create-feed/schemas/RoadRestrictionFeed_v1.0.json index 2d0a1851..9313a21a 100644 --- a/create-feed/schemas/RoadRestrictionFeed_v1.0.json +++ b/create-feed/schemas/RoadRestrictionFeed_v1.0.json @@ -164,7 +164,7 @@ }, "RestrictionRoadEvent": { "title": "Restriction Road Event", - "description": "Descibes a detour on a roadway", + "description": "Describes a specific restriction on a roadway. A restriction is a policy that limits how a road can be used", "type": "object", "properties": { "core_details": { From 543d280df573beff337f4b4734df350f756ce760 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:24:18 -0400 Subject: [PATCH 248/388] Update description of new objects --- spec-content/objects/RestrictionRoadEvent.md | 8 +++++--- spec-content/objects/RoadRestrictionFeed.md | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/spec-content/objects/RestrictionRoadEvent.md b/spec-content/objects/RestrictionRoadEvent.md index 4083bd46..b12eb421 100644 --- a/spec-content/objects/RestrictionRoadEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -1,5 +1,9 @@ # RestrictionRoadEvent Object -The `RestrictionRoadEvent` object that describes where, when, and what restrictions are placed along a road segment. Restrictions are policies limiting road use. +The `RestrictionRoadEvent` object describes a specific restriction on a roadway. A restriction is a policy that limits how a road can be used. The `RestrictionRoadEvent` is a linear road event intended to represent persistent restrictions without a defined start or event date, such as bridge clearances. + +The `RestrictionRoadEvent` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). + +For representing restrictions due to road work, see the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [WZDxFeed](/spec-content/objects/WZDxFeed.md). ## Properties Name | Type | Description | Conformance | Notes @@ -13,5 +17,3 @@ Property | Object --- | --- `properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) -## Important Notes -None diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index 50bcc0ff..a6a6d6eb 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -1,5 +1,5 @@ # RoadRestrictionFeed Object (GeoJSON FeatureCollection) -The `RoadRestrictionFeed` object is the root (highest level) object of a Road Restriction feed. There is one Road Restriction Feed object per Road Restriction GeoJSON document. The `RoadRestrictionFeed` is an instance of a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. +The `RoadRestrictionFeed` object is the root (highest level) object of a WZDx road restriction feed. There is one `RoadRestrictionFeed` object per road restriction feed GeoJSON document. The `RoadRestrictionFeed` is a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3). ## Properties Name | Type | Description | Conformance | Notes From faf1cf053af045122e95e0e38c8f3cb94a4e4760 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:30:48 -0400 Subject: [PATCH 249/388] Update description of RestrictionRoadEvent --- create-feed/schemas/RoadRestrictionFeed_v1.0.json | 2 +- spec-content/README.md | 2 +- spec-content/objects/RestrictionRoadEvent.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/create-feed/schemas/RoadRestrictionFeed_v1.0.json b/create-feed/schemas/RoadRestrictionFeed_v1.0.json index 9313a21a..3e767847 100644 --- a/create-feed/schemas/RoadRestrictionFeed_v1.0.json +++ b/create-feed/schemas/RoadRestrictionFeed_v1.0.json @@ -164,7 +164,7 @@ }, "RestrictionRoadEvent": { "title": "Restriction Road Event", - "description": "Describes a specific restriction on a roadway. A restriction is a policy that limits how a road can be used", + "description": "A road event describing a section of roadway and the limitations of how that section can be used.", "type": "object", "properties": { "core_details": { diff --git a/spec-content/README.md b/spec-content/README.md index 331e30b4..d34b6069 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -39,7 +39,7 @@ Object | Description --- | --- [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | A detour on a roadway. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. -[RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | A road event limiting how the road can be used. +[RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | describes a section of roadway and the limitations of how that section can be used. ### Object Diagram The object diagram below indicates the relationship between the data objects. diff --git a/spec-content/objects/RestrictionRoadEvent.md b/spec-content/objects/RestrictionRoadEvent.md index b12eb421..f9e566c3 100644 --- a/spec-content/objects/RestrictionRoadEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -1,5 +1,5 @@ # RestrictionRoadEvent Object -The `RestrictionRoadEvent` object describes a specific restriction on a roadway. A restriction is a policy that limits how a road can be used. The `RestrictionRoadEvent` is a linear road event intended to represent persistent restrictions without a defined start or event date, such as bridge clearances. +The `RestrictionRoadEvent` object describes one or more restrictions on a section of a roadway. It describes the location of the road section and the limitations on how it can be used. The `RestrictionRoadEvent` is a linear road event intended to represent persistent restrictions without a defined start or event date, such as bridge clearances. The `RestrictionRoadEvent` is a type of road event; it has a `core_details` property which contains the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) and exists within a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). From 30ef6a9d0d04c5ff435c67e2694c7cda6d93bb5a Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:32:12 -0400 Subject: [PATCH 250/388] Auto format JSON schema --- .../schemas/RoadRestrictionFeed_v1.0.json | 112 ++++++++++++++---- 1 file changed, 91 insertions(+), 21 deletions(-) diff --git a/create-feed/schemas/RoadRestrictionFeed_v1.0.json b/create-feed/schemas/RoadRestrictionFeed_v1.0.json index 3e767847..a19ea8e0 100644 --- a/create-feed/schemas/RoadRestrictionFeed_v1.0.json +++ b/create-feed/schemas/RoadRestrictionFeed_v1.0.json @@ -10,7 +10,9 @@ }, "type": { "description": "The GeoJSON type", - "enum": ["FeatureCollection"] + "enum": [ + "FeatureCollection" + ] }, "features": { "description": "An array of GeoJSON Feature objects which represent WZDx restriction road events", @@ -23,7 +25,11 @@ "$ref": "#/definitions/BoundingBox" } }, - "required": ["road_event_feed_info", "type", "features"], + "required": [ + "road_event_feed_info", + "type", + "features" + ], "definitions": { "BoundingBox": { "title": "GeoJSON Bounding Box", @@ -69,7 +75,9 @@ }, "license": { "description": "The URL of the license that applies to the data in the WZDx feed. This *must* be the string \"https://creativecommons.org/publicdomain/zero/1.0/\"", - "enum": ["https://creativecommons.org/publicdomain/zero/1.0/"] + "enum": [ + "https://creativecommons.org/publicdomain/zero/1.0/" + ] }, "data_sources": { "description": "A list of specific data sources for the road event data in the feed", @@ -80,7 +88,12 @@ "minItems": 1 } }, - "required": ["update_date", "version", "publisher", "data_sources"] + "required": [ + "update_date", + "version", + "publisher", + "data_sources" + ] }, "RoadEventDataSource": { "title": "Road Event Data Source", @@ -128,7 +141,10 @@ "format": "uri" } }, - "required": ["data_source_id", "organization_name"] + "required": [ + "data_source_id", + "organization_name" + ] }, "RoadEventFeature": { "title": "Road Event Feature (GeoJSON Feature)", @@ -141,10 +157,12 @@ }, "type": { "description": "The GeoJSON object type; must be 'Feature'", - "enum": ["Feature"] + "enum": [ + "Feature" + ] }, "properties": { - "$ref": "#/definitions/RestrictionRoadEvent" + "$ref": "#/definitions/RestrictionRoadEvent" }, "geometry": { "oneOf": [ @@ -160,7 +178,12 @@ "$ref": "#/definitions/BoundingBox" } }, - "required": ["type","properties","geometry", "id"] + "required": [ + "type", + "properties", + "geometry", + "id" + ] }, "RestrictionRoadEvent": { "title": "Restriction Road Event", @@ -185,10 +208,20 @@ } } }, - "required": ["core_details"], - "anyOf": [ - { "required": ["restrictions"] }, - { "required": ["lanes"] } + "required": [ + "core_details" + ], + "anyOf": [ + { + "required": [ + "restrictions" + ] + }, + { + "required": [ + "lanes" + ] + } ] }, "RoadEventCoreDetails": { @@ -202,7 +235,9 @@ }, "event_type": { "description": "The type of WZDx road event", - "enum": ["restriction"] + "enum": [ + "restriction" + ] }, "relationship": { "$ref": "#/definitions/Relationship" @@ -240,7 +275,7 @@ "road_names" ] }, - "Relationship": { + "Relationship": { "title": "Relationship", "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", "type": "object", @@ -308,7 +343,11 @@ } } }, - "required": ["status", "type", "order"] + "required": [ + "status", + "type", + "order" + ] }, "Restriction": { "title": "Restriction", @@ -325,20 +364,35 @@ "$ref": "#/definitions/UnitOfMeasurement" } }, - "required": ["type"], + "required": [ + "type" + ], "dependencies": { - "value": ["unit"] + "value": [ + "unit" + ] } }, "Direction": { "title": "Direction Enumerated Type", "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", - "enum": ["northbound", "eastbound", "southbound", "westbound"] + "enum": [ + "northbound", + "eastbound", + "southbound", + "westbound" + ] }, "EventStatus": { "title": "Event Status Enumerated Type", "description": "The status of the road event", - "enum": ["planned", "pending", "active", "completed", "cancelled"] + "enum": [ + "planned", + "pending", + "active", + "completed", + "cancelled" + ] }, "RestrictionType": { "title": "Restriction Type Enumerated Type", @@ -363,7 +417,16 @@ "LaneStatus": { "title": "Lane Status Enumerated Type", "description": "The status of the lane for the traveling public", - "enum": ["open", "closed", "shift-left", "shift-right", "merge-left", "merge-right", "alternating-one-way", "alternating-flow"] + "enum": [ + "open", + "closed", + "shift-left", + "shift-right", + "merge-left", + "merge-right", + "alternating-one-way", + "alternating-flow" + ] }, "LaneType": { "title": "Lane Type Enumerated Type", @@ -404,7 +467,14 @@ "UnitOfMeasurement": { "title": "Unit of Measurement Enumerated Type", "description": "Unit of measurement, used when providing a unit to accompany a value", - "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] + "enum": [ + "feet", + "inches", + "centimeters", + "pounds", + "tons", + "kilograms" + ] } } } \ No newline at end of file From 2ee78e67ec07d1befe82507f852726e5e6fdbf38 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:33:13 -0400 Subject: [PATCH 251/388] Update main README --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2e5c83df..10b3223c 100644 --- a/README.md +++ b/README.md @@ -39,9 +39,11 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) - [WZDx v3.1 Feed](/create-feed/schemas/wzdx_v3.1_feed.json) - [WZDx v4.0 Feed](/create-feed/schemas/wzdx_v4.0_feed.json) + - [WZDx v4.0 Feed](/create-feed/schemas/wzdx_v4.0_feed.json) - [**Specification Content**](/spec-content) - [**Objects**](/spec-content/objects) - [WZDXFeed](/spec-content/objects/WZDxFeed.md) + - [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) - [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) - [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) From 5fe166bed65d15deaaa96c864067355c1e11549b Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:40:52 -0400 Subject: [PATCH 252/388] Add clarifying text --- spec-content/objects/RoadRestrictionFeed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index a6a6d6eb..c0fad43f 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -4,7 +4,7 @@ The `RoadRestrictionFeed` object is the root (highest level) object of a WZDx ro ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. +`feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx road restriction feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. `features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. From f2693d3ad01710bbd3baccf38df9301f0d721e9c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 1 Nov 2021 20:59:45 -0400 Subject: [PATCH 253/388] Remove periods from descriptions in schema --- create-feed/schemas/RoadRestrictionFeed_v1.0.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/create-feed/schemas/RoadRestrictionFeed_v1.0.json b/create-feed/schemas/RoadRestrictionFeed_v1.0.json index a19ea8e0..987e2457 100644 --- a/create-feed/schemas/RoadRestrictionFeed_v1.0.json +++ b/create-feed/schemas/RoadRestrictionFeed_v1.0.json @@ -187,14 +187,14 @@ }, "RestrictionRoadEvent": { "title": "Restriction Road Event", - "description": "A road event describing a section of roadway and the limitations of how that section can be used.", + "description": "A road event describing a section of roadway and the limitations of how that section can be used", "type": "object", "properties": { "core_details": { "$ref": "#/definitions/RoadEventCoreDetails" }, "restrictions": { - "description": "A list of zero or more restrictions applying to the road event.", + "description": "A list of zero or more restrictions applying to the road event", "type": "array", "items": { "$ref": "#/definitions/Restriction" From 3f82e154cc5546102b02091178c1a9564b1506e7 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Tue, 2 Nov 2021 08:41:31 -0400 Subject: [PATCH 254/388] Conditionally require either restrictions or lanes on the RestrictionRoadEvent object, matching schema. --- spec-content/objects/RestrictionRoadEvent.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/objects/RestrictionRoadEvent.md b/spec-content/objects/RestrictionRoadEvent.md index f9e566c3..43f6ba05 100644 --- a/spec-content/objects/RestrictionRoadEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -9,8 +9,8 @@ For representing restrictions due to road work, see the [WorkZoneRoadEvent](/spe Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | Describes the basic characterisitics of a Road Event. | Required | -`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Optional | Restrictions can also be provided on an individual lane. -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | +`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Conditional: required if `lanes` property is not provided. | Restrictions can also be provided on an individual lane. +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Conditional: required if `restrictions` property is not provided. | ## Used By Property | Object From 2dee84223f8636e98b08a365879d503fb7b438ee Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Tue, 2 Nov 2021 08:43:47 -0400 Subject: [PATCH 255/388] Add RestrictionRoadEvent to Restriction obj. used by --- spec-content/objects/Restriction.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec-content/objects/Restriction.md b/spec-content/objects/Restriction.md index 43e72de8..70f8b200 100644 --- a/spec-content/objects/Restriction.md +++ b/spec-content/objects/Restriction.md @@ -11,5 +11,6 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`restrictions` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) `restrictions` | [Lane](/spec-content/objects/Lane.md) +`restrictions` | [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) From 4c8713a6b0b912b7f19e2ef39f44e35cc098a767 Mon Sep 17 00:00:00 2001 From: mark-mockett <59966277+mark-mockett@users.noreply.github.com> Date: Tue, 2 Nov 2021 08:44:40 -0400 Subject: [PATCH 256/388] Update Restriction.md --- spec-content/objects/Restriction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/Restriction.md b/spec-content/objects/Restriction.md index 70f8b200..786e2f17 100644 --- a/spec-content/objects/Restriction.md +++ b/spec-content/objects/Restriction.md @@ -1,5 +1,5 @@ # Restriction Object -The `Restriction` object describes a restriction on a roadway or lane. This object is used by both the [RoadEvent](/spec-content/objects/RoadEvent.md) and [Lane](/spec-content/objects/Lane.md) objects. +The `Restriction` object describes a restriction on a roadway or lane. This object is used by the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md), and [Lane](/spec-content/objects/Lane.md) objects. ## Properties Name | Type | Description | Conformance | Notes From 5d8e6938c9dd689911a55dd99b638bb774df84e3 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 2 Nov 2021 18:10:22 -0400 Subject: [PATCH 257/388] Add RoadEventCoreDetails to create-feed README and fix typo --- create-feed/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/create-feed/README.md b/create-feed/README.md index f0fd9c34..5ffa5c4b 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -25,8 +25,9 @@ The tables below detail the specificaton's content and describe the data used to ### WZDx Work Zone (Road Event) Information +- The [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) object represents the core details of an event occurring on a roadway (i.e. a "road event") that is shared by all types of road events. - The [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object describes a work zone event. -- The [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) object describes a work zone event. +- The [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) object describes a detour event. - The [TypeOfWork](/spec-content/objects/TypeOfWork.md) object describes the work taking place along the road. If applicable, it indicates if the work changes the roadway's architecture. - The [Lane](/spec-content/objects/Lane.md) object identifies and describes individual lanes within an event. - The [LaneRestriction](/spec-content/objects/LaneRestriction.md) object describes restrictions for identified lanes. From e03d03166594dbd4c6e59c900e13c313302701fa Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 18 Nov 2021 13:46:11 -0500 Subject: [PATCH 258/388] Remove section from spec-content README --- spec-content/README.md | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index c30315e4..ec27bb1a 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -65,26 +65,3 @@ Enumerated Type | Description [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Method of knowing the presence of workers in the road event area. [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Methods for how worker presence in a work zone event area is determined. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. - -### Object Properties using Enumerated Types -For ease of reference, the table below describes all properties in the WZDx specification whose value is restricted by an enumerated type, as well as the object that contains that property. - -Property | Object | Enumerated Type | Notes ---- | --- | --- | --- -`beginning_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Enumeration updated in WZDx v3.0 -`direction` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [Direction](/spec-content/enumerated-types/Direction.md) | Enumeration adapted from TMDD link-alignment -`end_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 -`ending_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Enumeration updated in WZDx v3.0 -`event_type` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventType](/spec-content/enumerated-types/EventType.md) | Enumeration create in WZDx v3.0 -`event_status` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | Enumeration created in WZDx v1.0 -`location_method` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | Enumeration created in WZDx v3.0 but referenced since v1.1 -`method` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Enumerated created in WZDx v4.0 -`type` | [Restriction](/spec-content/objects/Restriction.md) | [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) | Enumeration created in WZDx v1.0 -`unit` | [Restriction](/spec-content/objects/Restriction.md) | [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | More values will be added as needed. -`start_date_accuracy` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | Enumeration updated in WZDx v3.0 -`status` | [Lane](/spec-content/objects/Lane.md) | [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) | Enumeration created in WZDx v2.0 -`type` | [Lane](/spec-content/objects/Lane.md) | [LaneType](/spec-content/enumerated-types/LaneType.md) | Enumeration adapted from TMDD LaneRoadway; updated in WZDx v3.0 -`type_name` | [TypeOfWork](/spec-content/objects/TypeOfWork.md) | [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | Enumeration created in WZDx v2.0 -`vehicle_impact` | [RoadEvent](/spec-content/objects/RoadEvent.md) | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | Enumeration created in WZDx v2.0 -`definition` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Enumeration created in WZDx v4.0 - From 1973c8c05a71a87b74bd3b3591ef901455c9a58f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 18 Nov 2021 14:59:58 -0500 Subject: [PATCH 259/388] Fix RestrictionType used by --- spec-content/enumerated-types/RestrictionType.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spec-content/enumerated-types/RestrictionType.md b/spec-content/enumerated-types/RestrictionType.md index 5af0f642..45dd1774 100644 --- a/spec-content/enumerated-types/RestrictionType.md +++ b/spec-content/enumerated-types/RestrictionType.md @@ -22,5 +22,4 @@ Value | Description ## Used By Property | Object --- | --- -`restrictions` | [RoadEvent](/spec-content/objects/RoadEvent.md) -`restrictions` | [Lane](/spec-content/objects/Lane.md) +`type` | [Restriction](/spec-content/objects/Restriction.md) From f12d4769d81082d502904fbb572e21db251f4657 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:08:03 -0600 Subject: [PATCH 260/388] Update scenario 1 multipoint example Update example for version 4.0 changes --- ...cenario1_simple_multipoint_example.geojson | 206 ++++++++++-------- 1 file changed, 110 insertions(+), 96 deletions(-) diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index d5fa82b2..65f74546 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -5,7 +5,7 @@ "contact_name": "Frederick Francis Feedmanager", "contact_email": "fred.feedmanager@testdot.gov", "update_frequency": 60, - "version": "3.1", + "version": "4.0", "license": "https://creativecommons.org/publicdomain/zero/1.0/", "data_sources": [ { @@ -14,8 +14,7 @@ "contact_name": "Solomn Soliel Sourcefeed", "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" + "update_date": "2020-06-18T14:37:31Z" }, { "data_source_id": "2", @@ -23,8 +22,7 @@ "contact_name": "Samuel Sonny Sourcefeed", "contact_email": "samuel.sourcefeed@testdot.gov", "update_frequency": 60, - "update_date": "2020-06-18T14:39:01Z", - "location_method": "channel-device-method" + "update_date": "2020-06-18T14:39:01Z" } ] }, @@ -34,26 +32,30 @@ "id": "71234", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80, I-35" - ], - "direction": "northbound", - "beginning_milepost": 125.2, + "core_details":{ + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "I-80", + "I-35" + ], + "direction": "northbound", + "description": "Single direction work zone without lane-level information.", + "creation_date": "2009-12-31T18:01:01Z", + "update_date": "2009-12-31T18:01:01Z" + }, + "beginning_milepost": 125.2, "ending_milepost": 126.3, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T01:00:00Z", "end_date": "2010-01-02T01:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit": 55, - "description": "Single direction work zone without lane-level information.", - "creation_date": "2009-12-31T18:01:01Z", - "update_date": "2009-12-31T18:01:01Z" + "reduced_speed_limit_kph": 55 }, "geometry": { "type": "MultiPoint", @@ -73,25 +75,28 @@ "id": "WDM-58493-NB", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "128th Street" - ], - "direction": "northbound", - "beginning_cross_street": "US 6, Hickman Road", + "core_details":{ + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "128th Street" + ], + "direction": "northbound", + "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", + "creation_date": "2009-12-13T13:35:26Z", + "update_date": "2009-12-31T15:11:16Z" + }, + "beginning_cross_street": "US 6, Hickman Road", "ending_cross_street": "Douglas Ave", "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T06:00:00Z", "end_date": "2010-05-01T05:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "description": "Single direction work zone with detailed lane-level information.", - "creation_date": "2009-12-13T13:35:26Z", - "update_date": "2009-12-31T15:11:16Z", + "vehicle_impact": "some-lanes-closed-merge-left", "lanes": [ { "order": 1, @@ -130,30 +135,36 @@ "id": "65773-1", "type": "Feature", "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-2" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 3.1, + "core_details":{ + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-2" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; first event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 3.1, "ending_milepost": 2.9, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -163,11 +174,8 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit": 55, + "reduced_speed_limit_kph": 55, "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; first event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", "types_of_work": [ { "type_name": "surface-work", @@ -225,30 +233,36 @@ "id": "65773-2", "type": "Feature", "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-3" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 2.9, + "core_details":{ + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-3" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; second event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.9, "ending_milepost": 2.5, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -261,11 +275,8 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit": 55, + "reduced_speed_limit_kph": 55, "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; second event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", "types_of_work": [ { "type_name": "surface-work", @@ -323,27 +334,33 @@ "id": "65773-3", "type": "Feature", "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 2.5, + "core_details":{ + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; third event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.5, "ending_milepost": 2.0, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -356,11 +373,8 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit": 55, + "reduced_speed_limit_kph": 55, "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; third event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", "types_of_work": [ { "type_name": "surface-work", @@ -410,4 +424,4 @@ } } ] -} \ No newline at end of file +} From 9197ae2887859224afc9c6b6ac9ee8616cb6abe3 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:09:36 -0600 Subject: [PATCH 261/388] Update local access example update example for version 4.0 changes --- ...y_bidirectional_linestring_example.geojson | 68 ++++++++++++------- 1 file changed, 42 insertions(+), 26 deletions(-) diff --git a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson index 4f75e6bd..60513608 100644 --- a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson @@ -5,7 +5,7 @@ "contact_name": "Frederick Francis Feedmanager", "contact_email": "fred.feedmanager@testdot.gov", "update_frequency": 60, - "version": "3.1", + "version": "4.0", "license": "https://creativecommons.org/publicdomain/zero/1.0/", "data_sources": [ { @@ -14,8 +14,7 @@ "contact_name": "Solomn Soliel Sourcefeed", "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" + "update_date": "2020-06-18T14:37:31Z" } ] }, @@ -25,30 +24,34 @@ "id": "WZ389-NB", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "northbound", + "core_details":{ + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "Beaver Avenue" + ], + "direction": "northbound", + "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", + "creation_date": "2010-01-01T01:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, "beginning_cross_street": "Aurora Avenue", "ending_cross_street": "NW 46th Place", "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", - "event_status": "active", + "location_method": "channel-device-method", + "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ { "type": "local-access-only" } - ], - "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z" + ] + }, "geometry": { "type": "LineString", @@ -84,18 +87,24 @@ "id": "WZ389-SB", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "southbound", + "core_details":{ + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "Beaver Avenue" + ], + "direction": "southbound", + "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", + "creation_date": "2010-01-01T01:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, "beginning_cross_street": "NW 46th Place", "ending_cross_street": "Aurora Avenue", "beginning_accuracy": "verified", "ending_accuracy": "estimated", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-01-01T17:00:00Z", + "location_method": "channel-device-method", "start_date_accuracy": "verified", "end_date_accuracy": "estimated", "event_status": "active", @@ -105,13 +114,20 @@ "type": "local-access-only" } ], - "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z", "lanes": [ { "order": 1, "status": "open", + "type": "center-left-turn-lane", + "restrictions": [ + { + "type": "local-access-only" + } + ] + }, + { + "order": 2, + "status": "open", "type": "general", "restrictions": [ { @@ -120,7 +136,7 @@ ] }, { - "order": 2, + "order": 3, "status": "open", "type": "bike-lane", "restrictions": [ @@ -170,4 +186,4 @@ } } ] -} \ No newline at end of file +} From 2287835434344668972f54b1857e12115fe21f87 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:10:43 -0600 Subject: [PATCH 262/388] Update scenario 1 line string example update example for version 4.0 changes --- ...cenario1_simple_linestring_example.geojson | 205 ++++++++++-------- 1 file changed, 109 insertions(+), 96 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index bb591270..89ca80f9 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -5,7 +5,7 @@ "contact_name": "Frederick Francis Feedmanager", "contact_email": "fred.feedmanager@testdot.gov", "update_frequency": 60, - "version": "3.1", + "version": "4.0", "license": "https://creativecommons.org/publicdomain/zero/1.0/", "data_sources": [ { @@ -14,8 +14,7 @@ "contact_name": "Solomn Soliel Sourcefeed", "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" + "update_date": "2020-06-18T14:37:31Z" }, { "data_source_id": "2", @@ -23,8 +22,7 @@ "contact_name": "Samuel Sonny Sourcefeed", "contact_email": "samuel.sourcefeed@testdot.gov", "update_frequency": 60, - "update_date": "2020-06-18T14:39:01Z", - "location_method": "channel-device-method" + "update_date": "2020-06-18T14:39:01Z" } ] }, @@ -34,26 +32,29 @@ "id": "71234", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80, I-35" - ], - "direction": "northbound", - "beginning_milepost": 125.2, + "core_details":{ + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "I-80, I-35" + ], + "direction": "northbound", + "description": "Single direction work zone without lane-level information.", + "creation_date": "2009-12-31T18:01:01Z", + "update_date": "2009-12-31T18:01:01Z" + }, + "beginning_milepost": 125.2, "ending_milepost": 126.3, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T01:00:00Z", "end_date": "2010-01-02T01:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit": 55, - "description": "Single direction work zone without lane-level information.", - "creation_date": "2009-12-31T18:01:01Z", - "update_date": "2009-12-31T18:01:01Z" + "reduced_speed_limit_kph": 55 }, "geometry": { "type": "LineString", @@ -89,25 +90,28 @@ "id": "WDM-58493-NB", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "128th Street" - ], - "direction": "northbound", - "beginning_cross_street": "US 6, Hickman Road", + "core_details":{ + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "128th Street" + ], + "direction": "northbound", + "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", + "creation_date": "2009-12-13T13:35:26Z", + "update_date": "2009-12-31T15:11:16Z" + }, + "beginning_cross_street": "US 6, Hickman Road", "ending_cross_street": "Douglas Ave", "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T06:00:00Z", "end_date": "2010-05-01T05:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "description": "Single direction work zone with detailed lane-level information.", - "creation_date": "2009-12-13T13:35:26Z", - "update_date": "2009-12-31T15:11:16Z", + "vehicle_impact": "some-lanes-closed-merge-left", "lanes": [ { "order": 1, @@ -398,30 +402,36 @@ "id": "65773-1", "type": "Feature", "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-2" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 3.1, + "core_details":{ + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-2" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; first event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 3.1, "ending_milepost": 2.9, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -431,11 +441,8 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit": 55, + "reduced_speed_limit_kph": 55, "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; first event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", "types_of_work": [ { "type_name": "surface-work", @@ -501,30 +508,36 @@ "id": "65773-2", "type": "Feature", "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-3" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 2.9, + "core_details":{ + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-3" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; second event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.9, "ending_milepost": 2.5, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -537,11 +550,8 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit": 55, + "reduced_speed_limit_kph": 55, "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; second event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", "types_of_work": [ { "type_name": "surface-work", @@ -623,27 +633,33 @@ "id": "65773-3", "type": "Feature", "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 2.5, + "core_details":{ + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; third event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.5, "ending_milepost": 2.0, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -656,11 +672,8 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit": 55, + "reduced_speed_limit_kph": 55, "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; third event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", "types_of_work": [ { "type_name": "surface-work", @@ -794,4 +807,4 @@ } } ] -} \ No newline at end of file +} From 6aedece4f929337ef67f244da5a7453f487158b2 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:11:25 -0600 Subject: [PATCH 263/388] Update scenario 2 linestring example update example for version 4.0 changes --- ...ario2_laneshift_linestring_example.geojson | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index 238b70c7..2fb73c53 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -5,7 +5,7 @@ "contact_name": "Frederick Francis Feedmanager", "contact_email": "fred.feedmanager@testdot.gov", "update_frequency": 60, - "version": "3.1", + "version": "4.0", "license": "https://creativecommons.org/publicdomain/zero/1.0/", "data_sources": [ { @@ -14,8 +14,7 @@ "contact_name": "Solomn Soliel Sourcefeed", "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" + "update_date": "2020-06-18T14:37:31Z" } ] }, @@ -25,23 +24,29 @@ "id": "7733", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80", - "I-35" - ], - "direction": "westbound", - "beginning_milepost": 133.967, + "core_details":{ + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "I-80", + "I-35" + ], + "direction": "westbound", + "description": "Single-direction work zone with lane shift", + "creation_date": "2010-12-30T22:42:53Z", + "update_date": "2010-01-01T05:57:36Z" + }, + "beginning_milepost": 133.967, "ending_milepost": 133.112, "beginning_accuracy": "verified", "ending_accuracy": "verified", "start_date": "2010-01-01T05:57:36Z", "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "verified", + "location_method": "channel-device-method", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", "event_status": "active", - "vehicle_impact": "all-lanes-open", + "vehicle_impact": "all-lanes-open-shift-right", "worker_presence": { "are_workers_present": true, "method": "wearables-present", @@ -51,11 +56,8 @@ "mobile-equipment-in-work-zone-moving" ] }, - "reduced_speed_limit": 55, + "reduced_speed_limit_kph": 55, "restrictions": [], - "description": "Single-direction work zone with lane shift", - "creation_date": "2010-12-30T22:42:53Z", - "update_date": "2010-01-01T05:57:36Z", "types_of_work": [ { "type_name": "surface-work", @@ -161,4 +163,4 @@ } } ] -} \ No newline at end of file +} From 9bb4eaa8f6051bf3f914cfb0c3b395f7b9c37be4 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:12:01 -0600 Subject: [PATCH 264/388] Update scenario 3 linestring example update example with version 4.0 changes --- ...er_bidrectional_linestring_example.geojson | 388 +++++++++--------- 1 file changed, 191 insertions(+), 197 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson index da8367de..91b72026 100644 --- a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson @@ -1,198 +1,192 @@ { - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "3.1", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "121388-EB", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "beginning_milepost": 22.1, - "ending_milepost": 24.6, - "beginning_cross_street": "570th Avenue", - "ending_cross_street": "610th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [], - "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z", - "types_of_work": [ - { - "type_name": "maintenance", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.56064319610596, - 41.87764559047116 - ], - [ - -93.5451292991638, - 41.87767754402901 - ], - [ - -93.53145003318785, - 41.87766955564103 - ], - [ - -93.5067629814148, - 41.877565706506665 - ], - [ - -93.48284840583801, - 41.87750179926317 - ] - ] - } - }, - { - "id": "121388-WB", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "westbound", - "beginning_milepost": 24.6, - "ending_milepost": 22.1, - "beginning_cross_street": "610th Avenue", - "ending_cross_street": "570th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "no-parking" - } - ], - "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z", - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "general" - }, - { - "order": 2, - "status": "open", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "shoulder", - "restrictions": [ - { - "type": "no-parking" - } - ] - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.48284304141998, - 41.877607645600484 - ], - [ - -93.49073946475983, - 41.87764559047116 - ], - [ - -93.50573301315308, - 41.877697514994544 - ], - [ - -93.51188063621521, - 41.877749439475735 - ], - [ - -93.53036642074585, - 41.87782133484157 - ], - [ - -93.54414224624632, - 41.877869265040545 - ], - [ - -93.56063783168791, - 41.87786127667653 - ] - ] - } - } - ] -} \ No newline at end of file + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [{ + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + }] + }, + "type": "FeatureCollection", + "features": [{ + "id": "121388-EB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "parents": [ + "121388" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "eastbound", + "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", + "creation_date": "2010-01-01T09:30:26Z", + "update_date": "2010-01-01T09:30:26Z" + }, + "beginning_milepost": 22.1, + "ending_milepost": 24.6, + "beginning_cross_street": "570th Avenue", + "ending_cross_street": "610th Avenue", + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T10:00:00Z", + "end_date": "2010-01-01T16:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "all-lanes-open", + "restrictions": [], + "types_of_work": [{ + "type_name": "maintenance", + "is_architectural_change": false + }], + "lanes": [{ + "order": 1, + "status": "closed", + "type": "general" + }, + { + "order": 2, + "status": "open", + "type": "general" + }, + { + "order": 3, + "status": "closed", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.56064319610596, + 41.87764559047116 + ], + [ + -93.5451292991638, + 41.87767754402901 + ], + [ + -93.53145003318785, + 41.87766955564103 + ], + [ + -93.5067629814148, + 41.877565706506665 + ], + [ + -93.48284840583801, + 41.87750179926317 + ] + ] + } + }, + { + "id": "121388-WB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "parents": [ + "121388" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "westbound", + "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", + "creation_date": "2010-01-01T09:30:26Z", + "update_date": "2010-01-01T09:30:26Z" + }, + "beginning_milepost": 24.6, + "ending_milepost": 22.1, + "beginning_cross_street": "610th Avenue", + "ending_cross_street": "570th Avenue", + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T10:00:00Z", + "end_date": "2010-01-01T16:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "all-lanes-open", + "restrictions": [{ + "type": "no-parking" + }], + "lanes": [{ + "order": 1, + "status": "closed", + "type": "general" + }, + { + "order": 2, + "status": "open", + "type": "general" + }, + { + "order": 3, + "status": "open", + "type": "shoulder", + "restrictions": [{ + "type": "no-parking" + }] + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.48284304141998, + 41.877607645600484 + ], + [ + -93.49073946475983, + 41.87764559047116 + ], + [ + -93.50573301315308, + 41.877697514994544 + ], + [ + -93.51188063621521, + 41.877749439475735 + ], + [ + -93.53036642074585, + 41.87782133484157 + ], + [ + -93.54414224624632, + 41.877869265040545 + ], + [ + -93.56063783168791, + 41.87786127667653 + ] + ] + } + } + ] +} From fb6cd00d22f915fc86f9602f8c1785c51f3f5494 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:12:47 -0600 Subject: [PATCH 265/388] Update scenario 4 linestring example update example for version 4.0 changes --- ...cenario4_detour_linestring_example.geojson | 199 +++++++++--------- 1 file changed, 100 insertions(+), 99 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 99bd787f..248e2dd8 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -5,7 +5,7 @@ "contact_name": "Frederick Francis Feedmanager", "contact_email": "fred.feedmanager@testdot.gov", "update_frequency": 60, - "version": "3.1", + "version": "4.0", "license": "https://creativecommons.org/publicdomain/zero/1.0/", "data_sources": [ { @@ -14,8 +14,7 @@ "contact_name": "Solomn Soliel Sourcefeed", "contact_email": "solomon.sourcefeed@testcity1.gov", "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" + "update_date": "2020-06-18T14:37:31Z" } ] }, @@ -25,26 +24,32 @@ "id": "67890", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "children": [ - "67890-detour1", - "67890-detour2", - "67890-detour3" - ] - }, - "road_names": [ - "I-35" - ], - "direction": "northbound", - "beginning_milepost": 98.42, + "core_details":{ + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "children": [ + "67890-detour1", + "67890-detour2", + "67890-detour3" + ] + }, + "road_names": [ + "I-35" + ], + "direction": "northbound", + "description": "Simple, single direction work zone with detour.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_milepost": 98.42, "ending_milepost": 101.50, "beginning_accuracy": "verified", "ending_accuracy": "estimated", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", + "location_method": "channel-device-method", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -52,16 +57,13 @@ "are_workers_present": true, "method": "scheduled", "confidence": "medium", - "worker_presence_definition": [ + "definition": [ "workers-in-work-zone-working", "workers-in-work-zone-not-working", "mobile-equipment-in-work-zone-moving" ] }, - "reduced_speed_limit": 55, - "description": "Simple, single direction work zone with detour.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z", + "reduced_speed_limit_kph": 55, "types_of_work": [ { "type_name": "surface-work", @@ -272,35 +274,35 @@ "id": "67890-detour1", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour2" - ] - }, - "road_names": [ - "F22" - ], - "direction": "westbound", - "ending_cross_street": "US 69", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", + "core_details":{ + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour2" + ] + }, + "road_names": [ + "F22" + ], + "direction": "westbound", + "description": "Detour for road event 67890, first segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "I-35", + "ending_cross_street": "US 69", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, first segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" + "event_status": "active" }, "geometry": { "type": "LineString", @@ -356,36 +358,35 @@ "id": "67890-detour2", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour3" - ] - }, - "road_names": [ - "US 69" - ], - "direction": "northbound", - "beginning_cross_street": "NE 126th Avenue", + "core_details":{ + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour3" + ] + }, + "road_names": [ + "US 69" + ], + "direction": "northbound", + "description": "Detour for road event 67890, second segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "NE 126th Avenue", "ending_cross_street": "IA 210", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, second segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" + "event_status": "active" }, "geometry": { "type": "LineString", @@ -737,32 +738,32 @@ "id": "67890-detour3", "type": "Feature", "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "6780" - ], - "first": [ - "67890-detour1" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "beginning_cross_street": "US 69", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", + "core_details":{ + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "6780" + ], + "first": [ + "67890-detour1" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "eastbound", + "description": "Detour for road event 67890, third/final segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "US 69", + "ending_cross_street": "I-35", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, third/final segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" + "event_status": "active" }, "geometry": { "type": "LineString", @@ -823,4 +824,4 @@ } } ] -} \ No newline at end of file +} From 8aeea48532242fda531285d6f4619fd42b03e313 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:13:19 -0600 Subject: [PATCH 266/388] Update scenario 5 linestring example update example for version 4.0 changes --- ...ario5_recurring_linestring_example.geojson | 1273 +++++++++++------ 1 file changed, 821 insertions(+), 452 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson index bd024d1b..248e2dd8 100644 --- a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson @@ -1,458 +1,827 @@ { - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "3.1", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "PLK01012016-Day1", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "verified", - "ending_accuracy": "verified", - "start_date": "2010-01-01T08:32:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; currently active work zone (day 1).", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2010-01-01T08:32:01Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46077919006348, - 41.83445374967984 - ], - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ], - [ - -93.51322174072264, - 41.83502130612205 - ] - ] - } - }, - { - "id": "PLK01012016-Day2", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-02T08:00:00Z", - "end_date": "2010-01-02T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 2) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day3", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-03T08:00:00Z", - "end_date": "2010-01-03T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 3) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] + "id": "67890", + "type": "Feature", + "properties": { + "core_details":{ + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "children": [ + "67890-detour1", + "67890-detour2", + "67890-detour3" + ] + }, + "road_names": [ + "I-35" + ], + "direction": "northbound", + "description": "Simple, single direction work zone with detour.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_milepost": 98.42, + "ending_milepost": 101.50, + "beginning_accuracy": "verified", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": true, + "method": "scheduled", + "confidence": "medium", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] + }, + "reduced_speed_limit_kph": 55, + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "open", + "type": "shoulder" + }, + { + "order": 2, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-width", + "value": 11, + "unit": "feet" + } + ] + }, + { + "order": 3, + "status": "closed", + "type": "general" + }, + { + "order": 4, + "status": "closed", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.570535026999949, + 41.815141143000062 + ], + [ + -93.570558665999954, + 41.815778842000043 + ], + [ + -93.570582206999973, + 41.816327889000036 + ], + [ + -93.570613866999963, + 41.817305885000053 + ], + [ + -93.570653239999956, + 41.818343932000062 + ], + [ + -93.570692683999937, + 41.819444889000067 + ], + [ + -93.57072468399997, + 41.820444622000025 + ], + [ + -93.570725033999963, + 41.820762049000052 + ], + [ + -93.570737569999949, + 41.821725757000024 + ], + [ + -93.570735194999941, + 41.823038359000066 + ], + [ + -93.570744205999972, + 41.824273739000034 + ], + [ + -93.570741062999957, + 41.824888576000035 + ], + [ + -93.570745857999952, + 41.825769359000049 + ], + [ + -93.570750405999945, + 41.82642422400005 + ], + [ + -93.570751056999939, + 41.827013323000074 + ], + [ + -93.570767342999943, + 41.82791125600005 + ], + [ + -93.570783135999989, + 41.828363077000063 + ], + [ + -93.57081113199996, + 41.829478340000037 + ], + [ + -93.570846661999951, + 41.830487788000028 + ], + [ + -93.570890330999987, + 41.83194334500007 + ], + [ + -93.570902443999955, + 41.832520995000039 + ], + [ + -93.570930157999953, + 41.833378885000059 + ], + [ + -93.570954688999961, + 41.834811573000025 + ], + [ + -93.570948738999959, + 41.836344370000063 + ], + [ + -93.570942684999977, + 41.837782799000081 + ], + [ + -93.570936722999988, + 41.839304156000026 + ], + [ + -93.570923044999972, + 41.840765465000061 + ], + [ + -93.570924651999974, + 41.84221532600003 + ], + [ + -93.570926279999981, + 41.843685202000074 + ], + [ + -93.570931724, + 41.845146499000066 + ], + [ + -93.570929340999953, + 41.846447657000056 + ], + [ + -93.570938627999965, + 41.84792610900007 + ], + [ + -93.570932442999947, + 41.849247287000026 + ], + [ + -93.570939776999978, + 41.849617513000055 + ], + [ + -93.570957815999975, + 41.850528174000033 + ], + [ + -93.570991150999987, + 41.852249359000041 + ], + [ + -93.571024497999986, + 41.85397641600008 + ], + [ + -93.571053711, + 41.855521371000066 + ], + [ + -93.571083075999979, + 41.85719849700007 + ], + [ + -93.57110858599998, + 41.858940244000053 + ], + [ + -93.571141838999949, + 41.860579185000063 + ] + ] + } }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day4", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-04T08:00:00Z", - "end_date": "2010-01-04T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 4) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] + { + "id": "67890-detour1", + "type": "Feature", + "properties": { + "core_details":{ + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour2" + ] + }, + "road_names": [ + "F22" + ], + "direction": "westbound", + "description": "Detour for road event 67890, first segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "I-35", + "ending_cross_street": "US 69", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.600376007999955, + 41.791257966000046 + ], + [ + -93.600375128999985, + 41.791257965000057 + ], + [ + -93.600373887999979, + 41.79125798900003 + ], + [ + -93.598991312999942, + 41.791285770000059 + ], + [ + -93.597408247999965, + 41.791298693000044 + ], + [ + -93.587018347999958, + 41.791370250000057 + ], + [ + -93.581030593999969, + 41.791384089000076 + ], + [ + -93.575477690999946, + 41.791372395000053 + ], + [ + -93.573306168999977, + 41.791361989000052 + ], + [ + -93.572569235999936, + 41.791351637000048 + ], + [ + -93.572478358999945, + 41.79135169500006 + ] + ] + } }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day5", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-05T08:00:00Z", - "end_date": "2010-01-05T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 5) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] + { + "id": "67890-detour2", + "type": "Feature", + "properties": { + "core_details":{ + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour3" + ] + }, + "road_names": [ + "US 69" + ], + "direction": "northbound", + "description": "Detour for road event 67890, second segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "NE 126th Avenue", + "ending_cross_street": "IA 210", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.600401730999977, + 41.877744832000076 + ], + [ + -93.600383302999944, + 41.876221974000032 + ], + [ + -93.600399342999935, + 41.874445421000075 + ], + [ + -93.600382543999956, + 41.872739253000077 + ], + [ + -93.600389303999975, + 41.871047136000072 + ], + [ + -93.600386637999975, + 41.869347993000076 + ], + [ + -93.600379122999982, + 41.867557387000033 + ], + [ + -93.600390145999938, + 41.865583833000073 + ], + [ + -93.60037319199995, + 41.863775643000054 + ], + [ + -93.600372301999982, + 41.863207043000045 + ], + [ + -93.600381568999978, + 41.862919375000047 + ], + [ + -93.600376814999947, + 41.861738109000044 + ], + [ + -93.60037443899995, + 41.860563973000069 + ], + [ + -93.60037443899995, + 41.859363694000081 + ], + [ + -93.60036493299998, + 41.858142023000028 + ], + [ + -93.600360178999949, + 41.85695124800003 + ], + [ + -93.600357800999973, + 41.855774736000058 + ], + [ + -93.600357801999962, + 41.854583964000028 + ], + [ + -93.600353046999942, + 41.853378931000066 + ], + [ + -93.600348294999947, + 41.852188157000057 + ], + [ + -93.600343540999972, + 41.85096173200003 + ], + [ + -93.600341164999975, + 41.849768581000035 + ], + [ + -93.600338180999984, + 41.84926536100005 + ], + [ + -93.600334034999946, + 41.848565926000049 + ], + [ + -93.600329278999936, + 41.847403672000041 + ], + [ + -93.600324526999941, + 41.846174873000052 + ], + [ + -93.600319772999967, + 41.844976968000026 + ], + [ + -93.600315018999936, + 41.843786195000064 + ], + [ + -93.600305511999977, + 41.842590668000071 + ], + [ + -93.600296004999961, + 41.841487836000056 + ], + [ + -93.600296003999972, + 41.840275672000075 + ], + [ + -93.600291251999977, + 41.839065885000025 + ], + [ + -93.600291250999987, + 41.837927402000048 + ], + [ + -93.600284120999959, + 41.836760396000045 + ], + [ + -93.600279367999974, + 41.83553872400006 + ], + [ + -93.600273437999988, + 41.834756276000064 + ], + [ + -93.600272235999967, + 41.834597515000041 + ], + [ + -93.600274613999943, + 41.833775145000061 + ], + [ + -93.600272236999956, + 41.832546343000047 + ], + [ + -93.600269860999958, + 41.831357947000072 + ], + [ + -93.600265106999984, + 41.830238478000069 + ], + [ + -93.600269860999958, + 41.829584861000058 + ], + [ + -93.600262728999951, + 41.829031068000063 + ], + [ + -93.60026985899998, + 41.828714954000077 + ], + [ + -93.600265106999984, + 41.827833163000037 + ], + [ + -93.600265732999958, + 41.82751014300004 + ], + [ + -93.600267483999971, + 41.82661149300003 + ], + [ + -93.600267481999936, + 41.825458747000027 + ], + [ + -93.60026985899998, + 41.824289366000073 + ], + [ + -93.600262728999951, + 41.823096216000067 + ], + [ + -93.60026272999994, + 41.822017153000047 + ], + [ + -93.600265008999941, + 41.821111594000058 + ], + [ + -93.600263135999967, + 41.820261561000052 + ], + [ + -93.600264984999967, + 41.819911794000063 + ], + [ + -93.600262608999969, + 41.818602179000038 + ], + [ + -93.600255478999941, + 41.817525493000062 + ], + [ + -93.600255478999941, + 41.816325213000027 + ], + [ + -93.600248348999969, + 41.815205744000025 + ], + [ + -93.600243592999959, + 41.814019724000048 + ], + [ + -93.600245971999982, + 41.812914517000024 + ], + [ + -93.600253101999954, + 41.811806931000035 + ], + [ + -93.600269738999941, + 41.81082056200006 + ], + [ + -93.600276870999949, + 41.80970822200004 + ], + [ + -93.600288753999962, + 41.808624405000046 + ], + [ + -93.600295884, + 41.807576241000049 + ], + [ + -93.600310144, + 41.806435380000039 + ], + [ + -93.60031408499998, + 41.805741814000044 + ], + [ + -93.600314898999954, + 41.805598749000069 + ], + [ + -93.600324404999981, + 41.804529191000029 + ], + [ + -93.600319769999942, + 41.803418761000046 + ], + [ + -93.60031965099995, + 41.803390708000052 + ], + [ + -93.600322028999983, + 41.802354426000079 + ], + [ + -93.600322026999947, + 41.801782615000036 + ], + [ + -93.600322026999947, + 41.80161524500005 + ], + [ + -93.600331535999942, + 41.800495775000059 + ], + [ + -93.600326782999957, + 41.799371551000036 + ], + [ + -93.600331535999942, + 41.798416082000074 + ], + [ + -93.600331535999942, + 41.797327511000049 + ], + [ + -93.60033866699996, + 41.796314997000025 + ], + [ + -93.600345797999978, + 41.795214543000043 + ], + [ + -93.600350549999973, + 41.794040406000079 + ], + [ + -93.600362434999965, + 41.792899545000068 + ], + [ + -93.600360056999989, + 41.791818106000051 + ], + [ + -93.600373887999979, + 41.79125798900003 + ], + [ + -93.600373891999936, + 41.791257820000055 + ] + ] + } }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] + { + "id": "67890-detour3", + "type": "Feature", + "properties": { + "core_details":{ + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "6780" + ], + "first": [ + "67890-detour1" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "eastbound", + "description": "Detour for road event 67890, third/final segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "US 69", + "ending_cross_street": "I-35", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.573353147999967, + 41.877796484000044 + ], + [ + -93.573356421999961, + 41.87779647800005 + ], + [ + -93.574056398999971, + 41.877795233000029 + ], + [ + -93.577496035999957, + 41.877791515000069 + ], + [ + -93.578346253999939, + 41.877790018000042 + ], + [ + -93.579435310999941, + 41.877788094000039 + ], + [ + -93.580892132999963, + 41.877785500000073 + ], + [ + -93.581418045999953, + 41.877784560000066 + ], + [ + -93.581835475, + 41.877783302000068 + ], + [ + -93.586943989999952, + 41.877767791000053 + ], + [ + -93.591580114999942, + 41.877755708000052 + ], + [ + -93.596289923999962, + 41.877747609000039 + ], + [ + -93.60040158399994, + 41.87774674700006 + ] + ] + } } - } - ] -} \ No newline at end of file + ] +} From 2067fe50cad259a0afc36ae11e87409e57e52b74 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:37:06 -0600 Subject: [PATCH 267/388] Update example descriptions Remove reference to examples that have been removed as well as adding new bridge height restriction example. --- create-feed/README.md | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/create-feed/README.md b/create-feed/README.md index 711cd589..63d48be2 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -40,10 +40,7 @@ The figure below models the tables and their relationships. ![WZDx Object Diagram](/images/wzdx_object_diagram.jpg) ## Feed Examples -The following WZDx feed examples represent a variety of scenarios common when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. A comprehensive example contains all of the scenarios in a single file. All example scenarios are provided for both the `LineString` and `MultiPoint` geometry types. - -* [All LineString GeoJSON Examples](/create-feed/examples/linestring-examples) -* [All MultiPoint GeoJSON Examples](/create-feed/examples/multipoint-examples) +The following WZDx feed examples represent a variety of scenarios common when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type as well as one `MultiPoint` geometry type for scenario 1. Below is a summary of each of the example WZDx feeds and detailed differences for each of the road events: @@ -55,27 +52,28 @@ Scenario 1 ([Linestring](/create-feed/examples/linestring-examples/scenario1_sim - Third work zone is single direction, three sequential events, with detailed lane information. This work zone demonstrates the use of the `relationship` property, both `first` and `next` to indiciate the order of the road events and `parents` to indicate all road events are related (they all have `parents` as `65773`). (IDs: `65773-1`, `65773-2`, `65773-3`). ### Scenario 2 - Lane Shift (simple scenario) -Scenario 2 ([Linestring](/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. +Scenario 2 ([Linestring](/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. -- Single work zone with lane shift in the detailed lane information showing us of verified location and start time. ("id": `7733`). +- Single work zone with lane shift in the detailed lane information showing use of verified location and start time. ("id": `7733`). ### Scenario 3 - Shoulder Closure (bidirectional work zone) -Scenario 3 ([Linestring](/create-feed/examples/linestring-examples/scenario3_shoulder_bidirectional_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. +Scenario 3 ([Linestring](/create-feed/examples/linestring-examples/scenario3_shoulder_bidirectional_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. - Single work zone represented by two road events (IDs: `121388-EB`, `121388-WB`), one in direction of shoulder closure and second in opposite direction. - Demonstrates the use of `restrictions` for the event as well as individual lanes - Demonstrates the use of `relationship` to show the road events in each direction are related to a common parent (`121388`) ### Scenario 4 - Road Closure with Detour on Arterial -Scenario 4 ([Linestring](/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. +Scenario 4 ([Linestring](/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. - Single work zone in one direction represented by a single road event (ID: `67890`), with a detour. - Showing use of `relationship` `parents` and `children` to connect the detour road events (IDs: `67890-detour1`, `67890-detour2`, `67890-detour3`) to the work zone. - Also uses `relationship` to represent the sequence of the three detour road events. - Does not use `parents` to connect the work zone and all detour road events to a common parent (e.g. a project), but that approach is acceptable. +- Shows the use of both the work zone and detour road event objects in the same feed. ### Scenario 5 - Recurring Work Zone -Scenario 5 ([Linestring](/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. +Scenario 5 ([Linestring](/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. - Simple work zone but with a recurring component. - Five road events: an `active` (day 1, ID: `PLK01012016-Day1`) event and four additional events (IDs: `PLK01012016-Day2`, `PLK01012016-Day3`, `PLK01012016-Day4`, `PLK01012016-Day5`) for later dates with a pending status. @@ -83,14 +81,19 @@ Scenario 5 ([Linestring](/create-feed/examples/linestring-examples/scenario5_rec - The `relationship` property is used to show all road events are related (they have the same parent of `PLK01012016`). ### Local Access Only (bidirectional work zone) -The local access only example ([Linestring](/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson)) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. +The local access only example ([Linestring](/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson)) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. - Single work zone on a bidirectional roadwith with impact to both directions, represented by two road events (IDs: `WZ389-NB`, `WZ389-SB`), one for each direction. - Uses `local-access-only` [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). - One road event shows basic details (not lane-level), while the opposite direction road event shows detailed lane information. The detailed lane information also includes a bike lane for reference. -### Comprehensive Example -- The comprehensive example ([Linestring](/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson)) contains all of the examples listed above in a single GeoJSON file showing how the various road events across multiple organizations and data sources can be represented in a single WZDx feed. + +### Bridge Height Restriction +The bridge height restriction example ([Linestring](/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson)) shows how the restriction road event type can be used within a feed. + +- Three bridge height restriction examples are shown with only the core details and restriction as needed as part of the restriction road event +- One road event, `Bridge1`, also includes lane level details including additional height restrictions values for individual lanes. + ## JSON Schemas The [schemas](/create-feed/schemas) directory includes a JSON Schema for the following WZDx feed versions: From 1c3dc8b26939266fe56f6ed60e66b1b6a23da87d Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:37:54 -0600 Subject: [PATCH 268/388] Remove multipoint comprehensive example Remove multipoint comprehensive example to avoid redundant updates of examples in future. --- .../comprehensive_multipoint_example.geojson | 1301 ----------------- 1 file changed, 1301 deletions(-) delete mode 100644 create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson diff --git a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson b/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson deleted file mode 100644 index b0694ec4..00000000 --- a/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson +++ /dev/null @@ -1,1301 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "3.1", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" - }, - { - "data_source_id": "2", - "organization_name": "TestDOT", - "contact_name": "Samuel Sonny Sourcefeed", - "contact_email": "samuel.sourcefeed@testdot.gov", - "update_frequency": 60, - "update_date": "2020-06-18T14:39:01Z", - "location_method": "channel-device-method" - }, - { - "data_source_id": "3", - "organization_name": "Test County 1", - "contact_name": "Stu Spiel Sourcefeed", - "contact_email": "stu.sourcefeed@testcounty1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:05Z", - "location_method": "channel-device-method" - }, - { - "data_source_id": "4", - "organization_name": "Test City 2", - "contact_name": "Skip Jack Sourcefeed", - "contact_email": "skip.sourcefeed@testcity2.gov", - "update_frequency": 60, - "update_date": "2020-06-18T14:38:59Z", - "location_method": "channel-device-method" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "WZ389-NB", - "type": "Feature", - "properties": { - "data_source_id": "4", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "northbound", - "beginning_cross_street": "Aurora Avenue", - "ending_cross_street": "NW 46th Place", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "local-access-only" - } - ], - "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.67801666259766, - 41.63699137361764 - ], - [ - -93.67807030677795, - 41.64402312904328 - ] - ] - } - }, - { - "id": "WZ389-SB", - "type": "Feature", - "properties": { - "data_source_id": "4", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "southbound", - "beginning_cross_street": "NW 46th Place", - "ending_cross_street": "Aurora Avenue", - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "local-access-only" - } - ], - "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z", - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "local-access-only" - } - ] - }, - { - "order": 2, - "status": "open", - "type": "bike-lane", - "restrictions": [ - { - "type": "local-access-only" - } - ] - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.67823123931885, - 41.64400709398592 - ], - [ - -93.67815613746643, - 41.63699137361764 - ] - ] - } - }, - { - "id": "71234", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80, I-35" - ], - "direction": "northbound", - "beginning_milepost": 125.2, - "ending_milepost": 126.3, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:00:00Z", - "end_date": "2010-01-02T01:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit": 55, - "description": "Single direction work zone without lane-level information.", - "creation_date": "2009-12-31T18:01:01Z", - "update_date": "2009-12-31T18:01:01Z" - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.776684050999961, - 41.617961698000045 - ], - [ - -93.776688974999956, - 41.622297226000057 - ] - ] - } - }, - { - "id": "WDM-58493-NB", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "128th Street" - ], - "direction": "northbound", - "beginning_cross_street": "US 6, Hickman Road", - "ending_cross_street": "Douglas Ave", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T06:00:00Z", - "end_date": "2010-05-01T05:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "description": "Single direction work zone with detailed lane-level information.", - "creation_date": "2009-12-13T13:35:26Z", - "update_date": "2009-12-31T15:11:16Z", - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 10, - "unit": "feet" - } - ] - }, - { - "order": 2, - "status": "closed", - "type": "general" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.791522243999964, - 41.614948252000033 - ], - [ - -93.79347973299997, - 41.628577397000072 - ] - ] - } - }, - { - "id": "65773-1", - "type": "Feature", - "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-2" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 3.1, - "ending_milepost": 2.9, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": false, - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit": 55, - "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; first event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "entrance-lane" - }, - { - "order": 6, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.720409507999989, - 41.593422456000042 - ], - [ - -93.724769801999969, - 41.593457451000063 - ] - ] - } - }, - { - "id": "65773-2", - "type": "Feature", - "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-3" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 2.9, - "ending_milepost": 2.5, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit": 55, - "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; second event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "exit-lane" - }, - { - "order": 6, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.724769801999969, - 41.593457451000063 - ], - [ - -93.730149926999957, - 41.593410350000056 - ] - ] - } - }, - { - "id": "65773-3", - "type": "Feature", - "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 2.5, - "ending_milepost": 2.0, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit": 55, - "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; third event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.730150629999969, - 41.593410307000056 - ], - [ - -93.742189315999951, - 41.592481500000076 - ] - ] - } - }, - { - "id": "7733", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80", - "I-35" - ], - "direction": "westbound", - "beginning_milepost": 133.967, - "ending_milepost": 133.112, - "beginning_accuracy": "verified", - "ending_accuracy": "verified", - "start_date": "2010-01-01T05:57:36Z", - "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "worker_presence": { - "are_workers_present": true, - "method": "wearables-present", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit": 55, - "restrictions": [], - "description": "Single-direction work zone with lane shift", - "creation_date": "2010-12-30T22:42:53Z", - "update_date": "2010-01-01T05:57:36Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "shift-right", - "type": "general" - }, - { - "order": 3, - "status": "shift-right", - "type": "general" - }, - { - "order": 4, - "status": "shift-right", - "type": "general" - }, - { - "order": 5, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.652714940999942, - 41.650200836000067 - ], - [ - -93.683089, - 41.651577294000049 - ] - ] - } - }, - { - "id": "121388-EB", - "type": "Feature", - "properties": { - "data_source_id": "3", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "beginning_milepost": 22.1, - "ending_milepost": 24.6, - "beginning_cross_street": "570th Avenue", - "ending_cross_street": "610th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [], - "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z", - "types_of_work": [ - { - "type_name": "maintenance", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.56064319610596, - 41.87764559047116 - ], - [ - -93.48284840583801, - 41.87750179926317 - ] - ] - } - }, - { - "id": "121388-WB", - "type": "Feature", - "properties": { - "data_source_id": "3", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "westbound", - "beginning_milepost": 24.6, - "ending_milepost": 22.1, - "beginning_cross_street": "610th Avenue", - "ending_cross_street": "570th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "no-parking" - } - ], - "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z", - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "general" - }, - { - "order": 2, - "status": "open", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "shoulder", - "restrictions": [ - { - "type": "no-parking" - } - ] - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.48284304141998, - 41.877607645600484 - ], - [ - -93.56063783168791, - 41.87786127667653 - ] - ] - } - }, - { - "id": "67890", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "children": [ - "67890-detour1", - "67890-detour2", - "67890-detour3" - ] - }, - "road_names": [ - "I-35" - ], - "direction": "northbound", - "beginning_milepost": 98.42, - "ending_milepost": 101.50, - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "scheduled", - "confidence": "medium", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit": 55, - "description": "Simple, single direction work zone with detour.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "shoulder" - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 11, - "unit": "feet" - } - ] - }, - { - "order": 3, - "status": "closed", - "type": "general" - }, - { - "order": 4, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.570535026999949, - 41.815141143000062 - ], - [ - -93.571141838999949, - 41.860579185000063 - ] - ] - } - }, - { - "id": "67890-detour1", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour2" - ] - }, - "road_names": [ - "F22" - ], - "direction": "westbound", - "ending_cross_street": "US 69", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, first segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.600376007999955, - 41.791257966000046 - ], - [ - -93.572478358999945, - 41.79135169500006 - ] - ] - } - }, - { - "id": "67890-detour2", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour3" - ] - }, - "road_names": [ - "US 69" - ], - "direction": "northbound", - "beginning_cross_street": "NE 126th Avenue", - "ending_cross_street": "IA 210", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, second segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.600401730999977, - 41.877744832000076 - ], - [ - -93.600373891999936, - 41.791257820000055 - ] - ] - } - }, - { - "id": "67890-detour3", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "6780" - ], - "first": [ - "67890-detour1" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "beginning_cross_street": "US 69", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, third/final segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.573353147999967, - 41.877796484000044 - ], - [ - -93.60040158399994, - 41.87774674700006 - ] - ] - } - }, - { - "id": "PLK01012016-Day1", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "verified", - "ending_accuracy": "verified", - "start_date": "2010-01-01T08:32:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; currently active work zone (day 1).", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2010-01-01T08:32:01Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46077919006348, - 41.83445374967984 - ], - [ - -93.51322174072264, - 41.83502130612205 - ] - ] - } - }, - { - "id": "PLK01012016-Day2", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-02T08:00:00Z", - "end_date": "2010-01-02T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 2) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day3", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-03T08:00:00Z", - "end_date": "2010-01-03T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 3) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day4", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-04T08:00:00Z", - "end_date": "2010-01-04T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 4) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day5", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-05T08:00:00Z", - "end_date": "2010-01-05T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 5) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - } - ] -} \ No newline at end of file From dfdddd214a05b0b566399f89cf310467bf343313 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:38:22 -0600 Subject: [PATCH 269/388] remove multipoint local access example Remove multipoint local access example to avoid redundant updates of examples in future. --- ...y_bidirectional_multipoint_example.geojson | 133 ------------------ 1 file changed, 133 deletions(-) delete mode 100644 create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson diff --git a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson deleted file mode 100644 index ab7eb6f3..00000000 --- a/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson +++ /dev/null @@ -1,133 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "3.1", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "WZ389-NB", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "northbound", - "beginning_cross_street": "Aurora Avenue", - "ending_cross_street": "NW 46th Place", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "local-access-only" - } - ], - "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.67801666259766, - 41.63699137361764 - ], - [ - -93.67807030677795, - 41.64402312904328 - ] - ] - } - }, - { - "id": "WZ389-SB", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "southbound", - "beginning_cross_street": "NW 46th Place", - "ending_cross_street": "Aurora Avenue", - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "local-access-only" - } - ], - "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z", - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "local-access-only" - } - ] - }, - { - "order": 2, - "status": "open", - "type": "bike-lane", - "restrictions": [ - { - "type": "local-access-only" - } - ] - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.67823123931885, - 41.64400709398592 - ], - [ - -93.67815613746643, - 41.63699137361764 - ] - ] - } - } - ] -} \ No newline at end of file From f293dd50fee291b094d608633aaa5bcc639efc61 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:38:50 -0600 Subject: [PATCH 270/388] Remove multipoint scenario 2 example Remove multipoint scenario 2 example to avoid redundant updates of examples in future. --- ...ario2_laneshift_multipoint_example.geojson | 109 ------------------ 1 file changed, 109 deletions(-) delete mode 100644 create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson diff --git a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson deleted file mode 100644 index 2c03b0ba..00000000 --- a/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson +++ /dev/null @@ -1,109 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "3.1", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_verify_method": "GPS", - "location_method": "channel-device-method" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "7733", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80", - "I-35" - ], - "direction": "westbound", - "beginning_milepost": 133.967, - "ending_milepost": 133.112, - "beginning_accuracy": "verified", - "ending_accuracy": "verified", - "start_date": "2010-01-01T05:57:36Z", - "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "worker_presence": { - "are_workers_present": true, - "method": "wearables-present", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit": 55, - "restrictions": [], - "description": "Single-direction work zone with lane shift", - "creation_date": "2010-12-30T22:42:53Z", - "update_date": "2010-01-01T05:57:36Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "shift-right", - "type": "general" - }, - { - "order": 3, - "status": "shift-right", - "type": "general" - }, - { - "order": 4, - "status": "shift-right", - "type": "general" - }, - { - "order": 5, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.652714940999942, - 41.650200836000067 - ], - [ - -93.683089, - 41.651577294000049 - ] - ] - } - } - ] -} \ No newline at end of file From 2371132eaf8c82135744a0742d4834f27446b290 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:39:20 -0600 Subject: [PATCH 271/388] remove multipoint scenario 3 example Remove multipoint scenario 3 example to avoid redundant updates of examples in future. --- ...er_bidrectional_multipoint_example.geojson | 166 ------------------ 1 file changed, 166 deletions(-) delete mode 100644 create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson diff --git a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson deleted file mode 100644 index 399dfe7e..00000000 --- a/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson +++ /dev/null @@ -1,166 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "3.1", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "121388-EB", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "beginning_milepost": 22.1, - "ending_milepost": 24.6, - "beginning_cross_street": "570th Avenue", - "ending_cross_street": "610th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [], - "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z", - "types_of_work": [ - { - "type_name": "maintenance", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.56064319610596, - 41.87764559047116 - ], - [ - -93.48284840583801, - 41.87750179926317 - ] - ] - } - }, - { - "id": "121388-WB", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "westbound", - "beginning_milepost": 24.6, - "ending_milepost": 22.1, - "beginning_cross_street": "610th Avenue", - "ending_cross_street": "570th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "no-parking" - } - ], - "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z", - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "general" - }, - { - "order": 2, - "status": "open", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "shoulder", - "restrictions": [ - { - "type": "no-parking" - } - ] - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.48284304141998, - 41.877607645600484 - ], - [ - -93.56063783168791, - 41.87786127667653 - ] - ] - } - } - ] -} \ No newline at end of file From 8236cb6992294a8e28282d01d095f9fc9413446c Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:39:46 -0600 Subject: [PATCH 272/388] Remove multipoint scenario 4 example Remove multipoint scenario 4 example to avoid redundant updates of examples in future. --- ...cenario4_detour_multipoint_example.geojson | 258 ------------------ 1 file changed, 258 deletions(-) delete mode 100644 create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson diff --git a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson deleted file mode 100644 index dd923bb0..00000000 --- a/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson +++ /dev/null @@ -1,258 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "3.1", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "67890", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "children": [ - "67890-detour1", - "67890-detour2", - "67890-detour3" - ] - }, - "road_names": [ - "I-35" - ], - "direction": "northbound", - "beginning_milepost": 98.42, - "ending_milepost": 101.50, - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "scheduled", - "confidence": "medium", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit": 55, - "description": "Simple, single direction work zone with detour.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "shoulder" - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 11, - "unit": "feet" - } - ] - }, - { - "order": 3, - "status": "closed", - "type": "general" - }, - { - "order": 4, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.570535026999949, - 41.815141143000062 - ], - [ - -93.571141838999949, - 41.860579185000063 - ] - ] - } - }, - { - "id": "67890-detour1", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour2" - ] - }, - "road_names": [ - "F22" - ], - "direction": "westbound", - "ending_cross_street": "US 69", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, first segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.600376007999955, - 41.791257966000046 - ], - [ - -93.572478358999945, - 41.79135169500006 - ] - ] - } - }, - { - "id": "67890-detour2", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour3" - ] - }, - "road_names": [ - "US 69" - ], - "direction": "northbound", - "beginning_cross_street": "NE 126th Avenue", - "ending_cross_street": "IA 210", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, second segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.600401730999977, - 41.877744832000076 - ], - [ - -93.600373891999936, - 41.791257820000055 - ] - ] - } - }, - { - "id": "67890-detour3", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "6780" - ], - "first": [ - "67890-detour1" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "beginning_cross_street": "US 69", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, third/final segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.573353147999967, - 41.877796484000044 - ], - [ - -93.60040158399994, - 41.87774674700006 - ] - ] - } - } - ] -} \ No newline at end of file From 37fe672706c713e4689eea8fe47fc50f87d772ef Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:40:05 -0600 Subject: [PATCH 273/388] Remove multipoint scenario 5 example Remove multipoint scenario 5 example to avoid redundant updates of examples in future. --- ...ario5_recurring_multipoint_example.geojson | 330 ------------------ 1 file changed, 330 deletions(-) delete mode 100644 create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson diff --git a/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson deleted file mode 100644 index 2461769f..00000000 --- a/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson +++ /dev/null @@ -1,330 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "3.1", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "PLK01012016-Day1", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "verified", - "ending_accuracy": "verified", - "start_date": "2010-01-01T08:32:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; currently active work zone (day 1).", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2010-01-01T08:32:01Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46077919006348, - 41.83445374967984 - ], - [ - -93.51322174072264, - 41.83502130612205 - ] - ] - } - }, - { - "id": "PLK01012016-Day2", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-02T08:00:00Z", - "end_date": "2010-01-02T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 2) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day3", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-03T08:00:00Z", - "end_date": "2010-01-03T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 3) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day4", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-04T08:00:00Z", - "end_date": "2010-01-04T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 4) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day5", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-05T08:00:00Z", - "end_date": "2010-01-05T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 5) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - } - ] -} \ No newline at end of file From 3a3b1da39ba3c06dde16bd8fce16f02e675196c8 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:40:33 -0600 Subject: [PATCH 274/388] Remove linestring comprehensive example Remove linestring comprehensive example to avoid redundant updates of examples in future. --- .../comprehensive_linestring_example.geojson | 2510 ----------------- 1 file changed, 2510 deletions(-) delete mode 100644 create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson diff --git a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson b/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson deleted file mode 100644 index cef5db3e..00000000 --- a/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson +++ /dev/null @@ -1,2510 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "3.1", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z", - "location_method": "channel-device-method" - }, - { - "data_source_id": "2", - "organization_name": "TestDOT", - "contact_name": "Samuel Sonny Sourcefeed", - "contact_email": "samuel.sourcefeed@testdot.gov", - "update_frequency": 60, - "update_date": "2020-06-18T14:39:01Z", - "location_method": "channel-device-method" - }, - { - "data_source_id": "3", - "organization_name": "Test County 1", - "contact_name": "Stu Spiel Sourcefeed", - "contact_email": "stu.sourcefeed@testcounty1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:05Z", - "location_method": "channel-device-method" - }, - { - "data_source_id": "4", - "organization_name": "Test City 2", - "contact_name": "Skip Jack Sourcefeed", - "contact_email": "skip.sourcefeed@testcity2.gov", - "update_frequency": 60, - "update_date": "2020-06-18T14:38:59Z", - "location_method": "channel-device-method" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "WZ389-NB", - "type": "Feature", - "properties": { - "data_source_id": "4", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "northbound", - "beginning_cross_street": "Aurora Avenue", - "ending_cross_street": "NW 46th Place", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "local-access-only" - } - ], - "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.67801666259766, - 41.63699137361764 - ], - [ - -93.67804884910583, - 41.63971757283587 - ], - [ - -93.6780595779419, - 41.64156971886528 - ], - [ - -93.6780595779419, - 41.642211142309336 - ], - [ - -93.67807030677795, - 41.64325344178853 - ], - [ - -93.67807030677795, - 41.64402312904328 - ] - ] - } - }, - { - "id": "WZ389-SB", - "type": "Feature", - "properties": { - "data_source_id": "4", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "southbound", - "beginning_cross_street": "NW 46th Place", - "ending_cross_street": "Aurora Avenue", - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "local-access-only" - } - ], - "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z", - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "local-access-only" - } - ] - }, - { - "order": 2, - "status": "open", - "type": "bike-lane", - "restrictions": [ - { - "type": "local-access-only" - } - ] - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.67823123931885, - 41.64400709398592 - ], - [ - -93.67819905281067, - 41.642916700723454 - ], - [ - -93.67820978164673, - 41.642090875899925 - ], - [ - -93.67819905281067, - 41.641810253405005 - ], - [ - -93.67819905281067, - 41.641273058363055 - ], - [ - -93.67818832397461, - 41.63999820444394 - ], - [ - -93.67816686630249, - 41.63866719797019 - ], - [ - -93.67815613746643, - 41.63699137361764 - ] - ] - } - }, - { - "id": "71234", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80, I-35" - ], - "direction": "northbound", - "beginning_milepost": 125.2, - "ending_milepost": 126.3, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:00:00Z", - "end_date": "2010-01-02T01:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit": 55, - "description": "Single direction work zone without lane-level information.", - "creation_date": "2009-12-31T18:01:01Z", - "update_date": "2009-12-31T18:01:01Z" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.776684050999961, - 41.617961698000045 - ], - [ - -93.776682957, - 41.618244962000063 - ], - [ - -93.776677372999984, - 41.619603362000078 - ], - [ - -93.776674365999952, - 41.620322783000063 - ], - [ - -93.776671741999962, - 41.620950321000066 - ], - [ - -93.776688974999956, - 41.622297226000057 - ] - ] - } - }, - { - "id": "WDM-58493-NB", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "128th Street" - ], - "direction": "northbound", - "beginning_cross_street": "US 6, Hickman Road", - "ending_cross_street": "Douglas Ave", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T06:00:00Z", - "end_date": "2010-05-01T05:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "description": "Single direction work zone with detailed lane-level information.", - "creation_date": "2009-12-13T13:35:26Z", - "update_date": "2009-12-31T15:11:16Z", - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 10, - "unit": "feet" - } - ] - }, - { - "order": 2, - "status": "closed", - "type": "general" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.791522243999964, - 41.614948252000033 - ], - [ - -93.791505319999942, - 41.61501428300005 - ], - [ - -93.791405791999978, - 41.615577076000079 - ], - [ - -93.791345430999968, - 41.615782444000047 - ], - [ - -93.791280304999987, - 41.615977213000065 - ], - [ - -93.791200891999949, - 41.616140173000076 - ], - [ - -93.791079009999976, - 41.616296165000051 - ], - [ - -93.790558010999973, - 41.61681760700003 - ], - [ - -93.790135601999964, - 41.617246805000036 - ], - [ - -93.789830552999945, - 41.617562480000061 - ], - [ - -93.789680613999963, - 41.617771613000059 - ], - [ - -93.789596382999946, - 41.617913356000031 - ], - [ - -93.789502863999985, - 41.618086964000042 - ], - [ - -93.78945179699997, - 41.618264005000071 - ], - [ - -93.789424159999953, - 41.61840914000004 - ], - [ - -93.789414473999955, - 41.618523310000057 - ], - [ - -93.789406687999985, - 41.618788623000057 - ], - [ - -93.789440425999942, - 41.620294861000048 - ], - [ - -93.789441241999953, - 41.620405535000032 - ], - [ - -93.789449826999942, - 41.620516022000061 - ], - [ - -93.789466157999982, - 41.620626017000063 - ], - [ - -93.78949019099997, - 41.620735214000035 - ], - [ - -93.789521855999965, - 41.62084330700003 - ], - [ - -93.78956107, - 41.62095 - ], - [ - -93.789607718999946, - 41.621054995000065 - ], - [ - -93.789661678999948, - 41.621157998000058 - ], - [ - -93.789725124999961, - 41.621262305000073 - ], - [ - -93.789796062999983, - 41.621363857000063 - ], - [ - -93.789874285999986, - 41.621462354000073 - ], - [ - -93.789959554999939, - 41.621557500000051 - ], - [ - -93.790051618999939, - 41.621649010000056 - ], - [ - -93.790150204999975, - 41.621736613000053 - ], - [ - -93.790255013999968, - 41.621820048000075 - ], - [ - -93.790365738, - 41.621899067000072 - ], - [ - -93.790482044999976, - 41.621973433000051 - ], - [ - -93.790603584999985, - 41.622042923000038 - ], - [ - -93.790730001999975, - 41.622107331000052 - ], - [ - -93.790860916999975, - 41.622166468000046 - ], - [ - -93.791037923999966, - 41.622265540000058 - ], - [ - -93.791219643999966, - 41.622359685000049 - ], - [ - -93.791405833999988, - 41.622448775000066 - ], - [ - -93.791596247999962, - 41.62253269200005 - ], - [ - -93.791974661999973, - 41.622789772000033 - ], - [ - -93.792348386999947, - 41.623050684000077 - ], - [ - -93.79264079099994, - 41.62326022700006 - ], - [ - -93.793051083999956, - 41.623588822000045 - ], - [ - -93.793245118999948, - 41.623807143000079 - ], - [ - -93.793416509999986, - 41.62403972900006 - ], - [ - -93.793538291999937, - 41.62424188500006 - ], - [ - -93.793626206999988, - 41.624429215000077 - ], - [ - -93.793710504999979, - 41.624653499000033 - ], - [ - -93.793764538999937, - 41.624880703000031 - ], - [ - -93.793784475999985, - 41.62510231300007 - ], - [ - -93.793785748999937, - 41.625380807000056 - ], - [ - -93.793738188999953, - 41.625670969000055 - ], - [ - -93.793679893999979, - 41.625937897000028 - ], - [ - -93.793612129999985, - 41.626248174000068 - ], - [ - -93.793525080999984, - 41.626631768000038 - ], - [ - -93.793438316999982, - 41.626965183000038 - ], - [ - -93.793363929999941, - 41.627301995000039 - ], - [ - -93.793344298999955, - 41.627537681000035 - ], - [ - -93.793345492999947, - 41.627799206000077 - ], - [ - -93.793356849999952, - 41.628019275000042 - ], - [ - -93.793396009, - 41.62828070300003 - ], - [ - -93.79347973299997, - 41.628577397000072 - ] - ] - } - }, - { - "id": "65773-1", - "type": "Feature", - "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-2" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 3.1, - "ending_milepost": 2.9, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": false, - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit": 55, - "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; first event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "entrance-lane" - }, - { - "order": 6, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.720409507999989, - 41.593422456000042 - ], - [ - -93.721987662999936, - 41.593428462000077 - ], - [ - -93.724060080999948, - 41.593444666000039 - ], - [ - -93.724769801999969, - 41.593457451000063 - ] - ] - } - }, - { - "id": "65773-2", - "type": "Feature", - "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-3" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 2.9, - "ending_milepost": 2.5, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "total_num_lanes": 4, - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit": 55, - "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; second event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "exit-lane" - }, - { - "order": 6, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.724769801999969, - 41.593457451000063 - ], - [ - -93.725783878999948, - 41.593459089000078 - ], - [ - -93.72589773499999, - 41.593459271000029 - ], - [ - -93.727600448999965, - 41.593468041000051 - ], - [ - -93.728253463999977, - 41.593468762000043 - ], - [ - -93.72899278899996, - 41.593459177000057 - ], - [ - -93.729737457999988, - 41.593435398000054 - ], - [ - -93.730149926999957, - 41.593410350000056 - ] - ] - } - }, - { - "id": "65773-3", - "type": "Feature", - "properties": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "beginning_milepost": 2.5, - "ending_milepost": 2.0, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "total_num_lanes": 3, - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit": 55, - "restrictions": [], - "description": "Single-direction work zone represented by three sequential road events; third event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.730150629999969, - 41.593410307000056 - ], - [ - -93.730393025999945, - 41.593395588000078 - ], - [ - -93.731358798999963, - 41.593326786000034 - ], - [ - -93.731760730999952, - 41.59329153300007 - ], - [ - -93.732583278999982, - 41.59323325400004 - ], - [ - -93.732583278999982, - 41.59323325400004 - ], - [ - -93.732761573999937, - 41.593220621000057 - ], - [ - -93.733481823999966, - 41.593160405000049 - ], - [ - -93.734099563999962, - 41.59310849700006 - ], - [ - -93.735278425999979, - 41.59301896900007 - ], - [ - -93.735701953999978, - 41.592987710000045 - ], - [ - -93.736446499999943, - 41.592931475000057 - ], - [ - -93.737679269999944, - 41.592827630000045 - ], - [ - -93.738580275999936, - 41.592760926000039 - ], - [ - -93.739154871999972, - 41.592719210000041 - ], - [ - -93.739613443999986, - 41.592679760000067 - ], - [ - -93.739774495999939, - 41.592668639000067 - ], - [ - -93.739774495999939, - 41.592668639000067 - ], - [ - -93.740036978999967, - 41.592650510000055 - ], - [ - -93.740347204999978, - 41.592627574000062 - ], - [ - -93.74078960199995, - 41.592592205000074 - ], - [ - -93.741952240999979, - 41.592498589000058 - ], - [ - -93.742189315999951, - 41.592481500000076 - ] - ] - } - }, - { - "id": "7733", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80", - "I-35" - ], - "direction": "westbound", - "beginning_milepost": 133.967, - "ending_milepost": 133.112, - "beginning_accuracy": "verified", - "ending_accuracy": "verified", - "start_date": "2010-01-01T05:57:36Z", - "end_date": "2010-01-05T23:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "worker_presence": { - "are_workers_present": true, - "method": "wearables-present", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit": 55, - "restrictions": [], - "description": "Single-direction work zone with lane shift", - "creation_date": "2010-12-30T22:42:53Z", - "update_date": "2010-01-01T05:57:36Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "shift-right", - "type": "general" - }, - { - "order": 3, - "status": "shift-right", - "type": "general" - }, - { - "order": 4, - "status": "shift-right", - "type": "general" - }, - { - "order": 5, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.652714940999942, - 41.650200836000067 - ], - [ - -93.654565142999957, - 41.650281119000056 - ], - [ - -93.655964627999936, - 41.650350708000076 - ], - [ - -93.65929743199996, - 41.650497674000064 - ], - [ - -93.66247390999996, - 41.650639043000069 - ], - [ - -93.665256117999945, - 41.650763126000072 - ], - [ - -93.665890640999976, - 41.650791415000072 - ], - [ - -93.667831858999989, - 41.650878240000054 - ], - [ - -93.669295947999956, - 41.650943700000028 - ], - [ - -93.672369497999966, - 41.651076369000066 - ], - [ - -93.675896873999989, - 41.651236853000057 - ], - [ - -93.679374683999981, - 41.651391586000045 - ], - [ - -93.680869566999945, - 41.651461030000064 - ], - [ - -93.681220380999946, - 41.65147732500003 - ], - [ - -93.682955475999961, - 41.651551769000037 - ], - [ - -93.683089, - 41.651577294000049 - ] - ] - } - }, - { - "id": "121388-EB", - "type": "Feature", - "properties": { - "data_source_id": "3", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "beginning_milepost": 22.1, - "ending_milepost": 24.6, - "beginning_cross_street": "570th Avenue", - "ending_cross_street": "610th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z", - "types_of_work": [ - { - "type_name": "maintenance", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.56064319610596, - 41.87764559047116 - ], - [ - -93.5451292991638, - 41.87767754402901 - ], - [ - -93.53145003318785, - 41.87766955564103 - ], - [ - -93.5067629814148, - 41.877565706506665 - ], - [ - -93.48284840583801, - 41.87750179926317 - ] - ] - } - }, - { - "id": "121388-WB", - "type": "Feature", - "properties": { - "data_source_id": "3", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "westbound", - "beginning_milepost": 24.6, - "ending_milepost": 22.1, - "beginning_cross_street": "610th Avenue", - "ending_cross_street": "570th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "no-parking" - } - ], - "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z", - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "general" - }, - { - "order": 2, - "status": "open", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "shoulder", - "restrictions": [ - { - "type": "no-parking" - } - ] - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.48284304141998, - 41.877607645600484 - ], - [ - -93.49073946475983, - 41.87764559047116 - ], - [ - -93.50573301315308, - 41.877697514994544 - ], - [ - -93.51188063621521, - 41.877749439475735 - ], - [ - -93.53036642074585, - 41.87782133484157 - ], - [ - -93.54414224624632, - 41.877869265040545 - ], - [ - -93.56063783168791, - 41.87786127667653 - ] - ] - } - }, - { - "id": "67890", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "children": [ - "67890-detour1", - "67890-detour2", - "67890-detour3" - ] - }, - "road_names": [ - "I-35" - ], - "direction": "northbound", - "beginning_milepost": 98.42, - "ending_milepost": 101.50, - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "scheduled", - "confidence": "medium", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit": 55, - "description": "Simple, single direction work zone with detour.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z", - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "shoulder" - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 11, - "unit": "feet" - } - ] - }, - { - "order": 3, - "status": "closed", - "type": "general" - }, - { - "order": 4, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.570535026999949, - 41.815141143000062 - ], - [ - -93.570558665999954, - 41.815778842000043 - ], - [ - -93.570582206999973, - 41.816327889000036 - ], - [ - -93.570613866999963, - 41.817305885000053 - ], - [ - -93.570653239999956, - 41.818343932000062 - ], - [ - -93.570692683999937, - 41.819444889000067 - ], - [ - -93.57072468399997, - 41.820444622000025 - ], - [ - -93.570725033999963, - 41.820762049000052 - ], - [ - -93.570737569999949, - 41.821725757000024 - ], - [ - -93.570735194999941, - 41.823038359000066 - ], - [ - -93.570744205999972, - 41.824273739000034 - ], - [ - -93.570741062999957, - 41.824888576000035 - ], - [ - -93.570745857999952, - 41.825769359000049 - ], - [ - -93.570750405999945, - 41.82642422400005 - ], - [ - -93.570751056999939, - 41.827013323000074 - ], - [ - -93.570767342999943, - 41.82791125600005 - ], - [ - -93.570783135999989, - 41.828363077000063 - ], - [ - -93.57081113199996, - 41.829478340000037 - ], - [ - -93.570846661999951, - 41.830487788000028 - ], - [ - -93.570890330999987, - 41.83194334500007 - ], - [ - -93.570902443999955, - 41.832520995000039 - ], - [ - -93.570930157999953, - 41.833378885000059 - ], - [ - -93.570954688999961, - 41.834811573000025 - ], - [ - -93.570948738999959, - 41.836344370000063 - ], - [ - -93.570942684999977, - 41.837782799000081 - ], - [ - -93.570936722999988, - 41.839304156000026 - ], - [ - -93.570923044999972, - 41.840765465000061 - ], - [ - -93.570924651999974, - 41.84221532600003 - ], - [ - -93.570926279999981, - 41.843685202000074 - ], - [ - -93.570931724, - 41.845146499000066 - ], - [ - -93.570929340999953, - 41.846447657000056 - ], - [ - -93.570938627999965, - 41.84792610900007 - ], - [ - -93.570932442999947, - 41.849247287000026 - ], - [ - -93.570939776999978, - 41.849617513000055 - ], - [ - -93.570957815999975, - 41.850528174000033 - ], - [ - -93.570991150999987, - 41.852249359000041 - ], - [ - -93.571024497999986, - 41.85397641600008 - ], - [ - -93.571053711, - 41.855521371000066 - ], - [ - -93.571083075999979, - 41.85719849700007 - ], - [ - -93.57110858599998, - 41.858940244000053 - ], - [ - -93.571141838999949, - 41.860579185000063 - ] - ] - } - }, - { - "id": "67890-detour1", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour2" - ] - }, - "road_names": [ - "F22" - ], - "direction": "westbound", - "ending_cross_street": "US 69", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, first segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.600376007999955, - 41.791257966000046 - ], - [ - -93.600375128999985, - 41.791257965000057 - ], - [ - -93.600373887999979, - 41.79125798900003 - ], - [ - -93.598991312999942, - 41.791285770000059 - ], - [ - -93.597408247999965, - 41.791298693000044 - ], - [ - -93.587018347999958, - 41.791370250000057 - ], - [ - -93.581030593999969, - 41.791384089000076 - ], - [ - -93.575477690999946, - 41.791372395000053 - ], - [ - -93.573306168999977, - 41.791361989000052 - ], - [ - -93.572569235999936, - 41.791351637000048 - ], - [ - -93.572478358999945, - 41.79135169500006 - ] - ] - } - }, - { - "id": "67890-detour2", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour3" - ] - }, - "road_names": [ - "US 69" - ], - "direction": "northbound", - "beginning_cross_street": "NE 126th Avenue", - "ending_cross_street": "IA 210", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, second segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.600401730999977, - 41.877744832000076 - ], - [ - -93.600383302999944, - 41.876221974000032 - ], - [ - -93.600399342999935, - 41.874445421000075 - ], - [ - -93.600382543999956, - 41.872739253000077 - ], - [ - -93.600389303999975, - 41.871047136000072 - ], - [ - -93.600386637999975, - 41.869347993000076 - ], - [ - -93.600379122999982, - 41.867557387000033 - ], - [ - -93.600390145999938, - 41.865583833000073 - ], - [ - -93.60037319199995, - 41.863775643000054 - ], - [ - -93.600372301999982, - 41.863207043000045 - ], - [ - -93.600381568999978, - 41.862919375000047 - ], - [ - -93.600376814999947, - 41.861738109000044 - ], - [ - -93.60037443899995, - 41.860563973000069 - ], - [ - -93.60037443899995, - 41.859363694000081 - ], - [ - -93.60036493299998, - 41.858142023000028 - ], - [ - -93.600360178999949, - 41.85695124800003 - ], - [ - -93.600357800999973, - 41.855774736000058 - ], - [ - -93.600357801999962, - 41.854583964000028 - ], - [ - -93.600353046999942, - 41.853378931000066 - ], - [ - -93.600348294999947, - 41.852188157000057 - ], - [ - -93.600343540999972, - 41.85096173200003 - ], - [ - -93.600341164999975, - 41.849768581000035 - ], - [ - -93.600338180999984, - 41.84926536100005 - ], - [ - -93.600334034999946, - 41.848565926000049 - ], - [ - -93.600329278999936, - 41.847403672000041 - ], - [ - -93.600324526999941, - 41.846174873000052 - ], - [ - -93.600319772999967, - 41.844976968000026 - ], - [ - -93.600315018999936, - 41.843786195000064 - ], - [ - -93.600305511999977, - 41.842590668000071 - ], - [ - -93.600296004999961, - 41.841487836000056 - ], - [ - -93.600296003999972, - 41.840275672000075 - ], - [ - -93.600291251999977, - 41.839065885000025 - ], - [ - -93.600291250999987, - 41.837927402000048 - ], - [ - -93.600284120999959, - 41.836760396000045 - ], - [ - -93.600279367999974, - 41.83553872400006 - ], - [ - -93.600273437999988, - 41.834756276000064 - ], - [ - -93.600272235999967, - 41.834597515000041 - ], - [ - -93.600274613999943, - 41.833775145000061 - ], - [ - -93.600272236999956, - 41.832546343000047 - ], - [ - -93.600269860999958, - 41.831357947000072 - ], - [ - -93.600265106999984, - 41.830238478000069 - ], - [ - -93.600269860999958, - 41.829584861000058 - ], - [ - -93.600262728999951, - 41.829031068000063 - ], - [ - -93.60026985899998, - 41.828714954000077 - ], - [ - -93.600265106999984, - 41.827833163000037 - ], - [ - -93.600265732999958, - 41.82751014300004 - ], - [ - -93.600267483999971, - 41.82661149300003 - ], - [ - -93.600267481999936, - 41.825458747000027 - ], - [ - -93.60026985899998, - 41.824289366000073 - ], - [ - -93.600262728999951, - 41.823096216000067 - ], - [ - -93.60026272999994, - 41.822017153000047 - ], - [ - -93.600265008999941, - 41.821111594000058 - ], - [ - -93.600263135999967, - 41.820261561000052 - ], - [ - -93.600264984999967, - 41.819911794000063 - ], - [ - -93.600262608999969, - 41.818602179000038 - ], - [ - -93.600255478999941, - 41.817525493000062 - ], - [ - -93.600255478999941, - 41.816325213000027 - ], - [ - -93.600248348999969, - 41.815205744000025 - ], - [ - -93.600243592999959, - 41.814019724000048 - ], - [ - -93.600245971999982, - 41.812914517000024 - ], - [ - -93.600253101999954, - 41.811806931000035 - ], - [ - -93.600269738999941, - 41.81082056200006 - ], - [ - -93.600276870999949, - 41.80970822200004 - ], - [ - -93.600288753999962, - 41.808624405000046 - ], - [ - -93.600295884, - 41.807576241000049 - ], - [ - -93.600310144, - 41.806435380000039 - ], - [ - -93.60031408499998, - 41.805741814000044 - ], - [ - -93.600314898999954, - 41.805598749000069 - ], - [ - -93.600324404999981, - 41.804529191000029 - ], - [ - -93.600319769999942, - 41.803418761000046 - ], - [ - -93.60031965099995, - 41.803390708000052 - ], - [ - -93.600322028999983, - 41.802354426000079 - ], - [ - -93.600322026999947, - 41.801782615000036 - ], - [ - -93.600322026999947, - 41.80161524500005 - ], - [ - -93.600331535999942, - 41.800495775000059 - ], - [ - -93.600326782999957, - 41.799371551000036 - ], - [ - -93.600331535999942, - 41.798416082000074 - ], - [ - -93.600331535999942, - 41.797327511000049 - ], - [ - -93.60033866699996, - 41.796314997000025 - ], - [ - -93.600345797999978, - 41.795214543000043 - ], - [ - -93.600350549999973, - 41.794040406000079 - ], - [ - -93.600362434999965, - 41.792899545000068 - ], - [ - -93.600360056999989, - 41.791818106000051 - ], - [ - -93.600373887999979, - 41.79125798900003 - ], - [ - -93.600373891999936, - 41.791257820000055 - ] - ] - } - }, - { - "id": "67890-detour3", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "6780" - ], - "first": [ - "67890-detour1" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "beginning_cross_street": "US 69", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Detour for road event 67890, third/final segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.573353147999967, - 41.877796484000044 - ], - [ - -93.573356421999961, - 41.87779647800005 - ], - [ - -93.574056398999971, - 41.877795233000029 - ], - [ - -93.577496035999957, - 41.877791515000069 - ], - [ - -93.578346253999939, - 41.877790018000042 - ], - [ - -93.579435310999941, - 41.877788094000039 - ], - [ - -93.580892132999963, - 41.877785500000073 - ], - [ - -93.581418045999953, - 41.877784560000066 - ], - [ - -93.581835475, - 41.877783302000068 - ], - [ - -93.586943989999952, - 41.877767791000053 - ], - [ - -93.591580114999942, - 41.877755708000052 - ], - [ - -93.596289923999962, - 41.877747609000039 - ], - [ - -93.60040158399994, - 41.87774674700006 - ] - ] - } - }, - { - "id": "PLK01012016-Day1", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "verified", - "ending_accuracy": "verified", - "start_date": "2010-01-01T08:32:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; currently active work zone (day 1).", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2010-01-01T08:32:01Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46077919006348, - 41.83445374967984 - ], - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ], - [ - -93.51322174072264, - 41.83502130612205 - ] - ] - } - }, - { - "id": "PLK01012016-Day2", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-02T08:00:00Z", - "end_date": "2010-01-02T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 2) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day3", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-03T08:00:00Z", - "end_date": "2010-01-03T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 3) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day4", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-04T08:00:00Z", - "end_date": "2010-01-04T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 4) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - }, - { - "id": "PLK01012016-Day5", - "type": "Feature", - "properties": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "PLK01012016" - ] - }, - "road_names": [ - "NE 150th Avenue" - ], - "direction": "westbound", - "beginning_cross_street": "NE 72nd Street", - "ending_cross_street": "NE 56th Street", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-05T08:00:00Z", - "end_date": "2010-01-05T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "pending", - "vehicle_impact": "all-lanes-open", - "description": "Work zone with recurring event; pending (day 5) work zone.", - "creation_date": "2009-12-29T15:37:57Z", - "update_date": "2009-12-29T15:37:57Z", - "types_of_work": [ - { - "type_name": "roadside-work", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general" - }, - { - "order": 2, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.46380472183228, - 41.8344297683109 - ], - [ - -93.46654057502747, - 41.83445374967984 - ], - [ - -93.46984505653381, - 41.83450171239077 - ], - [ - -93.47622871398926, - 41.83458165016244 - ], - [ - -93.48343849182129, - 41.83470155663275 - ], - [ - -93.49206447601318, - 41.834813469135725 - ], - [ - -93.49886655807495, - 41.8349093939825 - ], - [ - -93.50240707397461, - 41.83495735635197 - ] - ] - } - } - ] -} \ No newline at end of file From e400db63f18b5be559389e3bcf32c31b476e9bef Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:41:48 -0600 Subject: [PATCH 275/388] Added new bridge height restriction example --- ...dge_restriction_linestring_example.geojson | 245 ++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson diff --git a/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson b/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson new file mode 100644 index 00000000..de2cf1f2 --- /dev/null +++ b/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson @@ -0,0 +1,245 @@ +{ + "road_event_feed_info": { + "update_date": "2021-07-01T15:00:00Z", + "publisher": "New York State DOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 300, + "version": "4.0", + "data_sources": [{ + "data_source_id": "1", + "organization_name": "New York City DOT", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 60, + "update_date": "2021-07-01T00:00:00Z" + }] + }, + "type": "FeatureCollection", + "features": [{ + "id": "Bridge1", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": 1, + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "northbound" + }, + "restrictions":[ + { + "type": "reduced-height", + "value": 10.5, + "units": "feet" + } + ], + "lanes":[ + { + "order": 1, + "status": "open", + "type": "general", + "restrictions":[ + { + "type": "reduced-height", + "value": 10.5, + "units": "feet" + } + ] + }, + { + "order": 2, + "status": "open", + "type": "general", + "restrictions":[ + { + "type": "reduced-height", + "value": 11, + "units": "feet" + } + ] + }, + { + "order": 3, + "status": "open", + "type": "general", + "restrictions":[ + { + "type": "reduced-height", + "value": 10.5, + "units": "feet" + } + ] + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83857488632202, + 40.83782481579416 + ], + [ + -73.8385534286499, + 40.83905758069452 + ], + [ + -73.83834958076477, + 40.84045773030475 + ], + [ + -73.83817791938782, + 40.841269397695825 + ], + [ + -73.83692264556885, + 40.84498467829638 + ], + [ + -73.83683949708939, + 40.84519569836051 + ], + [ + -73.83674025535583, + 40.84555483673242 + ], + [ + -73.83666649460793, + 40.84582976902955 + ], + [ + -73.83646667003632, + 40.84667890696712 + ] + ] + } + }, + { + "id": "Bridge2", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": 1, + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "southbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 9.0, + "units": "feet" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83725792169571, + 40.84455654898646 + ], + [ + -73.8378158211708, + 40.84294748850873 + ], + [ + -73.83808672428131, + 40.84214192905569 + ], + [ + -73.83834153413773, + 40.84133635981177 + ] + ] + } + }, + { + "id": "Bridge3", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": 1, + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "southbound" + }, + "restrictions":[ + { + "type": "reduced-height", + "value": 11, + "units": "feet" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83834153413773, + 40.841335852523244 + ], + [ + -73.8384260237217, + 40.84103300059402 + ], + [ + -73.83847497403622, + 40.84082856207721 + ], + [ + -73.83851654827595, + 40.84063071775089 + ], + [ + -73.83855678141117, + 40.84045722300951 + ], + [ + -73.83865937590599, + 40.83983324694044 + ], + [ + -73.83872039616108, + 40.8393289888175 + ], + [ + -73.83875325322151, + 40.838710582522424 + ], + [ + -73.83877135813236, + 40.838443230352674 + ], + [ + -73.83877202868462, + 40.83817942829337 + ], + [ + -73.83877471089363, + 40.83773502091179 + ], + [ + -73.83877538144588, + 40.83721857114785 + ], + [ + -73.83877336978912, + 40.83710442404608 + ] + ] + } + }] +} From 46e5c4f1b9756a7495ab6f5e3dd0c769e8adc23f Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 09:42:35 -0600 Subject: [PATCH 276/388] Update reference to bridge restriction --- create-feed/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/README.md b/create-feed/README.md index 63d48be2..5f3eef98 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -89,7 +89,7 @@ The local access only example ([Linestring](/create-feed/examples/linestring-exa ### Bridge Height Restriction -The bridge height restriction example ([Linestring](/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson)) shows how the restriction road event type can be used within a feed. +The bridge height restriction example ([Linestring](/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson)) shows how the restriction road event type can be used within a feed. - Three bridge height restriction examples are shown with only the core details and restriction as needed as part of the restriction road event - One road event, `Bridge1`, also includes lane level details including additional height restrictions values for individual lanes. From 79ad5473a3a269953ff7dec806cc7698177c5119 Mon Sep 17 00:00:00 2001 From: Mark Mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 3 Dec 2021 15:52:00 -0500 Subject: [PATCH 277/388] Update bridge clearance example Change "units"->"unit" and data_source_id to strings --- ...idge_restriction_linestring_example.geojson | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson b/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson index de2cf1f2..8772f16c 100644 --- a/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson @@ -22,7 +22,7 @@ "properties": { "core_details": { "event_type": "restriction", - "data_source_id": 1, + "data_source_id": "1", "road_names": [ "HRP", "Hutchinson Parkway", @@ -34,7 +34,7 @@ { "type": "reduced-height", "value": 10.5, - "units": "feet" + "unit": "feet" } ], "lanes":[ @@ -46,7 +46,7 @@ { "type": "reduced-height", "value": 10.5, - "units": "feet" + "unit": "feet" } ] }, @@ -58,7 +58,7 @@ { "type": "reduced-height", "value": 11, - "units": "feet" + "unit": "feet" } ] }, @@ -70,7 +70,7 @@ { "type": "reduced-height", "value": 10.5, - "units": "feet" + "unit": "feet" } ] } @@ -124,7 +124,7 @@ "properties": { "core_details": { "event_type": "restriction", - "data_source_id": 1, + "data_source_id": "1", "road_names": [ "HRP", "Hutchinson Parkway", @@ -136,7 +136,7 @@ { "type": "reduced-height", "value": 9.0, - "units": "feet" + "unit": "feet" } ] }, @@ -168,7 +168,7 @@ "properties": { "core_details": { "event_type": "restriction", - "data_source_id": 1, + "data_source_id": "1", "road_names": [ "HRP", "Hutchinson Parkway", @@ -180,7 +180,7 @@ { "type": "reduced-height", "value": 11, - "units": "feet" + "unit": "feet" } ] }, From 01c40478b6ee3198867158c30269b57354b32bd4 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 15:09:02 -0600 Subject: [PATCH 278/388] Convert scenario 1 example from mph to kmh --- .../scenario1_simple_linestring_example.geojson | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index 89ca80f9..d15e1c70 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -54,7 +54,7 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit_kph": 55 + "reduced_speed_limit_kph": 88 }, "geometry": { "type": "LineString", @@ -441,7 +441,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 55, + "reduced_speed_limit_kph": 88, "restrictions": [], "types_of_work": [ { @@ -550,7 +550,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 55, + "reduced_speed_limit_kph": 88, "restrictions": [], "types_of_work": [ { @@ -672,7 +672,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 55, + "reduced_speed_limit_kph": 88, "restrictions": [], "types_of_work": [ { From bb85a2034677df5d348ef7138413e3e6f18273cc Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 15:09:56 -0600 Subject: [PATCH 279/388] Convert scenario 1 example from mph to kmh multipoint --- .../scenario1_simple_multipoint_example.geojson | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 65f74546..26673975 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -55,7 +55,7 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit_kph": 55 + "reduced_speed_limit_kph": 88 }, "geometry": { "type": "MultiPoint", @@ -174,7 +174,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 55, + "reduced_speed_limit_kph": 88, "restrictions": [], "types_of_work": [ { @@ -275,7 +275,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 55, + "reduced_speed_limit_kph": 88, "restrictions": [], "types_of_work": [ { @@ -373,7 +373,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 55, + "reduced_speed_limit_kph": 88, "restrictions": [], "types_of_work": [ { From 371214b501599906abb51616864261de8254758d Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 15:10:31 -0600 Subject: [PATCH 280/388] Convert scenario 2 example from mph to kmh --- .../scenario2_laneshift_linestring_example.geojson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index 2fb73c53..b7cb9197 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -56,7 +56,7 @@ "mobile-equipment-in-work-zone-moving" ] }, - "reduced_speed_limit_kph": 55, + "reduced_speed_limit_kph": 88, "restrictions": [], "types_of_work": [ { From 2d7fd1e55aff06d4c2b9a88ec5738fed990d1f78 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Fri, 3 Dec 2021 15:11:43 -0600 Subject: [PATCH 281/388] Convert scenario 4 example from mph to kmh --- .../scenario4_detour_linestring_example.geojson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 248e2dd8..2b858678 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -63,7 +63,7 @@ "mobile-equipment-in-work-zone-moving" ] }, - "reduced_speed_limit_kph": 55, + "reduced_speed_limit_kph": 88, "types_of_work": [ { "type_name": "surface-work", From 71d3b2153ebbbb185b9e5a569ae38544da2d724d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 14:55:41 -0500 Subject: [PATCH 282/388] Fix grammar/reword sentence in README --- create-feed/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/README.md b/create-feed/README.md index 5f3eef98..04d64b4d 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -25,7 +25,7 @@ The tables below detail the specificaton's content and describe the data used to ### WZDx Work Zone (Road Event) Information -- The [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) object represents the core details of an event occurring on a roadway (i.e. a "road event") that is shared by all types of road events. +- The [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) object represents the core details of an event occurring on a roadway (i.e. a "road event") that applies to all types of road events. - The [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object describes a work zone event. - The [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) object describes a detour event. - The [TypeOfWork](/spec-content/objects/TypeOfWork.md) object describes the work taking place along the road. If applicable, it indicates if the work changes the roadway's architecture. From b1e9d05368206b84cf8f390ce3f5c3fa297a2301 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 15:01:11 -0500 Subject: [PATCH 283/388] CUpdate links in create-feed/README --- create-feed/README.md | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/create-feed/README.md b/create-feed/README.md index 04d64b4d..a4ee3121 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -40,7 +40,7 @@ The figure below models the tables and their relationships. ![WZDx Object Diagram](/images/wzdx_object_diagram.jpg) ## Feed Examples -The following WZDx feed examples represent a variety of scenarios common when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type as well as one `MultiPoint` geometry type for scenario 1. +The following WZDx feed examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type. as well as one `MultiPoint` geometry type for scenario 1. Below is a summary of each of the example WZDx feeds and detailed differences for each of the road events: @@ -52,19 +52,19 @@ Scenario 1 ([Linestring](/create-feed/examples/linestring-examples/scenario1_sim - Third work zone is single direction, three sequential events, with detailed lane information. This work zone demonstrates the use of the `relationship` property, both `first` and `next` to indiciate the order of the road events and `parents` to indicate all road events are related (they all have `parents` as `65773`). (IDs: `65773-1`, `65773-2`, `65773-3`). ### Scenario 2 - Lane Shift (simple scenario) -Scenario 2 ([Linestring](/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. +[Scenario 2](/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. - Single work zone with lane shift in the detailed lane information showing use of verified location and start time. ("id": `7733`). ### Scenario 3 - Shoulder Closure (bidirectional work zone) -Scenario 3 ([Linestring](/create-feed/examples/linestring-examples/scenario3_shoulder_bidirectional_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. +[Scenario 3](/create-feed/examples/linestring-examples/scenario3_shoulder_bidirectional_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. - Single work zone represented by two road events (IDs: `121388-EB`, `121388-WB`), one in direction of shoulder closure and second in opposite direction. - Demonstrates the use of `restrictions` for the event as well as individual lanes - Demonstrates the use of `relationship` to show the road events in each direction are related to a common parent (`121388`) ### Scenario 4 - Road Closure with Detour on Arterial -Scenario 4 ([Linestring](/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. +[Scenario 4](/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. - Single work zone in one direction represented by a single road event (ID: `67890`), with a detour. - Showing use of `relationship` `parents` and `children` to connect the detour road events (IDs: `67890-detour1`, `67890-detour2`, `67890-detour3`) to the work zone. @@ -73,7 +73,7 @@ Scenario 4 ([Linestring](/create-feed/examples/linestring-examples/scenario4_det - Shows the use of both the work zone and detour road event objects in the same feed. ### Scenario 5 - Recurring Work Zone -Scenario 5 ([Linestring](/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. +[Scenario 5](/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. - Simple work zone but with a recurring component. - Five road events: an `active` (day 1, ID: `PLK01012016-Day1`) event and four additional events (IDs: `PLK01012016-Day2`, `PLK01012016-Day3`, `PLK01012016-Day4`, `PLK01012016-Day5`) for later dates with a pending status. @@ -81,20 +81,18 @@ Scenario 5 ([Linestring](/create-feed/examples/linestring-examples/scenario5_rec - The `relationship` property is used to show all road events are related (they have the same parent of `PLK01012016`). ### Local Access Only (bidirectional work zone) -The local access only example ([Linestring](/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson)) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. +The [local access only example](/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. - Single work zone on a bidirectional roadwith with impact to both directions, represented by two road events (IDs: `WZ389-NB`, `WZ389-SB`), one for each direction. - Uses `local-access-only` [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). - One road event shows basic details (not lane-level), while the opposite direction road event shows detailed lane information. The detailed lane information also includes a bike lane for reference. - ### Bridge Height Restriction -The bridge height restriction example ([Linestring](/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson)) shows how the restriction road event type can be used within a feed. +The [bridge height restriction example](/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson) shows how the restriction road event type can be used within a feed. - Three bridge height restriction examples are shown with only the core details and restriction as needed as part of the restriction road event - One road event, `Bridge1`, also includes lane level details including additional height restrictions values for individual lanes. - ## JSON Schemas The [schemas](/create-feed/schemas) directory includes a JSON Schema for the following WZDx feed versions: From b83f6340182ae55d636a61ab32c74328ae0d441b Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 15:04:34 -0500 Subject: [PATCH 284/388] Format example JSON files --- ...dge_restriction_linestring_example.geojson | 478 ++--- ...y_bidirectional_linestring_example.geojson | 53 +- ...cenario1_simple_linestring_example.geojson | 192 +- ...ario2_laneshift_linestring_example.geojson | 30 +- ...er_bidrectional_linestring_example.geojson | 393 ++-- ...cenario4_detour_linestring_example.geojson | 184 +- ...ario5_recurring_linestring_example.geojson | 1632 ++++++++--------- ...cenario1_simple_multipoint_example.geojson | 194 +- 8 files changed, 1585 insertions(+), 1571 deletions(-) diff --git a/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson b/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson index 8772f16c..39c7089d 100644 --- a/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson @@ -1,245 +1,249 @@ { "road_event_feed_info": { "update_date": "2021-07-01T15:00:00Z", - "publisher": "New York State DOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 300, - "version": "4.0", - "data_sources": [{ - "data_source_id": "1", - "organization_name": "New York City DOT", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 60, - "update_date": "2021-07-01T00:00:00Z" - }] - }, - "type": "FeatureCollection", - "features": [{ - "id": "Bridge1", - "type": "Feature", - "properties": { - "core_details": { - "event_type": "restriction", - "data_source_id": "1", - "road_names": [ - "HRP", - "Hutchinson Parkway", - "Hutchinson River Parkway" + "publisher": "New York State DOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 300, + "version": "4.0", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "New York City DOT", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 60, + "update_date": "2021-07-01T00:00:00Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "Bridge1", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": "1", + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "northbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 10.5, + "unit": "feet" + } ], - "direction": "northbound" - }, - "restrictions":[ - { - "type": "reduced-height", - "value": 10.5, - "unit": "feet" - } - ], - "lanes":[ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions":[ - { - "type": "reduced-height", - "value": 10.5, - "unit": "feet" - } + "lanes": [ + { + "order": 1, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-height", + "value": 10.5, + "unit": "feet" + } + ] + }, + { + "order": 2, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-height", + "value": 11, + "unit": "feet" + } + ] + }, + { + "order": 3, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-height", + "value": 10.5, + "unit": "feet" + } + ] + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83857488632202, + 40.83782481579416 + ], + [ + -73.8385534286499, + 40.83905758069452 + ], + [ + -73.83834958076477, + 40.84045773030475 + ], + [ + -73.83817791938782, + 40.841269397695825 + ], + [ + -73.83692264556885, + 40.84498467829638 + ], + [ + -73.83683949708939, + 40.84519569836051 + ], + [ + -73.83674025535583, + 40.84555483673242 + ], + [ + -73.83666649460793, + 40.84582976902955 + ], + [ + -73.83646667003632, + 40.84667890696712 + ] + ] + } + }, + { + "id": "Bridge2", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": "1", + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "southbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 9.0, + "unit": "feet" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83725792169571, + 40.84455654898646 + ], + [ + -73.8378158211708, + 40.84294748850873 + ], + [ + -73.83808672428131, + 40.84214192905569 + ], + [ + -73.83834153413773, + 40.84133635981177 + ] ] - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions":[ - { - "type": "reduced-height", - "value": 11, - "unit": "feet" - } + } + }, + { + "id": "Bridge3", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": "1", + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "southbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 11, + "unit": "feet" + } ] - }, - { - "order": 3, - "status": "open", - "type": "general", - "restrictions":[ - { - "type": "reduced-height", - "value": 10.5, - "unit": "feet" - } + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83834153413773, + 40.841335852523244 + ], + [ + -73.8384260237217, + 40.84103300059402 + ], + [ + -73.83847497403622, + 40.84082856207721 + ], + [ + -73.83851654827595, + 40.84063071775089 + ], + [ + -73.83855678141117, + 40.84045722300951 + ], + [ + -73.83865937590599, + 40.83983324694044 + ], + [ + -73.83872039616108, + 40.8393289888175 + ], + [ + -73.83875325322151, + 40.838710582522424 + ], + [ + -73.83877135813236, + 40.838443230352674 + ], + [ + -73.83877202868462, + 40.83817942829337 + ], + [ + -73.83877471089363, + 40.83773502091179 + ], + [ + -73.83877538144588, + 40.83721857114785 + ], + [ + -73.83877336978912, + 40.83710442404608 + ] ] - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83857488632202, - 40.83782481579416 - ], - [ - -73.8385534286499, - 40.83905758069452 - ], - [ - -73.83834958076477, - 40.84045773030475 - ], - [ - -73.83817791938782, - 40.841269397695825 - ], - [ - -73.83692264556885, - 40.84498467829638 - ], - [ - -73.83683949708939, - 40.84519569836051 - ], - [ - -73.83674025535583, - 40.84555483673242 - ], - [ - -73.83666649460793, - 40.84582976902955 - ], - [ - -73.83646667003632, - 40.84667890696712 - ] - ] + } } - }, - { - "id": "Bridge2", - "type": "Feature", - "properties": { - "core_details": { - "event_type": "restriction", - "data_source_id": "1", - "road_names": [ - "HRP", - "Hutchinson Parkway", - "Hutchinson River Parkway" - ], - "direction": "southbound" - }, - "restrictions": [ - { - "type": "reduced-height", - "value": 9.0, - "unit": "feet" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83725792169571, - 40.84455654898646 - ], - [ - -73.8378158211708, - 40.84294748850873 - ], - [ - -73.83808672428131, - 40.84214192905569 - ], - [ - -73.83834153413773, - 40.84133635981177 - ] - ] - } - }, - { - "id": "Bridge3", - "type": "Feature", - "properties": { - "core_details": { - "event_type": "restriction", - "data_source_id": "1", - "road_names": [ - "HRP", - "Hutchinson Parkway", - "Hutchinson River Parkway" - ], - "direction": "southbound" - }, - "restrictions":[ - { - "type": "reduced-height", - "value": 11, - "unit": "feet" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83834153413773, - 40.841335852523244 - ], - [ - -73.8384260237217, - 40.84103300059402 - ], - [ - -73.83847497403622, - 40.84082856207721 - ], - [ - -73.83851654827595, - 40.84063071775089 - ], - [ - -73.83855678141117, - 40.84045722300951 - ], - [ - -73.83865937590599, - 40.83983324694044 - ], - [ - -73.83872039616108, - 40.8393289888175 - ], - [ - -73.83875325322151, - 40.838710582522424 - ], - [ - -73.83877135813236, - 40.838443230352674 - ], - [ - -73.83877202868462, - 40.83817942829337 - ], - [ - -73.83877471089363, - 40.83773502091179 - ], - [ - -73.83877538144588, - 40.83721857114785 - ], - [ - -73.83877336978912, - 40.83710442404608 - ] - ] - } - }] -} + ] +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson index 60513608..c257aa10 100644 --- a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson @@ -24,34 +24,33 @@ "id": "WZ389-NB", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "northbound", - "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "Beaver Avenue" + ], + "direction": "northbound", + "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", + "creation_date": "2010-01-01T01:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, "beginning_cross_street": "Aurora Avenue", "ending_cross_street": "NW 46th Place", "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "location_method": "channel-device-method", - "event_status": "active", + "event_status": "active", "vehicle_impact": "all-lanes-open", "restrictions": [ { "type": "local-access-only" } ] - }, "geometry": { "type": "LineString", @@ -87,17 +86,17 @@ "id": "WZ389-SB", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "southbound", - "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "Beaver Avenue" + ], + "direction": "southbound", + "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", + "creation_date": "2010-01-01T01:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, "beginning_cross_street": "NW 46th Place", "ending_cross_street": "Aurora Avenue", "beginning_accuracy": "verified", @@ -125,7 +124,7 @@ } ] }, - { + { "order": 2, "status": "open", "type": "general", @@ -186,4 +185,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson index d15e1c70..57cdb14d 100644 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson @@ -32,25 +32,25 @@ "id": "71234", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80, I-35" - ], - "direction": "northbound", - "description": "Single direction work zone without lane-level information.", - "creation_date": "2009-12-31T18:01:01Z", - "update_date": "2009-12-31T18:01:01Z" - }, - "beginning_milepost": 125.2, + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "I-80, I-35" + ], + "direction": "northbound", + "description": "Single direction work zone without lane-level information.", + "creation_date": "2009-12-31T18:01:01Z", + "update_date": "2009-12-31T18:01:01Z" + }, + "beginning_milepost": 125.2, "ending_milepost": 126.3, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T01:00:00Z", "end_date": "2010-01-02T01:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -90,25 +90,25 @@ "id": "WDM-58493-NB", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "128th Street" - ], - "direction": "northbound", - "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", - "creation_date": "2009-12-13T13:35:26Z", - "update_date": "2009-12-31T15:11:16Z" - }, - "beginning_cross_street": "US 6, Hickman Road", + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "128th Street" + ], + "direction": "northbound", + "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", + "creation_date": "2009-12-13T13:35:26Z", + "update_date": "2009-12-31T15:11:16Z" + }, + "beginning_cross_street": "US 6, Hickman Road", "ending_cross_street": "Douglas Ave", "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T06:00:00Z", "end_date": "2010-05-01T05:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed-merge-left", @@ -402,36 +402,36 @@ "id": "65773-1", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-2" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; first event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 3.1, + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-2" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; first event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 3.1, "ending_milepost": 2.9, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -508,36 +508,36 @@ "id": "65773-2", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-3" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; second event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 2.9, + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-3" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; second event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.9, "ending_milepost": 2.5, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -633,33 +633,33 @@ "id": "65773-3", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; third event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 2.5, + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; third event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.5, "ending_milepost": 2.0, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -807,4 +807,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson index b7cb9197..992cb446 100644 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson @@ -24,26 +24,26 @@ "id": "7733", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80", - "I-35" - ], - "direction": "westbound", - "description": "Single-direction work zone with lane shift", - "creation_date": "2010-12-30T22:42:53Z", - "update_date": "2010-01-01T05:57:36Z" - }, - "beginning_milepost": 133.967, + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "I-80", + "I-35" + ], + "direction": "westbound", + "description": "Single-direction work zone with lane shift", + "creation_date": "2010-12-30T22:42:53Z", + "update_date": "2010-01-01T05:57:36Z" + }, + "beginning_milepost": 133.967, "ending_milepost": 133.112, "beginning_accuracy": "verified", "ending_accuracy": "verified", "start_date": "2010-01-01T05:57:36Z", "end_date": "2010-01-05T23:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "verified", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "all-lanes-open-shift-right", @@ -163,4 +163,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson index 91b72026..a2ce54cd 100644 --- a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson @@ -1,192 +1,203 @@ { - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "4.0", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [{ - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z" - }] - }, - "type": "FeatureCollection", - "features": [{ - "id": "121388-EB", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z" - }, - "beginning_milepost": 22.1, - "ending_milepost": 24.6, - "beginning_cross_street": "570th Avenue", - "ending_cross_street": "610th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [], - "types_of_work": [{ - "type_name": "maintenance", - "is_architectural_change": false - }], - "lanes": [{ - "order": 1, - "status": "closed", - "type": "general" - }, - { - "order": 2, - "status": "open", - "type": "general" - }, - { - "order": 3, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.56064319610596, - 41.87764559047116 - ], - [ - -93.5451292991638, - 41.87767754402901 - ], - [ - -93.53145003318785, - 41.87766955564103 - ], - [ - -93.5067629814148, - 41.877565706506665 - ], - [ - -93.48284840583801, - 41.87750179926317 - ] - ] - } - }, - { - "id": "121388-WB", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "westbound", - "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z" - }, - "beginning_milepost": 24.6, - "ending_milepost": 22.1, - "beginning_cross_street": "610th Avenue", - "ending_cross_street": "570th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [{ - "type": "no-parking" - }], - "lanes": [{ - "order": 1, - "status": "closed", - "type": "general" - }, - { - "order": 2, - "status": "open", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "shoulder", - "restrictions": [{ - "type": "no-parking" - }] - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.48284304141998, - 41.877607645600484 - ], - [ - -93.49073946475983, - 41.87764559047116 - ], - [ - -93.50573301315308, - 41.877697514994544 - ], - [ - -93.51188063621521, - 41.877749439475735 - ], - [ - -93.53036642074585, - 41.87782133484157 - ], - [ - -93.54414224624632, - 41.877869265040545 - ], - [ - -93.56063783168791, - 41.87786127667653 - ] - ] - } - } - ] -} + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "121388-EB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "parents": [ + "121388" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "eastbound", + "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", + "creation_date": "2010-01-01T09:30:26Z", + "update_date": "2010-01-01T09:30:26Z" + }, + "beginning_milepost": 22.1, + "ending_milepost": 24.6, + "beginning_cross_street": "570th Avenue", + "ending_cross_street": "610th Avenue", + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T10:00:00Z", + "end_date": "2010-01-01T16:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "all-lanes-open", + "restrictions": [], + "types_of_work": [ + { + "type_name": "maintenance", + "is_architectural_change": false + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "general" + }, + { + "order": 2, + "status": "open", + "type": "general" + }, + { + "order": 3, + "status": "closed", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.56064319610596, + 41.87764559047116 + ], + [ + -93.5451292991638, + 41.87767754402901 + ], + [ + -93.53145003318785, + 41.87766955564103 + ], + [ + -93.5067629814148, + 41.877565706506665 + ], + [ + -93.48284840583801, + 41.87750179926317 + ] + ] + } + }, + { + "id": "121388-WB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "parents": [ + "121388" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "westbound", + "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", + "creation_date": "2010-01-01T09:30:26Z", + "update_date": "2010-01-01T09:30:26Z" + }, + "beginning_milepost": 24.6, + "ending_milepost": 22.1, + "beginning_cross_street": "610th Avenue", + "ending_cross_street": "570th Avenue", + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T10:00:00Z", + "end_date": "2010-01-01T16:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "all-lanes-open", + "restrictions": [ + { + "type": "no-parking" + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "general" + }, + { + "order": 2, + "status": "open", + "type": "general" + }, + { + "order": 3, + "status": "open", + "type": "shoulder", + "restrictions": [ + { + "type": "no-parking" + } + ] + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.48284304141998, + 41.877607645600484 + ], + [ + -93.49073946475983, + 41.87764559047116 + ], + [ + -93.50573301315308, + 41.877697514994544 + ], + [ + -93.51188063621521, + 41.877749439475735 + ], + [ + -93.53036642074585, + 41.87782133484157 + ], + [ + -93.54414224624632, + 41.877869265040545 + ], + [ + -93.56063783168791, + 41.87786127667653 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson index 2b858678..2ae7182f 100644 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson @@ -24,32 +24,32 @@ "id": "67890", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "children": [ - "67890-detour1", - "67890-detour2", - "67890-detour3" - ] - }, - "road_names": [ - "I-35" - ], - "direction": "northbound", - "description": "Simple, single direction work zone with detour.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_milepost": 98.42, + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "children": [ + "67890-detour1", + "67890-detour2", + "67890-detour3" + ] + }, + "road_names": [ + "I-35" + ], + "direction": "northbound", + "description": "Simple, single direction work zone with detour.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_milepost": 98.42, "ending_milepost": 101.50, "beginning_accuracy": "verified", "ending_accuracy": "estimated", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-06-30T01:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "verified", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -274,33 +274,33 @@ "id": "67890-detour1", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour2" - ] - }, - "road_names": [ - "F22" - ], - "direction": "westbound", - "description": "Detour for road event 67890, first segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "I-35", - "ending_cross_street": "US 69", + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour2" + ] + }, + "road_names": [ + "F22" + ], + "direction": "westbound", + "description": "Detour for road event 67890, first segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "I-35", + "ending_cross_street": "US 69", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", "event_status": "active" }, @@ -358,33 +358,33 @@ "id": "67890-detour2", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour3" - ] - }, - "road_names": [ - "US 69" - ], - "direction": "northbound", - "description": "Detour for road event 67890, second segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "NE 126th Avenue", + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour3" + ] + }, + "road_names": [ + "US 69" + ], + "direction": "northbound", + "description": "Detour for road event 67890, second segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "NE 126th Avenue", "ending_cross_street": "IA 210", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", "event_status": "active" }, @@ -738,30 +738,30 @@ "id": "67890-detour3", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "6780" - ], - "first": [ - "67890-detour1" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "description": "Detour for road event 67890, third/final segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "US 69", - "ending_cross_street": "I-35", + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "6780" + ], + "first": [ + "67890-detour1" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "eastbound", + "description": "Detour for road event 67890, third/final segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "US 69", + "ending_cross_street": "I-35", "start_date": "2010-01-01T01:03:01Z", "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", + "start_date_accuracy": "verified", "end_date_accuracy": "estimated", "event_status": "active" }, @@ -824,4 +824,4 @@ } } ] -} +} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson index 248e2dd8..0a2b7538 100644 --- a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson +++ b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson @@ -1,827 +1,827 @@ { - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "4.0", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ { - "id": "67890", - "type": "Feature", - "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "children": [ - "67890-detour1", - "67890-detour2", - "67890-detour3" - ] - }, - "road_names": [ - "I-35" - ], - "direction": "northbound", - "description": "Simple, single direction work zone with detour.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_milepost": 98.42, - "ending_milepost": 101.50, - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "scheduled", - "confidence": "medium", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit_kph": 55, - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "shoulder" - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 11, - "unit": "feet" - } - ] - }, - { - "order": 3, - "status": "closed", - "type": "general" - }, - { - "order": 4, - "status": "closed", - "type": "shoulder" - } + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "67890", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "children": [ + "67890-detour1", + "67890-detour2", + "67890-detour3" ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.570535026999949, - 41.815141143000062 - ], - [ - -93.570558665999954, - 41.815778842000043 - ], - [ - -93.570582206999973, - 41.816327889000036 - ], - [ - -93.570613866999963, - 41.817305885000053 - ], - [ - -93.570653239999956, - 41.818343932000062 - ], - [ - -93.570692683999937, - 41.819444889000067 - ], - [ - -93.57072468399997, - 41.820444622000025 - ], - [ - -93.570725033999963, - 41.820762049000052 - ], - [ - -93.570737569999949, - 41.821725757000024 - ], - [ - -93.570735194999941, - 41.823038359000066 - ], - [ - -93.570744205999972, - 41.824273739000034 - ], - [ - -93.570741062999957, - 41.824888576000035 - ], - [ - -93.570745857999952, - 41.825769359000049 - ], - [ - -93.570750405999945, - 41.82642422400005 - ], - [ - -93.570751056999939, - 41.827013323000074 - ], - [ - -93.570767342999943, - 41.82791125600005 - ], - [ - -93.570783135999989, - 41.828363077000063 - ], - [ - -93.57081113199996, - 41.829478340000037 - ], - [ - -93.570846661999951, - 41.830487788000028 - ], - [ - -93.570890330999987, - 41.83194334500007 - ], - [ - -93.570902443999955, - 41.832520995000039 - ], - [ - -93.570930157999953, - 41.833378885000059 - ], - [ - -93.570954688999961, - 41.834811573000025 - ], - [ - -93.570948738999959, - 41.836344370000063 - ], - [ - -93.570942684999977, - 41.837782799000081 - ], - [ - -93.570936722999988, - 41.839304156000026 - ], - [ - -93.570923044999972, - 41.840765465000061 - ], - [ - -93.570924651999974, - 41.84221532600003 - ], - [ - -93.570926279999981, - 41.843685202000074 - ], - [ - -93.570931724, - 41.845146499000066 - ], - [ - -93.570929340999953, - 41.846447657000056 - ], - [ - -93.570938627999965, - 41.84792610900007 - ], - [ - -93.570932442999947, - 41.849247287000026 - ], - [ - -93.570939776999978, - 41.849617513000055 - ], - [ - -93.570957815999975, - 41.850528174000033 - ], - [ - -93.570991150999987, - 41.852249359000041 - ], - [ - -93.571024497999986, - 41.85397641600008 - ], - [ - -93.571053711, - 41.855521371000066 - ], - [ - -93.571083075999979, - 41.85719849700007 - ], - [ - -93.57110858599998, - 41.858940244000053 - ], - [ - -93.571141838999949, - 41.860579185000063 - ] + }, + "road_names": [ + "I-35" + ], + "direction": "northbound", + "description": "Simple, single direction work zone with detour.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_milepost": 98.42, + "ending_milepost": 101.50, + "beginning_accuracy": "verified", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": true, + "method": "scheduled", + "confidence": "medium", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] + }, + "reduced_speed_limit_kph": 55, + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "open", + "type": "shoulder" + }, + { + "order": 2, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-width", + "value": 11, + "unit": "feet" + } ] - } + }, + { + "order": 3, + "status": "closed", + "type": "general" + }, + { + "order": 4, + "status": "closed", + "type": "shoulder" + } + ] }, - { - "id": "67890-detour1", - "type": "Feature", - "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour2" - ] - }, - "road_names": [ - "F22" - ], - "direction": "westbound", - "description": "Detour for road event 67890, first segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "I-35", - "ending_cross_street": "US 69", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.600376007999955, - 41.791257966000046 - ], - [ - -93.600375128999985, - 41.791257965000057 - ], - [ - -93.600373887999979, - 41.79125798900003 - ], - [ - -93.598991312999942, - 41.791285770000059 - ], - [ - -93.597408247999965, - 41.791298693000044 - ], - [ - -93.587018347999958, - 41.791370250000057 - ], - [ - -93.581030593999969, - 41.791384089000076 - ], - [ - -93.575477690999946, - 41.791372395000053 - ], - [ - -93.573306168999977, - 41.791361989000052 - ], - [ - -93.572569235999936, - 41.791351637000048 - ], - [ - -93.572478358999945, - 41.79135169500006 - ] + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.570535026999949, + 41.815141143000062 + ], + [ + -93.570558665999954, + 41.815778842000043 + ], + [ + -93.570582206999973, + 41.816327889000036 + ], + [ + -93.570613866999963, + 41.817305885000053 + ], + [ + -93.570653239999956, + 41.818343932000062 + ], + [ + -93.570692683999937, + 41.819444889000067 + ], + [ + -93.57072468399997, + 41.820444622000025 + ], + [ + -93.570725033999963, + 41.820762049000052 + ], + [ + -93.570737569999949, + 41.821725757000024 + ], + [ + -93.570735194999941, + 41.823038359000066 + ], + [ + -93.570744205999972, + 41.824273739000034 + ], + [ + -93.570741062999957, + 41.824888576000035 + ], + [ + -93.570745857999952, + 41.825769359000049 + ], + [ + -93.570750405999945, + 41.82642422400005 + ], + [ + -93.570751056999939, + 41.827013323000074 + ], + [ + -93.570767342999943, + 41.82791125600005 + ], + [ + -93.570783135999989, + 41.828363077000063 + ], + [ + -93.57081113199996, + 41.829478340000037 + ], + [ + -93.570846661999951, + 41.830487788000028 + ], + [ + -93.570890330999987, + 41.83194334500007 + ], + [ + -93.570902443999955, + 41.832520995000039 + ], + [ + -93.570930157999953, + 41.833378885000059 + ], + [ + -93.570954688999961, + 41.834811573000025 + ], + [ + -93.570948738999959, + 41.836344370000063 + ], + [ + -93.570942684999977, + 41.837782799000081 + ], + [ + -93.570936722999988, + 41.839304156000026 + ], + [ + -93.570923044999972, + 41.840765465000061 + ], + [ + -93.570924651999974, + 41.84221532600003 + ], + [ + -93.570926279999981, + 41.843685202000074 + ], + [ + -93.570931724, + 41.845146499000066 + ], + [ + -93.570929340999953, + 41.846447657000056 + ], + [ + -93.570938627999965, + 41.84792610900007 + ], + [ + -93.570932442999947, + 41.849247287000026 + ], + [ + -93.570939776999978, + 41.849617513000055 + ], + [ + -93.570957815999975, + 41.850528174000033 + ], + [ + -93.570991150999987, + 41.852249359000041 + ], + [ + -93.571024497999986, + 41.85397641600008 + ], + [ + -93.571053711, + 41.855521371000066 + ], + [ + -93.571083075999979, + 41.85719849700007 + ], + [ + -93.57110858599998, + 41.858940244000053 + ], + [ + -93.571141838999949, + 41.860579185000063 + ] + ] + } + }, + { + "id": "67890-detour1", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour2" ] - } + }, + "road_names": [ + "F22" + ], + "direction": "westbound", + "description": "Detour for road event 67890, first segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "I-35", + "ending_cross_street": "US 69", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" }, - { - "id": "67890-detour2", - "type": "Feature", - "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour3" - ] - }, - "road_names": [ - "US 69" - ], - "direction": "northbound", - "description": "Detour for road event 67890, second segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "NE 126th Avenue", - "ending_cross_street": "IA 210", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.600401730999977, - 41.877744832000076 - ], - [ - -93.600383302999944, - 41.876221974000032 - ], - [ - -93.600399342999935, - 41.874445421000075 - ], - [ - -93.600382543999956, - 41.872739253000077 - ], - [ - -93.600389303999975, - 41.871047136000072 - ], - [ - -93.600386637999975, - 41.869347993000076 - ], - [ - -93.600379122999982, - 41.867557387000033 - ], - [ - -93.600390145999938, - 41.865583833000073 - ], - [ - -93.60037319199995, - 41.863775643000054 - ], - [ - -93.600372301999982, - 41.863207043000045 - ], - [ - -93.600381568999978, - 41.862919375000047 - ], - [ - -93.600376814999947, - 41.861738109000044 - ], - [ - -93.60037443899995, - 41.860563973000069 - ], - [ - -93.60037443899995, - 41.859363694000081 - ], - [ - -93.60036493299998, - 41.858142023000028 - ], - [ - -93.600360178999949, - 41.85695124800003 - ], - [ - -93.600357800999973, - 41.855774736000058 - ], - [ - -93.600357801999962, - 41.854583964000028 - ], - [ - -93.600353046999942, - 41.853378931000066 - ], - [ - -93.600348294999947, - 41.852188157000057 - ], - [ - -93.600343540999972, - 41.85096173200003 - ], - [ - -93.600341164999975, - 41.849768581000035 - ], - [ - -93.600338180999984, - 41.84926536100005 - ], - [ - -93.600334034999946, - 41.848565926000049 - ], - [ - -93.600329278999936, - 41.847403672000041 - ], - [ - -93.600324526999941, - 41.846174873000052 - ], - [ - -93.600319772999967, - 41.844976968000026 - ], - [ - -93.600315018999936, - 41.843786195000064 - ], - [ - -93.600305511999977, - 41.842590668000071 - ], - [ - -93.600296004999961, - 41.841487836000056 - ], - [ - -93.600296003999972, - 41.840275672000075 - ], - [ - -93.600291251999977, - 41.839065885000025 - ], - [ - -93.600291250999987, - 41.837927402000048 - ], - [ - -93.600284120999959, - 41.836760396000045 - ], - [ - -93.600279367999974, - 41.83553872400006 - ], - [ - -93.600273437999988, - 41.834756276000064 - ], - [ - -93.600272235999967, - 41.834597515000041 - ], - [ - -93.600274613999943, - 41.833775145000061 - ], - [ - -93.600272236999956, - 41.832546343000047 - ], - [ - -93.600269860999958, - 41.831357947000072 - ], - [ - -93.600265106999984, - 41.830238478000069 - ], - [ - -93.600269860999958, - 41.829584861000058 - ], - [ - -93.600262728999951, - 41.829031068000063 - ], - [ - -93.60026985899998, - 41.828714954000077 - ], - [ - -93.600265106999984, - 41.827833163000037 - ], - [ - -93.600265732999958, - 41.82751014300004 - ], - [ - -93.600267483999971, - 41.82661149300003 - ], - [ - -93.600267481999936, - 41.825458747000027 - ], - [ - -93.60026985899998, - 41.824289366000073 - ], - [ - -93.600262728999951, - 41.823096216000067 - ], - [ - -93.60026272999994, - 41.822017153000047 - ], - [ - -93.600265008999941, - 41.821111594000058 - ], - [ - -93.600263135999967, - 41.820261561000052 - ], - [ - -93.600264984999967, - 41.819911794000063 - ], - [ - -93.600262608999969, - 41.818602179000038 - ], - [ - -93.600255478999941, - 41.817525493000062 - ], - [ - -93.600255478999941, - 41.816325213000027 - ], - [ - -93.600248348999969, - 41.815205744000025 - ], - [ - -93.600243592999959, - 41.814019724000048 - ], - [ - -93.600245971999982, - 41.812914517000024 - ], - [ - -93.600253101999954, - 41.811806931000035 - ], - [ - -93.600269738999941, - 41.81082056200006 - ], - [ - -93.600276870999949, - 41.80970822200004 - ], - [ - -93.600288753999962, - 41.808624405000046 - ], - [ - -93.600295884, - 41.807576241000049 - ], - [ - -93.600310144, - 41.806435380000039 - ], - [ - -93.60031408499998, - 41.805741814000044 - ], - [ - -93.600314898999954, - 41.805598749000069 - ], - [ - -93.600324404999981, - 41.804529191000029 - ], - [ - -93.600319769999942, - 41.803418761000046 - ], - [ - -93.60031965099995, - 41.803390708000052 - ], - [ - -93.600322028999983, - 41.802354426000079 - ], - [ - -93.600322026999947, - 41.801782615000036 - ], - [ - -93.600322026999947, - 41.80161524500005 - ], - [ - -93.600331535999942, - 41.800495775000059 - ], - [ - -93.600326782999957, - 41.799371551000036 - ], - [ - -93.600331535999942, - 41.798416082000074 - ], - [ - -93.600331535999942, - 41.797327511000049 - ], - [ - -93.60033866699996, - 41.796314997000025 - ], - [ - -93.600345797999978, - 41.795214543000043 - ], - [ - -93.600350549999973, - 41.794040406000079 - ], - [ - -93.600362434999965, - 41.792899545000068 - ], - [ - -93.600360056999989, - 41.791818106000051 - ], - [ - -93.600373887999979, - 41.79125798900003 - ], - [ - -93.600373891999936, - 41.791257820000055 - ] + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.600376007999955, + 41.791257966000046 + ], + [ + -93.600375128999985, + 41.791257965000057 + ], + [ + -93.600373887999979, + 41.79125798900003 + ], + [ + -93.598991312999942, + 41.791285770000059 + ], + [ + -93.597408247999965, + 41.791298693000044 + ], + [ + -93.587018347999958, + 41.791370250000057 + ], + [ + -93.581030593999969, + 41.791384089000076 + ], + [ + -93.575477690999946, + 41.791372395000053 + ], + [ + -93.573306168999977, + 41.791361989000052 + ], + [ + -93.572569235999936, + 41.791351637000048 + ], + [ + -93.572478358999945, + 41.79135169500006 + ] + ] + } + }, + { + "id": "67890-detour2", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour3" ] - } + }, + "road_names": [ + "US 69" + ], + "direction": "northbound", + "description": "Detour for road event 67890, second segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "NE 126th Avenue", + "ending_cross_street": "IA 210", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" }, - { - "id": "67890-detour3", - "type": "Feature", - "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "6780" - ], - "first": [ - "67890-detour1" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "description": "Detour for road event 67890, third/final segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "US 69", - "ending_cross_street": "I-35", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.573353147999967, - 41.877796484000044 - ], - [ - -93.573356421999961, - 41.87779647800005 - ], - [ - -93.574056398999971, - 41.877795233000029 - ], - [ - -93.577496035999957, - 41.877791515000069 - ], - [ - -93.578346253999939, - 41.877790018000042 - ], - [ - -93.579435310999941, - 41.877788094000039 - ], - [ - -93.580892132999963, - 41.877785500000073 - ], - [ - -93.581418045999953, - 41.877784560000066 - ], - [ - -93.581835475, - 41.877783302000068 - ], - [ - -93.586943989999952, - 41.877767791000053 - ], - [ - -93.591580114999942, - 41.877755708000052 - ], - [ - -93.596289923999962, - 41.877747609000039 - ], - [ - -93.60040158399994, - 41.87774674700006 - ] + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.600401730999977, + 41.877744832000076 + ], + [ + -93.600383302999944, + 41.876221974000032 + ], + [ + -93.600399342999935, + 41.874445421000075 + ], + [ + -93.600382543999956, + 41.872739253000077 + ], + [ + -93.600389303999975, + 41.871047136000072 + ], + [ + -93.600386637999975, + 41.869347993000076 + ], + [ + -93.600379122999982, + 41.867557387000033 + ], + [ + -93.600390145999938, + 41.865583833000073 + ], + [ + -93.60037319199995, + 41.863775643000054 + ], + [ + -93.600372301999982, + 41.863207043000045 + ], + [ + -93.600381568999978, + 41.862919375000047 + ], + [ + -93.600376814999947, + 41.861738109000044 + ], + [ + -93.60037443899995, + 41.860563973000069 + ], + [ + -93.60037443899995, + 41.859363694000081 + ], + [ + -93.60036493299998, + 41.858142023000028 + ], + [ + -93.600360178999949, + 41.85695124800003 + ], + [ + -93.600357800999973, + 41.855774736000058 + ], + [ + -93.600357801999962, + 41.854583964000028 + ], + [ + -93.600353046999942, + 41.853378931000066 + ], + [ + -93.600348294999947, + 41.852188157000057 + ], + [ + -93.600343540999972, + 41.85096173200003 + ], + [ + -93.600341164999975, + 41.849768581000035 + ], + [ + -93.600338180999984, + 41.84926536100005 + ], + [ + -93.600334034999946, + 41.848565926000049 + ], + [ + -93.600329278999936, + 41.847403672000041 + ], + [ + -93.600324526999941, + 41.846174873000052 + ], + [ + -93.600319772999967, + 41.844976968000026 + ], + [ + -93.600315018999936, + 41.843786195000064 + ], + [ + -93.600305511999977, + 41.842590668000071 + ], + [ + -93.600296004999961, + 41.841487836000056 + ], + [ + -93.600296003999972, + 41.840275672000075 + ], + [ + -93.600291251999977, + 41.839065885000025 + ], + [ + -93.600291250999987, + 41.837927402000048 + ], + [ + -93.600284120999959, + 41.836760396000045 + ], + [ + -93.600279367999974, + 41.83553872400006 + ], + [ + -93.600273437999988, + 41.834756276000064 + ], + [ + -93.600272235999967, + 41.834597515000041 + ], + [ + -93.600274613999943, + 41.833775145000061 + ], + [ + -93.600272236999956, + 41.832546343000047 + ], + [ + -93.600269860999958, + 41.831357947000072 + ], + [ + -93.600265106999984, + 41.830238478000069 + ], + [ + -93.600269860999958, + 41.829584861000058 + ], + [ + -93.600262728999951, + 41.829031068000063 + ], + [ + -93.60026985899998, + 41.828714954000077 + ], + [ + -93.600265106999984, + 41.827833163000037 + ], + [ + -93.600265732999958, + 41.82751014300004 + ], + [ + -93.600267483999971, + 41.82661149300003 + ], + [ + -93.600267481999936, + 41.825458747000027 + ], + [ + -93.60026985899998, + 41.824289366000073 + ], + [ + -93.600262728999951, + 41.823096216000067 + ], + [ + -93.60026272999994, + 41.822017153000047 + ], + [ + -93.600265008999941, + 41.821111594000058 + ], + [ + -93.600263135999967, + 41.820261561000052 + ], + [ + -93.600264984999967, + 41.819911794000063 + ], + [ + -93.600262608999969, + 41.818602179000038 + ], + [ + -93.600255478999941, + 41.817525493000062 + ], + [ + -93.600255478999941, + 41.816325213000027 + ], + [ + -93.600248348999969, + 41.815205744000025 + ], + [ + -93.600243592999959, + 41.814019724000048 + ], + [ + -93.600245971999982, + 41.812914517000024 + ], + [ + -93.600253101999954, + 41.811806931000035 + ], + [ + -93.600269738999941, + 41.81082056200006 + ], + [ + -93.600276870999949, + 41.80970822200004 + ], + [ + -93.600288753999962, + 41.808624405000046 + ], + [ + -93.600295884, + 41.807576241000049 + ], + [ + -93.600310144, + 41.806435380000039 + ], + [ + -93.60031408499998, + 41.805741814000044 + ], + [ + -93.600314898999954, + 41.805598749000069 + ], + [ + -93.600324404999981, + 41.804529191000029 + ], + [ + -93.600319769999942, + 41.803418761000046 + ], + [ + -93.60031965099995, + 41.803390708000052 + ], + [ + -93.600322028999983, + 41.802354426000079 + ], + [ + -93.600322026999947, + 41.801782615000036 + ], + [ + -93.600322026999947, + 41.80161524500005 + ], + [ + -93.600331535999942, + 41.800495775000059 + ], + [ + -93.600326782999957, + 41.799371551000036 + ], + [ + -93.600331535999942, + 41.798416082000074 + ], + [ + -93.600331535999942, + 41.797327511000049 + ], + [ + -93.60033866699996, + 41.796314997000025 + ], + [ + -93.600345797999978, + 41.795214543000043 + ], + [ + -93.600350549999973, + 41.794040406000079 + ], + [ + -93.600362434999965, + 41.792899545000068 + ], + [ + -93.600360056999989, + 41.791818106000051 + ], + [ + -93.600373887999979, + 41.79125798900003 + ], + [ + -93.600373891999936, + 41.791257820000055 + ] + ] + } + }, + { + "id": "67890-detour3", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "6780" + ], + "first": [ + "67890-detour1" ] - } + }, + "road_names": [ + "IA 210" + ], + "direction": "eastbound", + "description": "Detour for road event 67890, third/final segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "US 69", + "ending_cross_street": "I-35", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.573353147999967, + 41.877796484000044 + ], + [ + -93.573356421999961, + 41.87779647800005 + ], + [ + -93.574056398999971, + 41.877795233000029 + ], + [ + -93.577496035999957, + 41.877791515000069 + ], + [ + -93.578346253999939, + 41.877790018000042 + ], + [ + -93.579435310999941, + 41.877788094000039 + ], + [ + -93.580892132999963, + 41.877785500000073 + ], + [ + -93.581418045999953, + 41.877784560000066 + ], + [ + -93.581835475, + 41.877783302000068 + ], + [ + -93.586943989999952, + 41.877767791000053 + ], + [ + -93.591580114999942, + 41.877755708000052 + ], + [ + -93.596289923999962, + 41.877747609000039 + ], + [ + -93.60040158399994, + 41.87774674700006 + ] + ] } - ] -} + } + ] +} \ No newline at end of file diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson index 26673975..1e8969db 100644 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson @@ -32,26 +32,26 @@ "id": "71234", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80", - "I-35" - ], - "direction": "northbound", - "description": "Single direction work zone without lane-level information.", - "creation_date": "2009-12-31T18:01:01Z", - "update_date": "2009-12-31T18:01:01Z" - }, - "beginning_milepost": 125.2, + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "I-80", + "I-35" + ], + "direction": "northbound", + "description": "Single direction work zone without lane-level information.", + "creation_date": "2009-12-31T18:01:01Z", + "update_date": "2009-12-31T18:01:01Z" + }, + "beginning_milepost": 125.2, "ending_milepost": 126.3, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T01:00:00Z", "end_date": "2010-01-02T01:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -75,25 +75,25 @@ "id": "WDM-58493-NB", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "128th Street" - ], - "direction": "northbound", - "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", - "creation_date": "2009-12-13T13:35:26Z", - "update_date": "2009-12-31T15:11:16Z" - }, - "beginning_cross_street": "US 6, Hickman Road", + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "128th Street" + ], + "direction": "northbound", + "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", + "creation_date": "2009-12-13T13:35:26Z", + "update_date": "2009-12-31T15:11:16Z" + }, + "beginning_cross_street": "US 6, Hickman Road", "ending_cross_street": "Douglas Ave", "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T06:00:00Z", "end_date": "2010-05-01T05:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed-merge-left", @@ -135,36 +135,36 @@ "id": "65773-1", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-2" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; first event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 3.1, + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-2" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; first event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 3.1, "ending_milepost": 2.9, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -233,36 +233,36 @@ "id": "65773-2", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-3" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; second event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 2.9, + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-3" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; second event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.9, "ending_milepost": 2.5, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -334,33 +334,33 @@ "id": "65773-3", "type": "Feature", "properties": { - "core_details":{ - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; third event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 2.5, + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; third event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.5, "ending_milepost": 2.0, "beginning_accuracy": "estimated", "ending_accuracy": "estimated", "start_date": "2010-01-01T14:00:00Z", "end_date": "2010-01-05T23:00:00Z", "location_method": "channel-device-method", - "start_date_accuracy": "estimated", + "start_date_accuracy": "estimated", "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", @@ -424,4 +424,4 @@ } } ] -} +} \ No newline at end of file From fe1ab655013722e3b7d49d4e146c50156237d645 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 15:11:18 -0500 Subject: [PATCH 285/388] Simplify example folder structure and update references --- README.md | 26 +- create-feed/README.md | 14 +- ...dge_restriction_linestring_example.geojson | 249 ------ ...y_bidirectional_linestring_example.geojson | 188 ---- ...cenario1_simple_linestring_example.geojson | 810 ----------------- ...ario2_laneshift_linestring_example.geojson | 166 ---- ...er_bidrectional_linestring_example.geojson | 203 ----- ...cenario4_detour_linestring_example.geojson | 827 ------------------ ...ario5_recurring_linestring_example.geojson | 827 ------------------ ...cenario1_simple_multipoint_example.geojson | 427 --------- 10 files changed, 16 insertions(+), 3721 deletions(-) delete mode 100644 create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson delete mode 100644 create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson delete mode 100644 create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson delete mode 100644 create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson delete mode 100644 create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson delete mode 100644 create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson delete mode 100644 create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson delete mode 100644 create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson diff --git a/README.md b/README.md index f3a79351..1e6017b3 100644 --- a/README.md +++ b/README.md @@ -17,23 +17,15 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c ### Contents - [**Creating a WZDx Feed**](/create-feed) - - [**Example Feed GeoJSON Files**](/create-feed/examples) - - [LineString Examples](/create-feed/examples/linestring_examples) - - [Comprehensive](/create-feed/examples/linestring-examples/comprehensive_linestring_example.geojson) - - [Local Access Only (bidirectional)](/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson) - - [Simple Work Zone](/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson) - - [Lane Shift](/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson) - - [Shoulder Closure (bidirectional)](/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson) - - [Detour](/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson) - - [Recurring Work](/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson) - - [MultiPoint Examples](/create-feed/examples/multipoint_examples) - - [Comprehensive](/create-feed/examples/multipoint-examples/comprehensive_multipoint_example.geojson) - - [Local Access Only (bidirectional)](/create-feed/examples/multipoint-examples/local_access_only_bidirectional_multipoint_example.geojson) - - [Simple Work Zone](/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson) - - [Lane Shift](/create-feed/examples/multipoint-examples/scenario2_laneshift_multipoint_example.geojson) - - [Shoulder Closure (bidirectional)](/create-feed/examples/multipoint-examples/scenario3_shoulder_bidrectional_multipoint_example.geojson) - - [Detour](/create-feed/examples/multipoint-examples/scenario4_detour_multipoint_example.geojson) - - [Recurring Work](/create-feed/examples/multipoint-examples/scenario5_recurring_multipoint_example.geojson) + - [**Example Feed GeoJSON Files**](/create-feed/examples) + - [Bridge Height Restriction](/create-feed/examples/bridge_restriction_linestring_exxample.geojson) + - [Local Access Only (bidirectional)](/create-feed/examples/local_access_only_bidirectional_linestring_example.geojson) + - [Simple Work Zone (LineString)](/create-feed/examples/scenario1_simple_linestring_example.geojson) + - [Lane Shift](/create-feed/examples/scenario2_laneshift_linestring_example.geojson) + - [Shoulder Closure (bidirectional)](/create-feed/examples/scenario3_shoulder_bidrectional_linestring_example.geojson) + - [Detour](/create-feed/examples/scenario4_detour_linestring_example.geojson) + - [Recurring Work](/create-feed/examples/scenario5_recurring_linestring_example.geojson) + - [Simple Work Zone (MultiPoint)](/create-feed/examples/scenario1_simple_multipoint_example.geojson) - [**JSON Schemas**](/create-feed/schemas) - [WZDx v2.0 Feed](/create-feed/schemas/wzdx_v2.0_feed.json) - [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) diff --git a/create-feed/README.md b/create-feed/README.md index a4ee3121..4cfcba1c 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -45,26 +45,26 @@ The following WZDx feed examples represent a variety of common scenarios when cr Below is a summary of each of the example WZDx feeds and detailed differences for each of the road events: ### Scenario 1 - Simple Work Zone -Scenario 1 ([Linestring](/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson) or [MultiPoint](/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) with a single lane closed on a multi-lane facility. +Scenario 1 ([Linestring](/create-feed/examples/scenario1_simple_linestring_example.geojson) or [MultiPoint](/create-feed/examples/scenario1_simple_multipoint_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) with a single lane closed on a multi-lane facility. - First work zone is single direction, single event, with no lane-level information (ID: `71234`). - Second work zone is single direction, single event, with detailed lane information (ID: `WDM-58493-NB`). - Third work zone is single direction, three sequential events, with detailed lane information. This work zone demonstrates the use of the `relationship` property, both `first` and `next` to indiciate the order of the road events and `parents` to indicate all road events are related (they all have `parents` as `65773`). (IDs: `65773-1`, `65773-2`, `65773-3`). ### Scenario 2 - Lane Shift (simple scenario) -[Scenario 2](/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. +[Scenario 2](/create-feed/examples/scenario2_laneshift_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. - Single work zone with lane shift in the detailed lane information showing use of verified location and start time. ("id": `7733`). ### Scenario 3 - Shoulder Closure (bidirectional work zone) -[Scenario 3](/create-feed/examples/linestring-examples/scenario3_shoulder_bidirectional_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. +[Scenario 3](/create-feed/examples/scenario3_shoulder_bidirectional_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. - Single work zone represented by two road events (IDs: `121388-EB`, `121388-WB`), one in direction of shoulder closure and second in opposite direction. - Demonstrates the use of `restrictions` for the event as well as individual lanes - Demonstrates the use of `relationship` to show the road events in each direction are related to a common parent (`121388`) ### Scenario 4 - Road Closure with Detour on Arterial -[Scenario 4](/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. +[Scenario 4](/create-feed/examples/scenario4_detour_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. - Single work zone in one direction represented by a single road event (ID: `67890`), with a detour. - Showing use of `relationship` `parents` and `children` to connect the detour road events (IDs: `67890-detour1`, `67890-detour2`, `67890-detour3`) to the work zone. @@ -73,7 +73,7 @@ Scenario 1 ([Linestring](/create-feed/examples/linestring-examples/scenario1_sim - Shows the use of both the work zone and detour road event objects in the same feed. ### Scenario 5 - Recurring Work Zone -[Scenario 5](/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. +[Scenario 5](/create-feed/examples/scenario5_recurring_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. - Simple work zone but with a recurring component. - Five road events: an `active` (day 1, ID: `PLK01012016-Day1`) event and four additional events (IDs: `PLK01012016-Day2`, `PLK01012016-Day3`, `PLK01012016-Day4`, `PLK01012016-Day5`) for later dates with a pending status. @@ -81,14 +81,14 @@ Scenario 1 ([Linestring](/create-feed/examples/linestring-examples/scenario1_sim - The `relationship` property is used to show all road events are related (they have the same parent of `PLK01012016`). ### Local Access Only (bidirectional work zone) -The [local access only example](/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. +The [local access only example](/create-feed/examples/local_access_only_bidirectional_linestring_example.geojson) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. - Single work zone on a bidirectional roadwith with impact to both directions, represented by two road events (IDs: `WZ389-NB`, `WZ389-SB`), one for each direction. - Uses `local-access-only` [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). - One road event shows basic details (not lane-level), while the opposite direction road event shows detailed lane information. The detailed lane information also includes a bike lane for reference. ### Bridge Height Restriction -The [bridge height restriction example](/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson) shows how the restriction road event type can be used within a feed. +The [bridge height restriction example](/create-feed/examples/bridge_restriction_linestring_example.geojson) shows how the restriction road event type can be used within a feed. - Three bridge height restriction examples are shown with only the core details and restriction as needed as part of the restriction road event - One road event, `Bridge1`, also includes lane level details including additional height restrictions values for individual lanes. diff --git a/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson b/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson deleted file mode 100644 index 39c7089d..00000000 --- a/create-feed/examples/linestring-examples/bridge_restriction_linestring_example.geojson +++ /dev/null @@ -1,249 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2021-07-01T15:00:00Z", - "publisher": "New York State DOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 300, - "version": "4.0", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "New York City DOT", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 60, - "update_date": "2021-07-01T00:00:00Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "Bridge1", - "type": "Feature", - "properties": { - "core_details": { - "event_type": "restriction", - "data_source_id": "1", - "road_names": [ - "HRP", - "Hutchinson Parkway", - "Hutchinson River Parkway" - ], - "direction": "northbound" - }, - "restrictions": [ - { - "type": "reduced-height", - "value": 10.5, - "unit": "feet" - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-height", - "value": 10.5, - "unit": "feet" - } - ] - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-height", - "value": 11, - "unit": "feet" - } - ] - }, - { - "order": 3, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-height", - "value": 10.5, - "unit": "feet" - } - ] - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83857488632202, - 40.83782481579416 - ], - [ - -73.8385534286499, - 40.83905758069452 - ], - [ - -73.83834958076477, - 40.84045773030475 - ], - [ - -73.83817791938782, - 40.841269397695825 - ], - [ - -73.83692264556885, - 40.84498467829638 - ], - [ - -73.83683949708939, - 40.84519569836051 - ], - [ - -73.83674025535583, - 40.84555483673242 - ], - [ - -73.83666649460793, - 40.84582976902955 - ], - [ - -73.83646667003632, - 40.84667890696712 - ] - ] - } - }, - { - "id": "Bridge2", - "type": "Feature", - "properties": { - "core_details": { - "event_type": "restriction", - "data_source_id": "1", - "road_names": [ - "HRP", - "Hutchinson Parkway", - "Hutchinson River Parkway" - ], - "direction": "southbound" - }, - "restrictions": [ - { - "type": "reduced-height", - "value": 9.0, - "unit": "feet" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83725792169571, - 40.84455654898646 - ], - [ - -73.8378158211708, - 40.84294748850873 - ], - [ - -73.83808672428131, - 40.84214192905569 - ], - [ - -73.83834153413773, - 40.84133635981177 - ] - ] - } - }, - { - "id": "Bridge3", - "type": "Feature", - "properties": { - "core_details": { - "event_type": "restriction", - "data_source_id": "1", - "road_names": [ - "HRP", - "Hutchinson Parkway", - "Hutchinson River Parkway" - ], - "direction": "southbound" - }, - "restrictions": [ - { - "type": "reduced-height", - "value": 11, - "unit": "feet" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83834153413773, - 40.841335852523244 - ], - [ - -73.8384260237217, - 40.84103300059402 - ], - [ - -73.83847497403622, - 40.84082856207721 - ], - [ - -73.83851654827595, - 40.84063071775089 - ], - [ - -73.83855678141117, - 40.84045722300951 - ], - [ - -73.83865937590599, - 40.83983324694044 - ], - [ - -73.83872039616108, - 40.8393289888175 - ], - [ - -73.83875325322151, - 40.838710582522424 - ], - [ - -73.83877135813236, - 40.838443230352674 - ], - [ - -73.83877202868462, - 40.83817942829337 - ], - [ - -73.83877471089363, - 40.83773502091179 - ], - [ - -73.83877538144588, - 40.83721857114785 - ], - [ - -73.83877336978912, - 40.83710442404608 - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson b/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson deleted file mode 100644 index c257aa10..00000000 --- a/create-feed/examples/linestring-examples/local_access_only_bidirectional_linestring_example.geojson +++ /dev/null @@ -1,188 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "4.0", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "WZ389-NB", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "northbound", - "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "Aurora Avenue", - "ending_cross_street": "NW 46th Place", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-01-01T17:00:00Z", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "location_method": "channel-device-method", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "local-access-only" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.67801666259766, - 41.63699137361764 - ], - [ - -93.67804884910583, - 41.63971757283587 - ], - [ - -93.6780595779419, - 41.64156971886528 - ], - [ - -93.6780595779419, - 41.642211142309336 - ], - [ - -93.67807030677795, - 41.64325344178853 - ], - [ - -93.67807030677795, - 41.64402312904328 - ] - ] - } - }, - { - "id": "WZ389-SB", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "Beaver Avenue" - ], - "direction": "southbound", - "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", - "creation_date": "2010-01-01T01:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "NW 46th Place", - "ending_cross_street": "Aurora Avenue", - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-01-01T17:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "local-access-only" - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "center-left-turn-lane", - "restrictions": [ - { - "type": "local-access-only" - } - ] - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "local-access-only" - } - ] - }, - { - "order": 3, - "status": "open", - "type": "bike-lane", - "restrictions": [ - { - "type": "local-access-only" - } - ] - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.67823123931885, - 41.64400709398592 - ], - [ - -93.67819905281067, - 41.642916700723454 - ], - [ - -93.67820978164673, - 41.642090875899925 - ], - [ - -93.67819905281067, - 41.641810253405005 - ], - [ - -93.67819905281067, - 41.641273058363055 - ], - [ - -93.67818832397461, - 41.63999820444394 - ], - [ - -93.67816686630249, - 41.63866719797019 - ], - [ - -93.67815613746643, - 41.63699137361764 - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson deleted file mode 100644 index 57cdb14d..00000000 --- a/create-feed/examples/linestring-examples/scenario1_simple_linestring_example.geojson +++ /dev/null @@ -1,810 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "4.0", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z" - }, - { - "data_source_id": "2", - "organization_name": "TestDOT", - "contact_name": "Samuel Sonny Sourcefeed", - "contact_email": "samuel.sourcefeed@testdot.gov", - "update_frequency": 60, - "update_date": "2020-06-18T14:39:01Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "71234", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80, I-35" - ], - "direction": "northbound", - "description": "Single direction work zone without lane-level information.", - "creation_date": "2009-12-31T18:01:01Z", - "update_date": "2009-12-31T18:01:01Z" - }, - "beginning_milepost": 125.2, - "ending_milepost": 126.3, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:00:00Z", - "end_date": "2010-01-02T01:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit_kph": 88 - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.776684050999961, - 41.617961698000045 - ], - [ - -93.776682957, - 41.618244962000063 - ], - [ - -93.776677372999984, - 41.619603362000078 - ], - [ - -93.776674365999952, - 41.620322783000063 - ], - [ - -93.776671741999962, - 41.620950321000066 - ], - [ - -93.776688974999956, - 41.622297226000057 - ] - ] - } - }, - { - "id": "WDM-58493-NB", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "128th Street" - ], - "direction": "northbound", - "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", - "creation_date": "2009-12-13T13:35:26Z", - "update_date": "2009-12-31T15:11:16Z" - }, - "beginning_cross_street": "US 6, Hickman Road", - "ending_cross_street": "Douglas Ave", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T06:00:00Z", - "end_date": "2010-05-01T05:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed-merge-left", - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 10, - "unit": "feet" - } - ] - }, - { - "order": 2, - "status": "closed", - "type": "general" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.791522243999964, - 41.614948252000033 - ], - [ - -93.791505319999942, - 41.61501428300005 - ], - [ - -93.791405791999978, - 41.615577076000079 - ], - [ - -93.791345430999968, - 41.615782444000047 - ], - [ - -93.791280304999987, - 41.615977213000065 - ], - [ - -93.791200891999949, - 41.616140173000076 - ], - [ - -93.791079009999976, - 41.616296165000051 - ], - [ - -93.790558010999973, - 41.61681760700003 - ], - [ - -93.790135601999964, - 41.617246805000036 - ], - [ - -93.789830552999945, - 41.617562480000061 - ], - [ - -93.789680613999963, - 41.617771613000059 - ], - [ - -93.789596382999946, - 41.617913356000031 - ], - [ - -93.789502863999985, - 41.618086964000042 - ], - [ - -93.78945179699997, - 41.618264005000071 - ], - [ - -93.789424159999953, - 41.61840914000004 - ], - [ - -93.789414473999955, - 41.618523310000057 - ], - [ - -93.789406687999985, - 41.618788623000057 - ], - [ - -93.789440425999942, - 41.620294861000048 - ], - [ - -93.789441241999953, - 41.620405535000032 - ], - [ - -93.789449826999942, - 41.620516022000061 - ], - [ - -93.789466157999982, - 41.620626017000063 - ], - [ - -93.78949019099997, - 41.620735214000035 - ], - [ - -93.789521855999965, - 41.62084330700003 - ], - [ - -93.78956107, - 41.62095 - ], - [ - -93.789607718999946, - 41.621054995000065 - ], - [ - -93.789661678999948, - 41.621157998000058 - ], - [ - -93.789725124999961, - 41.621262305000073 - ], - [ - -93.789796062999983, - 41.621363857000063 - ], - [ - -93.789874285999986, - 41.621462354000073 - ], - [ - -93.789959554999939, - 41.621557500000051 - ], - [ - -93.790051618999939, - 41.621649010000056 - ], - [ - -93.790150204999975, - 41.621736613000053 - ], - [ - -93.790255013999968, - 41.621820048000075 - ], - [ - -93.790365738, - 41.621899067000072 - ], - [ - -93.790482044999976, - 41.621973433000051 - ], - [ - -93.790603584999985, - 41.622042923000038 - ], - [ - -93.790730001999975, - 41.622107331000052 - ], - [ - -93.790860916999975, - 41.622166468000046 - ], - [ - -93.791037923999966, - 41.622265540000058 - ], - [ - -93.791219643999966, - 41.622359685000049 - ], - [ - -93.791405833999988, - 41.622448775000066 - ], - [ - -93.791596247999962, - 41.62253269200005 - ], - [ - -93.791974661999973, - 41.622789772000033 - ], - [ - -93.792348386999947, - 41.623050684000077 - ], - [ - -93.79264079099994, - 41.62326022700006 - ], - [ - -93.793051083999956, - 41.623588822000045 - ], - [ - -93.793245118999948, - 41.623807143000079 - ], - [ - -93.793416509999986, - 41.62403972900006 - ], - [ - -93.793538291999937, - 41.62424188500006 - ], - [ - -93.793626206999988, - 41.624429215000077 - ], - [ - -93.793710504999979, - 41.624653499000033 - ], - [ - -93.793764538999937, - 41.624880703000031 - ], - [ - -93.793784475999985, - 41.62510231300007 - ], - [ - -93.793785748999937, - 41.625380807000056 - ], - [ - -93.793738188999953, - 41.625670969000055 - ], - [ - -93.793679893999979, - 41.625937897000028 - ], - [ - -93.793612129999985, - 41.626248174000068 - ], - [ - -93.793525080999984, - 41.626631768000038 - ], - [ - -93.793438316999982, - 41.626965183000038 - ], - [ - -93.793363929999941, - 41.627301995000039 - ], - [ - -93.793344298999955, - 41.627537681000035 - ], - [ - -93.793345492999947, - 41.627799206000077 - ], - [ - -93.793356849999952, - 41.628019275000042 - ], - [ - -93.793396009, - 41.62828070300003 - ], - [ - -93.79347973299997, - 41.628577397000072 - ] - ] - } - }, - { - "id": "65773-1", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-2" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; first event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 3.1, - "ending_milepost": 2.9, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": false, - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit_kph": 88, - "restrictions": [], - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "entrance-lane" - }, - { - "order": 6, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.720409507999989, - 41.593422456000042 - ], - [ - -93.721987662999936, - 41.593428462000077 - ], - [ - -93.724060080999948, - 41.593444666000039 - ], - [ - -93.724769801999969, - 41.593457451000063 - ] - ] - } - }, - { - "id": "65773-2", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-3" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; second event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 2.9, - "ending_milepost": 2.5, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit_kph": 88, - "restrictions": [], - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "exit-lane" - }, - { - "order": 6, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.724769801999969, - 41.593457451000063 - ], - [ - -93.725783878999948, - 41.593459089000078 - ], - [ - -93.72589773499999, - 41.593459271000029 - ], - [ - -93.727600448999965, - 41.593468041000051 - ], - [ - -93.728253463999977, - 41.593468762000043 - ], - [ - -93.72899278899996, - 41.593459177000057 - ], - [ - -93.729737457999988, - 41.593435398000054 - ], - [ - -93.730149926999957, - 41.593410350000056 - ] - ] - } - }, - { - "id": "65773-3", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; third event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 2.5, - "ending_milepost": 2.0, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit_kph": 88, - "restrictions": [], - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.730150629999969, - 41.593410307000056 - ], - [ - -93.730393025999945, - 41.593395588000078 - ], - [ - -93.731358798999963, - 41.593326786000034 - ], - [ - -93.731760730999952, - 41.59329153300007 - ], - [ - -93.732583278999982, - 41.59323325400004 - ], - [ - -93.732583278999982, - 41.59323325400004 - ], - [ - -93.732761573999937, - 41.593220621000057 - ], - [ - -93.733481823999966, - 41.593160405000049 - ], - [ - -93.734099563999962, - 41.59310849700006 - ], - [ - -93.735278425999979, - 41.59301896900007 - ], - [ - -93.735701953999978, - 41.592987710000045 - ], - [ - -93.736446499999943, - 41.592931475000057 - ], - [ - -93.737679269999944, - 41.592827630000045 - ], - [ - -93.738580275999936, - 41.592760926000039 - ], - [ - -93.739154871999972, - 41.592719210000041 - ], - [ - -93.739613443999986, - 41.592679760000067 - ], - [ - -93.739774495999939, - 41.592668639000067 - ], - [ - -93.739774495999939, - 41.592668639000067 - ], - [ - -93.740036978999967, - 41.592650510000055 - ], - [ - -93.740347204999978, - 41.592627574000062 - ], - [ - -93.74078960199995, - 41.592592205000074 - ], - [ - -93.741952240999979, - 41.592498589000058 - ], - [ - -93.742189315999951, - 41.592481500000076 - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson deleted file mode 100644 index 992cb446..00000000 --- a/create-feed/examples/linestring-examples/scenario2_laneshift_linestring_example.geojson +++ /dev/null @@ -1,166 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "4.0", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "7733", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80", - "I-35" - ], - "direction": "westbound", - "description": "Single-direction work zone with lane shift", - "creation_date": "2010-12-30T22:42:53Z", - "update_date": "2010-01-01T05:57:36Z" - }, - "beginning_milepost": 133.967, - "ending_milepost": 133.112, - "beginning_accuracy": "verified", - "ending_accuracy": "verified", - "start_date": "2010-01-01T05:57:36Z", - "end_date": "2010-01-05T23:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open-shift-right", - "worker_presence": { - "are_workers_present": true, - "method": "wearables-present", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit_kph": 88, - "restrictions": [], - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "shift-right", - "type": "general" - }, - { - "order": 3, - "status": "shift-right", - "type": "general" - }, - { - "order": 4, - "status": "shift-right", - "type": "general" - }, - { - "order": 5, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.652714940999942, - 41.650200836000067 - ], - [ - -93.654565142999957, - 41.650281119000056 - ], - [ - -93.655964627999936, - 41.650350708000076 - ], - [ - -93.65929743199996, - 41.650497674000064 - ], - [ - -93.66247390999996, - 41.650639043000069 - ], - [ - -93.665256117999945, - 41.650763126000072 - ], - [ - -93.665890640999976, - 41.650791415000072 - ], - [ - -93.667831858999989, - 41.650878240000054 - ], - [ - -93.669295947999956, - 41.650943700000028 - ], - [ - -93.672369497999966, - 41.651076369000066 - ], - [ - -93.675896873999989, - 41.651236853000057 - ], - [ - -93.679374683999981, - 41.651391586000045 - ], - [ - -93.680869566999945, - 41.651461030000064 - ], - [ - -93.681220380999946, - 41.65147732500003 - ], - [ - -93.682955475999961, - 41.651551769000037 - ], - [ - -93.683089, - 41.651577294000049 - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson deleted file mode 100644 index a2ce54cd..00000000 --- a/create-feed/examples/linestring-examples/scenario3_shoulder_bidrectional_linestring_example.geojson +++ /dev/null @@ -1,203 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "4.0", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "121388-EB", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z" - }, - "beginning_milepost": 22.1, - "ending_milepost": 24.6, - "beginning_cross_street": "570th Avenue", - "ending_cross_street": "610th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [], - "types_of_work": [ - { - "type_name": "maintenance", - "is_architectural_change": false - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "general" - }, - { - "order": 2, - "status": "open", - "type": "general" - }, - { - "order": 3, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.56064319610596, - 41.87764559047116 - ], - [ - -93.5451292991638, - 41.87767754402901 - ], - [ - -93.53145003318785, - 41.87766955564103 - ], - [ - -93.5067629814148, - 41.877565706506665 - ], - [ - -93.48284840583801, - 41.87750179926317 - ] - ] - } - }, - { - "id": "121388-WB", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "parents": [ - "121388" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "westbound", - "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", - "creation_date": "2010-01-01T09:30:26Z", - "update_date": "2010-01-01T09:30:26Z" - }, - "beginning_milepost": 24.6, - "ending_milepost": 22.1, - "beginning_cross_street": "610th Avenue", - "ending_cross_street": "570th Avenue", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T10:00:00Z", - "end_date": "2010-01-01T16:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "all-lanes-open", - "restrictions": [ - { - "type": "no-parking" - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "general" - }, - { - "order": 2, - "status": "open", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "shoulder", - "restrictions": [ - { - "type": "no-parking" - } - ] - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.48284304141998, - 41.877607645600484 - ], - [ - -93.49073946475983, - 41.87764559047116 - ], - [ - -93.50573301315308, - 41.877697514994544 - ], - [ - -93.51188063621521, - 41.877749439475735 - ], - [ - -93.53036642074585, - 41.87782133484157 - ], - [ - -93.54414224624632, - 41.877869265040545 - ], - [ - -93.56063783168791, - 41.87786127667653 - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson deleted file mode 100644 index 2ae7182f..00000000 --- a/create-feed/examples/linestring-examples/scenario4_detour_linestring_example.geojson +++ /dev/null @@ -1,827 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "4.0", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "67890", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "children": [ - "67890-detour1", - "67890-detour2", - "67890-detour3" - ] - }, - "road_names": [ - "I-35" - ], - "direction": "northbound", - "description": "Simple, single direction work zone with detour.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_milepost": 98.42, - "ending_milepost": 101.50, - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "scheduled", - "confidence": "medium", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit_kph": 88, - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "shoulder" - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 11, - "unit": "feet" - } - ] - }, - { - "order": 3, - "status": "closed", - "type": "general" - }, - { - "order": 4, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.570535026999949, - 41.815141143000062 - ], - [ - -93.570558665999954, - 41.815778842000043 - ], - [ - -93.570582206999973, - 41.816327889000036 - ], - [ - -93.570613866999963, - 41.817305885000053 - ], - [ - -93.570653239999956, - 41.818343932000062 - ], - [ - -93.570692683999937, - 41.819444889000067 - ], - [ - -93.57072468399997, - 41.820444622000025 - ], - [ - -93.570725033999963, - 41.820762049000052 - ], - [ - -93.570737569999949, - 41.821725757000024 - ], - [ - -93.570735194999941, - 41.823038359000066 - ], - [ - -93.570744205999972, - 41.824273739000034 - ], - [ - -93.570741062999957, - 41.824888576000035 - ], - [ - -93.570745857999952, - 41.825769359000049 - ], - [ - -93.570750405999945, - 41.82642422400005 - ], - [ - -93.570751056999939, - 41.827013323000074 - ], - [ - -93.570767342999943, - 41.82791125600005 - ], - [ - -93.570783135999989, - 41.828363077000063 - ], - [ - -93.57081113199996, - 41.829478340000037 - ], - [ - -93.570846661999951, - 41.830487788000028 - ], - [ - -93.570890330999987, - 41.83194334500007 - ], - [ - -93.570902443999955, - 41.832520995000039 - ], - [ - -93.570930157999953, - 41.833378885000059 - ], - [ - -93.570954688999961, - 41.834811573000025 - ], - [ - -93.570948738999959, - 41.836344370000063 - ], - [ - -93.570942684999977, - 41.837782799000081 - ], - [ - -93.570936722999988, - 41.839304156000026 - ], - [ - -93.570923044999972, - 41.840765465000061 - ], - [ - -93.570924651999974, - 41.84221532600003 - ], - [ - -93.570926279999981, - 41.843685202000074 - ], - [ - -93.570931724, - 41.845146499000066 - ], - [ - -93.570929340999953, - 41.846447657000056 - ], - [ - -93.570938627999965, - 41.84792610900007 - ], - [ - -93.570932442999947, - 41.849247287000026 - ], - [ - -93.570939776999978, - 41.849617513000055 - ], - [ - -93.570957815999975, - 41.850528174000033 - ], - [ - -93.570991150999987, - 41.852249359000041 - ], - [ - -93.571024497999986, - 41.85397641600008 - ], - [ - -93.571053711, - 41.855521371000066 - ], - [ - -93.571083075999979, - 41.85719849700007 - ], - [ - -93.57110858599998, - 41.858940244000053 - ], - [ - -93.571141838999949, - 41.860579185000063 - ] - ] - } - }, - { - "id": "67890-detour1", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour2" - ] - }, - "road_names": [ - "F22" - ], - "direction": "westbound", - "description": "Detour for road event 67890, first segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "I-35", - "ending_cross_street": "US 69", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.600376007999955, - 41.791257966000046 - ], - [ - -93.600375128999985, - 41.791257965000057 - ], - [ - -93.600373887999979, - 41.79125798900003 - ], - [ - -93.598991312999942, - 41.791285770000059 - ], - [ - -93.597408247999965, - 41.791298693000044 - ], - [ - -93.587018347999958, - 41.791370250000057 - ], - [ - -93.581030593999969, - 41.791384089000076 - ], - [ - -93.575477690999946, - 41.791372395000053 - ], - [ - -93.573306168999977, - 41.791361989000052 - ], - [ - -93.572569235999936, - 41.791351637000048 - ], - [ - -93.572478358999945, - 41.79135169500006 - ] - ] - } - }, - { - "id": "67890-detour2", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour3" - ] - }, - "road_names": [ - "US 69" - ], - "direction": "northbound", - "description": "Detour for road event 67890, second segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "NE 126th Avenue", - "ending_cross_street": "IA 210", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.600401730999977, - 41.877744832000076 - ], - [ - -93.600383302999944, - 41.876221974000032 - ], - [ - -93.600399342999935, - 41.874445421000075 - ], - [ - -93.600382543999956, - 41.872739253000077 - ], - [ - -93.600389303999975, - 41.871047136000072 - ], - [ - -93.600386637999975, - 41.869347993000076 - ], - [ - -93.600379122999982, - 41.867557387000033 - ], - [ - -93.600390145999938, - 41.865583833000073 - ], - [ - -93.60037319199995, - 41.863775643000054 - ], - [ - -93.600372301999982, - 41.863207043000045 - ], - [ - -93.600381568999978, - 41.862919375000047 - ], - [ - -93.600376814999947, - 41.861738109000044 - ], - [ - -93.60037443899995, - 41.860563973000069 - ], - [ - -93.60037443899995, - 41.859363694000081 - ], - [ - -93.60036493299998, - 41.858142023000028 - ], - [ - -93.600360178999949, - 41.85695124800003 - ], - [ - -93.600357800999973, - 41.855774736000058 - ], - [ - -93.600357801999962, - 41.854583964000028 - ], - [ - -93.600353046999942, - 41.853378931000066 - ], - [ - -93.600348294999947, - 41.852188157000057 - ], - [ - -93.600343540999972, - 41.85096173200003 - ], - [ - -93.600341164999975, - 41.849768581000035 - ], - [ - -93.600338180999984, - 41.84926536100005 - ], - [ - -93.600334034999946, - 41.848565926000049 - ], - [ - -93.600329278999936, - 41.847403672000041 - ], - [ - -93.600324526999941, - 41.846174873000052 - ], - [ - -93.600319772999967, - 41.844976968000026 - ], - [ - -93.600315018999936, - 41.843786195000064 - ], - [ - -93.600305511999977, - 41.842590668000071 - ], - [ - -93.600296004999961, - 41.841487836000056 - ], - [ - -93.600296003999972, - 41.840275672000075 - ], - [ - -93.600291251999977, - 41.839065885000025 - ], - [ - -93.600291250999987, - 41.837927402000048 - ], - [ - -93.600284120999959, - 41.836760396000045 - ], - [ - -93.600279367999974, - 41.83553872400006 - ], - [ - -93.600273437999988, - 41.834756276000064 - ], - [ - -93.600272235999967, - 41.834597515000041 - ], - [ - -93.600274613999943, - 41.833775145000061 - ], - [ - -93.600272236999956, - 41.832546343000047 - ], - [ - -93.600269860999958, - 41.831357947000072 - ], - [ - -93.600265106999984, - 41.830238478000069 - ], - [ - -93.600269860999958, - 41.829584861000058 - ], - [ - -93.600262728999951, - 41.829031068000063 - ], - [ - -93.60026985899998, - 41.828714954000077 - ], - [ - -93.600265106999984, - 41.827833163000037 - ], - [ - -93.600265732999958, - 41.82751014300004 - ], - [ - -93.600267483999971, - 41.82661149300003 - ], - [ - -93.600267481999936, - 41.825458747000027 - ], - [ - -93.60026985899998, - 41.824289366000073 - ], - [ - -93.600262728999951, - 41.823096216000067 - ], - [ - -93.60026272999994, - 41.822017153000047 - ], - [ - -93.600265008999941, - 41.821111594000058 - ], - [ - -93.600263135999967, - 41.820261561000052 - ], - [ - -93.600264984999967, - 41.819911794000063 - ], - [ - -93.600262608999969, - 41.818602179000038 - ], - [ - -93.600255478999941, - 41.817525493000062 - ], - [ - -93.600255478999941, - 41.816325213000027 - ], - [ - -93.600248348999969, - 41.815205744000025 - ], - [ - -93.600243592999959, - 41.814019724000048 - ], - [ - -93.600245971999982, - 41.812914517000024 - ], - [ - -93.600253101999954, - 41.811806931000035 - ], - [ - -93.600269738999941, - 41.81082056200006 - ], - [ - -93.600276870999949, - 41.80970822200004 - ], - [ - -93.600288753999962, - 41.808624405000046 - ], - [ - -93.600295884, - 41.807576241000049 - ], - [ - -93.600310144, - 41.806435380000039 - ], - [ - -93.60031408499998, - 41.805741814000044 - ], - [ - -93.600314898999954, - 41.805598749000069 - ], - [ - -93.600324404999981, - 41.804529191000029 - ], - [ - -93.600319769999942, - 41.803418761000046 - ], - [ - -93.60031965099995, - 41.803390708000052 - ], - [ - -93.600322028999983, - 41.802354426000079 - ], - [ - -93.600322026999947, - 41.801782615000036 - ], - [ - -93.600322026999947, - 41.80161524500005 - ], - [ - -93.600331535999942, - 41.800495775000059 - ], - [ - -93.600326782999957, - 41.799371551000036 - ], - [ - -93.600331535999942, - 41.798416082000074 - ], - [ - -93.600331535999942, - 41.797327511000049 - ], - [ - -93.60033866699996, - 41.796314997000025 - ], - [ - -93.600345797999978, - 41.795214543000043 - ], - [ - -93.600350549999973, - 41.794040406000079 - ], - [ - -93.600362434999965, - 41.792899545000068 - ], - [ - -93.600360056999989, - 41.791818106000051 - ], - [ - -93.600373887999979, - 41.79125798900003 - ], - [ - -93.600373891999936, - 41.791257820000055 - ] - ] - } - }, - { - "id": "67890-detour3", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "6780" - ], - "first": [ - "67890-detour1" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "description": "Detour for road event 67890, third/final segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "US 69", - "ending_cross_street": "I-35", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.573353147999967, - 41.877796484000044 - ], - [ - -93.573356421999961, - 41.87779647800005 - ], - [ - -93.574056398999971, - 41.877795233000029 - ], - [ - -93.577496035999957, - 41.877791515000069 - ], - [ - -93.578346253999939, - 41.877790018000042 - ], - [ - -93.579435310999941, - 41.877788094000039 - ], - [ - -93.580892132999963, - 41.877785500000073 - ], - [ - -93.581418045999953, - 41.877784560000066 - ], - [ - -93.581835475, - 41.877783302000068 - ], - [ - -93.586943989999952, - 41.877767791000053 - ], - [ - -93.591580114999942, - 41.877755708000052 - ], - [ - -93.596289923999962, - 41.877747609000039 - ], - [ - -93.60040158399994, - 41.87774674700006 - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson b/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson deleted file mode 100644 index 0a2b7538..00000000 --- a/create-feed/examples/linestring-examples/scenario5_recurring_linestring_example.geojson +++ /dev/null @@ -1,827 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "4.0", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "67890", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "relationship": { - "children": [ - "67890-detour1", - "67890-detour2", - "67890-detour3" - ] - }, - "road_names": [ - "I-35" - ], - "direction": "northbound", - "description": "Simple, single direction work zone with detour.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_milepost": 98.42, - "ending_milepost": 101.50, - "beginning_accuracy": "verified", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "scheduled", - "confidence": "medium", - "definition": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving" - ] - }, - "reduced_speed_limit_kph": 55, - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "shoulder" - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 11, - "unit": "feet" - } - ] - }, - { - "order": 3, - "status": "closed", - "type": "general" - }, - { - "order": 4, - "status": "closed", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.570535026999949, - 41.815141143000062 - ], - [ - -93.570558665999954, - 41.815778842000043 - ], - [ - -93.570582206999973, - 41.816327889000036 - ], - [ - -93.570613866999963, - 41.817305885000053 - ], - [ - -93.570653239999956, - 41.818343932000062 - ], - [ - -93.570692683999937, - 41.819444889000067 - ], - [ - -93.57072468399997, - 41.820444622000025 - ], - [ - -93.570725033999963, - 41.820762049000052 - ], - [ - -93.570737569999949, - 41.821725757000024 - ], - [ - -93.570735194999941, - 41.823038359000066 - ], - [ - -93.570744205999972, - 41.824273739000034 - ], - [ - -93.570741062999957, - 41.824888576000035 - ], - [ - -93.570745857999952, - 41.825769359000049 - ], - [ - -93.570750405999945, - 41.82642422400005 - ], - [ - -93.570751056999939, - 41.827013323000074 - ], - [ - -93.570767342999943, - 41.82791125600005 - ], - [ - -93.570783135999989, - 41.828363077000063 - ], - [ - -93.57081113199996, - 41.829478340000037 - ], - [ - -93.570846661999951, - 41.830487788000028 - ], - [ - -93.570890330999987, - 41.83194334500007 - ], - [ - -93.570902443999955, - 41.832520995000039 - ], - [ - -93.570930157999953, - 41.833378885000059 - ], - [ - -93.570954688999961, - 41.834811573000025 - ], - [ - -93.570948738999959, - 41.836344370000063 - ], - [ - -93.570942684999977, - 41.837782799000081 - ], - [ - -93.570936722999988, - 41.839304156000026 - ], - [ - -93.570923044999972, - 41.840765465000061 - ], - [ - -93.570924651999974, - 41.84221532600003 - ], - [ - -93.570926279999981, - 41.843685202000074 - ], - [ - -93.570931724, - 41.845146499000066 - ], - [ - -93.570929340999953, - 41.846447657000056 - ], - [ - -93.570938627999965, - 41.84792610900007 - ], - [ - -93.570932442999947, - 41.849247287000026 - ], - [ - -93.570939776999978, - 41.849617513000055 - ], - [ - -93.570957815999975, - 41.850528174000033 - ], - [ - -93.570991150999987, - 41.852249359000041 - ], - [ - -93.571024497999986, - 41.85397641600008 - ], - [ - -93.571053711, - 41.855521371000066 - ], - [ - -93.571083075999979, - 41.85719849700007 - ], - [ - -93.57110858599998, - 41.858940244000053 - ], - [ - -93.571141838999949, - 41.860579185000063 - ] - ] - } - }, - { - "id": "67890-detour1", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour2" - ] - }, - "road_names": [ - "F22" - ], - "direction": "westbound", - "description": "Detour for road event 67890, first segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "I-35", - "ending_cross_street": "US 69", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.600376007999955, - 41.791257966000046 - ], - [ - -93.600375128999985, - 41.791257965000057 - ], - [ - -93.600373887999979, - 41.79125798900003 - ], - [ - -93.598991312999942, - 41.791285770000059 - ], - [ - -93.597408247999965, - 41.791298693000044 - ], - [ - -93.587018347999958, - 41.791370250000057 - ], - [ - -93.581030593999969, - 41.791384089000076 - ], - [ - -93.575477690999946, - 41.791372395000053 - ], - [ - -93.573306168999977, - 41.791361989000052 - ], - [ - -93.572569235999936, - 41.791351637000048 - ], - [ - -93.572478358999945, - 41.79135169500006 - ] - ] - } - }, - { - "id": "67890-detour2", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "67890" - ], - "first": [ - "67890-detour1" - ], - "next": [ - "67890-detour3" - ] - }, - "road_names": [ - "US 69" - ], - "direction": "northbound", - "description": "Detour for road event 67890, second segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "NE 126th Avenue", - "ending_cross_street": "IA 210", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.600401730999977, - 41.877744832000076 - ], - [ - -93.600383302999944, - 41.876221974000032 - ], - [ - -93.600399342999935, - 41.874445421000075 - ], - [ - -93.600382543999956, - 41.872739253000077 - ], - [ - -93.600389303999975, - 41.871047136000072 - ], - [ - -93.600386637999975, - 41.869347993000076 - ], - [ - -93.600379122999982, - 41.867557387000033 - ], - [ - -93.600390145999938, - 41.865583833000073 - ], - [ - -93.60037319199995, - 41.863775643000054 - ], - [ - -93.600372301999982, - 41.863207043000045 - ], - [ - -93.600381568999978, - 41.862919375000047 - ], - [ - -93.600376814999947, - 41.861738109000044 - ], - [ - -93.60037443899995, - 41.860563973000069 - ], - [ - -93.60037443899995, - 41.859363694000081 - ], - [ - -93.60036493299998, - 41.858142023000028 - ], - [ - -93.600360178999949, - 41.85695124800003 - ], - [ - -93.600357800999973, - 41.855774736000058 - ], - [ - -93.600357801999962, - 41.854583964000028 - ], - [ - -93.600353046999942, - 41.853378931000066 - ], - [ - -93.600348294999947, - 41.852188157000057 - ], - [ - -93.600343540999972, - 41.85096173200003 - ], - [ - -93.600341164999975, - 41.849768581000035 - ], - [ - -93.600338180999984, - 41.84926536100005 - ], - [ - -93.600334034999946, - 41.848565926000049 - ], - [ - -93.600329278999936, - 41.847403672000041 - ], - [ - -93.600324526999941, - 41.846174873000052 - ], - [ - -93.600319772999967, - 41.844976968000026 - ], - [ - -93.600315018999936, - 41.843786195000064 - ], - [ - -93.600305511999977, - 41.842590668000071 - ], - [ - -93.600296004999961, - 41.841487836000056 - ], - [ - -93.600296003999972, - 41.840275672000075 - ], - [ - -93.600291251999977, - 41.839065885000025 - ], - [ - -93.600291250999987, - 41.837927402000048 - ], - [ - -93.600284120999959, - 41.836760396000045 - ], - [ - -93.600279367999974, - 41.83553872400006 - ], - [ - -93.600273437999988, - 41.834756276000064 - ], - [ - -93.600272235999967, - 41.834597515000041 - ], - [ - -93.600274613999943, - 41.833775145000061 - ], - [ - -93.600272236999956, - 41.832546343000047 - ], - [ - -93.600269860999958, - 41.831357947000072 - ], - [ - -93.600265106999984, - 41.830238478000069 - ], - [ - -93.600269860999958, - 41.829584861000058 - ], - [ - -93.600262728999951, - 41.829031068000063 - ], - [ - -93.60026985899998, - 41.828714954000077 - ], - [ - -93.600265106999984, - 41.827833163000037 - ], - [ - -93.600265732999958, - 41.82751014300004 - ], - [ - -93.600267483999971, - 41.82661149300003 - ], - [ - -93.600267481999936, - 41.825458747000027 - ], - [ - -93.60026985899998, - 41.824289366000073 - ], - [ - -93.600262728999951, - 41.823096216000067 - ], - [ - -93.60026272999994, - 41.822017153000047 - ], - [ - -93.600265008999941, - 41.821111594000058 - ], - [ - -93.600263135999967, - 41.820261561000052 - ], - [ - -93.600264984999967, - 41.819911794000063 - ], - [ - -93.600262608999969, - 41.818602179000038 - ], - [ - -93.600255478999941, - 41.817525493000062 - ], - [ - -93.600255478999941, - 41.816325213000027 - ], - [ - -93.600248348999969, - 41.815205744000025 - ], - [ - -93.600243592999959, - 41.814019724000048 - ], - [ - -93.600245971999982, - 41.812914517000024 - ], - [ - -93.600253101999954, - 41.811806931000035 - ], - [ - -93.600269738999941, - 41.81082056200006 - ], - [ - -93.600276870999949, - 41.80970822200004 - ], - [ - -93.600288753999962, - 41.808624405000046 - ], - [ - -93.600295884, - 41.807576241000049 - ], - [ - -93.600310144, - 41.806435380000039 - ], - [ - -93.60031408499998, - 41.805741814000044 - ], - [ - -93.600314898999954, - 41.805598749000069 - ], - [ - -93.600324404999981, - 41.804529191000029 - ], - [ - -93.600319769999942, - 41.803418761000046 - ], - [ - -93.60031965099995, - 41.803390708000052 - ], - [ - -93.600322028999983, - 41.802354426000079 - ], - [ - -93.600322026999947, - 41.801782615000036 - ], - [ - -93.600322026999947, - 41.80161524500005 - ], - [ - -93.600331535999942, - 41.800495775000059 - ], - [ - -93.600326782999957, - 41.799371551000036 - ], - [ - -93.600331535999942, - 41.798416082000074 - ], - [ - -93.600331535999942, - 41.797327511000049 - ], - [ - -93.60033866699996, - 41.796314997000025 - ], - [ - -93.600345797999978, - 41.795214543000043 - ], - [ - -93.600350549999973, - 41.794040406000079 - ], - [ - -93.600362434999965, - 41.792899545000068 - ], - [ - -93.600360056999989, - 41.791818106000051 - ], - [ - -93.600373887999979, - 41.79125798900003 - ], - [ - -93.600373891999936, - 41.791257820000055 - ] - ] - } - }, - { - "id": "67890-detour3", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "detour", - "relationship": { - "parents": [ - "6780" - ], - "first": [ - "67890-detour1" - ] - }, - "road_names": [ - "IA 210" - ], - "direction": "eastbound", - "description": "Detour for road event 67890, third/final segment.", - "creation_date": "2009-12-15T14:01:01Z", - "update_date": "2010-01-01T01:03:01Z" - }, - "beginning_cross_street": "US 69", - "ending_cross_street": "I-35", - "start_date": "2010-01-01T01:03:01Z", - "end_date": "2010-06-30T01:00:00Z", - "start_date_accuracy": "verified", - "end_date_accuracy": "estimated", - "event_status": "active" - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -93.573353147999967, - 41.877796484000044 - ], - [ - -93.573356421999961, - 41.87779647800005 - ], - [ - -93.574056398999971, - 41.877795233000029 - ], - [ - -93.577496035999957, - 41.877791515000069 - ], - [ - -93.578346253999939, - 41.877790018000042 - ], - [ - -93.579435310999941, - 41.877788094000039 - ], - [ - -93.580892132999963, - 41.877785500000073 - ], - [ - -93.581418045999953, - 41.877784560000066 - ], - [ - -93.581835475, - 41.877783302000068 - ], - [ - -93.586943989999952, - 41.877767791000053 - ], - [ - -93.591580114999942, - 41.877755708000052 - ], - [ - -93.596289923999962, - 41.877747609000039 - ], - [ - -93.60040158399994, - 41.87774674700006 - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson deleted file mode 100644 index 1e8969db..00000000 --- a/create-feed/examples/multipoint-examples/scenario1_simple_multipoint_example.geojson +++ /dev/null @@ -1,427 +0,0 @@ -{ - "road_event_feed_info": { - "update_date": "2020-06-18T15:00:00Z", - "publisher": "TestDOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 60, - "version": "4.0", - "license": "https://creativecommons.org/publicdomain/zero/1.0/", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "Test City 1", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 300, - "update_date": "2020-06-18T14:37:31Z" - }, - { - "data_source_id": "2", - "organization_name": "TestDOT", - "contact_name": "Samuel Sonny Sourcefeed", - "contact_email": "samuel.sourcefeed@testdot.gov", - "update_frequency": 60, - "update_date": "2020-06-18T14:39:01Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "71234", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "I-80", - "I-35" - ], - "direction": "northbound", - "description": "Single direction work zone without lane-level information.", - "creation_date": "2009-12-31T18:01:01Z", - "update_date": "2009-12-31T18:01:01Z" - }, - "beginning_milepost": 125.2, - "ending_milepost": 126.3, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T01:00:00Z", - "end_date": "2010-01-02T01:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit_kph": 88 - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.776684050999961, - 41.617961698000045 - ], - [ - -93.776688974999956, - 41.622297226000057 - ] - ] - } - }, - { - "id": "WDM-58493-NB", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "1", - "event_type": "work-zone", - "road_names": [ - "128th Street" - ], - "direction": "northbound", - "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", - "creation_date": "2009-12-13T13:35:26Z", - "update_date": "2009-12-31T15:11:16Z" - }, - "beginning_cross_street": "US 6, Hickman Road", - "ending_cross_street": "Douglas Ave", - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T06:00:00Z", - "end_date": "2010-05-01T05:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed-merge-left", - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-width", - "value": 10, - "unit": "feet" - } - ] - }, - { - "order": 2, - "status": "closed", - "type": "general" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.791522243999964, - 41.614948252000033 - ], - [ - -93.79347973299997, - 41.628577397000072 - ] - ] - } - }, - { - "id": "65773-1", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-2" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; first event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 3.1, - "ending_milepost": 2.9, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": false, - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit_kph": 88, - "restrictions": [], - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "entrance-lane" - }, - { - "order": 6, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.720409507999989, - 41.593422456000042 - ], - [ - -93.724769801999969, - 41.593457451000063 - ] - ] - } - }, - { - "id": "65773-2", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ], - "next": [ - "65773-3" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; second event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 2.9, - "ending_milepost": 2.5, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit_kph": 88, - "restrictions": [], - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "exit-lane" - }, - { - "order": 6, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.724769801999969, - 41.593457451000063 - ], - [ - -93.730149926999957, - 41.593410350000056 - ] - ] - } - }, - { - "id": "65773-3", - "type": "Feature", - "properties": { - "core_details": { - "data_source_id": "2", - "event_type": "work-zone", - "relationship": { - "parents": [ - "65773" - ], - "first": [ - "65773-1" - ] - }, - "road_names": [ - "I-235" - ], - "direction": "westbound", - "description": "Single-direction work zone represented by three sequential road events; third event.", - "creation_date": "2009-12-31T11:56:26Z", - "update_date": "2009-12-31T11:56:26Z" - }, - "beginning_milepost": 2.5, - "ending_milepost": 2.0, - "beginning_accuracy": "estimated", - "ending_accuracy": "estimated", - "start_date": "2010-01-01T14:00:00Z", - "end_date": "2010-01-05T23:00:00Z", - "location_method": "channel-device-method", - "start_date_accuracy": "estimated", - "end_date_accuracy": "estimated", - "event_status": "active", - "vehicle_impact": "some-lanes-closed", - "worker_presence": { - "are_workers_present": true, - "method": "check-in-app", - "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", - "confidence": "high", - "definition": [ - "humans-in-right-of-way" - ] - }, - "reduced_speed_limit_kph": 88, - "restrictions": [], - "types_of_work": [ - { - "type_name": "surface-work", - "is_architectural_change": true - } - ], - "lanes": [ - { - "order": 1, - "status": "closed", - "type": "shoulder" - }, - { - "order": 2, - "status": "closed", - "type": "general" - }, - { - "order": 3, - "status": "open", - "type": "general" - }, - { - "order": 4, - "status": "open", - "type": "general" - }, - { - "order": 5, - "status": "open", - "type": "shoulder" - } - ] - }, - "geometry": { - "type": "MultiPoint", - "coordinates": [ - [ - -93.730150629999969, - 41.593410307000056 - ], - [ - -93.742189315999951, - 41.592481500000076 - ] - ] - } - } - ] -} \ No newline at end of file From 3570a66974d7dfe0f3c7e08071042102b8592fd4 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 15:13:02 -0500 Subject: [PATCH 286/388] Add bridge restriction linestring example --- ...dge_restriction_linestring_example.geojson | 249 ++++++++++++++++++ 1 file changed, 249 insertions(+) create mode 100644 create-feed/examples/bridge_restriction_linestring_example.geojson diff --git a/create-feed/examples/bridge_restriction_linestring_example.geojson b/create-feed/examples/bridge_restriction_linestring_example.geojson new file mode 100644 index 00000000..39c7089d --- /dev/null +++ b/create-feed/examples/bridge_restriction_linestring_example.geojson @@ -0,0 +1,249 @@ +{ + "road_event_feed_info": { + "update_date": "2021-07-01T15:00:00Z", + "publisher": "New York State DOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 300, + "version": "4.0", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "New York City DOT", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 60, + "update_date": "2021-07-01T00:00:00Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "Bridge1", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": "1", + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "northbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 10.5, + "unit": "feet" + } + ], + "lanes": [ + { + "order": 1, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-height", + "value": 10.5, + "unit": "feet" + } + ] + }, + { + "order": 2, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-height", + "value": 11, + "unit": "feet" + } + ] + }, + { + "order": 3, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-height", + "value": 10.5, + "unit": "feet" + } + ] + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83857488632202, + 40.83782481579416 + ], + [ + -73.8385534286499, + 40.83905758069452 + ], + [ + -73.83834958076477, + 40.84045773030475 + ], + [ + -73.83817791938782, + 40.841269397695825 + ], + [ + -73.83692264556885, + 40.84498467829638 + ], + [ + -73.83683949708939, + 40.84519569836051 + ], + [ + -73.83674025535583, + 40.84555483673242 + ], + [ + -73.83666649460793, + 40.84582976902955 + ], + [ + -73.83646667003632, + 40.84667890696712 + ] + ] + } + }, + { + "id": "Bridge2", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": "1", + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "southbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 9.0, + "unit": "feet" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83725792169571, + 40.84455654898646 + ], + [ + -73.8378158211708, + 40.84294748850873 + ], + [ + -73.83808672428131, + 40.84214192905569 + ], + [ + -73.83834153413773, + 40.84133635981177 + ] + ] + } + }, + { + "id": "Bridge3", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": "1", + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "southbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 11, + "unit": "feet" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83834153413773, + 40.841335852523244 + ], + [ + -73.8384260237217, + 40.84103300059402 + ], + [ + -73.83847497403622, + 40.84082856207721 + ], + [ + -73.83851654827595, + 40.84063071775089 + ], + [ + -73.83855678141117, + 40.84045722300951 + ], + [ + -73.83865937590599, + 40.83983324694044 + ], + [ + -73.83872039616108, + 40.8393289888175 + ], + [ + -73.83875325322151, + 40.838710582522424 + ], + [ + -73.83877135813236, + 40.838443230352674 + ], + [ + -73.83877202868462, + 40.83817942829337 + ], + [ + -73.83877471089363, + 40.83773502091179 + ], + [ + -73.83877538144588, + 40.83721857114785 + ], + [ + -73.83877336978912, + 40.83710442404608 + ] + ] + } + } + ] +} \ No newline at end of file From 9ab94c4b99a89db75a307295239085fb2342ac87 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 15:16:14 -0500 Subject: [PATCH 287/388] Re-add example files --- README.md | 1 - create-feed/README.md | 6 - ...y_bidirectional_linestring_example.geojson | 188 ++++ ...cenario1_simple_linestring_example.geojson | 810 +++++++++++++++++ ...cenario1_simple_multipoint_example.geojson | 427 +++++++++ ...ario2_laneshift_linestring_example.geojson | 166 ++++ ...er_bidrectional_linestring_example.geojson | 203 +++++ ...cenario4_detour_linestring_example.geojson | 827 ++++++++++++++++++ ...ario5_recurring_linestring_example.geojson | 827 ++++++++++++++++++ 9 files changed, 3448 insertions(+), 7 deletions(-) create mode 100644 create-feed/examples/local_access_only_bidirectional_linestring_example.geojson create mode 100644 create-feed/examples/scenario1_simple_linestring_example.geojson create mode 100644 create-feed/examples/scenario1_simple_multipoint_example.geojson create mode 100644 create-feed/examples/scenario2_laneshift_linestring_example.geojson create mode 100644 create-feed/examples/scenario3_shoulder_bidrectional_linestring_example.geojson create mode 100644 create-feed/examples/scenario4_detour_linestring_example.geojson create mode 100644 create-feed/examples/scenario5_recurring_linestring_example.geojson diff --git a/README.md b/README.md index 1e6017b3..52b470af 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,6 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c ### Contents - [**Creating a WZDx Feed**](/create-feed) - [**Example Feed GeoJSON Files**](/create-feed/examples) - - [Bridge Height Restriction](/create-feed/examples/bridge_restriction_linestring_exxample.geojson) - [Local Access Only (bidirectional)](/create-feed/examples/local_access_only_bidirectional_linestring_example.geojson) - [Simple Work Zone (LineString)](/create-feed/examples/scenario1_simple_linestring_example.geojson) - [Lane Shift](/create-feed/examples/scenario2_laneshift_linestring_example.geojson) diff --git a/create-feed/README.md b/create-feed/README.md index 4cfcba1c..d8fadaeb 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -87,12 +87,6 @@ The [local access only example](/create-feed/examples/local_access_only_bidirect - Uses `local-access-only` [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). - One road event shows basic details (not lane-level), while the opposite direction road event shows detailed lane information. The detailed lane information also includes a bike lane for reference. -### Bridge Height Restriction -The [bridge height restriction example](/create-feed/examples/bridge_restriction_linestring_example.geojson) shows how the restriction road event type can be used within a feed. - -- Three bridge height restriction examples are shown with only the core details and restriction as needed as part of the restriction road event -- One road event, `Bridge1`, also includes lane level details including additional height restrictions values for individual lanes. - ## JSON Schemas The [schemas](/create-feed/schemas) directory includes a JSON Schema for the following WZDx feed versions: diff --git a/create-feed/examples/local_access_only_bidirectional_linestring_example.geojson b/create-feed/examples/local_access_only_bidirectional_linestring_example.geojson new file mode 100644 index 00000000..c257aa10 --- /dev/null +++ b/create-feed/examples/local_access_only_bidirectional_linestring_example.geojson @@ -0,0 +1,188 @@ +{ + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "WZ389-NB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "Beaver Avenue" + ], + "direction": "northbound", + "description": "Bidirectional work zone, northbound direction with road event-level local access only restriction.", + "creation_date": "2010-01-01T01:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "Aurora Avenue", + "ending_cross_street": "NW 46th Place", + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-01-01T17:00:00Z", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "location_method": "channel-device-method", + "event_status": "active", + "vehicle_impact": "all-lanes-open", + "restrictions": [ + { + "type": "local-access-only" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.67801666259766, + 41.63699137361764 + ], + [ + -93.67804884910583, + 41.63971757283587 + ], + [ + -93.6780595779419, + 41.64156971886528 + ], + [ + -93.6780595779419, + 41.642211142309336 + ], + [ + -93.67807030677795, + 41.64325344178853 + ], + [ + -93.67807030677795, + 41.64402312904328 + ] + ] + } + }, + { + "id": "WZ389-SB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "Beaver Avenue" + ], + "direction": "southbound", + "description": "Bidirectional work zone, southbound direction with lane-level local access only restriction.", + "creation_date": "2010-01-01T01:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "NW 46th Place", + "ending_cross_street": "Aurora Avenue", + "beginning_accuracy": "verified", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-01-01T17:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "all-lanes-open", + "restrictions": [ + { + "type": "local-access-only" + } + ], + "lanes": [ + { + "order": 1, + "status": "open", + "type": "center-left-turn-lane", + "restrictions": [ + { + "type": "local-access-only" + } + ] + }, + { + "order": 2, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "local-access-only" + } + ] + }, + { + "order": 3, + "status": "open", + "type": "bike-lane", + "restrictions": [ + { + "type": "local-access-only" + } + ] + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.67823123931885, + 41.64400709398592 + ], + [ + -93.67819905281067, + 41.642916700723454 + ], + [ + -93.67820978164673, + 41.642090875899925 + ], + [ + -93.67819905281067, + 41.641810253405005 + ], + [ + -93.67819905281067, + 41.641273058363055 + ], + [ + -93.67818832397461, + 41.63999820444394 + ], + [ + -93.67816686630249, + 41.63866719797019 + ], + [ + -93.67815613746643, + 41.63699137361764 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/create-feed/examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/scenario1_simple_linestring_example.geojson new file mode 100644 index 00000000..57cdb14d --- /dev/null +++ b/create-feed/examples/scenario1_simple_linestring_example.geojson @@ -0,0 +1,810 @@ +{ + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + }, + { + "data_source_id": "2", + "organization_name": "TestDOT", + "contact_name": "Samuel Sonny Sourcefeed", + "contact_email": "samuel.sourcefeed@testdot.gov", + "update_frequency": 60, + "update_date": "2020-06-18T14:39:01Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "71234", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "I-80, I-35" + ], + "direction": "northbound", + "description": "Single direction work zone without lane-level information.", + "creation_date": "2009-12-31T18:01:01Z", + "update_date": "2009-12-31T18:01:01Z" + }, + "beginning_milepost": 125.2, + "ending_milepost": 126.3, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T01:00:00Z", + "end_date": "2010-01-02T01:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "reduced_speed_limit_kph": 88 + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.776684050999961, + 41.617961698000045 + ], + [ + -93.776682957, + 41.618244962000063 + ], + [ + -93.776677372999984, + 41.619603362000078 + ], + [ + -93.776674365999952, + 41.620322783000063 + ], + [ + -93.776671741999962, + 41.620950321000066 + ], + [ + -93.776688974999956, + 41.622297226000057 + ] + ] + } + }, + { + "id": "WDM-58493-NB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "128th Street" + ], + "direction": "northbound", + "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", + "creation_date": "2009-12-13T13:35:26Z", + "update_date": "2009-12-31T15:11:16Z" + }, + "beginning_cross_street": "US 6, Hickman Road", + "ending_cross_street": "Douglas Ave", + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T06:00:00Z", + "end_date": "2010-05-01T05:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed-merge-left", + "lanes": [ + { + "order": 1, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-width", + "value": 10, + "unit": "feet" + } + ] + }, + { + "order": 2, + "status": "closed", + "type": "general" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.791522243999964, + 41.614948252000033 + ], + [ + -93.791505319999942, + 41.61501428300005 + ], + [ + -93.791405791999978, + 41.615577076000079 + ], + [ + -93.791345430999968, + 41.615782444000047 + ], + [ + -93.791280304999987, + 41.615977213000065 + ], + [ + -93.791200891999949, + 41.616140173000076 + ], + [ + -93.791079009999976, + 41.616296165000051 + ], + [ + -93.790558010999973, + 41.61681760700003 + ], + [ + -93.790135601999964, + 41.617246805000036 + ], + [ + -93.789830552999945, + 41.617562480000061 + ], + [ + -93.789680613999963, + 41.617771613000059 + ], + [ + -93.789596382999946, + 41.617913356000031 + ], + [ + -93.789502863999985, + 41.618086964000042 + ], + [ + -93.78945179699997, + 41.618264005000071 + ], + [ + -93.789424159999953, + 41.61840914000004 + ], + [ + -93.789414473999955, + 41.618523310000057 + ], + [ + -93.789406687999985, + 41.618788623000057 + ], + [ + -93.789440425999942, + 41.620294861000048 + ], + [ + -93.789441241999953, + 41.620405535000032 + ], + [ + -93.789449826999942, + 41.620516022000061 + ], + [ + -93.789466157999982, + 41.620626017000063 + ], + [ + -93.78949019099997, + 41.620735214000035 + ], + [ + -93.789521855999965, + 41.62084330700003 + ], + [ + -93.78956107, + 41.62095 + ], + [ + -93.789607718999946, + 41.621054995000065 + ], + [ + -93.789661678999948, + 41.621157998000058 + ], + [ + -93.789725124999961, + 41.621262305000073 + ], + [ + -93.789796062999983, + 41.621363857000063 + ], + [ + -93.789874285999986, + 41.621462354000073 + ], + [ + -93.789959554999939, + 41.621557500000051 + ], + [ + -93.790051618999939, + 41.621649010000056 + ], + [ + -93.790150204999975, + 41.621736613000053 + ], + [ + -93.790255013999968, + 41.621820048000075 + ], + [ + -93.790365738, + 41.621899067000072 + ], + [ + -93.790482044999976, + 41.621973433000051 + ], + [ + -93.790603584999985, + 41.622042923000038 + ], + [ + -93.790730001999975, + 41.622107331000052 + ], + [ + -93.790860916999975, + 41.622166468000046 + ], + [ + -93.791037923999966, + 41.622265540000058 + ], + [ + -93.791219643999966, + 41.622359685000049 + ], + [ + -93.791405833999988, + 41.622448775000066 + ], + [ + -93.791596247999962, + 41.62253269200005 + ], + [ + -93.791974661999973, + 41.622789772000033 + ], + [ + -93.792348386999947, + 41.623050684000077 + ], + [ + -93.79264079099994, + 41.62326022700006 + ], + [ + -93.793051083999956, + 41.623588822000045 + ], + [ + -93.793245118999948, + 41.623807143000079 + ], + [ + -93.793416509999986, + 41.62403972900006 + ], + [ + -93.793538291999937, + 41.62424188500006 + ], + [ + -93.793626206999988, + 41.624429215000077 + ], + [ + -93.793710504999979, + 41.624653499000033 + ], + [ + -93.793764538999937, + 41.624880703000031 + ], + [ + -93.793784475999985, + 41.62510231300007 + ], + [ + -93.793785748999937, + 41.625380807000056 + ], + [ + -93.793738188999953, + 41.625670969000055 + ], + [ + -93.793679893999979, + 41.625937897000028 + ], + [ + -93.793612129999985, + 41.626248174000068 + ], + [ + -93.793525080999984, + 41.626631768000038 + ], + [ + -93.793438316999982, + 41.626965183000038 + ], + [ + -93.793363929999941, + 41.627301995000039 + ], + [ + -93.793344298999955, + 41.627537681000035 + ], + [ + -93.793345492999947, + 41.627799206000077 + ], + [ + -93.793356849999952, + 41.628019275000042 + ], + [ + -93.793396009, + 41.62828070300003 + ], + [ + -93.79347973299997, + 41.628577397000072 + ] + ] + } + }, + { + "id": "65773-1", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-2" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; first event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 3.1, + "ending_milepost": 2.9, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T14:00:00Z", + "end_date": "2010-01-05T23:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": false, + "definition": [ + "humans-in-right-of-way" + ] + }, + "reduced_speed_limit_kph": 88, + "restrictions": [], + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "shoulder" + }, + { + "order": 2, + "status": "closed", + "type": "general" + }, + { + "order": 3, + "status": "open", + "type": "general" + }, + { + "order": 4, + "status": "open", + "type": "general" + }, + { + "order": 5, + "status": "open", + "type": "entrance-lane" + }, + { + "order": 6, + "status": "open", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.720409507999989, + 41.593422456000042 + ], + [ + -93.721987662999936, + 41.593428462000077 + ], + [ + -93.724060080999948, + 41.593444666000039 + ], + [ + -93.724769801999969, + 41.593457451000063 + ] + ] + } + }, + { + "id": "65773-2", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-3" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; second event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.9, + "ending_milepost": 2.5, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T14:00:00Z", + "end_date": "2010-01-05T23:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": true, + "method": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, + "reduced_speed_limit_kph": 88, + "restrictions": [], + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "shoulder" + }, + { + "order": 2, + "status": "closed", + "type": "general" + }, + { + "order": 3, + "status": "open", + "type": "general" + }, + { + "order": 4, + "status": "open", + "type": "general" + }, + { + "order": 5, + "status": "open", + "type": "exit-lane" + }, + { + "order": 6, + "status": "open", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.724769801999969, + 41.593457451000063 + ], + [ + -93.725783878999948, + 41.593459089000078 + ], + [ + -93.72589773499999, + 41.593459271000029 + ], + [ + -93.727600448999965, + 41.593468041000051 + ], + [ + -93.728253463999977, + 41.593468762000043 + ], + [ + -93.72899278899996, + 41.593459177000057 + ], + [ + -93.729737457999988, + 41.593435398000054 + ], + [ + -93.730149926999957, + 41.593410350000056 + ] + ] + } + }, + { + "id": "65773-3", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; third event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.5, + "ending_milepost": 2.0, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T14:00:00Z", + "end_date": "2010-01-05T23:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": true, + "method": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, + "reduced_speed_limit_kph": 88, + "restrictions": [], + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "shoulder" + }, + { + "order": 2, + "status": "closed", + "type": "general" + }, + { + "order": 3, + "status": "open", + "type": "general" + }, + { + "order": 4, + "status": "open", + "type": "general" + }, + { + "order": 5, + "status": "open", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.730150629999969, + 41.593410307000056 + ], + [ + -93.730393025999945, + 41.593395588000078 + ], + [ + -93.731358798999963, + 41.593326786000034 + ], + [ + -93.731760730999952, + 41.59329153300007 + ], + [ + -93.732583278999982, + 41.59323325400004 + ], + [ + -93.732583278999982, + 41.59323325400004 + ], + [ + -93.732761573999937, + 41.593220621000057 + ], + [ + -93.733481823999966, + 41.593160405000049 + ], + [ + -93.734099563999962, + 41.59310849700006 + ], + [ + -93.735278425999979, + 41.59301896900007 + ], + [ + -93.735701953999978, + 41.592987710000045 + ], + [ + -93.736446499999943, + 41.592931475000057 + ], + [ + -93.737679269999944, + 41.592827630000045 + ], + [ + -93.738580275999936, + 41.592760926000039 + ], + [ + -93.739154871999972, + 41.592719210000041 + ], + [ + -93.739613443999986, + 41.592679760000067 + ], + [ + -93.739774495999939, + 41.592668639000067 + ], + [ + -93.739774495999939, + 41.592668639000067 + ], + [ + -93.740036978999967, + 41.592650510000055 + ], + [ + -93.740347204999978, + 41.592627574000062 + ], + [ + -93.74078960199995, + 41.592592205000074 + ], + [ + -93.741952240999979, + 41.592498589000058 + ], + [ + -93.742189315999951, + 41.592481500000076 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/create-feed/examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/scenario1_simple_multipoint_example.geojson new file mode 100644 index 00000000..1e8969db --- /dev/null +++ b/create-feed/examples/scenario1_simple_multipoint_example.geojson @@ -0,0 +1,427 @@ +{ + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + }, + { + "data_source_id": "2", + "organization_name": "TestDOT", + "contact_name": "Samuel Sonny Sourcefeed", + "contact_email": "samuel.sourcefeed@testdot.gov", + "update_frequency": 60, + "update_date": "2020-06-18T14:39:01Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "71234", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "I-80", + "I-35" + ], + "direction": "northbound", + "description": "Single direction work zone without lane-level information.", + "creation_date": "2009-12-31T18:01:01Z", + "update_date": "2009-12-31T18:01:01Z" + }, + "beginning_milepost": 125.2, + "ending_milepost": 126.3, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T01:00:00Z", + "end_date": "2010-01-02T01:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "reduced_speed_limit_kph": 88 + }, + "geometry": { + "type": "MultiPoint", + "coordinates": [ + [ + -93.776684050999961, + 41.617961698000045 + ], + [ + -93.776688974999956, + 41.622297226000057 + ] + ] + } + }, + { + "id": "WDM-58493-NB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "128th Street" + ], + "direction": "northbound", + "description": "Single direction work zone with detailed lane-level information. Also includes additional details in vehicle impact", + "creation_date": "2009-12-13T13:35:26Z", + "update_date": "2009-12-31T15:11:16Z" + }, + "beginning_cross_street": "US 6, Hickman Road", + "ending_cross_street": "Douglas Ave", + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T06:00:00Z", + "end_date": "2010-05-01T05:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed-merge-left", + "lanes": [ + { + "order": 1, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-width", + "value": 10, + "unit": "feet" + } + ] + }, + { + "order": 2, + "status": "closed", + "type": "general" + } + ] + }, + "geometry": { + "type": "MultiPoint", + "coordinates": [ + [ + -93.791522243999964, + 41.614948252000033 + ], + [ + -93.79347973299997, + 41.628577397000072 + ] + ] + } + }, + { + "id": "65773-1", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-2" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; first event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 3.1, + "ending_milepost": 2.9, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T14:00:00Z", + "end_date": "2010-01-05T23:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": false, + "definition": [ + "humans-in-right-of-way" + ] + }, + "reduced_speed_limit_kph": 88, + "restrictions": [], + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "shoulder" + }, + { + "order": 2, + "status": "closed", + "type": "general" + }, + { + "order": 3, + "status": "open", + "type": "general" + }, + { + "order": 4, + "status": "open", + "type": "general" + }, + { + "order": 5, + "status": "open", + "type": "entrance-lane" + }, + { + "order": 6, + "status": "open", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "MultiPoint", + "coordinates": [ + [ + -93.720409507999989, + 41.593422456000042 + ], + [ + -93.724769801999969, + 41.593457451000063 + ] + ] + } + }, + { + "id": "65773-2", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ], + "next": [ + "65773-3" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; second event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.9, + "ending_milepost": 2.5, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T14:00:00Z", + "end_date": "2010-01-05T23:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": true, + "method": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, + "reduced_speed_limit_kph": 88, + "restrictions": [], + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "shoulder" + }, + { + "order": 2, + "status": "closed", + "type": "general" + }, + { + "order": 3, + "status": "open", + "type": "general" + }, + { + "order": 4, + "status": "open", + "type": "general" + }, + { + "order": 5, + "status": "open", + "type": "exit-lane" + }, + { + "order": 6, + "status": "open", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "MultiPoint", + "coordinates": [ + [ + -93.724769801999969, + 41.593457451000063 + ], + [ + -93.730149926999957, + 41.593410350000056 + ] + ] + } + }, + { + "id": "65773-3", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "2", + "event_type": "work-zone", + "relationship": { + "parents": [ + "65773" + ], + "first": [ + "65773-1" + ] + }, + "road_names": [ + "I-235" + ], + "direction": "westbound", + "description": "Single-direction work zone represented by three sequential road events; third event.", + "creation_date": "2009-12-31T11:56:26Z", + "update_date": "2009-12-31T11:56:26Z" + }, + "beginning_milepost": 2.5, + "ending_milepost": 2.0, + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T14:00:00Z", + "end_date": "2010-01-05T23:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": true, + "method": "check-in-app", + "worker_presence_last_confirmed_date": "2010-01-04T15:00:00Z", + "confidence": "high", + "definition": [ + "humans-in-right-of-way" + ] + }, + "reduced_speed_limit_kph": 88, + "restrictions": [], + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "shoulder" + }, + { + "order": 2, + "status": "closed", + "type": "general" + }, + { + "order": 3, + "status": "open", + "type": "general" + }, + { + "order": 4, + "status": "open", + "type": "general" + }, + { + "order": 5, + "status": "open", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "MultiPoint", + "coordinates": [ + [ + -93.730150629999969, + 41.593410307000056 + ], + [ + -93.742189315999951, + 41.592481500000076 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/create-feed/examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/scenario2_laneshift_linestring_example.geojson new file mode 100644 index 00000000..992cb446 --- /dev/null +++ b/create-feed/examples/scenario2_laneshift_linestring_example.geojson @@ -0,0 +1,166 @@ +{ + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "7733", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "road_names": [ + "I-80", + "I-35" + ], + "direction": "westbound", + "description": "Single-direction work zone with lane shift", + "creation_date": "2010-12-30T22:42:53Z", + "update_date": "2010-01-01T05:57:36Z" + }, + "beginning_milepost": 133.967, + "ending_milepost": 133.112, + "beginning_accuracy": "verified", + "ending_accuracy": "verified", + "start_date": "2010-01-01T05:57:36Z", + "end_date": "2010-01-05T23:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "all-lanes-open-shift-right", + "worker_presence": { + "are_workers_present": true, + "method": "wearables-present", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] + }, + "reduced_speed_limit_kph": 88, + "restrictions": [], + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "shoulder" + }, + { + "order": 2, + "status": "shift-right", + "type": "general" + }, + { + "order": 3, + "status": "shift-right", + "type": "general" + }, + { + "order": 4, + "status": "shift-right", + "type": "general" + }, + { + "order": 5, + "status": "closed", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.652714940999942, + 41.650200836000067 + ], + [ + -93.654565142999957, + 41.650281119000056 + ], + [ + -93.655964627999936, + 41.650350708000076 + ], + [ + -93.65929743199996, + 41.650497674000064 + ], + [ + -93.66247390999996, + 41.650639043000069 + ], + [ + -93.665256117999945, + 41.650763126000072 + ], + [ + -93.665890640999976, + 41.650791415000072 + ], + [ + -93.667831858999989, + 41.650878240000054 + ], + [ + -93.669295947999956, + 41.650943700000028 + ], + [ + -93.672369497999966, + 41.651076369000066 + ], + [ + -93.675896873999989, + 41.651236853000057 + ], + [ + -93.679374683999981, + 41.651391586000045 + ], + [ + -93.680869566999945, + 41.651461030000064 + ], + [ + -93.681220380999946, + 41.65147732500003 + ], + [ + -93.682955475999961, + 41.651551769000037 + ], + [ + -93.683089, + 41.651577294000049 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/create-feed/examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/scenario3_shoulder_bidrectional_linestring_example.geojson new file mode 100644 index 00000000..a2ce54cd --- /dev/null +++ b/create-feed/examples/scenario3_shoulder_bidrectional_linestring_example.geojson @@ -0,0 +1,203 @@ +{ + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "121388-EB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "parents": [ + "121388" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "eastbound", + "description": "Bidirectional work zone with shoulder closure; eastbound direction with shoulder closure.", + "creation_date": "2010-01-01T09:30:26Z", + "update_date": "2010-01-01T09:30:26Z" + }, + "beginning_milepost": 22.1, + "ending_milepost": 24.6, + "beginning_cross_street": "570th Avenue", + "ending_cross_street": "610th Avenue", + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T10:00:00Z", + "end_date": "2010-01-01T16:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "all-lanes-open", + "restrictions": [], + "types_of_work": [ + { + "type_name": "maintenance", + "is_architectural_change": false + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "general" + }, + { + "order": 2, + "status": "open", + "type": "general" + }, + { + "order": 3, + "status": "closed", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.56064319610596, + 41.87764559047116 + ], + [ + -93.5451292991638, + 41.87767754402901 + ], + [ + -93.53145003318785, + 41.87766955564103 + ], + [ + -93.5067629814148, + 41.877565706506665 + ], + [ + -93.48284840583801, + 41.87750179926317 + ] + ] + } + }, + { + "id": "121388-WB", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "parents": [ + "121388" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "westbound", + "description": "Bidirectional work zone with shoulder closure; westbound direction without shoulder closure.", + "creation_date": "2010-01-01T09:30:26Z", + "update_date": "2010-01-01T09:30:26Z" + }, + "beginning_milepost": 24.6, + "ending_milepost": 22.1, + "beginning_cross_street": "610th Avenue", + "ending_cross_street": "570th Avenue", + "beginning_accuracy": "estimated", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T10:00:00Z", + "end_date": "2010-01-01T16:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "estimated", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "all-lanes-open", + "restrictions": [ + { + "type": "no-parking" + } + ], + "lanes": [ + { + "order": 1, + "status": "closed", + "type": "general" + }, + { + "order": 2, + "status": "open", + "type": "general" + }, + { + "order": 3, + "status": "open", + "type": "shoulder", + "restrictions": [ + { + "type": "no-parking" + } + ] + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.48284304141998, + 41.877607645600484 + ], + [ + -93.49073946475983, + 41.87764559047116 + ], + [ + -93.50573301315308, + 41.877697514994544 + ], + [ + -93.51188063621521, + 41.877749439475735 + ], + [ + -93.53036642074585, + 41.87782133484157 + ], + [ + -93.54414224624632, + 41.877869265040545 + ], + [ + -93.56063783168791, + 41.87786127667653 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/create-feed/examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/scenario4_detour_linestring_example.geojson new file mode 100644 index 00000000..2ae7182f --- /dev/null +++ b/create-feed/examples/scenario4_detour_linestring_example.geojson @@ -0,0 +1,827 @@ +{ + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "67890", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "children": [ + "67890-detour1", + "67890-detour2", + "67890-detour3" + ] + }, + "road_names": [ + "I-35" + ], + "direction": "northbound", + "description": "Simple, single direction work zone with detour.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_milepost": 98.42, + "ending_milepost": 101.50, + "beginning_accuracy": "verified", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": true, + "method": "scheduled", + "confidence": "medium", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] + }, + "reduced_speed_limit_kph": 88, + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "open", + "type": "shoulder" + }, + { + "order": 2, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-width", + "value": 11, + "unit": "feet" + } + ] + }, + { + "order": 3, + "status": "closed", + "type": "general" + }, + { + "order": 4, + "status": "closed", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.570535026999949, + 41.815141143000062 + ], + [ + -93.570558665999954, + 41.815778842000043 + ], + [ + -93.570582206999973, + 41.816327889000036 + ], + [ + -93.570613866999963, + 41.817305885000053 + ], + [ + -93.570653239999956, + 41.818343932000062 + ], + [ + -93.570692683999937, + 41.819444889000067 + ], + [ + -93.57072468399997, + 41.820444622000025 + ], + [ + -93.570725033999963, + 41.820762049000052 + ], + [ + -93.570737569999949, + 41.821725757000024 + ], + [ + -93.570735194999941, + 41.823038359000066 + ], + [ + -93.570744205999972, + 41.824273739000034 + ], + [ + -93.570741062999957, + 41.824888576000035 + ], + [ + -93.570745857999952, + 41.825769359000049 + ], + [ + -93.570750405999945, + 41.82642422400005 + ], + [ + -93.570751056999939, + 41.827013323000074 + ], + [ + -93.570767342999943, + 41.82791125600005 + ], + [ + -93.570783135999989, + 41.828363077000063 + ], + [ + -93.57081113199996, + 41.829478340000037 + ], + [ + -93.570846661999951, + 41.830487788000028 + ], + [ + -93.570890330999987, + 41.83194334500007 + ], + [ + -93.570902443999955, + 41.832520995000039 + ], + [ + -93.570930157999953, + 41.833378885000059 + ], + [ + -93.570954688999961, + 41.834811573000025 + ], + [ + -93.570948738999959, + 41.836344370000063 + ], + [ + -93.570942684999977, + 41.837782799000081 + ], + [ + -93.570936722999988, + 41.839304156000026 + ], + [ + -93.570923044999972, + 41.840765465000061 + ], + [ + -93.570924651999974, + 41.84221532600003 + ], + [ + -93.570926279999981, + 41.843685202000074 + ], + [ + -93.570931724, + 41.845146499000066 + ], + [ + -93.570929340999953, + 41.846447657000056 + ], + [ + -93.570938627999965, + 41.84792610900007 + ], + [ + -93.570932442999947, + 41.849247287000026 + ], + [ + -93.570939776999978, + 41.849617513000055 + ], + [ + -93.570957815999975, + 41.850528174000033 + ], + [ + -93.570991150999987, + 41.852249359000041 + ], + [ + -93.571024497999986, + 41.85397641600008 + ], + [ + -93.571053711, + 41.855521371000066 + ], + [ + -93.571083075999979, + 41.85719849700007 + ], + [ + -93.57110858599998, + 41.858940244000053 + ], + [ + -93.571141838999949, + 41.860579185000063 + ] + ] + } + }, + { + "id": "67890-detour1", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour2" + ] + }, + "road_names": [ + "F22" + ], + "direction": "westbound", + "description": "Detour for road event 67890, first segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "I-35", + "ending_cross_street": "US 69", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.600376007999955, + 41.791257966000046 + ], + [ + -93.600375128999985, + 41.791257965000057 + ], + [ + -93.600373887999979, + 41.79125798900003 + ], + [ + -93.598991312999942, + 41.791285770000059 + ], + [ + -93.597408247999965, + 41.791298693000044 + ], + [ + -93.587018347999958, + 41.791370250000057 + ], + [ + -93.581030593999969, + 41.791384089000076 + ], + [ + -93.575477690999946, + 41.791372395000053 + ], + [ + -93.573306168999977, + 41.791361989000052 + ], + [ + -93.572569235999936, + 41.791351637000048 + ], + [ + -93.572478358999945, + 41.79135169500006 + ] + ] + } + }, + { + "id": "67890-detour2", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour3" + ] + }, + "road_names": [ + "US 69" + ], + "direction": "northbound", + "description": "Detour for road event 67890, second segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "NE 126th Avenue", + "ending_cross_street": "IA 210", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.600401730999977, + 41.877744832000076 + ], + [ + -93.600383302999944, + 41.876221974000032 + ], + [ + -93.600399342999935, + 41.874445421000075 + ], + [ + -93.600382543999956, + 41.872739253000077 + ], + [ + -93.600389303999975, + 41.871047136000072 + ], + [ + -93.600386637999975, + 41.869347993000076 + ], + [ + -93.600379122999982, + 41.867557387000033 + ], + [ + -93.600390145999938, + 41.865583833000073 + ], + [ + -93.60037319199995, + 41.863775643000054 + ], + [ + -93.600372301999982, + 41.863207043000045 + ], + [ + -93.600381568999978, + 41.862919375000047 + ], + [ + -93.600376814999947, + 41.861738109000044 + ], + [ + -93.60037443899995, + 41.860563973000069 + ], + [ + -93.60037443899995, + 41.859363694000081 + ], + [ + -93.60036493299998, + 41.858142023000028 + ], + [ + -93.600360178999949, + 41.85695124800003 + ], + [ + -93.600357800999973, + 41.855774736000058 + ], + [ + -93.600357801999962, + 41.854583964000028 + ], + [ + -93.600353046999942, + 41.853378931000066 + ], + [ + -93.600348294999947, + 41.852188157000057 + ], + [ + -93.600343540999972, + 41.85096173200003 + ], + [ + -93.600341164999975, + 41.849768581000035 + ], + [ + -93.600338180999984, + 41.84926536100005 + ], + [ + -93.600334034999946, + 41.848565926000049 + ], + [ + -93.600329278999936, + 41.847403672000041 + ], + [ + -93.600324526999941, + 41.846174873000052 + ], + [ + -93.600319772999967, + 41.844976968000026 + ], + [ + -93.600315018999936, + 41.843786195000064 + ], + [ + -93.600305511999977, + 41.842590668000071 + ], + [ + -93.600296004999961, + 41.841487836000056 + ], + [ + -93.600296003999972, + 41.840275672000075 + ], + [ + -93.600291251999977, + 41.839065885000025 + ], + [ + -93.600291250999987, + 41.837927402000048 + ], + [ + -93.600284120999959, + 41.836760396000045 + ], + [ + -93.600279367999974, + 41.83553872400006 + ], + [ + -93.600273437999988, + 41.834756276000064 + ], + [ + -93.600272235999967, + 41.834597515000041 + ], + [ + -93.600274613999943, + 41.833775145000061 + ], + [ + -93.600272236999956, + 41.832546343000047 + ], + [ + -93.600269860999958, + 41.831357947000072 + ], + [ + -93.600265106999984, + 41.830238478000069 + ], + [ + -93.600269860999958, + 41.829584861000058 + ], + [ + -93.600262728999951, + 41.829031068000063 + ], + [ + -93.60026985899998, + 41.828714954000077 + ], + [ + -93.600265106999984, + 41.827833163000037 + ], + [ + -93.600265732999958, + 41.82751014300004 + ], + [ + -93.600267483999971, + 41.82661149300003 + ], + [ + -93.600267481999936, + 41.825458747000027 + ], + [ + -93.60026985899998, + 41.824289366000073 + ], + [ + -93.600262728999951, + 41.823096216000067 + ], + [ + -93.60026272999994, + 41.822017153000047 + ], + [ + -93.600265008999941, + 41.821111594000058 + ], + [ + -93.600263135999967, + 41.820261561000052 + ], + [ + -93.600264984999967, + 41.819911794000063 + ], + [ + -93.600262608999969, + 41.818602179000038 + ], + [ + -93.600255478999941, + 41.817525493000062 + ], + [ + -93.600255478999941, + 41.816325213000027 + ], + [ + -93.600248348999969, + 41.815205744000025 + ], + [ + -93.600243592999959, + 41.814019724000048 + ], + [ + -93.600245971999982, + 41.812914517000024 + ], + [ + -93.600253101999954, + 41.811806931000035 + ], + [ + -93.600269738999941, + 41.81082056200006 + ], + [ + -93.600276870999949, + 41.80970822200004 + ], + [ + -93.600288753999962, + 41.808624405000046 + ], + [ + -93.600295884, + 41.807576241000049 + ], + [ + -93.600310144, + 41.806435380000039 + ], + [ + -93.60031408499998, + 41.805741814000044 + ], + [ + -93.600314898999954, + 41.805598749000069 + ], + [ + -93.600324404999981, + 41.804529191000029 + ], + [ + -93.600319769999942, + 41.803418761000046 + ], + [ + -93.60031965099995, + 41.803390708000052 + ], + [ + -93.600322028999983, + 41.802354426000079 + ], + [ + -93.600322026999947, + 41.801782615000036 + ], + [ + -93.600322026999947, + 41.80161524500005 + ], + [ + -93.600331535999942, + 41.800495775000059 + ], + [ + -93.600326782999957, + 41.799371551000036 + ], + [ + -93.600331535999942, + 41.798416082000074 + ], + [ + -93.600331535999942, + 41.797327511000049 + ], + [ + -93.60033866699996, + 41.796314997000025 + ], + [ + -93.600345797999978, + 41.795214543000043 + ], + [ + -93.600350549999973, + 41.794040406000079 + ], + [ + -93.600362434999965, + 41.792899545000068 + ], + [ + -93.600360056999989, + 41.791818106000051 + ], + [ + -93.600373887999979, + 41.79125798900003 + ], + [ + -93.600373891999936, + 41.791257820000055 + ] + ] + } + }, + { + "id": "67890-detour3", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "6780" + ], + "first": [ + "67890-detour1" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "eastbound", + "description": "Detour for road event 67890, third/final segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "US 69", + "ending_cross_street": "I-35", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.573353147999967, + 41.877796484000044 + ], + [ + -93.573356421999961, + 41.87779647800005 + ], + [ + -93.574056398999971, + 41.877795233000029 + ], + [ + -93.577496035999957, + 41.877791515000069 + ], + [ + -93.578346253999939, + 41.877790018000042 + ], + [ + -93.579435310999941, + 41.877788094000039 + ], + [ + -93.580892132999963, + 41.877785500000073 + ], + [ + -93.581418045999953, + 41.877784560000066 + ], + [ + -93.581835475, + 41.877783302000068 + ], + [ + -93.586943989999952, + 41.877767791000053 + ], + [ + -93.591580114999942, + 41.877755708000052 + ], + [ + -93.596289923999962, + 41.877747609000039 + ], + [ + -93.60040158399994, + 41.87774674700006 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/create-feed/examples/scenario5_recurring_linestring_example.geojson b/create-feed/examples/scenario5_recurring_linestring_example.geojson new file mode 100644 index 00000000..0a2b7538 --- /dev/null +++ b/create-feed/examples/scenario5_recurring_linestring_example.geojson @@ -0,0 +1,827 @@ +{ + "road_event_feed_info": { + "update_date": "2020-06-18T15:00:00Z", + "publisher": "TestDOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 60, + "version": "4.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "Test City 1", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 300, + "update_date": "2020-06-18T14:37:31Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "67890", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "work-zone", + "relationship": { + "children": [ + "67890-detour1", + "67890-detour2", + "67890-detour3" + ] + }, + "road_names": [ + "I-35" + ], + "direction": "northbound", + "description": "Simple, single direction work zone with detour.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_milepost": 98.42, + "ending_milepost": 101.50, + "beginning_accuracy": "verified", + "ending_accuracy": "estimated", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "location_method": "channel-device-method", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active", + "vehicle_impact": "some-lanes-closed", + "worker_presence": { + "are_workers_present": true, + "method": "scheduled", + "confidence": "medium", + "definition": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving" + ] + }, + "reduced_speed_limit_kph": 55, + "types_of_work": [ + { + "type_name": "surface-work", + "is_architectural_change": true + } + ], + "lanes": [ + { + "order": 1, + "status": "open", + "type": "shoulder" + }, + { + "order": 2, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-width", + "value": 11, + "unit": "feet" + } + ] + }, + { + "order": 3, + "status": "closed", + "type": "general" + }, + { + "order": 4, + "status": "closed", + "type": "shoulder" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.570535026999949, + 41.815141143000062 + ], + [ + -93.570558665999954, + 41.815778842000043 + ], + [ + -93.570582206999973, + 41.816327889000036 + ], + [ + -93.570613866999963, + 41.817305885000053 + ], + [ + -93.570653239999956, + 41.818343932000062 + ], + [ + -93.570692683999937, + 41.819444889000067 + ], + [ + -93.57072468399997, + 41.820444622000025 + ], + [ + -93.570725033999963, + 41.820762049000052 + ], + [ + -93.570737569999949, + 41.821725757000024 + ], + [ + -93.570735194999941, + 41.823038359000066 + ], + [ + -93.570744205999972, + 41.824273739000034 + ], + [ + -93.570741062999957, + 41.824888576000035 + ], + [ + -93.570745857999952, + 41.825769359000049 + ], + [ + -93.570750405999945, + 41.82642422400005 + ], + [ + -93.570751056999939, + 41.827013323000074 + ], + [ + -93.570767342999943, + 41.82791125600005 + ], + [ + -93.570783135999989, + 41.828363077000063 + ], + [ + -93.57081113199996, + 41.829478340000037 + ], + [ + -93.570846661999951, + 41.830487788000028 + ], + [ + -93.570890330999987, + 41.83194334500007 + ], + [ + -93.570902443999955, + 41.832520995000039 + ], + [ + -93.570930157999953, + 41.833378885000059 + ], + [ + -93.570954688999961, + 41.834811573000025 + ], + [ + -93.570948738999959, + 41.836344370000063 + ], + [ + -93.570942684999977, + 41.837782799000081 + ], + [ + -93.570936722999988, + 41.839304156000026 + ], + [ + -93.570923044999972, + 41.840765465000061 + ], + [ + -93.570924651999974, + 41.84221532600003 + ], + [ + -93.570926279999981, + 41.843685202000074 + ], + [ + -93.570931724, + 41.845146499000066 + ], + [ + -93.570929340999953, + 41.846447657000056 + ], + [ + -93.570938627999965, + 41.84792610900007 + ], + [ + -93.570932442999947, + 41.849247287000026 + ], + [ + -93.570939776999978, + 41.849617513000055 + ], + [ + -93.570957815999975, + 41.850528174000033 + ], + [ + -93.570991150999987, + 41.852249359000041 + ], + [ + -93.571024497999986, + 41.85397641600008 + ], + [ + -93.571053711, + 41.855521371000066 + ], + [ + -93.571083075999979, + 41.85719849700007 + ], + [ + -93.57110858599998, + 41.858940244000053 + ], + [ + -93.571141838999949, + 41.860579185000063 + ] + ] + } + }, + { + "id": "67890-detour1", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour2" + ] + }, + "road_names": [ + "F22" + ], + "direction": "westbound", + "description": "Detour for road event 67890, first segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "I-35", + "ending_cross_street": "US 69", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.600376007999955, + 41.791257966000046 + ], + [ + -93.600375128999985, + 41.791257965000057 + ], + [ + -93.600373887999979, + 41.79125798900003 + ], + [ + -93.598991312999942, + 41.791285770000059 + ], + [ + -93.597408247999965, + 41.791298693000044 + ], + [ + -93.587018347999958, + 41.791370250000057 + ], + [ + -93.581030593999969, + 41.791384089000076 + ], + [ + -93.575477690999946, + 41.791372395000053 + ], + [ + -93.573306168999977, + 41.791361989000052 + ], + [ + -93.572569235999936, + 41.791351637000048 + ], + [ + -93.572478358999945, + 41.79135169500006 + ] + ] + } + }, + { + "id": "67890-detour2", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "67890" + ], + "first": [ + "67890-detour1" + ], + "next": [ + "67890-detour3" + ] + }, + "road_names": [ + "US 69" + ], + "direction": "northbound", + "description": "Detour for road event 67890, second segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "NE 126th Avenue", + "ending_cross_street": "IA 210", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.600401730999977, + 41.877744832000076 + ], + [ + -93.600383302999944, + 41.876221974000032 + ], + [ + -93.600399342999935, + 41.874445421000075 + ], + [ + -93.600382543999956, + 41.872739253000077 + ], + [ + -93.600389303999975, + 41.871047136000072 + ], + [ + -93.600386637999975, + 41.869347993000076 + ], + [ + -93.600379122999982, + 41.867557387000033 + ], + [ + -93.600390145999938, + 41.865583833000073 + ], + [ + -93.60037319199995, + 41.863775643000054 + ], + [ + -93.600372301999982, + 41.863207043000045 + ], + [ + -93.600381568999978, + 41.862919375000047 + ], + [ + -93.600376814999947, + 41.861738109000044 + ], + [ + -93.60037443899995, + 41.860563973000069 + ], + [ + -93.60037443899995, + 41.859363694000081 + ], + [ + -93.60036493299998, + 41.858142023000028 + ], + [ + -93.600360178999949, + 41.85695124800003 + ], + [ + -93.600357800999973, + 41.855774736000058 + ], + [ + -93.600357801999962, + 41.854583964000028 + ], + [ + -93.600353046999942, + 41.853378931000066 + ], + [ + -93.600348294999947, + 41.852188157000057 + ], + [ + -93.600343540999972, + 41.85096173200003 + ], + [ + -93.600341164999975, + 41.849768581000035 + ], + [ + -93.600338180999984, + 41.84926536100005 + ], + [ + -93.600334034999946, + 41.848565926000049 + ], + [ + -93.600329278999936, + 41.847403672000041 + ], + [ + -93.600324526999941, + 41.846174873000052 + ], + [ + -93.600319772999967, + 41.844976968000026 + ], + [ + -93.600315018999936, + 41.843786195000064 + ], + [ + -93.600305511999977, + 41.842590668000071 + ], + [ + -93.600296004999961, + 41.841487836000056 + ], + [ + -93.600296003999972, + 41.840275672000075 + ], + [ + -93.600291251999977, + 41.839065885000025 + ], + [ + -93.600291250999987, + 41.837927402000048 + ], + [ + -93.600284120999959, + 41.836760396000045 + ], + [ + -93.600279367999974, + 41.83553872400006 + ], + [ + -93.600273437999988, + 41.834756276000064 + ], + [ + -93.600272235999967, + 41.834597515000041 + ], + [ + -93.600274613999943, + 41.833775145000061 + ], + [ + -93.600272236999956, + 41.832546343000047 + ], + [ + -93.600269860999958, + 41.831357947000072 + ], + [ + -93.600265106999984, + 41.830238478000069 + ], + [ + -93.600269860999958, + 41.829584861000058 + ], + [ + -93.600262728999951, + 41.829031068000063 + ], + [ + -93.60026985899998, + 41.828714954000077 + ], + [ + -93.600265106999984, + 41.827833163000037 + ], + [ + -93.600265732999958, + 41.82751014300004 + ], + [ + -93.600267483999971, + 41.82661149300003 + ], + [ + -93.600267481999936, + 41.825458747000027 + ], + [ + -93.60026985899998, + 41.824289366000073 + ], + [ + -93.600262728999951, + 41.823096216000067 + ], + [ + -93.60026272999994, + 41.822017153000047 + ], + [ + -93.600265008999941, + 41.821111594000058 + ], + [ + -93.600263135999967, + 41.820261561000052 + ], + [ + -93.600264984999967, + 41.819911794000063 + ], + [ + -93.600262608999969, + 41.818602179000038 + ], + [ + -93.600255478999941, + 41.817525493000062 + ], + [ + -93.600255478999941, + 41.816325213000027 + ], + [ + -93.600248348999969, + 41.815205744000025 + ], + [ + -93.600243592999959, + 41.814019724000048 + ], + [ + -93.600245971999982, + 41.812914517000024 + ], + [ + -93.600253101999954, + 41.811806931000035 + ], + [ + -93.600269738999941, + 41.81082056200006 + ], + [ + -93.600276870999949, + 41.80970822200004 + ], + [ + -93.600288753999962, + 41.808624405000046 + ], + [ + -93.600295884, + 41.807576241000049 + ], + [ + -93.600310144, + 41.806435380000039 + ], + [ + -93.60031408499998, + 41.805741814000044 + ], + [ + -93.600314898999954, + 41.805598749000069 + ], + [ + -93.600324404999981, + 41.804529191000029 + ], + [ + -93.600319769999942, + 41.803418761000046 + ], + [ + -93.60031965099995, + 41.803390708000052 + ], + [ + -93.600322028999983, + 41.802354426000079 + ], + [ + -93.600322026999947, + 41.801782615000036 + ], + [ + -93.600322026999947, + 41.80161524500005 + ], + [ + -93.600331535999942, + 41.800495775000059 + ], + [ + -93.600326782999957, + 41.799371551000036 + ], + [ + -93.600331535999942, + 41.798416082000074 + ], + [ + -93.600331535999942, + 41.797327511000049 + ], + [ + -93.60033866699996, + 41.796314997000025 + ], + [ + -93.600345797999978, + 41.795214543000043 + ], + [ + -93.600350549999973, + 41.794040406000079 + ], + [ + -93.600362434999965, + 41.792899545000068 + ], + [ + -93.600360056999989, + 41.791818106000051 + ], + [ + -93.600373887999979, + 41.79125798900003 + ], + [ + -93.600373891999936, + 41.791257820000055 + ] + ] + } + }, + { + "id": "67890-detour3", + "type": "Feature", + "properties": { + "core_details": { + "data_source_id": "1", + "event_type": "detour", + "relationship": { + "parents": [ + "6780" + ], + "first": [ + "67890-detour1" + ] + }, + "road_names": [ + "IA 210" + ], + "direction": "eastbound", + "description": "Detour for road event 67890, third/final segment.", + "creation_date": "2009-12-15T14:01:01Z", + "update_date": "2010-01-01T01:03:01Z" + }, + "beginning_cross_street": "US 69", + "ending_cross_street": "I-35", + "start_date": "2010-01-01T01:03:01Z", + "end_date": "2010-06-30T01:00:00Z", + "start_date_accuracy": "verified", + "end_date_accuracy": "estimated", + "event_status": "active" + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -93.573353147999967, + 41.877796484000044 + ], + [ + -93.573356421999961, + 41.87779647800005 + ], + [ + -93.574056398999971, + 41.877795233000029 + ], + [ + -93.577496035999957, + 41.877791515000069 + ], + [ + -93.578346253999939, + 41.877790018000042 + ], + [ + -93.579435310999941, + 41.877788094000039 + ], + [ + -93.580892132999963, + 41.877785500000073 + ], + [ + -93.581418045999953, + 41.877784560000066 + ], + [ + -93.581835475, + 41.877783302000068 + ], + [ + -93.586943989999952, + 41.877767791000053 + ], + [ + -93.591580114999942, + 41.877755708000052 + ], + [ + -93.596289923999962, + 41.877747609000039 + ], + [ + -93.60040158399994, + 41.87774674700006 + ] + ] + } + } + ] +} \ No newline at end of file From b8ef8cda159bdc8c16c9d4236e49d5aadcfc8c80 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 15:37:30 -0500 Subject: [PATCH 288/388] Fix schema by using anyOf instead of oneOf --- create-feed/schemas/wzdx_v4.0_feed.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 72d37094..bb39e445 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -156,7 +156,7 @@ "enum": ["Feature"] }, "properties": { - "oneOf": [ + "anyOf": [ { "$ref": "#/definitions/WorkZoneRoadEvent" }, From 95de00f0a38581154737cb1e528175e0f4e9ecf5 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 17:31:23 -0500 Subject: [PATCH 289/388] Move WZDxFeed example files to subdirectory --- README.md | 14 +++++++------- create-feed/README.md | 12 ++++++------ ...s_only_bidirectional_linestring_example.geojson | 0 .../scenario1_simple_linestring_example.geojson | 0 .../scenario1_simple_multipoint_example.geojson | 0 .../scenario2_laneshift_linestring_example.geojson | 0 ...houlder_bidrectional_linestring_example.geojson | 0 .../scenario4_detour_linestring_example.geojson | 0 .../scenario5_recurring_linestring_example.geojson | 0 9 files changed, 13 insertions(+), 13 deletions(-) rename create-feed/examples/{ => WZDxFeed}/local_access_only_bidirectional_linestring_example.geojson (100%) rename create-feed/examples/{ => WZDxFeed}/scenario1_simple_linestring_example.geojson (100%) rename create-feed/examples/{ => WZDxFeed}/scenario1_simple_multipoint_example.geojson (100%) rename create-feed/examples/{ => WZDxFeed}/scenario2_laneshift_linestring_example.geojson (100%) rename create-feed/examples/{ => WZDxFeed}/scenario3_shoulder_bidrectional_linestring_example.geojson (100%) rename create-feed/examples/{ => WZDxFeed}/scenario4_detour_linestring_example.geojson (100%) rename create-feed/examples/{ => WZDxFeed}/scenario5_recurring_linestring_example.geojson (100%) diff --git a/README.md b/README.md index e55f3e0e..a40acbb4 100644 --- a/README.md +++ b/README.md @@ -18,13 +18,13 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c ### Contents - [**Creating a WZDx Feed**](/create-feed) - [**Example Feed GeoJSON Files**](/create-feed/examples) - - [Local Access Only (bidirectional)](/create-feed/examples/local_access_only_bidirectional_linestring_example.geojson) - - [Simple Work Zone (LineString)](/create-feed/examples/scenario1_simple_linestring_example.geojson) - - [Lane Shift](/create-feed/examples/scenario2_laneshift_linestring_example.geojson) - - [Shoulder Closure (bidirectional)](/create-feed/examples/scenario3_shoulder_bidrectional_linestring_example.geojson) - - [Detour](/create-feed/examples/scenario4_detour_linestring_example.geojson) - - [Recurring Work](/create-feed/examples/scenario5_recurring_linestring_example.geojson) - - [Simple Work Zone (MultiPoint)](/create-feed/examples/scenario1_simple_multipoint_example.geojson) + - [Local Access Only (bidirectional)](/create-feed/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson) + - [Simple Work Zone (LineString)](/create-feed/examples/WZDxFeed/scenario1_simple_linestring_example.geojson) + - [Lane Shift](/create-feed/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson) + - [Shoulder Closure (bidirectional)](/create-feed/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson) + - [Detour](/create-feed/examples/WZDxFeed/scenario4_detour_linestring_example.geojson) + - [Recurring Work](/create-feed/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson) + - [Simple Work Zone (MultiPoint)](/create-feed/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson) - [**JSON Schemas**](/create-feed/schemas) - [WZDx v2.0 Feed](/create-feed/schemas/wzdx_v2.0_feed.json) - [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) diff --git a/create-feed/README.md b/create-feed/README.md index 75fba04c..c28813ff 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -45,26 +45,26 @@ The following WZDx feed examples represent a variety of common scenarios when cr Below is a summary of each of the example WZDx feeds and detailed differences for each of the road events: ### Scenario 1 - Simple Work Zone -Scenario 1 ([Linestring](/create-feed/examples/scenario1_simple_linestring_example.geojson) or [MultiPoint](/create-feed/examples/scenario1_simple_multipoint_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) with a single lane closed on a multi-lane facility. +Scenario 1 ([Linestring](/create-feed/examples/WZDxFeed/scenario1_simple_linestring_example.geojson) or [MultiPoint](/create-feed/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) with a single lane closed on a multi-lane facility. - First work zone is single direction, single event, with no lane-level information (ID: `71234`). - Second work zone is single direction, single event, with detailed lane information (ID: `WDM-58493-NB`). - Third work zone is single direction, three sequential events, with detailed lane information. This work zone demonstrates the use of the `relationship` property, both `first` and `next` to indiciate the order of the road events and `parents` to indicate all road events are related (they all have `parents` as `65773`). (IDs: `65773-1`, `65773-2`, `65773-3`). ### Scenario 2 - Lane Shift (simple scenario) -[Scenario 2](/create-feed/examples/scenario2_laneshift_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. +[Scenario 2](/create-feed/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. - Single work zone with lane shift in the detailed lane information showing use of verified location and start time. ("id": `7733`). ### Scenario 3 - Shoulder Closure (bidirectional work zone) -[Scenario 3](/create-feed/examples/scenario3_shoulder_bidirectional_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. +[Scenario 3](/create-feed/examples/WZDxFeed/scenario3_shoulder_bidirectional_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. - Single work zone represented by two road events (IDs: `121388-EB`, `121388-WB`), one in direction of shoulder closure and second in opposite direction. - Demonstrates the use of `restrictions` for the event as well as individual lanes - Demonstrates the use of `relationship` to show the road events in each direction are related to a common parent (`121388`) ### Scenario 4 - Road Closure with Detour on Arterial -[Scenario 4](/create-feed/examples/scenario4_detour_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. +[Scenario 4](/create-feed/examples/WZDxFeed/scenario4_detour_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. - Single work zone in one direction represented by a single road event (ID: `67890`), with a detour. - Showing use of `relationship` `parents` and `children` to connect the detour road events (IDs: `67890-detour1`, `67890-detour2`, `67890-detour3`) to the work zone. @@ -73,7 +73,7 @@ Scenario 1 ([Linestring](/create-feed/examples/scenario1_simple_linestring_examp - Shows the use of both the work zone and detour road event objects in the same feed. ### Scenario 5 - Recurring Work Zone -[Scenario 5](/create-feed/examples/scenario5_recurring_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. +[Scenario 5](/create-feed/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. - Simple work zone but with a recurring component. - Five road events: an `active` (day 1, ID: `PLK01012016-Day1`) event and four additional events (IDs: `PLK01012016-Day2`, `PLK01012016-Day3`, `PLK01012016-Day4`, `PLK01012016-Day5`) for later dates with a pending status. @@ -81,7 +81,7 @@ Scenario 1 ([Linestring](/create-feed/examples/scenario1_simple_linestring_examp - The `relationship` property is used to show all road events are related (they have the same parent of `PLK01012016`). ### Local Access Only (bidirectional work zone) -The [local access only example](/create-feed/examples/local_access_only_bidirectional_linestring_example.geojson) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. +The [local access only example](/create-feed/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. - Single work zone on a bidirectional roadwith with impact to both directions, represented by two road events (IDs: `WZ389-NB`, `WZ389-SB`), one for each direction. - Uses `local-access-only` [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). diff --git a/create-feed/examples/local_access_only_bidirectional_linestring_example.geojson b/create-feed/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson similarity index 100% rename from create-feed/examples/local_access_only_bidirectional_linestring_example.geojson rename to create-feed/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson diff --git a/create-feed/examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/WZDxFeed/scenario1_simple_linestring_example.geojson similarity index 100% rename from create-feed/examples/scenario1_simple_linestring_example.geojson rename to create-feed/examples/WZDxFeed/scenario1_simple_linestring_example.geojson diff --git a/create-feed/examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson similarity index 100% rename from create-feed/examples/scenario1_simple_multipoint_example.geojson rename to create-feed/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson diff --git a/create-feed/examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson similarity index 100% rename from create-feed/examples/scenario2_laneshift_linestring_example.geojson rename to create-feed/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson diff --git a/create-feed/examples/scenario3_shoulder_bidrectional_linestring_example.geojson b/create-feed/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson similarity index 100% rename from create-feed/examples/scenario3_shoulder_bidrectional_linestring_example.geojson rename to create-feed/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson diff --git a/create-feed/examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/WZDxFeed/scenario4_detour_linestring_example.geojson similarity index 100% rename from create-feed/examples/scenario4_detour_linestring_example.geojson rename to create-feed/examples/WZDxFeed/scenario4_detour_linestring_example.geojson diff --git a/create-feed/examples/scenario5_recurring_linestring_example.geojson b/create-feed/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson similarity index 100% rename from create-feed/examples/scenario5_recurring_linestring_example.geojson rename to create-feed/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson From e32eac842b69bd4f923585bd0c2a6fe7b3d53964 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 17:37:12 -0500 Subject: [PATCH 290/388] Rename schema file --- .../{swz_device_feed_v1.0.json => SwzDeviceFeed_v1.0.json} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename create-feed/schemas/{swz_device_feed_v1.0.json => SwzDeviceFeed_v1.0.json} (99%) diff --git a/create-feed/schemas/swz_device_feed_v1.0.json b/create-feed/schemas/SwzDeviceFeed_v1.0.json similarity index 99% rename from create-feed/schemas/swz_device_feed_v1.0.json rename to create-feed/schemas/SwzDeviceFeed_v1.0.json index 89314d8d..a6412ef7 100644 --- a/create-feed/schemas/swz_device_feed_v1.0.json +++ b/create-feed/schemas/SwzDeviceFeed_v1.0.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-device/create-feed/schemas/swz_device_feed_v1.0.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-device/create-feed/schemas/SwzDeviceFeed_v1.0.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx SwzDeviceFeed v1.0", "description": "The GeoJSON output of a WZDx smart work zone device data feed (v1.0)", From d7c18eb1c420aa6dbc5114c17201e93bf22818c8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 17:40:39 -0500 Subject: [PATCH 291/388] Remove merge artifact typo --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a40acbb4..0f700ed3 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,14 @@ # Work Zone Data Exchange (WZDx) Specification The Work Zone Data Exchange (WZDx) Specification aims to make harmonized work zone data provided by infrastructure owners and operators (IOOs) available for third party use, making travel on public roads safer and more efficient through ubiquitous access to data on work zone activity. -The goal of WZDx is to enable widespread access to up-to-date information about dynamic conditions occurring on roads such as construction events. Currently, many IOOs maintain data on work zone activity. However, a lack of common data standards and convening mechanisms makes it difficult and costly for third parties such as original equipment manufacturers (OEMs) and navigation applications to access and use these data across various jurisdictions. WZDx seeks to be a common language for describing road events, simplying the design process for producers and the processing logic for consumers, and making work zone data more accessible. +The goal of WZDx is to enable widespread access to up-to-date information about dynamic conditions occurring on roads such as construction events. Currently, many IOOs maintain data on work zone activity. However, a lack of common data standards and convening mechanisms makes it difficult and costly for third parties such as original equipment manufacturers (OEMs) and navigation applications to access and use these data across various jurisdictions. WZDx seeks to be a common language for describing road events, simplying the design process for producers and the processing logic for consumers, and making work zone data more accessible. + +## Data Feeds + ## Repostitory Organization The WZDx Specification repository contains two main subdirectories, each containing their own README file with additional information about the purpose and files within: - 1. [`create-feed`](/create-feed), which contains information regarding the creation of a WZDx feed, including feed format, example feeds, JSON schemas, and validation tools. 2. [`spec-content`](/spec-content), which details the data content of the WZDx specification, including objects, property names and types, and enumerated types. @@ -62,7 +64,6 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [Direction](/spec-content/enumerated-types/Direction.md) - [EventStatus](/spec-content/enumerated-types/EventStatus.md) - [EventType](/spec-content/enumerated-types/EventType.md) -<<<<<<< HEAD - [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) - [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) - [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) From e0c0861dfac83100839169a33ab52949ba06940a Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 17:56:27 -0500 Subject: [PATCH 292/388] Add Data Feeds section to project README --- README.md | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 0f700ed3..5ad6b3b3 100644 --- a/README.md +++ b/README.md @@ -5,8 +5,27 @@ The Work Zone Data Exchange (WZDx) Specification aims to make harmonized work zo The goal of WZDx is to enable widespread access to up-to-date information about dynamic conditions occurring on roads such as construction events. Currently, many IOOs maintain data on work zone activity. However, a lack of common data standards and convening mechanisms makes it difficult and costly for third parties such as original equipment manufacturers (OEMs) and navigation applications to access and use these data across various jurisdictions. WZDx seeks to be a common language for describing road events, simplying the design process for producers and the processing logic for consumers, and making work zone data more accessible. +## README Outline +- [Data Feeds](#data-feeds) +- [Repository Organization](#repostitory-organization) +- [Contents](#contents) +- [Project Description](#project-description) +- [Contact Information](#contact-information) +- [Release Notes](#release-notes) + - [Release v3.1 (Apr 2021)] +- [Getting Started](#getting-started) +- [Contributions](#contributions) +- [Versioning](#versioning) +- [License](#license) + ## Data Feeds +WZDx defines the structure and content of multiple distinct data feeds. Each feed is distributed as a single GeoJSON file and is represented by both human-friendly documentation in the [spec-content](/spec-content/) directory and a JSON Schema in [create-feed/schemas](/create-feed/schemas/). +### List of Data Feeds +Feed Name | Description | Producer | Consumer | Uses | Content +--- | --- | --- | --- | --- | --- +`WZDxFeed` | Provides high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change the roadway from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. | Agencies responsible for managing roadways and road work, typically state and local DOTs. | Traveling public via third parties such as mapping companies and CAVs. | Route planning; increased awareness; "put work zones on the map". | Work zone and detour road events (see [RoadEventFeature](/spec-content/objects/RoadEventFeature.md)). +`SwzDeviceFeed` | Provides information (location, status, live data) about field devices deployed on the roadway in work zones. | Smart work zone equipment manufacturers or vendors. | Agencies responsible for managing roadways and permitting work, typically state and local DOTs. Third-parties such as mapping companies and CAVs may also be interested in field device information. | Simplifies design process for agencies wanting to interface with equipment manufacturers; aids in dynamically generating a `WZDxFeed` with accurate information; reduces effort for manufacturers to conform to different agencies requirements. | Field devices (see [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)). ## Repostitory Organization The WZDx Specification repository contains two main subdirectories, each containing their own README file with additional information about the purpose and files within: @@ -85,20 +104,6 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [Object Diagram](/images/wzdx_object_diagram.jpg) - [Object Diagram editable draw.io file](/images/wzdx_object_diagram.drawio) -## README Outline -- [Work Zone Data Exchange (WZDx) Specification](#work-zone-data-exchange-wzdx-specification) - - [Repository Organization](#repostitory-organization) - - [Contents](#contents) -- [README Outline](#readme-outline) -- [Project Description](#project-description) -- [Contact Information](#contact-information) -- [Release Notes](#release-notes) - - [Release v3.1 (Apr 2021)] -- [Getting Started](#getting-started) -- [Contributions](#contributions) -- [Versioning](#versioning) -- [License](#license) - ## Project Description **What is the WZDx Specification?** From f5514a1174cf8027b0e2eda51a9fbbfefaa60172 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 18:08:35 -0500 Subject: [PATCH 293/388] Add paragraph to first section of project README --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5ad6b3b3..264c3b65 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,9 @@ # Work Zone Data Exchange (WZDx) Specification The Work Zone Data Exchange (WZDx) Specification aims to make harmonized work zone data provided by infrastructure owners and operators (IOOs) available for third party use, making travel on public roads safer and more efficient through ubiquitous access to data on work zone activity. -The goal of WZDx is to enable widespread access to up-to-date information about dynamic conditions occurring on roads such as construction events. Currently, many IOOs maintain data on work zone activity. However, a lack of common data standards and convening mechanisms makes it difficult and costly for third parties such as original equipment manufacturers (OEMs) and navigation applications to access and use these data across various jurisdictions. WZDx seeks to be a common language for describing road events, simplying the design process for producers and the processing logic for consumers, and making work zone data more accessible. +The goal of WZDx is to enable widespread access to up-to-date information about dynamic conditions occurring on roads such as construction events. Currently, many IOOs maintain data on work zone activity. However, a lack of common data standards and convening mechanisms makes it difficult and costly for third parties such as original equipment manufacturers (OEMs) and navigation applications to access and use these data across various jurisdictions. WZDx seeks to be a common language for descrbing work zone information, simplying the design process for producers and the processing logic for consumers, and making work zone data more accessible. + +Specifically, WZDx defines the structure and content of several [GeoJSON](https://datatracker.ietf.org/doc/html/rfc7946) files that are each intended to be distributed as a data feed. The feeds describe a variety of high-level road work-related information such as the location and status of work zones, detours, and field devices. ## README Outline - [Data Feeds](#data-feeds) @@ -19,7 +21,7 @@ The goal of WZDx is to enable widespread access to up-to-date information about - [License](#license) ## Data Feeds -WZDx defines the structure and content of multiple distinct data feeds. Each feed is distributed as a single GeoJSON file and is represented by both human-friendly documentation in the [spec-content](/spec-content/) directory and a JSON Schema in [create-feed/schemas](/create-feed/schemas/). +WZDx defines the structure and content of multiple distinct data feeds. Each feed is distributed as a single GeoJSON file and is represented by both human-friendly documentation in the [spec-content](/spec-content/) directory and a JSON Schema in [create-feed/schemas](/create-feed/schemas/). Each feed is designed for a specific use case is are flexible and its use in practice can vary by application. ### List of Data Feeds Feed Name | Description | Producer | Consumer | Uses | Content From 28869aee57b89d368933e8e7c508cbd3f6c38807 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 18:10:48 -0500 Subject: [PATCH 294/388] Fix link to SwzDeviceFeed schema --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 264c3b65..76ed395a 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) - [WZDx v3.1 Feed](/create-feed/schemas/wzdx_v3.1_feed.json) - [WZDx v4.0 Feed](/create-feed/schemas/wzdx_v4.0_feed.json) - - [SwzDeviceFeed](/create-feed/schemas/swz_device_feed_v1.0.json) + - [SwzDeviceFeed](/create-feed/schemas/SwzDeviceFeed_v1.0.json) - [**Specification Content**](/spec-content) - [**Objects**](/spec-content/objects) - [WZDxFeed](/spec-content/objects/WZDxFeed.md) From 01f8ef99e6242036e72596c527e6de196baf9b6d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 18:58:15 -0500 Subject: [PATCH 295/388] Fix description of data_source_id --- spec-content/objects/FeedDataSource.md | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/spec-content/objects/FeedDataSource.md b/spec-content/objects/FeedDataSource.md index ef02ec02..8e8fd28e 100644 --- a/spec-content/objects/FeedDataSource.md +++ b/spec-content/objects/FeedDataSource.md @@ -4,7 +4,7 @@ The `FeedDataSource` object describes information about a specific data source u ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`data_source_id` | String | Unique identifier for the data source organization providing work zone data. | Required | Linked to a [RoadEvent](/spec-content/objects/RoadEvent.md) by the `RoadEvent`'s `data_source_id` property. +`data_source_id` | String | Unique identifier for the data source organization providing work zone data. | Required | Linked to a road event by the `data_source_id` property on the road event's [core details](/spec-content/objects/RoadEventCoreDetails.md) or or a field device by the `data_source_id` property on the device's [core details](/spec-content/objects/FieldDeviceCoreDetails.md). `organization_name` | String | The name of the organization for the authoritative source of the work zone data. | Required | Example: County DOT `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time when the data source was last updated. | Optional | All date-time formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z` `update_frequency` | Integer | The frequency in seconds at which the data source is updated. | Optional | @@ -17,7 +17,4 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`data_sources` | [FeedInfo](/spec-content/objects/FeedInfo.md) - -## Additional Notes -The value of a `FeedDataSource`'s `data_source_id` property should match the value of the `data_source_id` property of at least one [RoadEvent](/spec-content/objects/RoadEvent.md) that is included within the same WZDx GeoJSON document. +`data_sources` | [FeedInfo](/spec-content/objects/FeedInfo.md) \ No newline at end of file From 323f7d7a7813de6e4ee4332b3ae7ec5cf315a36f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 19:08:39 -0500 Subject: [PATCH 296/388] Fix road_names usage in scenario 1 example --- .../examples/scenario1_simple_linestring_example.geojson | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/create-feed/examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/scenario1_simple_linestring_example.geojson index 57cdb14d..744bd0b9 100644 --- a/create-feed/examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/scenario1_simple_linestring_example.geojson @@ -36,7 +36,8 @@ "data_source_id": "1", "event_type": "work-zone", "road_names": [ - "I-80, I-35" + "I-80", + "I-35" ], "direction": "northbound", "description": "Single direction work zone without lane-level information.", From 7117455713de5a98ff783e649453d9af82391af9 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 6 Dec 2021 21:32:52 -0500 Subject: [PATCH 297/388] Modularize and reorganize JSON schema --- README.md | 35 +++-- create-feed/README.md | 12 -- schemas/4.0/BoundingBox.json | 11 ++ schemas/4.0/FeedDataSource.json | 53 +++++++ schemas/4.0/FeedInfo.json | 57 ++++++++ .../4.0/SwzDeviceFeed.json | 131 +----------------- .../4.0/WZDxFeed.json | 117 +--------------- .../schemas => schemas}/wzdx_v2.0_feed.json | 2 +- .../schemas => schemas}/wzdx_v3.0_feed.json | 2 +- .../schemas => schemas}/wzdx_v3.1_feed.json | 2 +- spec-content/README.md | 2 +- 11 files changed, 161 insertions(+), 263 deletions(-) create mode 100644 schemas/4.0/BoundingBox.json create mode 100644 schemas/4.0/FeedDataSource.json create mode 100644 schemas/4.0/FeedInfo.json rename create-feed/schemas/SwzDeviceFeed_v1.0.json => schemas/4.0/SwzDeviceFeed.json (76%) rename create-feed/schemas/wzdx_v4.0_feed.json => schemas/4.0/WZDxFeed.json (80%) rename {create-feed/schemas => schemas}/wzdx_v2.0_feed.json (99%) rename {create-feed/schemas => schemas}/wzdx_v3.0_feed.json (99%) rename {create-feed/schemas => schemas}/wzdx_v3.1_feed.json (99%) diff --git a/README.md b/README.md index 76ed395a..9a914bbd 100644 --- a/README.md +++ b/README.md @@ -16,12 +16,13 @@ Specifically, WZDx defines the structure and content of several [GeoJSON](https: - [Release Notes](#release-notes) - [Release v3.1 (Apr 2021)] - [Getting Started](#getting-started) +- [JSON Schemas](#json-schemas) - [Contributions](#contributions) - [Versioning](#versioning) - [License](#license) ## Data Feeds -WZDx defines the structure and content of multiple distinct data feeds. Each feed is distributed as a single GeoJSON file and is represented by both human-friendly documentation in the [spec-content](/spec-content/) directory and a JSON Schema in [create-feed/schemas](/create-feed/schemas/). Each feed is designed for a specific use case is are flexible and its use in practice can vary by application. +WZDx defines the structure and content of multiple distinct data feeds. Each feed is distributed as a single GeoJSON file and is represented by both human-friendly documentation in the [spec-content](/spec-content/) directory and a JSON Schema in [/schemas](/schemas/). Each feed is designed for a specific use case is are flexible and its use in practice can vary by application. ### List of Data Feeds Feed Name | Description | Producer | Consumer | Uses | Content @@ -34,7 +35,7 @@ The WZDx Specification repository contains two main subdirectories, each contain 1. [`create-feed`](/create-feed), which contains information regarding the creation of a WZDx feed, including feed format, example feeds, JSON schemas, and validation tools. 2. [`spec-content`](/spec-content), which details the data content of the WZDx specification, including objects, property names and types, and enumerated types. - +3. [`schemas`](/schemas), which contains JSON Schemas for the feeds defined by WZDx. Two additional directories, [`images`](/images) and [`documents`](/documents), contain the images that are referenced throughout the repository and PDF and Word documents such as the WZDx Early Adopter's Guide and WZDx Data Feed Self Validation Checklist. @@ -48,12 +49,6 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [Detour](/create-feed/examples/WZDxFeed/scenario4_detour_linestring_example.geojson) - [Recurring Work](/create-feed/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson) - [Simple Work Zone (MultiPoint)](/create-feed/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson) - - [**JSON Schemas**](/create-feed/schemas) - - [WZDx v2.0 Feed](/create-feed/schemas/wzdx_v2.0_feed.json) - - [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) - - [WZDx v3.1 Feed](/create-feed/schemas/wzdx_v3.1_feed.json) - - [WZDx v4.0 Feed](/create-feed/schemas/wzdx_v4.0_feed.json) - - [SwzDeviceFeed](/create-feed/schemas/SwzDeviceFeed_v1.0.json) - [**Specification Content**](/spec-content) - [**Objects**](/spec-content/objects) - [WZDxFeed](/spec-content/objects/WZDxFeed.md) @@ -102,9 +97,15 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c - [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) - [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) - [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) +- [**JSON Schemas**](/schemas) + - [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) + - [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) + - [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) + - [WZDx v4.0 WZDxFeed](/schemas/4.0/WZDxFeed.json) + - [WZDx v4.0 SwzDeviceFeed](/schemas/4.0/SwzDeviceFeed.json) - [**Images Used throughout the Specification**](/images) - - [Object Diagram](/images/wzdx_object_diagram.jpg) - - [Object Diagram editable draw.io file](/images/wzdx_object_diagram.drawio) + - [Object Diagram](/images/wzdx_object_diagram.jpg) + - [Object Diagram editable draw.io file](/images/wzdx_object_diagram.drawio) ## Project Description @@ -168,9 +169,21 @@ The WZDWG welcomes feedback and comments on the WZDx 3.1 Specification. Comments 2. Learn about using GitHub as a [tool for collaboration and support](/create-feed/README.md#collaborate-via-github). 3. Use [Specification Content](/spec-content) page to understand the data components of the specification. 4. [Create your own feed](/create-feed) using example feeds and follow the business rules. -5. Validate your feed output using the [WZDx v4.0 Feed JSON Schema](/create-feed/schemas/wzdx_v4.0_feed.json) +5. Validate your feed output using the [WZDx v4.0 Feed JSON Schema](/schemas/wzdx_v4.0_feed.json) 6. Publish your feed and tell us about it via avdx@dot.gov. +## JSON Schemas +The WZDx Specification defines a JSON schema for each feed within the [schemas](/schemas) directory. The repository contains schemas for the following feeds: + +### Current +- [WZDx v4.0 WZDxFeed](/schemas/4.0/WZDxFeed.json) +- [WZDx v4.0 SwzDeviceFeed](/schemas/4.0/SwzDeviceFeed.json) + +### Previous +- [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) +- [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) +- [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) + ## Contributions **How do I contribute to the WZDx Specification?** diff --git a/create-feed/README.md b/create-feed/README.md index c28813ff..172d3e5f 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -87,18 +87,6 @@ The [local access only example](/create-feed/examples/WZDxFeed/local_access_only - Uses `local-access-only` [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). - One road event shows basic details (not lane-level), while the opposite direction road event shows detailed lane information. The detailed lane information also includes a bike lane for reference. -## JSON Schemas -The WZDx Specification defines two "feeds", each with a JSON schema. The [schemas](/create-feed/schemas) directory includes a JSON Schema for the following WZDx feed versions: - -* [WZDx v2.0 Feed](/create-feed/schemas/wzdx_v2.0_feed.json) -* [WZDx v3.0 Feed](/create-feed/schemas/wzdx_v3.0_feed.json) -* [WZDx v3.1 Feed](/create-feed/schemas/wzdx_v3.1_feed.json) -* [WZDx v4.0 Feed](/create-feed/schemas/wzdx_v4.0_feed.json) - -And the following smart work zone device feed (`SwzDeviceFeed`) versions: - -- [SwzDeviceFeed](/create-feed/schemas/swz_device_feed_v1.0.json) - ## Business Rules The following business rules help assure a standardized and interpretable use of the WZDx specification. The specification describes the required structure and data fields to describe a work zone, whereas business rules are additional requirements for using the WZDx specification in a standard manner. Note that business rules are distinct from best practices in that the latter are suggestions and business rules are requirements. diff --git a/schemas/4.0/BoundingBox.json b/schemas/4.0/BoundingBox.json new file mode 100644 index 00000000..37fc804a --- /dev/null +++ b/schemas/4.0/BoundingBox.json @@ -0,0 +1,11 @@ +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "GeoJSON Bounding Box", + "description": "Information on the coordinate range for a Geometry, Feature, or FeatureCollection", + "type": "array", + "minItems": 4, + "items": { + "type": "number" + } +} \ No newline at end of file diff --git a/schemas/4.0/FeedDataSource.json b/schemas/4.0/FeedDataSource.json new file mode 100644 index 00000000..0e9a1522 --- /dev/null +++ b/schemas/4.0/FeedDataSource.json @@ -0,0 +1,53 @@ +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedDataSource.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Feed Data Source", + "description": "Describes information about a specific data source used to build the work zone data feed", + "type": "object", + "properties": { + "data_source_id": { + "description": "Unique identifier for the organization providing work zone data", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization for the authoritative source of the work zone data", + "type": "string" + }, + "contact_name": { + "description": "The name of the individual or group responsible for the data source", + "type": "string" + }, + "contact_email": { + "description": "The email address of the individual or group responsible for the data source", + "type": "string", + "format": "email" + }, + "update_frequency": { + "description": "The frequency in seconds at which the data source is updated", + "type": "integer", + "minimum": 1 + }, + "update_date": { + "description": "The UTC date and time when the data source was last updated", + "type": "string", + "format": "date-time" + }, + "lrs_type": { + "description": "**DEPRECATED** Describes the type of linear referencing system used for the milepost measurements", + "type": "string" + }, + "lrs_url": { + "description": "**DEPRECATED** A URL where additional information on the LRS information and transformation information is stored", + "type": "string", + "format": "uri" + }, + "location_verify_method": { + "description": "***DEPRECATED***The method used to verify the accuracy of the location information", + "type": "string" + } + }, + "required": [ + "data_source_id", + "organization_name" + ] +} \ No newline at end of file diff --git a/schemas/4.0/FeedInfo.json b/schemas/4.0/FeedInfo.json new file mode 100644 index 00000000..9ef4d500 --- /dev/null +++ b/schemas/4.0/FeedInfo.json @@ -0,0 +1,57 @@ +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedInfo.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "WZDx Feed Information", + "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", + "type": "object", + "properties": { + "publisher": { + "description": "The organization responsible for publishing the feed", + "type": "string" + }, + "contact_name": { + "description": "The name of the individual or group responsible for the data feed", + "type": "string" + }, + "contact_email": { + "description": "The email address of the individual or group responsible for the data feed", + "type": "string", + "format": "email" + }, + "update_frequency": { + "description": "The frequency in seconds at which the data feed is updated", + "type": "integer", + "minimum": 1 + }, + "update_date": { + "description": "The UTC date and time when the GeoJSON file (representing the instance of the feed) was generated", + "type": "string", + "format": "date-time" + }, + "version": { + "description": "The WZDx specification version used to create the data feed, in 'major.minor' format", + "type": "string", + "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$" + }, + "license": { + "description": "The URL of the license that applies to the data in the WZDx feed. This *must* be the string \"https://creativecommons.org/publicdomain/zero/1.0/\"", + "enum": [ + "https://creativecommons.org/publicdomain/zero/1.0/" + ] + }, + "data_sources": { + "description": "A list of specific data sources for the road event data in the feed", + "type": "array", + "items": { + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-device/schemas/feed_data_source.json" + }, + "minItems": 1 + } + }, + "required": [ + "update_date", + "version", + "publisher", + "data_sources" + ] +} \ No newline at end of file diff --git a/create-feed/schemas/SwzDeviceFeed_v1.0.json b/schemas/4.0/SwzDeviceFeed.json similarity index 76% rename from create-feed/schemas/SwzDeviceFeed_v1.0.json rename to schemas/4.0/SwzDeviceFeed.json index a6412ef7..3c3d07de 100644 --- a/create-feed/schemas/SwzDeviceFeed_v1.0.json +++ b/schemas/4.0/SwzDeviceFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-device/create-feed/schemas/SwzDeviceFeed_v1.0.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/SwzDeviceFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", - "title": "WZDx SwzDeviceFeed v1.0", - "description": "The GeoJSON output of a WZDx smart work zone device data feed (v1.0)", + "title": "WZDx v4.0 SwzDeviceFeed", + "description": "The GeoJSON output of a WZDx smart work zone device data feed (v4.0)", "type": "object", "properties": { "feed_info": { - "$ref": "#/definitions/FeedInfo" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -20,130 +20,11 @@ } }, "bbox": { - "$ref": "#/definitions/BoundingBox" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" } }, "required": ["feed_info", "type", "features"], "definitions": { - "BoundingBox": { - "title": "GeoJSON Bounding Box", - "description": "Information on the coordinate range for a Geometry, Feature (FieldDeviceFeature), or FeatureCollection (SwzDeviceFeed)", - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - }, - "FeedInfo": { - "title": "WZDx Feed Information", - "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", - "type": "object", - "properties": { - "publisher": { - "description": "The organization responsible for publishing the feed", - "type": "string" - }, - "contact_name": { - "description": "The name of the individual or group responsible for the data feed", - "type": "string" - }, - "contact_email": { - "description": "The email address of the individual or group responsible for the data feed", - "type": "string", - "format": "email" - }, - "update_frequency": { - "description": "The frequency in seconds at which the data feed is updated", - "type": "integer", - "minimum": 1 - }, - "update_date": { - "description": "The UTC date and time when the GeoJSON file (representing the instance of the feed) was generated", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "The WZDx specification version used to create the data feed, in 'major.minor' format", - "type": "string", - "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$" - }, - "license": { - "description": "The URL of the license that applies to the data in the WZDx feed. This *must* be the string \"https://creativecommons.org/publicdomain/zero/1.0/\"", - "enum": ["https://creativecommons.org/publicdomain/zero/1.0/"] - }, - "data_sources": { - "description": "A list of specific data sources for the road event data in the feed", - "type": "array", - "items": { - "$ref": "#/definitions/FeedDataSource" - }, - "minItems": 1 - } - }, - "required": ["update_date", "version", "publisher", "data_sources"] - }, - "FeedDataSource": { - "title": "WZDx Feed Data Source", - "description": "Describes information about a specific data source used to build the work zone data feed", - "type": "object", - "properties": { - "data_source_id": { - "description": "Unique identifier for the organization providing work zone data", - "type": "string" - }, - "organization_name": { - "description": "The name of the organization for the authoritative source of the work zone data", - "type": "string" - }, - "contact_name": { - "description": "The name of the individual or group responsible for the data source", - "type": "string" - }, - "contact_email": { - "description": "The email address of the individual or group responsible for the data source", - "type": "string", - "format": "email" - }, - "update_frequency": { - "description": "The frequency in seconds at which the data source is updated", - "type": "integer", - "minimum": 1 - }, - "update_date": { - "description": "The UTC date and time when the data source was last updated", - "type": "string", - "format": "date-time" - }, - "location_method": { - "$ref": "#/definitions/LocationMethod" - }, - "location_verify_method": { - "description": "The method used to verify the accuracy of the location information", - "type": "string" - }, - "lrs_type": { - "description": "Describes the type of linear referencing system used for the milepost measurements", - "type": "string" - }, - "lrs_url": { - "description": "A URL where additional information on the LRS information and transformation information is stored", - "type": "string", - "format": "uri" - } - }, - "required": ["data_source_id", "organization_name", "location_method"] - }, - "LocationMethod": { - "title": "Location Method Enumerated Type", - "description": "The typical method used to locate the beginning and end of a work zone impact area", - "enum": [ - "channel-device-method", - "sign-method", - "junction-method", - "other", - "unknown" - ] - }, "FieldDeviceFeature": { "title": "Field Device Feature (GeoJSON Feature)", "description": "The GeoJSON feature container for a WZDx field device", @@ -190,7 +71,7 @@ ] }, "bbox": { - "$ref": "#/definitions/BoundingBox" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"] diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/schemas/4.0/WZDxFeed.json similarity index 80% rename from create-feed/schemas/wzdx_v4.0_feed.json rename to schemas/4.0/WZDxFeed.json index 31888fdb..28f03cea 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/schemas/4.0/WZDxFeed.json @@ -1,13 +1,13 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/create-feed/schemas/wzdx_v4.0_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", - "title": "WZDx v4.0 Feed", - "description": "The GeoJSON output of a WZDx v4.0 data feed", + "title": "WZDx v4.0 WZDxFeed", + "description": "The GeoJSON output of a WZDx feed data feed (v4.0)", "type": "object", "properties": { "road_event_feed_info": { - "$ref": "#/definitions/FeedInfo" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -21,116 +21,11 @@ } }, "bbox": { - "$ref": "#/definitions/BoundingBox" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" } }, "required": ["road_event_feed_info", "type", "features"], "definitions": { - "BoundingBox": { - "title": "GeoJSON Bounding Box", - "description": "Information on the coordinate range for a Geometry, Feature (RoadEventFeature), or FeatureCollection (WZDxFeed)", - "type": "array", - "minItems": 4, - "items": { - "type": "number" - } - }, - "FeedInfo": { - "title": "Road Event Feed Information", - "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", - "type": "object", - "properties": { - "publisher": { - "description": "The organization responsible for publishing the feed", - "type": "string" - }, - "contact_name": { - "description": "The name of the individual or group responsible for the data feed", - "type": "string" - }, - "contact_email": { - "description": "The email address of the individual or group responsible for the data feed", - "type": "string", - "format": "email" - }, - "update_frequency": { - "description": "The frequency in seconds at which the data feed is updated", - "type": "integer", - "minimum": 1 - }, - "update_date": { - "description": "The UTC date and time when the GeoJSON file (representing the instance of the feed) was generated", - "type": "string", - "format": "date-time" - }, - "version": { - "description": "The WZDx specification version used to create the data feed, in 'major.minor' format", - "type": "string", - "pattern": "^(0|[1-9][0-9]*)\\.(0|[1-9][0-9]*)$" - }, - "license": { - "description": "The URL of the license that applies to the data in the WZDx feed. This *must* be the string \"https://creativecommons.org/publicdomain/zero/1.0/\"", - "enum": ["https://creativecommons.org/publicdomain/zero/1.0/"] - }, - "data_sources": { - "description": "A list of specific data sources for the road event data in the feed", - "type": "array", - "items": { - "$ref": "#/definitions/FeedDataSource" - }, - "minItems": 1 - } - }, - "required": ["update_date", "version", "publisher", "data_sources"] - }, - "FeedDataSource": { - "title": "Road Event Data Source", - "description": "Describes information about a specific data source used to build the work zone data feed", - "type": "object", - "properties": { - "data_source_id": { - "description": "Unique identifier for the organization providing work zone data", - "type": "string" - }, - "organization_name": { - "description": "The name of the organization for the authoritative source of the work zone data", - "type": "string" - }, - "contact_name": { - "description": "The name of the individual or group responsible for the data source", - "type": "string" - }, - "contact_email": { - "description": "The email address of the individual or group responsible for the data source", - "type": "string", - "format": "email" - }, - "update_frequency": { - "description": "The frequency in seconds at which the data source is updated", - "type": "integer", - "minimum": 1 - }, - "update_date": { - "description": "The UTC date and time when the data source was last updated", - "type": "string", - "format": "date-time" - }, - "lrs_type": { - "description": "**DEPRECATED** Describes the type of linear referencing system used for the milepost measurements", - "type": "string" - }, - "lrs_url": { - "description": "**DEPRECATED** A URL where additional information on the LRS information and transformation information is stored", - "type": "string", - "format": "uri" - }, - "location_verify_method": { - "description": "***DEPRECATED***The method used to verify the accuracy of the location information", - "type": "string" - } - }, - "required": ["data_source_id", "organization_name"] - }, "LocationMethod": { "title": "Location Method Enumerated Type", "description": "The typical method used to locate the beginning and end of a work zone impact area", @@ -176,7 +71,7 @@ ] }, "bbox": { - "$ref": "#/definitions/BoundingBox" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"] diff --git a/create-feed/schemas/wzdx_v2.0_feed.json b/schemas/wzdx_v2.0_feed.json similarity index 99% rename from create-feed/schemas/wzdx_v2.0_feed.json rename to schemas/wzdx_v2.0_feed.json index ac46f968..04962429 100644 --- a/create-feed/schemas/wzdx_v2.0_feed.json +++ b/schemas/wzdx_v2.0_feed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/create-feed/schemas/wzdx_v2.0_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/schemas/wzdx_v2.0_feed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v2.0 Feed", "description": "The GeoJSON output of a WZDx v2.0 data feed", diff --git a/create-feed/schemas/wzdx_v3.0_feed.json b/schemas/wzdx_v3.0_feed.json similarity index 99% rename from create-feed/schemas/wzdx_v3.0_feed.json rename to schemas/wzdx_v3.0_feed.json index ac53a7cc..f1fdd756 100644 --- a/create-feed/schemas/wzdx_v3.0_feed.json +++ b/schemas/wzdx_v3.0_feed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/create-feed/schemas/wzdx_v3.0_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/schemas/wzdx_v3.0_feed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.0 Feed", "description": "The GeoJSON output of a WZDx v3.0 data feed", diff --git a/create-feed/schemas/wzdx_v3.1_feed.json b/schemas/wzdx_v3.1_feed.json similarity index 99% rename from create-feed/schemas/wzdx_v3.1_feed.json rename to schemas/wzdx_v3.1_feed.json index 61b89858..8a03c08f 100644 --- a/create-feed/schemas/wzdx_v3.1_feed.json +++ b/schemas/wzdx_v3.1_feed.json @@ -1,6 +1,6 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/create-feed/schemas/wzdx_v3.1_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/schemas/wzdx_v3.1_feed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.1 Feed", "description": "The GeoJSON output of a WZDx v3.1 data feed", diff --git a/spec-content/README.md b/spec-content/README.md index 7f999817..92911837 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -4,7 +4,7 @@ The WZDx specification describes the content and structure of a WZDx GeoJSON doc The value of some properties of an object are restricted to a defined set of values. These enumerations are found in the [enumerated-types](/spec-content/enumerated-types) directory. ## Objects -The WZDx specification describes the structure and content of a GeoJSON document, which can be called an instance of a "WZDx Feed". Each WZDx GeoJSON document has one root object, a [WZDxFeed](/spec-content/objects/WZDxFeed.md) object, with many properties and nested objects. Each distinct object is described in its own human-readable markdown file within the [objects](/spec-content/objects) directory, as well as within the JSON schema in `/create-feed/schemas/`. An object represents a distinct entity, such as a road event, a lane, or information about a feed. All pieces of data that describe that entity are included as properties of the object. +The WZDx specification describes the structure and content of a GeoJSON document, which can be called an instance of a "WZDx Feed". Each WZDx GeoJSON document has one root object, a [WZDxFeed](/spec-content/objects/WZDxFeed.md) object, with many properties and nested objects. Each distinct object is described in its own human-readable markdown file within the [objects](/spec-content/objects) directory, as well as within the JSON schema in `/schemas/`. An object represents a distinct entity, such as a road event, a lane, or information about a feed. All pieces of data that describe that entity are included as properties of the object. ### Object Details Each object is described by a table of properties, which are each defined by the following characteristics: From 434cb343804ffcfb90f3434d727669d5d79e54e8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 7 Dec 2021 11:33:04 -0500 Subject: [PATCH 298/388] Fix schema --- schemas/4.0/FeedInfo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/4.0/FeedInfo.json b/schemas/4.0/FeedInfo.json index 9ef4d500..88c6ae4c 100644 --- a/schemas/4.0/FeedInfo.json +++ b/schemas/4.0/FeedInfo.json @@ -43,7 +43,7 @@ "description": "A list of specific data sources for the road event data in the feed", "type": "array", "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-device/schemas/feed_data_source.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-device/schemas/FeedDataSource.json" }, "minItems": 1 } From 89a7674ec0e3c5a4b649908f70e8e3d30fdc6935 Mon Sep 17 00:00:00 2001 From: Mark Mockett <59966277+mark-mockett@users.noreply.github.com> Date: Tue, 7 Dec 2021 17:01:56 -0500 Subject: [PATCH 299/388] Delete RoadRestriction.md --- .../enumerated-types/RoadRestriction.md | 26 ------------------- 1 file changed, 26 deletions(-) delete mode 100644 spec-content/enumerated-types/RoadRestriction.md diff --git a/spec-content/enumerated-types/RoadRestriction.md b/spec-content/enumerated-types/RoadRestriction.md deleted file mode 100644 index 12bf2cb3..00000000 --- a/spec-content/enumerated-types/RoadRestriction.md +++ /dev/null @@ -1,26 +0,0 @@ -# Road Restriction -The type of vehicle restriction on a roadway. - -## Values -Value | Description ---- | --- -`local-access-only` | Travel allowed only for vehicles accessing addresses in the work zone area; this includes emergency services, deliveries, and direct property access -`no-trucks` | Trucks are prohibited from traveling in work zone area -`travel-peak-hours-only` | Travel restricted to travel peak hours only -`hov-3` | Travel restricted to high occupancy vehicles of three or more -`hov-2` | Travel restricted to high occupancy vehicles of two or more -`no-parking` | No parking in work zone area -`reduced-width` | Lane width reduced in work zone area -`reduced-height` | Height restrictions reduced in work zone area -`reduced-length` | Vehicle length restrictions reduced in work zone area -`reduced-weight` | Vehicle weight restrictions reduced in work zone area -`axle-load-limit` | Vehicle axle-load-limit restrictions reduced in work zone area -`gross-weight-limit` | Vehicle gross-weight-limit restrictions reduced in work zone area -`towing-prohibited` | Towing prohibited in work zone area -`permitted-oversize-loads-prohibited` | “Permitted oversize loads” prohibited in work zone area; this applies
to annual oversize load permits. - -## Used By -Property | Object ---- | --- -`restrictions` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) -`restriction_type` | [LaneRestriction](/spec-content/objects/LaneRestriction.md) From c7f2b6d7644f025a229f213a421f7dbf7ec7cbc7 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 7 Dec 2021 17:06:53 -0500 Subject: [PATCH 300/388] Fix feed info schema --- schemas/4.0/FeedInfo.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/4.0/FeedInfo.json b/schemas/4.0/FeedInfo.json index 88c6ae4c..e0bb3752 100644 --- a/schemas/4.0/FeedInfo.json +++ b/schemas/4.0/FeedInfo.json @@ -43,7 +43,7 @@ "description": "A list of specific data sources for the road event data in the feed", "type": "array", "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-device/schemas/FeedDataSource.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedDataSource.json" }, "minItems": 1 } From 1cc8d9edc3c1ffc45bb89529823098f6eb8d681d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 7 Dec 2021 17:08:05 -0500 Subject: [PATCH 301/388] Fix SwzDeviceFeed schema --- schemas/4.0/SwzDeviceFeed.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/4.0/SwzDeviceFeed.json b/schemas/4.0/SwzDeviceFeed.json index 3c3d07de..9641003d 100644 --- a/schemas/4.0/SwzDeviceFeed.json +++ b/schemas/4.0/SwzDeviceFeed.json @@ -152,7 +152,7 @@ } }, "required": [ - "device_types", + "device_type", "data_source_id", "road_names", "device_status", From e3b917063bf7a0e403af525ffe0d92e974856e62 Mon Sep 17 00:00:00 2001 From: Mark Mockett <59966277+mark-mockett@users.noreply.github.com> Date: Tue, 7 Dec 2021 17:21:21 -0500 Subject: [PATCH 302/388] Fix WorkerPresence object in schema --- create-feed/schemas/wzdx_v4.0_feed.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index bb39e445..087c76ee 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -516,10 +516,7 @@ "uniqueItems": true } }, - "required": ["are_workers_present"], - "dependencies": { - "restriction_value": ["restriction_units"] - } + "required": ["are_workers_present"] }, "EventType": { "title": "Road Event Type Enumerated Type", From 6e87897513bc2207ddf0805e00d6c0b069d6ee98 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 7 Dec 2021 23:02:58 -0500 Subject: [PATCH 303/388] Fix SwzDeviceFeed schema 'oneOf' --- schemas/4.0/SwzDeviceFeed.json | 384 ++++++++++++++++++++++----------- 1 file changed, 256 insertions(+), 128 deletions(-) diff --git a/schemas/4.0/SwzDeviceFeed.json b/schemas/4.0/SwzDeviceFeed.json index 9641003d..df7a5cfe 100644 --- a/schemas/4.0/SwzDeviceFeed.json +++ b/schemas/4.0/SwzDeviceFeed.json @@ -39,6 +39,13 @@ "enum": ["Feature"] }, "properties": { + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + } + }, + "required": ["core_details"], "oneOf": [ { "$ref": "#/definitions/ArrowBoard" @@ -164,132 +171,236 @@ "title": "Arrow Board Field Device", "description": "An electronic, connected arrow board which can display an arrow pattern to direct traffic", "type": "object", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "pattern": { - "$ref": "#/definitions/ArrowBoardPattern" - }, - "is_moving": { - "type": "boolean", - "description": "A yes/no value indicating if the arrow board is actively moving (not statically placed) as part of a mobile work zone operation." + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "device_type": { + "const": "arrow-board" + } + }, + "required": ["device_type"] + } + }, + "required": ["core_details"] }, - "is_in_transport_position": { - "type": "boolean", - "description": "A yes/no value indicating if the arrow board is in the stowed/transport position (true) or deployed/upright position (false)" + { + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "pattern": { + "$ref": "#/definitions/ArrowBoardPattern" + }, + "is_moving": { + "type": "boolean", + "description": "A yes/no value indicating if the arrow board is actively moving (not statically placed) as part of a mobile work zone operation." + }, + "is_in_transport_position": { + "type": "boolean", + "description": "A yes/no value indicating if the arrow board is in the stowed/transport position (true) or deployed/upright position (false)" + } + }, + "required": [ + "core_details", + "pattern" + ] } - }, - "required": [ - "core_details", - "pattern" ] }, "Camera": { "title": "Camera Field Device", "description": "A camera device deployed in the field, capable of capturing still images", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "image_url": { - "type": "string", - "format": "uri", - "description": "A URL pointing to an image file for the camera image still" + "type": "object", + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "device_type": { + "const": "camera" + } + }, + "required": ["device_type"] + } + }, + "required": ["core_details"] }, - "image_timestamp": { - "type": "string", - "format": "date-time", - "description": "The UTC date and time when the image was captured" + { + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "image_url": { + "type": "string", + "format": "uri", + "description": "A URL pointing to an image file for the camera image still" + }, + "image_timestamp": { + "type": "string", + "format": "date-time", + "description": "The UTC date and time when the image was captured" + } + }, + "required": [ + "core_details" + ], + "dependencies": { + "image_url": [ + "image_timestamp" + ] + } } - }, - "required": [ - "core_details" - ], - "dependencies": { - "image_url": [ - "image_timestamp" - ] - } + ] }, "DynamicMessageSign": { "title": "Dynamic Message Sign Field Device", "description": "An electronic traffic sign deployed on the roadway, used to provide information to travelers", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "device_type": { + "const": "dynamic-message-sign" + } + }, + "required": ["device_type"] + } + }, + "required": ["core_details"] }, - "message_multi_string": { - "type": "string", - "description": "A MULTI-formatted string describing the message currently posted to the sign" + { + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "message_multi_string": { + "type": "string", + "description": "A MULTI-formatted string describing the message currently posted to the sign" + } + }, + "required": [ + "core_details", + "message_multi_string" + ] } - }, - "required": [ - "core_details", - "message_multi_string" ] }, "FlashingBeacon": { "title": "Flashing Beacon Field Device", "description": "A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something and capture driver attention", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "function": { - "$ref": "#/definitions/FlashingBeaconFunction" + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "device_type": { + "const": "flashing-beacon" + } + }, + "required": ["device_type"] + } + }, + "required": ["core_details"] }, - "is_flashing": { - "type": "boolean", - "description": "A yes/no value indicating if the flashing beacon is currently in use and flashing" + { + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "function": { + "$ref": "#/definitions/FlashingBeaconFunction" + }, + "is_flashing": { + "type": "boolean", + "description": "A yes/no value indicating if the flashing beacon is currently in use and flashing" + } + }, + "required": [ + "core_details", + "function" + ] } - }, - "required": [ - "core_details", - "function" - ] + ] }, "HybridSign": { "title": "Hybrid Sign Field Device", "description": "A hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "dynamic_message_function": { - "$ref": "#/definitions/HybridSignDynamicMessageFunction" - }, - "dynamic_message_text": { - "type": "string", - "description": "A text representation of the message currently posted to the dynamic electronic component of the hybrid sign" + "type": "object", + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "device_type": { + "const": "hybrid-sign" + } + }, + "required": ["device_type"] + } + }, + "required": ["core_details"] }, - "static_sign_text": { - "type": "string", - "description": "The static text on the non-electronic component of the hybrid sign" + { + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "dynamic_message_function": { + "$ref": "#/definitions/HybridSignDynamicMessageFunction" + }, + "dynamic_message_text": { + "type": "string", + "description": "A text representation of the message currently posted to the dynamic electronic component of the hybrid sign" + }, + "static_sign_text": { + "type": "string", + "description": "The static text on the non-electronic component of the hybrid sign" + } + }, + "required": [ + "core_details", + "dynamic_message_function" + ] } - }, - "required": [ - "core_details", - "dynamic_message_function" ] }, "LocationMarker": { "title": "Location Marker Field Device", "description": "Any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone)", "type": "object", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "device_type": { + "const": "location-marker" + } + }, + "required": ["device_type"] + } + }, + "required": ["core_details"] }, - "marked_locations": { - "type": "array", - "minItems": 1, - "items": { - "$ref": "#/definitions/MarkedLocation" - } + { + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "marked_locations": { + "type": "array", + "minItems": 1, + "items": { + "$ref": "#/definitions/MarkedLocation" + } + } + }, + "required": ["core_details", "marked_locations"] } - }, - "required": ["core_details", "marked_locations"] + ] }, "MarkedLocation": { "title": "Marked Location", @@ -309,46 +420,63 @@ "title": "Traffic Sensor Field Device", "description": "A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval", "type": "object", - "properties": { - "core_details": { - "$ref": "#/definitions/FieldDeviceCoreDetails" - }, - "collection_interval_start_date": { - "type": "string", - "format": "date-time", - "description": "The UTC date and time where the TrafficSensor data collection started. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" - }, - "collection_interval_end_date": { - "type": "string", - "format": "date-time", - "description": "The UTC date and time where the TrafficSensor data collection ended. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" - }, - "average_speed_kph": { - "type": "integer", - "minimum": 0, - "description": "The average speed of vehicles across all lanes over the collection interval in kilometers per hour" - }, - "volume_vph": { - "type": "integer", - "minimum": 0, - "description": "The rate of vehicles passing by the sensor during the collection interval in vehicles per hour" - }, - "occupancy_percent": { - "type": "integer", - "minimum": 0, - "description": "The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval" + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "device_type": { + "const": "traffic-sensor" + } + }, + "required": ["device_type"] + } + }, + "required": ["core_details"] }, - "lane_data": { - "type": "array", - "items": { - "$ref": "#/definitions/TrafficSensorLaneData" - } + { + "properties": { + "core_details": { + "$ref": "#/definitions/FieldDeviceCoreDetails" + }, + "collection_interval_start_date": { + "type": "string", + "format": "date-time", + "description": "The UTC date and time where the TrafficSensor data collection started. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" + }, + "collection_interval_end_date": { + "type": "string", + "format": "date-time", + "description": "The UTC date and time where the TrafficSensor data collection ended. The averages and totals contained in the TrafficSensor data apply to the inclusive interval of 'collection_interval_start_date' to 'collection_interval_end_date'" + }, + "average_speed_kph": { + "type": "integer", + "minimum": 0, + "description": "The average speed of vehicles across all lanes over the collection interval in kilometers per hour" + }, + "volume_vph": { + "type": "integer", + "minimum": 0, + "description": "The rate of vehicles passing by the sensor during the collection interval in vehicles per hour" + }, + "occupancy_percent": { + "type": "integer", + "minimum": 0, + "description": "The percent of time the roadway section monitored by the sensor was occupied by a vehicle over the collection interval" + }, + "lane_data": { + "type": "array", + "items": { + "$ref": "#/definitions/TrafficSensorLaneData" + } + } + }, + "required": [ + "core_details", + "collection_interval_start_date", + "collection_interval_end_date" + ] } - }, - "required": [ - "core_details", - "collection_interval_start_date", - "collection_interval_end_date" ] }, "TrafficSensorLaneData": { From 3a139a02ce98d007a40a6e54311f047860db1f62 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 7 Dec 2021 23:58:45 -0500 Subject: [PATCH 304/388] Refine validation of WZDxFeed --- schemas/4.0/WZDxFeed.json | 317 +++++++++++++++++++++----------------- 1 file changed, 179 insertions(+), 138 deletions(-) diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index 28f03cea..0a1c0b6c 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -51,7 +51,14 @@ "enum": ["Feature"] }, "properties": { - "anyOf": [ + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + } + }, + "required": ["core_details"], + "oneOf": [ { "$ref": "#/definitions/WorkZoneRoadEvent" }, @@ -128,153 +135,187 @@ "title": "Work Zone Road Event", "description": "Descibes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway", "type": "object", - "properties": { - "core_details": { - "$ref": "#/definitions/RoadEventCoreDetails" - }, - "beginning_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event begins", - "type": "string" - }, - "ending_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event ends", - "type": "string" - }, - "beginning_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event begins", - "type": "number", - "minimum": 0 - }, - "ending_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event ends", - "type": "number", - "minimum": 0 - }, - "beginning_accuracy": { - "$ref": "#/definitions/SpatialVerification" - }, - "ending_accuracy": { - "$ref": "#/definitions/SpatialVerification" - }, - "start_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "end_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "start_date_accuracy": { - "$ref": "#/definitions/TimeVerification" - }, - "end_date_accuracy": { - "$ref": "#/definitions/TimeVerification" - }, - "event_status": { - "$ref": "#/definitions/EventStatus" - }, - "vehicle_impact": { - "$ref": "#/definitions/VehicleImpact" - }, - "location_method": { - "$ref": "#/definitions/LocationMethod" - }, - "worker_presence": { - "$ref": "#/definitions/WorkerPresence" - }, - "reduced_speed_limit_kph": { - "description": "If applicable, the reduced speed limit posted within the road event, in kilometers per hour", - "type": "integer", - "minimum": 0 - }, - "restrictions": { - "description": "A list of zero or more restrictions applying to the road event", - "type": "array", - "items": { - "$ref": "#/definitions/Restriction" - } - }, - "types_of_work": { - "description": "A list of the types of work being done in a road event", - "type": "array", - "items": { - "$ref": "#/definitions/TypeOfWork" - } + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "event_type": { + "const": "work-zone" + } + }, + "required": ["event_type"] + } + }, + "required": ["core_details"] }, - "lanes": { - "description": "A list of individual lanes within a road event (roadway segment)", - "type": "array", - "items": { - "$ref": "#/definitions/Lane" - } + { + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + }, + "beginning_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event begins", + "type": "string" + }, + "ending_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event ends", + "type": "string" + }, + "beginning_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event begins", + "type": "number", + "minimum": 0 + }, + "ending_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event ends", + "type": "number", + "minimum": 0 + }, + "beginning_accuracy": { + "$ref": "#/definitions/SpatialVerification" + }, + "ending_accuracy": { + "$ref": "#/definitions/SpatialVerification" + }, + "start_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "end_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "start_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "end_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "event_status": { + "$ref": "#/definitions/EventStatus" + }, + "vehicle_impact": { + "$ref": "#/definitions/VehicleImpact" + }, + "location_method": { + "$ref": "#/definitions/LocationMethod" + }, + "worker_presence": { + "$ref": "#/definitions/WorkerPresence" + }, + "reduced_speed_limit_kph": { + "description": "If applicable, the reduced speed limit posted within the road event, in kilometers per hour", + "type": "integer", + "minimum": 0 + }, + "restrictions": { + "description": "A list of zero or more restrictions applying to the road event", + "type": "array", + "items": { + "$ref": "#/definitions/Restriction" + } + }, + "types_of_work": { + "description": "A list of the types of work being done in a road event", + "type": "array", + "items": { + "$ref": "#/definitions/TypeOfWork" + } + }, + "lanes": { + "description": "A list of individual lanes within a road event (roadway segment)", + "type": "array", + "items": { + "$ref": "#/definitions/Lane" + } + } + }, + "required": [ + "core_details", + "beginning_accuracy", + "ending_accuracy", + "start_date", + "end_date", + "start_date_accuracy", + "end_date_accuracy", + "vehicle_impact", + "location_method" + ] } - }, - "required": [ - "core_details", - "beginning_accuracy", - "ending_accuracy", - "start_date", - "end_date", - "start_date_accuracy", - "end_date_accuracy", - "vehicle_impact", - "location_method" ] }, "DetourRoadEvent": { "title": "Detour Road Event", "description": "Descibes a detour on a roadway", "type": "object", - "properties": { - "core_details": { - "$ref": "#/definitions/RoadEventCoreDetails" - }, - "beginning_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event begins", - "type": "string" - }, - "ending_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event ends", - "type": "string" - }, - "beginning_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event begins", - "type": "number", - "minimum": 0 - }, - "ending_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event ends", - "type": "number", - "minimum": 0 - }, - "start_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "end_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "start_date_accuracy": { - "$ref": "#/definitions/TimeVerification" - }, - "end_date_accuracy": { - "$ref": "#/definitions/TimeVerification" + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "event_type": { + "const": "detour" + } + }, + "required": ["event_type"] + } + }, + "required": ["core_details"] }, - "event_status": { - "$ref": "#/definitions/EventStatus" + { + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + }, + "beginning_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event begins", + "type": "string" + }, + "ending_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event ends", + "type": "string" + }, + "beginning_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event begins", + "type": "number", + "minimum": 0 + }, + "ending_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event ends", + "type": "number", + "minimum": 0 + }, + "start_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "end_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "start_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "end_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "event_status": { + "$ref": "#/definitions/EventStatus" + } + }, + "required": [ + "core_details", + "start_date", + "end_date", + "start_date_accuracy", + "end_date_accuracy" + ] } - }, - "required": [ - "core_details", - "start_date", - "end_date", - "start_date_accuracy", - "end_date_accuracy" ] }, "Relationship": { From 87c63ada9477a50a44295effe444f1c96abfb8a3 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 00:01:16 -0500 Subject: [PATCH 305/388] Add SwzDeviceFeed example --- .../SwzDeviceFeed/arrow_board_example.geojson | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 create-feed/examples/SwzDeviceFeed/arrow_board_example.geojson diff --git a/create-feed/examples/SwzDeviceFeed/arrow_board_example.geojson b/create-feed/examples/SwzDeviceFeed/arrow_board_example.geojson new file mode 100644 index 00000000..3745812b --- /dev/null +++ b/create-feed/examples/SwzDeviceFeed/arrow_board_example.geojson @@ -0,0 +1,52 @@ +{ + "feed_info": { + "update_date": "2021-12-06T15:00:00Z", + "publisher": "TestVendor", + "contact_name": "Robert Vendor", + "contact_email": "robert.vendor@testvendor.com", + "update_frequency": 60, + "version": "1.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "ff55b721-bd18-4c21-8ad7-1b31fdddd876", + "organization_name": "Test Vendor Inc.", + "contact_name": "Timmy Testor", + "contact_email": "timmy.testor@testvendor.com", + "update_frequency": 60, + "update_date": "2021-12-06T14:54:12Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "280258a2-d131-4d8d-b5a7-2cef813b25a8", + "type": "Feature", + "properties": { + "core_details": { + "device_type": "arrow-board", + "data_source_id": "ff55b721-bd18-4c21-8ad7-1b31fdddd876", + "road_names": [ + "I-80", + "I-35" + ], + "device_status": "ok", + "has_automatic_location": true, + "name": "Arrow Board 1", + "update_date": "2021-12-06T14:54:12Z" + }, + "pattern": "right-arrow-flashing", + "is_moving": false, + "is_in_transport_position": false + }, + "geometry": { + "type": "Point", + "coordinates": [ + -93.776684050999961, + 41.617961698000045 + ] + } + } + ] +} \ No newline at end of file From 5109ceb90124fff2a9e70b92d7e495f063b9b783 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 08:53:23 -0500 Subject: [PATCH 306/388] Update wording in project README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9a914bbd..03116d0b 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ # Work Zone Data Exchange (WZDx) Specification The Work Zone Data Exchange (WZDx) Specification aims to make harmonized work zone data provided by infrastructure owners and operators (IOOs) available for third party use, making travel on public roads safer and more efficient through ubiquitous access to data on work zone activity. -The goal of WZDx is to enable widespread access to up-to-date information about dynamic conditions occurring on roads such as construction events. Currently, many IOOs maintain data on work zone activity. However, a lack of common data standards and convening mechanisms makes it difficult and costly for third parties such as original equipment manufacturers (OEMs) and navigation applications to access and use these data across various jurisdictions. WZDx seeks to be a common language for descrbing work zone information, simplying the design process for producers and the processing logic for consumers, and making work zone data more accessible. +The goal of WZDx is to enable widespread access to up-to-date information about dynamic conditions occurring on roads such as construction events. Currently, many IOOs maintain data on work zone activity. However, a lack of common data standards and convening mechanisms makes it difficult and costly for third parties such as original equipment manufacturers (OEMs) and navigation applications to access and use these data across various jurisdictions. WZDx defines a common language for describing work zone information. This simplifies the design process for producers and the processing logic for consumers and makes work zone data more accessible. -Specifically, WZDx defines the structure and content of several [GeoJSON](https://datatracker.ietf.org/doc/html/rfc7946) files that are each intended to be distributed as a data feed. The feeds describe a variety of high-level road work-related information such as the location and status of work zones, detours, and field devices. +Specifically, WZDx defines the structure and content of several [GeoJSON](https://datatracker.ietf.org/doc/html/rfc7946) documents that are each intended to be distributed as a data feed. The feeds describe a variety of high-level road work-related information such as the location and status of work zones, detours, and field devices. ## README Outline - [Data Feeds](#data-feeds) From a7f85e811503dd7742346ee75ef3163b7895b41f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 13:43:29 -0500 Subject: [PATCH 307/388] Move examples out of create-feed --- README.md | 16 +++--- create-feed/README.md | 52 +---------------- examples/README.md | 56 +++++++++++++++++++ .../arrow_board_ok_example.geojson | 0 .../camera_error_example.geojson | 53 ++++++++++++++++++ ...y_bidirectional_linestring_example.geojson | 0 ...cenario1_simple_linestring_example.geojson | 0 ...cenario1_simple_multipoint_example.geojson | 0 ...ario2_laneshift_linestring_example.geojson | 0 ...er_bidrectional_linestring_example.geojson | 0 ...cenario4_detour_linestring_example.geojson | 0 ...ario5_recurring_linestring_example.geojson | 0 12 files changed, 119 insertions(+), 58 deletions(-) create mode 100644 examples/README.md rename create-feed/examples/SwzDeviceFeed/arrow_board_example.geojson => examples/SwzDeviceFeed/arrow_board_ok_example.geojson (100%) create mode 100644 examples/SwzDeviceFeed/camera_error_example.geojson rename {create-feed/examples => examples}/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson (100%) rename {create-feed/examples => examples}/WZDxFeed/scenario1_simple_linestring_example.geojson (100%) rename {create-feed/examples => examples}/WZDxFeed/scenario1_simple_multipoint_example.geojson (100%) rename {create-feed/examples => examples}/WZDxFeed/scenario2_laneshift_linestring_example.geojson (100%) rename {create-feed/examples => examples}/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson (100%) rename {create-feed/examples => examples}/WZDxFeed/scenario4_detour_linestring_example.geojson (100%) rename {create-feed/examples => examples}/WZDxFeed/scenario5_recurring_linestring_example.geojson (100%) diff --git a/README.md b/README.md index 03116d0b..623d99ed 100644 --- a/README.md +++ b/README.md @@ -41,14 +41,14 @@ Two additional directories, [`images`](/images) and [`documents`](/documents), c ### Contents - [**Creating a WZDx Feed**](/create-feed) - - [**Example Feed GeoJSON Files**](/create-feed/examples) - - [Local Access Only (bidirectional)](/create-feed/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson) - - [Simple Work Zone (LineString)](/create-feed/examples/WZDxFeed/scenario1_simple_linestring_example.geojson) - - [Lane Shift](/create-feed/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson) - - [Shoulder Closure (bidirectional)](/create-feed/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson) - - [Detour](/create-feed/examples/WZDxFeed/scenario4_detour_linestring_example.geojson) - - [Recurring Work](/create-feed/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson) - - [Simple Work Zone (MultiPoint)](/create-feed/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson) + - [**Example Feed GeoJSON Files**](/examples) + - [Local Access Only (bidirectional)](/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson) + - [Simple Work Zone (LineString)](/examples/WZDxFeed/scenario1_simple_linestring_example.geojson) + - [Lane Shift](/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson) + - [Shoulder Closure (bidirectional)](/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson) + - [Detour](/examples/WZDxFeed/scenario4_detour_linestring_example.geojson) + - [Recurring Work](/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson) + - [Simple Work Zone (MultiPoint)](/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson) - [**Specification Content**](/spec-content) - [**Objects**](/spec-content/objects) - [WZDxFeed](/spec-content/objects/WZDxFeed.md) diff --git a/create-feed/README.md b/create-feed/README.md index 172d3e5f..eb76fd88 100644 --- a/create-feed/README.md +++ b/create-feed/README.md @@ -1,5 +1,5 @@ -# Creating the Feed -This directory contains information regarding creation of a WZDx feed, such as the feed format, example feed outputs, JSON schemas, and validation tools. +# Creating a Feed +This directory contains information regarding creation of a WZDx data feed, such as the feed format, business rules, and validation tools. ## Feed Format and File Type @@ -39,54 +39,6 @@ The figure below models the tables and their relationships. ![WZDx Object Diagram](/images/wzdx_object_diagram.jpg) -## Feed Examples -The following WZDx feed examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type. as well as one `MultiPoint` geometry type for scenario 1. - -Below is a summary of each of the example WZDx feeds and detailed differences for each of the road events: - -### Scenario 1 - Simple Work Zone -Scenario 1 ([Linestring](/create-feed/examples/WZDxFeed/scenario1_simple_linestring_example.geojson) or [MultiPoint](/create-feed/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) with a single lane closed on a multi-lane facility. - -- First work zone is single direction, single event, with no lane-level information (ID: `71234`). -- Second work zone is single direction, single event, with detailed lane information (ID: `WDM-58493-NB`). -- Third work zone is single direction, three sequential events, with detailed lane information. This work zone demonstrates the use of the `relationship` property, both `first` and `next` to indiciate the order of the road events and `parents` to indicate all road events are related (they all have `parents` as `65773`). (IDs: `65773-1`, `65773-2`, `65773-3`). - -### Scenario 2 - Lane Shift (simple scenario) -[Scenario 2](/create-feed/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. - -- Single work zone with lane shift in the detailed lane information showing use of verified location and start time. ("id": `7733`). - -### Scenario 3 - Shoulder Closure (bidirectional work zone) -[Scenario 3](/create-feed/examples/WZDxFeed/scenario3_shoulder_bidirectional_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. - -- Single work zone represented by two road events (IDs: `121388-EB`, `121388-WB`), one in direction of shoulder closure and second in opposite direction. -- Demonstrates the use of `restrictions` for the event as well as individual lanes -- Demonstrates the use of `relationship` to show the road events in each direction are related to a common parent (`121388`) - -### Scenario 4 - Road Closure with Detour on Arterial -[Scenario 4](/create-feed/examples/WZDxFeed/scenario4_detour_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. - -- Single work zone in one direction represented by a single road event (ID: `67890`), with a detour. -- Showing use of `relationship` `parents` and `children` to connect the detour road events (IDs: `67890-detour1`, `67890-detour2`, `67890-detour3`) to the work zone. -- Also uses `relationship` to represent the sequence of the three detour road events. -- Does not use `parents` to connect the work zone and all detour road events to a common parent (e.g. a project), but that approach is acceptable. -- Shows the use of both the work zone and detour road event objects in the same feed. - -### Scenario 5 - Recurring Work Zone -[Scenario 5](/create-feed/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. - -- Simple work zone but with a recurring component. -- Five road events: an `active` (day 1, ID: `PLK01012016-Day1`) event and four additional events (IDs: `PLK01012016-Day2`, `PLK01012016-Day3`, `PLK01012016-Day4`, `PLK01012016-Day5`) for later dates with a pending status. -- The `active` work zone event demonstrates value of verified location and time. -- The `relationship` property is used to show all road events are related (they have the same parent of `PLK01012016`). - -### Local Access Only (bidirectional work zone) -The [local access only example](/create-feed/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. - -- Single work zone on a bidirectional roadwith with impact to both directions, represented by two road events (IDs: `WZ389-NB`, `WZ389-SB`), one for each direction. -- Uses `local-access-only` [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). -- One road event shows basic details (not lane-level), while the opposite direction road event shows detailed lane information. The detailed lane information also includes a bike lane for reference. - ## Business Rules The following business rules help assure a standardized and interpretable use of the WZDx specification. The specification describes the required structure and data fields to describe a work zone, whereas business rules are additional requirements for using the WZDx specification in a standard manner. Note that business rules are distinct from best practices in that the latter are suggestions and business rules are requirements. diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 00000000..8ae4a196 --- /dev/null +++ b/examples/README.md @@ -0,0 +1,56 @@ +# WZDx Example Feeds +This directory contains GeoJSON documents that are example outputs from valid WZDx data feeds. The examples cover a range of common scenarios. There are examples for both the `WZDxFeed` and `SwzDeviceFeed`, contained within the respective subdirectories. + +## WZDxFeed Examples +The following `WZDxFeed` examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type. as well as one `MultiPoint` geometry type for scenario 1. + +Below is a summary of each of the example WZDx feeds and detailed differences for each of the road events: + +### Scenario 1 - Simple Work Zone +Scenario 1 ([LineString Example](/examples/WZDxFeed/scenario1_simple_linestring_example.geojson) or [MultiPoint Example](/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) with a single lane closed on a multi-lane facility. + +- First work zone is single direction, single event, with no lane-level information (ID: `71234`). +- Second work zone is single direction, single event, with detailed lane information (ID: `WDM-58493-NB`). +- Third work zone is single direction, three sequential events, with detailed lane information. This work zone demonstrates the use of the `relationship` property, both `first` and `next` to indiciate the order of the road events and `parents` to indicate all road events are related (they all have `parents` as `65773`). (IDs: `65773-1`, `65773-2`, `65773-3`). + +### Scenario 2 - Lane Shift (simple scenario) +The [Scenario 2 Example](/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which keeps all lanes open but shifts them resulting in both shoulders being closed on a multi-lane facility. + +- Single work zone with lane shift in the detailed lane information showing use of verified location and start time. ("id": `7733`). + +### Scenario 3 - Shoulder Closure (bidirectional work zone) +The [Scenario 3 Example](/examples/WZDxFeed/scenario3_shoulder_bidirectional_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which closes the shoulder in a single direction on an undivided roadway. + +- Single work zone represented by two road events (IDs: `121388-EB`, `121388-WB`), one in direction of shoulder closure and second in opposite direction. +- Demonstrates the use of `restrictions` for the event as well as individual lanes +- Demonstrates the use of `relationship` to show the road events in each direction are related to a common parent (`121388`) + +### Scenario 4 - Road Closure with Detour on Arterial +The [Scenario 4 Example](/examples/WZDxFeed/scenario4_detour_linestring_example.geojson) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) which has an associated detour for a road closure. The example is slightly modified for use on a multi-lane facility. + +- Single work zone in one direction represented by a single road event (ID: `67890`), with a detour. +- Showing use of `relationship` `parents` and `children` to connect the detour road events (IDs: `67890-detour1`, `67890-detour2`, `67890-detour3`) to the work zone. +- Also uses `relationship` to represent the sequence of the three detour road events. +- Does not use `parents` to connect the work zone and all detour road events to a common parent (e.g. a project), but that approach is acceptable. +- Shows the use of both the work zone and detour road event objects in the same feed. + +### Scenario 5 - Recurring Work Zone +The [Scenario 5 Example](/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson)) is based on the same numbered annotated work zones in [Discussion Topic 131](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131) assuming that it is just a single lane closure but is recurring over multiple days. + +- Simple work zone but with a recurring component. +- Five road events: an `active` (day 1, ID: `PLK01012016-Day1`) event and four additional events (IDs: `PLK01012016-Day2`, `PLK01012016-Day3`, `PLK01012016-Day4`, `PLK01012016-Day5`) for later dates with a pending status. +- The `active` work zone event demonstrates value of verified location and time. +- The `relationship` property is used to show all road events are related (they have the same parent of `PLK01012016`). + +### Local Access Only (bidirectional work zone) +The [local access only example](/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson) shows a basic work zone that keeps all lanes open but places restrictions to only local traffic. + +- Single work zone on a bidirectional roadwith with impact to both directions, represented by two road events (IDs: `WZ389-NB`, `WZ389-SB`), one for each direction. +- Uses `local-access-only` [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). +- One road event shows basic details (not lane-level), while the opposite direction road event shows detailed lane information. The detailed lane information also includes a bike lane for reference. + +## SwzDeviceFeed Examples +The following example `SwzDeviceFeed`s are provided: + +1. [Arrow Board "ok" Example](/examples/SwzDeviceFeed/arrow_board_ok_example.geojson): A simple feed that includes a single arrow board with an `ok` status and several optional properties provided. +2. [Camera "error" Example](/examples/SwzDeviceFeed/camera_error_example): A simple feed that includes a single camera with an `error` status, associated `status_messages`, and a few optional properties provided. \ No newline at end of file diff --git a/create-feed/examples/SwzDeviceFeed/arrow_board_example.geojson b/examples/SwzDeviceFeed/arrow_board_ok_example.geojson similarity index 100% rename from create-feed/examples/SwzDeviceFeed/arrow_board_example.geojson rename to examples/SwzDeviceFeed/arrow_board_ok_example.geojson diff --git a/examples/SwzDeviceFeed/camera_error_example.geojson b/examples/SwzDeviceFeed/camera_error_example.geojson new file mode 100644 index 00000000..e1f8a554 --- /dev/null +++ b/examples/SwzDeviceFeed/camera_error_example.geojson @@ -0,0 +1,53 @@ +{ + "feed_info": { + "update_date": "2021-12-06T15:00:00Z", + "publisher": "TestVendor", + "contact_name": "Robert Vendor", + "contact_email": "robert.vendor@testvendor.com", + "update_frequency": 60, + "version": "1.0", + "license": "https://creativecommons.org/publicdomain/zero/1.0/", + "data_sources": [ + { + "data_source_id": "ff55b721-bd18-4c21-8ad7-1b31fdddd876", + "organization_name": "Test Vendor Inc.", + "contact_name": "Timmy Testor", + "contact_email": "timmy.testor@testvendor.com", + "update_frequency": 60, + "update_date": "2021-12-06T14:54:12Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "f18dd2ab-6f1a-4039-8012-54c677be18ab", + "type": "Feature", + "properties": { + "core_details": { + "device_type": "camera", + "data_source_id": "ff55b721-bd18-4c21-8ad7-1b31fdddd876", + "road_names": [ + "US-1", + "I-295", + "ME-26" + ], + "device_status": "error", + "has_automatic_location": true, + "status_messages": [ + "Failed to capture image." + ], + "name": "Tukey's Bridge North CCTV", + "update_date": "2021-12-06T14:54:12Z" + } + }, + "geometry": { + "type": "Point", + "coordinates": [ + 43.676800032123545, + -70.25631689267998 + ] + } + } + ] +} \ No newline at end of file diff --git a/create-feed/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson b/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson similarity index 100% rename from create-feed/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson rename to examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson diff --git a/create-feed/examples/WZDxFeed/scenario1_simple_linestring_example.geojson b/examples/WZDxFeed/scenario1_simple_linestring_example.geojson similarity index 100% rename from create-feed/examples/WZDxFeed/scenario1_simple_linestring_example.geojson rename to examples/WZDxFeed/scenario1_simple_linestring_example.geojson diff --git a/create-feed/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson b/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson similarity index 100% rename from create-feed/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson rename to examples/WZDxFeed/scenario1_simple_multipoint_example.geojson diff --git a/create-feed/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson b/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson similarity index 100% rename from create-feed/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson rename to examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson diff --git a/create-feed/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson b/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson similarity index 100% rename from create-feed/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson rename to examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson diff --git a/create-feed/examples/WZDxFeed/scenario4_detour_linestring_example.geojson b/examples/WZDxFeed/scenario4_detour_linestring_example.geojson similarity index 100% rename from create-feed/examples/WZDxFeed/scenario4_detour_linestring_example.geojson rename to examples/WZDxFeed/scenario4_detour_linestring_example.geojson diff --git a/create-feed/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson b/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson similarity index 100% rename from create-feed/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson rename to examples/WZDxFeed/scenario5_recurring_linestring_example.geojson From a3ba9664b8c18b7ef9cca030920f0421822d925f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 15:01:11 -0500 Subject: [PATCH 308/388] Replace create-feed directory with Markdown file --- Creating_a_WZDx_Feed.md | 59 ++++++++++++++ README.md | 94 ++++------------------- create-feed/README.md | 77 ------------------- examples/README.md | 2 +- spec-content/enumerated-types/LaneType.md | 2 +- 5 files changed, 78 insertions(+), 156 deletions(-) create mode 100644 Creating_a_WZDx_Feed.md delete mode 100644 create-feed/README.md diff --git a/Creating_a_WZDx_Feed.md b/Creating_a_WZDx_Feed.md new file mode 100644 index 00000000..178464fd --- /dev/null +++ b/Creating_a_WZDx_Feed.md @@ -0,0 +1,59 @@ +# Creating a WZDx Feed +This documents contains information to assist in creating a WZDx data feed, such as the feed format, business rules, and validation tools. + +## Feed Format and File Type +WZDx feeds are formatted according to the [GeoJSON](https://geojson.org/) specification. The output of a WZDx feed is a GeoJSON document (a `.geojson` file) that contains a single [GeoJSON FeatureCollection](https://datatracker.ietf.org/doc/html/rfc7946#section-3.3) which includes information about the feed (see the [FeedInfo Object](/spec-content/objects/FeedInfo.md)) and a list of [GeoJSON Feature](https://datatracker.ietf.org/doc/html/rfc7946#section-3.2)s describing entities specific to the type of feed, such as work zones. + +### Why GeoJSON? +GeoJSON is the file format of choice because: + +- It is a lightweight data exchange format. +- It is easy for humans to read and write. +- It is easy for machines to parse and generate. +- The format is designed to exchange spatial data, which is a primary goal of the Work Zone Data Working Group. +- It is an open specification and does not carry licensing burdens. +- GeoJSON formatted-data is published as text files, so there is a low technological burden of entry. +- GeoJSON validation, mapping, and visualization tools already exist and will ease adoption by producers and consumers. + +A WZDx feed contains a single entry describing aspects of the feed itself (such as version) as well as one or more entries which describe a work zone's (generically: road event) characteristics along a single road segment in a single direction. + +The tables below detail the specificaton's content and describe the data used to build the feed. + +## Feed Content +WZDx defines the content and structure of several data feeds. Each feed is described by a single root object with many child objects. The output of a WZDx data feed is a GeoJSON file containing the feed object. WZDx defines the following feed objects: + +- [WZDxFeed Object](/spec-content/objects/WZDxFeed.md): describes high-level information about work zone events ocurring on roadways (called "road events") that impact the characteristics of the roadway and involve a change the roadway from the default state (such as a lane closure). This is the original work zone data exchange feed and the only feed that WZDx defined until [version 4.0](https://github.com/usdot-jpo-ode/wzdx/releases/tag/v4.0). +- [SwzDeviceFeed Object](/spec-content/objects/SwzDeviceFeed): describes information (location, status, live data) about field devices deployed on the roadway in work zones. + +*See the [/spec-content/README.md](/spec-content/README.md) for detailed information on all objects defined by WZDx.* + +## Business Rules +The following business rules help assure a standardized and interpretable use of the WZDx specification. The specification describes the required structure and data fields to describe a work zone, whereas business rules are additional requirements for using the WZDx specification in a standard manner. Note that business rules are distinct from best practices in that the latter are suggestions and business rules are requirements. + +### WZDxFeed (Work Zones) Business Rules +1. Each direction of travel must be represented by a separate road event. For example, if there is a work zone on a roadway with two lanes, each in an opposite travel direction (↑↓), each direction must be a separate road event. +2. Construction which requires alternating traffic flows within a lane must be represented with at least one road event in each direction. Similarly, roadways that during normal operation have an alternating flow of traffic direction based on time of day must be represented by at least one road event in each direction. +3. The preferred [GeoJSON Geometry](https://tools.ietf.org/html/rfc7946#page-7) for a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) is `LineString`, which allows indicating the full path of the road event. In cases where only the beginning and ending coordinates are available, the `MultiPoint` can be used. +4. A cascading multi-lane closure should consider the speed of vehicles traveling through the work zone. If the distance between lane closures is short enough that time in a to-be-closed lane is not significant, which is common, the to-be-closed lane should be represented as closed to avoid traffic delays and potential crashes. +5. A detour must be represented with a [RoadEvent](/spec-content/objects/RoadEvent.md) of type (i.e. with `event_type` of) `detour` and its containing [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) should have a `geometry` of `type` `LineString` to represent the full detour route. The detour road event should be connected to the work zone road event using the `relationship` property on the detour road event. +6. If the `lanes` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object is provided, it must include one entry for every lane in the road event. Providing lane information for only some of the lanes in a road event is not allowed. + +## Data Validation + +### JSON Schemas +The WZDx Specification defines a JSON schema for each feed (WZDx v2.0 and later) within the [schemas](/schemas) directory. The repository contains schemas for the following feeds: + +#### Current +- [WZDx v4.0 WZDxFeed](/schemas/4.0/WZDxFeed.json) +- [WZDx v4.0 SwzDeviceFeed](/schemas/4.0/SwzDeviceFeed.json) + +#### Previous +- [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) +- [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) +- [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) + +### Self-Validation Checklist +For a list of steps to take to make sure your data feed conforms to the specification and is ready to publish, follow the [Self-Validation Checklist](/documents/WZDx_Data_Feed_Self-Validation_Checklist.docx). + +### WZDx v1.1 +To validate data feeds and measure compliance with the v1.1 specification, the GSA/18F team developed a [prototype data validation tool](https://github.com/18F/usdot-jpo-ode-workzone-data-exchange/wiki). \ No newline at end of file diff --git a/README.md b/README.md index 623d99ed..d5caa6e7 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ Specifically, WZDx defines the structure and content of several [GeoJSON](https: ## README Outline - [Data Feeds](#data-feeds) - [Repository Organization](#repostitory-organization) -- [Contents](#contents) - [Project Description](#project-description) - [Contact Information](#contact-information) - [Release Notes](#release-notes) @@ -31,81 +30,20 @@ Feed Name | Description | Producer | Consumer | Uses | Content `SwzDeviceFeed` | Provides information (location, status, live data) about field devices deployed on the roadway in work zones. | Smart work zone equipment manufacturers or vendors. | Agencies responsible for managing roadways and permitting work, typically state and local DOTs. Third-parties such as mapping companies and CAVs may also be interested in field device information. | Simplifies design process for agencies wanting to interface with equipment manufacturers; aids in dynamically generating a `WZDxFeed` with accurate information; reduces effort for manufacturers to conform to different agencies requirements. | Field devices (see [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)). ## Repostitory Organization -The WZDx Specification repository contains two main subdirectories, each containing their own README file with additional information about the purpose and files within: - -1. [`create-feed`](/create-feed), which contains information regarding the creation of a WZDx feed, including feed format, example feeds, JSON schemas, and validation tools. -2. [`spec-content`](/spec-content), which details the data content of the WZDx specification, including objects, property names and types, and enumerated types. -3. [`schemas`](/schemas), which contains JSON Schemas for the feeds defined by WZDx. - -Two additional directories, [`images`](/images) and [`documents`](/documents), contain the images that are referenced throughout the repository and PDF and Word documents such as the WZDx Early Adopter's Guide and WZDx Data Feed Self Validation Checklist. - -### Contents -- [**Creating a WZDx Feed**](/create-feed) - - [**Example Feed GeoJSON Files**](/examples) - - [Local Access Only (bidirectional)](/examples/WZDxFeed/local_access_only_bidirectional_linestring_example.geojson) - - [Simple Work Zone (LineString)](/examples/WZDxFeed/scenario1_simple_linestring_example.geojson) - - [Lane Shift](/examples/WZDxFeed/scenario2_laneshift_linestring_example.geojson) - - [Shoulder Closure (bidirectional)](/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson) - - [Detour](/examples/WZDxFeed/scenario4_detour_linestring_example.geojson) - - [Recurring Work](/examples/WZDxFeed/scenario5_recurring_linestring_example.geojson) - - [Simple Work Zone (MultiPoint)](/examples/WZDxFeed/scenario1_simple_multipoint_example.geojson) -- [**Specification Content**](/spec-content) - - [**Objects**](/spec-content/objects) - - [WZDxFeed](/spec-content/objects/WZDxFeed.md) - - [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) - - [FeedInfo](/spec-content/objects/FeedInfo.md) - - [FeedDataSource](/spec-content/objects/FeedDataSource.md) - - [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) - - [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md) - - [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) - - [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) - - [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) - - [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) - - [TypeOfWork](/spec-content/objects/TypeOfWork.md) - - [Lane](/spec-content/objects/Lane.md) - - [Restriction](/spec-content/objects/Restriction.md) - - [Relationship](/spec-content/objects/Relationship.md) - - [ArrowBoard](/spec-content/objects/ArrowBoard.md) - - [Camera](/spec-content/objects/Camera.md) - - [DynamicMessageSign](spec-content/objects/DynamicMessageSign.md) - - [FlashingBeacon](/spec-content/objects/FlashingBeacon.md) - - [HybridSign](/spec-content/objects/HybridSign.md) - - [LocationMarker](/spec-content/objects/LocationMarker.md) - - [MarkedLocation](/spec-content/objects/MarkedLocation.md) - - [TrafficSensor](/spec-content/objects/TrafficSensor.md) - - [TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) - - [WorkerPresence](/spec-content/objects/WorkerPresence.md) - - [**Enumerated Types**](/spec-content/enumerated-types) - - [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) - - [Direction](/spec-content/enumerated-types/Direction.md) - - [EventStatus](/spec-content/enumerated-types/EventStatus.md) - - [EventType](/spec-content/enumerated-types/EventType.md) - - [FlashingBeaconFunction](/spec-content/enumerated-types/FlashingBeaconFunction.md) - - [FieldDeviceStatus](/spec-content/enumerated-types/FieldDeviceStatus.md) - - [FieldDeviceType](/spec-content/enumerated-types/FieldDeviceType.md) - - [HybridSignDynamicMessageFunction](/spec-content/enumerated-types/HybridSignDynamicMessageFunction.md) - - [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) - - [LaneType](/spec-content/enumerated-types/LaneType.md) - - [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) - - [MarkedLocationType](/spec-content/enumerated-types/MarkedLocationType.md) - - [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) - - [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) - - [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) - - [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) - - [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) - - [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) - - [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) - - [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) - - [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) -- [**JSON Schemas**](/schemas) - - [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) - - [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) - - [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) - - [WZDx v4.0 WZDxFeed](/schemas/4.0/WZDxFeed.json) - - [WZDx v4.0 SwzDeviceFeed](/schemas/4.0/SwzDeviceFeed.json) -- [**Images Used throughout the Specification**](/images) - - [Object Diagram](/images/wzdx_object_diagram.jpg) - - [Object Diagram editable draw.io file](/images/wzdx_object_diagram.drawio) +The WZDx Specification repository contains several files and subdirectories. + +### Directories +1. [documents](/documents): supplementary PDF and Word documents such as the WZDx Early Adopter's Guide and WZDx Data Feed Self Validation Checklist. +2. [examples](/examples): example GeoJSON documents from WZDx data feeds. [examples/README.md](/examples/README.md) describes the content of this directory in detail. +3. [images](/images): the images that are referenced by other Markdown files in the repository. +4. [spec-content](/spec-content): details the data content of the WZDx specification, including objects, property names and types, and enumerated types. [spec-content/README.md](/spec-content/README.md) describes the content of this directory in detail. +5. [schemas](/schemas): contains [JSON Schema](https://json-schema.org/)s for each of the feeds defined by WZDx for feed validation. + +### Files +1. [Creating_a_WZDx_Feed.md](/Creating_a_WZDx_Feed.md): information to assist in creating a WZDx data feed, such as the feed format, business rules, and validation tools. +2. [LICENSE](/LICENSE): the Creative Commons Zero v1.0 Universal license that the repository is licensed under. +3. [README.md](/README.md) (this document): information about the WZDx effort and navigating the repository. +4. [RELEASES.md](/RELEASES.md): detailed information about every release of the WZDx specification. ## Project Description @@ -127,7 +65,9 @@ Several data producers and data users voluntarily developed v1.1 of the specific Going forward, the [Work Zone Data Working Group (WZDWG)](https://github.com/usdot-jpo-ode/wzdx/wiki), established under the Federal Geographic Data Committee (FGDC) Transportation Subcommittee (TSC) will maintain the WZDx Specification with the goal of publishing incremental updates to refine the features, attributes, and vocabulary needed to model work zone activity data. **How can I get help with implementation?** -This project repository will be continually updated with resources to help with implementation - in the meantime, please make a GitHub issue or discussion entry if you need help implementing the WZDx Specification or have questions. +Review [Creating_a_WZDx_Feed.md](/Creating_a_WZDx_Feed.md) which contains information to assist in creating a WZDx data feed, such as the feed format, business rules, and validation tools. + +This project repository will be continually updated with resources to help with implementation - in the meantime, please make a [new GitHub discussion](https://github.com/usdot-jpo-ode/wzdx/discussions/new) if you need help implementing the WZDx Specification or have questions. The Federal Highway Administration is leading efforts, via the [Work Zone Data Initiative (WZDI)](https://ops.fhwa.dot.gov/wz/wzdx/index.htm#wzdi), to develop a standard approach for collecting, organizing, and sharing data on the “when”, “where,” and “how” of work zone deployment. As part of this effort, key documents have been developed and made publicly available: diff --git a/create-feed/README.md b/create-feed/README.md deleted file mode 100644 index eb76fd88..00000000 --- a/create-feed/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# Creating a Feed -This directory contains information regarding creation of a WZDx data feed, such as the feed format, business rules, and validation tools. - -## Feed Format and File Type - -Since v2.0, WZDx has been formatted according to the [GeoJSON](https://geojson.org/) specification. GeoJSON is the file format of choice because: - -- It is a lightweight data exchange format. -- It is easy for humans to read and write. -- It is easy for machines to parse and generate. -- The format is designed to exchange spatial data, which is a primary goal of the Work Zone Data Working Group. -- It is an open specification and does not carry licensing burdens. -- GeoJSON formatted-data is published as text files, so there is a low technological burden of entry. -- GeoJSON validation, mapping, and visualization tools already exist and will ease adoption by producers and consumers. - -A WZDx feed contains a single entry describing aspects of the feed itself (such as version) as well as one or more entries which describe a work zone's (generically: road event) characteristics along a single road segment in a single direction. - -The tables below detail the specificaton's content and describe the data used to build the feed. - -## Objects -### WZDx Feed Information - -- The [FeedInfo](/spec-content/objects/FeedInfo.md) object describes the data feed. -- The [FeedDataSource](/spec-content/objects/FeedDataSource.md) object describes the data sources used to build the work zone data feed. - -### WZDx Work Zone (Road Event) Information - -- The [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) object represents the core details of an event occurring on a roadway (i.e. a "road event") that applies to all types of road events. -- The [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object describes a work zone event. -- The [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) object describes a detour event. -- The [TypeOfWork](/spec-content/objects/TypeOfWork.md) object describes the work taking place along the road. If applicable, it indicates if the work changes the roadway's architecture. -- The [Restriction](/spec-content/objects/Restriction.md) object describes a restriction on a roadway or lane. -- The [Lane](/spec-content/objects/Lane.md) object identifies and describes individual lanes within an event. -- The [Relationship](/spec-content/objects/Relationship.md) object identifies sequential and hierarchical relationships between road events and other entities. - -The figure below models the tables and their relationships. - -## Work Zone Data Object Diagram - -![WZDx Object Diagram](/images/wzdx_object_diagram.jpg) - -## Business Rules -The following business rules help assure a standardized and interpretable use of the WZDx specification. The specification describes the required structure and data fields to describe a work zone, whereas business rules are additional requirements for using the WZDx specification in a standard manner. Note that business rules are distinct from best practices in that the latter are suggestions and business rules are requirements. - -1. Each direction of travel must be represented by a separate road event. For example, if there is a work zone on a roadway with two lanes, each in an opposite travel direction (↑↓), each direction must be a separate road event. -2. Construction which requires alternating traffic flows within a lane must be represented with at least one road event in each direction. Similarly, roadways that during normal operation have an alternating flow of traffic direction based on time of day must be represented by at least one road event in each direction. -3. The preferred [GeoJSON Geometry](https://tools.ietf.org/html/rfc7946#page-7) for a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) is `LineString`, which allows indicating the full path of the road event. In cases where only the beginning and ending coordinates are available, the `MultiPoint` can be used. -4. A cascading multi-lane closure should consider the speed of vehicles traveling through the work zone. If the distance between lane closures is short enough that time in a to-be-closed lane is not significant, which is common, the to-be-closed lane should be represented as closed to avoid traffic delays and potential crashes. -5. A detour must be represented with a [RoadEvent](/spec-content/objects/RoadEvent.md) of type (i.e. with `event_type` of) `detour` and its containing [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) should have a `geometry` of `type` `LineString` to represent the full detour route. The detour road event should be connected to the work zone road event using the `relationship` property on the detour road event. -6. If the `lanes` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object is provided, it must include one entry for every lane in the road event. Providing lane information for only some of the lanes in a road event is not allowed. - -## Data Validation -### WZDx v2.0 and later -Use the corresponding JSON schema linked above to validate WZDx v2.0 and later. - -### WZDx v1.0 -To validate data feeds and measure compliance with the v1.1 specification, the GSA/18F team have developed a prototype data validation tool. This validation service that checks work zone activities against the WZDx v1.1 JSON schema specification is available [here](https://github.com/18F/usdot-jpo-ode-workzone-data-exchange/wiki). - -### Self-Validation Checklist -For a list of steps to take to make sure your data feed is ready to publish, follow the [Self-Validation Checklist](/documents/WZDx_Data_Feed_Self-Validation_Checklist.docx) - -## Collaborate via GitHub -GitHub is an open-source repository hosting service that allows for the storage and collaboration of data projects with version control (tracks changes and allows you to revert to previous iterations). The GitHub workflow is comprised of following steps: -- **Creating a Branch** - Branching allows you to make a copy of your project (i.e., the master branch) so that you keep your master branch clean (i.e., free of changes). This copy lets you experiment with new features (e.g., new data fields). -- **Adding Commits** - A commit is any change made to your project that you can track, allowing you to create a record of your work that others can use as reference. -- **Opening a Pull Request** - Pull requests allow you to alert others on your team to review and discuss your changes. -- **Discussing and Reviewing Commits** - This part of the process allows reviewers on your team or the DAVI Data Team check that the spec is properly implemented (e.g., that data types are correctly specified in the JSON schema). -- **Merging to Master Branch** - Once your commits have been reviewed and approved, you can push your changes to merge with the master branch. - -A more in-depth [tutorial is available here](https://guides.github.com/introduction/flow/). - -To start collaborating, [join GitHub](https://github.com/) by creating free [organization and user accounts](https://help.github.com/articles/differences-between-user-and-organization-accounts/) for your team. - -### How Do I Get Help? -To interact directly with the DAVI Data Team and to get help implementing the spec for your data, post an **issue** under the **help wanted** label on the Work Zone GitHub site. - -![Posting An Issue](/images/issues.png) diff --git a/examples/README.md b/examples/README.md index 8ae4a196..5d303a03 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,5 +1,5 @@ # WZDx Example Feeds -This directory contains GeoJSON documents that are example outputs from valid WZDx data feeds. The examples cover a range of common scenarios. There are examples for both the `WZDxFeed` and `SwzDeviceFeed`, contained within the respective subdirectories. +This directory contains example GeoJSON documents from WZDx data feeds. The examples cover a range of common scenarios. There are examples for both the `WZDxFeed` and `SwzDeviceFeed`, contained within the respective subdirectories. ## WZDxFeed Examples The following `WZDxFeed` examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type. as well as one `MultiPoint` geometry type for scenario 1. diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index b7621a74..41e5df7a 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -13,7 +13,7 @@ Value | Description `bike-lane` | A lane on the roadway for use by cyclists only. `shoulder` | A portion of the roadway that is outside (either right or left) of the main travel lanes. A shoulder can have many uses but is not intended for general traffic. `parking` | A lane used for parking, not allowed for travel. -`median` | An often unpaved, non-drivable area that separates sections of the roadway. In most cases a median should only be described if it separates lanes in a single direction of travel, as per [business rule #1](/create-feed/README.md#business-rules) each direction of travel must be represented by a separate road event. +`median` | An often unpaved, non-drivable area that separates sections of the roadway. In most cases a median should only be described if it separates lanes in a single direction of travel, as per [business rule #1](/Creating_a_WZDx_Feed.md#business-rules) each direction of travel must be represented by a separate road event. `center-left-turn-lane` | A lane in the center of a bidirectional roadway that traffic from both directions uses to make a left turn. ## Used By From 67580901662ea3121b2a1faad1efb31f55bdade0 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 15:08:08 -0500 Subject: [PATCH 309/388] Remove out of context paragraph from Creating_a_WZDx_Feed.md --- Creating_a_WZDx_Feed.md | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Creating_a_WZDx_Feed.md b/Creating_a_WZDx_Feed.md index 178464fd..48ca334c 100644 --- a/Creating_a_WZDx_Feed.md +++ b/Creating_a_WZDx_Feed.md @@ -15,10 +15,6 @@ GeoJSON is the file format of choice because: - GeoJSON formatted-data is published as text files, so there is a low technological burden of entry. - GeoJSON validation, mapping, and visualization tools already exist and will ease adoption by producers and consumers. -A WZDx feed contains a single entry describing aspects of the feed itself (such as version) as well as one or more entries which describe a work zone's (generically: road event) characteristics along a single road segment in a single direction. - -The tables below detail the specificaton's content and describe the data used to build the feed. - ## Feed Content WZDx defines the content and structure of several data feeds. Each feed is described by a single root object with many child objects. The output of a WZDx data feed is a GeoJSON file containing the feed object. WZDx defines the following feed objects: From 250f99f39455610a15a644ac6949cd8d41a1dba6 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 15:12:11 -0500 Subject: [PATCH 310/388] Fix link and add related helpful tip in project README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d5caa6e7..18b2e41d 100644 --- a/README.md +++ b/README.md @@ -109,11 +109,11 @@ The WZDWG welcomes feedback and comments on the WZDx 3.1 Specification. Comments 2. Learn about using GitHub as a [tool for collaboration and support](/create-feed/README.md#collaborate-via-github). 3. Use [Specification Content](/spec-content) page to understand the data components of the specification. 4. [Create your own feed](/create-feed) using example feeds and follow the business rules. -5. Validate your feed output using the [WZDx v4.0 Feed JSON Schema](/schemas/wzdx_v4.0_feed.json) +5. Validate your feed output using the respective [JSON Schema](#json-schemas). 6. Publish your feed and tell us about it via avdx@dot.gov. ## JSON Schemas -The WZDx Specification defines a JSON schema for each feed within the [schemas](/schemas) directory. The repository contains schemas for the following feeds: +The WZDx Specification defines a JSON schema for each feed within the [schemas](/schemas) directory. Schemas can be used to validate a WZDx feed document for compliance to the specification. The repository contains schemas for the following feeds: ### Current - [WZDx v4.0 WZDxFeed](/schemas/4.0/WZDxFeed.json) From f12c1bb2d01df8ec8495b8b0aa8b4bb844f23f81 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 15:14:49 -0500 Subject: [PATCH 311/388] Update FeedDataSource schema title for consistency --- schemas/4.0/FeedDataSource.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/4.0/FeedDataSource.json b/schemas/4.0/FeedDataSource.json index 0e9a1522..40c820bd 100644 --- a/schemas/4.0/FeedDataSource.json +++ b/schemas/4.0/FeedDataSource.json @@ -1,7 +1,7 @@ { "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedDataSource.json", "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Feed Data Source", + "title": "WZDx Feed Data Source", "description": "Describes information about a specific data source used to build the work zone data feed", "type": "object", "properties": { From 8a90f3b4504b936f34940af51732b2251fbd0902 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 17:13:16 -0500 Subject: [PATCH 312/388] Update of old schemas --- schemas/wzdx_v2.0_feed.json | 2 +- schemas/wzdx_v3.0_feed.json | 2 +- schemas/wzdx_v3.1_feed.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/schemas/wzdx_v2.0_feed.json b/schemas/wzdx_v2.0_feed.json index 04962429..08ce7176 100644 --- a/schemas/wzdx_v2.0_feed.json +++ b/schemas/wzdx_v2.0_feed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/schemas/wzdx_v2.0_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v2.0_feed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v2.0 Feed", "description": "The GeoJSON output of a WZDx v2.0 data feed", diff --git a/schemas/wzdx_v3.0_feed.json b/schemas/wzdx_v3.0_feed.json index f1fdd756..9c8ab968 100644 --- a/schemas/wzdx_v3.0_feed.json +++ b/schemas/wzdx_v3.0_feed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/schemas/wzdx_v3.0_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v3.0_feed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.0 Feed", "description": "The GeoJSON output of a WZDx v3.0 data feed", diff --git a/schemas/wzdx_v3.1_feed.json b/schemas/wzdx_v3.1_feed.json index 8a03c08f..502b9a3c 100644 --- a/schemas/wzdx_v3.1_feed.json +++ b/schemas/wzdx_v3.1_feed.json @@ -1,6 +1,6 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/master/schemas/wzdx_v3.1_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v3.1_feed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.1 Feed", "description": "The GeoJSON output of a WZDx v3.1 data feed", From a32b765ba50e8455d3dfe63830b6084f3128f8bf Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 17:35:31 -0500 Subject: [PATCH 313/388] Fix link --- Creating_a_WZDx_Feed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Creating_a_WZDx_Feed.md b/Creating_a_WZDx_Feed.md index 48ca334c..dc33af77 100644 --- a/Creating_a_WZDx_Feed.md +++ b/Creating_a_WZDx_Feed.md @@ -19,7 +19,7 @@ GeoJSON is the file format of choice because: WZDx defines the content and structure of several data feeds. Each feed is described by a single root object with many child objects. The output of a WZDx data feed is a GeoJSON file containing the feed object. WZDx defines the following feed objects: - [WZDxFeed Object](/spec-content/objects/WZDxFeed.md): describes high-level information about work zone events ocurring on roadways (called "road events") that impact the characteristics of the roadway and involve a change the roadway from the default state (such as a lane closure). This is the original work zone data exchange feed and the only feed that WZDx defined until [version 4.0](https://github.com/usdot-jpo-ode/wzdx/releases/tag/v4.0). -- [SwzDeviceFeed Object](/spec-content/objects/SwzDeviceFeed): describes information (location, status, live data) about field devices deployed on the roadway in work zones. +- [SwzDeviceFeed Object](/spec-content/objects/SwzDeviceFeed.md): describes information (location, status, live data) about field devices deployed on the roadway in work zones. *See the [/spec-content/README.md](/spec-content/README.md) for detailed information on all objects defined by WZDx.* From f03ea4c342857aff70000390ee8c81483fe94170 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 18:42:22 -0500 Subject: [PATCH 314/388] Fix typo --- Creating_a_WZDx_Feed.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Creating_a_WZDx_Feed.md b/Creating_a_WZDx_Feed.md index dc33af77..3abe19ff 100644 --- a/Creating_a_WZDx_Feed.md +++ b/Creating_a_WZDx_Feed.md @@ -18,7 +18,7 @@ GeoJSON is the file format of choice because: ## Feed Content WZDx defines the content and structure of several data feeds. Each feed is described by a single root object with many child objects. The output of a WZDx data feed is a GeoJSON file containing the feed object. WZDx defines the following feed objects: -- [WZDxFeed Object](/spec-content/objects/WZDxFeed.md): describes high-level information about work zone events ocurring on roadways (called "road events") that impact the characteristics of the roadway and involve a change the roadway from the default state (such as a lane closure). This is the original work zone data exchange feed and the only feed that WZDx defined until [version 4.0](https://github.com/usdot-jpo-ode/wzdx/releases/tag/v4.0). +- [WZDxFeed Object](/spec-content/objects/WZDxFeed.md): describes high-level information about work zone events ocurring on roadways (called "road events") that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). This is the original work zone data exchange feed and the only feed that WZDx defined until [version 4.0](https://github.com/usdot-jpo-ode/wzdx/releases/tag/v4.0). - [SwzDeviceFeed Object](/spec-content/objects/SwzDeviceFeed.md): describes information (location, status, live data) about field devices deployed on the roadway in work zones. *See the [/spec-content/README.md](/spec-content/README.md) for detailed information on all objects defined by WZDx.* diff --git a/README.md b/README.md index 18b2e41d..d6cf9ad2 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ WZDx defines the structure and content of multiple distinct data feeds. Each fee ### List of Data Feeds Feed Name | Description | Producer | Consumer | Uses | Content --- | --- | --- | --- | --- | --- -`WZDxFeed` | Provides high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change the roadway from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. | Agencies responsible for managing roadways and road work, typically state and local DOTs. | Traveling public via third parties such as mapping companies and CAVs. | Route planning; increased awareness; "put work zones on the map". | Work zone and detour road events (see [RoadEventFeature](/spec-content/objects/RoadEventFeature.md)). +`WZDxFeed` | Provides high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. | Agencies responsible for managing roadways and road work, typically state and local DOTs. | Traveling public via third parties such as mapping companies and CAVs. | Route planning; increased awareness; "put work zones on the map". | Work zone and detour road events (see [RoadEventFeature](/spec-content/objects/RoadEventFeature.md)). `SwzDeviceFeed` | Provides information (location, status, live data) about field devices deployed on the roadway in work zones. | Smart work zone equipment manufacturers or vendors. | Agencies responsible for managing roadways and permitting work, typically state and local DOTs. Third-parties such as mapping companies and CAVs may also be interested in field device information. | Simplifies design process for agencies wanting to interface with equipment manufacturers; aids in dynamically generating a `WZDxFeed` with accurate information; reduces effort for manufacturers to conform to different agencies requirements. | Field devices (see [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)). ## Repostitory Organization From ed121294b26a42761cf7b97446926e3d11224b21 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 19:01:53 -0500 Subject: [PATCH 315/388] Update spec-content README --- spec-content/README.md | 60 ++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 23 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index 92911837..50067d2a 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -1,16 +1,18 @@ # WZDx Specification Content -The WZDx specification describes the content and structure of a WZDx GeoJSON document. It defines distinct entities called objects which contain the data content (called fields or properties) of each entity. The structure of and relationship between objects describes how the GeoJSON output of a WZDx feed looks. Objects are found in the [objects](/spec-content/objects) directory. +The WZDx specification defines the content and structure of several GeoJSON documents, each intended to be distributed as a data feed. Each GeoJSON document (colloquially "feed") contains a single feed root object. WZDx v4.0 defines the following feed objects: -The value of some properties of an object are restricted to a defined set of values. These enumerations are found in the [enumerated-types](/spec-content/enumerated-types) directory. +- [WZDxFeed](/spec-content/objects/WZDxFeed.md): describes high-level information about work zone events ocurring on roadways (called "road events") that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). This is the original work zone data exchange feed and the only feed that WZDx defined until [version 4.0](https://github.com/usdot-jpo-ode/wzdx/releases/tag/v4.0). +- [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md): describes information (location, status, live data) about field devices deployed on the roadway in work zones. -## Objects -The WZDx specification describes the structure and content of a GeoJSON document, which can be called an instance of a "WZDx Feed". Each WZDx GeoJSON document has one root object, a [WZDxFeed](/spec-content/objects/WZDxFeed.md) object, with many properties and nested objects. Each distinct object is described in its own human-readable markdown file within the [objects](/spec-content/objects) directory, as well as within the JSON schema in `/schemas/`. An object represents a distinct entity, such as a road event, a lane, or information about a feed. All pieces of data that describe that entity are included as properties of the object. +Each feed object contains many layers of child objects. Together all the objects define the WZDx feed. All WZDx objects are located in the [objects](/spec-content/objects) subdirectory and listed in the [Objects](#objects) section of this document. + +The value of certain object properties is restricted to a defined set of values called an **enumerated type**. Enumerated types are located in the [enumerated-types](/spec-content/enumerated-types) subdirectory and listed in the [Enumerated Types](#enumerated-types) section of this document. -### Object Details -Each object is described by a table of properties, which are each defined by the following characteristics: +## Objects +Each WZDx object is described by a table of properties with following columns: - **Name** - The property name. -- **Type** - The type of data being stored. This can be one of the JSON primative types (only `String`, `Number`, `Array` are used), `Integer`, as defined in the [JSON schema validation specification](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1), a [WZDx Enumerated Type](#enumerated-types), a WZDx Object, or a [GeoJSON Object](https://tools.ietf.org/html/rfc7946#section-3). +- **Type** - The type of data being stored. This can be one of the JSON primative types (only `String`, `Number`, `Array` are used), `Integer`, as defined in the [JSON schema validation specification section 6.1 (Draft 07)](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-6.1), a formatted string as defined in [JSON schema validation specification section 7 (Draft 07)](https://datatracker.ietf.org/doc/html/draft-handrews-json-schema-validation-01#section-7.3), a [WZDx Enumerated Type](#enumerated-types), a WZDx Object, or a [GeoJSON Object](https://tools.ietf.org/html/rfc7946#section-3). - **Description** - A description of the value of the property. - **Conformance** - An indication of the requirement for including the property in a WZDx GeoJSON document. There are three categories of conformance: - *Required* - The property must be included @@ -19,15 +21,21 @@ Each object is described by a table of properties, which are each defined by the - **Notes** - Additional comments, guidance, notes for future consideration, or examples. ### List of Objects -This section provides a tabular list of all objects used in the WZDx specification, sectioned by whether the object applies to the multiple feeds (shared), the `WZDxFeed`, or the `SwzDeviceFeed`. +This section provides a tabular list of all objects used in the WZDx specification. + +#### Feed-Level +The following objects are high-level and describe either a WZDx feed or information about a WZDx feed: -#### Shared Object | Description --- | --- [FeedDataSource](/spec-content/objects/FeedDataSource.md) | Information about a specific data source used to build a work zone data feed. -[FeedInfo](/spec-content/objects/FeedInfo.md) | WZDx feed header information such as metadata, contact information, and data sources. +[FeedInfo](/spec-content/objects/FeedInfo.md) | Information about a WZDx feed such as metadata, contact information, and data sources. +[SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) | The root (highest-level) object of **Smart Work Zone Device Feed** GeoJSON document. +[WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a **WZDx Feed** GeoJSON document. + +#### Road Events +The following objects are used to describe events ocurring on roadways (road events) that impact the characteristics of the roadway and involve a change from the default state: -#### WZDxFeed Object | Description --- | --- [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) | A detour on a roadway. @@ -40,9 +48,10 @@ Object | Description [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about the presence of workers in the road event area. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. -[WZDxFeed](/spec-content/objects/WZDxFeed.md) | The root (highest-level) object of a WZDx feed GeoJSON document. -#### SwzDeviceFeed +#### Field Devices +The following objects are used to describe deployed roadside [ITS](https://en.wikipedia.org/wiki/Intelligent_transportation_system) devices: + Object | Description --- | --- [ArrowBoard](/spec-content/objects/ArrowBoard.md) | An electronic, connected arrow board which can display an arrow pattern to direct traffic. @@ -58,26 +67,29 @@ Object | Description [TrafficSensor](/spec-content/objects/TrafficSensor.md) | A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. [TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. -### Object Diagram -The object diagram below indicates the relationship between the data objects. +### Object Diagrams +The object diagrams below depict the relationship between the data objects for each WZDx feed. + +#### WZDxFeed ![Object Diagram](/images/wzdx_object_diagram.jpg) +#### SwzDeviceFeed + +[TBC] + #### Updating the object diagram When making changes to the specification, the object diagram needs to be updated as well. To modify the object diagram, open `/images/wzdx_object_diagram.drawio` at https://app.diagrams.net (or any drawio editor). Make necessary changes to the diagram using the web editor, then download the `drawio` file and replace `/images/wzdx_object_diagram.drawio` with the new file. Additionally **export** the diagram as a JPEG, using the diagram name as the file name, and replace `/images/wzdx_object_diagram.jpg` with the new image file. ## Enumerated Types -Many object properties are restricted to a finite set of values, defined by an enumerated type. The enumerations for each enumerated type as well as what object properties it is used by is described in its own file in the [enumerated-types](/spec-content/enumerated-types) directory. +Many object properties are restricted to a finite set of values defined by an enumerated type. The enumerations for each enumerated type as well as what object properties it is used by is described in its own file in the [enumerated-types](/spec-content/enumerated-types) directory. ### List of Enumerated Types -This section provides a tabular list of all enumerated types used in the WZDx specification, sectioned by whether they apply to multiple feeds (shared), the `WZDxFeed`, or the `SwzDeviceFeed`. +This section provides a tabular list of all enumerated types used in the WZDx specification. -#### Shared -Enumerated Type | Description ---- | --- -[LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. +#### Road Events +The following enumerated types are used by objects that describe road events: -#### WZDxFeed Enumerated Type | Description --- | --- [Direction](/spec-content/enumerated-types/Direction.md) | The direction for a road event based on standard naming for US roads. @@ -96,7 +108,9 @@ Enumerated Type | Description [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Methods for how worker presence in a work zone event area is determined. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. -#### SwzDeviceFeed +#### Field Devices +The following enumerated types are used in describing deployed roadside [ITS](https://en.wikipedia.org/wiki/Intelligent_transportation_system) devices: + Enumerated Type | Description --- | --- [ArrowBoardPattern](/spec-content/enumerated-types/ArrowBoardPattern.md) | A list of options for the posted pattern on an [ArrowBoard](/spec-content/objects/ArrowBoard.md). From cde3459aedcf45231edae5bb3e66fcf3ab0372bb Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 19:03:26 -0500 Subject: [PATCH 316/388] Fix LocationMethod 'Used By' --- spec-content/enumerated-types/LocationMethod.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/LocationMethod.md b/spec-content/enumerated-types/LocationMethod.md index 4cbeb353..f6547eab 100644 --- a/spec-content/enumerated-types/LocationMethod.md +++ b/spec-content/enumerated-types/LocationMethod.md @@ -13,7 +13,7 @@ Value | Description ## Used By Property | Object --- | --- -`location_method` | [FeedDataSource](/spec-content/objects/FeedDataSource.md) +`location_method` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) ## Additional Information The following sections details the usage of each of the location method From 000cc5839f159c48f4713b6d49571bb6b53ef0e0 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 22:02:02 -0500 Subject: [PATCH 317/388] Fix placeholder acronym --- 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 50067d2a..6782c548 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -76,7 +76,7 @@ The object diagrams below depict the relationship between the data objects for e #### SwzDeviceFeed -[TBC] +[TBD] #### Updating the object diagram When making changes to the specification, the object diagram needs to be updated as well. To modify the object diagram, open `/images/wzdx_object_diagram.drawio` at https://app.diagrams.net (or any drawio editor). Make necessary changes to the diagram using the web editor, then download the `drawio` file and replace `/images/wzdx_object_diagram.drawio` with the new file. Additionally **export** the diagram as a JPEG, using the diagram name as the file name, and replace `/images/wzdx_object_diagram.jpg` with the new image file. From 0c08b52eec85235415741a43ac771be142db2788 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 22:29:16 -0500 Subject: [PATCH 318/388] Fix bridge height restriction example paragraph --- examples/README.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/examples/README.md b/examples/README.md index e2af23e2..f30272bc 100644 --- a/examples/README.md +++ b/examples/README.md @@ -53,6 +53,14 @@ The [local access only example](/examples/WZDxFeed/local_access_only_bidirection The following example `SwzDeviceFeed`s are provided: 1. [Arrow Board "ok" Example](/examples/SwzDeviceFeed/arrow_board_ok_example.geojson): A simple feed that includes a single arrow board with an `ok` status and several optional properties provided. -2. [Camera "error" Example](/examples/SwzDeviceFeed/camera_error_example): A simple feed that includes a single camera with an `error` status, associated `status_messages`, and a few optional properties provided. +2. [Camera "error" Example](/examples/SwzDeviceFeed/camera_error_example): A simple feed that includes a single camera with an `error` status, no image data, associated `status_messages`, and a few optional properties provided. -## RoadRestrictionFeed Examples \ No newline at end of file +## RoadRestrictionFeed Examples +The following example `RoadrestrictionFeed`s are provided: + +### 1. Bridge Height Restriction +The [Bridge Height Restriction Example](/examples/RoadRestrictionFeed/bridge_restriction_linestring_example.geojson) shows the use of a [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to define a bridge clearance on a roadway. + +- Defines threes bridge height restrictions. +- Two restrictions (`id`s: `Bridge2`, `Bridge3`) are defined using only the required core details and basic event-level information. +- One restriction (`id`: `Bridge1`) also includes lane-level details with additional height restrictions values for individual lanes. \ No newline at end of file From 8ce9ebc0b8ab96e90fca3b7265305d75bda93f8f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 22:44:08 -0500 Subject: [PATCH 319/388] Extract RoadEventCoreDetails JSON schema --- schemas/4.0/RoadEventCoreDetails.json | 101 +++++++++++++++++++++++ schemas/4.0/RoadRestrictionFeed.json | 113 +------------------------- schemas/4.0/WZDxFeed.json | 99 +--------------------- 3 files changed, 103 insertions(+), 210 deletions(-) create mode 100644 schemas/4.0/RoadEventCoreDetails.json diff --git a/schemas/4.0/RoadEventCoreDetails.json b/schemas/4.0/RoadEventCoreDetails.json new file mode 100644 index 00000000..732de18e --- /dev/null +++ b/schemas/4.0/RoadEventCoreDetails.json @@ -0,0 +1,101 @@ +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventCoreDetails.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Road Event Core Details", + "description": "The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events", + "type": "object", + "properties": { + "data_source_id": { + "description": "Identifies the data source from which the road event data is sourced from", + "type": "string" + }, + "event_type": { + "$ref": "#/definitions/EventType" + }, + "relationship": { + "$ref": "#/definitions/Relationship" + }, + "road_names": { + "description": "A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "direction": { + "$ref": "#/definitions/Direction" + }, + "description": { + "description": "Short free text description of the road event", + "type": "string" + }, + "creation_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was created (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "update_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was last updated (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + } + }, + "required": [ + "event_type", + "data_source_id", + "direction", + "road_names" + ], + "definitions": { + "EventType": { + "title": "Road Event Type Enumerated Type", + "description": "The type of WZDx road event", + "enum": ["work-zone", "detour"] + }, + "Relationship": { + "title": "Relationship", + "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", + "type": "object", + "properties": { + "first": { + "description": "Indicates the first (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "next": { + "description": "Indicates the next (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "parents": { + "description": "Indicates entities that the road event with this relationship is a part of, such as a work zone project or phase. Values can but do not have to correspond to a WZDx entity", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "children": { + "description": "Indicates entities that are part of the road event with this relationship, such as a detour or piece of equipment. Values can but do not have to correspond to a WZDx entity", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + } + } + }, + "Direction": { + "title": "Direction Enumerated Type", + "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", + "enum": ["northbound", "eastbound", "southbound", "westbound"] + } + } +} \ No newline at end of file diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index 0716d1a9..f0545064 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -76,7 +76,7 @@ "type": "object", "properties": { "core_details": { - "$ref": "#/definitions/RoadEventCoreDetails" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventCoreDetails.json" }, "restrictions": { "description": "A list of zero or more restrictions applying to the road event", @@ -109,96 +109,6 @@ } ] }, - "RoadEventCoreDetails": { - "title": "Road Event Core Details", - "description": "The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events", - "type": "object", - "properties": { - "data_source_id": { - "description": "Identifies the data source from which the road event data is sourced from", - "type": "string" - }, - "event_type": { - "description": "The type of WZDx road event", - "enum": [ - "restriction" - ] - }, - "relationship": { - "$ref": "#/definitions/Relationship" - }, - "road_names": { - "description": "A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "direction": { - "$ref": "#/definitions/Direction" - }, - "description": { - "description": "Short free text description of the road event", - "type": "string" - }, - "creation_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was created (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "update_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was last updated (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "event_type", - "data_source_id", - "direction", - "road_names" - ] - }, - "Relationship": { - "title": "Relationship", - "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", - "type": "object", - "properties": { - "first": { - "description": "Indicates the first (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "next": { - "description": "Indicates the next (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "parents": { - "description": "Indicates entities that the road event with this relationship is a part of, such as a work zone project or phase. Values can but do not have to correspond to a WZDx entity", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "children": { - "description": "Indicates entities that are part of the road event with this relationship, such as a detour or piece of equipment. Values can but do not have to correspond to a WZDx entity", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, "Lane": { "title": "Lane", "description": "An individual lane within a road event", @@ -258,27 +168,6 @@ ] } }, - "Direction": { - "title": "Direction Enumerated Type", - "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", - "enum": [ - "northbound", - "eastbound", - "southbound", - "westbound" - ] - }, - "EventStatus": { - "title": "Event Status Enumerated Type", - "description": "The status of the road event", - "enum": [ - "planned", - "pending", - "active", - "completed", - "cancelled" - ] - }, "RestrictionType": { "title": "Restriction Type Enumerated Type", "description": "The type of vehicle restriction on a roadway", diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index 9f54072a..377fe931 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -54,7 +54,7 @@ "type": "object", "properties": { "core_details": { - "$ref": "#/definitions/RoadEventCoreDetails" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventCoreDetails.json" } }, "required": ["core_details"], @@ -83,54 +83,6 @@ }, "required": ["id","type","properties","geometry"] }, - "RoadEventCoreDetails": { - "title": "Road Event Core Details", - "description": "The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events", - "type": "object", - "properties": { - "data_source_id": { - "description": "Identifies the data source from which the road event data is sourced from", - "type": "string" - }, - "event_type": { - "$ref": "#/definitions/EventType" - }, - "relationship": { - "$ref": "#/definitions/Relationship" - }, - "road_names": { - "description": "A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "direction": { - "$ref": "#/definitions/Direction" - }, - "description": { - "description": "Short free text description of the road event", - "type": "string" - }, - "creation_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was created (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "update_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was last updated (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "event_type", - "data_source_id", - "direction", - "road_names" - ] - }, "WorkZoneRoadEvent": { "title": "Work Zone Road Event", "description": "Descibes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway", @@ -318,45 +270,6 @@ } ] }, - "Relationship": { - "title": "Relationship", - "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", - "type": "object", - "properties": { - "first": { - "description": "Indicates the first (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "next": { - "description": "Indicates the next (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "parents": { - "description": "Indicates entities that the road event with this relationship is a part of, such as a work zone project or phase. Values can but do not have to correspond to a WZDx entity", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "children": { - "description": "Indicates entities that are part of the road event with this relationship, such as a detour or piece of equipment. Values can but do not have to correspond to a WZDx entity", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, "TypeOfWork": { "title": "Type of Work", "description": "A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway", @@ -454,16 +367,6 @@ }, "required": ["are_workers_present"] }, - "EventType": { - "title": "Road Event Type Enumerated Type", - "description": "The type of WZDx road event", - "enum": ["work-zone", "detour"] - }, - "Direction": { - "title": "Direction Enumerated Type", - "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", - "enum": ["northbound", "eastbound", "southbound", "westbound"] - }, "SpatialVerification": { "title": "Spatial Verification Enumerated Type", "description": "An indication of how a geographical coordinate was defined", From fd87e79392b967370623359d2f8c5cb9d9fb029d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 22:50:42 -0500 Subject: [PATCH 320/388] Extract Restriction JSON schema --- schemas/4.0/Restriction.json | 60 ++++++++++++++++++++++++++++ schemas/4.0/RoadRestrictionFeed.json | 60 +--------------------------- schemas/4.0/WZDxFeed.json | 49 +---------------------- 3 files changed, 64 insertions(+), 105 deletions(-) create mode 100644 schemas/4.0/Restriction.json diff --git a/schemas/4.0/Restriction.json b/schemas/4.0/Restriction.json new file mode 100644 index 00000000..07d23250 --- /dev/null +++ b/schemas/4.0/Restriction.json @@ -0,0 +1,60 @@ +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Restriction", + "description": "A restriction on a roadway or lane, including type and value", + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/RestrictionType" + }, + "value": { + "type": "number" + }, + "unit": { + "$ref": "#/definitions/UnitOfMeasurement" + } + }, + "required": [ + "type" + ], + "dependencies": { + "value": [ + "unit" + ] + }, + "definitions": { + "RestrictionType": { + "title": "Restriction Type Enumerated Type", + "description": "The type of vehicle restriction on a roadway", + "enum": [ + "no-trucks", + "travel-peak-hours-only", + "hov-3", + "hov-2", + "no-parking", + "reduced-width", + "reduced-height", + "reduced-length", + "reduced-weight", + "axle-load-limit", + "gross-weight-limit", + "towing-prohibited", + "permitted-oversize-loads-prohibited", + "local-access-only" + ] + }, + "UnitOfMeasurement": { + "title": "Unit of Measurement Enumerated Type", + "description": "Unit of measurement, used when providing a unit to accompany a value", + "enum": [ + "feet", + "inches", + "centimeters", + "pounds", + "tons", + "kilograms" + ] + } + } +} \ No newline at end of file diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index f0545064..a97f1d42 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -82,7 +82,7 @@ "description": "A list of zero or more restrictions applying to the road event", "type": "array", "items": { - "$ref": "#/definitions/Restriction" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" } }, "lanes": { @@ -134,7 +134,7 @@ "description": "A list of restrictions specific to the lane", "type": "array", "items": { - "$ref": "#/definitions/Restriction" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" } } }, @@ -144,50 +144,6 @@ "order" ] }, - "Restriction": { - "title": "Restriction", - "description": "A restriction on a roadway or lane, including type and value", - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/RestrictionType" - }, - "value": { - "type": "number" - }, - "unit": { - "$ref": "#/definitions/UnitOfMeasurement" - } - }, - "required": [ - "type" - ], - "dependencies": { - "value": [ - "unit" - ] - } - }, - "RestrictionType": { - "title": "Restriction Type Enumerated Type", - "description": "The type of vehicle restriction on a roadway", - "enum": [ - "no-trucks", - "travel-peak-hours-only", - "hov-3", - "hov-2", - "no-parking", - "reduced-width", - "reduced-height", - "reduced-length", - "reduced-weight", - "axle-load-limit", - "gross-weight-limit", - "towing-prohibited", - "permitted-oversize-loads-prohibited", - "local-access-only" - ] - }, "LaneStatus": { "title": "Lane Status Enumerated Type", "description": "The status of the lane for the traveling public", @@ -237,18 +193,6 @@ "left-entrance-ramp", "left-second-entrance-ramp" ] - }, - "UnitOfMeasurement": { - "title": "Unit of Measurement Enumerated Type", - "description": "Unit of measurement, used when providing a unit to accompany a value", - "enum": [ - "feet", - "inches", - "centimeters", - "pounds", - "tons", - "kilograms" - ] } } } \ No newline at end of file diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index 377fe931..48edbfc4 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -167,7 +167,7 @@ "description": "A list of zero or more restrictions applying to the road event", "type": "array", "items": { - "$ref": "#/definitions/Restriction" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" } }, "types_of_work": { @@ -310,32 +310,12 @@ "description": "A list of zero or more restrictions specific to the lane", "type": "array", "items": { - "$ref": "#/definitions/Restriction" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" } } }, "required": ["status", "type", "order"] }, - "Restriction": { - "title": "Restriction", - "description": "A restriction on a roadway or lane, including type and value", - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/RestrictionType" - }, - "value": { - "type": "number" - }, - "unit": { - "$ref": "#/definitions/UnitOfMeasurement" - } - }, - "required": ["type"], - "dependencies": { - "value": ["unit"] - } - }, "WorkerPresence": { "title": "Worker Presence", "description": "Information about the presence of workers in the work zone event area", @@ -387,26 +367,6 @@ "description": "The impact to vehicular lanes along a single road in a single direction", "enum": ["all-lanes-closed", "some-lanes-closed", "all-lanes-open", "alternating-one-way", "some-lanes-closed-merge-left", "some-lanes-closed-merge-right", "all-lanes-open-shift-left", "all-lanes-open-shift-right", "some-lanes-closed-split", "flagging", "temporary-traffic-signal", "unknown"] }, - "RestrictionType": { - "title": "Restriction Type Enumerated Type", - "description": "The type of vehicle restriction on a roadway", - "enum": [ - "no-trucks", - "travel-peak-hours-only", - "hov-3", - "hov-2", - "no-parking", - "reduced-width", - "reduced-height", - "reduced-length", - "reduced-weight", - "axle-load-limit", - "gross-weight-limit", - "towing-prohibited", - "permitted-oversize-loads-prohibited", - "local-access-only" - ] - }, "WorkTypeName": { "title": "Work Type Name Enumerated Type", "description": "A high-level text description of the type of work being done in a road event", @@ -445,11 +405,6 @@ "center-left-turn-lane" ] }, - "UnitOfMeasurement": { - "title": "Unit of Measurement Enumerated Type", - "description": "Unit of measurement, used when providing a unit to accompany a value", - "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] - }, "WorkerPresenceMethod": { "title": "Worker Presence Method Enumerated Type", "description": "Describes methods for how worker presence in a work zone event area is determined", From 491fd9d4b82eb457f188b4c58218371680249d7d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 8 Dec 2021 22:57:09 -0500 Subject: [PATCH 321/388] Extract Lane JSON schema --- schemas/4.0/Lane.json | 89 ++++++++++++++++++++++++++++ schemas/4.0/RoadRestrictionFeed.json | 88 +-------------------------- schemas/4.0/WZDxFeed.json | 50 +--------------- 3 files changed, 91 insertions(+), 136 deletions(-) create mode 100644 schemas/4.0/Lane.json diff --git a/schemas/4.0/Lane.json b/schemas/4.0/Lane.json new file mode 100644 index 00000000..16fdca06 --- /dev/null +++ b/schemas/4.0/Lane.json @@ -0,0 +1,89 @@ +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Lane.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Lane", + "description": "An individual lane within a road event", + "type": "object", + "properties": { + "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/LaneStatus" + }, + "type": { + "$ref": "#/definitions/LaneType" + }, + "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": 1 + }, + "restrictions": { + "description": "A list of restrictions specific to the lane", + "type": "array", + "items": { + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" + } + } + }, + "required": [ + "status", + "type", + "order" + ], + "definitions": { + "LaneStatus": { + "title": "Lane Status Enumerated Type", + "description": "The status of the lane for the traveling public", + "enum": [ + "open", + "closed", + "shift-left", + "shift-right", + "merge-left", + "merge-right", + "alternating-one-way", + "alternating-flow" + ] + }, + "LaneType": { + "title": "Lane Type Enumerated Type", + "description": "An indication of the type of lane or shoulder", + "enum": [ + "lane", + "right-turning-lane", + "left-turning-lane", + "right-exit-lane", + "left-exit-lane", + "right-entrance-lane", + "left-entrance-lane", + "sidewalk", + "bike-lane", + "alternating-flow-lane", + "shoulder", + "hov-lane", + "reversible-lane", + "center-left-turn-lane", + "left-lane", + "right-lane", + "middle-lane", + "center-lane", + "right-shoulder", + "left-shoulder", + "right-merging-lane", + "left-merging-lane", + "right-exit-ramp", + "right-second-exit-ramp", + "left-exit-ramp", + "left-second-exit-ramp", + "right-entrance-ramp", + "right-second-entrance-ramp", + "left-entrance-ramp", + "left-second-entrance-ramp" + ] + } + } +} \ No newline at end of file diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index a97f1d42..7a2d31d2 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -89,7 +89,7 @@ "description": "A list of individual lanes within a road event (roadway segment)", "type": "array", "items": { - "$ref": "#/definitions/Lane" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Lane.json" } } }, @@ -109,90 +109,4 @@ } ] }, - "Lane": { - "title": "Lane", - "description": "An individual lane within a road event", - "type": "object", - "properties": { - "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/LaneStatus" - }, - "type": { - "$ref": "#/definitions/LaneType" - }, - "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": 1 - }, - "restrictions": { - "description": "A list of restrictions specific to the lane", - "type": "array", - "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" - } - } - }, - "required": [ - "status", - "type", - "order" - ] - }, - "LaneStatus": { - "title": "Lane Status Enumerated Type", - "description": "The status of the lane for the traveling public", - "enum": [ - "open", - "closed", - "shift-left", - "shift-right", - "merge-left", - "merge-right", - "alternating-one-way", - "alternating-flow" - ] - }, - "LaneType": { - "title": "Lane Type Enumerated Type", - "description": "An indication of the type of lane or shoulder", - "enum": [ - "lane", - "right-turning-lane", - "left-turning-lane", - "right-exit-lane", - "left-exit-lane", - "right-entrance-lane", - "left-entrance-lane", - "sidewalk", - "bike-lane", - "alternating-flow-lane", - "shoulder", - "hov-lane", - "reversible-lane", - "center-left-turn-lane", - "left-lane", - "right-lane", - "middle-lane", - "center-lane", - "right-shoulder", - "left-shoulder", - "right-merging-lane", - "left-merging-lane", - "right-exit-ramp", - "right-second-exit-ramp", - "left-exit-ramp", - "left-second-exit-ramp", - "right-entrance-ramp", - "right-second-entrance-ramp", - "left-entrance-ramp", - "left-second-entrance-ramp" - ] - } - } } \ No newline at end of file diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index 48edbfc4..dc96a6aa 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -181,7 +181,7 @@ "description": "A list of individual lanes within a road event (roadway segment)", "type": "array", "items": { - "$ref": "#/definitions/Lane" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Lane.json" } } }, @@ -285,37 +285,6 @@ }, "required": ["type_name"] }, - "Lane": { - "title": "Lane", - "description": "An individual lane within a road event", - "type": "object", - "properties": { - "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/LaneStatus" - }, - "type": { - "$ref": "#/definitions/LaneType" - }, - "lane_number": { - "description": "***DEPRECATED*** The number assigned to the lane to help identify its position. Flexible, but usually used for regular, driveable lanes", - "type": "integer", - "minimum": 1 - }, - "restrictions": { - "description": "A list of zero or more restrictions specific to the lane", - "type": "array", - "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" - } - } - }, - "required": ["status", "type", "order"] - }, "WorkerPresence": { "title": "Worker Presence", "description": "Information about the presence of workers in the work zone event area", @@ -388,23 +357,6 @@ "description": "The status of the lane for the traveling public", "enum": ["open", "closed", "shift-left", "shift-right", "merge-left", "merge-right", "alternating-flow"] }, - "LaneType": { - "title": "Lane Type Enumerated Type", - "description": "An indication of the type of lane or shoulder", - "enum": [ - "general", - "exit-lane", - "exit-ramp", - "entrance-lane", - "entrance-ramp", - "sidewalk", - "bike-lane", - "shoulder", - "parking", - "median", - "center-left-turn-lane" - ] - }, "WorkerPresenceMethod": { "title": "Worker Presence Method Enumerated Type", "description": "Describes methods for how worker presence in a work zone event area is determined", From 63cd6f3fba9021ec4fc4e9e23689132d40e2905e Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Dec 2021 00:42:36 -0500 Subject: [PATCH 322/388] Fix RoadRestrictionFeed schema typo --- schemas/4.0/RoadRestrictionFeed.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index 7a2d31d2..24706ced 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -108,5 +108,6 @@ ] } ] - }, + } + } } \ No newline at end of file From 6ee0f4bb2cec53a5f8535628d915645ea12745c4 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Dec 2021 01:13:05 -0500 Subject: [PATCH 323/388] Combine schemas to finalize RoadRestrictionFeed schema --- schemas/4.0/Lane.json | 89 ---- schemas/4.0/Restriction.json | 60 --- schemas/4.0/RoadEventCoreDetails.json | 101 ---- schemas/4.0/RoadEventFeature.json | 655 ++++++++++++++++++++++++++ schemas/4.0/RoadRestrictionFeed.json | 106 +---- schemas/4.0/WZDxFeed.json | 396 +--------------- 6 files changed, 703 insertions(+), 704 deletions(-) delete mode 100644 schemas/4.0/Lane.json delete mode 100644 schemas/4.0/Restriction.json delete mode 100644 schemas/4.0/RoadEventCoreDetails.json create mode 100644 schemas/4.0/RoadEventFeature.json diff --git a/schemas/4.0/Lane.json b/schemas/4.0/Lane.json deleted file mode 100644 index 16fdca06..00000000 --- a/schemas/4.0/Lane.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Lane.json", - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Lane", - "description": "An individual lane within a road event", - "type": "object", - "properties": { - "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/LaneStatus" - }, - "type": { - "$ref": "#/definitions/LaneType" - }, - "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": 1 - }, - "restrictions": { - "description": "A list of restrictions specific to the lane", - "type": "array", - "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" - } - } - }, - "required": [ - "status", - "type", - "order" - ], - "definitions": { - "LaneStatus": { - "title": "Lane Status Enumerated Type", - "description": "The status of the lane for the traveling public", - "enum": [ - "open", - "closed", - "shift-left", - "shift-right", - "merge-left", - "merge-right", - "alternating-one-way", - "alternating-flow" - ] - }, - "LaneType": { - "title": "Lane Type Enumerated Type", - "description": "An indication of the type of lane or shoulder", - "enum": [ - "lane", - "right-turning-lane", - "left-turning-lane", - "right-exit-lane", - "left-exit-lane", - "right-entrance-lane", - "left-entrance-lane", - "sidewalk", - "bike-lane", - "alternating-flow-lane", - "shoulder", - "hov-lane", - "reversible-lane", - "center-left-turn-lane", - "left-lane", - "right-lane", - "middle-lane", - "center-lane", - "right-shoulder", - "left-shoulder", - "right-merging-lane", - "left-merging-lane", - "right-exit-ramp", - "right-second-exit-ramp", - "left-exit-ramp", - "left-second-exit-ramp", - "right-entrance-ramp", - "right-second-entrance-ramp", - "left-entrance-ramp", - "left-second-entrance-ramp" - ] - } - } -} \ No newline at end of file diff --git a/schemas/4.0/Restriction.json b/schemas/4.0/Restriction.json deleted file mode 100644 index 07d23250..00000000 --- a/schemas/4.0/Restriction.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json", - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Restriction", - "description": "A restriction on a roadway or lane, including type and value", - "type": "object", - "properties": { - "type": { - "$ref": "#/definitions/RestrictionType" - }, - "value": { - "type": "number" - }, - "unit": { - "$ref": "#/definitions/UnitOfMeasurement" - } - }, - "required": [ - "type" - ], - "dependencies": { - "value": [ - "unit" - ] - }, - "definitions": { - "RestrictionType": { - "title": "Restriction Type Enumerated Type", - "description": "The type of vehicle restriction on a roadway", - "enum": [ - "no-trucks", - "travel-peak-hours-only", - "hov-3", - "hov-2", - "no-parking", - "reduced-width", - "reduced-height", - "reduced-length", - "reduced-weight", - "axle-load-limit", - "gross-weight-limit", - "towing-prohibited", - "permitted-oversize-loads-prohibited", - "local-access-only" - ] - }, - "UnitOfMeasurement": { - "title": "Unit of Measurement Enumerated Type", - "description": "Unit of measurement, used when providing a unit to accompany a value", - "enum": [ - "feet", - "inches", - "centimeters", - "pounds", - "tons", - "kilograms" - ] - } - } -} \ No newline at end of file diff --git a/schemas/4.0/RoadEventCoreDetails.json b/schemas/4.0/RoadEventCoreDetails.json deleted file mode 100644 index 732de18e..00000000 --- a/schemas/4.0/RoadEventCoreDetails.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventCoreDetails.json", - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Road Event Core Details", - "description": "The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events", - "type": "object", - "properties": { - "data_source_id": { - "description": "Identifies the data source from which the road event data is sourced from", - "type": "string" - }, - "event_type": { - "$ref": "#/definitions/EventType" - }, - "relationship": { - "$ref": "#/definitions/Relationship" - }, - "road_names": { - "description": "A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "direction": { - "$ref": "#/definitions/Direction" - }, - "description": { - "description": "Short free text description of the road event", - "type": "string" - }, - "creation_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was created (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "update_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was last updated (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - } - }, - "required": [ - "event_type", - "data_source_id", - "direction", - "road_names" - ], - "definitions": { - "EventType": { - "title": "Road Event Type Enumerated Type", - "description": "The type of WZDx road event", - "enum": ["work-zone", "detour"] - }, - "Relationship": { - "title": "Relationship", - "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", - "type": "object", - "properties": { - "first": { - "description": "Indicates the first (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "next": { - "description": "Indicates the next (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "parents": { - "description": "Indicates entities that the road event with this relationship is a part of, such as a work zone project or phase. Values can but do not have to correspond to a WZDx entity", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - }, - "children": { - "description": "Indicates entities that are part of the road event with this relationship, such as a detour or piece of equipment. Values can but do not have to correspond to a WZDx entity", - "type": "array", - "minItems": 1, - "items": { - "type": "string" - } - } - } - }, - "Direction": { - "title": "Direction Enumerated Type", - "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", - "enum": ["northbound", "eastbound", "southbound", "westbound"] - } - } -} \ No newline at end of file diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json new file mode 100644 index 00000000..971e4dd8 --- /dev/null +++ b/schemas/4.0/RoadEventFeature.json @@ -0,0 +1,655 @@ + +{ + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventFeature.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Road Event Feature (GeoJSON Feature)", + "description": "The container object for a specific WZDx road event; an instance of a GeoJSON Feature", + "type": "object", + "properties": { + "id": { + "description": "A unique identifier issued by the data feed provider to identify the WZDx road event", + "type": "string" + }, + "type": { + "description": "The GeoJSON object type; must be 'Feature'", + "enum": ["Feature"] + }, + "properties": { + "type": "object", + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + } + }, + "required": ["core_details"], + "oneOf": [ + { + "$ref": "#/definitions/WorkZoneRoadEvent" + }, + { + "$ref": "#/definitions/DetourRoadEvent" + } + ] + }, + "geometry": { + "oneOf": [ + { + "$ref": "https://geojson.org/schema/LineString.json" + }, + { + "$ref": "https://geojson.org/schema/MultiPoint.json" + } + ] + }, + "bbox": { + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" + } + }, + "required": ["id","type","properties","geometry"], + "definitions": { + "WorkZoneRoadEvent": { + "title": "Work Zone Road Event", + "description": "Descibes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway", + "type": "object", + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "event_type": { + "const": "work-zone" + } + }, + "required": ["event_type"] + } + }, + "required": ["core_details"] + }, + { + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + }, + "beginning_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event begins", + "type": "string" + }, + "ending_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event ends", + "type": "string" + }, + "beginning_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event begins", + "type": "number", + "minimum": 0 + }, + "ending_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event ends", + "type": "number", + "minimum": 0 + }, + "beginning_accuracy": { + "$ref": "#/definitions/SpatialVerification" + }, + "ending_accuracy": { + "$ref": "#/definitions/SpatialVerification" + }, + "start_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "end_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "start_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "end_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "event_status": { + "$ref": "#/definitions/EventStatus" + }, + "vehicle_impact": { + "$ref": "#/definitions/VehicleImpact" + }, + "location_method": { + "$ref": "#/definitions/LocationMethod" + }, + "worker_presence": { + "$ref": "#/definitions/WorkerPresence" + }, + "reduced_speed_limit_kph": { + "description": "If applicable, the reduced speed limit posted within the road event, in kilometers per hour", + "type": "integer", + "minimum": 0 + }, + "restrictions": { + "description": "A list of zero or more restrictions applying to the road event", + "type": "array", + "items": { + "$ref": "#/definitions/Restriction" + } + }, + "types_of_work": { + "description": "A list of the types of work being done in a road event", + "type": "array", + "items": { + "$ref": "#/definitions/TypeOfWork" + } + }, + "lanes": { + "description": "A list of individual lanes within a road event (roadway segment)", + "type": "array", + "items": { + "$ref": "#/definitions/Lane" + } + } + }, + "required": [ + "core_details", + "beginning_accuracy", + "ending_accuracy", + "start_date", + "end_date", + "start_date_accuracy", + "end_date_accuracy", + "vehicle_impact", + "location_method" + ] + } + ] + }, + "DetourRoadEvent": { + "title": "Detour Road Event", + "description": "Describes a detour on a roadway", + "type": "object", + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "event_type": { + "const": "detour" + } + }, + "required": ["event_type"] + } + }, + "required": ["core_details"] + }, + { + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + }, + "beginning_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event begins", + "type": "string" + }, + "ending_cross_street": { + "description": "Name or number of the nearest cross street along the roadway where the event ends", + "type": "string" + }, + "beginning_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event begins", + "type": "number", + "minimum": 0 + }, + "ending_milepost": { + "description": "The linear distance measured against a milepost marker along a roadway where the event ends", + "type": "number", + "minimum": 0 + }, + "start_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "end_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "start_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "end_date_accuracy": { + "$ref": "#/definitions/TimeVerification" + }, + "event_status": { + "$ref": "#/definitions/EventStatus" + } + }, + "required": [ + "core_details", + "start_date", + "end_date", + "start_date_accuracy", + "end_date_accuracy" + ] + } + ] + }, + "RestrictionRoadEvent": { + "title": "Restriction Road Event", + "description": "A road event describing a section of roadway and the limitations of how that section can be used", + "type": "object", + "allOf": [ + { + "properties": { + "core_details": { + "properties": { + "event_type": { + "const": "restriction" + } + }, + "required": ["event_type"] + } + }, + "required": ["core_details"] + }, + { + "properties": { + "core_details": { + "$ref": "#/definitions/RoadEventCoreDetails" + }, + "restrictions": { + "description": "A list of zero or more restrictions applying to the road event", + "type": "array", + "items": { + "$ref": "#/definitions/Restriction" + } + }, + "lanes": { + "description": "A list of individual lanes within a road event (roadway segment)", + "type": "array", + "items": { + "$ref": "#/definitions/Lane" + } + } + }, + "required": [ + "core_details" + ], + "anyOf": [ + { + "required": [ + "restrictions" + ] + }, + { + "required": [ + "lanes" + ] + } + ] + } + ] + }, + "RoadEventCoreDetails": { + "title": "Road Event Core Details", + "description": "The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events", + "type": "object", + "properties": { + "data_source_id": { + "description": "Identifies the data source from which the road event data is sourced from", + "type": "string" + }, + "event_type": { + "$ref": "#/definitions/EventType" + }, + "relationship": { + "$ref": "#/definitions/Relationship" + }, + "road_names": { + "description": "A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133)", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "direction": { + "$ref": "#/definitions/Direction" + }, + "description": { + "description": "Short free text description of the road event", + "type": "string" + }, + "creation_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was created (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + }, + "update_date": { + "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event was last updated (e.g. 2020-11-03T19:37:00Z)", + "type": "string", + "format": "date-time" + } + }, + "required": [ + "event_type", + "data_source_id", + "direction", + "road_names" + ] + }, + "EventType": { + "title": "Road Event Type Enumerated Type", + "description": "The type of WZDx road event", + "enum": ["work-zone", "detour"] + }, + "Relationship": { + "title": "Relationship", + "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", + "type": "object", + "properties": { + "first": { + "description": "Indicates the first (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "next": { + "description": "Indicates the next (can be multiple) road event in a sequence of road events by RoadEventFeature 'id'", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "parents": { + "description": "Indicates entities that the road event with this relationship is a part of, such as a work zone project or phase. Values can but do not have to correspond to a WZDx entity", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + }, + "children": { + "description": "Indicates entities that are part of the road event with this relationship, such as a detour or piece of equipment. Values can but do not have to correspond to a WZDx entity", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + } + } + }, + "Direction": { + "title": "Direction Enumerated Type", + "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", + "enum": ["northbound", "eastbound", "southbound", "westbound"] + }, + "Lane": { + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Lane.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Lane", + "description": "An individual lane within a road event", + "type": "object", + "properties": { + "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/LaneStatus" + }, + "type": { + "$ref": "#/definitions/LaneType" + }, + "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": 1 + }, + "restrictions": { + "description": "A list of restrictions specific to the lane", + "type": "array", + "items": { + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" + } + } + }, + "required": [ + "status", + "type", + "order" + ] + }, + "LaneStatus": { + "title": "Lane Status Enumerated Type", + "description": "The status of the lane for the traveling public", + "enum": [ + "open", + "closed", + "shift-left", + "shift-right", + "merge-left", + "merge-right", + "alternating-one-way", + "alternating-flow" + ] + }, + "LaneType": { + "title": "Lane Type Enumerated Type", + "description": "An indication of the type of lane or shoulder", + "enum": [ + "lane", + "right-turning-lane", + "left-turning-lane", + "right-exit-lane", + "left-exit-lane", + "right-entrance-lane", + "left-entrance-lane", + "sidewalk", + "bike-lane", + "alternating-flow-lane", + "shoulder", + "hov-lane", + "reversible-lane", + "center-left-turn-lane", + "left-lane", + "right-lane", + "middle-lane", + "center-lane", + "right-shoulder", + "left-shoulder", + "right-merging-lane", + "left-merging-lane", + "right-exit-ramp", + "right-second-exit-ramp", + "left-exit-ramp", + "left-second-exit-ramp", + "right-entrance-ramp", + "right-second-entrance-ramp", + "left-entrance-ramp", + "left-second-entrance-ramp" + ] + }, + "Restriction": { + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "Restriction", + "description": "A restriction on a roadway or lane, including type and value", + "type": "object", + "properties": { + "type": { + "$ref": "#/definitions/RestrictionType" + }, + "value": { + "type": "number" + }, + "unit": { + "$ref": "#/definitions/UnitOfMeasurement" + } + }, + "required": [ + "type" + ], + "dependencies": { + "value": [ + "unit" + ] + } + }, + "RestrictionType": { + "title": "Restriction Type Enumerated Type", + "description": "The type of vehicle restriction on a roadway", + "enum": [ + "no-trucks", + "travel-peak-hours-only", + "hov-3", + "hov-2", + "no-parking", + "reduced-width", + "reduced-height", + "reduced-length", + "reduced-weight", + "axle-load-limit", + "gross-weight-limit", + "towing-prohibited", + "permitted-oversize-loads-prohibited", + "local-access-only" + ] + }, + "UnitOfMeasurement": { + "title": "Unit of Measurement Enumerated Type", + "description": "Unit of measurement, used when providing a unit to accompany a value", + "enum": [ + "feet", + "inches", + "centimeters", + "pounds", + "tons", + "kilograms" + ] + }, + "TypeOfWork": { + "title": "Type of Work", + "description": "A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway", + "type": "object", + "properties": { + "type_name": { + "$ref": "#/definitions/WorkTypeName" + }, + "is_architectural_change": { + "description": "A flag indicating whether the type of work will result in an architectural change to the roadway", + "type": "boolean" + } + }, + "required": ["type_name"] + }, + "WorkerPresence": { + "title": "Worker Presence", + "description": "Information about the presence of workers in the work zone event area", + "type": "object", + "properties": { + "are_workers_present": { + "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object", + "type": "boolean" + }, + "method": { + "$ref": "#/definitions/WorkerPresenceMethod" + }, + "worker_presence_last_confirmed_date": { + "description": "Datetime at which the presence of workers was last confirmed using the 'source'", + "type": "string", + "format": "date-time" + }, + "confidence": { + "$ref": "#/definitions/WorkerPresenceConfidence" + }, + "definition": { + "description": "A list of situations in which workers are considered to be present in the jurisdiction of the data provider", + "type": "array", + "items": { + "$ref": "#/definitions/WorkerPresenceDefinition" + }, + "uniqueItems": true + } + }, + "required": ["are_workers_present"] + }, + "SpatialVerification": { + "title": "Spatial Verification Enumerated Type", + "description": "An indication of how a geographical coordinate was defined", + "enum": ["estimated", "verified"] + }, + "TimeVerification": { + "title": "Time Verification Enumerated Type", + "description": "A measure of how accurate a date-time is", + "enum": ["estimated", "verified"] + }, + "EventStatus": { + "title": "Event Status Enumerated Type", + "description": "The status of the road event", + "enum": ["planned", "pending", "active", "completed", "cancelled"] + }, + "VehicleImpact": { + "title": "Vehicle Impact Enumerated Type", + "description": "The impact to vehicular lanes along a single road in a single direction", + "enum": ["all-lanes-closed", "some-lanes-closed", "all-lanes-open", "alternating-one-way", "some-lanes-closed-merge-left", "some-lanes-closed-merge-right", "all-lanes-open-shift-left", "all-lanes-open-shift-right", "some-lanes-closed-split", "flagging", "temporary-traffic-signal", "unknown"] + }, + "WorkTypeName": { + "title": "Work Type Name Enumerated Type", + "description": "A high-level text description of the type of work being done in a road event", + "enum": [ + "maintenance", + "minor-road-defect-repair", + "roadside-work", + "overhead-work", + "below-road-work", + "barrier-work", + "surface-work", + "painting", + "roadway-relocation", + "roadway-creation" + ] + }, + "WorkerPresenceMethod": { + "title": "Worker Presence Method Enumerated Type", + "description": "Describes methods for how worker presence in a work zone event area is determined", + "enum": [ + "camera-monitoring", + "arrow-board-present", + "cones-present", + "maintenance-vehicle-present", + "wearables-present", + "mobile-device-present", + "check-in-app", + "check-in-verbal", + "scheduled" + ] + }, + "WorkerPresenceDefinition": { + "title": "Worker Presence Definition Enumerated Type", + "description": "Situations in which workers may be considered present in a work zone", + "enum": [ + "workers-in-work-zone-working", + "workers-in-work-zone-not-working", + "mobile-equipment-in-work-zone-moving", + "mobile-equipment-in-work-zone-not-working", + "fixed-equipment-in-work-zone", + "humans-behind-barrier", + "humans-in-right-of-way" + ] + }, + "WorkerPresenceConfidence": { + "title": "Worker Presence Confidence Enumerated Type", + "description": "A high-level description of the feed publisher's confidence in the reported WorkerPresence value of are_workers_present", + "enum": [ + "low", + "medium", + "high" + ] + } + } +} \ No newline at end of file diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index 24706ced..fda96a22 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -18,7 +18,29 @@ "description": "An array of GeoJSON Feature objects which represent WZDx restriction road events", "type": "array", "items": { - "$ref": "#/definitions/RoadEventFeature" + "allOf": [ + { + "properties": { + "properties": { + "properties": { + "core_details": { + "properties": { + "event_type": { + "const": "restriction" + } + }, + "required": ["event_type"] + } + }, + "required": ["core_details"] + } + }, + "required": ["properties"] + }, + { + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventFeature.json" + } + ] } }, "bbox": { @@ -29,85 +51,5 @@ "road_event_feed_info", "type", "features" - ], - "definitions": { - "RoadEventFeature": { - "title": "Road Event Feature (GeoJSON Feature)", - "description": "The container object for a specific WZDx road event (only RestrictionRoadEvent in the RoadRestrictionFeed); a GeoJSON Feature", - "type": "object", - "properties": { - "id": { - "description": "A unique identifier issued by the data feed provider to identify the WZDx road event", - "type": "string" - }, - "type": { - "description": "The GeoJSON object type; must be 'Feature'", - "enum": [ - "Feature" - ] - }, - "properties": { - "$ref": "#/definitions/RestrictionRoadEvent" - }, - "geometry": { - "oneOf": [ - { - "$ref": "https://geojson.org/schema/LineString.json" - }, - { - "$ref": "https://geojson.org/schema/MultiPoint.json" - } - ] - }, - "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" - } - }, - "required": [ - "type", - "properties", - "geometry", - "id" - ] - }, - "RestrictionRoadEvent": { - "title": "Restriction Road Event", - "description": "A road event describing a section of roadway and the limitations of how that section can be used", - "type": "object", - "properties": { - "core_details": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventCoreDetails.json" - }, - "restrictions": { - "description": "A list of zero or more restrictions applying to the road event", - "type": "array", - "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" - } - }, - "lanes": { - "description": "A list of individual lanes within a road event (roadway segment)", - "type": "array", - "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Lane.json" - } - } - }, - "required": [ - "core_details" - ], - "anyOf": [ - { - "required": [ - "restrictions" - ] - }, - { - "required": [ - "lanes" - ] - } - ] - } - } + ] } \ No newline at end of file diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index dc96a6aa..021b8c9b 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -17,382 +17,34 @@ "description": "An array of GeoJSON Feature objects which represent WZDx road events", "type": "array", "items": { - "$ref": "#/definitions/RoadEventFeature" - } - }, - "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" - } - }, - "required": ["road_event_feed_info", "type", "features"], - "definitions": { - "LocationMethod": { - "title": "Location Method Enumerated Type", - "description": "The typical method used to locate the beginning and end of a work zone impact area", - "enum": [ - "channel-device-method", - "sign-method", - "junction-method", - "other", - "unknown" - ] - }, - "RoadEventFeature": { - "title": "Road Event Feature (GeoJSON Feature)", - "description": "The container object for a specific WZDx road event; an instance of a GeoJSON Feature", - "type": "object", - "properties": { - "id": { - "description": "A unique identifier issued by the data feed provider to identify the WZDx road event", - "type": "string" - }, - "type": { - "description": "The GeoJSON object type; must be 'Feature'", - "enum": ["Feature"] - }, - "properties": { - "type": "object", - "properties": { - "core_details": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventCoreDetails.json" - } - }, - "required": ["core_details"], - "oneOf": [ - { - "$ref": "#/definitions/WorkZoneRoadEvent" - }, - { - "$ref": "#/definitions/DetourRoadEvent" - } - ] - }, - "geometry": { - "oneOf": [ - { - "$ref": "https://geojson.org/schema/LineString.json" - }, - { - "$ref": "https://geojson.org/schema/MultiPoint.json" - } - ] - }, - "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" - } - }, - "required": ["id","type","properties","geometry"] - }, - "WorkZoneRoadEvent": { - "title": "Work Zone Road Event", - "description": "Descibes a work zone road event including where, when, and what activities are taking place within a work zone on a roadway", - "type": "object", - "allOf": [ - { - "properties": { - "core_details": { + "allOf": [ + { + "properties": { "properties": { - "event_type": { - "const": "work-zone" - } - }, - "required": ["event_type"] - } - }, - "required": ["core_details"] - }, - { - "properties": { - "core_details": { - "$ref": "#/definitions/RoadEventCoreDetails" - }, - "beginning_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event begins", - "type": "string" - }, - "ending_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event ends", - "type": "string" - }, - "beginning_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event begins", - "type": "number", - "minimum": 0 - }, - "ending_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event ends", - "type": "number", - "minimum": 0 - }, - "beginning_accuracy": { - "$ref": "#/definitions/SpatialVerification" - }, - "ending_accuracy": { - "$ref": "#/definitions/SpatialVerification" - }, - "start_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "end_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "start_date_accuracy": { - "$ref": "#/definitions/TimeVerification" - }, - "end_date_accuracy": { - "$ref": "#/definitions/TimeVerification" - }, - "event_status": { - "$ref": "#/definitions/EventStatus" - }, - "vehicle_impact": { - "$ref": "#/definitions/VehicleImpact" - }, - "location_method": { - "$ref": "#/definitions/LocationMethod" - }, - "worker_presence": { - "$ref": "#/definitions/WorkerPresence" - }, - "reduced_speed_limit_kph": { - "description": "If applicable, the reduced speed limit posted within the road event, in kilometers per hour", - "type": "integer", - "minimum": 0 - }, - "restrictions": { - "description": "A list of zero or more restrictions applying to the road event", - "type": "array", - "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" - } - }, - "types_of_work": { - "description": "A list of the types of work being done in a road event", - "type": "array", - "items": { - "$ref": "#/definitions/TypeOfWork" + "properties": { + "core_details": { + "properties": { + "event_type": { + "enum": ["work-zone", "detour"] + } + }, + "required": ["event_type"] + } + }, + "required": ["core_details"] } }, - "lanes": { - "description": "A list of individual lanes within a road event (roadway segment)", - "type": "array", - "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Lane.json" - } - } - }, - "required": [ - "core_details", - "beginning_accuracy", - "ending_accuracy", - "start_date", - "end_date", - "start_date_accuracy", - "end_date_accuracy", - "vehicle_impact", - "location_method" - ] - } - ] - }, - "DetourRoadEvent": { - "title": "Detour Road Event", - "description": "Descibes a detour on a roadway", - "type": "object", - "allOf": [ - { - "properties": { - "core_details": { - "properties": { - "event_type": { - "const": "detour" - } - }, - "required": ["event_type"] - } + "required": ["properties"] }, - "required": ["core_details"] - }, - { - "properties": { - "core_details": { - "$ref": "#/definitions/RoadEventCoreDetails" - }, - "beginning_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event begins", - "type": "string" - }, - "ending_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event ends", - "type": "string" - }, - "beginning_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event begins", - "type": "number", - "minimum": 0 - }, - "ending_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event ends", - "type": "number", - "minimum": 0 - }, - "start_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "end_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "start_date_accuracy": { - "$ref": "#/definitions/TimeVerification" - }, - "end_date_accuracy": { - "$ref": "#/definitions/TimeVerification" - }, - "event_status": { - "$ref": "#/definitions/EventStatus" - } - }, - "required": [ - "core_details", - "start_date", - "end_date", - "start_date_accuracy", - "end_date_accuracy" - ] - } - ] - }, - "TypeOfWork": { - "title": "Type of Work", - "description": "A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway", - "type": "object", - "properties": { - "type_name": { - "$ref": "#/definitions/WorkTypeName" - }, - "is_architectural_change": { - "description": "A flag indicating whether the type of work will result in an architectural change to the roadway", - "type": "boolean" - } - }, - "required": ["type_name"] - }, - "WorkerPresence": { - "title": "Worker Presence", - "description": "Information about the presence of workers in the work zone event area", - "type": "object", - "properties": { - "are_workers_present": { - "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object", - "type": "boolean" - }, - "method": { - "$ref": "#/definitions/WorkerPresenceMethod" - }, - "worker_presence_last_confirmed_date": { - "description": "Datetime at which the presence of workers was last confirmed using the 'source'", - "type": "string", - "format": "date-time" - }, - "confidence": { - "$ref": "#/definitions/WorkerPresenceConfidence" - }, - "definition": { - "description": "A list of situations in which workers are considered to be present in the jurisdiction of the data provider", - "type": "array", - "items": { - "$ref": "#/definitions/WorkerPresenceDefinition" - }, - "uniqueItems": true - } - }, - "required": ["are_workers_present"] - }, - "SpatialVerification": { - "title": "Spatial Verification Enumerated Type", - "description": "An indication of how a geographical coordinate was defined", - "enum": ["estimated", "verified"] - }, - "TimeVerification": { - "title": "Time Verification Enumerated Type", - "description": "A measure of how accurate a date-time is", - "enum": ["estimated", "verified"] - }, - "EventStatus": { - "title": "Event Status Enumerated Type", - "description": "The status of the road event", - "enum": ["planned", "pending", "active", "completed", "cancelled"] - }, - "VehicleImpact": { - "title": "Vehicle Impact Enumerated Type", - "description": "The impact to vehicular lanes along a single road in a single direction", - "enum": ["all-lanes-closed", "some-lanes-closed", "all-lanes-open", "alternating-one-way", "some-lanes-closed-merge-left", "some-lanes-closed-merge-right", "all-lanes-open-shift-left", "all-lanes-open-shift-right", "some-lanes-closed-split", "flagging", "temporary-traffic-signal", "unknown"] - }, - "WorkTypeName": { - "title": "Work Type Name Enumerated Type", - "description": "A high-level text description of the type of work being done in a road event", - "enum": [ - "maintenance", - "minor-road-defect-repair", - "roadside-work", - "overhead-work", - "below-road-work", - "barrier-work", - "surface-work", - "painting", - "roadway-relocation", - "roadway-creation" - ] - }, - "LaneStatus": { - "title": "Lane Status Enumerated Type", - "description": "The status of the lane for the traveling public", - "enum": ["open", "closed", "shift-left", "shift-right", "merge-left", "merge-right", "alternating-flow"] - }, - "WorkerPresenceMethod": { - "title": "Worker Presence Method Enumerated Type", - "description": "Describes methods for how worker presence in a work zone event area is determined", - "enum": [ - "camera-monitoring", - "arrow-board-present", - "cones-present", - "maintenance-vehicle-present", - "wearables-present", - "mobile-device-present", - "check-in-app", - "check-in-verbal", - "scheduled" - ] - }, - "WorkerPresenceDefinition": { - "title": "Worker Presence Definition Enumerated Type", - "description": "Situations in which workers may be considered present in a work zone", - "enum": [ - "workers-in-work-zone-working", - "workers-in-work-zone-not-working", - "mobile-equipment-in-work-zone-moving", - "mobile-equipment-in-work-zone-not-working", - "fixed-equipment-in-work-zone", - "humans-behind-barrier", - "humans-in-right-of-way" - ] + { + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventFeature.json" + } + ] + } }, - "WorkerPresenceConfidence": { - "title": "Worker Presence Confidence Enumerated Type", - "description": "A high-level description of the feed publisher's confidence in the reported WorkerPresence value of are_workers_present", - "enum": [ - "low", - "medium", - "high" - ] + "bbox": { + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" } - } + }, + "required": ["road_event_feed_info", "type", "features"] } From f9b4c8117ea75377a7a80a7efc563a0673b245ff Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Dec 2021 01:16:21 -0500 Subject: [PATCH 324/388] Add description of restriction event type --- spec-content/enumerated-types/EventType.md | 1 + 1 file changed, 1 insertion(+) diff --git a/spec-content/enumerated-types/EventType.md b/spec-content/enumerated-types/EventType.md index cf253ae1..c5831f5d 100644 --- a/spec-content/enumerated-types/EventType.md +++ b/spec-content/enumerated-types/EventType.md @@ -6,6 +6,7 @@ Value | Description --- | --- `work-zone` | An area of a trafficway with highway construction, maintenance, or utility-work activities. A work zone is typically marked by signs, channeling devices, barriers, pavement markings, and/or work vehicles. It extends from the first warning sign or flashing lights on a vehicle to the "End of Road Work" sign or the last traffic control device. A work zone may be for short or long durations and may include stationary or moving activities.
Inclusions:

  1. Long-term stationary highway construction such as building a new bridge, adding travel lanes to the roadway, and extending an existing trafficway.
  2. Mobile highway maintenance such as striping the roadway, median, and roadside grass mowing/landscaping, and pothole repair.
  3. Short-term stationary utility work such as repairing electric, gas, or water lines within the trafficway.
Exclusions:
  1. Private construction, maintenance, or utility work outside the trafficway.
*The AASHTO term equivalent to roadway is traveled way.
*The AASHTO term equivalent to trafficway is highway, street, or road.

Source: https://www.fhwa.dot.gov/publications/publicroads/99mayjun/workzone.cfm `detour` | A temporary rerouting of road users onto an existing trafficway to avoid a work zone or other impedance.

Source: https://mutcd.fhwa.dot.gov/htm/2009/part6/part6c.htm +`restriction` | A section of roadway that has limitations of how that section can be used. ## Used By Property | Object From 3277c9a4d251cd3131f4dc43d89029972b522a8f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Dec 2021 01:19:23 -0500 Subject: [PATCH 325/388] Add RoadRestrictionFeed to project README --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index c9cfcb03..62ebcf7b 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ WZDx defines the structure and content of multiple distinct data feeds. Each fee Feed Name | Description | Producer | Consumer | Uses | Content --- | --- | --- | --- | --- | --- `WZDxFeed` | Provides high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. | Agencies responsible for managing roadways and road work, typically state and local DOTs. | Traveling public via third parties such as mapping companies and CAVs. | Route planning; increased awareness; "put work zones on the map". | Work zone and detour road events (see [RoadEventFeature](/spec-content/objects/RoadEventFeature.md)). +`RoadRestrictionFeed` | Locates and describes portions of a road that have restrictions. Restriction types described by this specification are listed in the [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) enumerated type. | Transportation Authorities like Tribal, Local, State, or Federal Agencies. | Traveling public via third parties such as mapping companies and CAVs. | Increased awareness; Route planning; Driver, Passenger, and Road-User Safety; Increased Efficiency; Reduced Damage to Infrastructure. | Restriction road events (see [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). `SwzDeviceFeed` | Provides information (location, status, live data) about field devices deployed on the roadway in work zones. | Smart work zone equipment manufacturers or vendors. | Agencies responsible for managing roadways and permitting work, typically state and local DOTs. Third-parties such as mapping companies and CAVs may also be interested in field device information. | Simplifies design process for agencies wanting to interface with equipment manufacturers; aids in dynamically generating a `WZDxFeed` with accurate information; reduces effort for manufacturers to conform to different agencies requirements. | Field devices (see [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)). ## Repostitory Organization From 7f06113783865f52031c70b00feaa0c9ca0442bf Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Dec 2021 10:37:51 -0500 Subject: [PATCH 326/388] Add mention to RoadRestriction feed in examples README --- examples/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/README.md b/examples/README.md index f30272bc..2d484f35 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,5 +1,5 @@ # WZDx Example Feeds -This directory contains example GeoJSON documents from WZDx data feeds. The examples cover a range of common scenarios. There are examples for both the `WZDxFeed` and `SwzDeviceFeed`, contained within the respective subdirectories. +This directory contains example GeoJSON documents from WZDx data feeds. The examples cover a range of common scenarios. There are examples for the `WZDxFeed`, `RoadRestrictionFeed`, and `SwzDeviceFeed`, contained within the respective subdirectories. ## WZDxFeed Examples The following `WZDxFeed` examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type. as well as one `MultiPoint` geometry type for scenario 1. From fa7f543cadf85adc3de9710baa57a4ed71ab75dc Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Dec 2021 10:52:26 -0500 Subject: [PATCH 327/388] Add references to RoadRestrictionFeed in READMEs --- Creating_a_WZDx_Feed.md | 6 ++++-- spec-content/README.md | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/Creating_a_WZDx_Feed.md b/Creating_a_WZDx_Feed.md index 3abe19ff..01596b04 100644 --- a/Creating_a_WZDx_Feed.md +++ b/Creating_a_WZDx_Feed.md @@ -19,6 +19,7 @@ GeoJSON is the file format of choice because: WZDx defines the content and structure of several data feeds. Each feed is described by a single root object with many child objects. The output of a WZDx data feed is a GeoJSON file containing the feed object. WZDx defines the following feed objects: - [WZDxFeed Object](/spec-content/objects/WZDxFeed.md): describes high-level information about work zone events ocurring on roadways (called "road events") that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). This is the original work zone data exchange feed and the only feed that WZDx defined until [version 4.0](https://github.com/usdot-jpo-ode/wzdx/releases/tag/v4.0). +- [RoadRestrictionFeed Object](/spec-content/objects/RoadRestrictionFeed.md): describes the location and details of restrictions on roadways. - [SwzDeviceFeed Object](/spec-content/objects/SwzDeviceFeed.md): describes information (location, status, live data) about field devices deployed on the roadway in work zones. *See the [/spec-content/README.md](/spec-content/README.md) for detailed information on all objects defined by WZDx.* @@ -39,11 +40,12 @@ The following business rules help assure a standardized and interpretable use of ### JSON Schemas The WZDx Specification defines a JSON schema for each feed (WZDx v2.0 and later) within the [schemas](/schemas) directory. The repository contains schemas for the following feeds: -#### Current +#### Current Version (4.0) - [WZDx v4.0 WZDxFeed](/schemas/4.0/WZDxFeed.json) - [WZDx v4.0 SwzDeviceFeed](/schemas/4.0/SwzDeviceFeed.json) +- [WZDx v4.0 RoadRestrictionFeed](/schemas/4.0/RoadRestrictionFeed.json) -#### Previous +#### Previous Versions - [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) - [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) - [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) diff --git a/spec-content/README.md b/spec-content/README.md index b450b90f..4f22ea68 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -2,6 +2,7 @@ The WZDx specification defines the content and structure of several GeoJSON documents, each intended to be distributed as a data feed. Each GeoJSON document (colloquially "feed") contains a single feed root object. WZDx v4.0 defines the following feed objects: - [WZDxFeed](/spec-content/objects/WZDxFeed.md): describes high-level information about work zone events ocurring on roadways (called "road events") that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). This is the original work zone data exchange feed and the only feed that WZDx defined until [version 4.0](https://github.com/usdot-jpo-ode/wzdx/releases/tag/v4.0). +- [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md): describes the location and details of restrictions on roadways. - [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md): describes information (location, status, live data) about field devices deployed on the roadway in work zones. Each feed object contains many layers of child objects. Together all the objects define the WZDx feed. All WZDx objects are located in the [objects](/spec-content/objects) subdirectory and listed in the [Objects](#objects) section of this document. @@ -76,9 +77,13 @@ The object diagrams below depict the relationship between the data objects for e ![Object Diagram](/images/wzdx_object_diagram.jpg) +#### RoadRestrictionFeed + +[TBD] + #### SwzDeviceFeed -[TBC] +[TBD] #### Updating the object diagram When making changes to the specification, the object diagram needs to be updated as well. To modify the object diagram, open `/images/wzdx_object_diagram.drawio` at https://app.diagrams.net (or any drawio editor). Make necessary changes to the diagram using the web editor, then download the `drawio` file and replace `/images/wzdx_object_diagram.drawio` with the new file. Additionally **export** the diagram as a JPEG, using the diagram name as the file name, and replace `/images/wzdx_object_diagram.jpg` with the new image file. From 623acf7c8a2e71e80f15fffe87b6065989dbd768 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Dec 2021 10:54:30 -0500 Subject: [PATCH 328/388] Update list of data feeds table --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 62ebcf7b..6b90f1e6 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ WZDx defines the structure and content of multiple distinct data feeds. Each fee ### List of Data Feeds Feed Name | Description | Producer | Consumer | Uses | Content --- | --- | --- | --- | --- | --- -`WZDxFeed` | Provides high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. | Agencies responsible for managing roadways and road work, typically state and local DOTs. | Traveling public via third parties such as mapping companies and CAVs. | Route planning; increased awareness; "put work zones on the map". | Work zone and detour road events (see [RoadEventFeature](/spec-content/objects/RoadEventFeature.md)). +`WZDxFeed` | Provides high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. | Agencies responsible for managing roadways and road work, typically state and local DOTs. | Traveling public via third parties such as mapping companies and CAVs. | Route planning; increased awareness; "put work zones on the map". | Work zone and detour road events (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). `RoadRestrictionFeed` | Locates and describes portions of a road that have restrictions. Restriction types described by this specification are listed in the [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) enumerated type. | Transportation Authorities like Tribal, Local, State, or Federal Agencies. | Traveling public via third parties such as mapping companies and CAVs. | Increased awareness; Route planning; Driver, Passenger, and Road-User Safety; Increased Efficiency; Reduced Damage to Infrastructure. | Restriction road events (see [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). `SwzDeviceFeed` | Provides information (location, status, live data) about field devices deployed on the roadway in work zones. | Smart work zone equipment manufacturers or vendors. | Agencies responsible for managing roadways and permitting work, typically state and local DOTs. Third-parties such as mapping companies and CAVs may also be interested in field device information. | Simplifies design process for agencies wanting to interface with equipment manufacturers; aids in dynamically generating a `WZDxFeed` with accurate information; reduces effort for manufacturers to conform to different agencies requirements. | Field devices (see [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)). From cec6967af11086a12d6d8451d3f8a07ecc56974d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Thu, 9 Dec 2021 10:59:25 -0500 Subject: [PATCH 329/388] Combine FeedInfo and FeedDataSource schemas --- schemas/4.0/FeedDataSource.json | 53 ------------------------------ schemas/4.0/FeedInfo.json | 57 +++++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 55 deletions(-) delete mode 100644 schemas/4.0/FeedDataSource.json diff --git a/schemas/4.0/FeedDataSource.json b/schemas/4.0/FeedDataSource.json deleted file mode 100644 index 40c820bd..00000000 --- a/schemas/4.0/FeedDataSource.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedDataSource.json", - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "WZDx Feed Data Source", - "description": "Describes information about a specific data source used to build the work zone data feed", - "type": "object", - "properties": { - "data_source_id": { - "description": "Unique identifier for the organization providing work zone data", - "type": "string" - }, - "organization_name": { - "description": "The name of the organization for the authoritative source of the work zone data", - "type": "string" - }, - "contact_name": { - "description": "The name of the individual or group responsible for the data source", - "type": "string" - }, - "contact_email": { - "description": "The email address of the individual or group responsible for the data source", - "type": "string", - "format": "email" - }, - "update_frequency": { - "description": "The frequency in seconds at which the data source is updated", - "type": "integer", - "minimum": 1 - }, - "update_date": { - "description": "The UTC date and time when the data source was last updated", - "type": "string", - "format": "date-time" - }, - "lrs_type": { - "description": "**DEPRECATED** Describes the type of linear referencing system used for the milepost measurements", - "type": "string" - }, - "lrs_url": { - "description": "**DEPRECATED** A URL where additional information on the LRS information and transformation information is stored", - "type": "string", - "format": "uri" - }, - "location_verify_method": { - "description": "***DEPRECATED***The method used to verify the accuracy of the location information", - "type": "string" - } - }, - "required": [ - "data_source_id", - "organization_name" - ] -} \ No newline at end of file diff --git a/schemas/4.0/FeedInfo.json b/schemas/4.0/FeedInfo.json index e0bb3752..261bb96b 100644 --- a/schemas/4.0/FeedInfo.json +++ b/schemas/4.0/FeedInfo.json @@ -43,7 +43,7 @@ "description": "A list of specific data sources for the road event data in the feed", "type": "array", "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedDataSource.json" + "$ref": "#/definitions/FeedDataSource" }, "minItems": 1 } @@ -53,5 +53,58 @@ "version", "publisher", "data_sources" - ] + ], + "defintions": { + "FeedDataSource": { + "title": "WZDx Feed Data Source", + "description": "Describes information about a specific data source used to build the work zone data feed", + "type": "object", + "properties": { + "data_source_id": { + "description": "Unique identifier for the organization providing work zone data", + "type": "string" + }, + "organization_name": { + "description": "The name of the organization for the authoritative source of the work zone data", + "type": "string" + }, + "contact_name": { + "description": "The name of the individual or group responsible for the data source", + "type": "string" + }, + "contact_email": { + "description": "The email address of the individual or group responsible for the data source", + "type": "string", + "format": "email" + }, + "update_frequency": { + "description": "The frequency in seconds at which the data source is updated", + "type": "integer", + "minimum": 1 + }, + "update_date": { + "description": "The UTC date and time when the data source was last updated", + "type": "string", + "format": "date-time" + }, + "lrs_type": { + "description": "**DEPRECATED** Describes the type of linear referencing system used for the milepost measurements", + "type": "string" + }, + "lrs_url": { + "description": "**DEPRECATED** A URL where additional information on the LRS information and transformation information is stored", + "type": "string", + "format": "uri" + }, + "location_verify_method": { + "description": "***DEPRECATED***The method used to verify the accuracy of the location information", + "type": "string" + } + }, + "required": [ + "data_source_id", + "organization_name" + ] + } + } } \ No newline at end of file From 04cacb1ca1474cdceeab25f1347e7a2290eab1c6 Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Thu, 9 Dec 2021 15:22:17 -0500 Subject: [PATCH 330/388] Change reduced speed limit type to number Allow for decimals in reduced_speed_limit_kph values for ease of conversion --- create-feed/schemas/wzdx_v4.0_feed.json | 2 +- spec-content/objects/WorkZoneRoadEvent.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/create-feed/schemas/wzdx_v4.0_feed.json b/create-feed/schemas/wzdx_v4.0_feed.json index 087c76ee..70ef4f10 100644 --- a/create-feed/schemas/wzdx_v4.0_feed.json +++ b/create-feed/schemas/wzdx_v4.0_feed.json @@ -291,7 +291,7 @@ }, "reduced_speed_limit_kph": { "description": "If applicable, the reduced speed limit posted within the road event, in kilometers per hour", - "type": "integer", + "type": "number", "minimum": 0 }, "restrictions": { diff --git a/spec-content/objects/WorkZoneRoadEvent.md b/spec-content/objects/WorkZoneRoadEvent.md index 739e06e5..c7caecdc 100644 --- a/spec-content/objects/WorkZoneRoadEvent.md +++ b/spec-content/objects/WorkZoneRoadEvent.md @@ -23,7 +23,7 @@ Name | Type | Description | Conformance | Notes `event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | `types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | `worker_presence` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about whether workers are present in the road event area. | Optional | -`reduced_speed_limit_kph` | Integer | The reduced speed limit posted within the road event, in kilometers per hour. This property only needs to be supplied if the speed limit within the road event is lower than the posted speed limit of the roadway. | Optional | +`reduced_speed_limit_kph` | Number | The reduced speed limit posted within the road event, in kilometers per hour. This property only needs to be supplied if the speed limit within the road event is lower than the posted speed limit of the roadway. | Optional | `restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Optional | Restrictions can also be provided on an individual lane. ## Used By From b59181981cec1a5c74d33e33e036c44fe558b6dc Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Thu, 9 Dec 2021 15:30:56 -0500 Subject: [PATCH 331/388] Update reduced_speed_limit_kph in examples Add decimal values to examples with reduced speed limits --- .../examples/scenario1_simple_linestring_example.geojson | 8 ++++---- .../examples/scenario1_simple_multipoint_example.geojson | 8 ++++---- .../scenario2_laneshift_linestring_example.geojson | 2 +- .../examples/scenario4_detour_linestring_example.geojson | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/create-feed/examples/scenario1_simple_linestring_example.geojson b/create-feed/examples/scenario1_simple_linestring_example.geojson index 744bd0b9..cc9a2f23 100644 --- a/create-feed/examples/scenario1_simple_linestring_example.geojson +++ b/create-feed/examples/scenario1_simple_linestring_example.geojson @@ -55,7 +55,7 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit_kph": 88 + "reduced_speed_limit_kph": 88.514 }, "geometry": { "type": "LineString", @@ -442,7 +442,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 88, + "reduced_speed_limit_kph": 88.514, "restrictions": [], "types_of_work": [ { @@ -551,7 +551,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 88, + "reduced_speed_limit_kph": 88.514, "restrictions": [], "types_of_work": [ { @@ -673,7 +673,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 88, + "reduced_speed_limit_kph": 88.514, "restrictions": [], "types_of_work": [ { diff --git a/create-feed/examples/scenario1_simple_multipoint_example.geojson b/create-feed/examples/scenario1_simple_multipoint_example.geojson index 1e8969db..74d29f0e 100644 --- a/create-feed/examples/scenario1_simple_multipoint_example.geojson +++ b/create-feed/examples/scenario1_simple_multipoint_example.geojson @@ -55,7 +55,7 @@ "end_date_accuracy": "estimated", "event_status": "active", "vehicle_impact": "some-lanes-closed", - "reduced_speed_limit_kph": 88 + "reduced_speed_limit_kph": 88.514 }, "geometry": { "type": "MultiPoint", @@ -174,7 +174,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 88, + "reduced_speed_limit_kph": 88.514, "restrictions": [], "types_of_work": [ { @@ -275,7 +275,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 88, + "reduced_speed_limit_kph": 88.514, "restrictions": [], "types_of_work": [ { @@ -373,7 +373,7 @@ "humans-in-right-of-way" ] }, - "reduced_speed_limit_kph": 88, + "reduced_speed_limit_kph": 88.514, "restrictions": [], "types_of_work": [ { diff --git a/create-feed/examples/scenario2_laneshift_linestring_example.geojson b/create-feed/examples/scenario2_laneshift_linestring_example.geojson index 992cb446..9caf50bf 100644 --- a/create-feed/examples/scenario2_laneshift_linestring_example.geojson +++ b/create-feed/examples/scenario2_laneshift_linestring_example.geojson @@ -56,7 +56,7 @@ "mobile-equipment-in-work-zone-moving" ] }, - "reduced_speed_limit_kph": 88, + "reduced_speed_limit_kph": 88.5, "restrictions": [], "types_of_work": [ { diff --git a/create-feed/examples/scenario4_detour_linestring_example.geojson b/create-feed/examples/scenario4_detour_linestring_example.geojson index 2ae7182f..da47eb19 100644 --- a/create-feed/examples/scenario4_detour_linestring_example.geojson +++ b/create-feed/examples/scenario4_detour_linestring_example.geojson @@ -63,7 +63,7 @@ "mobile-equipment-in-work-zone-moving" ] }, - "reduced_speed_limit_kph": 88, + "reduced_speed_limit_kph": 88.5, "types_of_work": [ { "type_name": "surface-work", From e7c53f082cb5c0f61f3703bf57da6be4c32991a4 Mon Sep 17 00:00:00 2001 From: Mark Mockett <59966277+mark-mockett@users.noreply.github.com> Date: Fri, 10 Dec 2021 11:00:12 -0500 Subject: [PATCH 332/388] Fix typo in FeedInfo.json --- schemas/4.0/FeedInfo.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/schemas/4.0/FeedInfo.json b/schemas/4.0/FeedInfo.json index 261bb96b..ca615254 100644 --- a/schemas/4.0/FeedInfo.json +++ b/schemas/4.0/FeedInfo.json @@ -54,7 +54,7 @@ "publisher", "data_sources" ], - "defintions": { + "definitions": { "FeedDataSource": { "title": "WZDx Feed Data Source", "description": "Describes information about a specific data source used to build the work zone data feed", @@ -107,4 +107,4 @@ ] } } -} \ No newline at end of file +} From 442046215d28276f103d3861271c0212be1ab304 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 18:10:42 -0500 Subject: [PATCH 333/388] Update project README for consistency --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 6b90f1e6..6f21605c 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ WZDx defines the structure and content of multiple distinct data feeds. Each fee Feed Name | Description | Producer | Consumer | Uses | Content --- | --- | --- | --- | --- | --- `WZDxFeed` | Provides high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. | Agencies responsible for managing roadways and road work, typically state and local DOTs. | Traveling public via third parties such as mapping companies and CAVs. | Route planning; increased awareness; "put work zones on the map". | Work zone and detour road events (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). -`RoadRestrictionFeed` | Locates and describes portions of a road that have restrictions. Restriction types described by this specification are listed in the [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) enumerated type. | Transportation Authorities like Tribal, Local, State, or Federal Agencies. | Traveling public via third parties such as mapping companies and CAVs. | Increased awareness; Route planning; Driver, Passenger, and Road-User Safety; Increased Efficiency; Reduced Damage to Infrastructure. | Restriction road events (see [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). +`RoadRestrictionFeed` | Provides information about sections of roadways that have restrictions. Restriction types described by this specification are listed in the [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) enumerated type. | Transportation Authorities like Tribal, Local, State, or Federal Agencies. | Traveling public via third parties such as mapping companies and CAVs. | Increased awareness; Route planning; Driver, Passenger, and Road-User Safety; Increased Efficiency; Reduced Damage to Infrastructure. | Restriction road events (see [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). `SwzDeviceFeed` | Provides information (location, status, live data) about field devices deployed on the roadway in work zones. | Smart work zone equipment manufacturers or vendors. | Agencies responsible for managing roadways and permitting work, typically state and local DOTs. Third-parties such as mapping companies and CAVs may also be interested in field device information. | Simplifies design process for agencies wanting to interface with equipment manufacturers; aids in dynamically generating a `WZDxFeed` with accurate information; reduces effort for manufacturers to conform to different agencies requirements. | Field devices (see [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)). ## Repostitory Organization @@ -116,12 +116,12 @@ The WZDWG welcomes feedback and comments on the WZDx 3.1 Specification. Comments ## JSON Schemas The WZDx Specification defines a JSON schema for each feed within the [schemas](/schemas) directory. Schemas can be used to validate a WZDx feed document for compliance to the specification. The repository contains schemas for the following feeds: -### Current +### Current Version (4.0) - [WZDx v4.0 WZDxFeed](/schemas/4.0/WZDxFeed.json) - [WZDx v4.0 SwzDeviceFeed](/schemas/4.0/SwzDeviceFeed.json) - [WZDx v4.0 RoadRestrictionFeed](/schemas/4.0/RoadRestrictionFeed.json) -### Previous +### Previous Version - [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) - [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) - [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) From ada0c8f54feab5d657815da7141a78b130e36183 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 18:13:16 -0500 Subject: [PATCH 334/388] Fix WZDxFeed schema file --- schemas/4.0/WZDxFeed.json | 79 --------------------------------------- 1 file changed, 79 deletions(-) diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index c1975f38..021b8c9b 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -21,7 +21,6 @@ { "properties": { "properties": { -<<<<<<< HEAD "properties": { "core_details": { "properties": { @@ -33,84 +32,6 @@ } }, "required": ["core_details"] -======= - "event_type": { - "const": "work-zone" - } - }, - "required": ["event_type"] - } - }, - "required": ["core_details"] - }, - { - "properties": { - "core_details": { - "$ref": "#/definitions/RoadEventCoreDetails" - }, - "beginning_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event begins", - "type": "string" - }, - "ending_cross_street": { - "description": "Name or number of the nearest cross street along the roadway where the event ends", - "type": "string" - }, - "beginning_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event begins", - "type": "number", - "minimum": 0 - }, - "ending_milepost": { - "description": "The linear distance measured against a milepost marker along a roadway where the event ends", - "type": "number", - "minimum": 0 - }, - "beginning_accuracy": { - "$ref": "#/definitions/SpatialVerification" - }, - "ending_accuracy": { - "$ref": "#/definitions/SpatialVerification" - }, - "start_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event begins (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "end_date": { - "description": "The UTC date and time (formatted according to RFC 3339, Section 5.6) when the road event ends (e.g. 2020-11-03T19:37:00Z)", - "type": "string", - "format": "date-time" - }, - "start_date_accuracy": { - "$ref": "#/definitions/TimeVerification" - }, - "end_date_accuracy": { - "$ref": "#/definitions/TimeVerification" - }, - "event_status": { - "$ref": "#/definitions/EventStatus" - }, - "vehicle_impact": { - "$ref": "#/definitions/VehicleImpact" - }, - "location_method": { - "$ref": "#/definitions/LocationMethod" - }, - "worker_presence": { - "$ref": "#/definitions/WorkerPresence" - }, - "reduced_speed_limit_kph": { - "description": "If applicable, the reduced speed limit posted within the road event, in kilometers per hour", - "type": "number", - "minimum": 0 - }, - "restrictions": { - "description": "A list of zero or more restrictions applying to the road event", - "type": "array", - "items": { - "$ref": "#/definitions/Restriction" ->>>>>>> upstream/v4.0-release } }, "required": ["properties"] From 407c123d54522c56e7feab50b1b65660e5ac23b0 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 18:38:31 -0500 Subject: [PATCH 335/388] Fix RoadEventFeature schema --- schemas/4.0/RoadEventFeature.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index a50f2a5e..42b234e2 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -28,6 +28,9 @@ }, { "$ref": "#/definitions/DetourRoadEvent" + }, + { + "$ref": "#/definitions/RestrictionRoadEvent" } ] }, From 379fd93b8a29ff9ae9adfc7994f5b7d0f5ccc859 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 18:42:19 -0500 Subject: [PATCH 336/388] Update all schema IDs for demonstration --- schemas/4.0/BoundingBox.json | 2 +- schemas/4.0/FeedInfo.json | 2 +- schemas/4.0/RoadEventFeature.json | 10 +++++----- schemas/4.0/RoadRestrictionFeed.json | 6 +++--- schemas/4.0/SwzDeviceFeed.json | 8 ++++---- schemas/4.0/WZDxFeed.json | 8 ++++---- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/schemas/4.0/BoundingBox.json b/schemas/4.0/BoundingBox.json index 37fc804a..ec2e0372 100644 --- a/schemas/4.0/BoundingBox.json +++ b/schemas/4.0/BoundingBox.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "GeoJSON Bounding Box", "description": "Information on the coordinate range for a Geometry, Feature, or FeatureCollection", diff --git a/schemas/4.0/FeedInfo.json b/schemas/4.0/FeedInfo.json index ca615254..f874b4ed 100644 --- a/schemas/4.0/FeedInfo.json +++ b/schemas/4.0/FeedInfo.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedInfo.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx Feed Information", "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index 42b234e2..19bf13da 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -1,6 +1,6 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventFeature.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Road Event Feature (GeoJSON Feature)", "description": "The container object for a specific WZDx road event; an instance of a GeoJSON Feature", @@ -45,7 +45,7 @@ ] }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"], @@ -391,7 +391,7 @@ "enum": ["northbound", "eastbound", "southbound", "westbound"] }, "Lane": { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Lane.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/Lane.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Lane", "description": "An individual lane within a road event", @@ -417,7 +417,7 @@ "description": "A list of restrictions specific to the lane", "type": "array", "items": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/Restriction.json" } } }, @@ -478,7 +478,7 @@ ] }, "Restriction": { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/Restriction.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/Restriction.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Restriction", "description": "A restriction on a roadway or lane, including type and value", diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index fda96a22..01a9a6c7 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -6,7 +6,7 @@ "type": "object", "properties": { "feed_info": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -38,13 +38,13 @@ "required": ["properties"] }, { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventFeature.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json" } ] } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": [ diff --git a/schemas/4.0/SwzDeviceFeed.json b/schemas/4.0/SwzDeviceFeed.json index df7a5cfe..d53766a5 100644 --- a/schemas/4.0/SwzDeviceFeed.json +++ b/schemas/4.0/SwzDeviceFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/SwzDeviceFeed.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/SwzDeviceFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 SwzDeviceFeed", "description": "The GeoJSON output of a WZDx smart work zone device data feed (v4.0)", "type": "object", "properties": { "feed_info": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -20,7 +20,7 @@ } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": ["feed_info", "type", "features"], @@ -78,7 +78,7 @@ ] }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"] diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index 021b8c9b..789f44b6 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -1,13 +1,13 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/WZDxFeed.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 WZDxFeed", "description": "The GeoJSON output of a WZDx feed data feed (v4.0)", "type": "object", "properties": { "road_event_feed_info": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -37,13 +37,13 @@ "required": ["properties"] }, { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/RoadEventFeature.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json" } ] } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/field-devices/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": ["road_event_feed_info", "type", "features"] From c282663fa7010a406c2ca874a245878cbc128ce7 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 18:47:20 -0500 Subject: [PATCH 337/388] Re-add missing LocationMethod definition to schema --- schemas/4.0/RoadEventFeature.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index 19bf13da..95e0b0bd 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -550,6 +550,17 @@ }, "required": ["type_name"] }, + "LocationMethod": { + "title": "Location Method Enumerated Type", + "description": "The typical method used to locate the beginning and end of a work zone impact area", + "enum": [ + "channel-device-method", + "sign-method", + "junction-method", + "other", + "unknown" + ] + }, "WorkerPresence": { "title": "Worker Presence", "description": "Information about the presence of workers in the work zone event area", From 34cbb37f2cacd11ab21a33261cd2a52608641a26 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 19:11:44 -0500 Subject: [PATCH 338/388] Fix RoadEventFeature schema --- schemas/4.0/RoadEventFeature.json | 4 ---- 1 file changed, 4 deletions(-) diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index 95e0b0bd..8d6b9922 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -391,8 +391,6 @@ "enum": ["northbound", "eastbound", "southbound", "westbound"] }, "Lane": { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/Lane.json", - "$schema": "http://json-schema.org/draft-07/schema#", "title": "Lane", "description": "An individual lane within a road event", "type": "object", @@ -478,8 +476,6 @@ ] }, "Restriction": { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/Restriction.json", - "$schema": "http://json-schema.org/draft-07/schema#", "title": "Restriction", "description": "A restriction on a roadway or lane, including type and value", "type": "object", From 138c03576de1fa7bb8578002dfca1a24a51824b8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 19:14:49 -0500 Subject: [PATCH 339/388] Finalize fix of RoadEventFeature schema --- schemas/4.0/RoadEventFeature.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index 8d6b9922..7b76f696 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -415,7 +415,7 @@ "description": "A list of restrictions specific to the lane", "type": "array", "items": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/Restriction.json" + "$ref": "#/definitions/Restriction" } } }, From b97a7db26f5692e1af5536324a59d41b886315ab Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 19:15:15 -0500 Subject: [PATCH 340/388] UFix name of feed info in bridge height restriction example --- .../bridge_height_restriction_linestring_example.geojson | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson b/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson index 39c7089d..1373677e 100644 --- a/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson +++ b/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson @@ -1,5 +1,5 @@ { - "road_event_feed_info": { + "feed_info": { "update_date": "2021-07-01T15:00:00Z", "publisher": "New York State DOT", "contact_name": "Frederick Francis Feedmanager", From 404b72bdfd3fa80a106eec8a41ba39a69b17bcb3 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 19:19:26 -0500 Subject: [PATCH 341/388] Remove whitespace from WZDxFeed --- schemas/4.0/WZDxFeed.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index 789f44b6..9b8e00a2 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -1,4 +1,3 @@ - { "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", @@ -47,4 +46,4 @@ } }, "required": ["road_event_feed_info", "type", "features"] -} +} \ No newline at end of file From 75c9f48a40076f4e6c159b256690565966fd7527 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 19:19:51 -0500 Subject: [PATCH 342/388] Add demonstration to RoadRestrictionFeed schema --- schemas/4.0/RoadRestrictionFeed.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index 01a9a6c7..6e42e038 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -1,5 +1,5 @@ { - "$id": "TODO PERMALINK", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadRestrictionFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 Road Restriction Feed", "description": "The GeoJSON output of a WZDx road restriction data feed (v4.0)", From c69f5968f955fe859f2597290c4c859a839b7854 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 19:22:28 -0500 Subject: [PATCH 343/388] Change bridge height restriction example to use spaces for indentation --- ...ght_restriction_linestring_example.geojson | 494 +++++++++--------- 1 file changed, 247 insertions(+), 247 deletions(-) diff --git a/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson b/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson index 1373677e..7f786a4b 100644 --- a/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson +++ b/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson @@ -1,249 +1,249 @@ { - "feed_info": { - "update_date": "2021-07-01T15:00:00Z", - "publisher": "New York State DOT", - "contact_name": "Frederick Francis Feedmanager", - "contact_email": "fred.feedmanager@testdot.gov", - "update_frequency": 300, - "version": "4.0", - "data_sources": [ - { - "data_source_id": "1", - "organization_name": "New York City DOT", - "contact_name": "Solomn Soliel Sourcefeed", - "contact_email": "solomon.sourcefeed@testcity1.gov", - "update_frequency": 60, - "update_date": "2021-07-01T00:00:00Z" - } - ] - }, - "type": "FeatureCollection", - "features": [ - { - "id": "Bridge1", - "type": "Feature", - "properties": { - "core_details": { - "event_type": "restriction", - "data_source_id": "1", - "road_names": [ - "HRP", - "Hutchinson Parkway", - "Hutchinson River Parkway" - ], - "direction": "northbound" - }, - "restrictions": [ - { - "type": "reduced-height", - "value": 10.5, - "unit": "feet" - } - ], - "lanes": [ - { - "order": 1, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-height", - "value": 10.5, - "unit": "feet" - } - ] - }, - { - "order": 2, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-height", - "value": 11, - "unit": "feet" - } - ] - }, - { - "order": 3, - "status": "open", - "type": "general", - "restrictions": [ - { - "type": "reduced-height", - "value": 10.5, - "unit": "feet" - } - ] - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83857488632202, - 40.83782481579416 - ], - [ - -73.8385534286499, - 40.83905758069452 - ], - [ - -73.83834958076477, - 40.84045773030475 - ], - [ - -73.83817791938782, - 40.841269397695825 - ], - [ - -73.83692264556885, - 40.84498467829638 - ], - [ - -73.83683949708939, - 40.84519569836051 - ], - [ - -73.83674025535583, - 40.84555483673242 - ], - [ - -73.83666649460793, - 40.84582976902955 - ], - [ - -73.83646667003632, - 40.84667890696712 - ] - ] - } - }, - { - "id": "Bridge2", - "type": "Feature", - "properties": { - "core_details": { - "event_type": "restriction", - "data_source_id": "1", - "road_names": [ - "HRP", - "Hutchinson Parkway", - "Hutchinson River Parkway" - ], - "direction": "southbound" - }, - "restrictions": [ - { - "type": "reduced-height", - "value": 9.0, - "unit": "feet" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83725792169571, - 40.84455654898646 - ], - [ - -73.8378158211708, - 40.84294748850873 - ], - [ - -73.83808672428131, - 40.84214192905569 - ], - [ - -73.83834153413773, - 40.84133635981177 - ] - ] - } - }, - { - "id": "Bridge3", - "type": "Feature", - "properties": { - "core_details": { - "event_type": "restriction", - "data_source_id": "1", - "road_names": [ - "HRP", - "Hutchinson Parkway", - "Hutchinson River Parkway" - ], - "direction": "southbound" - }, - "restrictions": [ - { - "type": "reduced-height", - "value": 11, - "unit": "feet" - } - ] - }, - "geometry": { - "type": "LineString", - "coordinates": [ - [ - -73.83834153413773, - 40.841335852523244 - ], - [ - -73.8384260237217, - 40.84103300059402 - ], - [ - -73.83847497403622, - 40.84082856207721 - ], - [ - -73.83851654827595, - 40.84063071775089 - ], - [ - -73.83855678141117, - 40.84045722300951 - ], - [ - -73.83865937590599, - 40.83983324694044 - ], - [ - -73.83872039616108, - 40.8393289888175 - ], - [ - -73.83875325322151, - 40.838710582522424 - ], - [ - -73.83877135813236, - 40.838443230352674 - ], - [ - -73.83877202868462, - 40.83817942829337 - ], - [ - -73.83877471089363, - 40.83773502091179 - ], - [ - -73.83877538144588, - 40.83721857114785 - ], - [ - -73.83877336978912, - 40.83710442404608 - ] - ] - } - } - ] + "feed_info": { + "update_date": "2021-07-01T15:00:00Z", + "publisher": "New York State DOT", + "contact_name": "Frederick Francis Feedmanager", + "contact_email": "fred.feedmanager@testdot.gov", + "update_frequency": 300, + "version": "4.0", + "data_sources": [ + { + "data_source_id": "1", + "organization_name": "New York City DOT", + "contact_name": "Solomn Soliel Sourcefeed", + "contact_email": "solomon.sourcefeed@testcity1.gov", + "update_frequency": 60, + "update_date": "2021-07-01T00:00:00Z" + } + ] + }, + "type": "FeatureCollection", + "features": [ + { + "id": "Bridge1", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": "1", + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "northbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 10.5, + "unit": "feet" + } + ], + "lanes": [ + { + "order": 1, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-height", + "value": 10.5, + "unit": "feet" + } + ] + }, + { + "order": 2, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-height", + "value": 11, + "unit": "feet" + } + ] + }, + { + "order": 3, + "status": "open", + "type": "general", + "restrictions": [ + { + "type": "reduced-height", + "value": 10.5, + "unit": "feet" + } + ] + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83857488632202, + 40.83782481579416 + ], + [ + -73.8385534286499, + 40.83905758069452 + ], + [ + -73.83834958076477, + 40.84045773030475 + ], + [ + -73.83817791938782, + 40.841269397695825 + ], + [ + -73.83692264556885, + 40.84498467829638 + ], + [ + -73.83683949708939, + 40.84519569836051 + ], + [ + -73.83674025535583, + 40.84555483673242 + ], + [ + -73.83666649460793, + 40.84582976902955 + ], + [ + -73.83646667003632, + 40.84667890696712 + ] + ] + } + }, + { + "id": "Bridge2", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": "1", + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "southbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 9.0, + "unit": "feet" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83725792169571, + 40.84455654898646 + ], + [ + -73.8378158211708, + 40.84294748850873 + ], + [ + -73.83808672428131, + 40.84214192905569 + ], + [ + -73.83834153413773, + 40.84133635981177 + ] + ] + } + }, + { + "id": "Bridge3", + "type": "Feature", + "properties": { + "core_details": { + "event_type": "restriction", + "data_source_id": "1", + "road_names": [ + "HRP", + "Hutchinson Parkway", + "Hutchinson River Parkway" + ], + "direction": "southbound" + }, + "restrictions": [ + { + "type": "reduced-height", + "value": 11, + "unit": "feet" + } + ] + }, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + -73.83834153413773, + 40.841335852523244 + ], + [ + -73.8384260237217, + 40.84103300059402 + ], + [ + -73.83847497403622, + 40.84082856207721 + ], + [ + -73.83851654827595, + 40.84063071775089 + ], + [ + -73.83855678141117, + 40.84045722300951 + ], + [ + -73.83865937590599, + 40.83983324694044 + ], + [ + -73.83872039616108, + 40.8393289888175 + ], + [ + -73.83875325322151, + 40.838710582522424 + ], + [ + -73.83877135813236, + 40.838443230352674 + ], + [ + -73.83877202868462, + 40.83817942829337 + ], + [ + -73.83877471089363, + 40.83773502091179 + ], + [ + -73.83877538144588, + 40.83721857114785 + ], + [ + -73.83877336978912, + 40.83710442404608 + ] + ] + } + } + ] } \ No newline at end of file From 54acdbafda388c48de5937fab039170177a6f840 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 19:23:21 -0500 Subject: [PATCH 344/388] Add restriction to EventType schema --- schemas/4.0/RoadEventFeature.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index 7b76f696..e9374c31 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -344,7 +344,7 @@ "EventType": { "title": "Road Event Type Enumerated Type", "description": "The type of WZDx road event", - "enum": ["work-zone", "detour"] + "enum": ["work-zone", "detour", "restriction"] }, "Relationship": { "title": "Relationship", From a2581e4df0a98b7a7c594685aed74697d183da7d Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 22:12:22 -0500 Subject: [PATCH 345/388] Revert schema to match current v4.0-release RoadEventFeature --- schemas/4.0/RoadEventFeature.json | 208 +++++++++++------------------- 1 file changed, 77 insertions(+), 131 deletions(-) diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index e9374c31..dbd3229b 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -168,7 +168,7 @@ }, "DetourRoadEvent": { "title": "Detour Road Event", - "description": "Describes a detour on a roadway", + "description": "Descibes a detour on a roadway", "type": "object", "allOf": [ { @@ -341,11 +341,6 @@ "road_names" ] }, - "EventType": { - "title": "Road Event Type Enumerated Type", - "description": "The type of WZDx road event", - "enum": ["work-zone", "detour", "restriction"] - }, "Relationship": { "title": "Relationship", "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", @@ -385,10 +380,20 @@ } } }, - "Direction": { - "title": "Direction Enumerated Type", - "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", - "enum": ["northbound", "eastbound", "southbound", "westbound"] + "TypeOfWork": { + "title": "Type of Work", + "description": "A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway", + "type": "object", + "properties": { + "type_name": { + "$ref": "#/definitions/WorkTypeName" + }, + "is_architectural_change": { + "description": "A flag indicating whether the type of work will result in an architectural change to the roadway", + "type": "boolean" + } + }, + "required": ["type_name"] }, "Lane": { "title": "Lane", @@ -407,73 +412,19 @@ "$ref": "#/definitions/LaneType" }, "lane_number": { - "description": "The number assigned to the lane to help identify its position. Flexible, but usually used for regular, driveable lanes", + "description": "***DEPRECATED*** The number assigned to the lane to help identify its position. Flexible, but usually used for regular, driveable lanes", "type": "integer", "minimum": 1 }, "restrictions": { - "description": "A list of restrictions specific to the lane", + "description": "A list of zero or more restrictions specific to the lane", "type": "array", "items": { "$ref": "#/definitions/Restriction" } } }, - "required": [ - "status", - "type", - "order" - ] - }, - "LaneStatus": { - "title": "Lane Status Enumerated Type", - "description": "The status of the lane for the traveling public", - "enum": [ - "open", - "closed", - "shift-left", - "shift-right", - "merge-left", - "merge-right", - "alternating-one-way", - "alternating-flow" - ] - }, - "LaneType": { - "title": "Lane Type Enumerated Type", - "description": "An indication of the type of lane or shoulder", - "enum": [ - "lane", - "right-turning-lane", - "left-turning-lane", - "right-exit-lane", - "left-exit-lane", - "right-entrance-lane", - "left-entrance-lane", - "sidewalk", - "bike-lane", - "alternating-flow-lane", - "shoulder", - "hov-lane", - "reversible-lane", - "center-left-turn-lane", - "left-lane", - "right-lane", - "middle-lane", - "center-lane", - "right-shoulder", - "left-shoulder", - "right-merging-lane", - "left-merging-lane", - "right-exit-ramp", - "right-second-exit-ramp", - "left-exit-ramp", - "left-second-exit-ramp", - "right-entrance-ramp", - "right-second-entrance-ramp", - "left-entrance-ramp", - "left-second-entrance-ramp" - ] + "required": ["status", "type", "order"] }, "Restriction": { "title": "Restriction", @@ -490,73 +441,11 @@ "$ref": "#/definitions/UnitOfMeasurement" } }, - "required": [ - "type" - ], + "required": ["type"], "dependencies": { - "value": [ - "unit" - ] + "value": ["unit"] } }, - "RestrictionType": { - "title": "Restriction Type Enumerated Type", - "description": "The type of vehicle restriction on a roadway", - "enum": [ - "no-trucks", - "travel-peak-hours-only", - "hov-3", - "hov-2", - "no-parking", - "reduced-width", - "reduced-height", - "reduced-length", - "reduced-weight", - "axle-load-limit", - "gross-weight-limit", - "towing-prohibited", - "permitted-oversize-loads-prohibited", - "local-access-only" - ] - }, - "UnitOfMeasurement": { - "title": "Unit of Measurement Enumerated Type", - "description": "Unit of measurement, used when providing a unit to accompany a value", - "enum": [ - "feet", - "inches", - "centimeters", - "pounds", - "tons", - "kilograms" - ] - }, - "TypeOfWork": { - "title": "Type of Work", - "description": "A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway", - "type": "object", - "properties": { - "type_name": { - "$ref": "#/definitions/WorkTypeName" - }, - "is_architectural_change": { - "description": "A flag indicating whether the type of work will result in an architectural change to the roadway", - "type": "boolean" - } - }, - "required": ["type_name"] - }, - "LocationMethod": { - "title": "Location Method Enumerated Type", - "description": "The typical method used to locate the beginning and end of a work zone impact area", - "enum": [ - "channel-device-method", - "sign-method", - "junction-method", - "other", - "unknown" - ] - }, "WorkerPresence": { "title": "Worker Presence", "description": "Information about the presence of workers in the work zone event area", @@ -588,6 +477,16 @@ }, "required": ["are_workers_present"] }, + "EventType": { + "title": "Road Event Type Enumerated Type", + "description": "The type of WZDx road event", + "enum": ["work-zone", "detour", "restriction"] + }, + "Direction": { + "title": "Direction Enumerated Type", + "description": "The direction for a road event based on standard naming for US roads; indicates the direction the traffic flow regardless of the real heading angle", + "enum": ["northbound", "eastbound", "southbound", "westbound"] + }, "SpatialVerification": { "title": "Spatial Verification Enumerated Type", "description": "An indication of how a geographical coordinate was defined", @@ -608,6 +507,26 @@ "description": "The impact to vehicular lanes along a single road in a single direction", "enum": ["all-lanes-closed", "some-lanes-closed", "all-lanes-open", "alternating-one-way", "some-lanes-closed-merge-left", "some-lanes-closed-merge-right", "all-lanes-open-shift-left", "all-lanes-open-shift-right", "some-lanes-closed-split", "flagging", "temporary-traffic-signal", "unknown"] }, + "RestrictionType": { + "title": "Restriction Type Enumerated Type", + "description": "The type of vehicle restriction on a roadway", + "enum": [ + "no-trucks", + "travel-peak-hours-only", + "hov-3", + "hov-2", + "no-parking", + "reduced-width", + "reduced-height", + "reduced-length", + "reduced-weight", + "axle-load-limit", + "gross-weight-limit", + "towing-prohibited", + "permitted-oversize-loads-prohibited", + "local-access-only" + ] + }, "WorkTypeName": { "title": "Work Type Name Enumerated Type", "description": "A high-level text description of the type of work being done in a road event", @@ -624,6 +543,33 @@ "roadway-creation" ] }, + "LaneStatus": { + "title": "Lane Status Enumerated Type", + "description": "The status of the lane for the traveling public", + "enum": ["open", "closed", "shift-left", "shift-right", "merge-left", "merge-right", "alternating-flow"] + }, + "LaneType": { + "title": "Lane Type Enumerated Type", + "description": "An indication of the type of lane or shoulder", + "enum": [ + "general", + "exit-lane", + "exit-ramp", + "entrance-lane", + "entrance-ramp", + "sidewalk", + "bike-lane", + "shoulder", + "parking", + "median", + "center-left-turn-lane" + ] + }, + "UnitOfMeasurement": { + "title": "Unit of Measurement Enumerated Type", + "description": "Unit of measurement, used when providing a unit to accompany a value", + "enum": ["feet", "inches", "centimeters", "pounds", "tons", "kilograms"] + }, "WorkerPresenceMethod": { "title": "Worker Presence Method Enumerated Type", "description": "Describes methods for how worker presence in a work zone event area is determined", From 616b0386e9522cbf8c31efb7a32a2c9b97c25252 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 23:23:18 -0500 Subject: [PATCH 346/388] Add missing LocationMethod --- schemas/4.0/RoadEventFeature.json | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index dbd3229b..00b96e24 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -341,7 +341,17 @@ "road_names" ] }, - "Relationship": { + "LocationMethod": { + "title": "Location Method Enumerated Type", + "description": "The typical method used to locate the beginning and end of a work zone impact area", + "enum": [ + "channel-device-method", + "sign-method", + "junction-method", + "other", + "unknown" + ] + },"Relationship": { "title": "Relationship", "description": "Identifies both sequential and hierarchical relationships between road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events", "type": "object", From e71cfaf5915b323033f61cf22d1bac1e56071aca Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 23:44:31 -0500 Subject: [PATCH 347/388] Fix RoadRestrictionFeed schema --- schemas/4.0/RoadRestrictionFeed.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index 6e42e038..2f1edcf8 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -48,7 +48,7 @@ } }, "required": [ - "road_event_feed_info", + "feed_info", "type", "features" ] From 70c319d658c715a9979d60bb3580fdafa51381c4 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 23:49:51 -0500 Subject: [PATCH 348/388] Add SwzDeviceFeed to FeedInfo 'Used By' --- spec-content/objects/FeedInfo.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spec-content/objects/FeedInfo.md b/spec-content/objects/FeedInfo.md index 44650f09..5bc07046 100644 --- a/spec-content/objects/FeedInfo.md +++ b/spec-content/objects/FeedInfo.md @@ -16,5 +16,6 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`road_event_feed_info` | [WZDxFeed](/spec-content/objects/WZDxFeed.md) `feed_info` | [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) +`feed_info` | [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) +`road_event_feed_info` | [WZDxFeed](/spec-content/objects/WZDxFeed.md) From bd365c752272897be7ce33f402f64e63f85dde40 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Fri, 10 Dec 2021 23:53:28 -0500 Subject: [PATCH 349/388] Remove abbreviation --- spec-content/objects/RoadRestrictionFeed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index c0fad43f..0905b0e0 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -10,4 +10,4 @@ Name | Type | Description | Conformance | Notes `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. ## Used By -Road Restriction GeoJSON document (one `RRxFeed` object per file). +Road Restriction GeoJSON document (one `RoadRestrictionFeed` object per file). From 89bdc947e12516c42c46786bf730fc4a757cbc3f Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Mon, 13 Dec 2021 12:44:32 -0500 Subject: [PATCH 350/388] Fix typos --- examples/README.md | 2 +- spec-content/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/README.md b/examples/README.md index 2d484f35..4c162c4b 100644 --- a/examples/README.md +++ b/examples/README.md @@ -61,6 +61,6 @@ The following example `RoadrestrictionFeed`s are provided: ### 1. Bridge Height Restriction The [Bridge Height Restriction Example](/examples/RoadRestrictionFeed/bridge_restriction_linestring_example.geojson) shows the use of a [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to define a bridge clearance on a roadway. -- Defines threes bridge height restrictions. +- Defines three bridge height restrictions. - Two restrictions (`id`s: `Bridge2`, `Bridge3`) are defined using only the required core details and basic event-level information. - One restriction (`id`: `Bridge1`) also includes lane-level details with additional height restrictions values for individual lanes. \ No newline at end of file diff --git a/spec-content/README.md b/spec-content/README.md index 4f22ea68..f6e7d085 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -44,7 +44,7 @@ Object | Description [Lane](/spec-content/objects/Lane.md) | An individual lane within a road event. [Relationship](/spec-content/objects/Relationship.md) | Identification of both sequential and hierarchical relationships between road events and other entities. [Restriction](/spec-content/objects/Restriction.md) | A restriction on a road event or lane, including type and value. -[RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | describes a section of roadway and the limitations of how that section can be used. +[RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | Describes a section of roadway and the limitations of how that section can be used. [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events. [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. From 486dc4c7f6ecfc484a53676ef19d4ae29f9fc9a5 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 13 Dec 2021 21:46:49 -0500 Subject: [PATCH 351/388] Update schema ids to reference main branch --- schemas/4.0/BoundingBox.json | 2 +- schemas/4.0/FeedInfo.json | 2 +- schemas/4.0/RoadEventFeature.json | 4 ++-- schemas/4.0/RoadRestrictionFeed.json | 8 ++++---- schemas/4.0/SwzDeviceFeed.json | 8 ++++---- schemas/4.0/WZDxFeed.json | 8 ++++---- 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/schemas/4.0/BoundingBox.json b/schemas/4.0/BoundingBox.json index ec2e0372..e35ed926 100644 --- a/schemas/4.0/BoundingBox.json +++ b/schemas/4.0/BoundingBox.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "GeoJSON Bounding Box", "description": "Information on the coordinate range for a Geometry, Feature, or FeatureCollection", diff --git a/schemas/4.0/FeedInfo.json b/schemas/4.0/FeedInfo.json index f874b4ed..ae3e6eeb 100644 --- a/schemas/4.0/FeedInfo.json +++ b/schemas/4.0/FeedInfo.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx Feed Information", "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index 00b96e24..a97fa1a4 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -1,6 +1,6 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadEventFeature.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Road Event Feature (GeoJSON Feature)", "description": "The container object for a specific WZDx road event; an instance of a GeoJSON Feature", @@ -45,7 +45,7 @@ ] }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"], diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index 2f1edcf8..a01b98d5 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadRestrictionFeed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadRestrictionFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 Road Restriction Feed", "description": "The GeoJSON output of a WZDx road restriction data feed (v4.0)", "type": "object", "properties": { "feed_info": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -38,13 +38,13 @@ "required": ["properties"] }, { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadEventFeature.json" } ] } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": [ diff --git a/schemas/4.0/SwzDeviceFeed.json b/schemas/4.0/SwzDeviceFeed.json index d53766a5..86e07084 100644 --- a/schemas/4.0/SwzDeviceFeed.json +++ b/schemas/4.0/SwzDeviceFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/SwzDeviceFeed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/SwzDeviceFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 SwzDeviceFeed", "description": "The GeoJSON output of a WZDx smart work zone device data feed (v4.0)", "type": "object", "properties": { "feed_info": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -20,7 +20,7 @@ } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": ["feed_info", "type", "features"], @@ -78,7 +78,7 @@ ] }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"] diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index 9b8e00a2..bdd2c8ad 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/WZDxFeed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 WZDxFeed", "description": "The GeoJSON output of a WZDx feed data feed (v4.0)", "type": "object", "properties": { "road_event_feed_info": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -36,13 +36,13 @@ "required": ["properties"] }, { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadEventFeature.json" } ] } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": ["road_event_feed_info", "type", "features"] From 1f64a322d0e09cc629dd6b621f36e7e4ad54e1d8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 13 Dec 2021 22:21:58 -0500 Subject: [PATCH 352/388] Remove old RoadEvent.md --- spec-content/objects/RoadEvent.md | 39 ------------------------------- 1 file changed, 39 deletions(-) delete mode 100644 spec-content/objects/RoadEvent.md diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md deleted file mode 100644 index 9cf2a545..00000000 --- a/spec-content/objects/RoadEvent.md +++ /dev/null @@ -1,39 +0,0 @@ -# RoadEvent Object -The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone` and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). - -## Properties -Name | Type | Description | Conformance | Notes ---- | --- | --- | --- | --- -`event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | -`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) included within the same WZDx GeoJSON document. -`start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | -`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | -`beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | -`ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | -`road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | -`direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) -`vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | -`relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | -`beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | -`ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | -`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. -`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. -`event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | -`types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | -`worker_presence` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about whether workers are present in the road event area. | Optional | -`reduced_speed_limit_kph` | Integer | The reduced speed limit posted within the road event, in kilometers per hour. This property only needs to be supplied if the speed limit within the road event is lower than the posted speed limit of the roadway. | Optional | -`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Optional | Restrictions can also be provided on an individual lane. -`description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version -`creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. - -## Used By -Property | Object ---- | --- -`properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) - -## Important Notes -The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) that is included in the same WZDx GeoJSON document. From db7a2d5bc8acab68f420f66f7309764d1984f23b Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Mon, 13 Dec 2021 23:34:42 -0500 Subject: [PATCH 353/388] Add v4.0 release notes --- README.md | 94 +++++++++++++++++++++++++++++++++++++++++++---------- RELEASES.md | 79 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 155 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 6f21605c..85efd667 100644 --- a/README.md +++ b/README.md @@ -83,24 +83,82 @@ Contact Information: [avdx@dot.gov](mailto:avdx@dot.gov?subject=Submission%20of% ## Release Notes -### Release v3.1 (April 2021) -Following the major v3.0 release, the changes for the v3.1 release were developed with the goal enhancing and cleaning up the spec without making major changes or breaking backwards compatibility. Thus, in v3.1 many enumerated type values or object properties were deprecated rather than removed. Most if not all of these deprecated values will be removed in the next major release. - -This repository was also renamed from `jpo-wzdx` to `wzdx` on 2021-04-05. All links pointing to `jpo-wzdx` will automatically redirect to the new URL. - -#### Features -* Add `local-access-only` restriction -* Add `license` property to the `RoadEventFeedInfo` object - -#### Refactoring -* Refactor `LaneType` enumerated type to deprecate values that can be determined from other properties of the Lane object, such as `order`, `status`, and `lane_restrictions` -* Add value `alternating-flow` to `LaneStatus` enumerated type and deprecate `alternating-one-way` -* Add `road_names` property to the `RoadEvent` object and deprecate `road_name` and `road_number` -* Deprecate the `total_num_lanes` property on the `RoadEvent` object as the `RoadEvent`'s `lanes` array can be used to determine the number of lanes - -#### Fixes -* Add optional `bbox` property to allow providing a [GeoJSON Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) for the `WZDxFeed` and `RoadEventFeature` objects -* Add an `id` property to the `RoadEventFeature` object for providing the a road event's identifier to better follow [GeoJSON ID recommendations](https://tools.ietf.org/html/rfc7946#section-3.2) +### WZDx v4.0 (December 2021) +WZDx version 4.0 implements clean up and small additions in functionality to the WZDx feed and adds definitions for two new feeds, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) and [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md). Until version 4.0, the WZDx specification defined only one feed, the [WZDxFeed](/spec-content/objects/WZDxFeed.md). + +## Features +- Add the following values to the [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) enumerated type: + - `some-lanes-closed-merge-left` + - `some-lanes-closed-merge-right` + - `all-lanes-open-shift-left` + - `all-lanes-open-shift-right` + - `some-lanes-closed-split` + - `flagging` + - `temporary-traffic-signal` +- Allow restrictions with a value and unit to be provided at the road event level; specifically: + - Rename the LaneRestrictionUnit enumerated type to [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md). + - Rename the RoadRestriction enumerated type to [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). + - Rename the LaneRestriction object to [Restriction](/spec-content/objects/Restriction.md) and remove the `lane_restriction_` prefix from its properties. + - Rename the [Restriction](/spec-content/objects/Restriction.md) object `units` property to `unit`. +- Add values `parking` and `median` to the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. +- Define a new data feed, the [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to enable providing a feed of restrictions on roadways, such as bridge clearances. +- Define a new data feed, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md), to enable equipment vendors and manufacturers to provide high-level information about deployed field devices in work zones. A `SwzDeviceFeed` contains a new feature type, the [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md), which contains information about a specific type of field device. The following field devices are defined in WZDx v4.0: + - `ArrowBoard`: An electronic, connected arrow board which can display an arrow pattern to direct traffic. + - `Camera`: A camera device deployed in the field, capable of capturing still images. + - `DynamicMessageSign`: An electronic traffic sign deployed on the roadway, used to provide information to travelers. + - `FlashingBeacon`: A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something or capture driver attention. + - `HybridSign`: A hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers. + - `LocationMarker`: Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). + - `TrafficSensor`: A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. +- Rename the `workers_present` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object to `worker_presence`; change the type from "boolean" to a new [WorkerPresence](/spec-content/objects/WorkerPresence.md) object which enables providing more nuanced information about worker presence in work zones. + +## Refactoring +- Separate the v3.1 RoadEvent object into [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) (details that are shared by all specific types of road events) and specific types of road events ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) which each contain the `RoadEventCoreDetails` via a `core_details` property; update the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) `properties` property to be one of the specific road events types. +- Move the `location_method` property from the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object to the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object. +- Change the `reduced_speed_limit` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) to `reduced_speed_limit_kph`; change its type from "integer" to "number" and clarify that the value should be in kilometers per hour. +- Deprecate the `lane_number` property on the [Lane](/spec-content/objects/Lane.md) object. +- Deprecate the `lrs_type` and `lrs_url` properties on the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object. +- Remove the deprecated value `alternating-one-way` from the [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) enumerated type. +- Remove the following deprecated properties from the road event (RoadEvent in previous versions; [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) in 4.0): + - `road_event_id` + - `road_number` + - `road_name` + - `total_num_lanes` +- Remove the following deprecated values from the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type: + - `left-lane` + - `right-lane` + - `middle-lane` + - `center-lane` + - `right-shoulder` + - `left-shoulder` + - `right-second-exit-ramp` + - `left-second-exit-ramp` + - `right-entrance-exit-ramp` + - `left-entrance-exit-ramp` + - `hov-lane` + - `alternating-flow-lane` + - `reversible-lane` + - `right-entrance-lane` + - `left-entrance-lane` + - `left-entrance-ramp` + - `right-merging-lane` + - `left-merging-lane` + - `right-second-entrance-ramp` + - `left-second-entrance-ramp` +- Require the `road_names` property on the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md). +- Require the `id` property on the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). +- Refine the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type; specifically: + - Rename `lane` to `general`. + - Remove `right-turning-lane` and `left-turning-lane`. + - Remove `right-exit-lane` and `left-exit-lane`. + - Add `exit-lane`. + - Remove `right-exit-ramp` and `left-exit-ramp`. + - Add `exit-ramp`. + - Remove `right-entrance-ramp` and `left-exit-ramp`. + - Add `entrance-ramp`. + - Add `entrance-lane`. +- Deprecate the `location_verify_method` property on the [FeedDataSource](/spec-content/objects/FeedDataSource.md). +- Update the [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) enumerated type value descriptions to clarify that verified work zone locations should use a GPS enabled device. ## Getting Started diff --git a/RELEASES.md b/RELEASES.md index 676a9506..5a5d1434 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,3 +1,82 @@ +# WZDx Specification v4.0 +Released December 2021 + +WZDx version 4.0 implements clean up and small additions in functionality to the WZDx feed and adds definitions for two new feeds, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) and [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md). Until version 4.0, the WZDx specification defined only one feed, the [WZDxFeed](/spec-content/objects/WZDxFeed.md). + +## Features +- Add the following values to the [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) enumerated type: + - `some-lanes-closed-merge-left` + - `some-lanes-closed-merge-right` + - `all-lanes-open-shift-left` + - `all-lanes-open-shift-right` + - `some-lanes-closed-split` + - `flagging` + - `temporary-traffic-signal` +- Allow restrictions with a value and unit to be provided at the road event level; specifically: + - Rename the LaneRestrictionUnit enumerated type to [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md). + - Rename the RoadRestriction enumerated type to [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). + - Rename the LaneRestriction object to [Restriction](/spec-content/objects/Restriction.md) and remove the `lane_restriction_` prefix from its properties. + - Rename the [Restriction](/spec-content/objects/Restriction.md) object `units` property to `unit`. +- Add values `parking` and `median` to the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. +- Define a new data feed, the [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to enable providing a feed of restrictions on roadways, such as bridge clearances. +- Define a new data feed, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md), to enable equipment vendors and manufacturers to provide high-level information about deployed field devices in work zones. A `SwzDeviceFeed` contains a new feature type, the [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md), which contains information about a specific type of field device. The following field devices are defined in WZDx v4.0: + - `ArrowBoard`: An electronic, connected arrow board which can display an arrow pattern to direct traffic. + - `Camera`: A camera device deployed in the field, capable of capturing still images. + - `DynamicMessageSign`: An electronic traffic sign deployed on the roadway, used to provide information to travelers. + - `FlashingBeacon`: A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something or capture driver attention. + - `HybridSign`: A hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers. + - `LocationMarker`: Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). + - `TrafficSensor`: A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. +- Rename the `workers_present` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object to `worker_presence`; change the type from "boolean" to a new [WorkerPresence](/spec-content/objects/WorkerPresence.md) object which enables providing more nuanced information about worker presence in work zones. + +## Refactoring +- Separate the v3.1 RoadEvent object into [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) (details that are shared by all specific types of road events) and specific types of road events ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) which each contain the `RoadEventCoreDetails` via a `core_details` property; update the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) `properties` property to be one of the specific road events types. +- Move the `location_method` property from the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object to the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object. +- Change the `reduced_speed_limit` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) to `reduced_speed_limit_kph`; change its type from "integer" to "number" and clarify that the value should be in kilometers per hour. +- Deprecate the `lane_number` property on the [Lane](/spec-content/objects/Lane.md) object. +- Deprecate the `lrs_type` and `lrs_url` properties on the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object. +- Remove the deprecated value `alternating-one-way` from the [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) enumerated type. +- Remove the following deprecated properties from the road event (RoadEvent in previous versions; [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) in 4.0): + - `road_event_id` + - `road_number` + - `road_name` + - `total_num_lanes` +- Remove the following deprecated values from the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type: + - `left-lane` + - `right-lane` + - `middle-lane` + - `center-lane` + - `right-shoulder` + - `left-shoulder` + - `right-second-exit-ramp` + - `left-second-exit-ramp` + - `right-entrance-exit-ramp` + - `left-entrance-exit-ramp` + - `hov-lane` + - `alternating-flow-lane` + - `reversible-lane` + - `right-entrance-lane` + - `left-entrance-lane` + - `left-entrance-ramp` + - `right-merging-lane` + - `left-merging-lane` + - `right-second-entrance-ramp` + - `left-second-entrance-ramp` +- Require the `road_names` property on the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md). +- Require the `id` property on the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). +- Refine the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type; specifically: + - Rename `lane` to `general`. + - Remove `right-turning-lane` and `left-turning-lane`. + - Remove `right-exit-lane` and `left-exit-lane`. + - Add `exit-lane`. + - Remove `right-exit-ramp` and `left-exit-ramp`. + - Add `exit-ramp`. + - Remove `right-entrance-ramp` and `left-exit-ramp`. + - Add `entrance-ramp`. + - Add `entrance-lane`. +- Deprecate the `location_verify_method` property on the [FeedDataSource](/spec-content/objects/FeedDataSource.md). +- Update the [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) enumerated type value descriptions to clarify that verified work zone locations should use a GPS enabled device. + # WZDx Specification v3.1 Released April 2021 From 73f933cf24791a9d042b5c893c888a5af6055135 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 14 Dec 2021 08:28:37 -0500 Subject: [PATCH 354/388] Simplify Release Notes in project README --- README.md | 68 ++++++++----------------------------------------------- 1 file changed, 9 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 85efd667..81f3c21a 100644 --- a/README.md +++ b/README.md @@ -86,30 +86,14 @@ Contact Information: [avdx@dot.gov](mailto:avdx@dot.gov?subject=Submission%20of% ### WZDx v4.0 (December 2021) WZDx version 4.0 implements clean up and small additions in functionality to the WZDx feed and adds definitions for two new feeds, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) and [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md). Until version 4.0, the WZDx specification defined only one feed, the [WZDxFeed](/spec-content/objects/WZDxFeed.md). +*For detailed release information, see [RELEASES.md](/RELEASES.md)* + ## Features -- Add the following values to the [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) enumerated type: - - `some-lanes-closed-merge-left` - - `some-lanes-closed-merge-right` - - `all-lanes-open-shift-left` - - `all-lanes-open-shift-right` - - `some-lanes-closed-split` - - `flagging` - - `temporary-traffic-signal` -- Allow restrictions with a value and unit to be provided at the road event level; specifically: - - Rename the LaneRestrictionUnit enumerated type to [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md). - - Rename the RoadRestriction enumerated type to [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). - - Rename the LaneRestriction object to [Restriction](/spec-content/objects/Restriction.md) and remove the `lane_restriction_` prefix from its properties. - - Rename the [Restriction](/spec-content/objects/Restriction.md) object `units` property to `unit`. -- Add values `parking` and `median` to the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. -- Define a new data feed, the [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to enable providing a feed of restrictions on roadways, such as bridge clearances. -- Define a new data feed, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md), to enable equipment vendors and manufacturers to provide high-level information about deployed field devices in work zones. A `SwzDeviceFeed` contains a new feature type, the [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md), which contains information about a specific type of field device. The following field devices are defined in WZDx v4.0: - - `ArrowBoard`: An electronic, connected arrow board which can display an arrow pattern to direct traffic. - - `Camera`: A camera device deployed in the field, capable of capturing still images. - - `DynamicMessageSign`: An electronic traffic sign deployed on the roadway, used to provide information to travelers. - - `FlashingBeacon`: A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something or capture driver attention. - - `HybridSign`: A hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers. - - `LocationMarker`: Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). - - `TrafficSensor`: A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. +- Add values to the [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) enumerated type. +- Allow restrictions with a value and unit to be provided at the road event level. +- Add values to the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. +- Define a new data feed, the [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md), to enable providing a feed of restrictions on roadways, such as bridge clearances. +- Define a new data feed, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md), to enable equipment vendors and manufacturers to provide high-level information about deployed field devices in work zones. - Rename the `workers_present` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object to `worker_presence`; change the type from "boolean" to a new [WorkerPresence](/spec-content/objects/WorkerPresence.md) object which enables providing more nuanced information about worker presence in work zones. ## Refactoring @@ -119,44 +103,10 @@ WZDx version 4.0 implements clean up and small additions in functionality to the - Deprecate the `lane_number` property on the [Lane](/spec-content/objects/Lane.md) object. - Deprecate the `lrs_type` and `lrs_url` properties on the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object. - Remove the deprecated value `alternating-one-way` from the [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) enumerated type. -- Remove the following deprecated properties from the road event (RoadEvent in previous versions; [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) in 4.0): - - `road_event_id` - - `road_number` - - `road_name` - - `total_num_lanes` -- Remove the following deprecated values from the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type: - - `left-lane` - - `right-lane` - - `middle-lane` - - `center-lane` - - `right-shoulder` - - `left-shoulder` - - `right-second-exit-ramp` - - `left-second-exit-ramp` - - `right-entrance-exit-ramp` - - `left-entrance-exit-ramp` - - `hov-lane` - - `alternating-flow-lane` - - `reversible-lane` - - `right-entrance-lane` - - `left-entrance-lane` - - `left-entrance-ramp` - - `right-merging-lane` - - `left-merging-lane` - - `right-second-entrance-ramp` - - `left-second-entrance-ramp` +- Remove all deprecated properties from the road event (RoadEvent in previous versions; [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) in 4.0). - Require the `road_names` property on the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md). - Require the `id` property on the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). -- Refine the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type; specifically: - - Rename `lane` to `general`. - - Remove `right-turning-lane` and `left-turning-lane`. - - Remove `right-exit-lane` and `left-exit-lane`. - - Add `exit-lane`. - - Remove `right-exit-ramp` and `left-exit-ramp`. - - Add `exit-ramp`. - - Remove `right-entrance-ramp` and `left-exit-ramp`. - - Add `entrance-ramp`. - - Add `entrance-lane`. +- Refine the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. - Deprecate the `location_verify_method` property on the [FeedDataSource](/spec-content/objects/FeedDataSource.md). - Update the [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) enumerated type value descriptions to clarify that verified work zone locations should use a GPS enabled device. From 7e22f8891c5bad7eae3b003e8d89b6c204ca25cf Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 14 Dec 2021 08:45:33 -0500 Subject: [PATCH 355/388] Add information about feed to feed object introductions --- spec-content/objects/RoadRestrictionFeed.md | 2 ++ spec-content/objects/SwzDeviceFeed.md | 2 ++ spec-content/objects/WZDxFeed.md | 2 ++ 3 files changed, 6 insertions(+) diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index 0905b0e0..86650128 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -1,6 +1,8 @@ # RoadRestrictionFeed Object (GeoJSON FeatureCollection) The `RoadRestrictionFeed` object is the root (highest level) object of a WZDx road restriction feed. There is one `RoadRestrictionFeed` object per road restriction feed GeoJSON document. The `RoadRestrictionFeed` is a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3). +The `RoadRestrictionFeed` contains information about sections of roadways that have restrictions. Restriction types described by this specification are listed in the [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) enumerated type. + ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- diff --git a/spec-content/objects/SwzDeviceFeed.md b/spec-content/objects/SwzDeviceFeed.md index 33387384..f62618c6 100644 --- a/spec-content/objects/SwzDeviceFeed.md +++ b/spec-content/objects/SwzDeviceFeed.md @@ -1,6 +1,8 @@ # SwzDeviceFeed Object (GeoJSON FeatureCollection) The `SwzDeviceFeed` object is the root (highest level) object of a smart work zone device feed. There is one `SwzDeviceFeed` object per feed GeoJSON document. The `SwzDeviceFeed` is a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. +The `SwzDeviceFeed` contains information (location, status, live data) about field devices deployed on the roadway in work zones. + ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- diff --git a/spec-content/objects/WZDxFeed.md b/spec-content/objects/WZDxFeed.md index 7b61071e..7b06cb37 100644 --- a/spec-content/objects/WZDxFeed.md +++ b/spec-content/objects/WZDxFeed.md @@ -1,6 +1,8 @@ # WZDxFeed Object (GeoJSON FeatureCollection) The `WZDxFeed` object is the root (highest level) object of a WZDx feed. There is one WZDx feed object per WZDx GeoJSON document. The `WZDxFeed` is an instance of a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. +The `WZDxFeed` contains high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. + ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- From c99a99b5e7893e81d45f2a920660529023ccd9cc Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 14 Dec 2021 09:00:41 -0500 Subject: [PATCH 356/388] Update WZDx version in project README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 81f3c21a..68701649 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Specifically, WZDx defines the structure and content of several [GeoJSON](https: - [Project Description](#project-description) - [Contact Information](#contact-information) - [Release Notes](#release-notes) - - [Release v3.1 (Apr 2021)] + - [Release v4.0 (Dec 2021)](#wzdx-v40-december-2021) - [Getting Started](#getting-started) - [JSON Schemas](#json-schemas) - [Contributions](#contributions) From ab934f2eab19f0d3d03e58cebc2d075fe20bf660 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Tue, 14 Dec 2021 09:06:24 -0500 Subject: [PATCH 357/388] Update project README Getting Started section --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 68701649..0a9b162c 100644 --- a/README.md +++ b/README.md @@ -112,12 +112,12 @@ WZDx version 4.0 implements clean up and small additions in functionality to the ## Getting Started -The WZDWG welcomes feedback and comments on the WZDx 3.1 Specification. Comments can be made by posting a GitHub [Issues](https://github.com/usdot-jpo-ode/wzdx/issues) or [Discussions](https://github.com/usdot-jpo-ode/wzdx/discussions), while suggested changes can be made using a [Pull Request](https://github.com/usdot-jpo-ode/wzdx/pulls). +The WZDWG welcomes feedback and comments on the WZDx v4.0 Specification. Comments can be made by posting a GitHub [Issue](https://github.com/usdot-jpo-ode/wzdx/issues) or [Discussion](https://github.com/usdot-jpo-ode/wzdx/discussions), while suggested changes can be made using a [Pull Request](https://github.com/usdot-jpo-ode/wzdx/pulls). 1. Read about WZDWG activities [Wiki](https://github.com/usdot-jpo-ode/wzdx/wiki) and the [WZDx Early Adopter's Guide](/documents/WZDx_Early_Adopters_Guide.pdf) 2. Learn about using GitHub as a [tool for collaboration and support](/create-feed/README.md#collaborate-via-github). -3. Use [Specification Content](/spec-content) page to understand the data components of the specification. -4. [Create your own feed](/create-feed) using example feeds and follow the business rules. +3. Read [Creating a WZDx feed](/Creating_a_WZDx_Feed.md) which contains information about creating a WZDx data feed, such as the feed format, business rules, and validation tools. +4. Use the [Specification Content](/spec-content) page to understand the data components of the specification. 5. Validate your feed output using the respective [JSON Schema](#json-schemas). 6. Publish your feed and tell us about it via avdx@dot.gov. From d4d24d51c315bf772948591c050101f9cd337a18 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 20:10:56 -0500 Subject: [PATCH 358/388] Consistent formatting within spec-content/objects --- spec-content/objects/FieldDeviceFeature.md | 2 +- spec-content/objects/TrafficSensorLaneData.md | 4 ++-- spec-content/objects/WorkerPresence.md | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index 590c5995..b54a4bc6 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -1,5 +1,5 @@ # FieldDeviceFeature Object -The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the RoadEvent object via the `properties` property. +The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the [RoadEvent](/spec-content/objects/RoadEvent.md) object via the `properties` property. Currently, only point devices are supported. diff --git a/spec-content/objects/TrafficSensorLaneData.md b/spec-content/objects/TrafficSensorLaneData.md index 96516334..08a76eda 100644 --- a/spec-content/objects/TrafficSensorLaneData.md +++ b/spec-content/objects/TrafficSensorLaneData.md @@ -1,7 +1,7 @@ # TrafficSensorLaneData Object -The TrafficSensorLaneData object describes data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. +The `TrafficSensorLaneData` object describes data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. -Note this structure allows a single TrafficSensor to provide data across lanes on multiple road events. It does not allow for lane data to be provided when a road event is not known. +Note this structure allows a single [TrafficSensor](/spec-content/objects/TrafficSensor.md) to provide data across lanes on multiple road events. It does not allow for lane data to be provided when a road event is not known. ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 9b183e41..e6f6fc33 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -1,5 +1,5 @@ -# Worker Presence Object -The `WorkerPresence` object contains information on the presence of workers in the `RoadEvent`'s area. +# WorkerPresence Object +The `WorkerPresence` object contains information on the presence of workers in the [RoadEvent](/spec-content/objects/RoadEvent.md)'s area. ## Properties Name | Type | Description | Conformance | Notes From f13be959809c4590c9e6a6287f0ba714a4aded3f Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 20:59:08 -0500 Subject: [PATCH 359/388] Scrub links to refactored RoadEvent object --- spec-content/README.md | 2 +- spec-content/objects/FieldDeviceFeature.md | 2 +- spec-content/objects/LocationMarker.md | 2 +- spec-content/objects/RoadEventFeature.md | 2 +- spec-content/objects/TrafficSensor.md | 2 +- spec-content/objects/TrafficSensorLaneData.md | 4 ++-- spec-content/objects/WorkerPresence.md | 4 ++-- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index f6e7d085..19ae6d56 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -68,7 +68,7 @@ Object | Description [MarkedLocation](/spec-contentobjects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) | The root (highest-level) object of smart work zone device feed GeoJSON document. [TrafficSensor](/spec-content/objects/TrafficSensor.md) | A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. -[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. +[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. ### Object Diagrams The object diagrams below depict the relationship between the data objects for each WZDx feed. diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index b54a4bc6..63eb3d67 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -1,5 +1,5 @@ # FieldDeviceFeature Object -The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the [RoadEvent](/spec-content/objects/RoadEvent.md) object via the `properties` property. +The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the road event object ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) via the `properties` property. Currently, only point devices are supported. diff --git a/spec-content/objects/LocationMarker.md b/spec-content/objects/LocationMarker.md index a7733934..df0d8090 100644 --- a/spec-content/objects/LocationMarker.md +++ b/spec-content/objects/LocationMarker.md @@ -1,5 +1,5 @@ # LocationMarker Object -The `LocationMarker` object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The `LocationMarker` contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.md) objects which indicate the type of location (such as the start or end) and optionally the ID of a [RoadEvent](/spec-content/objects/RoadEvent.md) that the location is associated with. +The `LocationMarker` object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The `LocationMarker` contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.md) objects which indicate the type of location (such as the start or end) and optionally the ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) that the location is associated with. The `LocationMarker` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index c016535d..c13246e0 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -1,5 +1,5 @@ # RoadEventFeature Object (GeoJSON Feature) -The `RoadEventFeature` object is the container object for a WZDx [RoadEvent](/spec-content/objects/RoadEvent.md). The `RoadEventFeature` object is an instance of a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2). +The `RoadEventFeature` object is the container object for a WZDx road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md). The `RoadEventFeature` object is an instance of a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2). ## Properties Name | Type | Description | Conformance | Notes diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md index 95b88854..82897a4e 100644 --- a/spec-content/objects/TrafficSensor.md +++ b/spec-content/objects/TrafficSensor.md @@ -1,5 +1,5 @@ # TrafficSensor Object -The `TrafficSensor` object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The `TrafficSensor` can describe lane-level traffic data if available and if associated with a [RoadEvent](/spec-content/objects/RoadEvent.md). +The `TrafficSensor` object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The `TrafficSensor` can describe lane-level traffic data if available and if associated with a road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). The `TrafficSensor` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). diff --git a/spec-content/objects/TrafficSensorLaneData.md b/spec-content/objects/TrafficSensorLaneData.md index 08a76eda..80f6e255 100644 --- a/spec-content/objects/TrafficSensorLaneData.md +++ b/spec-content/objects/TrafficSensorLaneData.md @@ -1,5 +1,5 @@ # TrafficSensorLaneData Object -The `TrafficSensorLaneData` object describes data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. +The `TrafficSensorLaneData` object describes data for a single lane within a road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. Note this structure allows a single [TrafficSensor](/spec-content/objects/TrafficSensor.md) to provide data across lanes on multiple road events. It does not allow for lane data to be provided when a road event is not known. @@ -7,7 +7,7 @@ Note this structure allows a single [TrafficSensor](/spec-content/objects/Traffi Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `road_event_id` | String | The ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) which the measured lane occurs in. | Required | -`lane_order` | Positive Integer | The lane's position in sequence within the road event (specified by `road_event_id`). The value of this property corresponds to the associated [RoadEvent](/spec-content/objects/RoadEvent.md)'s [Lane](/spec-content/objects/Lane.md)'s `order` property. | Required | +`lane_order` | Positive Integer | The lane's position in sequence within the road event (specified by `road_event_id`). The value of this property corresponds to the associated road event's [Lane](/spec-content/objects/Lane.md)'s `order` property. | Required | `average_speed_kph` | Integer (>= 0) | The average speed of traffic in the lane over the collection interval (in kilometers per hour). | Optional | `volume_vph` | Integer (>= 0) | The rate of vehicles passing by the sensor in the lane during the collection interval (in vehicles per hour). | Optional | `occupancy_percent` | Integer (>= 0) | The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index e6f6fc33..192d0a66 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -1,5 +1,5 @@ # WorkerPresence Object -The `WorkerPresence` object contains information on the presence of workers in the [RoadEvent](/spec-content/objects/RoadEvent.md)'s area. +The `WorkerPresence` object contains information on the presence of workers in the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)'s area. ## Properties Name | Type | Description | Conformance | Notes @@ -13,4 +13,4 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`worker_presence` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`worker_presence` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) From 6cd1916b27e6c513e99d125c39d31d0686efd8ab Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 21:31:04 -0500 Subject: [PATCH 360/388] Scrub RoadEventFeedInfo -> FeedInfo --- spec-content/objects/RoadRestrictionFeed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index 86650128..c5d7e1b8 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -6,7 +6,7 @@ The `RoadRestrictionFeed` contains information about sections of roadways that h ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx road restriction feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. +`feed_info` | [FeedInfo](/spec-content/objects/FeedInfo.md) | Information about the WZDx road restriction feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. `features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. From cb87639dca381dcabddceb0c977ecd73d122091b Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 21:39:48 -0500 Subject: [PATCH 361/388] Fix broken link and add period --- spec-content/objects/RestrictionRoadEvent.md | 2 +- spec-content/objects/RoadEventFeature.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/objects/RestrictionRoadEvent.md b/spec-content/objects/RestrictionRoadEvent.md index 43f6ba05..cccb2b1c 100644 --- a/spec-content/objects/RestrictionRoadEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -10,7 +10,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | Describes the basic characterisitics of a Road Event. | Required | `restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Conditional: required if `lanes` property is not provided. | Restrictions can also be provided on an individual lane. -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Conditional: required if `restrictions` property is not provided. | +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment). | Conditional: required if `restrictions` property is not provided. | ## Used By Property | Object diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index c13246e0..d024296e 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -14,4 +14,4 @@ Name | Type | Description | Conformance | Notes Property | Object --- | --- `features` | [WZDx Feed](/spec-content/objects/WZDxFeed.md) -`features` | [RoadRestrictionFeed](spec-content/objects/RoadRestrictionFeed.md) +`features` | [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) From 5efe43289d89eca1306448823c32b6bc0903efb0 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 21:58:51 -0500 Subject: [PATCH 362/388] Scrub FeedDataSource and add reference to RestrictionRoadEvent on RoadEventCoreDetails page --- spec-content/objects/RoadEventCoreDetails.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index 578e0100..25536ff4 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -1,11 +1,11 @@ # RoadEventCoreDetails Object -The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a "road event") that is shared by all types of road events, such as work zones (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) and detours (see [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). The `RoadEventCoreDetails` cannot exist directly in a data feed and on it's own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each which is represented by its own object. +The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a "road event") that is shared by all types of road events, such as work zones (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)), detours (see [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)), and road restrictions (see [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). The `RoadEventCoreDetails` cannot exist directly in a data feed and on its own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each of which is represented by its own object. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | -`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same WZDx GeoJSON document. +`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) included within the same WZDx GeoJSON document. `road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | `direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) `relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | @@ -18,8 +18,7 @@ Property | Object --- | --- `core_details` | [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) `core_details` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) +`core_details` | [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) ## Important Notes -The value of the `RoadEventCoreDetails`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. - - +The value of the `RoadEventCoreDetails`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) that is included in the same WZDx GeoJSON document. From 29eb1f0cd01d375a60da5fa0326f09900c7efc2d Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 21:59:52 -0500 Subject: [PATCH 363/388] Scrub RoadEventDataSource and update ref to worker_presence_definition --- schemas/4.0/RoadEventFeature.json | 2 +- spec-content/README.md | 1 - spec-content/enumerated-types/WorkerPresenceDefinition.md | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index a97fa1a4..5f73eec4 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -462,7 +462,7 @@ "type": "object", "properties": { "are_workers_present": { - "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object", + "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘definition’ property on the WorkerPresence object", "type": "boolean" }, "method": { diff --git a/spec-content/README.md b/spec-content/README.md index 19ae6d56..595af4e1 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -46,7 +46,6 @@ Object | Description [Restriction](/spec-content/objects/Restriction.md) | A restriction on a road event or lane, including type and value. [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | Describes a section of roadway and the limitations of how that section can be used. [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events. -[RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about the presence of workers in the road event area. diff --git a/spec-content/enumerated-types/WorkerPresenceDefinition.md b/spec-content/enumerated-types/WorkerPresenceDefinition.md index d2935916..f44a0bfb 100644 --- a/spec-content/enumerated-types/WorkerPresenceDefinition.md +++ b/spec-content/enumerated-types/WorkerPresenceDefinition.md @@ -15,4 +15,4 @@ Value | Description ## Used By Property | Object --- | --- -`worker_presence_definition` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) +`definition` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) From 7ee70987daa630000754e2a7c024b5f05f1eddb3 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 22:24:07 -0500 Subject: [PATCH 364/388] Minor typo / missing period fix --- spec-content/objects/FeedDataSource.md | 2 +- spec-content/objects/WorkZoneRoadEvent.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/objects/FeedDataSource.md b/spec-content/objects/FeedDataSource.md index 8e8fd28e..41568452 100644 --- a/spec-content/objects/FeedDataSource.md +++ b/spec-content/objects/FeedDataSource.md @@ -4,7 +4,7 @@ The `FeedDataSource` object describes information about a specific data source u ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`data_source_id` | String | Unique identifier for the data source organization providing work zone data. | Required | Linked to a road event by the `data_source_id` property on the road event's [core details](/spec-content/objects/RoadEventCoreDetails.md) or or a field device by the `data_source_id` property on the device's [core details](/spec-content/objects/FieldDeviceCoreDetails.md). +`data_source_id` | String | Unique identifier for the data source organization providing work zone data. | Required | Linked to a road event by the `data_source_id` property on the road event's [core details](/spec-content/objects/RoadEventCoreDetails.md) or a field device by the `data_source_id` property on the device's [core details](/spec-content/objects/FieldDeviceCoreDetails.md). `organization_name` | String | The name of the organization for the authoritative source of the work zone data. | Required | Example: County DOT `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time when the data source was last updated. | Optional | All date-time formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z` `update_frequency` | Integer | The frequency in seconds at which the data source is updated. | Optional | diff --git a/spec-content/objects/WorkZoneRoadEvent.md b/spec-content/objects/WorkZoneRoadEvent.md index c7caecdc..6584765d 100644 --- a/spec-content/objects/WorkZoneRoadEvent.md +++ b/spec-content/objects/WorkZoneRoadEvent.md @@ -15,7 +15,7 @@ Name | Type | Description | Conformance | Notes `ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | `location_method` | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. | Required | `vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment). | Optional | `beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | `ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | `beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. From bd622b9b78c39acbade52cb5f1dc394e0a30cbc1 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 22:33:29 -0500 Subject: [PATCH 365/388] Fix typos on WorkerPresenceMethod page --- spec-content/enumerated-types/WorkerPresenceMethod.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/enumerated-types/WorkerPresenceMethod.md b/spec-content/enumerated-types/WorkerPresenceMethod.md index 67e8f5b7..28932deb 100644 --- a/spec-content/enumerated-types/WorkerPresenceMethod.md +++ b/spec-content/enumerated-types/WorkerPresenceMethod.md @@ -6,7 +6,7 @@ Value | Description --- | --- `camera-monitoring` | Cameras in the work zone event area show workers are present. `arrow-board-present` | A GPS-enabled arrow board is located in the work zone event area and broadcasting its location, implying that workers are present. -`cones-present` | GPS-enabled cones are located in the road event event area, implying that workers are present. +`cones-present` | GPS-enabled cones are located in the road event area, implying that workers are present. `maintenance-vehicle-present` | A GPS-enabled maintenance vehicle is located in the road event area, implying that workers are present. `wearables-present` | Workers wearing wearable detection equipment are present in the work zone. `mobile-device-present` | Workers with GPS-enabled mobile device tracking are present in the work zone. @@ -17,4 +17,4 @@ Value | Description ## Used By Property | Object --- | --- -`source` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) +`method` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) From 6b02ec5b027d0ad52b265269382ad700ccb49d8a Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 23:04:07 -0500 Subject: [PATCH 366/388] Fix typo in example file name --- ...> scenario3_shoulder_bidirectional_linestring_example.geojson} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/WZDxFeed/{scenario3_shoulder_bidrectional_linestring_example.geojson => scenario3_shoulder_bidirectional_linestring_example.geojson} (100%) diff --git a/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson b/examples/WZDxFeed/scenario3_shoulder_bidirectional_linestring_example.geojson similarity index 100% rename from examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson rename to examples/WZDxFeed/scenario3_shoulder_bidirectional_linestring_example.geojson From 9f7e3e1d3abe14909c478680dacc26c1a17b8af7 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 23:05:03 -0500 Subject: [PATCH 367/388] Fix broken links / remove extra period in example README --- examples/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/README.md b/examples/README.md index 4c162c4b..78ec4e1b 100644 --- a/examples/README.md +++ b/examples/README.md @@ -2,7 +2,7 @@ This directory contains example GeoJSON documents from WZDx data feeds. The examples cover a range of common scenarios. There are examples for the `WZDxFeed`, `RoadRestrictionFeed`, and `SwzDeviceFeed`, contained within the respective subdirectories. ## WZDxFeed Examples -The following `WZDxFeed` examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type. as well as one `MultiPoint` geometry type for scenario 1. +The following `WZDxFeed` examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type as well as one `MultiPoint` geometry type for scenario 1. Below is a summary of each of the example WZDx feeds and detailed differences for each of the road events: @@ -53,13 +53,13 @@ The [local access only example](/examples/WZDxFeed/local_access_only_bidirection The following example `SwzDeviceFeed`s are provided: 1. [Arrow Board "ok" Example](/examples/SwzDeviceFeed/arrow_board_ok_example.geojson): A simple feed that includes a single arrow board with an `ok` status and several optional properties provided. -2. [Camera "error" Example](/examples/SwzDeviceFeed/camera_error_example): A simple feed that includes a single camera with an `error` status, no image data, associated `status_messages`, and a few optional properties provided. +2. [Camera "error" Example](/examples/SwzDeviceFeed/camera_error_example.geojson): A simple feed that includes a single camera with an `error` status, no image data, associated `status_messages`, and a few optional properties provided. ## RoadRestrictionFeed Examples The following example `RoadrestrictionFeed`s are provided: ### 1. Bridge Height Restriction -The [Bridge Height Restriction Example](/examples/RoadRestrictionFeed/bridge_restriction_linestring_example.geojson) shows the use of a [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to define a bridge clearance on a roadway. +The [Bridge Height Restriction Example](/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson) shows the use of a [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to define a bridge clearance on a roadway. - Defines three bridge height restrictions. - Two restrictions (`id`s: `Bridge2`, `Bridge3`) are defined using only the required core details and basic event-level information. From 453ab001535f579801f51470070c92b18a7cb5ed Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 23:35:40 -0500 Subject: [PATCH 368/388] Fix broken link, minor edits --- spec-content/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index 595af4e1..83cae876 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -46,7 +46,7 @@ Object | Description [Restriction](/spec-content/objects/Restriction.md) | A restriction on a road event or lane, including type and value. [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | Describes a section of roadway and the limitations of how that section can be used. [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events. -[RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. +[RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx road event. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about the presence of workers in the road event area. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. @@ -64,7 +64,7 @@ Object | Description [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. [HybridSign](/spec-content/objects/HybridSign.md) | A hybrid sign that contains static text (e.g. on an alumium sign) along with a single electronic message display, used to provide information to travelers. [LocationMarker](/spec-content/objects/LocationMarker.md) | Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). -[MarkedLocation](/spec-contentobjects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. +[MarkedLocation](/spec-content/objects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) | The root (highest-level) object of smart work zone device feed GeoJSON document. [TrafficSensor](/spec-content/objects/TrafficSensor.md) | A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. [TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. @@ -109,7 +109,7 @@ Enumerated Type | Description [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | Unit of measurement (e.g. "pounds", "centimeters"). [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. -[WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | High-level description of the feed publisher's confidence in worker presence +[WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | High-level description of the feed publisher's confidence in worker presence. [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Method of knowing the presence of workers in the road event area. [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Methods for how worker presence in a work zone event area is determined. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. From e2d64820f287c527f49a807ede05dbd379f25741 Mon Sep 17 00:00:00 2001 From: chuehlien Date: Tue, 14 Dec 2021 23:49:09 -0500 Subject: [PATCH 369/388] Add period to readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0a9b162c..7673871d 100644 --- a/README.md +++ b/README.md @@ -114,7 +114,7 @@ WZDx version 4.0 implements clean up and small additions in functionality to the The WZDWG welcomes feedback and comments on the WZDx v4.0 Specification. Comments can be made by posting a GitHub [Issue](https://github.com/usdot-jpo-ode/wzdx/issues) or [Discussion](https://github.com/usdot-jpo-ode/wzdx/discussions), while suggested changes can be made using a [Pull Request](https://github.com/usdot-jpo-ode/wzdx/pulls). -1. Read about WZDWG activities [Wiki](https://github.com/usdot-jpo-ode/wzdx/wiki) and the [WZDx Early Adopter's Guide](/documents/WZDx_Early_Adopters_Guide.pdf) +1. Read about WZDWG activities [Wiki](https://github.com/usdot-jpo-ode/wzdx/wiki) and the [WZDx Early Adopter's Guide](/documents/WZDx_Early_Adopters_Guide.pdf). 2. Learn about using GitHub as a [tool for collaboration and support](/create-feed/README.md#collaborate-via-github). 3. Read [Creating a WZDx feed](/Creating_a_WZDx_Feed.md) which contains information about creating a WZDx data feed, such as the feed format, business rules, and validation tools. 4. Use the [Specification Content](/spec-content) page to understand the data components of the specification. From d6e8546b37aa9174917be5930d8253f793d171f4 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 09:20:56 -0500 Subject: [PATCH 370/388] Remove reference to old RoadEvent in business rule 6 --- Creating_a_WZDx_Feed.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Creating_a_WZDx_Feed.md b/Creating_a_WZDx_Feed.md index 01596b04..470098ee 100644 --- a/Creating_a_WZDx_Feed.md +++ b/Creating_a_WZDx_Feed.md @@ -33,7 +33,7 @@ The following business rules help assure a standardized and interpretable use of 3. The preferred [GeoJSON Geometry](https://tools.ietf.org/html/rfc7946#page-7) for a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) is `LineString`, which allows indicating the full path of the road event. In cases where only the beginning and ending coordinates are available, the `MultiPoint` can be used. 4. A cascading multi-lane closure should consider the speed of vehicles traveling through the work zone. If the distance between lane closures is short enough that time in a to-be-closed lane is not significant, which is common, the to-be-closed lane should be represented as closed to avoid traffic delays and potential crashes. 5. A detour must be represented with a [RoadEvent](/spec-content/objects/RoadEvent.md) of type (i.e. with `event_type` of) `detour` and its containing [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) should have a `geometry` of `type` `LineString` to represent the full detour route. The detour road event should be connected to the work zone road event using the `relationship` property on the detour road event. -6. If the `lanes` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object is provided, it must include one entry for every lane in the road event. Providing lane information for only some of the lanes in a road event is not allowed. +6. If the `lanes` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) is provided, it must include one entry for every lane in the road event. Providing lane information for only some of the lanes in a road event is not allowed. ## Data Validation From 674c573249f901b752abaa7d06cee647089e97cb Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 09:23:22 -0500 Subject: [PATCH 371/388] Clarify worker_presence_last_confirmed_date is in UTC --- schemas/4.0/RoadEventFeature.json | 2 +- spec-content/objects/WorkerPresence.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index 5f73eec4..d17a7670 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -469,7 +469,7 @@ "$ref": "#/definitions/WorkerPresenceMethod" }, "worker_presence_last_confirmed_date": { - "description": "Datetime at which the presence of workers was last confirmed using the 'source'", + "description": "The UTC date and time at which the presence of workers was last confirmed", "type": "string", "format": "date-time" }, diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 192d0a66..06dfa791 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -7,7 +7,7 @@ Name | Type | Description | Conformance | Notes `are_workers_present` | Boolean | Whether workers are present in the work zone event area. This value should be set in accordance with the definition provided in the `definition` property if it is provided. | Required | `definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional `method` | [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Describes the method for how worker presence in a work zone event area is determined. | Optional | -`worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | Date and time at which the presence of workers was last confirmed. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). +`worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time at which the presence of workers was last confirmed. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). `confidence` | [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | The data producer’s confidence in the value of `are_workers_present`. | Optional | ## Used By From b98248b9163f6263a1b327ef9dbc4a65c5976a5f Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 09:26:59 -0500 Subject: [PATCH 372/388] Simplify 'verified' description --- spec-content/enumerated-types/SpatialVerification.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/enumerated-types/SpatialVerification.md b/spec-content/enumerated-types/SpatialVerification.md index e39214eb..02a2763a 100644 --- a/spec-content/enumerated-types/SpatialVerification.md +++ b/spec-content/enumerated-types/SpatialVerification.md @@ -5,7 +5,7 @@ An indication of how a geographical coordinate was defined. Value | Description --- | --- `estimated` | Estimated location for the work zone road event geometry. An estimated measurement is based on an approximation of the reported location of a work zone. Approximations of the location can include but are not limited to a point relative to a posted mile maker or cross street, selecting a point on a map, or locations based on project plans. -`verified` | Verified locations for the work zone road event geometry representing the actual extents of the work zone. A verified measurement is based on actual reported data from a GPS equipped device showing the measured location of the work zone. Ths actual location is measured using a GPS device that provides the verified location of the identified location. +`verified` | Verified locations for the work zone road event geometry representing the actual extents of the work zone. A verified measurement is based on actual reported data from a GPS equipped device showing the measured location of the work zone. ## Used By Property | Object From 75b3dddd02cef026c94d97330bf9a7a95d0bc761 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 09:33:19 -0500 Subject: [PATCH 373/388] Remove specificity of usage of TrafficSensorLaneData --- 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 83cae876..30052341 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -67,7 +67,7 @@ Object | Description [MarkedLocation](/spec-content/objects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) | The root (highest-level) object of smart work zone device feed GeoJSON document. [TrafficSensor](/spec-content/objects/TrafficSensor.md) | A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. -[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. +[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a road event (e.g. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. ### Object Diagrams The object diagrams below depict the relationship between the data objects for each WZDx feed. From 462aff3c1a2bc43ef3d5ad018a2f5c301b26b0e8 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 09:36:01 -0500 Subject: [PATCH 374/388] Remove specificity of usage of TrafficSensorLaneData --- spec-content/objects/TrafficSensorLaneData.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/TrafficSensorLaneData.md b/spec-content/objects/TrafficSensorLaneData.md index 80f6e255..58a4942e 100644 --- a/spec-content/objects/TrafficSensorLaneData.md +++ b/spec-content/objects/TrafficSensorLaneData.md @@ -1,5 +1,5 @@ # TrafficSensorLaneData Object -The `TrafficSensorLaneData` object describes data for a single lane within a road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. +The `TrafficSensorLaneData` object describes data for a single lane within a road event (e.g. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. Note this structure allows a single [TrafficSensor](/spec-content/objects/TrafficSensor.md) to provide data across lanes on multiple road events. It does not allow for lane data to be provided when a road event is not known. From 640465f1a6877515788f860b9939bb6404ea8b64 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 10:25:01 -0500 Subject: [PATCH 375/388] Alphabetize order of directories in project README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7673871d..2950e35d 100644 --- a/README.md +++ b/README.md @@ -37,8 +37,8 @@ The WZDx Specification repository contains several files and subdirectories. 1. [documents](/documents): supplementary PDF and Word documents such as the WZDx Early Adopter's Guide and WZDx Data Feed Self Validation Checklist. 2. [examples](/examples): example GeoJSON documents from WZDx data feeds. [examples/README.md](/examples/README.md) describes the content of this directory in detail. 3. [images](/images): the images that are referenced by other Markdown files in the repository. -4. [spec-content](/spec-content): details the data content of the WZDx specification, including objects, property names and types, and enumerated types. [spec-content/README.md](/spec-content/README.md) describes the content of this directory in detail. -5. [schemas](/schemas): contains [JSON Schema](https://json-schema.org/)s for each of the feeds defined by WZDx for feed validation. +4. [schemas](/schemas): contains [JSON Schema](https://json-schema.org/)s for each of the feeds defined by WZDx for feed validation. +5. [spec-content](/spec-content): details the data content of the WZDx specification, including objects, property names and types, and enumerated types. [spec-content/README.md](/spec-content/README.md) describes the content of this directory in detail. ### Files 1. [Creating_a_WZDx_Feed.md](/Creating_a_WZDx_Feed.md): information to assist in creating a WZDx data feed, such as the feed format, business rules, and validation tools. From e81ed136a98d0dd7ac2ad808e461ac2e61f401bd Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 10:49:41 -0500 Subject: [PATCH 376/388] Move old schemas to subdirectories for consistency --- Creating_a_WZDx_Feed.md | 6 +++--- README.md | 6 +++--- schemas/{wzdx_v2.0_feed.json => 2.0/WZDxFeed.json} | 2 +- schemas/{wzdx_v3.0_feed.json => 3.0/WZDxFeed.json} | 2 +- schemas/{wzdx_v3.1_feed.json => 3.1/WZDxFeed.json} | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) rename schemas/{wzdx_v2.0_feed.json => 2.0/WZDxFeed.json} (99%) rename schemas/{wzdx_v3.0_feed.json => 3.0/WZDxFeed.json} (99%) rename schemas/{wzdx_v3.1_feed.json => 3.1/WZDxFeed.json} (99%) diff --git a/Creating_a_WZDx_Feed.md b/Creating_a_WZDx_Feed.md index 470098ee..60cfdda3 100644 --- a/Creating_a_WZDx_Feed.md +++ b/Creating_a_WZDx_Feed.md @@ -46,9 +46,9 @@ The WZDx Specification defines a JSON schema for each feed (WZDx v2.0 and later) - [WZDx v4.0 RoadRestrictionFeed](/schemas/4.0/RoadRestrictionFeed.json) #### Previous Versions -- [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) -- [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) -- [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) +- [WZDx v2.0 WZDxFeed](/schemas/2.0/WZDxFeed.json) +- [WZDx v3.0 WZDxFeed](/schemas/3.0/WZDxFeed.json) +- [WZDx v3.1 WZDxFeed](/schemas/3.1/WZDxFeed.json) ### Self-Validation Checklist For a list of steps to take to make sure your data feed conforms to the specification and is ready to publish, follow the [Self-Validation Checklist](/documents/WZDx_Data_Feed_Self-Validation_Checklist.docx). diff --git a/README.md b/README.md index 2950e35d..47f9106c 100644 --- a/README.md +++ b/README.md @@ -130,9 +130,9 @@ The WZDx Specification defines a JSON schema for each feed within the [schemas]( - [WZDx v4.0 RoadRestrictionFeed](/schemas/4.0/RoadRestrictionFeed.json) ### Previous Version -- [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) -- [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) -- [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) +- [WZDx v2.0 WZDxFeed](/schemas/2.0/WZDxFeed.json) +- [WZDx v3.0 WZDxFeed](/schemas/3.0/WZDxFeed.json) +- [WZDx v3.1 WZDxFeed](/schemas/3.1/WZDxFeed.json) ## Contributions diff --git a/schemas/wzdx_v2.0_feed.json b/schemas/2.0/WZDxFeed.json similarity index 99% rename from schemas/wzdx_v2.0_feed.json rename to schemas/2.0/WZDxFeed.json index 08ce7176..bd627244 100644 --- a/schemas/wzdx_v2.0_feed.json +++ b/schemas/2.0/WZDxFeed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v2.0_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/2.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v2.0 Feed", "description": "The GeoJSON output of a WZDx v2.0 data feed", diff --git a/schemas/wzdx_v3.0_feed.json b/schemas/3.0/WZDxFeed.json similarity index 99% rename from schemas/wzdx_v3.0_feed.json rename to schemas/3.0/WZDxFeed.json index 9c8ab968..e6b9fd5c 100644 --- a/schemas/wzdx_v3.0_feed.json +++ b/schemas/3.0/WZDxFeed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v3.0_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/3.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.0 Feed", "description": "The GeoJSON output of a WZDx v3.0 data feed", diff --git a/schemas/wzdx_v3.1_feed.json b/schemas/3.1/WZDxFeed.json similarity index 99% rename from schemas/wzdx_v3.1_feed.json rename to schemas/3.1/WZDxFeed.json index 502b9a3c..612e6d4d 100644 --- a/schemas/wzdx_v3.1_feed.json +++ b/schemas/3.1/WZDxFeed.json @@ -1,6 +1,6 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v3.1_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/3.1/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.1 Feed", "description": "The GeoJSON output of a WZDx v3.1 data feed", From 563dc4ba5602127301b6f8084947b6bb7a56d8c7 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 10:52:29 -0500 Subject: [PATCH 377/388] Capitalize Pull Request for consistency --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 47f9106c..e3b102d7 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,7 @@ The WZDx Specification defines a JSON schema for each feed within the [schemas]( - Report bugs and request features via [GitHub Issues](https://github.com/usdot-jpo-ode/wzdx/issues). - Ask the WZDx community for input on a question or propose an idea you have via [GithHub Discussions](https://github.com/usdot-jpo-ode/wzdx/discussions). -- Create a [GitHub pull request](https://help.github.com/articles/creating-a-pull-request/) that implements new functionality or fixes a bug. +- Create a [GitHub Pull Request](https://help.github.com/articles/creating-a-pull-request/) that implements new functionality or fixes a bug. - Review and provide feedback on update issues/discussions/pull requests created by other users. - Alternatively, [email us](mailto://avdx@dot.gov.) with any questions. - Help us improve our best practices and formatting on GitHub. From 91983ca8d317e207418f3ad9d582d9ca59a69ac3 Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Wed, 15 Dec 2021 10:27:24 -0600 Subject: [PATCH 378/388] Minor formatting --- spec-content/objects/FieldDeviceFeature.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index 63eb3d67..5f715f64 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -1,5 +1,5 @@ # FieldDeviceFeature Object -The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the road event object ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) via the `properties` property. +The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the road event object ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) via the `properties` property. Currently, only point devices are supported. @@ -15,4 +15,4 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`features` | [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) \ No newline at end of file +`features` | [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) From 7c9e25853b1b1c44e9461c42c23187158d94f921 Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Wed, 15 Dec 2021 11:47:58 -0500 Subject: [PATCH 379/388] Fix typo in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f21605c..2e3c7ec1 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ WZDx defines the structure and content of multiple distinct data feeds. Each fee ### List of Data Feeds Feed Name | Description | Producer | Consumer | Uses | Content --- | --- | --- | --- | --- | --- -`WZDxFeed` | Provides high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. | Agencies responsible for managing roadways and road work, typically state and local DOTs. | Traveling public via third parties such as mapping companies and CAVs. | Route planning; increased awareness; "put work zones on the map". | Work zone and detour road events (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). +`WZDxFeed` | Provides high-level information about events occurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. | Agencies responsible for managing roadways and road work, typically state and local DOTs. | Traveling public via third parties such as mapping companies and CAVs. | Route planning; increased awareness; "put work zones on the map". | Work zone and detour road events (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). `RoadRestrictionFeed` | Provides information about sections of roadways that have restrictions. Restriction types described by this specification are listed in the [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) enumerated type. | Transportation Authorities like Tribal, Local, State, or Federal Agencies. | Traveling public via third parties such as mapping companies and CAVs. | Increased awareness; Route planning; Driver, Passenger, and Road-User Safety; Increased Efficiency; Reduced Damage to Infrastructure. | Restriction road events (see [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). `SwzDeviceFeed` | Provides information (location, status, live data) about field devices deployed on the roadway in work zones. | Smart work zone equipment manufacturers or vendors. | Agencies responsible for managing roadways and permitting work, typically state and local DOTs. Third-parties such as mapping companies and CAVs may also be interested in field device information. | Simplifies design process for agencies wanting to interface with equipment manufacturers; aids in dynamically generating a `WZDxFeed` with accurate information; reduces effort for manufacturers to conform to different agencies requirements. | Field devices (see [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md)). From 81aad1d2dd38675597daf7b1d838fde6dd373ea3 Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Wed, 15 Dec 2021 11:48:53 -0500 Subject: [PATCH 380/388] Revert "Merge branch 'v4.0-release' of https://github.com/usdot-jpo-ode/wzdx into v4.0-release" This reverts commit 6890c6c21e7f38c84d38d88916c7022fdc3bf02d, reversing changes made to 7c9e25853b1b1c44e9461c42c23187158d94f921. --- Creating_a_WZDx_Feed.md | 8 +- README.md | 64 +++++++-------- RELEASES.md | 79 ------------------- examples/README.md | 6 +- ...r_bidrectional_linestring_example.geojson} | 0 schemas/4.0/BoundingBox.json | 2 +- schemas/4.0/FeedInfo.json | 2 +- schemas/4.0/RoadEventFeature.json | 8 +- schemas/4.0/RoadRestrictionFeed.json | 8 +- schemas/4.0/SwzDeviceFeed.json | 8 +- schemas/4.0/WZDxFeed.json | 8 +- .../WZDxFeed.json => wzdx_v2.0_feed.json} | 2 +- .../WZDxFeed.json => wzdx_v3.0_feed.json} | 2 +- .../WZDxFeed.json => wzdx_v3.1_feed.json} | 2 +- spec-content/README.md | 9 ++- .../enumerated-types/SpatialVerification.md | 2 +- .../WorkerPresenceDefinition.md | 2 +- .../enumerated-types/WorkerPresenceMethod.md | 4 +- spec-content/objects/FeedDataSource.md | 2 +- spec-content/objects/FieldDeviceFeature.md | 4 +- spec-content/objects/LocationMarker.md | 2 +- spec-content/objects/RestrictionRoadEvent.md | 2 +- spec-content/objects/RoadEvent.md | 39 +++++++++ spec-content/objects/RoadEventCoreDetails.md | 9 ++- spec-content/objects/RoadEventFeature.md | 4 +- spec-content/objects/RoadRestrictionFeed.md | 4 +- spec-content/objects/SwzDeviceFeed.md | 2 - spec-content/objects/TrafficSensor.md | 2 +- spec-content/objects/TrafficSensorLaneData.md | 6 +- spec-content/objects/WZDxFeed.md | 2 - spec-content/objects/WorkZoneRoadEvent.md | 2 +- spec-content/objects/WorkerPresence.md | 8 +- 32 files changed, 126 insertions(+), 178 deletions(-) rename examples/WZDxFeed/{scenario3_shoulder_bidirectional_linestring_example.geojson => scenario3_shoulder_bidrectional_linestring_example.geojson} (100%) rename schemas/{2.0/WZDxFeed.json => wzdx_v2.0_feed.json} (99%) rename schemas/{3.0/WZDxFeed.json => wzdx_v3.0_feed.json} (99%) rename schemas/{3.1/WZDxFeed.json => wzdx_v3.1_feed.json} (99%) create mode 100644 spec-content/objects/RoadEvent.md diff --git a/Creating_a_WZDx_Feed.md b/Creating_a_WZDx_Feed.md index 60cfdda3..01596b04 100644 --- a/Creating_a_WZDx_Feed.md +++ b/Creating_a_WZDx_Feed.md @@ -33,7 +33,7 @@ The following business rules help assure a standardized and interpretable use of 3. The preferred [GeoJSON Geometry](https://tools.ietf.org/html/rfc7946#page-7) for a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) is `LineString`, which allows indicating the full path of the road event. In cases where only the beginning and ending coordinates are available, the `MultiPoint` can be used. 4. A cascading multi-lane closure should consider the speed of vehicles traveling through the work zone. If the distance between lane closures is short enough that time in a to-be-closed lane is not significant, which is common, the to-be-closed lane should be represented as closed to avoid traffic delays and potential crashes. 5. A detour must be represented with a [RoadEvent](/spec-content/objects/RoadEvent.md) of type (i.e. with `event_type` of) `detour` and its containing [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) should have a `geometry` of `type` `LineString` to represent the full detour route. The detour road event should be connected to the work zone road event using the `relationship` property on the detour road event. -6. If the `lanes` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) is provided, it must include one entry for every lane in the road event. Providing lane information for only some of the lanes in a road event is not allowed. +6. If the `lanes` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object is provided, it must include one entry for every lane in the road event. Providing lane information for only some of the lanes in a road event is not allowed. ## Data Validation @@ -46,9 +46,9 @@ The WZDx Specification defines a JSON schema for each feed (WZDx v2.0 and later) - [WZDx v4.0 RoadRestrictionFeed](/schemas/4.0/RoadRestrictionFeed.json) #### Previous Versions -- [WZDx v2.0 WZDxFeed](/schemas/2.0/WZDxFeed.json) -- [WZDx v3.0 WZDxFeed](/schemas/3.0/WZDxFeed.json) -- [WZDx v3.1 WZDxFeed](/schemas/3.1/WZDxFeed.json) +- [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) +- [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) +- [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) ### Self-Validation Checklist For a list of steps to take to make sure your data feed conforms to the specification and is ready to publish, follow the [Self-Validation Checklist](/documents/WZDx_Data_Feed_Self-Validation_Checklist.docx). diff --git a/README.md b/README.md index f0d2b758..2e3c7ec1 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Specifically, WZDx defines the structure and content of several [GeoJSON](https: - [Project Description](#project-description) - [Contact Information](#contact-information) - [Release Notes](#release-notes) - - [Release v4.0 (Dec 2021)](#wzdx-v40-december-2021) + - [Release v3.1 (Apr 2021)] - [Getting Started](#getting-started) - [JSON Schemas](#json-schemas) - [Contributions](#contributions) @@ -37,8 +37,8 @@ The WZDx Specification repository contains several files and subdirectories. 1. [documents](/documents): supplementary PDF and Word documents such as the WZDx Early Adopter's Guide and WZDx Data Feed Self Validation Checklist. 2. [examples](/examples): example GeoJSON documents from WZDx data feeds. [examples/README.md](/examples/README.md) describes the content of this directory in detail. 3. [images](/images): the images that are referenced by other Markdown files in the repository. -4. [schemas](/schemas): contains [JSON Schema](https://json-schema.org/)s for each of the feeds defined by WZDx for feed validation. -5. [spec-content](/spec-content): details the data content of the WZDx specification, including objects, property names and types, and enumerated types. [spec-content/README.md](/spec-content/README.md) describes the content of this directory in detail. +4. [spec-content](/spec-content): details the data content of the WZDx specification, including objects, property names and types, and enumerated types. [spec-content/README.md](/spec-content/README.md) describes the content of this directory in detail. +5. [schemas](/schemas): contains [JSON Schema](https://json-schema.org/)s for each of the feeds defined by WZDx for feed validation. ### Files 1. [Creating_a_WZDx_Feed.md](/Creating_a_WZDx_Feed.md): information to assist in creating a WZDx data feed, such as the feed format, business rules, and validation tools. @@ -83,41 +83,33 @@ Contact Information: [avdx@dot.gov](mailto:avdx@dot.gov?subject=Submission%20of% ## Release Notes -### WZDx v4.0 (December 2021) -WZDx version 4.0 implements clean up and small additions in functionality to the WZDx feed and adds definitions for two new feeds, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) and [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md). Until version 4.0, the WZDx specification defined only one feed, the [WZDxFeed](/spec-content/objects/WZDxFeed.md). - -*For detailed release information, see [RELEASES.md](/RELEASES.md)* - -## Features -- Add values to the [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) enumerated type. -- Allow restrictions with a value and unit to be provided at the road event level. -- Add values to the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. -- Define a new data feed, the [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md), to enable providing a feed of restrictions on roadways, such as bridge clearances. -- Define a new data feed, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md), to enable equipment vendors and manufacturers to provide high-level information about deployed field devices in work zones. -- Rename the `workers_present` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object to `worker_presence`; change the type from "boolean" to a new [WorkerPresence](/spec-content/objects/WorkerPresence.md) object which enables providing more nuanced information about worker presence in work zones. - -## Refactoring -- Separate the v3.1 RoadEvent object into [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) (details that are shared by all specific types of road events) and specific types of road events ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) which each contain the `RoadEventCoreDetails` via a `core_details` property; update the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) `properties` property to be one of the specific road events types. -- Move the `location_method` property from the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object to the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object. -- Change the `reduced_speed_limit` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) to `reduced_speed_limit_kph`; change its type from "integer" to "number" and clarify that the value should be in kilometers per hour. -- Deprecate the `lane_number` property on the [Lane](/spec-content/objects/Lane.md) object. -- Deprecate the `lrs_type` and `lrs_url` properties on the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object. -- Remove the deprecated value `alternating-one-way` from the [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) enumerated type. -- Remove all deprecated properties from the road event (RoadEvent in previous versions; [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) in 4.0). -- Require the `road_names` property on the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md). -- Require the `id` property on the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). -- Refine the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. -- Deprecate the `location_verify_method` property on the [FeedDataSource](/spec-content/objects/FeedDataSource.md). -- Update the [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) enumerated type value descriptions to clarify that verified work zone locations should use a GPS enabled device. +### Release v3.1 (April 2021) +Following the major v3.0 release, the changes for the v3.1 release were developed with the goal enhancing and cleaning up the spec without making major changes or breaking backwards compatibility. Thus, in v3.1 many enumerated type values or object properties were deprecated rather than removed. Most if not all of these deprecated values will be removed in the next major release. + +This repository was also renamed from `jpo-wzdx` to `wzdx` on 2021-04-05. All links pointing to `jpo-wzdx` will automatically redirect to the new URL. + +#### Features +* Add `local-access-only` restriction +* Add `license` property to the `RoadEventFeedInfo` object + +#### Refactoring +* Refactor `LaneType` enumerated type to deprecate values that can be determined from other properties of the Lane object, such as `order`, `status`, and `lane_restrictions` +* Add value `alternating-flow` to `LaneStatus` enumerated type and deprecate `alternating-one-way` +* Add `road_names` property to the `RoadEvent` object and deprecate `road_name` and `road_number` +* Deprecate the `total_num_lanes` property on the `RoadEvent` object as the `RoadEvent`'s `lanes` array can be used to determine the number of lanes + +#### Fixes +* Add optional `bbox` property to allow providing a [GeoJSON Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) for the `WZDxFeed` and `RoadEventFeature` objects +* Add an `id` property to the `RoadEventFeature` object for providing the a road event's identifier to better follow [GeoJSON ID recommendations](https://tools.ietf.org/html/rfc7946#section-3.2) ## Getting Started -The WZDWG welcomes feedback and comments on the WZDx v4.0 Specification. Comments can be made by posting a GitHub [Issue](https://github.com/usdot-jpo-ode/wzdx/issues) or [Discussion](https://github.com/usdot-jpo-ode/wzdx/discussions), while suggested changes can be made using a [Pull Request](https://github.com/usdot-jpo-ode/wzdx/pulls). +The WZDWG welcomes feedback and comments on the WZDx 3.1 Specification. Comments can be made by posting a GitHub [Issues](https://github.com/usdot-jpo-ode/wzdx/issues) or [Discussions](https://github.com/usdot-jpo-ode/wzdx/discussions), while suggested changes can be made using a [Pull Request](https://github.com/usdot-jpo-ode/wzdx/pulls). -1. Read about WZDWG activities [Wiki](https://github.com/usdot-jpo-ode/wzdx/wiki) and the [WZDx Early Adopter's Guide](/documents/WZDx_Early_Adopters_Guide.pdf). +1. Read about WZDWG activities [Wiki](https://github.com/usdot-jpo-ode/wzdx/wiki) and the [WZDx Early Adopter's Guide](/documents/WZDx_Early_Adopters_Guide.pdf) 2. Learn about using GitHub as a [tool for collaboration and support](/create-feed/README.md#collaborate-via-github). -3. Read [Creating a WZDx feed](/Creating_a_WZDx_Feed.md) which contains information about creating a WZDx data feed, such as the feed format, business rules, and validation tools. -4. Use the [Specification Content](/spec-content) page to understand the data components of the specification. +3. Use [Specification Content](/spec-content) page to understand the data components of the specification. +4. [Create your own feed](/create-feed) using example feeds and follow the business rules. 5. Validate your feed output using the respective [JSON Schema](#json-schemas). 6. Publish your feed and tell us about it via avdx@dot.gov. @@ -130,9 +122,9 @@ The WZDx Specification defines a JSON schema for each feed within the [schemas]( - [WZDx v4.0 RoadRestrictionFeed](/schemas/4.0/RoadRestrictionFeed.json) ### Previous Version -- [WZDx v2.0 WZDxFeed](/schemas/2.0/WZDxFeed.json) -- [WZDx v3.0 WZDxFeed](/schemas/3.0/WZDxFeed.json) -- [WZDx v3.1 WZDxFeed](/schemas/3.1/WZDxFeed.json) +- [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) +- [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) +- [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) ## Contributions diff --git a/RELEASES.md b/RELEASES.md index 5a5d1434..676a9506 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,82 +1,3 @@ -# WZDx Specification v4.0 -Released December 2021 - -WZDx version 4.0 implements clean up and small additions in functionality to the WZDx feed and adds definitions for two new feeds, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) and [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md). Until version 4.0, the WZDx specification defined only one feed, the [WZDxFeed](/spec-content/objects/WZDxFeed.md). - -## Features -- Add the following values to the [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) enumerated type: - - `some-lanes-closed-merge-left` - - `some-lanes-closed-merge-right` - - `all-lanes-open-shift-left` - - `all-lanes-open-shift-right` - - `some-lanes-closed-split` - - `flagging` - - `temporary-traffic-signal` -- Allow restrictions with a value and unit to be provided at the road event level; specifically: - - Rename the LaneRestrictionUnit enumerated type to [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md). - - Rename the RoadRestriction enumerated type to [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). - - Rename the LaneRestriction object to [Restriction](/spec-content/objects/Restriction.md) and remove the `lane_restriction_` prefix from its properties. - - Rename the [Restriction](/spec-content/objects/Restriction.md) object `units` property to `unit`. -- Add values `parking` and `median` to the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. -- Define a new data feed, the [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to enable providing a feed of restrictions on roadways, such as bridge clearances. -- Define a new data feed, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md), to enable equipment vendors and manufacturers to provide high-level information about deployed field devices in work zones. A `SwzDeviceFeed` contains a new feature type, the [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md), which contains information about a specific type of field device. The following field devices are defined in WZDx v4.0: - - `ArrowBoard`: An electronic, connected arrow board which can display an arrow pattern to direct traffic. - - `Camera`: A camera device deployed in the field, capable of capturing still images. - - `DynamicMessageSign`: An electronic traffic sign deployed on the roadway, used to provide information to travelers. - - `FlashingBeacon`: A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something or capture driver attention. - - `HybridSign`: A hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers. - - `LocationMarker`: Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). - - `TrafficSensor`: A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. -- Rename the `workers_present` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object to `worker_presence`; change the type from "boolean" to a new [WorkerPresence](/spec-content/objects/WorkerPresence.md) object which enables providing more nuanced information about worker presence in work zones. - -## Refactoring -- Separate the v3.1 RoadEvent object into [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) (details that are shared by all specific types of road events) and specific types of road events ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) which each contain the `RoadEventCoreDetails` via a `core_details` property; update the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) `properties` property to be one of the specific road events types. -- Move the `location_method` property from the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object to the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object. -- Change the `reduced_speed_limit` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) to `reduced_speed_limit_kph`; change its type from "integer" to "number" and clarify that the value should be in kilometers per hour. -- Deprecate the `lane_number` property on the [Lane](/spec-content/objects/Lane.md) object. -- Deprecate the `lrs_type` and `lrs_url` properties on the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object. -- Remove the deprecated value `alternating-one-way` from the [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) enumerated type. -- Remove the following deprecated properties from the road event (RoadEvent in previous versions; [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) in 4.0): - - `road_event_id` - - `road_number` - - `road_name` - - `total_num_lanes` -- Remove the following deprecated values from the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type: - - `left-lane` - - `right-lane` - - `middle-lane` - - `center-lane` - - `right-shoulder` - - `left-shoulder` - - `right-second-exit-ramp` - - `left-second-exit-ramp` - - `right-entrance-exit-ramp` - - `left-entrance-exit-ramp` - - `hov-lane` - - `alternating-flow-lane` - - `reversible-lane` - - `right-entrance-lane` - - `left-entrance-lane` - - `left-entrance-ramp` - - `right-merging-lane` - - `left-merging-lane` - - `right-second-entrance-ramp` - - `left-second-entrance-ramp` -- Require the `road_names` property on the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md). -- Require the `id` property on the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). -- Refine the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type; specifically: - - Rename `lane` to `general`. - - Remove `right-turning-lane` and `left-turning-lane`. - - Remove `right-exit-lane` and `left-exit-lane`. - - Add `exit-lane`. - - Remove `right-exit-ramp` and `left-exit-ramp`. - - Add `exit-ramp`. - - Remove `right-entrance-ramp` and `left-exit-ramp`. - - Add `entrance-ramp`. - - Add `entrance-lane`. -- Deprecate the `location_verify_method` property on the [FeedDataSource](/spec-content/objects/FeedDataSource.md). -- Update the [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) enumerated type value descriptions to clarify that verified work zone locations should use a GPS enabled device. - # WZDx Specification v3.1 Released April 2021 diff --git a/examples/README.md b/examples/README.md index 78ec4e1b..4c162c4b 100644 --- a/examples/README.md +++ b/examples/README.md @@ -2,7 +2,7 @@ This directory contains example GeoJSON documents from WZDx data feeds. The examples cover a range of common scenarios. There are examples for the `WZDxFeed`, `RoadRestrictionFeed`, and `SwzDeviceFeed`, contained within the respective subdirectories. ## WZDxFeed Examples -The following `WZDxFeed` examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type as well as one `MultiPoint` geometry type for scenario 1. +The following `WZDxFeed` examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type. as well as one `MultiPoint` geometry type for scenario 1. Below is a summary of each of the example WZDx feeds and detailed differences for each of the road events: @@ -53,13 +53,13 @@ The [local access only example](/examples/WZDxFeed/local_access_only_bidirection The following example `SwzDeviceFeed`s are provided: 1. [Arrow Board "ok" Example](/examples/SwzDeviceFeed/arrow_board_ok_example.geojson): A simple feed that includes a single arrow board with an `ok` status and several optional properties provided. -2. [Camera "error" Example](/examples/SwzDeviceFeed/camera_error_example.geojson): A simple feed that includes a single camera with an `error` status, no image data, associated `status_messages`, and a few optional properties provided. +2. [Camera "error" Example](/examples/SwzDeviceFeed/camera_error_example): A simple feed that includes a single camera with an `error` status, no image data, associated `status_messages`, and a few optional properties provided. ## RoadRestrictionFeed Examples The following example `RoadrestrictionFeed`s are provided: ### 1. Bridge Height Restriction -The [Bridge Height Restriction Example](/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson) shows the use of a [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to define a bridge clearance on a roadway. +The [Bridge Height Restriction Example](/examples/RoadRestrictionFeed/bridge_restriction_linestring_example.geojson) shows the use of a [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to define a bridge clearance on a roadway. - Defines three bridge height restrictions. - Two restrictions (`id`s: `Bridge2`, `Bridge3`) are defined using only the required core details and basic event-level information. diff --git a/examples/WZDxFeed/scenario3_shoulder_bidirectional_linestring_example.geojson b/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson similarity index 100% rename from examples/WZDxFeed/scenario3_shoulder_bidirectional_linestring_example.geojson rename to examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson diff --git a/schemas/4.0/BoundingBox.json b/schemas/4.0/BoundingBox.json index e35ed926..ec2e0372 100644 --- a/schemas/4.0/BoundingBox.json +++ b/schemas/4.0/BoundingBox.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "GeoJSON Bounding Box", "description": "Information on the coordinate range for a Geometry, Feature, or FeatureCollection", diff --git a/schemas/4.0/FeedInfo.json b/schemas/4.0/FeedInfo.json index ae3e6eeb..f874b4ed 100644 --- a/schemas/4.0/FeedInfo.json +++ b/schemas/4.0/FeedInfo.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx Feed Information", "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index d17a7670..00b96e24 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -1,6 +1,6 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadEventFeature.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Road Event Feature (GeoJSON Feature)", "description": "The container object for a specific WZDx road event; an instance of a GeoJSON Feature", @@ -45,7 +45,7 @@ ] }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"], @@ -462,14 +462,14 @@ "type": "object", "properties": { "are_workers_present": { - "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘definition’ property on the WorkerPresence object", + "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object", "type": "boolean" }, "method": { "$ref": "#/definitions/WorkerPresenceMethod" }, "worker_presence_last_confirmed_date": { - "description": "The UTC date and time at which the presence of workers was last confirmed", + "description": "Datetime at which the presence of workers was last confirmed using the 'source'", "type": "string", "format": "date-time" }, diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index a01b98d5..2f1edcf8 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadRestrictionFeed.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadRestrictionFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 Road Restriction Feed", "description": "The GeoJSON output of a WZDx road restriction data feed (v4.0)", "type": "object", "properties": { "feed_info": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -38,13 +38,13 @@ "required": ["properties"] }, { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadEventFeature.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json" } ] } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": [ diff --git a/schemas/4.0/SwzDeviceFeed.json b/schemas/4.0/SwzDeviceFeed.json index 86e07084..d53766a5 100644 --- a/schemas/4.0/SwzDeviceFeed.json +++ b/schemas/4.0/SwzDeviceFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/SwzDeviceFeed.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/SwzDeviceFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 SwzDeviceFeed", "description": "The GeoJSON output of a WZDx smart work zone device data feed (v4.0)", "type": "object", "properties": { "feed_info": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -20,7 +20,7 @@ } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": ["feed_info", "type", "features"], @@ -78,7 +78,7 @@ ] }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"] diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index bdd2c8ad..9b8e00a2 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/WZDxFeed.json", + "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 WZDxFeed", "description": "The GeoJSON output of a WZDx feed data feed (v4.0)", "type": "object", "properties": { "road_event_feed_info": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -36,13 +36,13 @@ "required": ["properties"] }, { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadEventFeature.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json" } ] } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" } }, "required": ["road_event_feed_info", "type", "features"] diff --git a/schemas/2.0/WZDxFeed.json b/schemas/wzdx_v2.0_feed.json similarity index 99% rename from schemas/2.0/WZDxFeed.json rename to schemas/wzdx_v2.0_feed.json index bd627244..08ce7176 100644 --- a/schemas/2.0/WZDxFeed.json +++ b/schemas/wzdx_v2.0_feed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/2.0/WZDxFeed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v2.0_feed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v2.0 Feed", "description": "The GeoJSON output of a WZDx v2.0 data feed", diff --git a/schemas/3.0/WZDxFeed.json b/schemas/wzdx_v3.0_feed.json similarity index 99% rename from schemas/3.0/WZDxFeed.json rename to schemas/wzdx_v3.0_feed.json index e6b9fd5c..9c8ab968 100644 --- a/schemas/3.0/WZDxFeed.json +++ b/schemas/wzdx_v3.0_feed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/3.0/WZDxFeed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v3.0_feed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.0 Feed", "description": "The GeoJSON output of a WZDx v3.0 data feed", diff --git a/schemas/3.1/WZDxFeed.json b/schemas/wzdx_v3.1_feed.json similarity index 99% rename from schemas/3.1/WZDxFeed.json rename to schemas/wzdx_v3.1_feed.json index 612e6d4d..502b9a3c 100644 --- a/schemas/3.1/WZDxFeed.json +++ b/schemas/wzdx_v3.1_feed.json @@ -1,6 +1,6 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/3.1/WZDxFeed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v3.1_feed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.1 Feed", "description": "The GeoJSON output of a WZDx v3.1 data feed", diff --git a/spec-content/README.md b/spec-content/README.md index 30052341..f6e7d085 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -46,7 +46,8 @@ Object | Description [Restriction](/spec-content/objects/Restriction.md) | A restriction on a road event or lane, including type and value. [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | Describes a section of roadway and the limitations of how that section can be used. [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events. -[RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx road event. +[RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. +[RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about the presence of workers in the road event area. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. @@ -64,10 +65,10 @@ Object | Description [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. [HybridSign](/spec-content/objects/HybridSign.md) | A hybrid sign that contains static text (e.g. on an alumium sign) along with a single electronic message display, used to provide information to travelers. [LocationMarker](/spec-content/objects/LocationMarker.md) | Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). -[MarkedLocation](/spec-content/objects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. +[MarkedLocation](/spec-contentobjects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) | The root (highest-level) object of smart work zone device feed GeoJSON document. [TrafficSensor](/spec-content/objects/TrafficSensor.md) | A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. -[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a road event (e.g. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. +[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. ### Object Diagrams The object diagrams below depict the relationship between the data objects for each WZDx feed. @@ -109,7 +110,7 @@ Enumerated Type | Description [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | Unit of measurement (e.g. "pounds", "centimeters"). [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. -[WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | High-level description of the feed publisher's confidence in worker presence. +[WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | High-level description of the feed publisher's confidence in worker presence [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Method of knowing the presence of workers in the road event area. [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Methods for how worker presence in a work zone event area is determined. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. diff --git a/spec-content/enumerated-types/SpatialVerification.md b/spec-content/enumerated-types/SpatialVerification.md index 02a2763a..e39214eb 100644 --- a/spec-content/enumerated-types/SpatialVerification.md +++ b/spec-content/enumerated-types/SpatialVerification.md @@ -5,7 +5,7 @@ An indication of how a geographical coordinate was defined. Value | Description --- | --- `estimated` | Estimated location for the work zone road event geometry. An estimated measurement is based on an approximation of the reported location of a work zone. Approximations of the location can include but are not limited to a point relative to a posted mile maker or cross street, selecting a point on a map, or locations based on project plans. -`verified` | Verified locations for the work zone road event geometry representing the actual extents of the work zone. A verified measurement is based on actual reported data from a GPS equipped device showing the measured location of the work zone. +`verified` | Verified locations for the work zone road event geometry representing the actual extents of the work zone. A verified measurement is based on actual reported data from a GPS equipped device showing the measured location of the work zone. Ths actual location is measured using a GPS device that provides the verified location of the identified location. ## Used By Property | Object diff --git a/spec-content/enumerated-types/WorkerPresenceDefinition.md b/spec-content/enumerated-types/WorkerPresenceDefinition.md index f44a0bfb..d2935916 100644 --- a/spec-content/enumerated-types/WorkerPresenceDefinition.md +++ b/spec-content/enumerated-types/WorkerPresenceDefinition.md @@ -15,4 +15,4 @@ Value | Description ## Used By Property | Object --- | --- -`definition` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) +`worker_presence_definition` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) diff --git a/spec-content/enumerated-types/WorkerPresenceMethod.md b/spec-content/enumerated-types/WorkerPresenceMethod.md index 28932deb..67e8f5b7 100644 --- a/spec-content/enumerated-types/WorkerPresenceMethod.md +++ b/spec-content/enumerated-types/WorkerPresenceMethod.md @@ -6,7 +6,7 @@ Value | Description --- | --- `camera-monitoring` | Cameras in the work zone event area show workers are present. `arrow-board-present` | A GPS-enabled arrow board is located in the work zone event area and broadcasting its location, implying that workers are present. -`cones-present` | GPS-enabled cones are located in the road event area, implying that workers are present. +`cones-present` | GPS-enabled cones are located in the road event event area, implying that workers are present. `maintenance-vehicle-present` | A GPS-enabled maintenance vehicle is located in the road event area, implying that workers are present. `wearables-present` | Workers wearing wearable detection equipment are present in the work zone. `mobile-device-present` | Workers with GPS-enabled mobile device tracking are present in the work zone. @@ -17,4 +17,4 @@ Value | Description ## Used By Property | Object --- | --- -`method` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) +`source` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) diff --git a/spec-content/objects/FeedDataSource.md b/spec-content/objects/FeedDataSource.md index 41568452..8e8fd28e 100644 --- a/spec-content/objects/FeedDataSource.md +++ b/spec-content/objects/FeedDataSource.md @@ -4,7 +4,7 @@ The `FeedDataSource` object describes information about a specific data source u ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`data_source_id` | String | Unique identifier for the data source organization providing work zone data. | Required | Linked to a road event by the `data_source_id` property on the road event's [core details](/spec-content/objects/RoadEventCoreDetails.md) or a field device by the `data_source_id` property on the device's [core details](/spec-content/objects/FieldDeviceCoreDetails.md). +`data_source_id` | String | Unique identifier for the data source organization providing work zone data. | Required | Linked to a road event by the `data_source_id` property on the road event's [core details](/spec-content/objects/RoadEventCoreDetails.md) or or a field device by the `data_source_id` property on the device's [core details](/spec-content/objects/FieldDeviceCoreDetails.md). `organization_name` | String | The name of the organization for the authoritative source of the work zone data. | Required | Example: County DOT `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time when the data source was last updated. | Optional | All date-time formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z` `update_frequency` | Integer | The frequency in seconds at which the data source is updated. | Optional | diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index 5f715f64..590c5995 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -1,5 +1,5 @@ # FieldDeviceFeature Object -The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the road event object ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) via the `properties` property. +The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the RoadEvent object via the `properties` property. Currently, only point devices are supported. @@ -15,4 +15,4 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`features` | [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) +`features` | [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) \ No newline at end of file diff --git a/spec-content/objects/LocationMarker.md b/spec-content/objects/LocationMarker.md index df0d8090..a7733934 100644 --- a/spec-content/objects/LocationMarker.md +++ b/spec-content/objects/LocationMarker.md @@ -1,5 +1,5 @@ # LocationMarker Object -The `LocationMarker` object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The `LocationMarker` contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.md) objects which indicate the type of location (such as the start or end) and optionally the ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) that the location is associated with. +The `LocationMarker` object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The `LocationMarker` contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.md) objects which indicate the type of location (such as the start or end) and optionally the ID of a [RoadEvent](/spec-content/objects/RoadEvent.md) that the location is associated with. The `LocationMarker` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). diff --git a/spec-content/objects/RestrictionRoadEvent.md b/spec-content/objects/RestrictionRoadEvent.md index cccb2b1c..43f6ba05 100644 --- a/spec-content/objects/RestrictionRoadEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -10,7 +10,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | Describes the basic characterisitics of a Road Event. | Required | `restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Conditional: required if `lanes` property is not provided. | Restrictions can also be provided on an individual lane. -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment). | Conditional: required if `restrictions` property is not provided. | +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Conditional: required if `restrictions` property is not provided. | ## Used By Property | Object diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md new file mode 100644 index 00000000..9cf2a545 --- /dev/null +++ b/spec-content/objects/RoadEvent.md @@ -0,0 +1,39 @@ +# RoadEvent Object +The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone` and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). + +## Properties +Name | Type | Description | Conformance | Notes +--- | --- | --- | --- | --- +`event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | +`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) included within the same WZDx GeoJSON document. +`start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. +`end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. +`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | +`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | +`beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | +`ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | +`road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | +`direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) +`vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | +`relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | +`beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | +`ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | +`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. +`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. +`event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | +`types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | +`worker_presence` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about whether workers are present in the road event area. | Optional | +`reduced_speed_limit_kph` | Integer | The reduced speed limit posted within the road event, in kilometers per hour. This property only needs to be supplied if the speed limit within the road event is lower than the posted speed limit of the roadway. | Optional | +`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Optional | Restrictions can also be provided on an individual lane. +`description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version +`creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. +`update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. + +## Used By +Property | Object +--- | --- +`properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) + +## Important Notes +The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) that is included in the same WZDx GeoJSON document. diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index 25536ff4..578e0100 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -1,11 +1,11 @@ # RoadEventCoreDetails Object -The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a "road event") that is shared by all types of road events, such as work zones (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)), detours (see [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)), and road restrictions (see [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). The `RoadEventCoreDetails` cannot exist directly in a data feed and on its own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each of which is represented by its own object. +The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a "road event") that is shared by all types of road events, such as work zones (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) and detours (see [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). The `RoadEventCoreDetails` cannot exist directly in a data feed and on it's own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each which is represented by its own object. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | -`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) included within the same WZDx GeoJSON document. +`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same WZDx GeoJSON document. `road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | `direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) `relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | @@ -18,7 +18,8 @@ Property | Object --- | --- `core_details` | [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) `core_details` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) -`core_details` | [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) ## Important Notes -The value of the `RoadEventCoreDetails`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) that is included in the same WZDx GeoJSON document. +The value of the `RoadEventCoreDetails`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. + + diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index d024296e..c016535d 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -1,5 +1,5 @@ # RoadEventFeature Object (GeoJSON Feature) -The `RoadEventFeature` object is the container object for a WZDx road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md). The `RoadEventFeature` object is an instance of a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2). +The `RoadEventFeature` object is the container object for a WZDx [RoadEvent](/spec-content/objects/RoadEvent.md). The `RoadEventFeature` object is an instance of a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2). ## Properties Name | Type | Description | Conformance | Notes @@ -14,4 +14,4 @@ Name | Type | Description | Conformance | Notes Property | Object --- | --- `features` | [WZDx Feed](/spec-content/objects/WZDxFeed.md) -`features` | [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) +`features` | [RoadRestrictionFeed](spec-content/objects/RoadRestrictionFeed.md) diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index c5d7e1b8..0905b0e0 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -1,12 +1,10 @@ # RoadRestrictionFeed Object (GeoJSON FeatureCollection) The `RoadRestrictionFeed` object is the root (highest level) object of a WZDx road restriction feed. There is one `RoadRestrictionFeed` object per road restriction feed GeoJSON document. The `RoadRestrictionFeed` is a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3). -The `RoadRestrictionFeed` contains information about sections of roadways that have restrictions. Restriction types described by this specification are listed in the [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) enumerated type. - ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`feed_info` | [FeedInfo](/spec-content/objects/FeedInfo.md) | Information about the WZDx road restriction feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. +`feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx road restriction feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. `features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. diff --git a/spec-content/objects/SwzDeviceFeed.md b/spec-content/objects/SwzDeviceFeed.md index f62618c6..33387384 100644 --- a/spec-content/objects/SwzDeviceFeed.md +++ b/spec-content/objects/SwzDeviceFeed.md @@ -1,8 +1,6 @@ # SwzDeviceFeed Object (GeoJSON FeatureCollection) The `SwzDeviceFeed` object is the root (highest level) object of a smart work zone device feed. There is one `SwzDeviceFeed` object per feed GeoJSON document. The `SwzDeviceFeed` is a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. -The `SwzDeviceFeed` contains information (location, status, live data) about field devices deployed on the roadway in work zones. - ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md index 82897a4e..95b88854 100644 --- a/spec-content/objects/TrafficSensor.md +++ b/spec-content/objects/TrafficSensor.md @@ -1,5 +1,5 @@ # TrafficSensor Object -The `TrafficSensor` object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The `TrafficSensor` can describe lane-level traffic data if available and if associated with a road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). +The `TrafficSensor` object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The `TrafficSensor` can describe lane-level traffic data if available and if associated with a [RoadEvent](/spec-content/objects/RoadEvent.md). The `TrafficSensor` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). diff --git a/spec-content/objects/TrafficSensorLaneData.md b/spec-content/objects/TrafficSensorLaneData.md index 58a4942e..96516334 100644 --- a/spec-content/objects/TrafficSensorLaneData.md +++ b/spec-content/objects/TrafficSensorLaneData.md @@ -1,13 +1,13 @@ # TrafficSensorLaneData Object -The `TrafficSensorLaneData` object describes data for a single lane within a road event (e.g. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. +The TrafficSensorLaneData object describes data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. -Note this structure allows a single [TrafficSensor](/spec-content/objects/TrafficSensor.md) to provide data across lanes on multiple road events. It does not allow for lane data to be provided when a road event is not known. +Note this structure allows a single TrafficSensor to provide data across lanes on multiple road events. It does not allow for lane data to be provided when a road event is not known. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `road_event_id` | String | The ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) which the measured lane occurs in. | Required | -`lane_order` | Positive Integer | The lane's position in sequence within the road event (specified by `road_event_id`). The value of this property corresponds to the associated road event's [Lane](/spec-content/objects/Lane.md)'s `order` property. | Required | +`lane_order` | Positive Integer | The lane's position in sequence within the road event (specified by `road_event_id`). The value of this property corresponds to the associated [RoadEvent](/spec-content/objects/RoadEvent.md)'s [Lane](/spec-content/objects/Lane.md)'s `order` property. | Required | `average_speed_kph` | Integer (>= 0) | The average speed of traffic in the lane over the collection interval (in kilometers per hour). | Optional | `volume_vph` | Integer (>= 0) | The rate of vehicles passing by the sensor in the lane during the collection interval (in vehicles per hour). | Optional | `occupancy_percent` | Integer (>= 0) | The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | diff --git a/spec-content/objects/WZDxFeed.md b/spec-content/objects/WZDxFeed.md index 7b06cb37..7b61071e 100644 --- a/spec-content/objects/WZDxFeed.md +++ b/spec-content/objects/WZDxFeed.md @@ -1,8 +1,6 @@ # WZDxFeed Object (GeoJSON FeatureCollection) The `WZDxFeed` object is the root (highest level) object of a WZDx feed. There is one WZDx feed object per WZDx GeoJSON document. The `WZDxFeed` is an instance of a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. -The `WZDxFeed` contains high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. - ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- diff --git a/spec-content/objects/WorkZoneRoadEvent.md b/spec-content/objects/WorkZoneRoadEvent.md index 6584765d..c7caecdc 100644 --- a/spec-content/objects/WorkZoneRoadEvent.md +++ b/spec-content/objects/WorkZoneRoadEvent.md @@ -15,7 +15,7 @@ Name | Type | Description | Conformance | Notes `ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | `location_method` | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. | Required | `vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment). | Optional | +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | `beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | `ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | `beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 06dfa791..9b183e41 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -1,5 +1,5 @@ -# WorkerPresence Object -The `WorkerPresence` object contains information on the presence of workers in the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)'s area. +# Worker Presence Object +The `WorkerPresence` object contains information on the presence of workers in the `RoadEvent`'s area. ## Properties Name | Type | Description | Conformance | Notes @@ -7,10 +7,10 @@ Name | Type | Description | Conformance | Notes `are_workers_present` | Boolean | Whether workers are present in the work zone event area. This value should be set in accordance with the definition provided in the `definition` property if it is provided. | Required | `definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional `method` | [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Describes the method for how worker presence in a work zone event area is determined. | Optional | -`worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time at which the presence of workers was last confirmed. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). +`worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | Date and time at which the presence of workers was last confirmed. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). `confidence` | [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | The data producer’s confidence in the value of `are_workers_present`. | Optional | ## Used By Property | Object --- | --- -`worker_presence` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) +`worker_presence` | [RoadEvent](/spec-content/objects/RoadEvent.md) From 081299764e76b16fead1aa858bd651eeb83778ee Mon Sep 17 00:00:00 2001 From: Skylar Knickerbocker Date: Wed, 15 Dec 2021 11:10:37 -0600 Subject: [PATCH 381/388] Update reference to feed data source --- spec-content/objects/RoadEventCoreDetails.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index 578e0100..703d0adc 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -5,7 +5,7 @@ The `RoadEventCoreDetails` object represents the core details of an event occurr Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | -`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) included within the same WZDx GeoJSON document. +`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) included within the same WZDx GeoJSON document. `road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | `direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) `relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | From e5c8524160246e2e728fc3c09650a7e332486e4d Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Wed, 15 Dec 2021 13:30:46 -0500 Subject: [PATCH 382/388] Revert "Revert "Merge branch 'v4.0-release' of https://github.com/usdot-jpo-ode/wzdx into v4.0-release"" This reverts commit 81aad1d2dd38675597daf7b1d838fde6dd373ea3. --- Creating_a_WZDx_Feed.md | 8 +- README.md | 64 ++++++++------- RELEASES.md | 79 +++++++++++++++++++ examples/README.md | 6 +- ..._bidirectional_linestring_example.geojson} | 0 .../WZDxFeed.json} | 2 +- .../WZDxFeed.json} | 2 +- .../WZDxFeed.json} | 2 +- schemas/4.0/BoundingBox.json | 2 +- schemas/4.0/FeedInfo.json | 2 +- schemas/4.0/RoadEventFeature.json | 8 +- schemas/4.0/RoadRestrictionFeed.json | 8 +- schemas/4.0/SwzDeviceFeed.json | 8 +- schemas/4.0/WZDxFeed.json | 8 +- spec-content/README.md | 9 +-- .../enumerated-types/SpatialVerification.md | 2 +- .../WorkerPresenceDefinition.md | 2 +- .../enumerated-types/WorkerPresenceMethod.md | 4 +- spec-content/objects/FeedDataSource.md | 2 +- spec-content/objects/FieldDeviceFeature.md | 4 +- spec-content/objects/LocationMarker.md | 2 +- spec-content/objects/RestrictionRoadEvent.md | 2 +- spec-content/objects/RoadEvent.md | 39 --------- spec-content/objects/RoadEventCoreDetails.md | 7 +- spec-content/objects/RoadEventFeature.md | 4 +- spec-content/objects/RoadRestrictionFeed.md | 4 +- spec-content/objects/SwzDeviceFeed.md | 2 + spec-content/objects/TrafficSensor.md | 2 +- spec-content/objects/TrafficSensorLaneData.md | 6 +- spec-content/objects/WZDxFeed.md | 2 + spec-content/objects/WorkZoneRoadEvent.md | 2 +- spec-content/objects/WorkerPresence.md | 8 +- 32 files changed, 177 insertions(+), 125 deletions(-) rename examples/WZDxFeed/{scenario3_shoulder_bidrectional_linestring_example.geojson => scenario3_shoulder_bidirectional_linestring_example.geojson} (100%) rename schemas/{wzdx_v2.0_feed.json => 2.0/WZDxFeed.json} (99%) rename schemas/{wzdx_v3.0_feed.json => 3.0/WZDxFeed.json} (99%) rename schemas/{wzdx_v3.1_feed.json => 3.1/WZDxFeed.json} (99%) delete mode 100644 spec-content/objects/RoadEvent.md diff --git a/Creating_a_WZDx_Feed.md b/Creating_a_WZDx_Feed.md index 01596b04..60cfdda3 100644 --- a/Creating_a_WZDx_Feed.md +++ b/Creating_a_WZDx_Feed.md @@ -33,7 +33,7 @@ The following business rules help assure a standardized and interpretable use of 3. The preferred [GeoJSON Geometry](https://tools.ietf.org/html/rfc7946#page-7) for a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) is `LineString`, which allows indicating the full path of the road event. In cases where only the beginning and ending coordinates are available, the `MultiPoint` can be used. 4. A cascading multi-lane closure should consider the speed of vehicles traveling through the work zone. If the distance between lane closures is short enough that time in a to-be-closed lane is not significant, which is common, the to-be-closed lane should be represented as closed to avoid traffic delays and potential crashes. 5. A detour must be represented with a [RoadEvent](/spec-content/objects/RoadEvent.md) of type (i.e. with `event_type` of) `detour` and its containing [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) should have a `geometry` of `type` `LineString` to represent the full detour route. The detour road event should be connected to the work zone road event using the `relationship` property on the detour road event. -6. If the `lanes` property on the [RoadEvent](/spec-content/objects/RoadEvent.md) object is provided, it must include one entry for every lane in the road event. Providing lane information for only some of the lanes in a road event is not allowed. +6. If the `lanes` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) is provided, it must include one entry for every lane in the road event. Providing lane information for only some of the lanes in a road event is not allowed. ## Data Validation @@ -46,9 +46,9 @@ The WZDx Specification defines a JSON schema for each feed (WZDx v2.0 and later) - [WZDx v4.0 RoadRestrictionFeed](/schemas/4.0/RoadRestrictionFeed.json) #### Previous Versions -- [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) -- [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) -- [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) +- [WZDx v2.0 WZDxFeed](/schemas/2.0/WZDxFeed.json) +- [WZDx v3.0 WZDxFeed](/schemas/3.0/WZDxFeed.json) +- [WZDx v3.1 WZDxFeed](/schemas/3.1/WZDxFeed.json) ### Self-Validation Checklist For a list of steps to take to make sure your data feed conforms to the specification and is ready to publish, follow the [Self-Validation Checklist](/documents/WZDx_Data_Feed_Self-Validation_Checklist.docx). diff --git a/README.md b/README.md index 2e3c7ec1..f0d2b758 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Specifically, WZDx defines the structure and content of several [GeoJSON](https: - [Project Description](#project-description) - [Contact Information](#contact-information) - [Release Notes](#release-notes) - - [Release v3.1 (Apr 2021)] + - [Release v4.0 (Dec 2021)](#wzdx-v40-december-2021) - [Getting Started](#getting-started) - [JSON Schemas](#json-schemas) - [Contributions](#contributions) @@ -37,8 +37,8 @@ The WZDx Specification repository contains several files and subdirectories. 1. [documents](/documents): supplementary PDF and Word documents such as the WZDx Early Adopter's Guide and WZDx Data Feed Self Validation Checklist. 2. [examples](/examples): example GeoJSON documents from WZDx data feeds. [examples/README.md](/examples/README.md) describes the content of this directory in detail. 3. [images](/images): the images that are referenced by other Markdown files in the repository. -4. [spec-content](/spec-content): details the data content of the WZDx specification, including objects, property names and types, and enumerated types. [spec-content/README.md](/spec-content/README.md) describes the content of this directory in detail. -5. [schemas](/schemas): contains [JSON Schema](https://json-schema.org/)s for each of the feeds defined by WZDx for feed validation. +4. [schemas](/schemas): contains [JSON Schema](https://json-schema.org/)s for each of the feeds defined by WZDx for feed validation. +5. [spec-content](/spec-content): details the data content of the WZDx specification, including objects, property names and types, and enumerated types. [spec-content/README.md](/spec-content/README.md) describes the content of this directory in detail. ### Files 1. [Creating_a_WZDx_Feed.md](/Creating_a_WZDx_Feed.md): information to assist in creating a WZDx data feed, such as the feed format, business rules, and validation tools. @@ -83,33 +83,41 @@ Contact Information: [avdx@dot.gov](mailto:avdx@dot.gov?subject=Submission%20of% ## Release Notes -### Release v3.1 (April 2021) -Following the major v3.0 release, the changes for the v3.1 release were developed with the goal enhancing and cleaning up the spec without making major changes or breaking backwards compatibility. Thus, in v3.1 many enumerated type values or object properties were deprecated rather than removed. Most if not all of these deprecated values will be removed in the next major release. - -This repository was also renamed from `jpo-wzdx` to `wzdx` on 2021-04-05. All links pointing to `jpo-wzdx` will automatically redirect to the new URL. - -#### Features -* Add `local-access-only` restriction -* Add `license` property to the `RoadEventFeedInfo` object - -#### Refactoring -* Refactor `LaneType` enumerated type to deprecate values that can be determined from other properties of the Lane object, such as `order`, `status`, and `lane_restrictions` -* Add value `alternating-flow` to `LaneStatus` enumerated type and deprecate `alternating-one-way` -* Add `road_names` property to the `RoadEvent` object and deprecate `road_name` and `road_number` -* Deprecate the `total_num_lanes` property on the `RoadEvent` object as the `RoadEvent`'s `lanes` array can be used to determine the number of lanes - -#### Fixes -* Add optional `bbox` property to allow providing a [GeoJSON Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) for the `WZDxFeed` and `RoadEventFeature` objects -* Add an `id` property to the `RoadEventFeature` object for providing the a road event's identifier to better follow [GeoJSON ID recommendations](https://tools.ietf.org/html/rfc7946#section-3.2) +### WZDx v4.0 (December 2021) +WZDx version 4.0 implements clean up and small additions in functionality to the WZDx feed and adds definitions for two new feeds, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) and [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md). Until version 4.0, the WZDx specification defined only one feed, the [WZDxFeed](/spec-content/objects/WZDxFeed.md). + +*For detailed release information, see [RELEASES.md](/RELEASES.md)* + +## Features +- Add values to the [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) enumerated type. +- Allow restrictions with a value and unit to be provided at the road event level. +- Add values to the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. +- Define a new data feed, the [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md), to enable providing a feed of restrictions on roadways, such as bridge clearances. +- Define a new data feed, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md), to enable equipment vendors and manufacturers to provide high-level information about deployed field devices in work zones. +- Rename the `workers_present` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object to `worker_presence`; change the type from "boolean" to a new [WorkerPresence](/spec-content/objects/WorkerPresence.md) object which enables providing more nuanced information about worker presence in work zones. + +## Refactoring +- Separate the v3.1 RoadEvent object into [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) (details that are shared by all specific types of road events) and specific types of road events ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) which each contain the `RoadEventCoreDetails` via a `core_details` property; update the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) `properties` property to be one of the specific road events types. +- Move the `location_method` property from the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object to the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object. +- Change the `reduced_speed_limit` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) to `reduced_speed_limit_kph`; change its type from "integer" to "number" and clarify that the value should be in kilometers per hour. +- Deprecate the `lane_number` property on the [Lane](/spec-content/objects/Lane.md) object. +- Deprecate the `lrs_type` and `lrs_url` properties on the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object. +- Remove the deprecated value `alternating-one-way` from the [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) enumerated type. +- Remove all deprecated properties from the road event (RoadEvent in previous versions; [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) in 4.0). +- Require the `road_names` property on the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md). +- Require the `id` property on the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). +- Refine the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. +- Deprecate the `location_verify_method` property on the [FeedDataSource](/spec-content/objects/FeedDataSource.md). +- Update the [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) enumerated type value descriptions to clarify that verified work zone locations should use a GPS enabled device. ## Getting Started -The WZDWG welcomes feedback and comments on the WZDx 3.1 Specification. Comments can be made by posting a GitHub [Issues](https://github.com/usdot-jpo-ode/wzdx/issues) or [Discussions](https://github.com/usdot-jpo-ode/wzdx/discussions), while suggested changes can be made using a [Pull Request](https://github.com/usdot-jpo-ode/wzdx/pulls). +The WZDWG welcomes feedback and comments on the WZDx v4.0 Specification. Comments can be made by posting a GitHub [Issue](https://github.com/usdot-jpo-ode/wzdx/issues) or [Discussion](https://github.com/usdot-jpo-ode/wzdx/discussions), while suggested changes can be made using a [Pull Request](https://github.com/usdot-jpo-ode/wzdx/pulls). -1. Read about WZDWG activities [Wiki](https://github.com/usdot-jpo-ode/wzdx/wiki) and the [WZDx Early Adopter's Guide](/documents/WZDx_Early_Adopters_Guide.pdf) +1. Read about WZDWG activities [Wiki](https://github.com/usdot-jpo-ode/wzdx/wiki) and the [WZDx Early Adopter's Guide](/documents/WZDx_Early_Adopters_Guide.pdf). 2. Learn about using GitHub as a [tool for collaboration and support](/create-feed/README.md#collaborate-via-github). -3. Use [Specification Content](/spec-content) page to understand the data components of the specification. -4. [Create your own feed](/create-feed) using example feeds and follow the business rules. +3. Read [Creating a WZDx feed](/Creating_a_WZDx_Feed.md) which contains information about creating a WZDx data feed, such as the feed format, business rules, and validation tools. +4. Use the [Specification Content](/spec-content) page to understand the data components of the specification. 5. Validate your feed output using the respective [JSON Schema](#json-schemas). 6. Publish your feed and tell us about it via avdx@dot.gov. @@ -122,9 +130,9 @@ The WZDx Specification defines a JSON schema for each feed within the [schemas]( - [WZDx v4.0 RoadRestrictionFeed](/schemas/4.0/RoadRestrictionFeed.json) ### Previous Version -- [WZDx v2.0 WZDxFeed](/schemas/wzdx_v2.0_feed.json) -- [WZDx v3.0 WZDxFeed](/schemas/wzdx_v3.0_feed.json) -- [WZDx v3.1 WZDxFeed](/schemas/wzdx_v3.1_feed.json) +- [WZDx v2.0 WZDxFeed](/schemas/2.0/WZDxFeed.json) +- [WZDx v3.0 WZDxFeed](/schemas/3.0/WZDxFeed.json) +- [WZDx v3.1 WZDxFeed](/schemas/3.1/WZDxFeed.json) ## Contributions diff --git a/RELEASES.md b/RELEASES.md index 676a9506..5a5d1434 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,3 +1,82 @@ +# WZDx Specification v4.0 +Released December 2021 + +WZDx version 4.0 implements clean up and small additions in functionality to the WZDx feed and adds definitions for two new feeds, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) and [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md). Until version 4.0, the WZDx specification defined only one feed, the [WZDxFeed](/spec-content/objects/WZDxFeed.md). + +## Features +- Add the following values to the [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) enumerated type: + - `some-lanes-closed-merge-left` + - `some-lanes-closed-merge-right` + - `all-lanes-open-shift-left` + - `all-lanes-open-shift-right` + - `some-lanes-closed-split` + - `flagging` + - `temporary-traffic-signal` +- Allow restrictions with a value and unit to be provided at the road event level; specifically: + - Rename the LaneRestrictionUnit enumerated type to [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md). + - Rename the RoadRestriction enumerated type to [RestrictionType](/spec-content/enumerated-types/RestrictionType.md). + - Rename the LaneRestriction object to [Restriction](/spec-content/objects/Restriction.md) and remove the `lane_restriction_` prefix from its properties. + - Rename the [Restriction](/spec-content/objects/Restriction.md) object `units` property to `unit`. +- Add values `parking` and `median` to the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type. +- Define a new data feed, the [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to enable providing a feed of restrictions on roadways, such as bridge clearances. +- Define a new data feed, the [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md), to enable equipment vendors and manufacturers to provide high-level information about deployed field devices in work zones. A `SwzDeviceFeed` contains a new feature type, the [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md), which contains information about a specific type of field device. The following field devices are defined in WZDx v4.0: + - `ArrowBoard`: An electronic, connected arrow board which can display an arrow pattern to direct traffic. + - `Camera`: A camera device deployed in the field, capable of capturing still images. + - `DynamicMessageSign`: An electronic traffic sign deployed on the roadway, used to provide information to travelers. + - `FlashingBeacon`: A flashing beacon light of any form (e.g. trailer-mounted, vehicle), used to indicate something or capture driver attention. + - `HybridSign`: A hybrid sign that contains static text (e.g. on an aluminum sign) along with a single electronic message display, used to provide information to travelers. + - `LocationMarker`: Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). + - `TrafficSensor`: A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. +- Rename the `workers_present` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object to `worker_presence`; change the type from "boolean" to a new [WorkerPresence](/spec-content/objects/WorkerPresence.md) object which enables providing more nuanced information about worker presence in work zones. + +## Refactoring +- Separate the v3.1 RoadEvent object into [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) (details that are shared by all specific types of road events) and specific types of road events ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), and [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) which each contain the `RoadEventCoreDetails` via a `core_details` property; update the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) `properties` property to be one of the specific road events types. +- Move the `location_method` property from the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object to the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) object. +- Change the `reduced_speed_limit` property on the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) to `reduced_speed_limit_kph`; change its type from "integer" to "number" and clarify that the value should be in kilometers per hour. +- Deprecate the `lane_number` property on the [Lane](/spec-content/objects/Lane.md) object. +- Deprecate the `lrs_type` and `lrs_url` properties on the [FeedDataSource](/spec-content/objects/FeedDataSource.md) object. +- Remove the deprecated value `alternating-one-way` from the [LaneStatus](/spec-content/enumerated-types/LaneStatus.md) enumerated type. +- Remove the following deprecated properties from the road event (RoadEvent in previous versions; [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) and [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) in 4.0): + - `road_event_id` + - `road_number` + - `road_name` + - `total_num_lanes` +- Remove the following deprecated values from the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type: + - `left-lane` + - `right-lane` + - `middle-lane` + - `center-lane` + - `right-shoulder` + - `left-shoulder` + - `right-second-exit-ramp` + - `left-second-exit-ramp` + - `right-entrance-exit-ramp` + - `left-entrance-exit-ramp` + - `hov-lane` + - `alternating-flow-lane` + - `reversible-lane` + - `right-entrance-lane` + - `left-entrance-lane` + - `left-entrance-ramp` + - `right-merging-lane` + - `left-merging-lane` + - `right-second-entrance-ramp` + - `left-second-entrance-ramp` +- Require the `road_names` property on the [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md). +- Require the `id` property on the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md). +- Refine the [LaneType](/spec-content/enumerated-types/LaneType.md) enumerated type; specifically: + - Rename `lane` to `general`. + - Remove `right-turning-lane` and `left-turning-lane`. + - Remove `right-exit-lane` and `left-exit-lane`. + - Add `exit-lane`. + - Remove `right-exit-ramp` and `left-exit-ramp`. + - Add `exit-ramp`. + - Remove `right-entrance-ramp` and `left-exit-ramp`. + - Add `entrance-ramp`. + - Add `entrance-lane`. +- Deprecate the `location_verify_method` property on the [FeedDataSource](/spec-content/objects/FeedDataSource.md). +- Update the [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) enumerated type value descriptions to clarify that verified work zone locations should use a GPS enabled device. + # WZDx Specification v3.1 Released April 2021 diff --git a/examples/README.md b/examples/README.md index 4c162c4b..78ec4e1b 100644 --- a/examples/README.md +++ b/examples/README.md @@ -2,7 +2,7 @@ This directory contains example GeoJSON documents from WZDx data feeds. The examples cover a range of common scenarios. There are examples for the `WZDxFeed`, `RoadRestrictionFeed`, and `SwzDeviceFeed`, contained within the respective subdirectories. ## WZDxFeed Examples -The following `WZDxFeed` examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type. as well as one `MultiPoint` geometry type for scenario 1. +The following `WZDxFeed` examples represent a variety of common scenarios when creating road events. Most of the examples are modeled after work zone scenarios used in [previous WZDx discussion](https://github.com/usdot-jpo-ode/jpo-wzdx/discussions/131). Optional fields are not included in all examples but represented at least once across the various examples. Each scenario is provided as a single GeoJSON file which may contain multiple work zones documenting differences in representing road events at varying levels of complexity. All example scenarios are provided for the `LineString` geometry type as well as one `MultiPoint` geometry type for scenario 1. Below is a summary of each of the example WZDx feeds and detailed differences for each of the road events: @@ -53,13 +53,13 @@ The [local access only example](/examples/WZDxFeed/local_access_only_bidirection The following example `SwzDeviceFeed`s are provided: 1. [Arrow Board "ok" Example](/examples/SwzDeviceFeed/arrow_board_ok_example.geojson): A simple feed that includes a single arrow board with an `ok` status and several optional properties provided. -2. [Camera "error" Example](/examples/SwzDeviceFeed/camera_error_example): A simple feed that includes a single camera with an `error` status, no image data, associated `status_messages`, and a few optional properties provided. +2. [Camera "error" Example](/examples/SwzDeviceFeed/camera_error_example.geojson): A simple feed that includes a single camera with an `error` status, no image data, associated `status_messages`, and a few optional properties provided. ## RoadRestrictionFeed Examples The following example `RoadrestrictionFeed`s are provided: ### 1. Bridge Height Restriction -The [Bridge Height Restriction Example](/examples/RoadRestrictionFeed/bridge_restriction_linestring_example.geojson) shows the use of a [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to define a bridge clearance on a roadway. +The [Bridge Height Restriction Example](/examples/RoadRestrictionFeed/bridge_height_restriction_linestring_example.geojson) shows the use of a [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) to define a bridge clearance on a roadway. - Defines three bridge height restrictions. - Two restrictions (`id`s: `Bridge2`, `Bridge3`) are defined using only the required core details and basic event-level information. diff --git a/examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson b/examples/WZDxFeed/scenario3_shoulder_bidirectional_linestring_example.geojson similarity index 100% rename from examples/WZDxFeed/scenario3_shoulder_bidrectional_linestring_example.geojson rename to examples/WZDxFeed/scenario3_shoulder_bidirectional_linestring_example.geojson diff --git a/schemas/wzdx_v2.0_feed.json b/schemas/2.0/WZDxFeed.json similarity index 99% rename from schemas/wzdx_v2.0_feed.json rename to schemas/2.0/WZDxFeed.json index 08ce7176..bd627244 100644 --- a/schemas/wzdx_v2.0_feed.json +++ b/schemas/2.0/WZDxFeed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v2.0_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/2.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v2.0 Feed", "description": "The GeoJSON output of a WZDx v2.0 data feed", diff --git a/schemas/wzdx_v3.0_feed.json b/schemas/3.0/WZDxFeed.json similarity index 99% rename from schemas/wzdx_v3.0_feed.json rename to schemas/3.0/WZDxFeed.json index 9c8ab968..e6b9fd5c 100644 --- a/schemas/wzdx_v3.0_feed.json +++ b/schemas/3.0/WZDxFeed.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v3.0_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/3.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.0 Feed", "description": "The GeoJSON output of a WZDx v3.0 data feed", diff --git a/schemas/wzdx_v3.1_feed.json b/schemas/3.1/WZDxFeed.json similarity index 99% rename from schemas/wzdx_v3.1_feed.json rename to schemas/3.1/WZDxFeed.json index 502b9a3c..612e6d4d 100644 --- a/schemas/wzdx_v3.1_feed.json +++ b/schemas/3.1/WZDxFeed.json @@ -1,6 +1,6 @@ { - "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/wzdx_v3.1_feed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/3.1/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v3.1 Feed", "description": "The GeoJSON output of a WZDx v3.1 data feed", diff --git a/schemas/4.0/BoundingBox.json b/schemas/4.0/BoundingBox.json index ec2e0372..e35ed926 100644 --- a/schemas/4.0/BoundingBox.json +++ b/schemas/4.0/BoundingBox.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "GeoJSON Bounding Box", "description": "Information on the coordinate range for a Geometry, Feature, or FeatureCollection", diff --git a/schemas/4.0/FeedInfo.json b/schemas/4.0/FeedInfo.json index f874b4ed..ae3e6eeb 100644 --- a/schemas/4.0/FeedInfo.json +++ b/schemas/4.0/FeedInfo.json @@ -1,5 +1,5 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx Feed Information", "description": "Describes WZDx feed header information such as metadata, contact information, and data sources", diff --git a/schemas/4.0/RoadEventFeature.json b/schemas/4.0/RoadEventFeature.json index 00b96e24..d17a7670 100644 --- a/schemas/4.0/RoadEventFeature.json +++ b/schemas/4.0/RoadEventFeature.json @@ -1,6 +1,6 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadEventFeature.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "Road Event Feature (GeoJSON Feature)", "description": "The container object for a specific WZDx road event; an instance of a GeoJSON Feature", @@ -45,7 +45,7 @@ ] }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"], @@ -462,14 +462,14 @@ "type": "object", "properties": { "are_workers_present": { - "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘worker_presence_definition’ property on the RoadEventDataSource object", + "description": "Whether workers are present in the work zone event area, following the definition provided in the ‘definition’ property on the WorkerPresence object", "type": "boolean" }, "method": { "$ref": "#/definitions/WorkerPresenceMethod" }, "worker_presence_last_confirmed_date": { - "description": "Datetime at which the presence of workers was last confirmed using the 'source'", + "description": "The UTC date and time at which the presence of workers was last confirmed", "type": "string", "format": "date-time" }, diff --git a/schemas/4.0/RoadRestrictionFeed.json b/schemas/4.0/RoadRestrictionFeed.json index 2f1edcf8..a01b98d5 100644 --- a/schemas/4.0/RoadRestrictionFeed.json +++ b/schemas/4.0/RoadRestrictionFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadRestrictionFeed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadRestrictionFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 Road Restriction Feed", "description": "The GeoJSON output of a WZDx road restriction data feed (v4.0)", "type": "object", "properties": { "feed_info": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -38,13 +38,13 @@ "required": ["properties"] }, { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadEventFeature.json" } ] } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": [ diff --git a/schemas/4.0/SwzDeviceFeed.json b/schemas/4.0/SwzDeviceFeed.json index d53766a5..86e07084 100644 --- a/schemas/4.0/SwzDeviceFeed.json +++ b/schemas/4.0/SwzDeviceFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/SwzDeviceFeed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/SwzDeviceFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 SwzDeviceFeed", "description": "The GeoJSON output of a WZDx smart work zone device data feed (v4.0)", "type": "object", "properties": { "feed_info": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -20,7 +20,7 @@ } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": ["feed_info", "type", "features"], @@ -78,7 +78,7 @@ ] }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": ["id","type","properties","geometry"] diff --git a/schemas/4.0/WZDxFeed.json b/schemas/4.0/WZDxFeed.json index 9b8e00a2..bdd2c8ad 100644 --- a/schemas/4.0/WZDxFeed.json +++ b/schemas/4.0/WZDxFeed.json @@ -1,12 +1,12 @@ { - "$id": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/WZDxFeed.json", + "$id": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/WZDxFeed.json", "$schema": "http://json-schema.org/draft-07/schema#", "title": "WZDx v4.0 WZDxFeed", "description": "The GeoJSON output of a WZDx feed data feed (v4.0)", "type": "object", "properties": { "road_event_feed_info": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/FeedInfo.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/FeedInfo.json" }, "type": { "description": "The GeoJSON type", @@ -36,13 +36,13 @@ "required": ["properties"] }, { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/RoadEventFeature.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/RoadEventFeature.json" } ] } }, "bbox": { - "$ref": "https://raw.githubusercontent.com/DeraldDudley/wzdx/RestrictionEvent/schemas/4.0/BoundingBox.json" + "$ref": "https://raw.githubusercontent.com/usdot-jpo-ode/wzdx/main/schemas/4.0/BoundingBox.json" } }, "required": ["road_event_feed_info", "type", "features"] diff --git a/spec-content/README.md b/spec-content/README.md index f6e7d085..30052341 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -46,8 +46,7 @@ Object | Description [Restriction](/spec-content/objects/Restriction.md) | A restriction on a road event or lane, including type and value. [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) | Describes a section of roadway and the limitations of how that section can be used. [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | The core details of an event occurring on a roadway (i.e. a road event) that is shared by all types of road events. -[RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) | Information about a specific data source used to build a work zone data feed. -[RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx `RoadEvent`. +[RoadEventFeature](/spec-content/objects/RoadEventFeature.md) | The GeoJSON `Feature` container object for a WZDx road event. [TypeOfWork](/spec-content/objects/TypeOfWork.md) | A description of the type of work being done in a road event and an indication of if that work will result in an architectural change to the roadway. [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about the presence of workers in the road event area. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) | A work zone road event including where, when, and what activities are taking place within a work zone on a roadway. @@ -65,10 +64,10 @@ Object | Description [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) | The core details—both configuration and current state—of a field device that are shared by all types of field devices. [HybridSign](/spec-content/objects/HybridSign.md) | A hybrid sign that contains static text (e.g. on an alumium sign) along with a single electronic message display, used to provide information to travelers. [LocationMarker](/spec-content/objects/LocationMarker.md) | Describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). -[MarkedLocation](/spec-contentobjects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. +[MarkedLocation](/spec-content/objects/MarkedLocation.md) | Describes a specific location where a [LocationMarker](/spec-content/objects/LocationMarker.md) is placed, such as the start or end of a work zone road event. [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) | The root (highest-level) object of smart work zone device feed GeoJSON document. [TrafficSensor](/spec-content/objects/TrafficSensor.md) | A traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. -[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. +[TrafficSensorLaneData](/spec-content/objects/TrafficSensorLaneData.md) | Data for a single lane within a road event (e.g. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. ### Object Diagrams The object diagrams below depict the relationship between the data objects for each WZDx feed. @@ -110,7 +109,7 @@ Enumerated Type | Description [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate a date-time is. [UnitOfMeasurement](/spec-content/enumerated-types/UnitOfMeasurement.md) | Unit of measurement (e.g. "pounds", "centimeters"). [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. -[WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | High-level description of the feed publisher's confidence in worker presence +[WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | High-level description of the feed publisher's confidence in worker presence. [WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md) | Method of knowing the presence of workers in the road event area. [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Methods for how worker presence in a work zone event area is determined. [WorkTypeName](/spec-content/enumerated-types/WorkTypeName.md) | A high-level text description of the type of work being done in a road event. diff --git a/spec-content/enumerated-types/SpatialVerification.md b/spec-content/enumerated-types/SpatialVerification.md index e39214eb..02a2763a 100644 --- a/spec-content/enumerated-types/SpatialVerification.md +++ b/spec-content/enumerated-types/SpatialVerification.md @@ -5,7 +5,7 @@ An indication of how a geographical coordinate was defined. Value | Description --- | --- `estimated` | Estimated location for the work zone road event geometry. An estimated measurement is based on an approximation of the reported location of a work zone. Approximations of the location can include but are not limited to a point relative to a posted mile maker or cross street, selecting a point on a map, or locations based on project plans. -`verified` | Verified locations for the work zone road event geometry representing the actual extents of the work zone. A verified measurement is based on actual reported data from a GPS equipped device showing the measured location of the work zone. Ths actual location is measured using a GPS device that provides the verified location of the identified location. +`verified` | Verified locations for the work zone road event geometry representing the actual extents of the work zone. A verified measurement is based on actual reported data from a GPS equipped device showing the measured location of the work zone. ## Used By Property | Object diff --git a/spec-content/enumerated-types/WorkerPresenceDefinition.md b/spec-content/enumerated-types/WorkerPresenceDefinition.md index d2935916..f44a0bfb 100644 --- a/spec-content/enumerated-types/WorkerPresenceDefinition.md +++ b/spec-content/enumerated-types/WorkerPresenceDefinition.md @@ -15,4 +15,4 @@ Value | Description ## Used By Property | Object --- | --- -`worker_presence_definition` | [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) +`definition` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) diff --git a/spec-content/enumerated-types/WorkerPresenceMethod.md b/spec-content/enumerated-types/WorkerPresenceMethod.md index 67e8f5b7..28932deb 100644 --- a/spec-content/enumerated-types/WorkerPresenceMethod.md +++ b/spec-content/enumerated-types/WorkerPresenceMethod.md @@ -6,7 +6,7 @@ Value | Description --- | --- `camera-monitoring` | Cameras in the work zone event area show workers are present. `arrow-board-present` | A GPS-enabled arrow board is located in the work zone event area and broadcasting its location, implying that workers are present. -`cones-present` | GPS-enabled cones are located in the road event event area, implying that workers are present. +`cones-present` | GPS-enabled cones are located in the road event area, implying that workers are present. `maintenance-vehicle-present` | A GPS-enabled maintenance vehicle is located in the road event area, implying that workers are present. `wearables-present` | Workers wearing wearable detection equipment are present in the work zone. `mobile-device-present` | Workers with GPS-enabled mobile device tracking are present in the work zone. @@ -17,4 +17,4 @@ Value | Description ## Used By Property | Object --- | --- -`source` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) +`method` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) diff --git a/spec-content/objects/FeedDataSource.md b/spec-content/objects/FeedDataSource.md index 8e8fd28e..41568452 100644 --- a/spec-content/objects/FeedDataSource.md +++ b/spec-content/objects/FeedDataSource.md @@ -4,7 +4,7 @@ The `FeedDataSource` object describes information about a specific data source u ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`data_source_id` | String | Unique identifier for the data source organization providing work zone data. | Required | Linked to a road event by the `data_source_id` property on the road event's [core details](/spec-content/objects/RoadEventCoreDetails.md) or or a field device by the `data_source_id` property on the device's [core details](/spec-content/objects/FieldDeviceCoreDetails.md). +`data_source_id` | String | Unique identifier for the data source organization providing work zone data. | Required | Linked to a road event by the `data_source_id` property on the road event's [core details](/spec-content/objects/RoadEventCoreDetails.md) or a field device by the `data_source_id` property on the device's [core details](/spec-content/objects/FieldDeviceCoreDetails.md). `organization_name` | String | The name of the organization for the authoritative source of the work zone data. | Required | Example: County DOT `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time when the data source was last updated. | Optional | All date-time formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z` `update_frequency` | Integer | The frequency in seconds at which the data source is updated. | Optional | diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index 590c5995..5f715f64 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -1,5 +1,5 @@ # FieldDeviceFeature Object -The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the RoadEvent object via the `properties` property. +The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the road event object ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) via the `properties` property. Currently, only point devices are supported. @@ -15,4 +15,4 @@ Name | Type | Description | Conformance | Notes ## Used By Property | Object --- | --- -`features` | [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) \ No newline at end of file +`features` | [SwzDeviceFeed](/spec-content/objects/SwzDeviceFeed.md) diff --git a/spec-content/objects/LocationMarker.md b/spec-content/objects/LocationMarker.md index a7733934..df0d8090 100644 --- a/spec-content/objects/LocationMarker.md +++ b/spec-content/objects/LocationMarker.md @@ -1,5 +1,5 @@ # LocationMarker Object -The `LocationMarker` object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The `LocationMarker` contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.md) objects which indicate the type of location (such as the start or end) and optionally the ID of a [RoadEvent](/spec-content/objects/RoadEvent.md) that the location is associated with. +The `LocationMarker` object describes any GPS-enabled ITS device that is placed at a point on a roadway to dynamically know the location of something (often the beginning or end of a work zone). The `LocationMarker` contains a list of one or more [MarkedLocation](/spec-content/objects/MarkedLocation.md) objects which indicate the type of location (such as the start or end) and optionally the ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) that the location is associated with. The `LocationMarker` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). diff --git a/spec-content/objects/RestrictionRoadEvent.md b/spec-content/objects/RestrictionRoadEvent.md index 43f6ba05..cccb2b1c 100644 --- a/spec-content/objects/RestrictionRoadEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -10,7 +10,7 @@ Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | Describes the basic characterisitics of a Road Event. | Required | `restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Conditional: required if `lanes` property is not provided. | Restrictions can also be provided on an individual lane. -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Conditional: required if `restrictions` property is not provided. | +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment). | Conditional: required if `restrictions` property is not provided. | ## Used By Property | Object diff --git a/spec-content/objects/RoadEvent.md b/spec-content/objects/RoadEvent.md deleted file mode 100644 index 9cf2a545..00000000 --- a/spec-content/objects/RoadEvent.md +++ /dev/null @@ -1,39 +0,0 @@ -# RoadEvent Object -The `RoadEvent` object contains information that describes where, when, and what activity is taking place along a road segment. This specification currently accommodates `work-zone` and `detour` type road events, specified by the road event's `event_type` property (see [EventType](/spec-content/enumerated-types/EventType.md])). - -## Properties -Name | Type | Description | Conformance | Notes ---- | --- | --- | --- | --- -`event_type` | [EventType](/spec-content/enumerated-types/EventType.md) | The type/classification of road event. | Required | -`data_source_id` | String | Identifies the data source from which the road event originates. | Required | The value must match to the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) included within the same WZDx GeoJSON document. -`start_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event begins. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`end_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the event ends. | Required | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`start_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the start Date Time is. | Required | -`end_date_accuracy` | [TimeVerification](/spec-content/enumerated-types/TimeVerification.md) | A measure of how accurate the end Date Time is. | Required | -`beginning_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the beginning coordinate was defined. | Required | -`ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | -`road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | -`direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) -`vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | -`relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | -`beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | -`ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | -`beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. -`ending_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event ends. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. -`event_status` | [EventStatus](/spec-content/enumerated-types/EventStatus.md) | The status of the event. | Optional | -`types_of_work` | Array; \[[TypeOfWork](/spec-content/objects/TypeOfWork.md)\] | A list of the types of work being done in a road event and an indiciation of if each type results in an architectural change to the roadway. | Optional | -`worker_presence` | [WorkerPresence](/spec-content/objects/WorkerPresence.md) | Information about whether workers are present in the road event area. | Optional | -`reduced_speed_limit_kph` | Integer | The reduced speed limit posted within the road event, in kilometers per hour. This property only needs to be supplied if the speed limit within the road event is lower than the posted speed limit of the roadway. | Optional | -`restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Optional | Restrictions can also be provided on an individual lane. -`description` | String | Short free text description of work zone. | Optional | This will be populated with formal phrases in a later WZDx version -`creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. -`update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. - -## Used By -Property | Object ---- | --- -`properties` | [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) - -## Important Notes -The value of the `RoadEvent`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) that is included in the same WZDx GeoJSON document. diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index 703d0adc..25536ff4 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -1,5 +1,5 @@ # RoadEventCoreDetails Object -The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a "road event") that is shared by all types of road events, such as work zones (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) and detours (see [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)). The `RoadEventCoreDetails` cannot exist directly in a data feed and on it's own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each which is represented by its own object. +The `RoadEventCoreDetails` object represents the core details of an event occurring on a roadway (i.e. a "road event") that is shared by all types of road events, such as work zones (see [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)), detours (see [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md)), and road restrictions (see [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). The `RoadEventCoreDetails` cannot exist directly in a data feed and on its own does not represent a road event. It is used as the value of `core_details` property on every specific type of road event, each of which is represented by its own object. ## Properties Name | Type | Description | Conformance | Notes @@ -18,8 +18,7 @@ Property | Object --- | --- `core_details` | [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md) `core_details` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) +`core_details` | [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md) ## Important Notes -The value of the `RoadEventCoreDetails`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [RoadEventDataSource](/spec-content/objects/RoadEventDataSource.md) that is included in the same WZDx GeoJSON document. - - +The value of the `RoadEventCoreDetails`'s `data_source_id` property MUST match the value of the `data_source_id` property of a [FeedDataSource](/spec-content/objects/FeedDataSource.md) that is included in the same WZDx GeoJSON document. diff --git a/spec-content/objects/RoadEventFeature.md b/spec-content/objects/RoadEventFeature.md index c016535d..d024296e 100644 --- a/spec-content/objects/RoadEventFeature.md +++ b/spec-content/objects/RoadEventFeature.md @@ -1,5 +1,5 @@ # RoadEventFeature Object (GeoJSON Feature) -The `RoadEventFeature` object is the container object for a WZDx [RoadEvent](/spec-content/objects/RoadEvent.md). The `RoadEventFeature` object is an instance of a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2). +The `RoadEventFeature` object is the container object for a WZDx road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md). The `RoadEventFeature` object is an instance of a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2). ## Properties Name | Type | Description | Conformance | Notes @@ -14,4 +14,4 @@ Name | Type | Description | Conformance | Notes Property | Object --- | --- `features` | [WZDx Feed](/spec-content/objects/WZDxFeed.md) -`features` | [RoadRestrictionFeed](spec-content/objects/RoadRestrictionFeed.md) +`features` | [RoadRestrictionFeed](/spec-content/objects/RoadRestrictionFeed.md) diff --git a/spec-content/objects/RoadRestrictionFeed.md b/spec-content/objects/RoadRestrictionFeed.md index 0905b0e0..c5d7e1b8 100644 --- a/spec-content/objects/RoadRestrictionFeed.md +++ b/spec-content/objects/RoadRestrictionFeed.md @@ -1,10 +1,12 @@ # RoadRestrictionFeed Object (GeoJSON FeatureCollection) The `RoadRestrictionFeed` object is the root (highest level) object of a WZDx road restriction feed. There is one `RoadRestrictionFeed` object per road restriction feed GeoJSON document. The `RoadRestrictionFeed` is a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3). +The `RoadRestrictionFeed` contains information about sections of roadways that have restrictions. Restriction types described by this specification are listed in the [RestrictionType](/spec-content/enumerated-types/RestrictionType.md) enumerated type. + ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`feed_info` | [RoadEventFeedInfo](/spec-content/objects/RoadEventFeedInfo.md) | Information about the WZDx road restriction feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. +`feed_info` | [FeedInfo](/spec-content/objects/FeedInfo.md) | Information about the WZDx road restriction feed. | Required | This is a WZDx-specific [foreign member](https://tools.ietf.org/html/rfc7946#section-6.1) and is not part of the GeoJSON specification. `type` | String; `"FeatureCollection"` | The GeoJSON object type. For WZDx, this must be the string `FeatureCollection`. | Required | This is a GeoJSON property. `features` | Array; \[[RoadEventFeature](/spec-content/objects/RoadEventFeature.md)\] | An array of GeoJSON [Feature](https://tools.ietf.org/html/rfc7946#section-3.2) objects which represent WZDx road events. | Required | `bbox` | GeoJSON [Bounding Box](https://tools.ietf.org/html/rfc7946#section-5) | Information on the coordinate range for all RoadEventFeatures in the WZDx feed. Must be an array of length 2*n where n is the number of dimensions represented in the contained geometries, with all axes of the most southwesterly point followed by all axes of the more northeasterly point. The axes order of a bbox follows the axes order of geometries. | Optional | This is a GeoJSON property. diff --git a/spec-content/objects/SwzDeviceFeed.md b/spec-content/objects/SwzDeviceFeed.md index 33387384..f62618c6 100644 --- a/spec-content/objects/SwzDeviceFeed.md +++ b/spec-content/objects/SwzDeviceFeed.md @@ -1,6 +1,8 @@ # SwzDeviceFeed Object (GeoJSON FeatureCollection) The `SwzDeviceFeed` object is the root (highest level) object of a smart work zone device feed. There is one `SwzDeviceFeed` object per feed GeoJSON document. The `SwzDeviceFeed` is a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. +The `SwzDeviceFeed` contains information (location, status, live data) about field devices deployed on the roadway in work zones. + ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md index 95b88854..82897a4e 100644 --- a/spec-content/objects/TrafficSensor.md +++ b/spec-content/objects/TrafficSensor.md @@ -1,5 +1,5 @@ # TrafficSensor Object -The `TrafficSensor` object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The `TrafficSensor` can describe lane-level traffic data if available and if associated with a [RoadEvent](/spec-content/objects/RoadEvent.md). +The `TrafficSensor` object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The `TrafficSensor` can describe lane-level traffic data if available and if associated with a road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). The `TrafficSensor` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). diff --git a/spec-content/objects/TrafficSensorLaneData.md b/spec-content/objects/TrafficSensorLaneData.md index 96516334..58a4942e 100644 --- a/spec-content/objects/TrafficSensorLaneData.md +++ b/spec-content/objects/TrafficSensorLaneData.md @@ -1,13 +1,13 @@ # TrafficSensorLaneData Object -The TrafficSensorLaneData object describes data for a single lane within a [RoadEvent](/spec-content/objects/RoadEvent.md) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. +The `TrafficSensorLaneData` object describes data for a single lane within a road event (e.g. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)) measured by a [TrafficSensor](/spec-content/objects/TrafficSensor.md) deployed on the roadway. -Note this structure allows a single TrafficSensor to provide data across lanes on multiple road events. It does not allow for lane data to be provided when a road event is not known. +Note this structure allows a single [TrafficSensor](/spec-content/objects/TrafficSensor.md) to provide data across lanes on multiple road events. It does not allow for lane data to be provided when a road event is not known. ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- `road_event_id` | String | The ID of a [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) which the measured lane occurs in. | Required | -`lane_order` | Positive Integer | The lane's position in sequence within the road event (specified by `road_event_id`). The value of this property corresponds to the associated [RoadEvent](/spec-content/objects/RoadEvent.md)'s [Lane](/spec-content/objects/Lane.md)'s `order` property. | Required | +`lane_order` | Positive Integer | The lane's position in sequence within the road event (specified by `road_event_id`). The value of this property corresponds to the associated road event's [Lane](/spec-content/objects/Lane.md)'s `order` property. | Required | `average_speed_kph` | Integer (>= 0) | The average speed of traffic in the lane over the collection interval (in kilometers per hour). | Optional | `volume_vph` | Integer (>= 0) | The rate of vehicles passing by the sensor in the lane during the collection interval (in vehicles per hour). | Optional | `occupancy_percent` | Integer (>= 0) | The percent of time the lane monitored by the sensor was occupied by a vehicle over the collection interval. | Optional | diff --git a/spec-content/objects/WZDxFeed.md b/spec-content/objects/WZDxFeed.md index 7b61071e..7b06cb37 100644 --- a/spec-content/objects/WZDxFeed.md +++ b/spec-content/objects/WZDxFeed.md @@ -1,6 +1,8 @@ # WZDxFeed Object (GeoJSON FeatureCollection) The `WZDxFeed` object is the root (highest level) object of a WZDx feed. There is one WZDx feed object per WZDx GeoJSON document. The `WZDxFeed` is an instance of a [GeoJSON FeatureCollection](https://tools.ietf.org/html/rfc7946#section-3.3) object. +The `WZDxFeed` contains high-level information about events ocurring on roadways (called "road events"), primarily work zones, that impact the characteristics of the roadway and involve a change from the default state (such as a lane closure). The `WZDxFeed` is the original work zone data exchange feed. + ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- diff --git a/spec-content/objects/WorkZoneRoadEvent.md b/spec-content/objects/WorkZoneRoadEvent.md index c7caecdc..6584765d 100644 --- a/spec-content/objects/WorkZoneRoadEvent.md +++ b/spec-content/objects/WorkZoneRoadEvent.md @@ -15,7 +15,7 @@ Name | Type | Description | Conformance | Notes `ending_accuracy` | [SpatialVerification](/spec-content/enumerated-types/SpatialVerification.md) | Indicates how the ending coordinate was defined. | Required | `location_method` | [LocationMethod](/spec-content/enumerated-types/LocationMethod.md) | The typical method used to locate the beginning and end of a work zone impact area. | Required | `vehicle_impact` | [VehicleImpact](/spec-content/enumerated-types/VehicleImpact.md) | The impact to vehicular lanes along a single road in a single direction. | Required | -`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment) | Optional | +`lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment). | Optional | `beginning_cross_street` | String | Name or number of the nearest cross street along the roadway where the event begins. | Optional | `ending_cross_street` | String | Name or number of the nearest cross street along the roadway where the event ends. | Optional | `beginning_milepost` | Number | The linear distance measured against a milepost marker along a roadway where the event begins. | Optional | A milepost or mile marker is a surveyed distance posted along a roadway measuring the length (in miles or tenth of a mile) from the south west to the north east. These markers are typically notated on State and local government digital road networks. diff --git a/spec-content/objects/WorkerPresence.md b/spec-content/objects/WorkerPresence.md index 9b183e41..06dfa791 100644 --- a/spec-content/objects/WorkerPresence.md +++ b/spec-content/objects/WorkerPresence.md @@ -1,5 +1,5 @@ -# Worker Presence Object -The `WorkerPresence` object contains information on the presence of workers in the `RoadEvent`'s area. +# WorkerPresence Object +The `WorkerPresence` object contains information on the presence of workers in the [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)'s area. ## Properties Name | Type | Description | Conformance | Notes @@ -7,10 +7,10 @@ Name | Type | Description | Conformance | Notes `are_workers_present` | Boolean | Whether workers are present in the work zone event area. This value should be set in accordance with the definition provided in the `definition` property if it is provided. | Required | `definition` | Array; \[[WorkerPresenceDefinition](/spec-content/enumerated-types/WorkerPresenceDefinition.md)\] | A list of situations in which workers are considered to be present in the jurisdiction of the data provider. | Optional `method` | [WorkerPresenceMethod](/spec-content/enumerated-types/WorkerPresenceMethod.md) | Describes the method for how worker presence in a work zone event area is determined. | Optional | -`worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | Date and time at which the presence of workers was last confirmed. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). +`worker_presence_last_confirmed_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC date and time at which the presence of workers was last confirmed. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). `confidence` | [WorkerPresenceConfidence](/spec-content/enumerated-types/WorkerPresenceConfidence.md) | The data producer’s confidence in the value of `are_workers_present`. | Optional | ## Used By Property | Object --- | --- -`worker_presence` | [RoadEvent](/spec-content/objects/RoadEvent.md) +`worker_presence` | [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) From d6700662a914e3465bbbf88e79e68b476ca63f56 Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Wed, 15 Dec 2021 14:41:38 -0500 Subject: [PATCH 383/388] Generalize 'description' beyond work zones --- spec-content/objects/RoadEventCoreDetails.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RoadEventCoreDetails.md b/spec-content/objects/RoadEventCoreDetails.md index 25536ff4..9b9d1259 100644 --- a/spec-content/objects/RoadEventCoreDetails.md +++ b/spec-content/objects/RoadEventCoreDetails.md @@ -9,7 +9,7 @@ Name | Type | Description | Conformance | Notes `road_names` | Array; [String] | A list of publicly known names of the road on which the event occurs. This may include the road number designated by a jurisdiction such as a county, state or interstate (e.g. I-5, VT 133). | Required | `direction` | [Direction](/spec-content/enumerated-types/Direction.md) | The digitization direction of the road that is impacted by the event. This value is based on the standard naming for US roadways and indicates the direction of the traffic flow regardless of the real heading angle. | Required | Example `northbound` (for I-5 North) `relationship` | [Relationship](/spec-content/objects/Relationship.md) | Identifies both sequential and hierarchical relationships between the road events and other entities. For example, a relationship can be used to link multiple road events to a common 'parent', such as a project or phase, or identify a sequence of road events | Optional | -`description` | String | Short free text description of work zone. | Optional | +`description` | String | Short free text description of road event. | Optional | `creation_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was created. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. `update_date` | String; [date-time](https://tools.ietf.org/html/draft-handrews-json-schema-validation-01#section-7.3.1) | The UTC time and date when the activity or event was updated. | Optional | All datetime formats shall follow [RFC 3339 Section 5.6](https://tools.ietf.org/html/rfc3339#section-5.6). Example: `2016-11-03T19:37:00Z`. From d3096dd27b9d65b60e5bf1cf345ebe90846e58a6 Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Wed, 15 Dec 2021 16:45:43 -0500 Subject: [PATCH 384/388] Un-capitalize road event in Restriction Road Event --- spec-content/objects/RestrictionRoadEvent.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/RestrictionRoadEvent.md b/spec-content/objects/RestrictionRoadEvent.md index cccb2b1c..82bd3f11 100644 --- a/spec-content/objects/RestrictionRoadEvent.md +++ b/spec-content/objects/RestrictionRoadEvent.md @@ -8,7 +8,7 @@ For representing restrictions due to road work, see the [WorkZoneRoadEvent](/spe ## Properties Name | Type | Description | Conformance | Notes --- | --- | --- | --- | --- -`core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | Describes the basic characterisitics of a Road Event. | Required | +`core_details` | [RoadEventCoreDetails](/spec-content/objects/RoadEventCoreDetails.md) | Describes the basic characterisitics of a road event. | Required | `restrictions` | Array; [[Restriction](/spec-content/objects/Restriction.md)] | A list of zero or more road restrictions that apply to the roadway segment described by this road event. | Conditional: required if `lanes` property is not provided. | Restrictions can also be provided on an individual lane. `lanes` | Array; \[[Lane](/spec-content/objects/Lane.md)\] | A list of individual lanes within a road event (roadway segment). | Conditional: required if `restrictions` property is not provided. | From 726c099ce5a90b0ecfbaab5e9f6e1985e6440a1c Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 16:48:24 -0500 Subject: [PATCH 385/388] Update TrafficSensor road event reference for consistency --- spec-content/objects/TrafficSensor.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/TrafficSensor.md b/spec-content/objects/TrafficSensor.md index 82897a4e..f20e3a60 100644 --- a/spec-content/objects/TrafficSensor.md +++ b/spec-content/objects/TrafficSensor.md @@ -1,5 +1,5 @@ # TrafficSensor Object -The `TrafficSensor` object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The `TrafficSensor` can describe lane-level traffic data if available and if associated with a road event ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)). +The `TrafficSensor` object describes a traffic sensor deployed on a roadway which captures traffic metrics (e.g. speed, volume, occupancy) over a collection interval. The `TrafficSensor` can describe lane-level traffic data if available and if associated with a road event (e.g. [WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md)). The `TrafficSensor` is a type of field device; it has a `core_details` property which contains the [FieldDeviceCoreDetails](/spec-content/objects/FieldDeviceCoreDetails.md) and exists within a [FieldDeviceFeature](/spec-content/objects/FieldDeviceFeature.md). From a112290a73e71d260bfd4673f7988e339829ec9a Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Wed, 15 Dec 2021 16:54:10 -0500 Subject: [PATCH 386/388] Clarify reference to road event types in a WZDx Feed --- spec-content/objects/FieldDeviceFeature.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec-content/objects/FieldDeviceFeature.md b/spec-content/objects/FieldDeviceFeature.md index 5f715f64..d588e284 100644 --- a/spec-content/objects/FieldDeviceFeature.md +++ b/spec-content/objects/FieldDeviceFeature.md @@ -1,5 +1,5 @@ # FieldDeviceFeature Object -The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the road event object ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md), [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md), or [RestrictionRoadEvent](/spec-content/objects/RestrictionRoadEvent.md)) via the `properties` property. +The `FieldDeviceFeature` object is a [GeoJSON Feature](https://tools.ietf.org/html/rfc7946#section-3.2) representing a deployed field device. This object contains the specific details of the field device, similar to how the [RoadEventFeature](/spec-content/objects/RoadEventFeature.md) object in a WZDx Feed contains the road event object ([WorkZoneRoadEvent](/spec-content/objects/WorkZoneRoadEvent.md) or [DetourRoadEvent](/spec-content/objects/DetourRoadEvent.md). Currently, only point devices are supported. From efbf06f441550362ced986c1d3b7ec0f0370eda0 Mon Sep 17 00:00:00 2001 From: Jacob Brady Date: Wed, 15 Dec 2021 17:44:02 -0500 Subject: [PATCH 387/388] Remove outdated object diagram --- spec-content/README.md | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/spec-content/README.md b/spec-content/README.md index 30052341..738f4ca5 100644 --- a/spec-content/README.md +++ b/spec-content/README.md @@ -72,16 +72,6 @@ Object | Description ### Object Diagrams The object diagrams below depict the relationship between the data objects for each WZDx feed. -#### WZDxFeed - -![Object Diagram](/images/wzdx_object_diagram.jpg) - -#### RoadRestrictionFeed - -[TBD] - -#### SwzDeviceFeed - [TBD] #### Updating the object diagram From a98da6ba8dbf5e0d1b2ec2b8110ad475a3d3d9b8 Mon Sep 17 00:00:00 2001 From: Mark Mockett Date: Wed, 15 Dec 2021 17:47:37 -0500 Subject: [PATCH 388/388] Unify enumerated type file titles --- spec-content/enumerated-types/EventStatus.md | 2 +- spec-content/enumerated-types/EventType.md | 2 +- spec-content/enumerated-types/LaneStatus.md | 2 +- spec-content/enumerated-types/LaneType.md | 2 +- spec-content/enumerated-types/LocationMethod.md | 2 +- spec-content/enumerated-types/RestrictionType.md | 2 +- spec-content/enumerated-types/SpatialVerification.md | 2 +- spec-content/enumerated-types/TimeVerification.md | 2 +- spec-content/enumerated-types/UnitOfMeasurement.md | 2 +- spec-content/enumerated-types/VehicleImpact.md | 2 +- spec-content/enumerated-types/WorkTypeName.md | 2 +- spec-content/enumerated-types/WorkerPresenceConfidence.md | 2 +- spec-content/enumerated-types/WorkerPresenceDefinition.md | 2 +- spec-content/enumerated-types/WorkerPresenceMethod.md | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/spec-content/enumerated-types/EventStatus.md b/spec-content/enumerated-types/EventStatus.md index 26c92ebf..d4f83bf4 100644 --- a/spec-content/enumerated-types/EventStatus.md +++ b/spec-content/enumerated-types/EventStatus.md @@ -1,4 +1,4 @@ -# Work Zone Event Status +# EventStatus Enumerated Type The status of a road event. ## Values diff --git a/spec-content/enumerated-types/EventType.md b/spec-content/enumerated-types/EventType.md index c5831f5d..27a093cf 100644 --- a/spec-content/enumerated-types/EventType.md +++ b/spec-content/enumerated-types/EventType.md @@ -1,4 +1,4 @@ -# Event Type +# EventType Enumerated Type The type of a WZDx road event. ## Values diff --git a/spec-content/enumerated-types/LaneStatus.md b/spec-content/enumerated-types/LaneStatus.md index 21611c13..5a5806fd 100644 --- a/spec-content/enumerated-types/LaneStatus.md +++ b/spec-content/enumerated-types/LaneStatus.md @@ -1,4 +1,4 @@ -# Lane Status +# LaneStatus Enumerated Type The status of a lane for the traveling public. ## Values diff --git a/spec-content/enumerated-types/LaneType.md b/spec-content/enumerated-types/LaneType.md index 41e5df7a..32069ae8 100644 --- a/spec-content/enumerated-types/LaneType.md +++ b/spec-content/enumerated-types/LaneType.md @@ -1,4 +1,4 @@ -# Lane Type +# LaneType Enumerated Type A description of the static properties of a section of the roadway, intended to reflect information about its function that is not covered by its status (see [LaneStatus](/spec-content/enumerated-types/LaneStatus.md)). ## Values diff --git a/spec-content/enumerated-types/LocationMethod.md b/spec-content/enumerated-types/LocationMethod.md index f6547eab..6afac631 100644 --- a/spec-content/enumerated-types/LocationMethod.md +++ b/spec-content/enumerated-types/LocationMethod.md @@ -1,4 +1,4 @@ -# Location Method +# LocationMethod Enumerated Type The typical method used to locate the begin and end of a work zone impact area. ## Values diff --git a/spec-content/enumerated-types/RestrictionType.md b/spec-content/enumerated-types/RestrictionType.md index 183264d7..099803cb 100644 --- a/spec-content/enumerated-types/RestrictionType.md +++ b/spec-content/enumerated-types/RestrictionType.md @@ -1,4 +1,4 @@ -# Restriction Type +# RestrictionType Enumerated Type The type of vehicle restriction on a roadway. ## Values diff --git a/spec-content/enumerated-types/SpatialVerification.md b/spec-content/enumerated-types/SpatialVerification.md index 02a2763a..9fb95ab1 100644 --- a/spec-content/enumerated-types/SpatialVerification.md +++ b/spec-content/enumerated-types/SpatialVerification.md @@ -1,4 +1,4 @@ -# Spatial Verification +# SpatialVerification Enumerated Type An indication of how a geographical coordinate was defined. ## Values diff --git a/spec-content/enumerated-types/TimeVerification.md b/spec-content/enumerated-types/TimeVerification.md index 8275a784..ffada2a0 100644 --- a/spec-content/enumerated-types/TimeVerification.md +++ b/spec-content/enumerated-types/TimeVerification.md @@ -1,4 +1,4 @@ -# Time Verification +# TimeVerification Enumerated Type A measure of how accurate a date-time is. ## Values diff --git a/spec-content/enumerated-types/UnitOfMeasurement.md b/spec-content/enumerated-types/UnitOfMeasurement.md index d77f3f1c..92217a29 100644 --- a/spec-content/enumerated-types/UnitOfMeasurement.md +++ b/spec-content/enumerated-types/UnitOfMeasurement.md @@ -1,4 +1,4 @@ -# Unit of Measurement +# UnitOfMeasurement Enumerated Type Unit of measurement. This enumerated type is intended for use across the specification and more values can be added in the future if needed. ## Values diff --git a/spec-content/enumerated-types/VehicleImpact.md b/spec-content/enumerated-types/VehicleImpact.md index b3880ceb..052c134f 100644 --- a/spec-content/enumerated-types/VehicleImpact.md +++ b/spec-content/enumerated-types/VehicleImpact.md @@ -1,4 +1,4 @@ -# Vehicle Impact +# VehicleImpact Enumerated Type The impact to vehicular lanes along a single road in a single direction. ## Values diff --git a/spec-content/enumerated-types/WorkTypeName.md b/spec-content/enumerated-types/WorkTypeName.md index a747d8ea..754d84e4 100644 --- a/spec-content/enumerated-types/WorkTypeName.md +++ b/spec-content/enumerated-types/WorkTypeName.md @@ -1,4 +1,4 @@ -# Work Type Name +# WorkTypeName Enumerated Type A high-level text description of the type of work being done in a road event. ## Values diff --git a/spec-content/enumerated-types/WorkerPresenceConfidence.md b/spec-content/enumerated-types/WorkerPresenceConfidence.md index 092d2523..67ab8f92 100644 --- a/spec-content/enumerated-types/WorkerPresenceConfidence.md +++ b/spec-content/enumerated-types/WorkerPresenceConfidence.md @@ -1,4 +1,4 @@ -# Worker Presence Confidence +# WorkerPresenceConfidence Enumerated Type A high-level description of a feed publisher's confidence in the reported value of `are_workers_present` on the [WorkerPresence](/spec-content/objects/WorkerPresence.md) object. ## Values diff --git a/spec-content/enumerated-types/WorkerPresenceDefinition.md b/spec-content/enumerated-types/WorkerPresenceDefinition.md index f44a0bfb..61d3217c 100644 --- a/spec-content/enumerated-types/WorkerPresenceDefinition.md +++ b/spec-content/enumerated-types/WorkerPresenceDefinition.md @@ -1,4 +1,4 @@ -# Worker Presence Definition +# WorkerPresenceDefinition Enumerated Type Situations in which workers may be considered present in a work zone. ## Values diff --git a/spec-content/enumerated-types/WorkerPresenceMethod.md b/spec-content/enumerated-types/WorkerPresenceMethod.md index 28932deb..cf0e2f4e 100644 --- a/spec-content/enumerated-types/WorkerPresenceMethod.md +++ b/spec-content/enumerated-types/WorkerPresenceMethod.md @@ -1,4 +1,4 @@ -# Worker Presence Method +# WorkerPresenceMethod Enumerated Type Describes methods for how worker presence in a work zone event area is determined. ## Values

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