diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index e5b121f1b..7c0fb875b 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -74,4 +74,7 @@ RUN apt-get install -y g++ cmake libsasl2-dev libsasl2-modules libssl-dev librdk RUN apt install -y autoconf libtool ENV REDACTION_PROPERTIES_PATH /workspaces/jpo-ode/jpo-cvdp/config/fieldsToRedact.txt -ENV RPM_DEBUG true \ No newline at end of file +ENV RPM_DEBUG true + +# Python3 +RUN apt-get install -y python3 python3-venv python3-pip \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 078e5fb88..f4b7894e6 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -24,7 +24,10 @@ "redhat.java", "redhat.vscode-commons", "ms-vscode.cpptools", - "ms-vscode.cmake-tools" + "ms-vscode.cmake-tools", + "ms-vscode.makefile-tools", + "ms-python.python", + "hediet.vscode-drawio" ] } }, diff --git a/.devcontainer/post-create.sh b/.devcontainer/post-create.sh index 21a448f81..c9f8e5057 100644 --- a/.devcontainer/post-create.sh +++ b/.devcontainer/post-create.sh @@ -17,6 +17,7 @@ bin/kafka-topics.sh --create --topic "topic.OdeRawEncodedBSMJson" --bootstrap-se # TIM bin/kafka-topics.sh --create --topic "topic.OdeTimJson" --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 +bin/kafka-topics.sh --create --topic "topic.OdeTimJsonTMCFiltered" --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 bin/kafka-topics.sh --create --topic "topic.OdeTimBroadcastJson" --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 bin/kafka-topics.sh --create --topic "topic.J2735TimBroadcastJson" --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 bin/kafka-topics.sh --create --topic "topic.OdeTIMCertExpirationTimeJson" --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 diff --git a/.github/workflows/artifact-publish.yml b/.github/workflows/artifact-publish.yml index 8321ef7e0..e545fe8f5 100644 --- a/.github/workflows/artifact-publish.yml +++ b/.github/workflows/artifact-publish.yml @@ -17,7 +17,8 @@ jobs: uses: actions/setup-java@v4 with: java-version: '21' - distribution: 'adopt' + distribution: 'temurin' + cache: 'maven' - name: Remove snapshot from version run: mvn versions:set -DremoveSnapshot diff --git a/.github/workflows/checkstyle.yml b/.github/workflows/checkstyle.yml new file mode 100644 index 000000000..768e663ac --- /dev/null +++ b/.github/workflows/checkstyle.yml @@ -0,0 +1,16 @@ +name: checkstyle + +on: pull_request + +jobs: + checkstyle: + name: runner / checkstyle + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: dbelyaev/action-checkstyle@v1.7.0 + with: + github_token: ${{ secrets.github_token }} + reporter: github-pr-review + level: warning + checkstyle_config: './checkstyle.xml' \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b90998266..3333cf542 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,6 +1,12 @@ name: ci -on: [pull_request, push] +on: + pull_request: + push: + branches: + - "develop" + - "master" + - "release/*" jobs: docker: @@ -10,6 +16,9 @@ jobs: uses: docker/setup-buildx-action@v3 - name: Build uses: docker/build-push-action@v5 + with: + cache-from: type=gha + cache-to: type=gha,mode=max sonar: runs-on: ubuntu-latest @@ -27,4 +36,4 @@ jobs: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} run: | ls -la && pwd - mvn -e -X clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.projectKey=usdot.jpo.ode:jpo-ode -Dsonar.projectName=jpo-ode -Dsonar.organization=usdot-jpo-ode -Dsonar.host.url=https://sonarcloud.io -Dsonar.branch.name=$GITHUB_REF_NAME + mvn -e clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.projectKey=usdot.jpo.ode:jpo-ode -Dsonar.projectName=jpo-ode -Dsonar.organization=usdot-jpo-ode -Dsonar.host.url=https://sonarcloud.io -Dsonar.branch.name=$GITHUB_REF_NAME diff --git a/.github/workflows/dockerhub.yml b/.github/workflows/dockerhub.yml index 05b1f77f4..888ca3c31 100644 --- a/.github/workflows/dockerhub.yml +++ b/.github/workflows/dockerhub.yml @@ -29,4 +29,6 @@ jobs: uses: docker/build-push-action@v5 with: push: true - tags: usdotjpoode/jpo-ode:${{ env.TAG }} \ No newline at end of file + tags: usdotjpoode/jpo-ode:${{ env.TAG }} + cache-from: type=gha + cache-to: type=gha,mode=max \ No newline at end of file diff --git a/.gitignore b/.gitignore index 436aa2d2d..bb4e263a1 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ /SNMP_Error.log /Events.log /uploads -*.iml +**/*.iml *.DS_Store SNMP_Error.log Events.log @@ -22,6 +22,8 @@ settings.xml .metadata *.pyc /kafka/ +**/target/** +**/.rewrite-cache/** #################### ### jpo-ode-svcs ### @@ -132,4 +134,4 @@ settings.xml ######################### ### jpo-cvdp ### -ppm_data/* \ No newline at end of file +ppm_data/* diff --git a/ATTRIBUTION.md b/ATTRIBUTION.md index 4a6dc79da..8a3c971bb 100644 --- a/ATTRIBUTION.md +++ b/ATTRIBUTION.md @@ -12,3 +12,17 @@ The developers also wish to acknowledge the following leaders and contributors: * Oakridge National Laboratories: Jason Carter and Aaron Ferber Thanks to the ITS Joint Program Office for their support of the effort. + +The J2735 Traveler Information classes were generated using asn1jvm, which is a new ASN.1 compiler targeting Java. The asn1jvm tool is currently capable of compiling the 2016 version of the J2735 ASN.1 specification to Java classes which are capable of serializing and deserializing XER and JER. The output of the tool includes classes with Jackson annotations for each type in the specification, and a runtime library containing base classes for ASN.1 types and custom Jackson serializers and deserialers. The raw output of the tool and associated runtime library are here: https://github.com/iyourshaw/j2735-2016-java + +The generated classes were edited for compatibility with the 2020 version of the specification as follows: + +* TimDatFrame.java, fields renamed: + * sspTimRights -> notUsed + * sspLocationRights -> notUsed1 + * sspMsgRights1 -> notUsed2 + * sspMsgRights2 -> notUsed3 + * duratonTime -> durationTime +* Classes were moved to Java packages to be consistent with the module organization scheme in the 2020+ versions of J2735, and with Java package naming conventions (lowercase), and existing ODE package naming. Specifically, instead being in a `DSRC` package, the TIM-related classes were moved to `us.dot.its.jpo.ode.plugin.j2735.travelerinformation`, and `us.dot.its.jpo.ode.plugin.j2735.common` packages. + +The top level TravelerInformation class was also edited, by changing its base class to `us.dot.its.jpo.ode.plugin.asn1.Asn1Object` to enable it to plug directily into the existing `OdeData`/`OdeMsgPayload` data structure. \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 61a6a2e4e..74e620955 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -FROM maven:3.8-eclipse-temurin-21-alpine as builder -MAINTAINER 583114@bah.com +FROM maven:3.8-eclipse-temurin-21-alpine AS builder +LABEL org.opencontainers.image.authors="583114@bah.com" WORKDIR /home @@ -20,13 +20,13 @@ FROM eclipse-temurin:21-jre-alpine WORKDIR /home -COPY --from=builder /home/jpo-ode-svcs/src/main/resources/application.properties /home +COPY --from=builder /home/jpo-ode-svcs/src/main/resources/application.yaml /home COPY --from=builder /home/jpo-ode-svcs/src/main/resources/logback.xml /home COPY --from=builder /home/jpo-ode-svcs/target/jpo-ode-svcs.jar /home COPY ./scripts/startup_jpoode.sh /home -RUN apk add openssh -RUN apk add openrc -RUN rc-update add sshd +RUN apk --no-cache add openssh \ + && apk --no-cache add openrc \ + && rc-update add sshd ENTRYPOINT ["sh", "/home/startup_jpoode.sh"] diff --git a/Makefile b/Makefile index 9ce27b456..ffeded932 100644 --- a/Makefile +++ b/Makefile @@ -4,9 +4,11 @@ default: $(info `make build` to build the ODE) $(info `make stop` to stop the ODE) $(info `make delete` to stop the ODE and remove the volumes) + $(info `make restart` to stop and then start the ODE) $(info `make rebuild` to stop, delete, and then rebuild the containers) $(info `make clean-build` to rebuild the containers without using the cache) +.PHONY: start start: ifeq ("$(wildcard .env)", "") $(error "ERROR: jpo-ode Environment file `.env` not found in ${PWD}") @@ -25,14 +27,22 @@ ifeq ("$(wildcard ./jpo-utils/.env)", "") endif docker compose build +.PHONY: stop stop: docker compose down +.PHONY: delete delete: docker compose down -v +.PHONY: restart +restart: + $(MAKE) stop start + +.PHONY: rebuild rebuild: $(MAKE) stop delete build start +.PHONY: clean-build clean-build: docker compose build --no-cache \ No newline at end of file diff --git a/README.md b/README.md index 765981547..771cb6a35 100644 --- a/README.md +++ b/README.md @@ -30,22 +30,22 @@ All stakeholders are invited to provide input to these documents. To provide fee The current version and release history of the JPO-ODE: [ODE Release Notes]() -**Table of Contents** - -1. [Usage Example](#usage-example) -1. [Configuration](#configuration) -1. [Installation](#installation) -1. [File Manifest](#file-manifest) -1. [Development Setup](#development-setup) -1. [Release History](#release-history) -1. [Contact Information](#contact-information) -1. [Contributing](#contributing) -1. [Credits and Acknowledgement](#credits-and-acknowledgement) -1. [Code.gov Registration Info](#codegov-registration-info) -1. [Kubernetes](#kubernetes) -1. [Sonar Cloud](#sonar-token-configuration) ([Documentation](https://sonarcloud.io/documentation/user-guide/user-token/)) -1. [SNMP](#snmp) -1. [GitHub Artifact Usage](#githhub-artifact-usage) +## Table of Contents + +1. [Usage Example](#1-usage-example) +1. [Configuration](#2-configuration) +1. [Installation](#3-installation) +1. [File Manifest](#4-file-manifest) +1. [Development Setup](#5-development-setup) +1. [Release History](#6-release-history) +1. [Contact Information](#7-contact-information) +1. [Contributing](#8-contributing) +1. [Credits and Acknowledgement](#9-credits-and-acknowledgement) +1. [Code.gov Registration Info](#10-codegov-registration-info) +1. [Kubernetes](#11-kubernetes) +1. [Sonar Cloud](#12-sonar-token-configuration) ([Documentation](https://sonarcloud.io/documentation/user-guide/user-token/)) +1. [SNMP](#13-snmp) +1. [GitHub Artifact Usage](#14-gitHub-artifact-usage) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/data/TIM_Message_Testing_Files/TIM_BroadcastSampleOutput.json b/data/TIM_Message_Testing_Files/TIM_BroadcastSampleOutput.json index 8357f788c..29aa96ce0 100644 --- a/data/TIM_Message_Testing_Files/TIM_BroadcastSampleOutput.json +++ b/data/TIM_Message_Testing_Files/TIM_BroadcastSampleOutput.json @@ -1,24 +1,24 @@ -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":29,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":29},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:39.058Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"notUsed2":0,"notUsed3":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"ABCD","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":250}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"DE9AAC79"},"requestID":"DE9AAC79","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":29,"recordId":0,"serialNumber":29},"odeReceivedAt":"2019-03-12T19:50:39.057Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"ABCD"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"notUsed1":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"sspMsgTypes":2,"sspMsgContent":3,"content":"Advisory","items":["250"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":28,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":28},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:38.120Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"notUsed2":0,"notUsed3":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":250}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":19595894},"requestID":19595894,"groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":28,"recordId":0,"serialNumber":28},"odeReceivedAt":"2019-03-12T19:50:38.118Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"notUsed1":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"sspMsgTypes":2,"sspMsgContent":3,"content":"Advisory","items":["250"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":27,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":27},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:37.242Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"notUsed2":0,"notUsed3":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":250}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"C7062151"},"requestID":"C7062151","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":27,"recordId":0,"serialNumber":27},"odeReceivedAt":"2019-03-12T19:50:37.240Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"notUsed1":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"sspMsgTypes":2,"sspMsgContent":3,"content":"Advisory","items":["250"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":26,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":26},"sanitized":false,"recordGeneratedAt":"2018-04-18T18:38:52.914Z","odeReceivedAt":"2019-03-12T19:50:36.350Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":155198,"packetID":"0000002316f1b0eed3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":405730680,"long":-1050490160},"name":"southbound_Timberline_20_30_RSU-192.168.0.100","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050473550,"lat":405724290}}},{"delta":{"node-LatLon":{"lon":-1050468440,"lat":405722280}}},{"delta":{"node-LatLon":{"lon":-1050465900,"lat":405721130}}},{"delta":{"node-LatLon":{"lon":-1050462430,"lat":405719100}}},{"delta":{"node-LatLon":{"lon":-1050459360,"lat":405716750}}},{"delta":{"node-LatLon":{"lon":-1050456740,"lat":405714220}}},{"delta":{"node-LatLon":{"lon":-1050454500,"lat":405711310}}},{"delta":{"node-LatLon":{"lon":-1050452350,"lat":405707240}}},{"delta":{"node-LatLon":{"lon":-1050451130,"lat":405702930}}},{"delta":{"node-LatLon":{"lon":-1050450870,"lat":405698480}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":2000,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411139330,"long":-1048507720}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":155120}},"msgCnt":1}}}}}}},"startTime":{"month":0,"hour":31,"year":0,"day":0,"minute":60},"stopTime":{"month":0,"hour":31,"year":0,"day":0,"minute":60},"distType":"02","asdmType":2,"asdmID":"C064E753"},"requestID":"C064E753","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":26,"recordId":0,"serialNumber":26},"odeReceivedAt":"2019-03-12T19:50:36.348Z","schemaVersion":6,"recordGeneratedAt":"2018-04-18T18:38:52.914Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2018-04-18T18:38:52.914Z","packetID":"0000002316f1b0eed3","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.113933,"longitude":-104.850772},"viewAngle":"1111111111111111","mutcdCode":"warning"}},"startDateTime":"2018-04-18T11:20-06:00","durationTime":2000,"priority":5,"notUsed1":0,"regions":[{"name":"southbound_Timberline_20_30_RSU-192.168.0.100","regulatorID":0,"segmentID":0,"anchorPosition":{"latitude":40.573068,"longitude":-105.049016},"laneWidth":327,"directionality":"3","closedPath":false,"direction":"1111111111111111","description":"path","path":{"scale":0,"type":"xy","nodes":[{"delta":"node-LatLon","nodeLat":40.572429,"nodeLong":-105.047355},{"delta":"node-LatLon","nodeLat":40.572228,"nodeLong":-105.046844},{"delta":"node-LatLon","nodeLat":40.572113,"nodeLong":-105.04659},{"delta":"node-LatLon","nodeLat":40.57191,"nodeLong":-105.046243},{"delta":"node-LatLon","nodeLat":40.571675,"nodeLong":-105.045936},{"delta":"node-LatLon","nodeLat":40.571422,"nodeLong":-105.045674},{"delta":"node-LatLon","nodeLat":40.571131,"nodeLong":-105.04545},{"delta":"node-LatLon","nodeLat":40.570724,"nodeLong":-105.045235},{"delta":"node-LatLon","nodeLat":40.570293,"nodeLong":-105.045113},{"delta":"node-LatLon","nodeLat":40.569848,"nodeLong":-105.045087}]}}],"sspMsgTypes":1,"sspMsgContent":1,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":25,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":25},"sanitized":false,"recordGeneratedAt":"2018-04-18T18:38:52.914Z","odeReceivedAt":"2019-03-12T19:50:35.499Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":155198,"packetID":"0000002316f1b0eed3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":405730680,"long":-1050490160},"name":"southbound_Timberline_20_30_RSU-192.168.0.100","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050473550,"lat":405724290}}},{"delta":{"node-LatLon":{"lon":-1050468440,"lat":405722280}}},{"delta":{"node-LatLon":{"lon":-1050465900,"lat":405721130}}},{"delta":{"node-LatLon":{"lon":-1050462430,"lat":405719100}}},{"delta":{"node-LatLon":{"lon":-1050459360,"lat":405716750}}},{"delta":{"node-LatLon":{"lon":-1050456740,"lat":405714220}}},{"delta":{"node-LatLon":{"lon":-1050454500,"lat":405711310}}},{"delta":{"node-LatLon":{"lon":-1050452350,"lat":405707240}}},{"delta":{"node-LatLon":{"lon":-1050451130,"lat":405702930}}},{"delta":{"node-LatLon":{"lon":-1050450870,"lat":405698480}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":2000,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":405730680,"long":-1050490160}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":232800}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":25,"recordId":0,"serialNumber":25},"odeReceivedAt":"2019-03-12T19:50:35.497Z","schemaVersion":6,"recordGeneratedAt":"2018-04-18T18:38:52.914Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2018-04-18T18:38:52.914Z","packetID":"0000002316f1b0eed3","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":40.573068,"longitude":-105.049016},"viewAngle":"1111111111111111","mutcdCode":"warning"}},"startDateTime":"2018-06-11T10:00-06:00","durationTime":2000,"priority":5,"notUsed1":0,"regions":[{"name":"southbound_Timberline_20_30_RSU-192.168.0.100","regulatorID":0,"segmentID":0,"anchorPosition":{"latitude":40.573068,"longitude":-105.049016},"laneWidth":327,"directionality":"3","closedPath":false,"direction":"1111111111111111","description":"path","path":{"scale":0,"type":"xy","nodes":[{"delta":"node-LatLon","nodeLat":40.572429,"nodeLong":-105.047355},{"delta":"node-LatLon","nodeLat":40.572228,"nodeLong":-105.046844},{"delta":"node-LatLon","nodeLat":40.572113,"nodeLong":-105.04659},{"delta":"node-LatLon","nodeLat":40.57191,"nodeLong":-105.046243},{"delta":"node-LatLon","nodeLat":40.571675,"nodeLong":-105.045936},{"delta":"node-LatLon","nodeLat":40.571422,"nodeLong":-105.045674},{"delta":"node-LatLon","nodeLat":40.571131,"nodeLong":-105.04545},{"delta":"node-LatLon","nodeLat":40.570724,"nodeLong":-105.045235},{"delta":"node-LatLon","nodeLat":40.570293,"nodeLong":-105.045113},{"delta":"node-LatLon","nodeLat":40.569848,"nodeLong":-105.045087}]}}],"sspMsgTypes":1,"sspMsgContent":1,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":24,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":24},"sanitized":false,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","odeReceivedAt":"2019-03-12T19:50:34.670Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":309505,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":20207,"lat":412500807,"long":-1110093847},"name":"Testing TIM","laneWidth":700,"directionality":{"both":""},"description":{"path":{"offset":{"ll":{"nodes":{"NodeLL":[{"delta":{"node-LL1":{"lon":2047,"lat":-2048}}},{"delta":{"node-LL2":{"lon":8191,"lat":-8192}}},{"delta":{"node-LL3":{"lon":32767,"lat":-32768}}},{"delta":{"node-LL4":{"lon":131071,"lat":-131072}}},{"delta":{"node-LL5":{"lon":2097151,"lat":-2097152}}},{"delta":{"node-LL6":{"lon":8388607,"lat":-8388608}}},{"delta":{"node-LL1":{"lon":2047,"lat":-2048}}},{"delta":{"node-LL2":{"lon":8191,"lat":-8192}}},{"delta":{"node-LL3":{"lon":32767,"lat":-32768}}},{"delta":{"node-LL4":{"lon":131071,"lat":-131072}}},{"delta":{"node-LL5":{"lon":2097151,"lat":-2097152}}},{"delta":{"node-LL6":{"lon":8388607,"lat":-8388608}}},{"delta":{"node-LatLon":{"lon":-1110093847,"lat":412500807}}}]}}},"scale":0}},"id":{"id":33,"region":0},"direction":"0000000000001010"}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":308065}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":24,"recordId":0,"serialNumber":24},"odeReceivedAt":"2019-03-12T19:50:34.666Z","schemaVersion":6,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2017-08-03T22:25:36.297Z","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-08-02T22:25:00.000Z","durationTime":1,"priority":0,"notUsed1":0,"regions":[{"name":"Testing TIM","regulatorID":0,"segmentID":33,"anchorPosition":{"latitude":41.2500807,"longitude":-111.0093847,"elevation":2020.6969900289998},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"0000000000001010","description":"path","path":{"scale":0,"type":"ll","nodes":[{"delta":"node-LL","nodeLat":-0.0002048,"nodeLong":0.0002047},{"delta":"node-LL","nodeLat":-0.0008192,"nodeLong":0.0008191},{"delta":"node-LL","nodeLat":-0.0032768,"nodeLong":0.0032767},{"delta":"node-LL","nodeLat":-0.0131072,"nodeLong":0.0131071},{"delta":"node-LL","nodeLat":-0.2097152,"nodeLong":0.2097151},{"delta":"node-LL","nodeLat":-0.8388608,"nodeLong":0.8388607},{"delta":"node-LL1","nodeLat":-0.0002048,"nodeLong":0.0002047},{"delta":"node-LL2","nodeLat":-0.0008192,"nodeLong":0.0008191},{"delta":"node-LL3","nodeLat":-0.0032768,"nodeLong":0.0032767},{"delta":"node-LL4","nodeLat":-0.0131072,"nodeLong":0.0131071},{"delta":"node-LL5","nodeLat":-0.2097152,"nodeLong":0.2097151},{"delta":"node-LL6","nodeLat":-0.8388608,"nodeLong":0.8388607},{"delta":"node-LatLon","nodeLat":41.2500807,"nodeLong":-111.0093847}]}}],"sspMsgTypes":2,"sspMsgContent":3,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":23,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":23},"sanitized":false,"recordGeneratedAt":"2018-06-11T16:00:00Z","odeReceivedAt":"2019-03-12T19:50:33.824Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":232800,"packetID":"0000002316f1b0eed3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":405730680,"long":-1050490160},"name":"southbound_Timberline_20_30_RSU-192.168.0.100","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-XY1":{"x":-512,"y":511}}},{"delta":{"node-XY2":{"x":-1024,"y":1023}}},{"delta":{"node-XY3":{"x":-2048,"y":2047}}},{"delta":{"node-XY4":{"x":-4096,"y":4095}}},{"delta":{"node-XY5":{"x":-8192,"y":8191}}},{"delta":{"node-XY6":{"x":-32768,"y":32767}}},{"delta":{"node-LatLon":{"lon":-1050450870,"lat":405698480}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":2000,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":405730680,"long":-1050490160}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":232800}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":23,"recordId":0,"serialNumber":23},"odeReceivedAt":"2019-03-12T19:50:33.823Z","schemaVersion":6,"recordGeneratedAt":"2018-06-11T16:00:00Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2018-06-11T16:00:00.000Z","packetID":"0000002316f1b0eed3","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":40.573068,"longitude":-105.049016},"viewAngle":"1111111111111111","mutcdCode":"warning"}},"startDateTime":"2018-06-11T10:00-06:00","durationTime":2000,"priority":5,"notUsed1":0,"regions":[{"name":"southbound_Timberline_20_30_RSU-192.168.0.100","regulatorID":0,"segmentID":0,"anchorPosition":{"latitude":40.573068,"longitude":-105.049016},"laneWidth":327,"directionality":"3","closedPath":false,"direction":"1111111111111111","description":"path","path":{"scale":0,"type":"xy","nodes":[{"delta":"node-XY","x":-5.12,"y":5.11},{"delta":"node-XY","x":-10.24,"y":10.23},{"delta":"node-XY","x":-20.48,"y":20.47},{"delta":"node-XY","x":-40.96,"y":40.95},{"delta":"node-XY","x":-81.92,"y":81.91},{"delta":"node-XY","x":-327.68,"y":327.67},{"delta":"node-LatLon","nodeLat":40.569848,"nodeLong":-105.045087}]}}],"sspMsgTypes":1,"sspMsgContent":1,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":22,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":22},"sanitized":false,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","odeReceivedAt":"2019-03-12T19:50:32.883Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":309505,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":20207,"lat":412500807,"long":-1110093847},"name":"Testing TIM","laneWidth":700,"directionality":{"both":""},"description":{"path":{"offset":{"ll":{"nodes":{"NodeLL":[{"delta":{"node-LL3":{"lon":31024,"lat":14506}}},{"delta":{"node-LL3":{"lon":30974,"lat":14568}}},{"delta":{"node-LL3":{"lon":30983,"lat":14559}}},{"delta":{"node-LL3":{"lon":30980,"lat":14563}}},{"delta":{"node-LL3":{"lon":30982,"lat":14562}}}]}}},"scale":0}},"id":{"id":33,"region":0},"direction":"0000000000001010"}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":513}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":308065}},"msgCnt":1}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"B5DF2B65"},"requestID":"B5DF2B65","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":22,"recordId":0,"serialNumber":22},"odeReceivedAt":"2019-03-12T19:50:32.879Z","schemaVersion":6,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2017-08-03T22:25:36.297Z","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-08-02T22:25:00.000Z","durationTime":1,"priority":0,"notUsed1":0,"regions":[{"name":"Testing TIM","regulatorID":0,"segmentID":33,"anchorPosition":{"latitude":41.2500807,"longitude":-111.0093847,"elevation":2020.6969900289998},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"0000000000001010","description":"path","path":{"scale":0,"type":"ll","nodes":[{"delta":"node-LL3","nodeLat":0.0014506,"nodeLong":0.0031024},{"delta":"node-LL3","nodeLat":0.0014568,"nodeLong":0.0030974},{"delta":"node-LL3","nodeLat":0.0014559,"nodeLong":0.0030983},{"delta":"node-LL3","nodeLat":0.0014563,"nodeLong":0.0030980},{"delta":"node-LL3","nodeLat":0.0014562,"nodeLong":0.0030982}]}}],"sspMsgTypes":2,"sspMsgContent":3,"content":"Advisory","items":["513"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":21,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":21},"sanitized":false,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","odeReceivedAt":"2019-03-12T19:50:31.737Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":309505,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":20207,"lat":412500807,"long":-1110093847},"name":"Testing TIM","laneWidth":700,"directionality":{"both":""},"description":{"path":{"offset":{"ll":{"nodes":{"NodeLL":[{"delta":{"node-LL3":{"lon":31024,"lat":14506}}},{"delta":{"node-LL3":{"lon":30974,"lat":14568}}},{"delta":{"node-LL3":{"lon":30983,"lat":14559}}},{"delta":{"node-LL3":{"lon":30980,"lat":14563}}},{"delta":{"node-LL3":{"lon":30982,"lat":14562}}}]}}},"scale":0}},"id":{"id":33,"region":0},"direction":"0000000000001010"}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"ABCD","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":513}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":308065}},"msgCnt":1}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"62048F79"},"requestID":"62048F79","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":21,"recordId":0,"serialNumber":21},"odeReceivedAt":"2019-03-12T19:50:31.733Z","schemaVersion":6,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2017-08-03T22:25:36.297Z","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"ABCD"}},"startDateTime":"2017-08-02T22:25:00.000Z","durationTime":1,"priority":0,"notUsed1":0,"regions":[{"name":"Testing TIM","regulatorID":0,"segmentID":33,"anchorPosition":{"latitude":41.2500807,"longitude":-111.0093847,"elevation":2020.6969900289998},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"0000000000001010","description":"path","path":{"scale":0,"type":"ll","nodes":[{"delta":"node-LL3","nodeLat":0.0014506,"nodeLong":0.0031024},{"delta":"node-LL3","nodeLat":0.0014568,"nodeLong":0.0030974},{"delta":"node-LL3","nodeLat":0.0014559,"nodeLong":0.0030983},{"delta":"node-LL3","nodeLat":0.0014563,"nodeLong":0.0030980},{"delta":"node-LL3","nodeLat":0.0014562,"nodeLong":0.0030982}]}}],"sspMsgTypes":2,"sspMsgContent":3,"content":"Advisory","items":["513"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":20,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":20},"sanitized":false,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","odeReceivedAt":"2019-03-12T19:50:30.318Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":309505,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":20207,"lat":412500807,"long":-1110093847},"name":"Testing TIM","laneWidth":700,"directionality":{"both":""},"description":{"path":{"offset":{"ll":{"nodes":{"NodeLL":[{"delta":{"node-LL3":{"lon":30982,"lat":14562}}},{"delta":{"node-LatLon":{"lon":-1110093847,"lat":412500807}}}]}}},"scale":0}},"id":{"id":33,"region":0},"direction":"0000000000001010"}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":308065}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":20,"recordId":0,"serialNumber":20},"odeReceivedAt":"2019-03-12T19:50:30.317Z","schemaVersion":6,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2017-08-03T22:25:36.297Z","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-08-02T22:25:00.000Z","durationTime":1,"priority":0,"notUsed1":0,"regions":[{"name":"Testing TIM","regulatorID":0,"segmentID":33,"anchorPosition":{"latitude":41.2500807,"longitude":-111.0093847,"elevation":2020.6969900289998},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"0000000000001010","description":"path","path":{"scale":0,"type":"ll","nodes":[{"delta":"node-LL3","nodeLat":0.0014562,"nodeLong":0.0030982},{"delta":"node-LatLon","nodeLat":41.2500807,"nodeLong":-111.0093847}]}}],"sspMsgTypes":2,"sspMsgContent":3,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":19,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":19},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:28.990Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"notUsed2":0,"notUsed3":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"6D596E08"},"requestID":"6D596E08","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":19,"recordId":0,"serialNumber":19},"odeReceivedAt":"2019-03-12T19:50:28.988Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"notUsed1":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"sspMsgTypes":2,"sspMsgContent":3,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} -{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":18,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":18},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:26.827Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"notUsed2":0,"notUsed3":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}},"dataType":"TravelerInformation"}} -{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":18,"recordId":0,"serialNumber":18},"odeReceivedAt":"2019-03-12T19:50:26.823Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"notUsed":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"notUsed1":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"sspMsgTypes":2,"sspMsgContent":3,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":29,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":29},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:39.058Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"doNotUse3":0,"doNotUse4":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"ABCD","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":250}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"DE9AAC79"},"requestID":"DE9AAC79","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":29,"recordId":0,"serialNumber":29},"odeReceivedAt":"2019-03-12T19:50:39.057Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"ABCD"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"doNotUse2":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"doNotUse4":2,"doNotUse3":3,"content":"Advisory","items":["250"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":28,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":28},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:38.120Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"doNotUse3":0,"doNotUse4":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":250}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":19595894},"requestID":19595894,"groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":28,"recordId":0,"serialNumber":28},"odeReceivedAt":"2019-03-12T19:50:38.118Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"doNotUse2":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"doNotUse4":2,"doNotUse3":3,"content":"Advisory","items":["250"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":27,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":27},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:37.242Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"doNotUse3":0,"doNotUse4":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":250}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"C7062151"},"requestID":"C7062151","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":27,"recordId":0,"serialNumber":27},"odeReceivedAt":"2019-03-12T19:50:37.240Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"doNotUse2":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"doNotUse4":2,"doNotUse3":3,"content":"Advisory","items":["250"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":26,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":26},"sanitized":false,"recordGeneratedAt":"2018-04-18T18:38:52.914Z","odeReceivedAt":"2019-03-12T19:50:36.350Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":155198,"packetID":"0000002316f1b0eed3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":405730680,"long":-1050490160},"name":"southbound_Timberline_20_30_RSU-192.168.0.100","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050473550,"lat":405724290}}},{"delta":{"node-LatLon":{"lon":-1050468440,"lat":405722280}}},{"delta":{"node-LatLon":{"lon":-1050465900,"lat":405721130}}},{"delta":{"node-LatLon":{"lon":-1050462430,"lat":405719100}}},{"delta":{"node-LatLon":{"lon":-1050459360,"lat":405716750}}},{"delta":{"node-LatLon":{"lon":-1050456740,"lat":405714220}}},{"delta":{"node-LatLon":{"lon":-1050454500,"lat":405711310}}},{"delta":{"node-LatLon":{"lon":-1050452350,"lat":405707240}}},{"delta":{"node-LatLon":{"lon":-1050451130,"lat":405702930}}},{"delta":{"node-LatLon":{"lon":-1050450870,"lat":405698480}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":2000,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411139330,"long":-1048507720}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":155120}},"msgCnt":1}}}}}}},"startTime":{"month":0,"hour":31,"year":0,"day":0,"minute":60},"stopTime":{"month":0,"hour":31,"year":0,"day":0,"minute":60},"distType":"02","asdmType":2,"asdmID":"C064E753"},"requestID":"C064E753","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":26,"recordId":0,"serialNumber":26},"odeReceivedAt":"2019-03-12T19:50:36.348Z","schemaVersion":6,"recordGeneratedAt":"2018-04-18T18:38:52.914Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2018-04-18T18:38:52.914Z","packetID":"0000002316f1b0eed3","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.113933,"longitude":-104.850772},"viewAngle":"1111111111111111","mutcdCode":"warning"}},"startDateTime":"2018-04-18T11:20-06:00","durationTime":2000,"priority":5,"doNotUse2":0,"regions":[{"name":"southbound_Timberline_20_30_RSU-192.168.0.100","regulatorID":0,"segmentID":0,"anchorPosition":{"latitude":40.573068,"longitude":-105.049016},"laneWidth":327,"directionality":"3","closedPath":false,"direction":"1111111111111111","description":"path","path":{"scale":0,"type":"xy","nodes":[{"delta":"node-LatLon","nodeLat":40.572429,"nodeLong":-105.047355},{"delta":"node-LatLon","nodeLat":40.572228,"nodeLong":-105.046844},{"delta":"node-LatLon","nodeLat":40.572113,"nodeLong":-105.04659},{"delta":"node-LatLon","nodeLat":40.57191,"nodeLong":-105.046243},{"delta":"node-LatLon","nodeLat":40.571675,"nodeLong":-105.045936},{"delta":"node-LatLon","nodeLat":40.571422,"nodeLong":-105.045674},{"delta":"node-LatLon","nodeLat":40.571131,"nodeLong":-105.04545},{"delta":"node-LatLon","nodeLat":40.570724,"nodeLong":-105.045235},{"delta":"node-LatLon","nodeLat":40.570293,"nodeLong":-105.045113},{"delta":"node-LatLon","nodeLat":40.569848,"nodeLong":-105.045087}]}}],"doNotUse4":1,"doNotUse3":1,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":25,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":25},"sanitized":false,"recordGeneratedAt":"2018-04-18T18:38:52.914Z","odeReceivedAt":"2019-03-12T19:50:35.499Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":155198,"packetID":"0000002316f1b0eed3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":405730680,"long":-1050490160},"name":"southbound_Timberline_20_30_RSU-192.168.0.100","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050473550,"lat":405724290}}},{"delta":{"node-LatLon":{"lon":-1050468440,"lat":405722280}}},{"delta":{"node-LatLon":{"lon":-1050465900,"lat":405721130}}},{"delta":{"node-LatLon":{"lon":-1050462430,"lat":405719100}}},{"delta":{"node-LatLon":{"lon":-1050459360,"lat":405716750}}},{"delta":{"node-LatLon":{"lon":-1050456740,"lat":405714220}}},{"delta":{"node-LatLon":{"lon":-1050454500,"lat":405711310}}},{"delta":{"node-LatLon":{"lon":-1050452350,"lat":405707240}}},{"delta":{"node-LatLon":{"lon":-1050451130,"lat":405702930}}},{"delta":{"node-LatLon":{"lon":-1050450870,"lat":405698480}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":2000,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":405730680,"long":-1050490160}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":232800}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":25,"recordId":0,"serialNumber":25},"odeReceivedAt":"2019-03-12T19:50:35.497Z","schemaVersion":6,"recordGeneratedAt":"2018-04-18T18:38:52.914Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2018-04-18T18:38:52.914Z","packetID":"0000002316f1b0eed3","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":40.573068,"longitude":-105.049016},"viewAngle":"1111111111111111","mutcdCode":"warning"}},"startDateTime":"2018-06-11T10:00-06:00","durationTime":2000,"priority":5,"doNotUse2":0,"regions":[{"name":"southbound_Timberline_20_30_RSU-192.168.0.100","regulatorID":0,"segmentID":0,"anchorPosition":{"latitude":40.573068,"longitude":-105.049016},"laneWidth":327,"directionality":"3","closedPath":false,"direction":"1111111111111111","description":"path","path":{"scale":0,"type":"xy","nodes":[{"delta":"node-LatLon","nodeLat":40.572429,"nodeLong":-105.047355},{"delta":"node-LatLon","nodeLat":40.572228,"nodeLong":-105.046844},{"delta":"node-LatLon","nodeLat":40.572113,"nodeLong":-105.04659},{"delta":"node-LatLon","nodeLat":40.57191,"nodeLong":-105.046243},{"delta":"node-LatLon","nodeLat":40.571675,"nodeLong":-105.045936},{"delta":"node-LatLon","nodeLat":40.571422,"nodeLong":-105.045674},{"delta":"node-LatLon","nodeLat":40.571131,"nodeLong":-105.04545},{"delta":"node-LatLon","nodeLat":40.570724,"nodeLong":-105.045235},{"delta":"node-LatLon","nodeLat":40.570293,"nodeLong":-105.045113},{"delta":"node-LatLon","nodeLat":40.569848,"nodeLong":-105.045087}]}}],"doNotUse4":1,"doNotUse3":1,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":24,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":24},"sanitized":false,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","odeReceivedAt":"2019-03-12T19:50:34.670Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":309505,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":20207,"lat":412500807,"long":-1110093847},"name":"Testing TIM","laneWidth":700,"directionality":{"both":""},"description":{"path":{"offset":{"ll":{"nodes":{"NodeLL":[{"delta":{"node-LL1":{"lon":2047,"lat":-2048}}},{"delta":{"node-LL2":{"lon":8191,"lat":-8192}}},{"delta":{"node-LL3":{"lon":32767,"lat":-32768}}},{"delta":{"node-LL4":{"lon":131071,"lat":-131072}}},{"delta":{"node-LL5":{"lon":2097151,"lat":-2097152}}},{"delta":{"node-LL6":{"lon":8388607,"lat":-8388608}}},{"delta":{"node-LL1":{"lon":2047,"lat":-2048}}},{"delta":{"node-LL2":{"lon":8191,"lat":-8192}}},{"delta":{"node-LL3":{"lon":32767,"lat":-32768}}},{"delta":{"node-LL4":{"lon":131071,"lat":-131072}}},{"delta":{"node-LL5":{"lon":2097151,"lat":-2097152}}},{"delta":{"node-LL6":{"lon":8388607,"lat":-8388608}}},{"delta":{"node-LatLon":{"lon":-1110093847,"lat":412500807}}}]}}},"scale":0}},"id":{"id":33,"region":0},"direction":"0000000000001010"}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":308065}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":24,"recordId":0,"serialNumber":24},"odeReceivedAt":"2019-03-12T19:50:34.666Z","schemaVersion":6,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2017-08-03T22:25:36.297Z","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-08-02T22:25:00.000Z","durationTime":1,"priority":0,"doNotUse2":0,"regions":[{"name":"Testing TIM","regulatorID":0,"segmentID":33,"anchorPosition":{"latitude":41.2500807,"longitude":-111.0093847,"elevation":2020.6969900289998},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"0000000000001010","description":"path","path":{"scale":0,"type":"ll","nodes":[{"delta":"node-LL","nodeLat":-0.0002048,"nodeLong":0.0002047},{"delta":"node-LL","nodeLat":-0.0008192,"nodeLong":0.0008191},{"delta":"node-LL","nodeLat":-0.0032768,"nodeLong":0.0032767},{"delta":"node-LL","nodeLat":-0.0131072,"nodeLong":0.0131071},{"delta":"node-LL","nodeLat":-0.2097152,"nodeLong":0.2097151},{"delta":"node-LL","nodeLat":-0.8388608,"nodeLong":0.8388607},{"delta":"node-LL1","nodeLat":-0.0002048,"nodeLong":0.0002047},{"delta":"node-LL2","nodeLat":-0.0008192,"nodeLong":0.0008191},{"delta":"node-LL3","nodeLat":-0.0032768,"nodeLong":0.0032767},{"delta":"node-LL4","nodeLat":-0.0131072,"nodeLong":0.0131071},{"delta":"node-LL5","nodeLat":-0.2097152,"nodeLong":0.2097151},{"delta":"node-LL6","nodeLat":-0.8388608,"nodeLong":0.8388607},{"delta":"node-LatLon","nodeLat":41.2500807,"nodeLong":-111.0093847}]}}],"doNotUse4":2,"doNotUse3":3,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":23,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":23},"sanitized":false,"recordGeneratedAt":"2018-06-11T16:00:00Z","odeReceivedAt":"2019-03-12T19:50:33.824Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":232800,"packetID":"0000002316f1b0eed3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":405730680,"long":-1050490160},"name":"southbound_Timberline_20_30_RSU-192.168.0.100","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-XY1":{"x":-512,"y":511}}},{"delta":{"node-XY2":{"x":-1024,"y":1023}}},{"delta":{"node-XY3":{"x":-2048,"y":2047}}},{"delta":{"node-XY4":{"x":-4096,"y":4095}}},{"delta":{"node-XY5":{"x":-8192,"y":8191}}},{"delta":{"node-XY6":{"x":-32768,"y":32767}}},{"delta":{"node-LatLon":{"lon":-1050450870,"lat":405698480}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":2000,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":405730680,"long":-1050490160}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":232800}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":23,"recordId":0,"serialNumber":23},"odeReceivedAt":"2019-03-12T19:50:33.823Z","schemaVersion":6,"recordGeneratedAt":"2018-06-11T16:00:00Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2018-06-11T16:00:00.000Z","packetID":"0000002316f1b0eed3","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":40.573068,"longitude":-105.049016},"viewAngle":"1111111111111111","mutcdCode":"warning"}},"startDateTime":"2018-06-11T10:00-06:00","durationTime":2000,"priority":5,"doNotUse2":0,"regions":[{"name":"southbound_Timberline_20_30_RSU-192.168.0.100","regulatorID":0,"segmentID":0,"anchorPosition":{"latitude":40.573068,"longitude":-105.049016},"laneWidth":327,"directionality":"3","closedPath":false,"direction":"1111111111111111","description":"path","path":{"scale":0,"type":"xy","nodes":[{"delta":"node-XY","x":-5.12,"y":5.11},{"delta":"node-XY","x":-10.24,"y":10.23},{"delta":"node-XY","x":-20.48,"y":20.47},{"delta":"node-XY","x":-40.96,"y":40.95},{"delta":"node-XY","x":-81.92,"y":81.91},{"delta":"node-XY","x":-327.68,"y":327.67},{"delta":"node-LatLon","nodeLat":40.569848,"nodeLong":-105.045087}]}}],"doNotUse4":1,"doNotUse3":1,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":22,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":22},"sanitized":false,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","odeReceivedAt":"2019-03-12T19:50:32.883Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":309505,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":20207,"lat":412500807,"long":-1110093847},"name":"Testing TIM","laneWidth":700,"directionality":{"both":""},"description":{"path":{"offset":{"ll":{"nodes":{"NodeLL":[{"delta":{"node-LL3":{"lon":31024,"lat":14506}}},{"delta":{"node-LL3":{"lon":30974,"lat":14568}}},{"delta":{"node-LL3":{"lon":30983,"lat":14559}}},{"delta":{"node-LL3":{"lon":30980,"lat":14563}}},{"delta":{"node-LL3":{"lon":30982,"lat":14562}}}]}}},"scale":0}},"id":{"id":33,"region":0},"direction":"0000000000001010"}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":513}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":308065}},"msgCnt":1}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"B5DF2B65"},"requestID":"B5DF2B65","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":22,"recordId":0,"serialNumber":22},"odeReceivedAt":"2019-03-12T19:50:32.879Z","schemaVersion":6,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2017-08-03T22:25:36.297Z","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-08-02T22:25:00.000Z","durationTime":1,"priority":0,"doNotUse2":0,"regions":[{"name":"Testing TIM","regulatorID":0,"segmentID":33,"anchorPosition":{"latitude":41.2500807,"longitude":-111.0093847,"elevation":2020.6969900289998},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"0000000000001010","description":"path","path":{"scale":0,"type":"ll","nodes":[{"delta":"node-LL3","nodeLat":0.0014506,"nodeLong":0.0031024},{"delta":"node-LL3","nodeLat":0.0014568,"nodeLong":0.0030974},{"delta":"node-LL3","nodeLat":0.0014559,"nodeLong":0.0030983},{"delta":"node-LL3","nodeLat":0.0014563,"nodeLong":0.0030980},{"delta":"node-LL3","nodeLat":0.0014562,"nodeLong":0.0030982}]}}],"doNotUse4":2,"doNotUse3":3,"content":"Advisory","items":["513"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":21,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":21},"sanitized":false,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","odeReceivedAt":"2019-03-12T19:50:31.737Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":309505,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":20207,"lat":412500807,"long":-1110093847},"name":"Testing TIM","laneWidth":700,"directionality":{"both":""},"description":{"path":{"offset":{"ll":{"nodes":{"NodeLL":[{"delta":{"node-LL3":{"lon":31024,"lat":14506}}},{"delta":{"node-LL3":{"lon":30974,"lat":14568}}},{"delta":{"node-LL3":{"lon":30983,"lat":14559}}},{"delta":{"node-LL3":{"lon":30980,"lat":14563}}},{"delta":{"node-LL3":{"lon":30982,"lat":14562}}}]}}},"scale":0}},"id":{"id":33,"region":0},"direction":"0000000000001010"}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"ABCD","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":{"item":{"itis":513}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":308065}},"msgCnt":1}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"62048F79"},"requestID":"62048F79","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":21,"recordId":0,"serialNumber":21},"odeReceivedAt":"2019-03-12T19:50:31.733Z","schemaVersion":6,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2017-08-03T22:25:36.297Z","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"ABCD"}},"startDateTime":"2017-08-02T22:25:00.000Z","durationTime":1,"priority":0,"doNotUse2":0,"regions":[{"name":"Testing TIM","regulatorID":0,"segmentID":33,"anchorPosition":{"latitude":41.2500807,"longitude":-111.0093847,"elevation":2020.6969900289998},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"0000000000001010","description":"path","path":{"scale":0,"type":"ll","nodes":[{"delta":"node-LL3","nodeLat":0.0014506,"nodeLong":0.0031024},{"delta":"node-LL3","nodeLat":0.0014568,"nodeLong":0.0030974},{"delta":"node-LL3","nodeLat":0.0014559,"nodeLong":0.0030983},{"delta":"node-LL3","nodeLat":0.0014563,"nodeLong":0.0030980},{"delta":"node-LL3","nodeLat":0.0014562,"nodeLong":0.0030982}]}}],"doNotUse4":2,"doNotUse3":3,"content":"Advisory","items":["513"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":20,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":20},"sanitized":false,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","odeReceivedAt":"2019-03-12T19:50:30.318Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":309505,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":20207,"lat":412500807,"long":-1110093847},"name":"Testing TIM","laneWidth":700,"directionality":{"both":""},"description":{"path":{"offset":{"ll":{"nodes":{"NodeLL":[{"delta":{"node-LL3":{"lon":30982,"lat":14562}}},{"delta":{"node-LatLon":{"lon":-1110093847,"lat":412500807}}}]}}},"scale":0}},"id":{"id":33,"region":0},"direction":"0000000000001010"}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":308065}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":20,"recordId":0,"serialNumber":20},"odeReceivedAt":"2019-03-12T19:50:30.317Z","schemaVersion":6,"recordGeneratedAt":"2017-08-03T22:25:36.297Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":1,"timeStamp":"2017-08-03T22:25:36.297Z","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-08-02T22:25:00.000Z","durationTime":1,"priority":0,"doNotUse2":0,"regions":[{"name":"Testing TIM","regulatorID":0,"segmentID":33,"anchorPosition":{"latitude":41.2500807,"longitude":-111.0093847,"elevation":2020.6969900289998},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"0000000000001010","description":"path","path":{"scale":0,"type":"ll","nodes":[{"delta":"node-LL3","nodeLat":0.0014562,"nodeLong":0.0030982},{"delta":"node-LatLon","nodeLat":41.2500807,"nodeLong":-111.0093847}]}}],"doNotUse4":2,"doNotUse3":3,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":19,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":19},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:28.990Z"},"payload":{"data":{"AdvisorySituationData":{"recordID":"00000000","timeToLive":3,"serviceRegion":{"nwCorner":{"lat":449984590,"long":-1110408170},"seCorner":{"lat":411046740,"long":-1041113120}},"asdmDetails":{"advisoryMessage":{"Ieee1609Dot2Data":{"protocolVersion":3,"content":{"unsecuredData":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"doNotUse3":0,"doNotUse4":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}}}}},"startTime":{"month":6,"hour":17,"year":2017,"day":1,"minute":47},"stopTime":{"month":1,"hour":17,"year":2018,"day":1,"minute":47},"distType":"03","asdmType":2,"asdmID":"6D596E08"},"requestID":"6D596E08","groupID":"00000000","dialogID":156,"seqID":5}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"sdw":{"serviceRegion":{"nwCorner":{"latitude":44.998459,"longitude":-111.040817},"seCorner":{"latitude":41.104674,"longitude":-104.111312}},"ttl":"oneweek"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":19,"recordId":0,"serialNumber":19},"odeReceivedAt":"2019-03-12T19:50:28.988Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"doNotUse2":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"doNotUse4":2,"doNotUse3":3,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} +{"metadata":{"request":{"ode":{"verb":"POST","version":3},"rsus":{"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuRetries":0,"rsuTimeout":2000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuRetries":1,"rsuTimeout":1000,"rsuPassword":"*","rsuIndex":10}]},"snmp":{"mode":1,"deliverystop":"2018-01-01T17:47:11-05:15","rsuid":"00000083","deliverystart":"2017-06-01T17:47:11-05:00","enable":1,"channel":178,"msgid":31,"interval":2,"status":4}},"recordGeneratedBy":"TMC","schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":18,"streamId":"162a21ba-bd99-4225-ac9d-b3dc66d02439","bundleSize":1,"bundleId":18},"sanitized":false,"recordGeneratedAt":"2017-03-13T06:07:11Z","odeReceivedAt":"2019-03-12T19:50:26.827Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":102607,"packetID":"EC9C236B0000000000","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"elevation":9171,"lat":416784730,"long":-1087827750},"name":"bob","laneWidth":700,"directionality":{"both":""},"description":{"geometry":{"extent":1,"laneWidth":3300,"circle":{"center":{"elevation":9171,"lat":416784730,"long":-1087827750},"units":{"mile":""},"radius":15},"direction":1010101010101010}},"id":{"id":33,"region":23},"direction":1010101010101010}},"durationTime":22,"doNotUse3":0,"doNotUse4":0,"startYear":2017,"msgId":{"roadSignID":{"crc":"0000","viewAngle":1010101010101010,"mutcdCode":{"warning":""},"position":{"elevation":9171,"lat":416784730,"long":-1087827750}}},"priority":0,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":125}},{"item":{"text":"some text"}},{"item":{"itis":250}},{"item":{"text":98765}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":482327}},"msgCnt":13}}}},"dataType":"TravelerInformation"}} +{"metadata":{"request":{"ode":{"version":3,"verb":"POST"},"rsus":[{"rsuTarget":"127.0.0.1","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":0,"rsuTimeout":2000,"rsuIndex":10},{"rsuTarget":"127.0.0.2","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10},{"rsuTarget":"127.0.0.3","rsuUsername":"v3user","rsuPassword":"*","rsuRetries":1,"rsuTimeout":1000,"rsuIndex":10}],"snmp":{"rsuid":"00000083","msgid":31,"mode":1,"channel":178,"interval":2,"deliverystart":"2017-06-01T17:47:11-05:00","deliverystop":"2018-01-01T17:47:11-05:15","enable":1,"status":4}},"payloadType":"us.dot.its.jpo.ode.model.OdeMsgPayload","serialId":{"streamId":"5d45936b-b91f-4bb3-992f-7b1a80a751b8","bundleSize":1,"bundleId":18,"recordId":0,"serialNumber":18},"odeReceivedAt":"2019-03-12T19:50:26.823Z","schemaVersion":6,"recordGeneratedAt":"2017-03-13T06:07:11Z","recordGeneratedBy":"TMC","sanitized":false},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage","data":{"msgCnt":13,"timeStamp":"2017-03-13T01:07:11-05:00","packetID":"EC9C236B0000000000","urlB":"null","dataframes":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"viewAngle":"1010101010101010","mutcdCode":"warning","crc":"0000"}},"startDateTime":"2017-12-01T17:47:11-05:00","durationTime":22,"priority":0,"doNotUse2":0,"regions":[{"name":"bob","regulatorID":23,"segmentID":33,"anchorPosition":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"laneWidth":7,"directionality":"3","closedPath":false,"direction":"1010101010101010","description":"geometry","geometry":{"direction":"1010101010101010","extent":1,"laneWidth":33,"circle":{"position":{"latitude":41.678473,"longitude":-108.782775,"elevation":917.1432},"radius":15,"units":"7"}}}],"doNotUse4":2,"doNotUse3":3,"content":"Advisory","items":["125","some text","250","\u002798765"],"url":"null"}]}}} diff --git a/data/TIM_Message_Testing_Files/archive/README.md b/data/TIM_Message_Testing_Files/archive/README.md new file mode 100644 index 000000000..642a7bc4a --- /dev/null +++ b/data/TIM_Message_Testing_Files/archive/README.md @@ -0,0 +1,2 @@ +# Archive +The files in this directory have been archived. While fields from older versions of J2735 are present, these have not been updated as a result. diff --git a/data/TIM_Message_Testing_Files/deprecated/README.md b/data/TIM_Message_Testing_Files/deprecated/README.md index 4ef3de67f..86952b16d 100644 --- a/data/TIM_Message_Testing_Files/deprecated/README.md +++ b/data/TIM_Message_Testing_Files/deprecated/README.md @@ -1,4 +1,6 @@ # Deprecated TIM Message Testing Files The files in this directory are deprecated and should not be used for testing. They are kept here for reference only. -These files are deprecated because they do not get processed correctly at this time. \ No newline at end of file +These files are deprecated because they do not get processed correctly at this time. + +These files may contain fields in older versions of J2735. diff --git a/data/TIM_Message_Testing_Files/tim_path_LL_single_rsu_no_sdw.json b/data/TIM_Message_Testing_Files/tim_path_LL_single_rsu_no_sdw.json index e717473c0..e60a25dbe 100644 --- a/data/TIM_Message_Testing_Files/tim_path_LL_single_rsu_no_sdw.json +++ b/data/TIM_Message_Testing_Files/tim_path_LL_single_rsu_no_sdw.json @@ -47,7 +47,7 @@ { "startDateTime": "2017-08-02T22:25:00.000Z", "durationTime": 1, - "notUsed": "0", + "doNotUse1": 0, "frameType": "advisory", "msgId": { "roadSignID": { @@ -62,7 +62,7 @@ } }, "priority": "0", - "notUsed1": "0", + "doNotUse2": 0, "regions": [ { "name": "Testing TIM", @@ -96,8 +96,8 @@ "direction": "0000000000001010" } ], - "sspMsgTypes": "2", - "sspMsgContent": "3", + "doNotUse4": 0, + "doNotUse3": 0, "content": "Advisory", "items": ["125","some text", "250", "'98765"], "url": "null" diff --git a/data/TIM_Message_Testing_Files/tim_path_multiRSU_hexCRC.json b/data/TIM_Message_Testing_Files/tim_path_multiRSU_hexCRC.json index fca9e6364..8c03329ef 100644 --- a/data/TIM_Message_Testing_Files/tim_path_multiRSU_hexCRC.json +++ b/data/TIM_Message_Testing_Files/tim_path_multiRSU_hexCRC.json @@ -60,7 +60,7 @@ { "startDateTime": "2017-08-02T22:25:00.000Z", "durationTime": 1, - "notUsed": "0", + "doNotUse1": 0, "frameType": "advisory", "msgId": { "roadSignID": { @@ -75,7 +75,7 @@ } }, "priority": "0", - "notUsed1": "0", + "doNotUse2": 0, "regions": [ { "name": "Testing TIM", @@ -124,8 +124,8 @@ "direction": "0000000000001010" } ], - "sspMsgTypes": "2", - "sspMsgContent": "3", + "doNotUse4": 0, + "doNotUse3": 0, "content": "Advisory", "items": [ "513" diff --git a/data/TIM_Message_Testing_Files/tim_path_singleRSU.json b/data/TIM_Message_Testing_Files/tim_path_singleRSU.json index be1f0ca8b..3ece97c61 100644 --- a/data/TIM_Message_Testing_Files/tim_path_singleRSU.json +++ b/data/TIM_Message_Testing_Files/tim_path_singleRSU.json @@ -44,7 +44,7 @@ { "startDateTime": "2017-08-02T22:25:00.000Z", "durationTime": 1, - "notUsed": "0", + "doNotUse1": 0, "frameType": "advisory", "msgId": { "roadSignID": { @@ -59,7 +59,7 @@ } }, "priority": "0", - "notUsed1": "0", + "doNotUse2": 0, "regions": [ { "name": "Testing TIM", @@ -108,8 +108,8 @@ "direction": "0000000000001010" } ], - "sspMsgTypes": "2", - "sspMsgContent": "3", + "doNotUse4": 0, + "doNotUse3": 0, "content": "Advisory", "items": [ "513" diff --git a/data/TIM_Message_Testing_Files/tim_path_xy_node_any_single_rsu_no_sdw.json b/data/TIM_Message_Testing_Files/tim_path_xy_node_any_single_rsu_no_sdw.json index 1c8e939b0..fc1bd5508 100644 --- a/data/TIM_Message_Testing_Files/tim_path_xy_node_any_single_rsu_no_sdw.json +++ b/data/TIM_Message_Testing_Files/tim_path_xy_node_any_single_rsu_no_sdw.json @@ -31,7 +31,7 @@ { "startDateTime": "2017-08-02T22:25:00.000Z", "durationTime": 1, - "notUsed": "0", + "doNotUse1": 0, "frameType": "advisory", "msgId": { "roadSignID": { @@ -46,7 +46,7 @@ } }, "priority": "0", - "notUsed1": "0", + "doNotUse2": 0, "regions": [ { "name": "Testing TIM", @@ -135,8 +135,8 @@ "direction": "0000000000001010" } ], - "sspMsgTypes": "2", - "sspMsgContent": "3", + "doNotUse4": 0, + "doNotUse3": 0, "content": "Advisory", "items": ["125","some text", "250", "'98765"], "url": "null" diff --git a/data/dnMsg.json b/data/dnMsg.json index 5719c38e1..6ff36591a 100644 --- a/data/dnMsg.json +++ b/data/dnMsg.json @@ -1 +1 @@ -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"OBU","receivedMessageDetails":{"locationData":{"elevation":1372.4,"heading":297.3,"latitude":40.5655211,"speed":0.46,"longitude":-105.0323263},"rxSource":"NA"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":14742,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":1,"bundleId":73},"sanitized":false,"recordGeneratedAt":"2018-05-02T16:47:45.603Z","recordType":"dnMsg","logFileName":"dnMsg.gz","odeReceivedAt":"2019-04-09T18:08:17.818Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":174827,"packetID":"D3BAFF020000000000","dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"anchor":{"elevation":14742,"lat":405662581,"long":-1050326099},"laneWidth":400,"directionality":{"forward":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050329714,"lat":405662567}}},{"delta":{"node-LatLon":{"lon":-1050335237,"lat":405662769}}},{"delta":{"node-LatLon":{"lon":-1050335993,"lat":405663179}}},{"delta":{"node-LatLon":{"lon":-1050336397,"lat":405664057}}},{"delta":{"node-LatLon":{"lon":-1050336440,"lat":405667220}}},{"delta":{"node-LatLon":{"lon":-1050336660,"lat":405671451}}},{"delta":{"node-LatLon":{"lon":-1050336938,"lat":405672504}}},{"delta":{"node-LatLon":{"lon":-1050337672,"lat":405672940}}}]}}}}},"direction":1111111111111111}},"durationTime":2880,"notUsed2":0,"notUsed3":0,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"msgId":{"furtherInfoID":"0214"},"startTime":174826,"priority":7,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":532}},{"item":{"itis":531}},{"item":{"text":"User Initiated Distress"}},{"item":{"text":"Vehicle-Class: Unknown"}}]}}}},"msgCnt":51}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"OBU","receivedMessageDetails":{"locationData":{"elevation":1372.4,"heading":297.3,"latitude":40.5655211,"speed":0.46,"longitude":-105.0323263},"rxSource":"NA"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":14742,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":1,"bundleId":73},"sanitized":false,"recordGeneratedAt":"2018-05-02T16:47:45.603Z","recordType":"dnMsg","logFileName":"dnMsg.gz","odeReceivedAt":"2019-04-09T18:08:17.818Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":174827,"packetID":"D3BAFF020000000000","dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"anchor":{"elevation":14742,"lat":405662581,"long":-1050326099},"laneWidth":400,"directionality":{"forward":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050329714,"lat":405662567}}},{"delta":{"node-LatLon":{"lon":-1050335237,"lat":405662769}}},{"delta":{"node-LatLon":{"lon":-1050335993,"lat":405663179}}},{"delta":{"node-LatLon":{"lon":-1050336397,"lat":405664057}}},{"delta":{"node-LatLon":{"lon":-1050336440,"lat":405667220}}},{"delta":{"node-LatLon":{"lon":-1050336660,"lat":405671451}}},{"delta":{"node-LatLon":{"lon":-1050336938,"lat":405672504}}},{"delta":{"node-LatLon":{"lon":-1050337672,"lat":405672940}}}]}}}}},"direction":1111111111111111}},"durationTime":2880,"doNotUse3":0,"doNotUse4":0,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"msgId":{"furtherInfoID":"0214"},"startTime":174826,"priority":7,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":532}},{"item":{"itis":531}},{"item":{"text":"User Initiated Distress"}},{"item":{"text":"Vehicle-Class: Unknown"}}]}}}},"msgCnt":51}}}},"dataType":"TravelerInformation"}} diff --git a/data/rxMsg_TIM_Asn1DecoderOutput.xml b/data/rxMsg_TIM_Asn1DecoderOutput.xml index a1eec0eb3..14c7d46a2 100644 --- a/data/rxMsg_TIM_Asn1DecoderOutput.xml +++ b/data/rxMsg_TIM_Asn1DecoderOutput.xml @@ -51,7 +51,7 @@ 00000000003616371F - 0 + 0 @@ -72,7 +72,7 @@ 359511 10080 6 - 0 + 0 @@ -116,8 +116,8 @@ - 0 - 0 + 0 + 0 diff --git a/data/rxMsg_TIM_GeneratedBy_RSU.json b/data/rxMsg_TIM_GeneratedBy_RSU.json index 623b84716..0a1e68768 100644 --- a/data/rxMsg_TIM_GeneratedBy_RSU.json +++ b/data/rxMsg_TIM_GeneratedBy_RSU.json @@ -1,243 +1,243 @@ -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519354,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":239,"serialNumber":15425,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:35.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":234,"serialNumber":15420,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.491Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519355,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":242,"serialNumber":15428,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:36.195Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519355,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":241,"serialNumber":15427,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:35.996Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519354,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":240,"serialNumber":15426,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:35.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":238,"serialNumber":15424,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:34.293Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":237,"serialNumber":15423,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:34.192Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":236,"serialNumber":15422,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.994Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":235,"serialNumber":15421,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.890Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":233,"serialNumber":15419,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.290Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519347,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":232,"serialNumber":15418,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.101Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519347,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":231,"serialNumber":15417,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.992Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519347,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":230,"serialNumber":15416,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.992Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519347,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":229,"serialNumber":15415,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.691Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":228,"serialNumber":15414,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.490Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":227,"serialNumber":15413,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.389Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":226,"serialNumber":15412,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519334,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":225,"serialNumber":15411,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:30.592Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519334,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":224,"serialNumber":15410,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:30.592Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519332,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":223,"serialNumber":15409,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:30.292Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151933,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":222,"serialNumber":15408,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:30.104Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":221,"serialNumber":15407,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.892Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":220,"serialNumber":15406,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":219,"serialNumber":15405,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":218,"serialNumber":15404,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":217,"serialNumber":15403,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.392Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519324,"speed":0.04,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":216,"serialNumber":15402,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.194Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":215,"serialNumber":15401,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:28.902Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151932,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":214,"serialNumber":15400,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:28.793Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151932,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":213,"serialNumber":15399,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:28.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519304,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":212,"serialNumber":15398,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.994Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519302,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":211,"serialNumber":15397,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.15193,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":210,"serialNumber":15396,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.15193,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":209,"serialNumber":15395,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.593Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519299,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":208,"serialNumber":15394,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.290Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519296,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":207,"serialNumber":15393,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.101Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519295,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":206,"serialNumber":15392,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.892Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519295,"speed":0.02,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":205,"serialNumber":15391,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.792Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519294,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":204,"serialNumber":15390,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.792Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519294,"speed":0.02,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":203,"serialNumber":15389,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519292,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":202,"serialNumber":15388,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.292Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519292,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":201,"serialNumber":15387,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.191Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151929,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":200,"serialNumber":15386,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.100Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":199,"serialNumber":15385,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:23.391Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519275,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":196,"serialNumber":15382,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.891Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519275,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":197,"serialNumber":15383,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:23.100Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519277,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":198,"serialNumber":15384,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:23.289Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.04,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":195,"serialNumber":15381,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":194,"serialNumber":15380,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.491Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0.02,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":193,"serialNumber":15379,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.292Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":192,"serialNumber":15378,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.193Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":191,"serialNumber":15377,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.193Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":190,"serialNumber":15376,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:21.893Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":189,"serialNumber":15375,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:21.692Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":185,"serialNumber":15371,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.690Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":188,"serialNumber":15374,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:21.590Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":187,"serialNumber":15373,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:21.490Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":186,"serialNumber":15372,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.788Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":184,"serialNumber":15370,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.491Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":183,"serialNumber":15369,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.293Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":182,"serialNumber":15368,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.099Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":181,"serialNumber":15367,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.890Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":180,"serialNumber":15366,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.690Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":179,"serialNumber":15365,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.588Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519267,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":178,"serialNumber":15364,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.588Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":173,"serialNumber":15359,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:16.192Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519267,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":177,"serialNumber":15363,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.293Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519267,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":176,"serialNumber":15362,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.101Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":175,"serialNumber":15361,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:17.997Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":174,"serialNumber":15360,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:17.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":172,"serialNumber":15358,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:16.095Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":162,"serialNumber":15348,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.290Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":171,"serialNumber":15357,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":170,"serialNumber":15356,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.689Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":169,"serialNumber":15355,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.494Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":168,"serialNumber":15354,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":167,"serialNumber":15353,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.094Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":166,"serialNumber":15352,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.991Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.06,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":165,"serialNumber":15351,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":164,"serialNumber":15350,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.490Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":163,"serialNumber":15349,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.387Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":152,"serialNumber":15338,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567223},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":161,"serialNumber":15347,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:12.594Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":160,"serialNumber":15346,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:12.492Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":159,"serialNumber":15345,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:12.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":158,"serialNumber":15344,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:12.095Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":157,"serialNumber":15343,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.893Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":156,"serialNumber":15342,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.689Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":155,"serialNumber":15341,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.493Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":153,"serialNumber":15339,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.394Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":154,"serialNumber":15340,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.394Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":150,"serialNumber":15336,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:10.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":151,"serialNumber":15337,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:10.893Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":149,"serialNumber":15335,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:10.693Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0.02,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":148,"serialNumber":15334,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.994Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0.02,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":147,"serialNumber":15333,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0.02,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":146,"serialNumber":15332,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0.02,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":145,"serialNumber":15331,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.494Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519296,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":136,"serialNumber":15322,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:05.392Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":144,"serialNumber":15330,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":143,"serialNumber":15329,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.098Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519287,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":142,"serialNumber":15328,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519287,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":141,"serialNumber":15327,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519287,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":140,"serialNumber":15326,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519289,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":139,"serialNumber":15325,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.295Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519289,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":138,"serialNumber":15324,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.194Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519289,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":137,"serialNumber":15323,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.095Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519296,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":135,"serialNumber":15321,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:05.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519299,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":134,"serialNumber":15320,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:05.099Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519305,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":125,"serialNumber":15311,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:03.595Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519299,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":133,"serialNumber":15319,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.15193,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":132,"serialNumber":15318,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.15193,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":131,"serialNumber":15317,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.493Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519302,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":130,"serialNumber":15316,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519302,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":129,"serialNumber":15315,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.194Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519304,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":128,"serialNumber":15314,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.098Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519304,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":127,"serialNumber":15313,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:03.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519305,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":126,"serialNumber":15312,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:03.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519315,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":123,"serialNumber":15309,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:01.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519305,"speed":0.02,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":124,"serialNumber":15310,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:03.495Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519319,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":120,"serialNumber":15306,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:01.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519315,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":122,"serialNumber":15308,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:01.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519317,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":121,"serialNumber":15307,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:01.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151932,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":119,"serialNumber":15305,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":118,"serialNumber":15304,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":117,"serialNumber":15303,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.587Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":113,"serialNumber":15299,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":116,"serialNumber":15302,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.492Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519324,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":115,"serialNumber":15301,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":114,"serialNumber":15300,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.098Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":112,"serialNumber":15298,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:59.893Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519339,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":111,"serialNumber":15297,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:58.195Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519339,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":110,"serialNumber":15296,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:58.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151934,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":109,"serialNumber":15295,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.890Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151934,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":108,"serialNumber":15294,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.696Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":107,"serialNumber":15293,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.493Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":106,"serialNumber":15292,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.295Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":104,"serialNumber":15290,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.994Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":105,"serialNumber":15291,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":103,"serialNumber":15289,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519344,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":102,"serialNumber":15288,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519344,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":101,"serialNumber":15287,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.489Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519344,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":100,"serialNumber":15286,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.389Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519344,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":99,"serialNumber":15285,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.295Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":98,"serialNumber":15284,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:54.594Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":97,"serialNumber":15283,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:54.494Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":96,"serialNumber":15282,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:54.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519347,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":94,"serialNumber":15280,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519347,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":93,"serialNumber":15279,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.688Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519347,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":95,"serialNumber":15281,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:54.094Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":92,"serialNumber":15278,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.495Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":80,"serialNumber":15266,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.093Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":91,"serialNumber":15277,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.395Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":90,"serialNumber":15276,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":89,"serialNumber":15275,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.098Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":88,"serialNumber":15274,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:52.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":87,"serialNumber":15273,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:52.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":86,"serialNumber":15272,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:52.693Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":85,"serialNumber":15271,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.985Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":84,"serialNumber":15270,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.885Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":83,"serialNumber":15269,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.689Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":82,"serialNumber":15268,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.588Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":81,"serialNumber":15267,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.288Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":79,"serialNumber":15265,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":78,"serialNumber":15264,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.791Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":76,"serialNumber":15262,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":77,"serialNumber":15263,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.791Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":75,"serialNumber":15261,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.288Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":70,"serialNumber":15256,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":69,"serialNumber":15255,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.781Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":74,"serialNumber":15260,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.188Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":73,"serialNumber":15259,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.092Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":72,"serialNumber":15258,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:47.386Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":71,"serialNumber":15257,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:47.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":68,"serialNumber":15254,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":67,"serialNumber":15253,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.286Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":66,"serialNumber":15252,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.186Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":65,"serialNumber":15251,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:45.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":64,"serialNumber":15250,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:45.688Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":63,"serialNumber":15249,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:45.588Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519347,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":62,"serialNumber":15248,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:45.485Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":61,"serialNumber":15247,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.787Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":60,"serialNumber":15246,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.787Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0.04,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":59,"serialNumber":15245,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":58,"serialNumber":15244,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.288Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":57,"serialNumber":15243,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.088Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":56,"serialNumber":15242,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.989Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":55,"serialNumber":15241,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.684Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":54,"serialNumber":15240,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.583Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":53,"serialNumber":15239,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.583Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":52,"serialNumber":15238,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":51,"serialNumber":15237,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.089Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":50,"serialNumber":15236,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:41.989Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":49,"serialNumber":15235,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:41.887Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":48,"serialNumber":15234,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:40.189Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":47,"serialNumber":15233,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:40.093Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":46,"serialNumber":15232,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.886Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519344,"speed":0,"longitude":-104.6567229},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":45,"serialNumber":15231,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.688Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519342,"speed":0,"longitude":-104.6567229},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":44,"serialNumber":15230,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.490Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519342,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":43,"serialNumber":15229,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.389Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151934,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":42,"serialNumber":15228,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.093Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151934,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":41,"serialNumber":15227,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.990Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519339,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":40,"serialNumber":15226,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.990Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519339,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":39,"serialNumber":15225,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519337,"speed":0,"longitude":-104.6567224},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":38,"serialNumber":15224,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.389Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519337,"speed":0,"longitude":-104.6567224},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":37,"serialNumber":15223,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.291Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151933,"speed":0.04,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":36,"serialNumber":15222,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:36.586Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151933,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":35,"serialNumber":15221,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:36.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":34,"serialNumber":15220,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:36.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0.02,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":33,"serialNumber":15219,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:36.089Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":32,"serialNumber":15218,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.886Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":31,"serialNumber":15217,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.487Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":30,"serialNumber":15216,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.387Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":29,"serialNumber":15215,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.387Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":28,"serialNumber":15214,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.088Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":27,"serialNumber":15213,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:34.886Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":26,"serialNumber":15212,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:34.788Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":25,"serialNumber":15211,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:34.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":24,"serialNumber":15210,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.983Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":23,"serialNumber":15209,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.886Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":22,"serialNumber":15208,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.587Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":21,"serialNumber":15207,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":20,"serialNumber":15206,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.186Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":19,"serialNumber":15205,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.887Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":18,"serialNumber":15204,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.887Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":15,"serialNumber":15201,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":17,"serialNumber":15203,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.787Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":16,"serialNumber":15202,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.6567222},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":10,"serialNumber":15196,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:29.096Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":14,"serialNumber":15200,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.186Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":13,"serialNumber":15199,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.087Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":12,"serialNumber":15198,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:29.387Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.6567222},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":11,"serialNumber":15197,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:29.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":8,"serialNumber":15194,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567222},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":9,"serialNumber":15195,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.988Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":7,"serialNumber":15193,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.487Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":6,"serialNumber":15192,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":5,"serialNumber":15191,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.187Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":4,"serialNumber":15190,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.187Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":3,"serialNumber":15189,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:27.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":2,"serialNumber":15188,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:27.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":1,"serialNumber":15187,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:27.587Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":15186,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:27.484Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519354,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":239,"serialNumber":15425,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:35.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":234,"serialNumber":15420,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.491Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519355,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":242,"serialNumber":15428,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:36.195Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519355,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":241,"serialNumber":15427,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:35.996Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519354,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":240,"serialNumber":15426,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:35.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":238,"serialNumber":15424,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:34.293Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":237,"serialNumber":15423,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:34.192Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":236,"serialNumber":15422,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.994Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":235,"serialNumber":15421,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.890Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":233,"serialNumber":15419,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.290Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519347,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":232,"serialNumber":15418,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:33.101Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519347,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":231,"serialNumber":15417,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.992Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519347,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":230,"serialNumber":15416,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.992Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519347,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":229,"serialNumber":15415,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.691Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":228,"serialNumber":15414,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.490Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":227,"serialNumber":15413,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.389Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":226,"serialNumber":15412,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:32.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519334,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":225,"serialNumber":15411,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:30.592Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519334,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":224,"serialNumber":15410,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:30.592Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519332,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":223,"serialNumber":15409,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:30.292Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151933,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":222,"serialNumber":15408,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:30.104Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":221,"serialNumber":15407,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.892Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":220,"serialNumber":15406,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":219,"serialNumber":15405,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":218,"serialNumber":15404,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":217,"serialNumber":15403,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.392Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519324,"speed":0.04,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":216,"serialNumber":15402,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:29.194Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":215,"serialNumber":15401,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:28.902Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151932,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":214,"serialNumber":15400,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:28.793Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151932,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":213,"serialNumber":15399,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:28.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519304,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":212,"serialNumber":15398,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.994Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519302,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":211,"serialNumber":15397,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.15193,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":210,"serialNumber":15396,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.15193,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":209,"serialNumber":15395,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.593Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519299,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":208,"serialNumber":15394,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.290Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519296,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":207,"serialNumber":15393,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:26.101Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519295,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":206,"serialNumber":15392,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.892Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519295,"speed":0.02,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":205,"serialNumber":15391,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.792Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519294,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":204,"serialNumber":15390,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.792Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519294,"speed":0.02,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":203,"serialNumber":15389,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519292,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":202,"serialNumber":15388,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.292Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519292,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":201,"serialNumber":15387,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.191Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151929,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":200,"serialNumber":15386,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:25.100Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":199,"serialNumber":15385,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:23.391Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519275,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":196,"serialNumber":15382,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.891Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519275,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":197,"serialNumber":15383,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:23.100Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519277,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":198,"serialNumber":15384,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:23.289Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.04,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":195,"serialNumber":15381,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":194,"serialNumber":15380,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.491Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0.02,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":193,"serialNumber":15379,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.292Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":192,"serialNumber":15378,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.193Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":191,"serialNumber":15377,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:22.193Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":190,"serialNumber":15376,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:21.893Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":189,"serialNumber":15375,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:21.692Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":185,"serialNumber":15371,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.690Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":188,"serialNumber":15374,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:21.590Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":187,"serialNumber":15373,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:21.490Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519272,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":186,"serialNumber":15372,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.788Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":184,"serialNumber":15370,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.491Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151927,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":183,"serialNumber":15369,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.293Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":182,"serialNumber":15368,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:19.099Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":181,"serialNumber":15367,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.890Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":180,"serialNumber":15366,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.690Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":179,"serialNumber":15365,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.588Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519267,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":178,"serialNumber":15364,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.588Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":173,"serialNumber":15359,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:16.192Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519267,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":177,"serialNumber":15363,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.293Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519267,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":176,"serialNumber":15362,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:18.101Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":175,"serialNumber":15361,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:17.997Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519269,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":174,"serialNumber":15360,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:17.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":172,"serialNumber":15358,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:16.095Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":162,"serialNumber":15348,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.290Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":171,"serialNumber":15357,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":170,"serialNumber":15356,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.689Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":169,"serialNumber":15355,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.494Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":168,"serialNumber":15354,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.048Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":167,"serialNumber":15353,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:15.094Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":166,"serialNumber":15352,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.991Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.06,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":165,"serialNumber":15351,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":164,"serialNumber":15350,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.490Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519274,"speed":0.02,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":163,"serialNumber":15349,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:14.387Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":152,"serialNumber":15338,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567223},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":161,"serialNumber":15347,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:12.594Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":160,"serialNumber":15346,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:12.492Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":159,"serialNumber":15345,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:12.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":158,"serialNumber":15344,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:12.095Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":157,"serialNumber":15343,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.893Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":156,"serialNumber":15342,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.689Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":155,"serialNumber":15341,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.493Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":153,"serialNumber":15339,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.394Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":154,"serialNumber":15340,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:11.394Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":150,"serialNumber":15336,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:10.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":151,"serialNumber":15337,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:10.893Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519278,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":149,"serialNumber":15335,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:10.693Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0.02,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":148,"serialNumber":15334,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.994Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0.02,"longitude":-104.6567213},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":147,"serialNumber":15333,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0.02,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":146,"serialNumber":15332,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0.02,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":145,"serialNumber":15331,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.494Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519296,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":136,"serialNumber":15322,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:05.392Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":144,"serialNumber":15330,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519284,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":143,"serialNumber":15329,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:08.098Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519287,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":142,"serialNumber":15328,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519287,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":141,"serialNumber":15327,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519287,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":140,"serialNumber":15326,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519289,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":139,"serialNumber":15325,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.295Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519289,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":138,"serialNumber":15324,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.194Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519289,"speed":0,"longitude":-104.6567211},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":137,"serialNumber":15323,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:07.095Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519296,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":135,"serialNumber":15321,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:05.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519299,"speed":0,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":134,"serialNumber":15320,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:05.099Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519305,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":125,"serialNumber":15311,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:03.595Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519299,"speed":0.02,"longitude":-104.6567216},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":133,"serialNumber":15319,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.15193,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":132,"serialNumber":15318,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.15193,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":131,"serialNumber":15317,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.493Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519302,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":130,"serialNumber":15316,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519302,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":129,"serialNumber":15315,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.194Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519304,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":128,"serialNumber":15314,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:04.098Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519304,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":127,"serialNumber":15313,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:03.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519305,"speed":0,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":126,"serialNumber":15312,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:03.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519315,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":123,"serialNumber":15309,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:01.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519305,"speed":0.02,"longitude":-104.6567221},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":124,"serialNumber":15310,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:03.495Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519319,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":120,"serialNumber":15306,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:01.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519315,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":122,"serialNumber":15308,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:01.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519317,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":121,"serialNumber":15307,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:01.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151932,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":119,"serialNumber":15305,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":118,"serialNumber":15304,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.694Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":117,"serialNumber":15303,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.587Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":113,"serialNumber":15299,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":116,"serialNumber":15302,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.492Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519324,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":115,"serialNumber":15301,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":114,"serialNumber":15300,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:01:00.098Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":112,"serialNumber":15298,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:59.893Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519339,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":111,"serialNumber":15297,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:58.195Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519339,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":110,"serialNumber":15296,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:58.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151934,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":109,"serialNumber":15295,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.890Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151934,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":108,"serialNumber":15294,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.696Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":107,"serialNumber":15293,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.493Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":106,"serialNumber":15292,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.295Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":104,"serialNumber":15290,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.994Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":105,"serialNumber":15291,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:57.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519342,"speed":0.02,"longitude":-104.656724},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":103,"serialNumber":15289,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519344,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":102,"serialNumber":15288,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519344,"speed":0,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":101,"serialNumber":15287,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.489Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519344,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":100,"serialNumber":15286,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.389Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519344,"speed":0.02,"longitude":-104.6567238},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":99,"serialNumber":15285,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:56.295Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":98,"serialNumber":15284,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:54.594Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":97,"serialNumber":15283,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:54.494Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":96,"serialNumber":15282,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:54.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519347,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":94,"serialNumber":15280,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519347,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":93,"serialNumber":15279,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.688Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519347,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":95,"serialNumber":15281,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:54.094Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":92,"serialNumber":15278,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.495Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":80,"serialNumber":15266,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.093Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":91,"serialNumber":15277,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.395Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":90,"serialNumber":15276,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.294Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":89,"serialNumber":15275,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:53.098Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":88,"serialNumber":15274,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:52.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":87,"serialNumber":15273,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:52.794Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.047Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567235},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":86,"serialNumber":15272,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:52.693Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":85,"serialNumber":15271,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.985Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.1519349,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":84,"serialNumber":15270,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.885Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":83,"serialNumber":15269,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.689Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":82,"serialNumber":15268,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.588Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":81,"serialNumber":15267,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:50.288Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1811,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":79,"serialNumber":15265,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":78,"serialNumber":15264,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.791Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":76,"serialNumber":15262,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.6567233},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":77,"serialNumber":15263,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.791Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":75,"serialNumber":15261,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.288Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":70,"serialNumber":15256,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":69,"serialNumber":15255,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.781Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":74,"serialNumber":15260,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.188Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":73,"serialNumber":15259,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:49.092Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":72,"serialNumber":15258,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:47.386Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":71,"serialNumber":15257,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:47.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.151935,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":68,"serialNumber":15254,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":67,"serialNumber":15253,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.286Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":66,"serialNumber":15252,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:46.186Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":65,"serialNumber":15251,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:45.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":64,"serialNumber":15250,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:45.688Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519349,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":63,"serialNumber":15249,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:45.588Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519347,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":62,"serialNumber":15248,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:45.485Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":61,"serialNumber":15247,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.787Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":60,"serialNumber":15246,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.787Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0.04,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":59,"serialNumber":15245,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.488Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":58,"serialNumber":15244,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.288Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":57,"serialNumber":15243,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:43.088Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":56,"serialNumber":15242,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.989Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":55,"serialNumber":15241,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.684Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":54,"serialNumber":15240,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.583Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":53,"serialNumber":15239,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.583Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":52,"serialNumber":15238,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":51,"serialNumber":15237,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:42.089Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0.02,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":50,"serialNumber":15236,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:41.989Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":49,"serialNumber":15235,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:41.887Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":48,"serialNumber":15234,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:40.189Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":47,"serialNumber":15233,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:40.093Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519345,"speed":0,"longitude":-104.656723},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":46,"serialNumber":15232,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.886Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519344,"speed":0,"longitude":-104.6567229},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":45,"serialNumber":15231,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.688Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519342,"speed":0,"longitude":-104.6567229},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":44,"serialNumber":15230,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.490Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519342,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":43,"serialNumber":15229,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.389Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151934,"speed":0,"longitude":-104.6567228},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":42,"serialNumber":15228,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:39.093Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151934,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":41,"serialNumber":15227,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.990Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519339,"speed":0,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":40,"serialNumber":15226,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.990Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519339,"speed":0.02,"longitude":-104.6567226},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":39,"serialNumber":15225,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519337,"speed":0,"longitude":-104.6567224},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":38,"serialNumber":15224,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.389Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519337,"speed":0,"longitude":-104.6567224},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":37,"serialNumber":15223,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:38.291Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151933,"speed":0.04,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":36,"serialNumber":15222,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:36.586Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.151933,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":35,"serialNumber":15221,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:36.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":34,"serialNumber":15220,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:36.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0.02,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":33,"serialNumber":15219,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:36.089Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.046Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519329,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":32,"serialNumber":15218,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.886Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":31,"serialNumber":15217,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.487Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":30,"serialNumber":15216,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.387Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":29,"serialNumber":15215,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.387Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":28,"serialNumber":15214,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:35.088Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":27,"serialNumber":15213,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:34.886Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":26,"serialNumber":15212,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:34.788Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":25,"serialNumber":15211,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:34.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567215},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":24,"serialNumber":15210,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.983Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":23,"serialNumber":15209,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.886Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":22,"serialNumber":15208,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.587Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":21,"serialNumber":15207,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567217},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":20,"serialNumber":15206,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:32.186Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":19,"serialNumber":15205,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.887Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":18,"serialNumber":15204,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.887Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":15,"serialNumber":15201,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":17,"serialNumber":15203,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.787Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":16,"serialNumber":15202,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.486Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.6567222},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":10,"serialNumber":15196,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:29.096Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000081AAA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411573054,"long":-1044928436},"name":"eastbound_I-80_379.0_380.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}},{"delta":{"node-LatLon":{"lon":-1044890201,"lat":411572261}}},{"delta":{"node-LatLon":{"lon":-1044871091,"lat":411571850}}},{"delta":{"node-LatLon":{"lon":-1044851981,"lat":411571457}}},{"delta":{"node-LatLon":{"lon":-1044832871,"lat":411571067}}},{"delta":{"node-LatLon":{"lon":-1044813761,"lat":411570655}}},{"delta":{"node-LatLon":{"lon":-1044794652,"lat":411570244}}},{"delta":{"node-LatLon":{"lon":-1044775541,"lat":411569866}}},{"delta":{"node-LatLon":{"lon":-1044756432,"lat":411569443}}},{"delta":{"node-LatLon":{"lon":-1044737322,"lat":411569043}}},{"delta":{"node-LatLon":{"lon":-1044718213,"lat":411568644}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411573054,"long":-1044928436}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0.02,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":14,"serialNumber":15200,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.186Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519322,"speed":0,"longitude":-104.6567218},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":13,"serialNumber":15199,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:31.087Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":12,"serialNumber":15198,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:29.387Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"00000000000010B214","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411410646,"long":-1046936213},"name":"westbound_I-80_368.0_367.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046967842,"lat":411394327}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1046999559,"lat":411378060}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047031205,"lat":411361716}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047062868,"lat":411345392}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047096133,"lat":411331062}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411410646,"long":-1046936213}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.6567222},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":11,"serialNumber":15197,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:29.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000035517","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":8,"serialNumber":15194,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000508A4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411245470,"long":-1047455202},"name":"westbound_I-80_365.0_364.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047493648,"lat":411244843}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047532627,"lat":411244194}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047571608,"lat":411243579}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047610587,"lat":411242950}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047649564,"lat":411242241}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411245470,"long":-1047455202}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.6567222},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":9,"serialNumber":15195,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.988Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000E2B9A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411581430,"long":-1046078669},"name":"eastbound_I-80_373.0_374.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046040217,"lat":411581285}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1046001979,"lat":411581155}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045963741,"lat":411580987}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045925503,"lat":411580842}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045887265,"lat":411580672}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411581430,"long":-1046078669}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":7,"serialNumber":15193,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.487Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456160,"packetID":"00000000000009E30E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4103}},{"item":{"itis":7986}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456160}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519325,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":6,"serialNumber":15192,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.287Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449042,"packetID":"000000000000030BDA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411577030,"long":-1045119733},"name":"eastbound_I-80_378.0_379.0_RSU-10.145.1.100_RW_4441","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045100561,"lat":411576627}}},{"delta":{"node-LatLon":{"lon":-1045081436,"lat":411576238}}},{"delta":{"node-LatLon":{"lon":-1045062310,"lat":411575844}}},{"delta":{"node-LatLon":{"lon":-1045043186,"lat":411575439}}},{"delta":{"node-LatLon":{"lon":-1045024060,"lat":411575050}}},{"delta":{"node-LatLon":{"lon":-1045004934,"lat":411574675}}},{"delta":{"node-LatLon":{"lon":-1044985812,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1044966686,"lat":411573844}}},{"delta":{"node-LatLon":{"lon":-1044947561,"lat":411573453}}},{"delta":{"node-LatLon":{"lon":-1044928436,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1044909311,"lat":411572667}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411577030,"long":-1045119733}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":5,"serialNumber":15191,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.187Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"00000000000001EA5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411575181,"long":-1044164112},"name":"eastbound_I-80_383.0_384.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1044145168,"lat":411575246}}},{"delta":{"node-LatLon":{"lon":-1044124211,"lat":411575175}}},{"delta":{"node-LatLon":{"lon":-1044103254,"lat":411575118}}},{"delta":{"node-LatLon":{"lon":-1044082297,"lat":411575045}}},{"delta":{"node-LatLon":{"lon":-1044061340,"lat":411574945}}},{"delta":{"node-LatLon":{"lon":-1044040382,"lat":411574869}}},{"delta":{"node-LatLon":{"lon":-1044019425,"lat":411574797}}},{"delta":{"node-LatLon":{"lon":-1043998468,"lat":411574703}}},{"delta":{"node-LatLon":{"lon":-1043977511,"lat":411574635}}},{"delta":{"node-LatLon":{"lon":-1043956554,"lat":411574561}}},{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411575181,"long":-1044164112}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":4,"serialNumber":15190,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:28.187Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":456159,"packetID":"000000000000037CC2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411560366,"long":-1046609462},"name":"westbound_I-80_360.0_370.0_RSU-10.145.1.100_P_Parking49251","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046627337,"lat":411555355}}},{"delta":{"node-LatLon":{"lon":-1046662642,"lat":411543930}}},{"delta":{"node-LatLon":{"lon":-1046696936,"lat":411530868}}},{"delta":{"node-LatLon":{"lon":-1046730136,"lat":411516279}}},{"delta":{"node-LatLon":{"lon":-1046762192,"lat":411500289}}},{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}},{"delta":{"node-LatLon":{"lon":-1046983702,"lat":411386195}}},{"delta":{"node-LatLon":{"lon":-1047015354,"lat":411369858}}},{"delta":{"node-LatLon":{"lon":-1047047036,"lat":411353553}}},{"delta":{"node-LatLon":{"lon":-1047079141,"lat":411337750}}},{"delta":{"node-LatLon":{"lon":-1047113459,"lat":411324878}}},{"delta":{"node-LatLon":{"lon":-1047148107,"lat":411312583}}},{"delta":{"node-LatLon":{"lon":-1047182765,"lat":411300305}}},{"delta":{"node-LatLon":{"lon":-1047217414,"lat":411288015}}},{"delta":{"node-LatLon":{"lon":-1047252075,"lat":411275744}}},{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}},{"delta":{"node-LatLon":{"lon":-1047513139,"lat":411244544}}},{"delta":{"node-LatLon":{"lon":-1047552117,"lat":411243884}}},{"delta":{"node-LatLon":{"lon":-1047591098,"lat":411243275}}},{"delta":{"node-LatLon":{"lon":-1047630076,"lat":411242612}}},{"delta":{"node-LatLon":{"lon":-1047669050,"lat":411241839}}},{"delta":{"node-LatLon":{"lon":-1047716034,"lat":411239159}}},{"delta":{"node-LatLon":{"lon":-1047754428,"lat":411234150}}},{"delta":{"node-LatLon":{"lon":-1047792686,"lat":411228560}}},{"delta":{"node-LatLon":{"lon":-1047830949,"lat":411222991}}},{"delta":{"node-LatLon":{"lon":-1047869197,"lat":411217366}}},{"delta":{"node-LatLon":{"lon":-1047906232,"lat":411211994}}},{"delta":{"node-LatLon":{"lon":-1047943264,"lat":411206611}}},{"delta":{"node-LatLon":{"lon":-1047980283,"lat":411201179}}},{"delta":{"node-LatLon":{"lon":-1048017303,"lat":411195751}}},{"delta":{"node-LatLon":{"lon":-1048054337,"lat":411190378}}},{"delta":{"node-LatLon":{"lon":-1048091850,"lat":411184891}}},{"delta":{"node-LatLon":{"lon":-1048129373,"lat":411179446}}},{"delta":{"node-LatLon":{"lon":-1048166879,"lat":411173932}}},{"delta":{"node-LatLon":{"lon":-1048204394,"lat":411168456}}},{"delta":{"node-LatLon":{"lon":-1048242230,"lat":411164679}}},{"delta":{"node-LatLon":{"lon":-1048280747,"lat":411164538}}},{"delta":{"node-LatLon":{"lon":-1048319268,"lat":411164579}}},{"delta":{"node-LatLon":{"lon":-1048357788,"lat":411164610}}},{"delta":{"node-LatLon":{"lon":-1048396210,"lat":411162963}}},{"delta":{"node-LatLon":{"lon":-1048433676,"lat":411156324}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":120,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411560366,"long":-1046609462}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":7986}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":456159}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":3,"serialNumber":15189,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:27.888Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449043,"packetID":"0000000000000CCD74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411574561,"long":-1043956554},"name":"eastbound_I-80_384.0_385.0_RSU-10.145.1.100_RW_4444","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1043935597,"lat":411574492}}},{"delta":{"node-LatLon":{"lon":-1043918216,"lat":411574420}}},{"delta":{"node-LatLon":{"lon":-1043900835,"lat":411574359}}},{"delta":{"node-LatLon":{"lon":-1043883454,"lat":411574286}}},{"delta":{"node-LatLon":{"lon":-1043866073,"lat":411574217}}},{"delta":{"node-LatLon":{"lon":-1043848693,"lat":411574157}}},{"delta":{"node-LatLon":{"lon":-1043831312,"lat":411574075}}},{"delta":{"node-LatLon":{"lon":-1043813931,"lat":411574033}}},{"delta":{"node-LatLon":{"lon":-1043796550,"lat":411573959}}},{"delta":{"node-LatLon":{"lon":-1043779169,"lat":411573892}}},{"delta":{"node-LatLon":{"lon":-1043761788,"lat":411573828}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411574561,"long":-1043956554}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":2,"serialNumber":15188,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:27.687Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449040,"packetID":"0000000000000202F0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411580672,"long":-1045887265},"name":"eastbound_I-80_374.0_375.0_RSU-10.145.1.100_RW_4438","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045849012,"lat":411580520}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045810744,"lat":411580371}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045772475,"lat":411580179}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045734206,"lat":411580127}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045695937,"lat":411580101}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411580672,"long":-1045887265}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":1025}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":1,"serialNumber":15187,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:27.587Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449088,"packetID":"000000000000086B2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411492107,"long":-1046778055},"name":"westbound_I-80_369.0_368.0_RSU-10.145.1.100_RW_4453","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046793931,"lat":411483939}}},{"delta":{"node-LatLon":{"lon":-1046809732,"lat":411475785}}},{"delta":{"node-LatLon":{"lon":-1046825568,"lat":411467670}}},{"delta":{"node-LatLon":{"lon":-1046841365,"lat":411459513}}},{"delta":{"node-LatLon":{"lon":-1046857165,"lat":411451359}}},{"delta":{"node-LatLon":{"lon":-1046872977,"lat":411443219}}},{"delta":{"node-LatLon":{"lon":-1046888778,"lat":411435066}}},{"delta":{"node-LatLon":{"lon":-1046904584,"lat":411426919}}},{"delta":{"node-LatLon":{"lon":-1046920416,"lat":411418801}}},{"delta":{"node-LatLon":{"lon":-1046936213,"lat":411410646}}},{"delta":{"node-LatLon":{"lon":-1046952038,"lat":411402520}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000100000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411492107,"long":-1046778055}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13580}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":297.8,"latitude":41.1519327,"speed":0.02,"longitude":-104.656722},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":15186,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":243,"bundleId":76},"sanitized":false,"recordGeneratedAt":"2018-11-14T16:00:27.484Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_RSU.gz","odeReceivedAt":"2019-04-09T18:10:23.045Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411269876,"long":-1047269563},"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000010000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411269876,"long":-1047269563}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":448260}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} diff --git a/data/rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.json b/data/rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.json index 089a9ecaa..558098c96 100644 --- a/data/rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.json +++ b/data/rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.json @@ -1,166 +1,166 @@ -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1842,"heading":270.4,"latitude":41.1164581,"speed":32.42,"longitude":-104.8309594},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":165,"serialNumber":15594,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:16:06.891Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1842,"heading":270.15,"latitude":41.1164558,"speed":32.92,"longitude":-104.8270153},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":164,"serialNumber":15593,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:15:56.582Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1827,"heading":259.0875,"latitude":41.120215,"speed":34.06,"longitude":-104.7970612},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":163,"serialNumber":15592,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:37.988Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":258.9,"latitude":41.1203737,"speed":34.14,"longitude":-104.7959839},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":162,"serialNumber":15591,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:35.384Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31631,"packetID":"0000000000000C4306","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415413487,"long":-1060812632},"name":"westbound_I80_272.06_279.86_SAT-84FB2473_RC_ARLI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060824406,"lat":415424958}}},{"delta":{"node-LatLon":{"lon":-1060836139,"lat":415436453}}},{"delta":{"node-LatLon":{"lon":-1060859605,"lat":415459445}}},{"delta":{"node-LatLon":{"lon":-1060883068,"lat":415482438}}},{"delta":{"node-LatLon":{"lon":-1060906872,"lat":415505231}}},{"delta":{"node-LatLon":{"lon":-1060934236,"lat":415525587}}},{"delta":{"node-LatLon":{"lon":-1060965310,"lat":415542824}}},{"delta":{"node-LatLon":{"lon":-1060996772,"lat":415559666}}},{"delta":{"node-LatLon":{"lon":-1061028237,"lat":415576506}}},{"delta":{"node-LatLon":{"lon":-1061059706,"lat":415593342}}},{"delta":{"node-LatLon":{"lon":-1061092588,"lat":415608515}}},{"delta":{"node-LatLon":{"lon":-1061128419,"lat":415618971}}},{"delta":{"node-LatLon":{"lon":-1061166060,"lat":415624943}}},{"delta":{"node-LatLon":{"lon":-1061203924,"lat":415630154}}},{"delta":{"node-LatLon":{"lon":-1061241795,"lat":415635339}}},{"delta":{"node-LatLon":{"lon":-1061279673,"lat":415640497}}},{"delta":{"node-LatLon":{"lon":-1061317589,"lat":415645644}}},{"delta":{"node-LatLon":{"lon":-1061355497,"lat":415650826}}},{"delta":{"node-LatLon":{"lon":-1061392771,"lat":415657996}}},{"delta":{"node-LatLon":{"lon":-1061427646,"lat":415670204}}},{"delta":{"node-LatLon":{"lon":-1061459115,"lat":415686864}}},{"delta":{"node-LatLon":{"lon":-1061489394,"lat":415704469}}},{"delta":{"node-LatLon":{"lon":-1061519697,"lat":415722052}}},{"delta":{"node-LatLon":{"lon":-1061549992,"lat":415739645}}},{"delta":{"node-LatLon":{"lon":-1061580273,"lat":415757250}}},{"delta":{"node-LatLon":{"lon":-1061610581,"lat":415774831}}},{"delta":{"node-LatLon":{"lon":-1061641248,"lat":415792650}}},{"delta":{"node-LatLon":{"lon":-1061671923,"lat":415810463}}},{"delta":{"node-LatLon":{"lon":-1061702592,"lat":415828282}}},{"delta":{"node-LatLon":{"lon":-1061733271,"lat":415846093}}},{"delta":{"node-LatLon":{"lon":-1061763976,"lat":415863879}}},{"delta":{"node-LatLon":{"lon":-1061794560,"lat":415881656}}},{"delta":{"node-LatLon":{"lon":-1061825730,"lat":415898841}}},{"delta":{"node-LatLon":{"lon":-1061858422,"lat":415914356}}},{"delta":{"node-LatLon":{"lon":-1061891331,"lat":415929615}}},{"delta":{"node-LatLon":{"lon":-1061924211,"lat":415944910}}},{"delta":{"node-LatLon":{"lon":-1061957798,"lat":415960692}}},{"delta":{"node-LatLon":{"lon":-1061992345,"lat":415975173}}},{"delta":{"node-LatLon":{"lon":-1062030986,"lat":415980852}}},{"delta":{"node-LatLon":{"lon":-1062070609,"lat":415981013}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415413487,"long":-1060812632}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31631}},"msgCnt":50}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":258.95,"latitude":41.1203855,"speed":34.18,"longitude":-104.7959041},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":159,"serialNumber":15588,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:35.206Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31631,"packetID":"0000000000000EA327","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416355008,"long":-1062867209},"name":"eastbound_I80_267.19_272.06_SAT-7ECE7CF3_RC_ARLI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062852549,"lat":416345669}}},{"delta":{"node-LatLon":{"lon":-1062837900,"lat":416336319}}},{"delta":{"node-LatLon":{"lon":-1062823256,"lat":416326967}}},{"delta":{"node-LatLon":{"lon":-1062808616,"lat":416317611}}},{"delta":{"node-LatLon":{"lon":-1062793947,"lat":416308280}}},{"delta":{"node-LatLon":{"lon":-1062778698,"lat":416299496}}},{"delta":{"node-LatLon":{"lon":-1062762456,"lat":416291782}}},{"delta":{"node-LatLon":{"lon":-1062745352,"lat":416285198}}},{"delta":{"node-LatLon":{"lon":-1062727519,"lat":416279817}}},{"delta":{"node-LatLon":{"lon":-1062709133,"lat":416275605}}},{"delta":{"node-LatLon":{"lon":-1062690294,"lat":416271928}}},{"delta":{"node-LatLon":{"lon":-1062671455,"lat":416268251}}},{"delta":{"node-LatLon":{"lon":-1062652620,"lat":416264564}}},{"delta":{"node-LatLon":{"lon":-1062633771,"lat":416260915}}},{"delta":{"node-LatLon":{"lon":-1062614940,"lat":416257216}}},{"delta":{"node-LatLon":{"lon":-1062596100,"lat":416253544}}},{"delta":{"node-LatLon":{"lon":-1062577255,"lat":416249886}}},{"delta":{"node-LatLon":{"lon":-1062558417,"lat":416246209}}},{"delta":{"node-LatLon":{"lon":-1062539573,"lat":416242549}}},{"delta":{"node-LatLon":{"lon":-1062520744,"lat":416238847}}},{"delta":{"node-LatLon":{"lon":-1062501815,"lat":416235141}}},{"delta":{"node-LatLon":{"lon":-1062482895,"lat":416231412}}},{"delta":{"node-LatLon":{"lon":-1062464244,"lat":416227007}}},{"delta":{"node-LatLon":{"lon":-1062446311,"lat":416221159}}},{"delta":{"node-LatLon":{"lon":-1062429289,"lat":416213939}}},{"delta":{"node-LatLon":{"lon":-1062413350,"lat":416205439}}},{"delta":{"node-LatLon":{"lon":-1062398699,"lat":416195722}}},{"delta":{"node-LatLon":{"lon":-1062385484,"lat":416184907}}},{"delta":{"node-LatLon":{"lon":-1062373783,"lat":416173151}}},{"delta":{"node-LatLon":{"lon":-1062363439,"lat":416160690}}},{"delta":{"node-LatLon":{"lon":-1062353839,"lat":416148895}}},{"delta":{"node-LatLon":{"lon":-1062344200,"lat":416137119}}},{"delta":{"node-LatLon":{"lon":-1062334576,"lat":416125335}}},{"delta":{"node-LatLon":{"lon":-1062324886,"lat":416113582}}},{"delta":{"node-LatLon":{"lon":-1062315283,"lat":416101788}}},{"delta":{"node-LatLon":{"lon":-1062305674,"lat":416089998}}},{"delta":{"node-LatLon":{"lon":-1062296038,"lat":416078220}}},{"delta":{"node-LatLon":{"lon":-1062286421,"lat":416066433}}},{"delta":{"node-LatLon":{"lon":-1062276808,"lat":416054645}}},{"delta":{"node-LatLon":{"lon":-1062267158,"lat":416042874}}},{"delta":{"node-LatLon":{"lon":-1062257093,"lat":416030536}}},{"delta":{"node-LatLon":{"lon":-1062246994,"lat":416018215}}},{"delta":{"node-LatLon":{"lon":-1062236012,"lat":416006340}}},{"delta":{"node-LatLon":{"lon":-1062222613,"lat":415995969}}},{"delta":{"node-LatLon":{"lon":-1062206968,"lat":415987559}}},{"delta":{"node-LatLon":{"lon":-1062189595,"lat":415981343}}},{"delta":{"node-LatLon":{"lon":-1062171008,"lat":415977603}}},{"delta":{"node-LatLon":{"lon":-1062151833,"lat":415976346}}},{"delta":{"node-LatLon":{"lon":-1062132565,"lat":415976300}}},{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062093782,"lat":415976349}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416355008,"long":-1062867209}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31631}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":258.9,"latitude":41.1203737,"speed":34.14,"longitude":-104.7959839},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":161,"serialNumber":15590,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:35.285Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31631,"packetID":"00000000000010847D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415976300,"long":-1062132565},"name":"eastbound_I80_272.06_279.86_SAT-A456B6BD_RC_ARLI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062074266,"lat":415976387}}},{"delta":{"node-LatLon":{"lon":-1062035235,"lat":415976340}}},{"delta":{"node-LatLon":{"lon":-1061996980,"lat":415971514}}},{"delta":{"node-LatLon":{"lon":-1061962779,"lat":415957510}}},{"delta":{"node-LatLon":{"lon":-1061929530,"lat":415942161}}},{"delta":{"node-LatLon":{"lon":-1061896505,"lat":415926815}}},{"delta":{"node-LatLon":{"lon":-1061863465,"lat":415911487}}},{"delta":{"node-LatLon":{"lon":-1061830559,"lat":415896001}}},{"delta":{"node-LatLon":{"lon":-1061799243,"lat":415878765}}},{"delta":{"node-LatLon":{"lon":-1061768515,"lat":415860933}}},{"delta":{"node-LatLon":{"lon":-1061737747,"lat":415843066}}},{"delta":{"node-LatLon":{"lon":-1061706991,"lat":415825187}}},{"delta":{"node-LatLon":{"lon":-1061676217,"lat":415807327}}},{"delta":{"node-LatLon":{"lon":-1061645463,"lat":415789449}}},{"delta":{"node-LatLon":{"lon":-1061614689,"lat":415771591}}},{"delta":{"node-LatLon":{"lon":-1061584537,"lat":415754086}}},{"delta":{"node-LatLon":{"lon":-1061554447,"lat":415736525}}},{"delta":{"node-LatLon":{"lon":-1061524198,"lat":415719117}}},{"delta":{"node-LatLon":{"lon":-1061494074,"lat":415701589}}},{"delta":{"node-LatLon":{"lon":-1061463879,"lat":415684131}}},{"delta":{"node-LatLon":{"lon":-1061432150,"lat":415667054}}},{"delta":{"node-LatLon":{"lon":-1061396974,"lat":415654391}}},{"delta":{"node-LatLon":{"lon":-1061359292,"lat":415646802}}},{"delta":{"node-LatLon":{"lon":-1061320863,"lat":415641538}}},{"delta":{"node-LatLon":{"lon":-1061282426,"lat":415636308}}},{"delta":{"node-LatLon":{"lon":-1061244922,"lat":415631177}}},{"delta":{"node-LatLon":{"lon":-1061207418,"lat":415626048}}},{"delta":{"node-LatLon":{"lon":-1061169903,"lat":415620964}}},{"delta":{"node-LatLon":{"lon":-1061132571,"lat":415615219}}},{"delta":{"node-LatLon":{"lon":-1061096967,"lat":415605109}}},{"delta":{"node-LatLon":{"lon":-1061064131,"lat":415590319}}},{"delta":{"node-LatLon":{"lon":-1061032943,"lat":415573570}}},{"delta":{"node-LatLon":{"lon":-1061001748,"lat":415556828}}},{"delta":{"node-LatLon":{"lon":-1060970565,"lat":415540075}}},{"delta":{"node-LatLon":{"lon":-1060939622,"lat":415523077}}},{"delta":{"node-LatLon":{"lon":-1060912271,"lat":415503093}}},{"delta":{"node-LatLon":{"lon":-1060888721,"lat":415480493}}},{"delta":{"node-LatLon":{"lon":-1060865425,"lat":415457738}}},{"delta":{"node-LatLon":{"lon":-1060842121,"lat":415434989}}},{"delta":{"node-LatLon":{"lon":-1060830479,"lat":415423609}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415976300,"long":-1062132565}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31631}},"msgCnt":38}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":258.95,"latitude":41.1203855,"speed":34.18,"longitude":-104.7959041},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":160,"serialNumber":15589,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:35.285Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31631,"packetID":"0000000000000EF64E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415981013,"long":-1062070609},"name":"westbound_I80_267.19_272.06_SAT-1F82D7A2_RC_ARLI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062090421,"lat":415980971}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}},{"delta":{"node-LatLon":{"lon":-1062129021,"lat":415980789}}},{"delta":{"node-LatLon":{"lon":-1062147810,"lat":415980793}}},{"delta":{"node-LatLon":{"lon":-1062166552,"lat":415981611}}},{"delta":{"node-LatLon":{"lon":-1062184813,"lat":415984845}}},{"delta":{"node-LatLon":{"lon":-1062201989,"lat":415990520}}},{"delta":{"node-LatLon":{"lon":-1062217437,"lat":415998517}}},{"delta":{"node-LatLon":{"lon":-1062230703,"lat":416008482}}},{"delta":{"node-LatLon":{"lon":-1062241451,"lat":416020041}}},{"delta":{"node-LatLon":{"lon":-1062251290,"lat":416032060}}},{"delta":{"node-LatLon":{"lon":-1062261128,"lat":416044081}}},{"delta":{"node-LatLon":{"lon":-1062270774,"lat":416055871}}},{"delta":{"node-LatLon":{"lon":-1062280417,"lat":416067663}}},{"delta":{"node-LatLon":{"lon":-1062290067,"lat":416079452}}},{"delta":{"node-LatLon":{"lon":-1062299712,"lat":416091244}}},{"delta":{"node-LatLon":{"lon":-1062309426,"lat":416103003}}},{"delta":{"node-LatLon":{"lon":-1062319170,"lat":416114748}}},{"delta":{"node-LatLon":{"lon":-1062328711,"lat":416126587}}},{"delta":{"node-LatLon":{"lon":-1062338232,"lat":416138435}}},{"delta":{"node-LatLon":{"lon":-1062347925,"lat":416150205}}},{"delta":{"node-LatLon":{"lon":-1062357563,"lat":416162000}}},{"delta":{"node-LatLon":{"lon":-1062368179,"lat":416174692}}},{"delta":{"node-LatLon":{"lon":-1062379892,"lat":416186820}}},{"delta":{"node-LatLon":{"lon":-1062393288,"lat":416197926}}},{"delta":{"node-LatLon":{"lon":-1062408108,"lat":416207958}}},{"delta":{"node-LatLon":{"lon":-1062424227,"lat":416216793}}},{"delta":{"node-LatLon":{"lon":-1062441506,"lat":416224292}}},{"delta":{"node-LatLon":{"lon":-1062459705,"lat":416230444}}},{"delta":{"node-LatLon":{"lon":-1062478641,"lat":416235175}}},{"delta":{"node-LatLon":{"lon":-1062497949,"lat":416238998}}},{"delta":{"node-LatLon":{"lon":-1062517273,"lat":416242774}}},{"delta":{"node-LatLon":{"lon":-1062536082,"lat":416246433}}},{"delta":{"node-LatLon":{"lon":-1062554889,"lat":416250101}}},{"delta":{"node-LatLon":{"lon":-1062573685,"lat":416253798}}},{"delta":{"node-LatLon":{"lon":-1062592489,"lat":416257471}}},{"delta":{"node-LatLon":{"lon":-1062611298,"lat":416261134}}},{"delta":{"node-LatLon":{"lon":-1062630102,"lat":416264808}}},{"delta":{"node-LatLon":{"lon":-1062648910,"lat":416268474}}},{"delta":{"node-LatLon":{"lon":-1062667716,"lat":416272143}}},{"delta":{"node-LatLon":{"lon":-1062686526,"lat":416275802}}},{"delta":{"node-LatLon":{"lon":-1062705320,"lat":416279506}}},{"delta":{"node-LatLon":{"lon":-1062723512,"lat":416283487}}},{"delta":{"node-LatLon":{"lon":-1062741156,"lat":416288664}}},{"delta":{"node-LatLon":{"lon":-1062758081,"lat":416295053}}},{"delta":{"node-LatLon":{"lon":-1062774179,"lat":416302552}}},{"delta":{"node-LatLon":{"lon":-1062789262,"lat":416311156}}},{"delta":{"node-LatLon":{"lon":-1062803697,"lat":416320374}}},{"delta":{"node-LatLon":{"lon":-1062818144,"lat":416329581}}},{"delta":{"node-LatLon":{"lon":-1062832563,"lat":416338813}}},{"delta":{"node-LatLon":{"lon":-1062847004,"lat":416348027}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415981013,"long":-1062070609}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31631}},"msgCnt":56}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":259.1,"latitude":41.1204147,"speed":34.18,"longitude":-104.7957042},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":158,"serialNumber":15587,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:34.686Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31632,"packetID":"0000000000000F6CF3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412309017,"long":-1054379125},"name":"eastbound_I80_323.85_325.82_SAT-0405F53D_VSL_V002136","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054386377,"lat":412295717}}},{"delta":{"node-LatLon":{"lon":-1054390587,"lat":412281719}}},{"delta":{"node-LatLon":{"lon":-1054390501,"lat":412267361}}},{"delta":{"node-LatLon":{"lon":-1054387340,"lat":412253070}}},{"delta":{"node-LatLon":{"lon":-1054384188,"lat":412238776}}},{"delta":{"node-LatLon":{"lon":-1054383083,"lat":412224323}}},{"delta":{"node-LatLon":{"lon":-1054385250,"lat":412209941}}},{"delta":{"node-LatLon":{"lon":-1054389797,"lat":412195863}}},{"delta":{"node-LatLon":{"lon":-1054394498,"lat":412181812}}},{"delta":{"node-LatLon":{"lon":-1054399238,"lat":412167769}}},{"delta":{"node-LatLon":{"lon":-1054403962,"lat":412153723}}},{"delta":{"node-LatLon":{"lon":-1054408711,"lat":412139682}}},{"delta":{"node-LatLon":{"lon":-1054413260,"lat":412125813}}},{"delta":{"node-LatLon":{"lon":-1054415782,"lat":412111677}}},{"delta":{"node-LatLon":{"lon":-1054414034,"lat":412097480}}},{"delta":{"node-LatLon":{"lon":-1054408252,"lat":412083905}}},{"delta":{"node-LatLon":{"lon":-1054400204,"lat":412070975}}},{"delta":{"node-LatLon":{"lon":-1054391746,"lat":412058198}}},{"delta":{"node-LatLon":{"lon":-1054381691,"lat":412046104}}},{"delta":{"node-LatLon":{"lon":-1054370810,"lat":412034419}}},{"delta":{"node-LatLon":{"lon":-1054359947,"lat":412022723}}},{"delta":{"node-LatLon":{"lon":-1054349054,"lat":412011044}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000001110000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412309017,"long":-1054379125}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31632}},"msgCnt":21}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1823,"heading":258.9125,"latitude":41.1207321,"speed":34.16,"longitude":-104.7935083},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":157,"serialNumber":15586,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:29.216Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31632,"packetID":"0000000000000E347A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412822611,"long":-1055185238},"name":"eastbound_I80_317.68_323.85_SAT-E7615079_VSL_V002118","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055174028,"lat":412810812}}},{"delta":{"node-LatLon":{"lon":-1055151564,"lat":412787238}}},{"delta":{"node-LatLon":{"lon":-1055126153,"lat":412765484}}},{"delta":{"node-LatLon":{"lon":-1055096204,"lat":412747808}}},{"delta":{"node-LatLon":{"lon":-1055063926,"lat":412732570}}},{"delta":{"node-LatLon":{"lon":-1055028777,"lat":412721773}}},{"delta":{"node-LatLon":{"lon":-1054990989,"lat":412718648}}},{"delta":{"node-LatLon":{"lon":-1054953009,"lat":412716759}}},{"delta":{"node-LatLon":{"lon":-1054915016,"lat":412715870}}},{"delta":{"node-LatLon":{"lon":-1054877421,"lat":412719892}}},{"delta":{"node-LatLon":{"lon":-1054839790,"lat":412721101}}},{"delta":{"node-LatLon":{"lon":-1054808075,"lat":412706122}}},{"delta":{"node-LatLon":{"lon":-1054782861,"lat":412684644}}},{"delta":{"node-LatLon":{"lon":-1054756003,"lat":412664064}}},{"delta":{"node-LatLon":{"lon":-1054719971,"lat":412655405}}},{"delta":{"node-LatLon":{"lon":-1054681944,"lat":412652284}}},{"delta":{"node-LatLon":{"lon":-1054649671,"lat":412637001}}},{"delta":{"node-LatLon":{"lon":-1054617259,"lat":412621852}}},{"delta":{"node-LatLon":{"lon":-1054582192,"lat":412610689}}},{"delta":{"node-LatLon":{"lon":-1054551500,"lat":412593707}}},{"delta":{"node-LatLon":{"lon":-1054521939,"lat":412575543}}},{"delta":{"node-LatLon":{"lon":-1054492428,"lat":412557334}}},{"delta":{"node-LatLon":{"lon":-1054466482,"lat":412536415}}},{"delta":{"node-LatLon":{"lon":-1054448979,"lat":412511051}}},{"delta":{"node-LatLon":{"lon":-1054432727,"lat":412485180}}},{"delta":{"node-LatLon":{"lon":-1054416471,"lat":412459312}}},{"delta":{"node-LatLon":{"lon":-1054400231,"lat":412433438}}},{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054375725,"lat":412379414}}},{"delta":{"node-LatLon":{"lon":-1054370239,"lat":412350939}}},{"delta":{"node-LatLon":{"lon":-1054372327,"lat":412322445}}},{"delta":{"node-LatLon":{"lon":-1054386377,"lat":412295717}}},{"delta":{"node-LatLon":{"lon":-1054390587,"lat":412281719}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111110000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412822611,"long":-1055185238}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31632}},"msgCnt":24}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1823,"heading":258.95,"latitude":41.1208274,"speed":34.16,"longitude":-104.7928706},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":156,"serialNumber":15585,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:27.595Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1805,"heading":268.9125,"latitude":41.1243603,"speed":34.06,"longitude":-104.7570576},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":155,"serialNumber":15584,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:12:58.605Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1788,"heading":245.6375,"latitude":41.1273721,"speed":34.2,"longitude":-104.7257668},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":154,"serialNumber":15583,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:11:40.212Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31498,"packetID":"000000000000057CF2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416103734,"long":-1092210485},"name":"westbound_I80_91.0_104.83_SAT-11EB1AFB_RC_RSI80WGRFGD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092225602,"lat":416102051}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}},{"delta":{"node-LatLon":{"lon":-1092295103,"lat":416078549}}},{"delta":{"node-LatLon":{"lon":-1092353802,"lat":416055730}}},{"delta":{"node-LatLon":{"lon":-1092409233,"lat":415994268}}},{"delta":{"node-LatLon":{"lon":-1092453299,"lat":415926333}}},{"delta":{"node-LatLon":{"lon":-1092494255,"lat":415863151}}},{"delta":{"node-LatLon":{"lon":-1092542043,"lat":415808289}}},{"delta":{"node-LatLon":{"lon":-1092614541,"lat":415771804}}},{"delta":{"node-LatLon":{"lon":-1092686893,"lat":415745034}}},{"delta":{"node-LatLon":{"lon":-1092755235,"lat":415719687}}},{"delta":{"node-LatLon":{"lon":-1092824046,"lat":415694227}}},{"delta":{"node-LatLon":{"lon":-1092892916,"lat":415668054}}},{"delta":{"node-LatLon":{"lon":-1092959628,"lat":415638882}}},{"delta":{"node-LatLon":{"lon":-1093026230,"lat":415609696}}},{"delta":{"node-LatLon":{"lon":-1093092855,"lat":415580545}}},{"delta":{"node-LatLon":{"lon":-1093159414,"lat":415551340}}},{"delta":{"node-LatLon":{"lon":-1093225990,"lat":415522190}}},{"delta":{"node-LatLon":{"lon":-1093292630,"lat":415493128}}},{"delta":{"node-LatLon":{"lon":-1093362756,"lat":415469236}}},{"delta":{"node-LatLon":{"lon":-1093433593,"lat":415446486}}},{"delta":{"node-LatLon":{"lon":-1093501983,"lat":415419517}}},{"delta":{"node-LatLon":{"lon":-1093570430,"lat":415392320}}},{"delta":{"node-LatLon":{"lon":-1093638825,"lat":415365052}}},{"delta":{"node-LatLon":{"lon":-1093706625,"lat":415338051}}},{"delta":{"node-LatLon":{"lon":-1093779378,"lat":415323162}}},{"delta":{"node-LatLon":{"lon":-1093855135,"lat":415332204}}},{"delta":{"node-LatLon":{"lon":-1093927477,"lat":415317094}}},{"delta":{"node-LatLon":{"lon":-1093995757,"lat":415291937}}},{"delta":{"node-LatLon":{"lon":-1094070772,"lat":415279115}}},{"delta":{"node-LatLon":{"lon":-1094147255,"lat":415276886}}},{"delta":{"node-LatLon":{"lon":-1094224449,"lat":415282426}}},{"delta":{"node-LatLon":{"lon":-1094301394,"lat":415276124}}},{"delta":{"node-LatLon":{"lon":-1094371013,"lat":415249502}}},{"delta":{"node-LatLon":{"lon":-1094443930,"lat":415236997}}},{"delta":{"node-LatLon":{"lon":-1094510066,"lat":415263454}}},{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416103734,"long":-1092210485}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31498}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1804,"heading":235.8125,"latitude":41.1407438,"speed":34.14,"longitude":-104.6942247},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":150,"serialNumber":15579,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:10:10.898Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1804,"heading":235.7625,"latitude":41.1407266,"speed":34.18,"longitude":-104.6942583},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":151,"serialNumber":15580,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:10:10.997Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31498,"packetID":"000000000000057CF2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416103734,"long":-1092210485},"name":"westbound_I80_91.0_104.83_SAT-11EB1AFB_RC_RSI80WGRFGD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092225602,"lat":416102051}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}},{"delta":{"node-LatLon":{"lon":-1092295103,"lat":416078549}}},{"delta":{"node-LatLon":{"lon":-1092353802,"lat":416055730}}},{"delta":{"node-LatLon":{"lon":-1092409233,"lat":415994268}}},{"delta":{"node-LatLon":{"lon":-1092453299,"lat":415926333}}},{"delta":{"node-LatLon":{"lon":-1092494255,"lat":415863151}}},{"delta":{"node-LatLon":{"lon":-1092542043,"lat":415808289}}},{"delta":{"node-LatLon":{"lon":-1092614541,"lat":415771804}}},{"delta":{"node-LatLon":{"lon":-1092686893,"lat":415745034}}},{"delta":{"node-LatLon":{"lon":-1092755235,"lat":415719687}}},{"delta":{"node-LatLon":{"lon":-1092824046,"lat":415694227}}},{"delta":{"node-LatLon":{"lon":-1092892916,"lat":415668054}}},{"delta":{"node-LatLon":{"lon":-1092959628,"lat":415638882}}},{"delta":{"node-LatLon":{"lon":-1093026230,"lat":415609696}}},{"delta":{"node-LatLon":{"lon":-1093092855,"lat":415580545}}},{"delta":{"node-LatLon":{"lon":-1093159414,"lat":415551340}}},{"delta":{"node-LatLon":{"lon":-1093225990,"lat":415522190}}},{"delta":{"node-LatLon":{"lon":-1093292630,"lat":415493128}}},{"delta":{"node-LatLon":{"lon":-1093362756,"lat":415469236}}},{"delta":{"node-LatLon":{"lon":-1093433593,"lat":415446486}}},{"delta":{"node-LatLon":{"lon":-1093501983,"lat":415419517}}},{"delta":{"node-LatLon":{"lon":-1093570430,"lat":415392320}}},{"delta":{"node-LatLon":{"lon":-1093638825,"lat":415365052}}},{"delta":{"node-LatLon":{"lon":-1093706625,"lat":415338051}}},{"delta":{"node-LatLon":{"lon":-1093779378,"lat":415323162}}},{"delta":{"node-LatLon":{"lon":-1093855135,"lat":415332204}}},{"delta":{"node-LatLon":{"lon":-1093927477,"lat":415317094}}},{"delta":{"node-LatLon":{"lon":-1093995757,"lat":415291937}}},{"delta":{"node-LatLon":{"lon":-1094070772,"lat":415279115}}},{"delta":{"node-LatLon":{"lon":-1094147255,"lat":415276886}}},{"delta":{"node-LatLon":{"lon":-1094224449,"lat":415282426}}},{"delta":{"node-LatLon":{"lon":-1094301394,"lat":415276124}}},{"delta":{"node-LatLon":{"lon":-1094371013,"lat":415249502}}},{"delta":{"node-LatLon":{"lon":-1094443930,"lat":415236997}}},{"delta":{"node-LatLon":{"lon":-1094510066,"lat":415263454}}},{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416103734,"long":-1092210485}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31498}},"msgCnt":5}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1787,"heading":245.0375,"latitude":41.1287356,"speed":34.1,"longitude":-104.7218965},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":153,"serialNumber":15582,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:11:29.798Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1804,"heading":235.8125,"latitude":41.1406572,"speed":34.14,"longitude":-104.6943927},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":152,"serialNumber":15581,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:10:11.497Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":242.75,"latitude":41.1563554,"speed":27.74,"longitude":-104.6602258},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":148,"serialNumber":15577,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:08:31.690Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.7375,"latitude":41.1504085,"speed":10.58,"longitude":-104.6569867},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":145,"serialNumber":15574,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:04.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"00000000000004865E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410974214,"long":-1051103433},"name":"eastbound_I80_345.9_349.15_SAT-2D188807_VSL_V002275","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051084469,"lat":410971913}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1051046217,"lat":410971780}}},{"delta":{"node-LatLon":{"lon":-1051027336,"lat":410973993}}},{"delta":{"node-LatLon":{"lon":-1051008857,"lat":410977669}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050972405,"lat":410986387}}},{"delta":{"node-LatLon":{"lon":-1050953820,"lat":410989753}}},{"delta":{"node-LatLon":{"lon":-1050934905,"lat":410991795}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050896815,"lat":410994269}}},{"delta":{"node-LatLon":{"lon":-1050877759,"lat":410995411}}},{"delta":{"node-LatLon":{"lon":-1050858673,"lat":410996615}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050820456,"lat":410998476}}},{"delta":{"node-LatLon":{"lon":-1050801305,"lat":410998519}}},{"delta":{"node-LatLon":{"lon":-1050782155,"lat":410998320}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050743855,"lat":410997929}}},{"delta":{"node-LatLon":{"lon":-1050724706,"lat":410997718}}},{"delta":{"node-LatLon":{"lon":-1050705556,"lat":410997530}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050667295,"lat":410997427}}},{"delta":{"node-LatLon":{"lon":-1050648246,"lat":410998545}}},{"delta":{"node-LatLon":{"lon":-1050629421,"lat":411001016}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}},{"delta":{"node-LatLon":{"lon":-1050591949,"lat":411006727}}},{"delta":{"node-LatLon":{"lon":-1050573199,"lat":411009532}}},{"delta":{"node-LatLon":{"lon":-1050554451,"lat":411012343}}},{"delta":{"node-LatLon":{"lon":-1050535715,"lat":411015202}}},{"delta":{"node-LatLon":{"lon":-1050516970,"lat":411018025}}},{"delta":{"node-LatLon":{"lon":-1050498229,"lat":411020862}}},{"delta":{"node-LatLon":{"lon":-1050479271,"lat":411023677}}},{"delta":{"node-LatLon":{"lon":-1050460327,"lat":411026546}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410974214,"long":-1051103433}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":17}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1813,"heading":235.65,"latitude":41.1425286,"speed":34.22,"longitude":-104.6907602},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":149,"serialNumber":15578,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:10:00.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":24.8125,"latitude":41.1514708,"speed":15.66,"longitude":-104.6561164},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":147,"serialNumber":15576,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:13.987Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":33.1625,"latitude":41.1504928,"speed":11.56,"longitude":-104.656914},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":146,"serialNumber":15575,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:05.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"0000000000000E71AE","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411217079,"long":-1052895308},"name":"eastbound_I80_336.16_339.86_SAT-3150A15C_VSL_V002214","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1052878140,"lat":411209333}}},{"delta":{"node-LatLon":{"lon":-1052861535,"lat":411200909}}},{"delta":{"node-LatLon":{"lon":-1052844985,"lat":411192422}}},{"delta":{"node-LatLon":{"lon":-1052828416,"lat":411183958}}},{"delta":{"node-LatLon":{"lon":-1052811861,"lat":411175478}}},{"delta":{"node-LatLon":{"lon":-1052795294,"lat":411167011}}},{"delta":{"node-LatLon":{"lon":-1052778775,"lat":411158491}}},{"delta":{"node-LatLon":{"lon":-1052762243,"lat":411149986}}},{"delta":{"node-LatLon":{"lon":-1052745689,"lat":411141506}}},{"delta":{"node-LatLon":{"lon":-1052728865,"lat":411133341}}},{"delta":{"node-LatLon":{"lon":-1052712029,"lat":411126535}}},{"delta":{"node-LatLon":{"lon":-1052694431,"lat":411120945}}},{"delta":{"node-LatLon":{"lon":-1052676657,"lat":411115670}}},{"delta":{"node-LatLon":{"lon":-1052658860,"lat":411110441}}},{"delta":{"node-LatLon":{"lon":-1052641069,"lat":411105200}}},{"delta":{"node-LatLon":{"lon":-1052623255,"lat":411100002}}},{"delta":{"node-LatLon":{"lon":-1052605463,"lat":411094765}}},{"delta":{"node-LatLon":{"lon":-1052587658,"lat":411089552}}},{"delta":{"node-LatLon":{"lon":-1052569865,"lat":411084315}}},{"delta":{"node-LatLon":{"lon":-1052552081,"lat":411079062}}},{"delta":{"node-LatLon":{"lon":-1052534102,"lat":411073877}}},{"delta":{"node-LatLon":{"lon":-1052516080,"lat":411068778}}},{"delta":{"node-LatLon":{"lon":-1052497957,"lat":411063891}}},{"delta":{"node-LatLon":{"lon":-1052479703,"lat":411059291}}},{"delta":{"node-LatLon":{"lon":-1052461302,"lat":411055044}}},{"delta":{"node-LatLon":{"lon":-1052442589,"lat":411051677}}},{"delta":{"node-LatLon":{"lon":-1052423634,"lat":411049202}}},{"delta":{"node-LatLon":{"lon":-1052404522,"lat":411047559}}},{"delta":{"node-LatLon":{"lon":-1052385309,"lat":411046833}}},{"delta":{"node-LatLon":{"lon":-1052366071,"lat":411046704}}},{"delta":{"node-LatLon":{"lon":-1052346951,"lat":411046651}}},{"delta":{"node-LatLon":{"lon":-1052327830,"lat":411046722}}},{"delta":{"node-LatLon":{"lon":-1052308709,"lat":411046714}}},{"delta":{"node-LatLon":{"lon":-1052289589,"lat":411046568}}},{"delta":{"node-LatLon":{"lon":-1052270529,"lat":411045480}}},{"delta":{"node-LatLon":{"lon":-1052251668,"lat":411043133}}},{"delta":{"node-LatLon":{"lon":-1052233174,"lat":411039476}}},{"delta":{"node-LatLon":{"lon":-1052215223,"lat":411034508}}},{"delta":{"node-LatLon":{"lon":-1052197936,"lat":411028337}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411217079,"long":-1052895308}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":23}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.65,"latitude":41.1504005,"speed":10.48,"longitude":-104.6569936},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":144,"serialNumber":15573,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.992Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"000000000000019963","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410982319,"long":-1051615463},"name":"eastbound_I80_343.24_345.9_SAT-7C287339_VSL_V002255","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051578694,"lat":410989607}}},{"delta":{"node-LatLon":{"lon":-1051560307,"lat":410993246}}},{"delta":{"node-LatLon":{"lon":-1051541730,"lat":410996259}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051503871,"lat":410998228}}},{"delta":{"node-LatLon":{"lon":-1051484919,"lat":410997224}}},{"delta":{"node-LatLon":{"lon":-1051466104,"lat":410995204}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051428300,"lat":410990965}}},{"delta":{"node-LatLon":{"lon":-1051409297,"lat":410988823}}},{"delta":{"node-LatLon":{"lon":-1051390243,"lat":410986964}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051351924,"lat":410984978}}},{"delta":{"node-LatLon":{"lon":-1051332714,"lat":410985049}}},{"delta":{"node-LatLon":{"lon":-1051313512,"lat":410985509}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051275112,"lat":410986528}}},{"delta":{"node-LatLon":{"lon":-1051255905,"lat":410986855}}},{"delta":{"node-LatLon":{"lon":-1051236694,"lat":410986784}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051198327,"lat":410985247}}},{"delta":{"node-LatLon":{"lon":-1051179211,"lat":410983796}}},{"delta":{"node-LatLon":{"lon":-1051160152,"lat":410981958}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051122310,"lat":410976921}}},{"delta":{"node-LatLon":{"lon":-1051103433,"lat":410974214}}},{"delta":{"node-LatLon":{"lon":-1051084469,"lat":410971913}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410982319,"long":-1051615463}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":17}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.75,"latitude":41.1503925,"speed":10.4,"longitude":-104.6570004},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":143,"serialNumber":15572,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.895Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"0000000000000D7A5F","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411039476,"long":-1052233174},"name":"eastbound_I80_339.86_343.24_SAT-C920DC35_VSL_V002234","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1052215223,"lat":411034508}}},{"delta":{"node-LatLon":{"lon":-1052197936,"lat":411028337}}},{"delta":{"node-LatLon":{"lon":-1052181375,"lat":411021106}}},{"delta":{"node-LatLon":{"lon":-1052164942,"lat":411013681}}},{"delta":{"node-LatLon":{"lon":-1052148522,"lat":411006239}}},{"delta":{"node-LatLon":{"lon":-1052132112,"lat":410998785}}},{"delta":{"node-LatLon":{"lon":-1052115683,"lat":410991356}}},{"delta":{"node-LatLon":{"lon":-1052099402,"lat":410983743}}},{"delta":{"node-LatLon":{"lon":-1052083431,"lat":410975763}}},{"delta":{"node-LatLon":{"lon":-1052067516,"lat":410967720}}},{"delta":{"node-LatLon":{"lon":-1052050763,"lat":410960746}}},{"delta":{"node-LatLon":{"lon":-1052032886,"lat":410955603}}},{"delta":{"node-LatLon":{"lon":-1052014286,"lat":410952254}}},{"delta":{"node-LatLon":{"lon":-1051995357,"lat":410950942}}},{"delta":{"node-LatLon":{"lon":-1051976364,"lat":410951581}}},{"delta":{"node-LatLon":{"lon":-1051957579,"lat":410953842}}},{"delta":{"node-LatLon":{"lon":-1051938862,"lat":410956431}}},{"delta":{"node-LatLon":{"lon":-1051920112,"lat":410958875}}},{"delta":{"node-LatLon":{"lon":-1051901229,"lat":410960621}}},{"delta":{"node-LatLon":{"lon":-1051882249,"lat":410961626}}},{"delta":{"node-LatLon":{"lon":-1051863254,"lat":410962462}}},{"delta":{"node-LatLon":{"lon":-1051844258,"lat":410963288}}},{"delta":{"node-LatLon":{"lon":-1051825257,"lat":410964045}}},{"delta":{"node-LatLon":{"lon":-1051806052,"lat":410964852}}},{"delta":{"node-LatLon":{"lon":-1051786867,"lat":410965906}}},{"delta":{"node-LatLon":{"lon":-1051767713,"lat":410967235}}},{"delta":{"node-LatLon":{"lon":-1051748594,"lat":410968835}}},{"delta":{"node-LatLon":{"lon":-1051729481,"lat":410970472}}},{"delta":{"node-LatLon":{"lon":-1051710370,"lat":410972125}}},{"delta":{"node-LatLon":{"lon":-1051691247,"lat":410973695}}},{"delta":{"node-LatLon":{"lon":-1051672128,"lat":410975297}}},{"delta":{"node-LatLon":{"lon":-1051653026,"lat":410977005}}},{"delta":{"node-LatLon":{"lon":-1051634017,"lat":410979217}}},{"delta":{"node-LatLon":{"lon":-1051615463,"lat":410982319}}},{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051578694,"lat":410989607}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411039476,"long":-1052233174}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.8375,"latitude":41.1503846,"speed":10.24,"longitude":-104.6570069},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":142,"serialNumber":15571,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.795Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"0000000000000CBE5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411072254,"long":-1052512418},"name":"westbound_I80_338.1_334.3_SAT-6073BA35_VSL_V002226","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1052530201,"lat":411077493}}},{"delta":{"node-LatLon":{"lon":-1052547987,"lat":411082724}}},{"delta":{"node-LatLon":{"lon":-1052565806,"lat":411087956}}},{"delta":{"node-LatLon":{"lon":-1052583610,"lat":411093218}}},{"delta":{"node-LatLon":{"lon":-1052601439,"lat":411098430}}},{"delta":{"node-LatLon":{"lon":-1052619267,"lat":411103644}}},{"delta":{"node-LatLon":{"lon":-1052637078,"lat":411108892}}},{"delta":{"node-LatLon":{"lon":-1052654889,"lat":411114140}}},{"delta":{"node-LatLon":{"lon":-1052672710,"lat":411119370}}},{"delta":{"node-LatLon":{"lon":-1052690521,"lat":411124618}}},{"delta":{"node-LatLon":{"lon":-1052708153,"lat":411130194}}},{"delta":{"node-LatLon":{"lon":-1052725070,"lat":411136916}}},{"delta":{"node-LatLon":{"lon":-1052741814,"lat":411145056}}},{"delta":{"node-LatLon":{"lon":-1052758326,"lat":411153468}}},{"delta":{"node-LatLon":{"lon":-1052774845,"lat":411161873}}},{"delta":{"node-LatLon":{"lon":-1052791339,"lat":411170306}}},{"delta":{"node-LatLon":{"lon":-1052807830,"lat":411178743}}},{"delta":{"node-LatLon":{"lon":-1052824352,"lat":411187145}}},{"delta":{"node-LatLon":{"lon":-1052840856,"lat":411195568}}},{"delta":{"node-LatLon":{"lon":-1052857346,"lat":411204006}}},{"delta":{"node-LatLon":{"lon":-1052873972,"lat":411212287}}},{"delta":{"node-LatLon":{"lon":-1052891232,"lat":411219785}}},{"delta":{"node-LatLon":{"lon":-1052908476,"lat":411226105}}},{"delta":{"node-LatLon":{"lon":-1052926265,"lat":411231492}}},{"delta":{"node-LatLon":{"lon":-1052944495,"lat":411235952}}},{"delta":{"node-LatLon":{"lon":-1052963092,"lat":411239437}}},{"delta":{"node-LatLon":{"lon":-1052981949,"lat":411242012}}},{"delta":{"node-LatLon":{"lon":-1053000858,"lat":411244369}}},{"delta":{"node-LatLon":{"lon":-1053019776,"lat":411246688}}},{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053057596,"lat":411251395}}},{"delta":{"node-LatLon":{"lon":-1053076521,"lat":411253681}}},{"delta":{"node-LatLon":{"lon":-1053095502,"lat":411255432}}},{"delta":{"node-LatLon":{"lon":-1053114552,"lat":411256735}}},{"delta":{"node-LatLon":{"lon":-1053133604,"lat":411258022}}},{"delta":{"node-LatLon":{"lon":-1053152654,"lat":411259322}}},{"delta":{"node-LatLon":{"lon":-1053171705,"lat":411260611}}},{"delta":{"node-LatLon":{"lon":-1053190756,"lat":411261912}}},{"delta":{"node-LatLon":{"lon":-1053209808,"lat":411263198}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411072254,"long":-1052512418}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":22}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.9375,"latitude":41.150377,"speed":10.18,"longitude":-104.6570136},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":141,"serialNumber":15570,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.795Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"000000000000025AF6","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410964119,"long":-1051880840},"name":"westbound_I80_341.6_338.1_SAT-540A458A_VSL_V002247","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}},{"delta":{"node-LatLon":{"lon":-1051918620,"lat":410961452}}},{"delta":{"node-LatLon":{"lon":-1051937339,"lat":410959095}}},{"delta":{"node-LatLon":{"lon":-1051956011,"lat":410956529}}},{"delta":{"node-LatLon":{"lon":-1051974706,"lat":410954064}}},{"delta":{"node-LatLon":{"lon":-1051993632,"lat":410953204}}},{"delta":{"node-LatLon":{"lon":-1052012535,"lat":410954343}}},{"delta":{"node-LatLon":{"lon":-1052031026,"lat":410957479}}},{"delta":{"node-LatLon":{"lon":-1052048783,"lat":410962474}}},{"delta":{"node-LatLon":{"lon":-1052065392,"lat":410969376}}},{"delta":{"node-LatLon":{"lon":-1052081156,"lat":410977355}}},{"delta":{"node-LatLon":{"lon":-1052097000,"lat":410985243}}},{"delta":{"node-LatLon":{"lon":-1052113110,"lat":410992814}}},{"delta":{"node-LatLon":{"lon":-1052129309,"lat":411000279}}},{"delta":{"node-LatLon":{"lon":-1052145586,"lat":411007645}}},{"delta":{"node-LatLon":{"lon":-1052161846,"lat":411015033}}},{"delta":{"node-LatLon":{"lon":-1052178141,"lat":411022378}}},{"delta":{"node-LatLon":{"lon":-1052194841,"lat":411029703}}},{"delta":{"node-LatLon":{"lon":-1052212178,"lat":411036116}}},{"delta":{"node-LatLon":{"lon":-1052230242,"lat":411041252}}},{"delta":{"node-LatLon":{"lon":-1052248856,"lat":411045103}}},{"delta":{"node-LatLon":{"lon":-1052267858,"lat":411047647}}},{"delta":{"node-LatLon":{"lon":-1052287100,"lat":411048748}}},{"delta":{"node-LatLon":{"lon":-1052306402,"lat":411048858}}},{"delta":{"node-LatLon":{"lon":-1052325706,"lat":411048940}}},{"delta":{"node-LatLon":{"lon":-1052345008,"lat":411049101}}},{"delta":{"node-LatLon":{"lon":-1052364312,"lat":411049135}}},{"delta":{"node-LatLon":{"lon":-1052383393,"lat":411049206}}},{"delta":{"node-LatLon":{"lon":-1052402452,"lat":411049814}}},{"delta":{"node-LatLon":{"lon":-1052421426,"lat":411051319}}},{"delta":{"node-LatLon":{"lon":-1052440234,"lat":411053738}}},{"delta":{"node-LatLon":{"lon":-1052458744,"lat":411057225}}},{"delta":{"node-LatLon":{"lon":-1052476819,"lat":411061846}}},{"delta":{"node-LatLon":{"lon":-1052494624,"lat":411067040}}},{"delta":{"node-LatLon":{"lon":-1052512418,"lat":411072254}}},{"delta":{"node-LatLon":{"lon":-1052530201,"lat":411077493}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410964119,"long":-1051880840}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":17}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.9375,"latitude":41.150377,"speed":10.18,"longitude":-104.6570136},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":140,"serialNumber":15569,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"00000000000001F426","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410988342,"long":-1051297925},"name":"westbound_I80_344.69_341.6_SAT-0D253AC5_VSL_V002266","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051316401,"lat":410987822}}},{"delta":{"node-LatLon":{"lon":-1051334880,"lat":410987346}}},{"delta":{"node-LatLon":{"lon":-1051353366,"lat":410987336}}},{"delta":{"node-LatLon":{"lon":-1051371832,"lat":410988032}}},{"delta":{"node-LatLon":{"lon":-1051390245,"lat":410989287}}},{"delta":{"node-LatLon":{"lon":-1051408562,"lat":410991189}}},{"delta":{"node-LatLon":{"lon":-1051426852,"lat":410993239}}},{"delta":{"node-LatLon":{"lon":-1051445141,"lat":410995292}}},{"delta":{"node-LatLon":{"lon":-1051464077,"lat":410997440}}},{"delta":{"node-LatLon":{"lon":-1051483045,"lat":410999413}}},{"delta":{"node-LatLon":{"lon":-1051502129,"lat":411000540}}},{"delta":{"node-LatLon":{"lon":-1051521267,"lat":411000337}}},{"delta":{"node-LatLon":{"lon":-1051540305,"lat":410998837}}},{"delta":{"node-LatLon":{"lon":-1051559069,"lat":410995977}}},{"delta":{"node-LatLon":{"lon":-1051577615,"lat":410992374}}},{"delta":{"node-LatLon":{"lon":-1051596119,"lat":410988652}}},{"delta":{"node-LatLon":{"lon":-1051614630,"lat":410984946}}},{"delta":{"node-LatLon":{"lon":-1051633310,"lat":410981780}}},{"delta":{"node-LatLon":{"lon":-1051652234,"lat":410979420}}},{"delta":{"node-LatLon":{"lon":-1051671284,"lat":410977720}}},{"delta":{"node-LatLon":{"lon":-1051690345,"lat":410976089}}},{"delta":{"node-LatLon":{"lon":-1051709415,"lat":410974522}}},{"delta":{"node-LatLon":{"lon":-1051728480,"lat":410972919}}},{"delta":{"node-LatLon":{"lon":-1051747551,"lat":410971360}}},{"delta":{"node-LatLon":{"lon":-1051766615,"lat":410969748}}},{"delta":{"node-LatLon":{"lon":-1051785706,"lat":410968344}}},{"delta":{"node-LatLon":{"lon":-1051804844,"lat":410967360}}},{"delta":{"node-LatLon":{"lon":-1051823993,"lat":410966522}}},{"delta":{"node-LatLon":{"lon":-1051842945,"lat":410965770}}},{"delta":{"node-LatLon":{"lon":-1051861895,"lat":410964974}}},{"delta":{"node-LatLon":{"lon":-1051880840,"lat":410964119}}},{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410988342,"long":-1051297925}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":17}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":251.0625,"latitude":41.1531237,"speed":0.02,"longitude":-104.6592302},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":137,"serialNumber":15566,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:05:45.221Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":33.15,"latitude":41.1503693,"speed":10.08,"longitude":-104.6570203},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":139,"serialNumber":15568,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"0000000000000AB37E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411002479,"long":-1050722393},"name":"westbound_I80_347.69_344.69_SAT-3E628AB0_VSL_V002290","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050741574,"lat":411002681}}},{"delta":{"node-LatLon":{"lon":-1050760755,"lat":411002869}}},{"delta":{"node-LatLon":{"lon":-1050779937,"lat":411002969}}},{"delta":{"node-LatLon":{"lon":-1050799110,"lat":411002558}}},{"delta":{"node-LatLon":{"lon":-1050818249,"lat":411001589}}},{"delta":{"node-LatLon":{"lon":-1050837364,"lat":411000370}}},{"delta":{"node-LatLon":{"lon":-1050856482,"lat":410999179}}},{"delta":{"node-LatLon":{"lon":-1050875598,"lat":410997967}}},{"delta":{"node-LatLon":{"lon":-1050895063,"lat":410996770}}},{"delta":{"node-LatLon":{"lon":-1050914524,"lat":410995536}}},{"delta":{"node-LatLon":{"lon":-1050933978,"lat":410994246}}},{"delta":{"node-LatLon":{"lon":-1050953322,"lat":410992263}}},{"delta":{"node-LatLon":{"lon":-1050972317,"lat":410988851}}},{"delta":{"node-LatLon":{"lon":-1050990956,"lat":410984444}}},{"delta":{"node-LatLon":{"lon":-1051009569,"lat":410979971}}},{"delta":{"node-LatLon":{"lon":-1051028444,"lat":410976198}}},{"delta":{"node-LatLon":{"lon":-1051047752,"lat":410974038}}},{"delta":{"node-LatLon":{"lon":-1051067254,"lat":410973454}}},{"delta":{"node-LatLon":{"lon":-1051086711,"lat":410974535}}},{"delta":{"node-LatLon":{"lon":-1051105965,"lat":410976959}}},{"delta":{"node-LatLon":{"lon":-1051125148,"lat":410979701}}},{"delta":{"node-LatLon":{"lon":-1051144365,"lat":410982302}}},{"delta":{"node-LatLon":{"lon":-1051163659,"lat":410984549}}},{"delta":{"node-LatLon":{"lon":-1051183016,"lat":410986460}}},{"delta":{"node-LatLon":{"lon":-1051202450,"lat":410987845}}},{"delta":{"node-LatLon":{"lon":-1051221934,"lat":410988766}}},{"delta":{"node-LatLon":{"lon":-1051241445,"lat":410989249}}},{"delta":{"node-LatLon":{"lon":-1051260967,"lat":410989237}}},{"delta":{"node-LatLon":{"lon":-1051279448,"lat":410988854}}},{"delta":{"node-LatLon":{"lon":-1051297925,"lat":410988342}}},{"delta":{"node-LatLon":{"lon":-1051316401,"lat":410987822}}},{"delta":{"node-LatLon":{"lon":-1051334880,"lat":410987346}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411002479,"long":-1050722393}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":13}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":35.525,"latitude":41.1502985,"speed":8.76,"longitude":-104.6570835},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":138,"serialNumber":15567,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:02.689Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":251.0625,"latitude":41.1531242,"speed":0.02,"longitude":-104.6592305},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":136,"serialNumber":15565,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:05:33.701Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":251.0625,"latitude":41.1531244,"speed":0.02,"longitude":-104.6592302},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":135,"serialNumber":15564,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:04:35.702Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":251.0625,"latitude":41.1531259,"speed":0.02,"longitude":-104.659231},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":134,"serialNumber":15563,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:04:24.119Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":251.0625,"latitude":41.1531274,"speed":0.02,"longitude":-104.6592349},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":133,"serialNumber":15562,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:00:21.777Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1821,"heading":55.6625,"latitude":41.1432762,"speed":33.68,"longitude":-104.6883421},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":132,"serialNumber":15561,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:53:06.352Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31610,"packetID":"0000000000000B4F4D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411246688,"long":-1053019776},"name":"westbound_I80_323.05_335.11_SAT-B91A2E52_RC_LARI80ECHEYBD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053114552,"lat":411256735}}},{"delta":{"node-LatLon":{"lon":-1053190756,"lat":411261912}}},{"delta":{"node-LatLon":{"lon":-1053266797,"lat":411268154}}},{"delta":{"node-LatLon":{"lon":-1053338337,"lat":411279861}}},{"delta":{"node-LatLon":{"lon":-1053405816,"lat":411300582}}},{"delta":{"node-LatLon":{"lon":-1053462344,"lat":411338132}}},{"delta":{"node-LatLon":{"lon":-1053516546,"lat":411380266}}},{"delta":{"node-LatLon":{"lon":-1053575650,"lat":411418098}}},{"delta":{"node-LatLon":{"lon":-1053651429,"lat":411438163}}},{"delta":{"node-LatLon":{"lon":-1053731780,"lat":411444206}}},{"delta":{"node-LatLon":{"lon":-1053806111,"lat":411463205}}},{"delta":{"node-LatLon":{"lon":-1053873524,"lat":411489854}}},{"delta":{"node-LatLon":{"lon":-1053936557,"lat":411522463}}},{"delta":{"node-LatLon":{"lon":-1053996450,"lat":411555749}}},{"delta":{"node-LatLon":{"lon":-1054048431,"lat":411595888}}},{"delta":{"node-LatLon":{"lon":-1054090598,"lat":411643369}}},{"delta":{"node-LatLon":{"lon":-1054127454,"lat":411694572}}},{"delta":{"node-LatLon":{"lon":-1054164403,"lat":411745737}}},{"delta":{"node-LatLon":{"lon":-1054200041,"lat":411796105}}},{"delta":{"node-LatLon":{"lon":-1054218886,"lat":411851211}}},{"delta":{"node-LatLon":{"lon":-1054243815,"lat":411905185}}},{"delta":{"node-LatLon":{"lon":-1054287780,"lat":411952905}}},{"delta":{"node-LatLon":{"lon":-1054331852,"lat":412000578}}},{"delta":{"node-LatLon":{"lon":-1054374628,"lat":412046505}}},{"delta":{"node-LatLon":{"lon":-1054408178,"lat":412096432}}},{"delta":{"node-LatLon":{"lon":-1054401538,"lat":412152329}}},{"delta":{"node-LatLon":{"lon":-1054382654,"lat":412208387}}},{"delta":{"node-LatLon":{"lon":-1054387241,"lat":412265649}}},{"delta":{"node-LatLon":{"lon":-1054369571,"lat":412321177}}},{"delta":{"node-LatLon":{"lon":-1054372542,"lat":412378541}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1000000000001111}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411246688,"long":-1053019776}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5127}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31610}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1821,"heading":55.6,"latitude":41.143259,"speed":33.66,"longitude":-104.6883751},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":131,"serialNumber":15560,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:53:06.352Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31610,"packetID":"0000000000000F25D6","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412420501,"long":-1054392109},"name":"eastbound_I80_323.05_335.11_SAT-2FAB6C57_RC_LARI80ECHEYBI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054375725,"lat":412379414}}},{"delta":{"node-LatLon":{"lon":-1054372327,"lat":412322445}}},{"delta":{"node-LatLon":{"lon":-1054390501,"lat":412267361}}},{"delta":{"node-LatLon":{"lon":-1054385250,"lat":412209941}}},{"delta":{"node-LatLon":{"lon":-1054403962,"lat":412153723}}},{"delta":{"node-LatLon":{"lon":-1054414034,"lat":412097480}}},{"delta":{"node-LatLon":{"lon":-1054381691,"lat":412046104}}},{"delta":{"node-LatLon":{"lon":-1054338178,"lat":411999356}}},{"delta":{"node-LatLon":{"lon":-1054294112,"lat":411952041}}},{"delta":{"node-LatLon":{"lon":-1054250145,"lat":411904675}}},{"delta":{"node-LatLon":{"lon":-1054224664,"lat":411850678}}},{"delta":{"node-LatLon":{"lon":-1054205670,"lat":411794929}}},{"delta":{"node-LatLon":{"lon":-1054169702,"lat":411743977}}},{"delta":{"node-LatLon":{"lon":-1054132917,"lat":411693026}}},{"delta":{"node-LatLon":{"lon":-1054096134,"lat":411642075}}},{"delta":{"node-LatLon":{"lon":-1054053933,"lat":411594218}}},{"delta":{"node-LatLon":{"lon":-1054001524,"lat":411553158}}},{"delta":{"node-LatLon":{"lon":-1053940802,"lat":411519210}}},{"delta":{"node-LatLon":{"lon":-1053877704,"lat":411486540}}},{"delta":{"node-LatLon":{"lon":-1053810387,"lat":411459552}}},{"delta":{"node-LatLon":{"lon":-1053739051,"lat":411438927}}},{"delta":{"node-LatLon":{"lon":-1053667804,"lat":411418317}}},{"delta":{"node-LatLon":{"lon":-1053596576,"lat":411397677}}},{"delta":{"node-LatLon":{"lon":-1053529834,"lat":411369925}}},{"delta":{"node-LatLon":{"lon":-1053471129,"lat":411332755}}},{"delta":{"node-LatLon":{"lon":-1053412343,"lat":411295468}}},{"delta":{"node-LatLon":{"lon":-1053346537,"lat":411266040}}},{"delta":{"node-LatLon":{"lon":-1053271167,"lat":411256326}}},{"delta":{"node-LatLon":{"lon":-1053194621,"lat":411255101}}},{"delta":{"node-LatLon":{"lon":-1053118075,"lat":411253866}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111110000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412420501,"long":-1054392109}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5127}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31610}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1820,"heading":55.65,"latitude":41.1429505,"speed":33.72,"longitude":-104.6889711},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":130,"serialNumber":15559,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:53:04.456Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31610,"packetID":"0000000000000936E7","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417414634,"long":-1068269969},"name":"westbound_I80_221.2_235.23_SAT-09D8678A_RC_RAWI80ELARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1068289321,"lat":417415359}}},{"delta":{"node-LatLon":{"lon":-1068308673,"lat":417416093}}},{"delta":{"node-LatLon":{"lon":-1068385974,"lat":417418859}}},{"delta":{"node-LatLon":{"lon":-1068463156,"lat":417421689}}},{"delta":{"node-LatLon":{"lon":-1068540338,"lat":417424515}}},{"delta":{"node-LatLon":{"lon":-1068617852,"lat":417427395}}},{"delta":{"node-LatLon":{"lon":-1068695369,"lat":417430231}}},{"delta":{"node-LatLon":{"lon":-1068772890,"lat":417433050}}},{"delta":{"node-LatLon":{"lon":-1068850417,"lat":417435830}}},{"delta":{"node-LatLon":{"lon":-1068927943,"lat":417438632}}},{"delta":{"node-LatLon":{"lon":-1069005025,"lat":417441424}}},{"delta":{"node-LatLon":{"lon":-1069082106,"lat":417444219}}},{"delta":{"node-LatLon":{"lon":-1069159408,"lat":417446974}}},{"delta":{"node-LatLon":{"lon":-1069236759,"lat":417451306}}},{"delta":{"node-LatLon":{"lon":-1069312011,"lat":417465173}}},{"delta":{"node-LatLon":{"lon":-1069385103,"lat":417484568}}},{"delta":{"node-LatLon":{"lon":-1069458135,"lat":417504094}}},{"delta":{"node-LatLon":{"lon":-1069530060,"lat":417523167}}},{"delta":{"node-LatLon":{"lon":-1069600849,"lat":417541844}}},{"delta":{"node-LatLon":{"lon":-1069673525,"lat":417555795}}},{"delta":{"node-LatLon":{"lon":-1069748966,"lat":417568966}}},{"delta":{"node-LatLon":{"lon":-1069824418,"lat":417582109}}},{"delta":{"node-LatLon":{"lon":-1069899351,"lat":417595155}}},{"delta":{"node-LatLon":{"lon":-1069973766,"lat":417608100}}},{"delta":{"node-LatLon":{"lon":-1070048170,"lat":417621086}}},{"delta":{"node-LatLon":{"lon":-1070123773,"lat":417634264}}},{"delta":{"node-LatLon":{"lon":-1070199399,"lat":417647374}}},{"delta":{"node-LatLon":{"lon":-1070274965,"lat":417660512}}},{"delta":{"node-LatLon":{"lon":-1070350472,"lat":417673678}}},{"delta":{"node-LatLon":{"lon":-1070425989,"lat":417686813}}},{"delta":{"node-LatLon":{"lon":-1070501711,"lat":417699947}}},{"delta":{"node-LatLon":{"lon":-1070577425,"lat":417713109}}},{"delta":{"node-LatLon":{"lon":-1070653637,"lat":417726293}}},{"delta":{"node-LatLon":{"lon":-1070730992,"lat":417736504}}},{"delta":{"node-LatLon":{"lon":-1070808409,"lat":417727589}}},{"delta":{"node-LatLon":{"lon":-1070884161,"lat":417718392}}},{"delta":{"node-LatLon":{"lon":-1070959940,"lat":417729715}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417414634,"long":-1068269969}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31610}},"msgCnt":34}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1819,"heading":55.6625,"latitude":41.1429333,"speed":33.7,"longitude":-104.6890041},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":129,"serialNumber":15558,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:53:04.456Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31610,"packetID":"00000000000009698C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417730521,"long":-1070980675},"name":"eastbound_I80_221.2_235.23_SAT-BA88D691_RC_RAWI80ELARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1070961677,"lat":417727641}}},{"delta":{"node-LatLon":{"lon":-1070885649,"lat":417716362}}},{"delta":{"node-LatLon":{"lon":-1070809626,"lat":417725169}}},{"delta":{"node-LatLon":{"lon":-1070732756,"lat":417733042}}},{"delta":{"node-LatLon":{"lon":-1070656229,"lat":417722191}}},{"delta":{"node-LatLon":{"lon":-1070580490,"lat":417709023}}},{"delta":{"node-LatLon":{"lon":-1070504992,"lat":417695900}}},{"delta":{"node-LatLon":{"lon":-1070429493,"lat":417682786}}},{"delta":{"node-LatLon":{"lon":-1070354047,"lat":417669673}}},{"delta":{"node-LatLon":{"lon":-1070278596,"lat":417656581}}},{"delta":{"node-LatLon":{"lon":-1070202954,"lat":417643413}}},{"delta":{"node-LatLon":{"lon":-1070127097,"lat":417630244}}},{"delta":{"node-LatLon":{"lon":-1070051256,"lat":417617028}}},{"delta":{"node-LatLon":{"lon":-1069975759,"lat":417603852}}},{"delta":{"node-LatLon":{"lon":-1069900250,"lat":417590719}}},{"delta":{"node-LatLon":{"lon":-1069825529,"lat":417577695}}},{"delta":{"node-LatLon":{"lon":-1069751604,"lat":417564757}}},{"delta":{"node-LatLon":{"lon":-1069677665,"lat":417551870}}},{"delta":{"node-LatLon":{"lon":-1069603910,"lat":417538967}}},{"delta":{"node-LatLon":{"lon":-1069531945,"lat":417521380}}},{"delta":{"node-LatLon":{"lon":-1069460002,"lat":417502274}}},{"delta":{"node-LatLon":{"lon":-1069387530,"lat":417482961}}},{"delta":{"node-LatLon":{"lon":-1069315049,"lat":417463671}}},{"delta":{"node-LatLon":{"lon":-1069240161,"lat":417448143}}},{"delta":{"node-LatLon":{"lon":-1069162781,"lat":417442613}}},{"delta":{"node-LatLon":{"lon":-1069085198,"lat":417439823}}},{"delta":{"node-LatLon":{"lon":-1069007744,"lat":417437041}}},{"delta":{"node-LatLon":{"lon":-1068930291,"lat":417434237}}},{"delta":{"node-LatLon":{"lon":-1068853004,"lat":417431463}}},{"delta":{"node-LatLon":{"lon":-1068775721,"lat":417428637}}},{"delta":{"node-LatLon":{"lon":-1068698384,"lat":417425830}}},{"delta":{"node-LatLon":{"lon":-1068620993,"lat":417423054}}},{"delta":{"node-LatLon":{"lon":-1068543604,"lat":417420239}}},{"delta":{"node-LatLon":{"lon":-1068465827,"lat":417417448}}},{"delta":{"node-LatLon":{"lon":-1068388058,"lat":417414571}}},{"delta":{"node-LatLon":{"lon":-1068310584,"lat":417411739}}},{"delta":{"node-LatLon":{"lon":-1068291290,"lat":417411033}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417730521,"long":-1070980675}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31610}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1813,"heading":55.8,"latitude":41.1416528,"speed":33.86,"longitude":-104.6915031},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":128,"serialNumber":15557,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:52:56.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1785,"heading":64.5,"latitude":41.1294943,"speed":33.72,"longitude":-104.7183663},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":127,"serialNumber":15556,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:51:38.659Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1785,"heading":64.4875,"latitude":41.129429,"speed":33.72,"longitude":-104.7185478},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":126,"serialNumber":15555,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:51:38.064Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1786,"heading":64.4,"latitude":41.1281042,"speed":33.72,"longitude":-104.7222965},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":125,"serialNumber":15554,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:51:27.862Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":83.2375,"latitude":41.1237719,"speed":33.74,"longitude":-104.7710343},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":124,"serialNumber":15553,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:49:24.469Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1812,"heading":79.025,"latitude":41.1232447,"speed":33.74,"longitude":-104.7751515},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":123,"serialNumber":15552,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:49:14.272Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1847,"heading":78.975,"latitude":41.1169477,"speed":32.36,"longitude":-104.8182828},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":122,"serialNumber":15551,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:47:24.575Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1845,"heading":77.7,"latitude":41.1159012,"speed":34,"longitude":-104.8409627},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":121,"serialNumber":15550,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:46:27.777Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1849,"heading":73.9,"latitude":41.1149888,"speed":33.66,"longitude":-104.8452745},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":120,"serialNumber":15549,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:46:16.678Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1906,"heading":89.55,"latitude":41.116473,"speed":33.74,"longitude":-104.8918353},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":119,"serialNumber":15548,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:44:17.473Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1934,"heading":81.9125,"latitude":41.1133295,"speed":33.72,"longitude":-104.928415},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":118,"serialNumber":15547,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:42:45.469Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1935,"heading":81.8375,"latitude":41.112875,"speed":33.74,"longitude":-104.9328746},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":117,"serialNumber":15546,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:42:34.275Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1974,"heading":84.1875,"latitude":41.1097147,"speed":33.74,"longitude":-104.9682881},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":116,"serialNumber":15545,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:41:05.380Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2012,"heading":69.7125,"latitude":41.1052636,"speed":33.68,"longitude":-104.9975033},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":115,"serialNumber":15544,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:39:50.989Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2013,"heading":69.6,"latitude":41.1051793,"speed":33.7,"longitude":-104.9978043},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":114,"serialNumber":15543,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:39:50.295Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2023,"heading":69.3,"latitude":41.1036902,"speed":33.84,"longitude":-105.0030723},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":113,"serialNumber":15542,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:39:36.288Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2067,"heading":88.15,"latitude":41.103157,"speed":32.74,"longitude":-105.0380418},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":112,"serialNumber":15541,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:38:06.906Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2101,"heading":89.1625,"latitude":41.0997427,"speed":29.06,"longitude":-105.0669513},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":111,"serialNumber":15540,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:36:43.704Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2106,"heading":90.6,"latitude":41.0997719,"speed":29.24,"longitude":-105.072266},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":110,"serialNumber":15539,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:36:28.405Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2156,"heading":92.55,"latitude":41.0978479,"speed":18.52,"longitude":-105.114164},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":109,"serialNumber":15538,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:34:24.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.7,"latitude":41.0973887,"speed":29.26,"longitude":-105.1050253},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":108,"serialNumber":15537,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.398Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525486,"packetID":"0000000000000A59C2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410988342,"long":-1051297925},"name":"westbound_I80_344.69_341.6_RSU-10.145.13.73_VSL_V002266","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051316401,"lat":410987822}}},{"delta":{"node-LatLon":{"lon":-1051334880,"lat":410987346}}},{"delta":{"node-LatLon":{"lon":-1051353366,"lat":410987336}}},{"delta":{"node-LatLon":{"lon":-1051371832,"lat":410988032}}},{"delta":{"node-LatLon":{"lon":-1051390245,"lat":410989287}}},{"delta":{"node-LatLon":{"lon":-1051408562,"lat":410991189}}},{"delta":{"node-LatLon":{"lon":-1051426852,"lat":410993239}}},{"delta":{"node-LatLon":{"lon":-1051445141,"lat":410995292}}},{"delta":{"node-LatLon":{"lon":-1051464077,"lat":410997440}}},{"delta":{"node-LatLon":{"lon":-1051483045,"lat":410999413}}},{"delta":{"node-LatLon":{"lon":-1051502129,"lat":411000540}}},{"delta":{"node-LatLon":{"lon":-1051521267,"lat":411000337}}},{"delta":{"node-LatLon":{"lon":-1051540305,"lat":410998837}}},{"delta":{"node-LatLon":{"lon":-1051559069,"lat":410995977}}},{"delta":{"node-LatLon":{"lon":-1051577615,"lat":410992374}}},{"delta":{"node-LatLon":{"lon":-1051596119,"lat":410988652}}},{"delta":{"node-LatLon":{"lon":-1051614630,"lat":410984946}}},{"delta":{"node-LatLon":{"lon":-1051633310,"lat":410981780}}},{"delta":{"node-LatLon":{"lon":-1051652234,"lat":410979420}}},{"delta":{"node-LatLon":{"lon":-1051671284,"lat":410977720}}},{"delta":{"node-LatLon":{"lon":-1051690345,"lat":410976089}}},{"delta":{"node-LatLon":{"lon":-1051709415,"lat":410974522}}},{"delta":{"node-LatLon":{"lon":-1051728480,"lat":410972919}}},{"delta":{"node-LatLon":{"lon":-1051747551,"lat":410971360}}},{"delta":{"node-LatLon":{"lon":-1051766615,"lat":410969748}}},{"delta":{"node-LatLon":{"lon":-1051785706,"lat":410968344}}},{"delta":{"node-LatLon":{"lon":-1051804844,"lat":410967360}}},{"delta":{"node-LatLon":{"lon":-1051823993,"lat":410966522}}},{"delta":{"node-LatLon":{"lon":-1051842945,"lat":410965770}}},{"delta":{"node-LatLon":{"lon":-1051861895,"lat":410964974}}},{"delta":{"node-LatLon":{"lon":-1051880840,"lat":410964119}}},{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410988342,"long":-1051297925}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":525486}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.4125,"latitude":41.0973906,"speed":29.22,"longitude":-105.1049903},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":107,"serialNumber":15536,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.298Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525488,"packetID":"000000000000095E23","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410982319,"long":-1051615463},"name":"eastbound_I80_343.24_345.9_RSU-10.145.13.73_VSL_V002255","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051578694,"lat":410989607}}},{"delta":{"node-LatLon":{"lon":-1051560307,"lat":410993246}}},{"delta":{"node-LatLon":{"lon":-1051541730,"lat":410996259}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051503871,"lat":410998228}}},{"delta":{"node-LatLon":{"lon":-1051484919,"lat":410997224}}},{"delta":{"node-LatLon":{"lon":-1051466104,"lat":410995204}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051428300,"lat":410990965}}},{"delta":{"node-LatLon":{"lon":-1051409297,"lat":410988823}}},{"delta":{"node-LatLon":{"lon":-1051390243,"lat":410986964}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051351924,"lat":410984978}}},{"delta":{"node-LatLon":{"lon":-1051332714,"lat":410985049}}},{"delta":{"node-LatLon":{"lon":-1051313512,"lat":410985509}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051275112,"lat":410986528}}},{"delta":{"node-LatLon":{"lon":-1051255905,"lat":410986855}}},{"delta":{"node-LatLon":{"lon":-1051236694,"lat":410986784}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051198327,"lat":410985247}}},{"delta":{"node-LatLon":{"lon":-1051179211,"lat":410983796}}},{"delta":{"node-LatLon":{"lon":-1051160152,"lat":410981958}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051122310,"lat":410976921}}},{"delta":{"node-LatLon":{"lon":-1051103433,"lat":410974214}}},{"delta":{"node-LatLon":{"lon":-1051084469,"lat":410971913}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410982319,"long":-1051615463}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":525488}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.4125,"latitude":41.0973927,"speed":29.22,"longitude":-105.1049556},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":106,"serialNumber":15535,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.202Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525489,"packetID":"000000000000075900","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410974214,"long":-1051103433},"name":"eastbound_I80_345.9_349.15_RSU-10.145.13.73_VSL_V002275","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051084469,"lat":410971913}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1051046217,"lat":410971780}}},{"delta":{"node-LatLon":{"lon":-1051027336,"lat":410973993}}},{"delta":{"node-LatLon":{"lon":-1051008857,"lat":410977669}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050972405,"lat":410986387}}},{"delta":{"node-LatLon":{"lon":-1050953820,"lat":410989753}}},{"delta":{"node-LatLon":{"lon":-1050934905,"lat":410991795}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050896815,"lat":410994269}}},{"delta":{"node-LatLon":{"lon":-1050877759,"lat":410995411}}},{"delta":{"node-LatLon":{"lon":-1050858673,"lat":410996615}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050820456,"lat":410998476}}},{"delta":{"node-LatLon":{"lon":-1050801305,"lat":410998519}}},{"delta":{"node-LatLon":{"lon":-1050782155,"lat":410998320}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050743855,"lat":410997929}}},{"delta":{"node-LatLon":{"lon":-1050724706,"lat":410997718}}},{"delta":{"node-LatLon":{"lon":-1050705556,"lat":410997530}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050667295,"lat":410997427}}},{"delta":{"node-LatLon":{"lon":-1050648246,"lat":410998545}}},{"delta":{"node-LatLon":{"lon":-1050629421,"lat":411001016}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}},{"delta":{"node-LatLon":{"lon":-1050591949,"lat":411006727}}},{"delta":{"node-LatLon":{"lon":-1050573199,"lat":411009532}}},{"delta":{"node-LatLon":{"lon":-1050554451,"lat":411012343}}},{"delta":{"node-LatLon":{"lon":-1050535715,"lat":411015202}}},{"delta":{"node-LatLon":{"lon":-1050516970,"lat":411018025}}},{"delta":{"node-LatLon":{"lon":-1050498229,"lat":411020862}}},{"delta":{"node-LatLon":{"lon":-1050479271,"lat":411023677}}},{"delta":{"node-LatLon":{"lon":-1050460327,"lat":411026546}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410974214,"long":-1051103433}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":525489}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.1625,"latitude":41.0973947,"speed":29.22,"longitude":-105.1049209},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":105,"serialNumber":15534,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.102Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525489,"packetID":"0000000000000B442E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411020862,"long":-1050498229},"name":"eastbound_I80_349.15_353.5_RSU-10.145.13.73_VSL_V002299","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050479271,"lat":411023677}}},{"delta":{"node-LatLon":{"lon":-1050460327,"lat":411026546}}},{"delta":{"node-LatLon":{"lon":-1050441324,"lat":411029165}}},{"delta":{"node-LatLon":{"lon":-1050422091,"lat":411030485}}},{"delta":{"node-LatLon":{"lon":-1050402781,"lat":411030948}}},{"delta":{"node-LatLon":{"lon":-1050383473,"lat":411031428}}},{"delta":{"node-LatLon":{"lon":-1050364161,"lat":411031843}}},{"delta":{"node-LatLon":{"lon":-1050344848,"lat":411031826}}},{"delta":{"node-LatLon":{"lon":-1050325631,"lat":411030376}}},{"delta":{"node-LatLon":{"lon":-1050306653,"lat":411027659}}},{"delta":{"node-LatLon":{"lon":-1050288159,"lat":411024603}}},{"delta":{"node-LatLon":{"lon":-1050269678,"lat":411021507}}},{"delta":{"node-LatLon":{"lon":-1050251179,"lat":411018469}}},{"delta":{"node-LatLon":{"lon":-1050232676,"lat":411015448}}},{"delta":{"node-LatLon":{"lon":-1050214174,"lat":411012425}}},{"delta":{"node-LatLon":{"lon":-1050195535,"lat":411009957}}},{"delta":{"node-LatLon":{"lon":-1050176673,"lat":411008812}}},{"delta":{"node-LatLon":{"lon":-1050157751,"lat":411008904}}},{"delta":{"node-LatLon":{"lon":-1050138924,"lat":411010341}}},{"delta":{"node-LatLon":{"lon":-1050120335,"lat":411013008}}},{"delta":{"node-LatLon":{"lon":-1050102002,"lat":411016953}}},{"delta":{"node-LatLon":{"lon":-1050084082,"lat":411021875}}},{"delta":{"node-LatLon":{"lon":-1050066198,"lat":411026874}}},{"delta":{"node-LatLon":{"lon":-1050048325,"lat":411031899}}},{"delta":{"node-LatLon":{"lon":-1050030476,"lat":411036969}}},{"delta":{"node-LatLon":{"lon":-1050012604,"lat":411041995}}},{"delta":{"node-LatLon":{"lon":-1049994738,"lat":411047033}}},{"delta":{"node-LatLon":{"lon":-1049976865,"lat":411052057}}},{"delta":{"node-LatLon":{"lon":-1049959011,"lat":411057120}}},{"delta":{"node-LatLon":{"lon":-1049941141,"lat":411062151}}},{"delta":{"node-LatLon":{"lon":-1049923053,"lat":411066918}}},{"delta":{"node-LatLon":{"lon":-1049904488,"lat":411070470}}},{"delta":{"node-LatLon":{"lon":-1049885607,"lat":411072913}}},{"delta":{"node-LatLon":{"lon":-1049866692,"lat":411075206}}},{"delta":{"node-LatLon":{"lon":-1049847778,"lat":411077504}}},{"delta":{"node-LatLon":{"lon":-1049828870,"lat":411079830}}},{"delta":{"node-LatLon":{"lon":-1049809945,"lat":411082077}}},{"delta":{"node-LatLon":{"lon":-1049791039,"lat":411084415}}},{"delta":{"node-LatLon":{"lon":-1049772121,"lat":411086693}}},{"delta":{"node-LatLon":{"lon":-1049753209,"lat":411089002}}},{"delta":{"node-LatLon":{"lon":-1049734291,"lat":411091274}}},{"delta":{"node-LatLon":{"lon":-1049715382,"lat":411093589}}},{"delta":{"node-LatLon":{"lon":-1049696453,"lat":411095807}}},{"delta":{"node-LatLon":{"lon":-1049677431,"lat":411097499}}},{"delta":{"node-LatLon":{"lon":-1049658348,"lat":411098753}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411020862,"long":-1050498229}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":525489}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.1625,"latitude":41.097397,"speed":29.22,"longitude":-105.1048863},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":104,"serialNumber":15533,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.102Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525486,"packetID":"000000000000026E43","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411002479,"long":-1050722393},"name":"westbound_I80_347.69_344.69_RSU-10.145.13.73_VSL_V002290","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050741574,"lat":411002681}}},{"delta":{"node-LatLon":{"lon":-1050760755,"lat":411002869}}},{"delta":{"node-LatLon":{"lon":-1050779937,"lat":411002969}}},{"delta":{"node-LatLon":{"lon":-1050799110,"lat":411002558}}},{"delta":{"node-LatLon":{"lon":-1050818249,"lat":411001589}}},{"delta":{"node-LatLon":{"lon":-1050837364,"lat":411000370}}},{"delta":{"node-LatLon":{"lon":-1050856482,"lat":410999179}}},{"delta":{"node-LatLon":{"lon":-1050875598,"lat":410997967}}},{"delta":{"node-LatLon":{"lon":-1050895063,"lat":410996770}}},{"delta":{"node-LatLon":{"lon":-1050914524,"lat":410995536}}},{"delta":{"node-LatLon":{"lon":-1050933978,"lat":410994246}}},{"delta":{"node-LatLon":{"lon":-1050953322,"lat":410992263}}},{"delta":{"node-LatLon":{"lon":-1050972317,"lat":410988851}}},{"delta":{"node-LatLon":{"lon":-1050990956,"lat":410984444}}},{"delta":{"node-LatLon":{"lon":-1051009569,"lat":410979971}}},{"delta":{"node-LatLon":{"lon":-1051028444,"lat":410976198}}},{"delta":{"node-LatLon":{"lon":-1051047752,"lat":410974038}}},{"delta":{"node-LatLon":{"lon":-1051067254,"lat":410973454}}},{"delta":{"node-LatLon":{"lon":-1051086711,"lat":410974535}}},{"delta":{"node-LatLon":{"lon":-1051105965,"lat":410976959}}},{"delta":{"node-LatLon":{"lon":-1051125148,"lat":410979701}}},{"delta":{"node-LatLon":{"lon":-1051144365,"lat":410982302}}},{"delta":{"node-LatLon":{"lon":-1051163659,"lat":410984549}}},{"delta":{"node-LatLon":{"lon":-1051183016,"lat":410986460}}},{"delta":{"node-LatLon":{"lon":-1051202450,"lat":410987845}}},{"delta":{"node-LatLon":{"lon":-1051221934,"lat":410988766}}},{"delta":{"node-LatLon":{"lon":-1051241445,"lat":410989249}}},{"delta":{"node-LatLon":{"lon":-1051260967,"lat":410989237}}},{"delta":{"node-LatLon":{"lon":-1051279448,"lat":410988854}}},{"delta":{"node-LatLon":{"lon":-1051297925,"lat":410988342}}},{"delta":{"node-LatLon":{"lon":-1051316401,"lat":410987822}}},{"delta":{"node-LatLon":{"lon":-1051334880,"lat":410987346}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411002479,"long":-1050722393}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":525486}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":263.275,"latitude":41.0974419,"speed":29.16,"longitude":-105.1042981},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":103,"serialNumber":15532,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:11.398Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":262.5375,"latitude":41.0974641,"speed":29.2,"longitude":-105.1040569},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":102,"serialNumber":15531,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:10.599Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2066,"heading":268.2875,"latitude":41.1036482,"speed":33.28,"longitude":-105.0369024},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":99,"serialNumber":15528,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:30:09.661Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2149,"heading":252.35,"latitude":41.0983605,"speed":29.5,"longitude":-105.0994445},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":101,"serialNumber":15530,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:32:56.892Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2100,"heading":269.9,"latitude":41.1002133,"speed":33.28,"longitude":-105.0674061},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":100,"serialNumber":15529,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:31:27.899Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2062,"heading":278.05,"latitude":41.1035285,"speed":32.36,"longitude":-105.0326251},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":98,"serialNumber":15527,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:29:58.756Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2044,"heading":102.4,"latitude":41.1010291,"speed":29.68,"longitude":-105.0199132},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":97,"serialNumber":15526,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:28:29.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"notUsed2":0,"notUsed3":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025307,"speed":24.46,"longitude":-105.0468926},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":96,"serialNumber":15525,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025263,"speed":24.46,"longitude":-105.0469211},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":94,"serialNumber":15523,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31532,"packetID":"0000000000000D4252","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412846200,"long":-1055207674},"name":"eastbound_I80_317.45_323.05_SAT-5AFFFEF8_RC_LARI80ECHEYI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055196465,"lat":412834401}}},{"delta":{"node-LatLon":{"lon":-1055185238,"lat":412822611}}},{"delta":{"node-LatLon":{"lon":-1055174028,"lat":412810812}}},{"delta":{"node-LatLon":{"lon":-1055162838,"lat":412799002}}},{"delta":{"node-LatLon":{"lon":-1055151564,"lat":412787238}}},{"delta":{"node-LatLon":{"lon":-1055139485,"lat":412775945}}},{"delta":{"node-LatLon":{"lon":-1055126153,"lat":412765484}}},{"delta":{"node-LatLon":{"lon":-1055111710,"lat":412756134}}},{"delta":{"node-LatLon":{"lon":-1055096204,"lat":412747808}}},{"delta":{"node-LatLon":{"lon":-1055080126,"lat":412740115}}},{"delta":{"node-LatLon":{"lon":-1055063926,"lat":412732570}}},{"delta":{"node-LatLon":{"lon":-1055046853,"lat":412726244}}},{"delta":{"node-LatLon":{"lon":-1055028777,"lat":412721773}}},{"delta":{"node-LatLon":{"lon":-1055009981,"lat":412719587}}},{"delta":{"node-LatLon":{"lon":-1054990989,"lat":412718648}}},{"delta":{"node-LatLon":{"lon":-1054972006,"lat":412717639}}},{"delta":{"node-LatLon":{"lon":-1054953009,"lat":412716759}}},{"delta":{"node-LatLon":{"lon":-1054934016,"lat":412716179}}},{"delta":{"node-LatLon":{"lon":-1054915016,"lat":412715870}}},{"delta":{"node-LatLon":{"lon":-1054896123,"lat":412717322}}},{"delta":{"node-LatLon":{"lon":-1054877421,"lat":412719892}}},{"delta":{"node-LatLon":{"lon":-1054858665,"lat":412722173}}},{"delta":{"node-LatLon":{"lon":-1054839790,"lat":412721101}}},{"delta":{"node-LatLon":{"lon":-1054822378,"lat":412715508}}},{"delta":{"node-LatLon":{"lon":-1054808075,"lat":412706122}}},{"delta":{"node-LatLon":{"lon":-1054795466,"lat":412695384}}},{"delta":{"node-LatLon":{"lon":-1054782861,"lat":412684644}}},{"delta":{"node-LatLon":{"lon":-1054770097,"lat":412673836}}},{"delta":{"node-LatLon":{"lon":-1054756003,"lat":412664064}}},{"delta":{"node-LatLon":{"lon":-1054738855,"lat":412657720}}},{"delta":{"node-LatLon":{"lon":-1054719971,"lat":412655405}}},{"delta":{"node-LatLon":{"lon":-1054700821,"lat":412654615}}},{"delta":{"node-LatLon":{"lon":-1054681944,"lat":412652284}}},{"delta":{"node-LatLon":{"lon":-1054664843,"lat":412645844}}},{"delta":{"node-LatLon":{"lon":-1054649671,"lat":412637001}}},{"delta":{"node-LatLon":{"lon":-1054634409,"lat":412628251}}},{"delta":{"node-LatLon":{"lon":-1054617259,"lat":412621852}}},{"delta":{"node-LatLon":{"lon":-1054599367,"lat":412616899}}},{"delta":{"node-LatLon":{"lon":-1054582192,"lat":412610689}}},{"delta":{"node-LatLon":{"lon":-1054566302,"lat":412602767}}},{"delta":{"node-LatLon":{"lon":-1054551500,"lat":412593707}}},{"delta":{"node-LatLon":{"lon":-1054536736,"lat":412584610}}},{"delta":{"node-LatLon":{"lon":-1054521939,"lat":412575543}}},{"delta":{"node-LatLon":{"lon":-1054507197,"lat":412566427}}},{"delta":{"node-LatLon":{"lon":-1054492428,"lat":412557334}}},{"delta":{"node-LatLon":{"lon":-1054478373,"lat":412547636}}},{"delta":{"node-LatLon":{"lon":-1054466482,"lat":412536415}}},{"delta":{"node-LatLon":{"lon":-1054457123,"lat":412523979}}},{"delta":{"node-LatLon":{"lon":-1054448979,"lat":412511051}}},{"delta":{"node-LatLon":{"lon":-1054440857,"lat":412498114}}},{"delta":{"node-LatLon":{"lon":-1054432727,"lat":412485180}}},{"delta":{"node-LatLon":{"lon":-1054424622,"lat":412472238}}},{"delta":{"node-LatLon":{"lon":-1054416471,"lat":412459312}}},{"delta":{"node-LatLon":{"lon":-1054408332,"lat":412446382}}},{"delta":{"node-LatLon":{"lon":-1054400231,"lat":412433438}}},{"delta":{"node-LatLon":{"lon":-1054392109,"lat":412420501}}},{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054379237,"lat":412393551}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412846200,"long":-1055207674}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31532}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025307,"speed":24.46,"longitude":-105.0468926},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":95,"serialNumber":15524,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31534,"packetID":"0000000000000BF552","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412378541,"long":-1054372542},"name":"westbound_I80_317.45_323.05_SAT-7D6DFE3D_RC_LARI80ECHEYD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054376265,"lat":412392751}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}},{"delta":{"node-LatLon":{"lon":-1054388532,"lat":412420113}}},{"delta":{"node-LatLon":{"lon":-1054396624,"lat":412433185}}},{"delta":{"node-LatLon":{"lon":-1054404781,"lat":412446234}}},{"delta":{"node-LatLon":{"lon":-1054412998,"lat":412459262}}},{"delta":{"node-LatLon":{"lon":-1054421149,"lat":412472313}}},{"delta":{"node-LatLon":{"lon":-1054429340,"lat":412485351}}},{"delta":{"node-LatLon":{"lon":-1054437555,"lat":412498379}}},{"delta":{"node-LatLon":{"lon":-1054445744,"lat":412511417}}},{"delta":{"node-LatLon":{"lon":-1054453974,"lat":412524441}}},{"delta":{"node-LatLon":{"lon":-1054463289,"lat":412537025}}},{"delta":{"node-LatLon":{"lon":-1054475122,"lat":412548474}}},{"delta":{"node-LatLon":{"lon":-1054489160,"lat":412558405}}},{"delta":{"node-LatLon":{"lon":-1054504069,"lat":412567600}}},{"delta":{"node-LatLon":{"lon":-1054519000,"lat":412576776}}},{"delta":{"node-LatLon":{"lon":-1054533896,"lat":412585985}}},{"delta":{"node-LatLon":{"lon":-1054548833,"lat":412595156}}},{"delta":{"node-LatLon":{"lon":-1054563820,"lat":412604280}}},{"delta":{"node-LatLon":{"lon":-1054579779,"lat":412612388}}},{"delta":{"node-LatLon":{"lon":-1054597055,"lat":412618777}}},{"delta":{"node-LatLon":{"lon":-1054615114,"lat":412623812}}},{"delta":{"node-LatLon":{"lon":-1054632271,"lat":412629637}}},{"delta":{"node-LatLon":{"lon":-1054647306,"lat":412638180}}},{"delta":{"node-LatLon":{"lon":-1054662004,"lat":412647078}}},{"delta":{"node-LatLon":{"lon":-1054678467,"lat":412653902}}},{"delta":{"node-LatLon":{"lon":-1054696868,"lat":412656761}}},{"delta":{"node-LatLon":{"lon":-1054715678,"lat":412657581}}},{"delta":{"node-LatLon":{"lon":-1054734355,"lat":412659287}}},{"delta":{"node-LatLon":{"lon":-1054751683,"lat":412664718}}},{"delta":{"node-LatLon":{"lon":-1054765976,"lat":412673917}}},{"delta":{"node-LatLon":{"lon":-1054778503,"lat":412684544}}},{"delta":{"node-LatLon":{"lon":-1054791379,"lat":412695492}}},{"delta":{"node-LatLon":{"lon":-1054804278,"lat":412706425}}},{"delta":{"node-LatLon":{"lon":-1054818479,"lat":412716349}}},{"delta":{"node-LatLon":{"lon":-1054835859,"lat":412722690}}},{"delta":{"node-LatLon":{"lon":-1054854996,"lat":412724695}}},{"delta":{"node-LatLon":{"lon":-1054874196,"lat":412722759}}},{"delta":{"node-LatLon":{"lon":-1054893260,"lat":412720064}}},{"delta":{"node-LatLon":{"lon":-1054912492,"lat":412718274}}},{"delta":{"node-LatLon":{"lon":-1054931875,"lat":412718613}}},{"delta":{"node-LatLon":{"lon":-1054951253,"lat":412719209}}},{"delta":{"node-LatLon":{"lon":-1054969662,"lat":412719789}}},{"delta":{"node-LatLon":{"lon":-1054987987,"lat":412721117}}},{"delta":{"node-LatLon":{"lon":-1055005745,"lat":412724757}}},{"delta":{"node-LatLon":{"lon":-1055022420,"lat":412730636}}},{"delta":{"node-LatLon":{"lon":-1055038524,"lat":412737393}}},{"delta":{"node-LatLon":{"lon":-1055054603,"lat":412744185}}},{"delta":{"node-LatLon":{"lon":-1055070731,"lat":412750911}}},{"delta":{"node-LatLon":{"lon":-1055086830,"lat":412757675}}},{"delta":{"node-LatLon":{"lon":-1055102919,"lat":412764454}}},{"delta":{"node-LatLon":{"lon":-1055119050,"lat":412771172}}},{"delta":{"node-LatLon":{"lon":-1055134655,"lat":412779343}}},{"delta":{"node-LatLon":{"lon":-1055148584,"lat":412789095}}},{"delta":{"node-LatLon":{"lon":-1055160661,"lat":412800171}}},{"delta":{"node-LatLon":{"lon":-1055171718,"lat":412811853}}},{"delta":{"node-LatLon":{"lon":-1055182800,"lat":412823521}}},{"delta":{"node-LatLon":{"lon":-1055193934,"lat":412835162}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011111"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412378541,"long":-1054372542}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31534}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.102522,"speed":24.46,"longitude":-105.0469496},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":93,"serialNumber":15522,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"00000000000003E132","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"eastbound_I80_111.16_130.84_SAT-DEE31829_RC_RSI80ERAWI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.102522,"speed":24.46,"longitude":-105.0469496},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":92,"serialNumber":15521,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"000000000000032307","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416780373,"long":-1087800160},"name":"westbound_I80_111.16_130.84_SAT-60EFA4BA_RC_RSI80ERAWD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1087818098,"lat":416784087}}},{"delta":{"node-LatLon":{"lon":-1087836031,"lat":416787816}}},{"delta":{"node-LatLon":{"lon":-1087907758,"lat":416802744}}},{"delta":{"node-LatLon":{"lon":-1087979504,"lat":416817627}}},{"delta":{"node-LatLon":{"lon":-1088052834,"lat":416835667}}},{"delta":{"node-LatLon":{"lon":-1088118809,"lat":416865925}}},{"delta":{"node-LatLon":{"lon":-1088189118,"lat":416887479}}},{"delta":{"node-LatLon":{"lon":-1088265956,"lat":416884718}}},{"delta":{"node-LatLon":{"lon":-1088342780,"lat":416881687}}},{"delta":{"node-LatLon":{"lon":-1088419492,"lat":416886484}}},{"delta":{"node-LatLon":{"lon":-1088493522,"lat":416903350}}},{"delta":{"node-LatLon":{"lon":-1088567559,"lat":416920405}}},{"delta":{"node-LatLon":{"lon":-1088642038,"lat":416936455}}},{"delta":{"node-LatLon":{"lon":-1088718787,"lat":416933306}}},{"delta":{"node-LatLon":{"lon":-1088792811,"lat":416916445}}},{"delta":{"node-LatLon":{"lon":-1088868743,"lat":416911533}}},{"delta":{"node-LatLon":{"lon":-1088944838,"lat":416921259}}},{"delta":{"node-LatLon":{"lon":-1089020933,"lat":416916370}}},{"delta":{"node-LatLon":{"lon":-1089090262,"lat":416891382}}},{"delta":{"node-LatLon":{"lon":-1089158444,"lat":416862087}}},{"delta":{"node-LatLon":{"lon":-1089206739,"lat":416816167}}},{"delta":{"node-LatLon":{"lon":-1089229701,"lat":416761043}}},{"delta":{"node-LatLon":{"lon":-1089278517,"lat":416719880}}},{"delta":{"node-LatLon":{"lon":-1089348486,"lat":416699184}}},{"delta":{"node-LatLon":{"lon":-1089425832,"lat":416694198}}},{"delta":{"node-LatLon":{"lon":-1089503649,"lat":416693457}}},{"delta":{"node-LatLon":{"lon":-1089580254,"lat":416689749}}},{"delta":{"node-LatLon":{"lon":-1089654935,"lat":416679778}}},{"delta":{"node-LatLon":{"lon":-1089727701,"lat":416664462}}},{"delta":{"node-LatLon":{"lon":-1089800350,"lat":416634151}}},{"delta":{"node-LatLon":{"lon":-1089872661,"lat":416603374}}},{"delta":{"node-LatLon":{"lon":-1089942282,"lat":416573714}}},{"delta":{"node-LatLon":{"lon":-1090009243,"lat":416545210}}},{"delta":{"node-LatLon":{"lon":-1090076173,"lat":416516668}}},{"delta":{"node-LatLon":{"lon":-1090143069,"lat":416488162}}},{"delta":{"node-LatLon":{"lon":-1090209918,"lat":416459596}}},{"delta":{"node-LatLon":{"lon":-1090277470,"lat":416430810}}},{"delta":{"node-LatLon":{"lon":-1090345662,"lat":416401720}}},{"delta":{"node-LatLon":{"lon":-1090413831,"lat":416372606}}},{"delta":{"node-LatLon":{"lon":-1090485302,"lat":416354405}}},{"delta":{"node-LatLon":{"lon":-1090559312,"lat":416342147}}},{"delta":{"node-LatLon":{"lon":-1090633109,"lat":416329839}}},{"delta":{"node-LatLon":{"lon":-1090706742,"lat":416317644}}},{"delta":{"node-LatLon":{"lon":-1090780363,"lat":416305412}}},{"delta":{"node-LatLon":{"lon":-1090854362,"lat":416289159}}},{"delta":{"node-LatLon":{"lon":-1090923703,"lat":416263510}}},{"delta":{"node-LatLon":{"lon":-1090992931,"lat":416237673}}},{"delta":{"node-LatLon":{"lon":-1091062121,"lat":416211766}}},{"delta":{"node-LatLon":{"lon":-1091131370,"lat":416185951}}},{"delta":{"node-LatLon":{"lon":-1091198118,"lat":416160999}}},{"delta":{"node-LatLon":{"lon":-1091264852,"lat":416136031}}},{"delta":{"node-LatLon":{"lon":-1091281511,"lat":416129751}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000011111100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416780373,"long":-1087800160}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025176,"speed":24.46,"longitude":-105.0469782},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":91,"serialNumber":15520,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31497,"packetID":"0000000000000BC3EF","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415325796,"long":-1094614954},"name":"westbound_I80_90.098_90.312_SAT-8D4B0B6B_RC_GRTUNWB","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094631379,"lat":415333237}}},{"delta":{"node-LatLon":{"lon":-1094647572,"lat":415340958}}},{"delta":{"node-LatLon":{"lon":-1094662661,"lat":415349838}}},{"delta":{"node-LatLon":{"lon":-1094677547,"lat":415358928}}},{"delta":{"node-LatLon":{"lon":-1094692747,"lat":415367707}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000000100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415325796,"long":-1094614954}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31497}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025176,"speed":24.46,"longitude":-105.0469782},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":90,"serialNumber":15519,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000A6155","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415272879,"long":-1094524441},"name":"westbound_I80_83.01_91.0_SAT-BCC7F251_RC_RSI80WGRAD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}},{"delta":{"node-LatLon":{"lon":-1094567629,"lat":415301333}}},{"delta":{"node-LatLon":{"lon":-1094598552,"lat":415318326}}},{"delta":{"node-LatLon":{"lon":-1094631379,"lat":415333237}}},{"delta":{"node-LatLon":{"lon":-1094662661,"lat":415349838}}},{"delta":{"node-LatLon":{"lon":-1094692747,"lat":415367707}}},{"delta":{"node-LatLon":{"lon":-1094725523,"lat":415382855}}},{"delta":{"node-LatLon":{"lon":-1094759103,"lat":415397020}}},{"delta":{"node-LatLon":{"lon":-1094787376,"lat":415416158}}},{"delta":{"node-LatLon":{"lon":-1094803681,"lat":415442345}}},{"delta":{"node-LatLon":{"lon":-1094827523,"lat":415464696}}},{"delta":{"node-LatLon":{"lon":-1094857768,"lat":415483037}}},{"delta":{"node-LatLon":{"lon":-1094888001,"lat":415501390}}},{"delta":{"node-LatLon":{"lon":-1094919170,"lat":415518798}}},{"delta":{"node-LatLon":{"lon":-1094953846,"lat":415531903}}},{"delta":{"node-LatLon":{"lon":-1094991158,"lat":415539943}}},{"delta":{"node-LatLon":{"lon":-1095029104,"lat":415543908}}},{"delta":{"node-LatLon":{"lon":-1095067107,"lat":415547593}}},{"delta":{"node-LatLon":{"lon":-1095105120,"lat":415551220}}},{"delta":{"node-LatLon":{"lon":-1095142989,"lat":415555524}}},{"delta":{"node-LatLon":{"lon":-1095178583,"lat":415565942}}},{"delta":{"node-LatLon":{"lon":-1095212839,"lat":415581431}}},{"delta":{"node-LatLon":{"lon":-1095248825,"lat":415594355}}},{"delta":{"node-LatLon":{"lon":-1095287864,"lat":415600639}}},{"delta":{"node-LatLon":{"lon":-1095327361,"lat":415605311}}},{"delta":{"node-LatLon":{"lon":-1095366831,"lat":415610104}}},{"delta":{"node-LatLon":{"lon":-1095403172,"lat":415618111}}},{"delta":{"node-LatLon":{"lon":-1095437320,"lat":415630465}}},{"delta":{"node-LatLon":{"lon":-1095472268,"lat":415641378}}},{"delta":{"node-LatLon":{"lon":-1095509638,"lat":415645822}}},{"delta":{"node-LatLon":{"lon":-1095547341,"lat":415643461}}},{"delta":{"node-LatLon":{"lon":-1095583235,"lat":415634481}}},{"delta":{"node-LatLon":{"lon":-1095616942,"lat":415621427}}},{"delta":{"node-LatLon":{"lon":-1095650544,"lat":415608220}}},{"delta":{"node-LatLon":{"lon":-1095684389,"lat":415595379}}},{"delta":{"node-LatLon":{"lon":-1095720328,"lat":415586411}}},{"delta":{"node-LatLon":{"lon":-1095758260,"lat":415580697}}},{"delta":{"node-LatLon":{"lon":-1095796228,"lat":415575112}}},{"delta":{"node-LatLon":{"lon":-1095834193,"lat":415569520}}},{"delta":{"node-LatLon":{"lon":-1095872158,"lat":415563926}}},{"delta":{"node-LatLon":{"lon":-1095909369,"lat":415556119}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415272879,"long":-1094524441}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025133,"speed":24.46,"longitude":-105.0470067},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":89,"serialNumber":15518,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000210A5","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415546021,"long":-1095927626},"name":"eastbound_I80_83.01_91.0_SAT-AEC2BC20_RC_RSI80WGRAI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1095910196,"lat":415552425}}},{"delta":{"node-LatLon":{"lon":-1095873554,"lat":415561468}}},{"delta":{"node-LatLon":{"lon":-1095835664,"lat":415567106}}},{"delta":{"node-LatLon":{"lon":-1095797758,"lat":415572690}}},{"delta":{"node-LatLon":{"lon":-1095759854,"lat":415578281}}},{"delta":{"node-LatLon":{"lon":-1095721965,"lat":415583926}}},{"delta":{"node-LatLon":{"lon":-1095685445,"lat":415592676}}},{"delta":{"node-LatLon":{"lon":-1095651117,"lat":415605559}}},{"delta":{"node-LatLon":{"lon":-1095617101,"lat":415618922}}},{"delta":{"node-LatLon":{"lon":-1095583008,"lat":415632176}}},{"delta":{"node-LatLon":{"lon":-1095546731,"lat":415641373}}},{"delta":{"node-LatLon":{"lon":-1095509731,"lat":415643672}}},{"delta":{"node-LatLon":{"lon":-1095473059,"lat":415639326}}},{"delta":{"node-LatLon":{"lon":-1095438752,"lat":415628644}}},{"delta":{"node-LatLon":{"lon":-1095405325,"lat":415616388}}},{"delta":{"node-LatLon":{"lon":-1095369730,"lat":415608358}}},{"delta":{"node-LatLon":{"lon":-1095330616,"lat":415603528}}},{"delta":{"node-LatLon":{"lon":-1095291457,"lat":415598888}}},{"delta":{"node-LatLon":{"lon":-1095252639,"lat":415593016}}},{"delta":{"node-LatLon":{"lon":-1095216703,"lat":415580638}}},{"delta":{"node-LatLon":{"lon":-1095182775,"lat":415565235}}},{"delta":{"node-LatLon":{"lon":-1095147149,"lat":415554096}}},{"delta":{"node-LatLon":{"lon":-1095108985,"lat":415549420}}},{"delta":{"node-LatLon":{"lon":-1095070589,"lat":415545729}}},{"delta":{"node-LatLon":{"lon":-1095032188,"lat":415542064}}},{"delta":{"node-LatLon":{"lon":-1094993831,"lat":415538174}}},{"delta":{"node-LatLon":{"lon":-1094956860,"lat":415530480}}},{"delta":{"node-LatLon":{"lon":-1094922411,"lat":415517802}}},{"delta":{"node-LatLon":{"lon":-1094891469,"lat":415500743}}},{"delta":{"node-LatLon":{"lon":-1094861594,"lat":415482600}}},{"delta":{"node-LatLon":{"lon":-1094831707,"lat":415464468}}},{"delta":{"node-LatLon":{"lon":-1094806972,"lat":415442662}}},{"delta":{"node-LatLon":{"lon":-1094790913,"lat":415416378}}},{"delta":{"node-LatLon":{"lon":-1094763585,"lat":415396461}}},{"delta":{"node-LatLon":{"lon":-1094730035,"lat":415382264}}},{"delta":{"node-LatLon":{"lon":-1094697171,"lat":415367224}}},{"delta":{"node-LatLon":{"lon":-1094666854,"lat":415349644}}},{"delta":{"node-LatLon":{"lon":-1094636062,"lat":415332555}}},{"delta":{"node-LatLon":{"lon":-1094603326,"lat":415317623}}},{"delta":{"node-LatLon":{"lon":-1094571921,"lat":415301218}}},{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011111000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415546021,"long":-1095927626}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025088,"speed":24.46,"longitude":-105.0470353},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":88,"serialNumber":15517,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31498,"packetID":"000000000000057CF2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416103734,"long":-1092210485},"name":"westbound_I80_91.0_104.83_SAT-11EB1AFB_RC_RSI80WGRFGD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092225602,"lat":416102051}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}},{"delta":{"node-LatLon":{"lon":-1092295103,"lat":416078549}}},{"delta":{"node-LatLon":{"lon":-1092353802,"lat":416055730}}},{"delta":{"node-LatLon":{"lon":-1092409233,"lat":415994268}}},{"delta":{"node-LatLon":{"lon":-1092453299,"lat":415926333}}},{"delta":{"node-LatLon":{"lon":-1092494255,"lat":415863151}}},{"delta":{"node-LatLon":{"lon":-1092542043,"lat":415808289}}},{"delta":{"node-LatLon":{"lon":-1092614541,"lat":415771804}}},{"delta":{"node-LatLon":{"lon":-1092686893,"lat":415745034}}},{"delta":{"node-LatLon":{"lon":-1092755235,"lat":415719687}}},{"delta":{"node-LatLon":{"lon":-1092824046,"lat":415694227}}},{"delta":{"node-LatLon":{"lon":-1092892916,"lat":415668054}}},{"delta":{"node-LatLon":{"lon":-1092959628,"lat":415638882}}},{"delta":{"node-LatLon":{"lon":-1093026230,"lat":415609696}}},{"delta":{"node-LatLon":{"lon":-1093092855,"lat":415580545}}},{"delta":{"node-LatLon":{"lon":-1093159414,"lat":415551340}}},{"delta":{"node-LatLon":{"lon":-1093225990,"lat":415522190}}},{"delta":{"node-LatLon":{"lon":-1093292630,"lat":415493128}}},{"delta":{"node-LatLon":{"lon":-1093362756,"lat":415469236}}},{"delta":{"node-LatLon":{"lon":-1093433593,"lat":415446486}}},{"delta":{"node-LatLon":{"lon":-1093501983,"lat":415419517}}},{"delta":{"node-LatLon":{"lon":-1093570430,"lat":415392320}}},{"delta":{"node-LatLon":{"lon":-1093638825,"lat":415365052}}},{"delta":{"node-LatLon":{"lon":-1093706625,"lat":415338051}}},{"delta":{"node-LatLon":{"lon":-1093779378,"lat":415323162}}},{"delta":{"node-LatLon":{"lon":-1093855135,"lat":415332204}}},{"delta":{"node-LatLon":{"lon":-1093927477,"lat":415317094}}},{"delta":{"node-LatLon":{"lon":-1093995757,"lat":415291937}}},{"delta":{"node-LatLon":{"lon":-1094070772,"lat":415279115}}},{"delta":{"node-LatLon":{"lon":-1094147255,"lat":415276886}}},{"delta":{"node-LatLon":{"lon":-1094224449,"lat":415282426}}},{"delta":{"node-LatLon":{"lon":-1094301394,"lat":415276124}}},{"delta":{"node-LatLon":{"lon":-1094371013,"lat":415249502}}},{"delta":{"node-LatLon":{"lon":-1094443930,"lat":415236997}}},{"delta":{"node-LatLon":{"lon":-1094510066,"lat":415263454}}},{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416103734,"long":-1092210485}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31498}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025046,"speed":24.46,"longitude":-105.0470638},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":87,"serialNumber":15516,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31495,"packetID":"00000000000008F38B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416142272,"long":-1091248169},"name":"westbound_I80_104.83_111.16_SAT-F2240036_RC_RSI80MARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091264852,"lat":416136031}}},{"delta":{"node-LatLon":{"lon":-1091298228,"lat":416123561}}},{"delta":{"node-LatLon":{"lon":-1091334018,"lat":416110189}}},{"delta":{"node-LatLon":{"lon":-1091369795,"lat":416096798}}},{"delta":{"node-LatLon":{"lon":-1091405563,"lat":416083396}}},{"delta":{"node-LatLon":{"lon":-1091441283,"lat":416069923}}},{"delta":{"node-LatLon":{"lon":-1091474700,"lat":416053537}}},{"delta":{"node-LatLon":{"lon":-1091501964,"lat":416033828}}},{"delta":{"node-LatLon":{"lon":-1091526844,"lat":416012368}}},{"delta":{"node-LatLon":{"lon":-1091552241,"lat":415991270}}},{"delta":{"node-LatLon":{"lon":-1091583184,"lat":415974991}}},{"delta":{"node-LatLon":{"lon":-1091618832,"lat":415965599}}},{"delta":{"node-LatLon":{"lon":-1091657262,"lat":415963124}}},{"delta":{"node-LatLon":{"lon":-1091695868,"lat":415962098}}},{"delta":{"node-LatLon":{"lon":-1091734473,"lat":415961055}}},{"delta":{"node-LatLon":{"lon":-1091772519,"lat":415956756}}},{"delta":{"node-LatLon":{"lon":-1091806953,"lat":415943769}}},{"delta":{"node-LatLon":{"lon":-1091836882,"lat":415930461}}},{"delta":{"node-LatLon":{"lon":-1091869287,"lat":415921267}}},{"delta":{"node-LatLon":{"lon":-1091903898,"lat":415920097}}},{"delta":{"node-LatLon":{"lon":-1091937392,"lat":415926747}}},{"delta":{"node-LatLon":{"lon":-1091966574,"lat":415940771}}},{"delta":{"node-LatLon":{"lon":-1091990723,"lat":415963402}}},{"delta":{"node-LatLon":{"lon":-1092004823,"lat":415990502}}},{"delta":{"node-LatLon":{"lon":-1092019104,"lat":416017543}}},{"delta":{"node-LatLon":{"lon":-1092043521,"lat":416040022}}},{"delta":{"node-LatLon":{"lon":-1092074899,"lat":416057166}}},{"delta":{"node-LatLon":{"lon":-1092100017,"lat":416070268}}},{"delta":{"node-LatLon":{"lon":-1092125100,"lat":416083407}}},{"delta":{"node-LatLon":{"lon":-1092151035,"lat":416095519}}},{"delta":{"node-LatLon":{"lon":-1092180024,"lat":416102624}}},{"delta":{"node-LatLon":{"lon":-1092210485,"lat":416103734}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111111"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416142272,"long":-1091248169}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31495}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025046,"speed":24.46,"longitude":-105.0470638},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":86,"serialNumber":15515,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025002,"speed":24.46,"longitude":-105.0470924},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":85,"serialNumber":15514,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31490,"packetID":"0000000000000A5426","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416070648,"long":-1092309469},"name":"eastbound_I80_104.83_111.16_SAT-5D20AE10_RC_RSI80MARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092256961,"lat":416090938}}},{"delta":{"node-LatLon":{"lon":-1092220011,"lat":416100743}}},{"delta":{"node-LatLon":{"lon":-1092180837,"lat":416100613}}},{"delta":{"node-LatLon":{"lon":-1092144100,"lat":416090411}}},{"delta":{"node-LatLon":{"lon":-1092111577,"lat":416073768}}},{"delta":{"node-LatLon":{"lon":-1092079251,"lat":416056897}}},{"delta":{"node-LatLon":{"lon":-1092047614,"lat":416039914}}},{"delta":{"node-LatLon":{"lon":-1092022496,"lat":416017802}}},{"delta":{"node-LatLon":{"lon":-1092007875,"lat":415990813}}},{"delta":{"node-LatLon":{"lon":-1091994030,"lat":415963562}}},{"delta":{"node-LatLon":{"lon":-1091970384,"lat":415940547}}},{"delta":{"node-LatLon":{"lon":-1091941029,"lat":415925731}}},{"delta":{"node-LatLon":{"lon":-1091907083,"lat":415918255}}},{"delta":{"node-LatLon":{"lon":-1091871710,"lat":415918755}}},{"delta":{"node-LatLon":{"lon":-1091838259,"lat":415927373}}},{"delta":{"node-LatLon":{"lon":-1091807633,"lat":415940869}}},{"delta":{"node-LatLon":{"lon":-1091773693,"lat":415954295}}},{"delta":{"node-LatLon":{"lon":-1091735915,"lat":415958860}}},{"delta":{"node-LatLon":{"lon":-1091697507,"lat":415959950}}},{"delta":{"node-LatLon":{"lon":-1091659097,"lat":415960991}}},{"delta":{"node-LatLon":{"lon":-1091620811,"lat":415963173}}},{"delta":{"node-LatLon":{"lon":-1091584800,"lat":415972056}}},{"delta":{"node-LatLon":{"lon":-1091553176,"lat":415987749}}},{"delta":{"node-LatLon":{"lon":-1091527289,"lat":416008625}}},{"delta":{"node-LatLon":{"lon":-1091502330,"lat":416030163}}},{"delta":{"node-LatLon":{"lon":-1091474365,"lat":416049452}}},{"delta":{"node-LatLon":{"lon":-1091440655,"lat":416065279}}},{"delta":{"node-LatLon":{"lon":-1091405002,"lat":416078597}}},{"delta":{"node-LatLon":{"lon":-1091369361,"lat":416091933}}},{"delta":{"node-LatLon":{"lon":-1091333716,"lat":416105264}}},{"delta":{"node-LatLon":{"lon":-1091298057,"lat":416118575}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416070648,"long":-1092309469}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31490}},"msgCnt":4}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024958,"speed":24.46,"longitude":-105.0471209},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":84,"serialNumber":15513,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31281,"packetID":"000000000000073298","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411170053,"long":-1048682540},"name":"westbound_I80_348.36_358.5_SAT-C5FF6D31_RC_CHEYI80WLARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048702211,"lat":411170073}}},{"delta":{"node-LatLon":{"lon":-1048721881,"lat":411170051}}},{"delta":{"node-LatLon":{"lon":-1048761222,"lat":411169874}}},{"delta":{"node-LatLon":{"lon":-1048800563,"lat":411169714}}},{"delta":{"node-LatLon":{"lon":-1048839240,"lat":411169551}}},{"delta":{"node-LatLon":{"lon":-1048877917,"lat":411169445}}},{"delta":{"node-LatLon":{"lon":-1048916593,"lat":411169353}}},{"delta":{"node-LatLon":{"lon":-1048955270,"lat":411169236}}},{"delta":{"node-LatLon":{"lon":-1048993946,"lat":411169016}}},{"delta":{"node-LatLon":{"lon":-1049032247,"lat":411168874}}},{"delta":{"node-LatLon":{"lon":-1049070527,"lat":411168170}}},{"delta":{"node-LatLon":{"lon":-1049108247,"lat":411163290}}},{"delta":{"node-LatLon":{"lon":-1049145661,"lat":411157085}}},{"delta":{"node-LatLon":{"lon":-1049183059,"lat":411150832}}},{"delta":{"node-LatLon":{"lon":-1049220325,"lat":411144893}}},{"delta":{"node-LatLon":{"lon":-1049257999,"lat":411140682}}},{"delta":{"node-LatLon":{"lon":-1049295723,"lat":411136728}}},{"delta":{"node-LatLon":{"lon":-1049333444,"lat":411132751}}},{"delta":{"node-LatLon":{"lon":-1049371183,"lat":411128874}}},{"delta":{"node-LatLon":{"lon":-1049409390,"lat":411124909}}},{"delta":{"node-LatLon":{"lon":-1049447598,"lat":411120949}}},{"delta":{"node-LatLon":{"lon":-1049485797,"lat":411116940}}},{"delta":{"node-LatLon":{"lon":-1049524006,"lat":411112988}}},{"delta":{"node-LatLon":{"lon":-1049562308,"lat":411109647}}},{"delta":{"node-LatLon":{"lon":-1049600401,"lat":411107207}}},{"delta":{"node-LatLon":{"lon":-1049638492,"lat":411104750}}},{"delta":{"node-LatLon":{"lon":-1049676581,"lat":411102282}}},{"delta":{"node-LatLon":{"lon":-1049714466,"lat":411098457}}},{"delta":{"node-LatLon":{"lon":-1049752216,"lat":411093893}}},{"delta":{"node-LatLon":{"lon":-1049790068,"lat":411089292}}},{"delta":{"node-LatLon":{"lon":-1049827923,"lat":411084707}}},{"delta":{"node-LatLon":{"lon":-1049865779,"lat":411080125}}},{"delta":{"node-LatLon":{"lon":-1049903602,"lat":411075397}}},{"delta":{"node-LatLon":{"lon":-1049940392,"lat":411067384}}},{"delta":{"node-LatLon":{"lon":-1049976102,"lat":411057362}}},{"delta":{"node-LatLon":{"lon":-1050011796,"lat":411047308}}},{"delta":{"node-LatLon":{"lon":-1050047479,"lat":411037232}}},{"delta":{"node-LatLon":{"lon":-1050083173,"lat":411027181}}},{"delta":{"node-LatLon":{"lon":-1050119263,"lat":411018037}}},{"delta":{"node-LatLon":{"lon":-1050156120,"lat":411013697}}},{"delta":{"node-LatLon":{"lon":-1050193406,"lat":411014492}}},{"delta":{"node-LatLon":{"lon":-1050230066,"lat":411019821}}},{"delta":{"node-LatLon":{"lon":-1050266545,"lat":411025893}}},{"delta":{"node-LatLon":{"lon":-1050303026,"lat":411031959}}},{"delta":{"node-LatLon":{"lon":-1050341801,"lat":411036364}}},{"delta":{"node-LatLon":{"lon":-1050381045,"lat":411036216}}},{"delta":{"node-LatLon":{"lon":-1050420282,"lat":411035204}}},{"delta":{"node-LatLon":{"lon":-1050459188,"lat":411031556}}},{"delta":{"node-LatLon":{"lon":-1050497693,"lat":411025753}}},{"delta":{"node-LatLon":{"lon":-1050534808,"lat":411020098}}},{"delta":{"node-LatLon":{"lon":-1050571919,"lat":411014428}}},{"delta":{"node-LatLon":{"lon":-1050609033,"lat":411008772}}},{"delta":{"node-LatLon":{"lon":-1050627605,"lat":411006003}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411170053,"long":-1048682540}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31281}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024958,"speed":24.46,"longitude":-105.0471209},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":83,"serialNumber":15512,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.551Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31281,"packetID":"0000000000000B9403","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410998545,"long":-1050648246},"name":"eastbound_I80_348.36_358.5_SAT-D8707F73_RC_CHEYI80WLARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050629421,"lat":411001016}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}},{"delta":{"node-LatLon":{"lon":-1050573199,"lat":411009532}}},{"delta":{"node-LatLon":{"lon":-1050535715,"lat":411015202}}},{"delta":{"node-LatLon":{"lon":-1050498229,"lat":411020862}}},{"delta":{"node-LatLon":{"lon":-1050460327,"lat":411026546}}},{"delta":{"node-LatLon":{"lon":-1050422091,"lat":411030485}}},{"delta":{"node-LatLon":{"lon":-1050383473,"lat":411031428}}},{"delta":{"node-LatLon":{"lon":-1050344848,"lat":411031826}}},{"delta":{"node-LatLon":{"lon":-1050306653,"lat":411027659}}},{"delta":{"node-LatLon":{"lon":-1050269678,"lat":411021507}}},{"delta":{"node-LatLon":{"lon":-1050232676,"lat":411015448}}},{"delta":{"node-LatLon":{"lon":-1050195535,"lat":411009957}}},{"delta":{"node-LatLon":{"lon":-1050157751,"lat":411008904}}},{"delta":{"node-LatLon":{"lon":-1050120335,"lat":411013008}}},{"delta":{"node-LatLon":{"lon":-1050084082,"lat":411021875}}},{"delta":{"node-LatLon":{"lon":-1050048325,"lat":411031899}}},{"delta":{"node-LatLon":{"lon":-1050012604,"lat":411041995}}},{"delta":{"node-LatLon":{"lon":-1049976865,"lat":411052057}}},{"delta":{"node-LatLon":{"lon":-1049941141,"lat":411062151}}},{"delta":{"node-LatLon":{"lon":-1049904488,"lat":411070470}}},{"delta":{"node-LatLon":{"lon":-1049866692,"lat":411075206}}},{"delta":{"node-LatLon":{"lon":-1049828870,"lat":411079830}}},{"delta":{"node-LatLon":{"lon":-1049791039,"lat":411084415}}},{"delta":{"node-LatLon":{"lon":-1049753209,"lat":411089002}}},{"delta":{"node-LatLon":{"lon":-1049715382,"lat":411093589}}},{"delta":{"node-LatLon":{"lon":-1049677431,"lat":411097499}}},{"delta":{"node-LatLon":{"lon":-1049639263,"lat":411099987}}},{"delta":{"node-LatLon":{"lon":-1049601097,"lat":411102498}}},{"delta":{"node-LatLon":{"lon":-1049562935,"lat":411105044}}},{"delta":{"node-LatLon":{"lon":-1049524970,"lat":411108146}}},{"delta":{"node-LatLon":{"lon":-1049487125,"lat":411112044}}},{"delta":{"node-LatLon":{"lon":-1049449291,"lat":411116003}}},{"delta":{"node-LatLon":{"lon":-1049411457,"lat":411119968}}},{"delta":{"node-LatLon":{"lon":-1049373623,"lat":411123930}}},{"delta":{"node-LatLon":{"lon":-1049335535,"lat":411127975}}},{"delta":{"node-LatLon":{"lon":-1049297422,"lat":411131886}}},{"delta":{"node-LatLon":{"lon":-1049259309,"lat":411135796}}},{"delta":{"node-LatLon":{"lon":-1049221247,"lat":411139978}}},{"delta":{"node-LatLon":{"lon":-1049183591,"lat":411145899}}},{"delta":{"node-LatLon":{"lon":-1049146455,"lat":411152154}}},{"delta":{"node-LatLon":{"lon":-1049109301,"lat":411158352}}},{"delta":{"node-LatLon":{"lon":-1049071864,"lat":411163355}}},{"delta":{"node-LatLon":{"lon":-1049033848,"lat":411164138}}},{"delta":{"node-LatLon":{"lon":-1048995803,"lat":411164285}}},{"delta":{"node-LatLon":{"lon":-1048957165,"lat":411164452}}},{"delta":{"node-LatLon":{"lon":-1048918528,"lat":411164604}}},{"delta":{"node-LatLon":{"lon":-1048879891,"lat":411164841}}},{"delta":{"node-LatLon":{"lon":-1048841254,"lat":411165037}}},{"delta":{"node-LatLon":{"lon":-1048802617,"lat":411165193}}},{"delta":{"node-LatLon":{"lon":-1048763807,"lat":411165332}}},{"delta":{"node-LatLon":{"lon":-1048724997,"lat":411165480}}},{"delta":{"node-LatLon":{"lon":-1048705592,"lat":411165575}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410998545,"long":-1050648246}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31281}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024915,"speed":24.46,"longitude":-105.0471495},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":82,"serialNumber":15511,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31281,"packetID":"000000000000087964","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411011592,"long":-1050590473},"name":"westbound_I80_335.11_348.36_SAT-4982596C_RC_CHEYI80WHARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050609033,"lat":411008772}}},{"delta":{"node-LatLon":{"lon":-1050684029,"lat":411002155}}},{"delta":{"node-LatLon":{"lon":-1050760755,"lat":411002869}}},{"delta":{"node-LatLon":{"lon":-1050837364,"lat":411000370}}},{"delta":{"node-LatLon":{"lon":-1050914524,"lat":410995536}}},{"delta":{"node-LatLon":{"lon":-1050990956,"lat":410984444}}},{"delta":{"node-LatLon":{"lon":-1051067254,"lat":410973454}}},{"delta":{"node-LatLon":{"lon":-1051144365,"lat":410982302}}},{"delta":{"node-LatLon":{"lon":-1051221934,"lat":410988766}}},{"delta":{"node-LatLon":{"lon":-1051297925,"lat":410988342}}},{"delta":{"node-LatLon":{"lon":-1051371832,"lat":410988032}}},{"delta":{"node-LatLon":{"lon":-1051445141,"lat":410995292}}},{"delta":{"node-LatLon":{"lon":-1051521267,"lat":411000337}}},{"delta":{"node-LatLon":{"lon":-1051596119,"lat":410988652}}},{"delta":{"node-LatLon":{"lon":-1051671284,"lat":410977720}}},{"delta":{"node-LatLon":{"lon":-1051747551,"lat":410971360}}},{"delta":{"node-LatLon":{"lon":-1051823993,"lat":410966522}}},{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}},{"delta":{"node-LatLon":{"lon":-1051974706,"lat":410954064}}},{"delta":{"node-LatLon":{"lon":-1052048783,"lat":410962474}}},{"delta":{"node-LatLon":{"lon":-1052113110,"lat":410992814}}},{"delta":{"node-LatLon":{"lon":-1052178141,"lat":411022378}}},{"delta":{"node-LatLon":{"lon":-1052248856,"lat":411045103}}},{"delta":{"node-LatLon":{"lon":-1052325706,"lat":411048940}}},{"delta":{"node-LatLon":{"lon":-1052402452,"lat":411049814}}},{"delta":{"node-LatLon":{"lon":-1052476819,"lat":411061846}}},{"delta":{"node-LatLon":{"lon":-1052547987,"lat":411082724}}},{"delta":{"node-LatLon":{"lon":-1052619267,"lat":411103644}}},{"delta":{"node-LatLon":{"lon":-1052690521,"lat":411124618}}},{"delta":{"node-LatLon":{"lon":-1052758326,"lat":411153468}}},{"delta":{"node-LatLon":{"lon":-1052824352,"lat":411187145}}},{"delta":{"node-LatLon":{"lon":-1052891232,"lat":411219785}}},{"delta":{"node-LatLon":{"lon":-1052963092,"lat":411239437}}},{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053057596,"lat":411251395}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411011592,"long":-1050590473}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31281}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024871,"speed":24.46,"longitude":-105.047178},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":81,"serialNumber":15510,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31281,"packetID":"0000000000000A3B4E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411251929,"long":-1053079915},"name":"eastbound_I80_335.11_348.36_SAT-6CD34EF8_RC_CHEYI80WHARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053061014,"lat":411249645}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}},{"delta":{"node-LatLon":{"lon":-1052966667,"lat":411237536}}},{"delta":{"node-LatLon":{"lon":-1052895308,"lat":411217079}}},{"delta":{"node-LatLon":{"lon":-1052828416,"lat":411183958}}},{"delta":{"node-LatLon":{"lon":-1052762243,"lat":411149986}}},{"delta":{"node-LatLon":{"lon":-1052694431,"lat":411120945}}},{"delta":{"node-LatLon":{"lon":-1052623255,"lat":411100002}}},{"delta":{"node-LatLon":{"lon":-1052552081,"lat":411079062}}},{"delta":{"node-LatLon":{"lon":-1052479703,"lat":411059291}}},{"delta":{"node-LatLon":{"lon":-1052404522,"lat":411047559}}},{"delta":{"node-LatLon":{"lon":-1052327830,"lat":411046722}}},{"delta":{"node-LatLon":{"lon":-1052251668,"lat":411043133}}},{"delta":{"node-LatLon":{"lon":-1052181375,"lat":411021106}}},{"delta":{"node-LatLon":{"lon":-1052115683,"lat":410991356}}},{"delta":{"node-LatLon":{"lon":-1052050763,"lat":410960746}}},{"delta":{"node-LatLon":{"lon":-1051976364,"lat":410951581}}},{"delta":{"node-LatLon":{"lon":-1051901229,"lat":410960621}}},{"delta":{"node-LatLon":{"lon":-1051825257,"lat":410964045}}},{"delta":{"node-LatLon":{"lon":-1051748594,"lat":410968835}}},{"delta":{"node-LatLon":{"lon":-1051672128,"lat":410975297}}},{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411251929,"long":-1053079915}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31281}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024871,"speed":24.46,"longitude":-105.047178},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":80,"serialNumber":15509,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31276,"packetID":"0000000000000C7BDC","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411583071,"long":-1045194573},"name":"westbound_I80_370.1_377.35_SAT-1F3353B9_RC_CHEYI80EPBD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045213731,"lat":411583474}}},{"delta":{"node-LatLon":{"lon":-1045252048,"lat":411584277}}},{"delta":{"node-LatLon":{"lon":-1045290377,"lat":411584588}}},{"delta":{"node-LatLon":{"lon":-1045329055,"lat":411584606}}},{"delta":{"node-LatLon":{"lon":-1045367733,"lat":411584612}}},{"delta":{"node-LatLon":{"lon":-1045406412,"lat":411584626}}},{"delta":{"node-LatLon":{"lon":-1045445090,"lat":411584615}}},{"delta":{"node-LatLon":{"lon":-1045483768,"lat":411584618}}},{"delta":{"node-LatLon":{"lon":-1045521914,"lat":411584627}}},{"delta":{"node-LatLon":{"lon":-1045560059,"lat":411584625}}},{"delta":{"node-LatLon":{"lon":-1045598205,"lat":411584639}}},{"delta":{"node-LatLon":{"lon":-1045636350,"lat":411584589}}},{"delta":{"node-LatLon":{"lon":-1045674495,"lat":411584576}}},{"delta":{"node-LatLon":{"lon":-1045712807,"lat":411584579}}},{"delta":{"node-LatLon":{"lon":-1045751120,"lat":411584598}}},{"delta":{"node-LatLon":{"lon":-1045789432,"lat":411584756}}},{"delta":{"node-LatLon":{"lon":-1045827743,"lat":411584908}}},{"delta":{"node-LatLon":{"lon":-1045866056,"lat":411585030}}},{"delta":{"node-LatLon":{"lon":-1045904386,"lat":411585214}}},{"delta":{"node-LatLon":{"lon":-1045942717,"lat":411585361}}},{"delta":{"node-LatLon":{"lon":-1045981047,"lat":411585545}}},{"delta":{"node-LatLon":{"lon":-1046019378,"lat":411585693}}},{"delta":{"node-LatLon":{"lon":-1046057708,"lat":411585870}}},{"delta":{"node-LatLon":{"lon":-1046096147,"lat":411586011}}},{"delta":{"node-LatLon":{"lon":-1046134585,"lat":411586177}}},{"delta":{"node-LatLon":{"lon":-1046173023,"lat":411586326}}},{"delta":{"node-LatLon":{"lon":-1046211460,"lat":411586584}}},{"delta":{"node-LatLon":{"lon":-1046249897,"lat":411586868}}},{"delta":{"node-LatLon":{"lon":-1046288331,"lat":411587218}}},{"delta":{"node-LatLon":{"lon":-1046326766,"lat":411587517}}},{"delta":{"node-LatLon":{"lon":-1046365200,"lat":411587809}}},{"delta":{"node-LatLon":{"lon":-1046403636,"lat":411588036}}},{"delta":{"node-LatLon":{"lon":-1046442034,"lat":411586845}}},{"delta":{"node-LatLon":{"lon":-1046479971,"lat":411583989}}},{"delta":{"node-LatLon":{"lon":-1046517601,"lat":411579361}}},{"delta":{"node-LatLon":{"lon":-1046554803,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1046591419,"lat":411565023}}},{"delta":{"node-LatLon":{"lon":-1046609462,"lat":411560366}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411583071,"long":-1045194573}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31276}},"msgCnt":4}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024828,"speed":24.46,"longitude":-105.0472065},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":79,"serialNumber":15508,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31276,"packetID":"00000000000005CEB8","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411550674,"long":-1046626808},"name":"eastbound_I80_370.1_377.35_SAT-D4C24D15_RC_CHEYI80EPBI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046609118,"lat":411555717}}},{"delta":{"node-LatLon":{"lon":-1046591249,"lat":411560386}}},{"delta":{"node-LatLon":{"lon":-1046554972,"lat":411568439}}},{"delta":{"node-LatLon":{"lon":-1046518106,"lat":411574777}}},{"delta":{"node-LatLon":{"lon":-1046480798,"lat":411579409}}},{"delta":{"node-LatLon":{"lon":-1046443186,"lat":411582321}}},{"delta":{"node-LatLon":{"lon":-1046405109,"lat":411583506}}},{"delta":{"node-LatLon":{"lon":-1046366997,"lat":411583305}}},{"delta":{"node-LatLon":{"lon":-1046328885,"lat":411583053}}},{"delta":{"node-LatLon":{"lon":-1046290773,"lat":411582732}}},{"delta":{"node-LatLon":{"lon":-1046252662,"lat":411582431}}},{"delta":{"node-LatLon":{"lon":-1046213997,"lat":411582141}}},{"delta":{"node-LatLon":{"lon":-1046175333,"lat":411581845}}},{"delta":{"node-LatLon":{"lon":-1046136667,"lat":411581682}}},{"delta":{"node-LatLon":{"lon":-1046098002,"lat":411581519}}},{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}},{"delta":{"node-LatLon":{"lon":-1045638356,"lat":411580096}}},{"delta":{"node-LatLon":{"lon":-1045599910,"lat":411580126}}},{"delta":{"node-LatLon":{"lon":-1045561463,"lat":411580111}}},{"delta":{"node-LatLon":{"lon":-1045523016,"lat":411580105}}},{"delta":{"node-LatLon":{"lon":-1045484569,"lat":411580102}}},{"delta":{"node-LatLon":{"lon":-1045446114,"lat":411580096}}},{"delta":{"node-LatLon":{"lon":-1045407659,"lat":411580116}}},{"delta":{"node-LatLon":{"lon":-1045369203,"lat":411580107}}},{"delta":{"node-LatLon":{"lon":-1045330748,"lat":411580102}}},{"delta":{"node-LatLon":{"lon":-1045292292,"lat":411580094}}},{"delta":{"node-LatLon":{"lon":-1045253937,"lat":411579790}}},{"delta":{"node-LatLon":{"lon":-1045215592,"lat":411579032}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411550674,"long":-1046626808}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31276}},"msgCnt":4}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024828,"speed":24.46,"longitude":-105.0472065},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":78,"serialNumber":15507,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31484,"packetID":"0000000000000687E2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411011592,"long":-1050590473},"name":"westbound_I80_335.11_348.36_SAT-592E2A83_RC_CHEYI80WHARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050609033,"lat":411008772}}},{"delta":{"node-LatLon":{"lon":-1050684029,"lat":411002155}}},{"delta":{"node-LatLon":{"lon":-1050760755,"lat":411002869}}},{"delta":{"node-LatLon":{"lon":-1050837364,"lat":411000370}}},{"delta":{"node-LatLon":{"lon":-1050914524,"lat":410995536}}},{"delta":{"node-LatLon":{"lon":-1050990956,"lat":410984444}}},{"delta":{"node-LatLon":{"lon":-1051067254,"lat":410973454}}},{"delta":{"node-LatLon":{"lon":-1051144365,"lat":410982302}}},{"delta":{"node-LatLon":{"lon":-1051221934,"lat":410988766}}},{"delta":{"node-LatLon":{"lon":-1051297925,"lat":410988342}}},{"delta":{"node-LatLon":{"lon":-1051371832,"lat":410988032}}},{"delta":{"node-LatLon":{"lon":-1051445141,"lat":410995292}}},{"delta":{"node-LatLon":{"lon":-1051521267,"lat":411000337}}},{"delta":{"node-LatLon":{"lon":-1051596119,"lat":410988652}}},{"delta":{"node-LatLon":{"lon":-1051671284,"lat":410977720}}},{"delta":{"node-LatLon":{"lon":-1051747551,"lat":410971360}}},{"delta":{"node-LatLon":{"lon":-1051823993,"lat":410966522}}},{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}},{"delta":{"node-LatLon":{"lon":-1051974706,"lat":410954064}}},{"delta":{"node-LatLon":{"lon":-1052048783,"lat":410962474}}},{"delta":{"node-LatLon":{"lon":-1052113110,"lat":410992814}}},{"delta":{"node-LatLon":{"lon":-1052178141,"lat":411022378}}},{"delta":{"node-LatLon":{"lon":-1052248856,"lat":411045103}}},{"delta":{"node-LatLon":{"lon":-1052325706,"lat":411048940}}},{"delta":{"node-LatLon":{"lon":-1052402452,"lat":411049814}}},{"delta":{"node-LatLon":{"lon":-1052476819,"lat":411061846}}},{"delta":{"node-LatLon":{"lon":-1052547987,"lat":411082724}}},{"delta":{"node-LatLon":{"lon":-1052619267,"lat":411103644}}},{"delta":{"node-LatLon":{"lon":-1052690521,"lat":411124618}}},{"delta":{"node-LatLon":{"lon":-1052758326,"lat":411153468}}},{"delta":{"node-LatLon":{"lon":-1052824352,"lat":411187145}}},{"delta":{"node-LatLon":{"lon":-1052891232,"lat":411219785}}},{"delta":{"node-LatLon":{"lon":-1052963092,"lat":411239437}}},{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053057596,"lat":411251395}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411011592,"long":-1050590473}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31484}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024784,"speed":24.46,"longitude":-105.0472351},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":76,"serialNumber":15505,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31483,"packetID":"0000000000000B4F4D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411246688,"long":-1053019776},"name":"westbound_I80_323.05_335.11_SAT-B91A2E52_RC_LARI80ECHEYBD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053114552,"lat":411256735}}},{"delta":{"node-LatLon":{"lon":-1053190756,"lat":411261912}}},{"delta":{"node-LatLon":{"lon":-1053266797,"lat":411268154}}},{"delta":{"node-LatLon":{"lon":-1053338337,"lat":411279861}}},{"delta":{"node-LatLon":{"lon":-1053405816,"lat":411300582}}},{"delta":{"node-LatLon":{"lon":-1053462344,"lat":411338132}}},{"delta":{"node-LatLon":{"lon":-1053516546,"lat":411380266}}},{"delta":{"node-LatLon":{"lon":-1053575650,"lat":411418098}}},{"delta":{"node-LatLon":{"lon":-1053651429,"lat":411438163}}},{"delta":{"node-LatLon":{"lon":-1053731780,"lat":411444206}}},{"delta":{"node-LatLon":{"lon":-1053806111,"lat":411463205}}},{"delta":{"node-LatLon":{"lon":-1053873524,"lat":411489854}}},{"delta":{"node-LatLon":{"lon":-1053936557,"lat":411522463}}},{"delta":{"node-LatLon":{"lon":-1053996450,"lat":411555749}}},{"delta":{"node-LatLon":{"lon":-1054048431,"lat":411595888}}},{"delta":{"node-LatLon":{"lon":-1054090598,"lat":411643369}}},{"delta":{"node-LatLon":{"lon":-1054127454,"lat":411694572}}},{"delta":{"node-LatLon":{"lon":-1054164403,"lat":411745737}}},{"delta":{"node-LatLon":{"lon":-1054200041,"lat":411796105}}},{"delta":{"node-LatLon":{"lon":-1054218886,"lat":411851211}}},{"delta":{"node-LatLon":{"lon":-1054243815,"lat":411905185}}},{"delta":{"node-LatLon":{"lon":-1054287780,"lat":411952905}}},{"delta":{"node-LatLon":{"lon":-1054331852,"lat":412000578}}},{"delta":{"node-LatLon":{"lon":-1054374628,"lat":412046505}}},{"delta":{"node-LatLon":{"lon":-1054408178,"lat":412096432}}},{"delta":{"node-LatLon":{"lon":-1054401538,"lat":412152329}}},{"delta":{"node-LatLon":{"lon":-1054382654,"lat":412208387}}},{"delta":{"node-LatLon":{"lon":-1054387241,"lat":412265649}}},{"delta":{"node-LatLon":{"lon":-1054369571,"lat":412321177}}},{"delta":{"node-LatLon":{"lon":-1054372542,"lat":412378541}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1000000000001111}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411246688,"long":-1053019776}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":4868}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31483}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024784,"speed":24.46,"longitude":-105.0472351},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":77,"serialNumber":15506,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31484,"packetID":"00000000000004AA70","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411251929,"long":-1053079915},"name":"eastbound_I80_335.11_348.36_SAT-9AFEBCD7_RC_CHEYI80WHARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053061014,"lat":411249645}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}},{"delta":{"node-LatLon":{"lon":-1052966667,"lat":411237536}}},{"delta":{"node-LatLon":{"lon":-1052895308,"lat":411217079}}},{"delta":{"node-LatLon":{"lon":-1052828416,"lat":411183958}}},{"delta":{"node-LatLon":{"lon":-1052762243,"lat":411149986}}},{"delta":{"node-LatLon":{"lon":-1052694431,"lat":411120945}}},{"delta":{"node-LatLon":{"lon":-1052623255,"lat":411100002}}},{"delta":{"node-LatLon":{"lon":-1052552081,"lat":411079062}}},{"delta":{"node-LatLon":{"lon":-1052479703,"lat":411059291}}},{"delta":{"node-LatLon":{"lon":-1052404522,"lat":411047559}}},{"delta":{"node-LatLon":{"lon":-1052327830,"lat":411046722}}},{"delta":{"node-LatLon":{"lon":-1052251668,"lat":411043133}}},{"delta":{"node-LatLon":{"lon":-1052181375,"lat":411021106}}},{"delta":{"node-LatLon":{"lon":-1052115683,"lat":410991356}}},{"delta":{"node-LatLon":{"lon":-1052050763,"lat":410960746}}},{"delta":{"node-LatLon":{"lon":-1051976364,"lat":410951581}}},{"delta":{"node-LatLon":{"lon":-1051901229,"lat":410960621}}},{"delta":{"node-LatLon":{"lon":-1051825257,"lat":410964045}}},{"delta":{"node-LatLon":{"lon":-1051748594,"lat":410968835}}},{"delta":{"node-LatLon":{"lon":-1051672128,"lat":410975297}}},{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411251929,"long":-1053079915}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31484}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024741,"speed":24.46,"longitude":-105.0472635},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":75,"serialNumber":15504,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31483,"packetID":"0000000000000F25D6","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412420501,"long":-1054392109},"name":"eastbound_I80_323.05_335.11_SAT-2FAB6C57_RC_LARI80ECHEYBI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054375725,"lat":412379414}}},{"delta":{"node-LatLon":{"lon":-1054372327,"lat":412322445}}},{"delta":{"node-LatLon":{"lon":-1054390501,"lat":412267361}}},{"delta":{"node-LatLon":{"lon":-1054385250,"lat":412209941}}},{"delta":{"node-LatLon":{"lon":-1054403962,"lat":412153723}}},{"delta":{"node-LatLon":{"lon":-1054414034,"lat":412097480}}},{"delta":{"node-LatLon":{"lon":-1054381691,"lat":412046104}}},{"delta":{"node-LatLon":{"lon":-1054338178,"lat":411999356}}},{"delta":{"node-LatLon":{"lon":-1054294112,"lat":411952041}}},{"delta":{"node-LatLon":{"lon":-1054250145,"lat":411904675}}},{"delta":{"node-LatLon":{"lon":-1054224664,"lat":411850678}}},{"delta":{"node-LatLon":{"lon":-1054205670,"lat":411794929}}},{"delta":{"node-LatLon":{"lon":-1054169702,"lat":411743977}}},{"delta":{"node-LatLon":{"lon":-1054132917,"lat":411693026}}},{"delta":{"node-LatLon":{"lon":-1054096134,"lat":411642075}}},{"delta":{"node-LatLon":{"lon":-1054053933,"lat":411594218}}},{"delta":{"node-LatLon":{"lon":-1054001524,"lat":411553158}}},{"delta":{"node-LatLon":{"lon":-1053940802,"lat":411519210}}},{"delta":{"node-LatLon":{"lon":-1053877704,"lat":411486540}}},{"delta":{"node-LatLon":{"lon":-1053810387,"lat":411459552}}},{"delta":{"node-LatLon":{"lon":-1053739051,"lat":411438927}}},{"delta":{"node-LatLon":{"lon":-1053667804,"lat":411418317}}},{"delta":{"node-LatLon":{"lon":-1053596576,"lat":411397677}}},{"delta":{"node-LatLon":{"lon":-1053529834,"lat":411369925}}},{"delta":{"node-LatLon":{"lon":-1053471129,"lat":411332755}}},{"delta":{"node-LatLon":{"lon":-1053412343,"lat":411295468}}},{"delta":{"node-LatLon":{"lon":-1053346537,"lat":411266040}}},{"delta":{"node-LatLon":{"lon":-1053271167,"lat":411256326}}},{"delta":{"node-LatLon":{"lon":-1053194621,"lat":411255101}}},{"delta":{"node-LatLon":{"lon":-1053118075,"lat":411253866}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111110000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412420501,"long":-1054392109}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":4868}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31483}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024697,"speed":24.46,"longitude":-105.0472922},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":74,"serialNumber":15503,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31500,"packetID":"0000000000000992DB","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412969911,"long":-1055922054},"name":"westbound_I80_290.44_313.19_SAT-39E13EDB_RC_LARI80WQDHLD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055939598,"lat":412974628}}},{"delta":{"node-LatLon":{"lon":-1056011013,"lat":412993846}}},{"delta":{"node-LatLon":{"lon":-1056083564,"lat":413013351}}},{"delta":{"node-LatLon":{"lon":-1056136131,"lat":413051965}}},{"delta":{"node-LatLon":{"lon":-1056142604,"lat":413111070}}},{"delta":{"node-LatLon":{"lon":-1056147739,"lat":413170299}}},{"delta":{"node-LatLon":{"lon":-1056152707,"lat":413227440}}},{"delta":{"node-LatLon":{"lon":-1056157480,"lat":413282495}}},{"delta":{"node-LatLon":{"lon":-1056162332,"lat":413337546}}},{"delta":{"node-LatLon":{"lon":-1056179338,"lat":413394642}}},{"delta":{"node-LatLon":{"lon":-1056241841,"lat":413429971}}},{"delta":{"node-LatLon":{"lon":-1056308986,"lat":413460456}}},{"delta":{"node-LatLon":{"lon":-1056375806,"lat":413490715}}},{"delta":{"node-LatLon":{"lon":-1056448549,"lat":413509883}}},{"delta":{"node-LatLon":{"lon":-1056524673,"lat":413510070}}},{"delta":{"node-LatLon":{"lon":-1056600806,"lat":413509928}}},{"delta":{"node-LatLon":{"lon":-1056677878,"lat":413509777}}},{"delta":{"node-LatLon":{"lon":-1056755890,"lat":413509624}}},{"delta":{"node-LatLon":{"lon":-1056833901,"lat":413509486}}},{"delta":{"node-LatLon":{"lon":-1056911534,"lat":413509321}}},{"delta":{"node-LatLon":{"lon":-1056988345,"lat":413503756}}},{"delta":{"node-LatLon":{"lon":-1057063632,"lat":413496157}}},{"delta":{"node-LatLon":{"lon":-1057138866,"lat":413506949}}},{"delta":{"node-LatLon":{"lon":-1057214104,"lat":413517735}}},{"delta":{"node-LatLon":{"lon":-1057289680,"lat":413528551}}},{"delta":{"node-LatLon":{"lon":-1057365257,"lat":413539367}}},{"delta":{"node-LatLon":{"lon":-1057440379,"lat":413550309}}},{"delta":{"node-LatLon":{"lon":-1057512568,"lat":413568354}}},{"delta":{"node-LatLon":{"lon":-1057584309,"lat":413587502}}},{"delta":{"node-LatLon":{"lon":-1057657989,"lat":413607176}}},{"delta":{"node-LatLon":{"lon":-1057731667,"lat":413626859}}},{"delta":{"node-LatLon":{"lon":-1057799444,"lat":413654138}}},{"delta":{"node-LatLon":{"lon":-1057862738,"lat":413685955}}},{"delta":{"node-LatLon":{"lon":-1057926032,"lat":413717776}}},{"delta":{"node-LatLon":{"lon":-1057990466,"lat":413750126}}},{"delta":{"node-LatLon":{"lon":-1058054871,"lat":413782512}}},{"delta":{"node-LatLon":{"lon":-1058117509,"lat":413815643}}},{"delta":{"node-LatLon":{"lon":-1058164753,"lat":413859952}}},{"delta":{"node-LatLon":{"lon":-1058205339,"lat":413908152}}},{"delta":{"node-LatLon":{"lon":-1058246686,"lat":413957163}}},{"delta":{"node-LatLon":{"lon":-1058288005,"lat":414006188}}},{"delta":{"node-LatLon":{"lon":-1058329488,"lat":414055451}}},{"delta":{"node-LatLon":{"lon":-1058376904,"lat":414101638}}},{"delta":{"node-LatLon":{"lon":-1058441692,"lat":414133752}}},{"delta":{"node-LatLon":{"lon":-1058509642,"lat":414161765}}},{"delta":{"node-LatLon":{"lon":-1058577606,"lat":414189762}}},{"delta":{"node-LatLon":{"lon":-1058645229,"lat":414217630}}},{"delta":{"node-LatLon":{"lon":-1058712523,"lat":414245352}}},{"delta":{"node-LatLon":{"lon":-1058779847,"lat":414273037}}},{"delta":{"node-LatLon":{"lon":-1058847466,"lat":414300930}}},{"delta":{"node-LatLon":{"lon":-1058915586,"lat":414328088}}},{"delta":{"node-LatLon":{"lon":-1058989523,"lat":414342520}}},{"delta":{"node-LatLon":{"lon":-1059064093,"lat":414353551}}},{"delta":{"node-LatLon":{"lon":-1059138674,"lat":414364546}}},{"delta":{"node-LatLon":{"lon":-1059214026,"lat":414375694}}},{"delta":{"node-LatLon":{"lon":-1059289381,"lat":414386834}}},{"delta":{"node-LatLon":{"lon":-1059363802,"lat":414397824}}},{"delta":{"node-LatLon":{"lon":-1059437301,"lat":414408619}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011111"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412969911,"long":-1055922054}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31500}},"msgCnt":38}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024697,"speed":24.46,"longitude":-105.0472922},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":73,"serialNumber":15502,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31500,"packetID":"0000000000000A5948","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414407115,"long":-1059458100},"name":"eastbound_I80_290.44_313.19_SAT-864EB729_RC_LARI80WQDHLI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059365846,"lat":414393512}}},{"delta":{"node-LatLon":{"lon":-1059291346,"lat":414382504}}},{"delta":{"node-LatLon":{"lon":-1059216139,"lat":414371403}}},{"delta":{"node-LatLon":{"lon":-1059140930,"lat":414360321}}},{"delta":{"node-LatLon":{"lon":-1059066277,"lat":414349272}}},{"delta":{"node-LatLon":{"lon":-1058991615,"lat":414338261}}},{"delta":{"node-LatLon":{"lon":-1058917936,"lat":414323988}}},{"delta":{"node-LatLon":{"lon":-1058850449,"lat":414297022}}},{"delta":{"node-LatLon":{"lon":-1058783417,"lat":414269380}}},{"delta":{"node-LatLon":{"lon":-1058716328,"lat":414241773}}},{"delta":{"node-LatLon":{"lon":-1058649253,"lat":414214149}}},{"delta":{"node-LatLon":{"lon":-1058581712,"lat":414186261}}},{"delta":{"node-LatLon":{"lon":-1058513627,"lat":414158213}}},{"delta":{"node-LatLon":{"lon":-1058445557,"lat":414130150}}},{"delta":{"node-LatLon":{"lon":-1058380711,"lat":414099504}}},{"delta":{"node-LatLon":{"lon":-1058332454,"lat":414054913}}},{"delta":{"node-LatLon":{"lon":-1058291219,"lat":414005996}}},{"delta":{"node-LatLon":{"lon":-1058249903,"lat":413956936}}},{"delta":{"node-LatLon":{"lon":-1058208508,"lat":413907914}}},{"delta":{"node-LatLon":{"lon":-1058167409,"lat":413859113}}},{"delta":{"node-LatLon":{"lon":-1058121254,"lat":413813192}}},{"delta":{"node-LatLon":{"lon":-1058059188,"lat":413779109}}},{"delta":{"node-LatLon":{"lon":-1057994981,"lat":413746928}}},{"delta":{"node-LatLon":{"lon":-1057930809,"lat":413714712}}},{"delta":{"node-LatLon":{"lon":-1057867697,"lat":413683015}}},{"delta":{"node-LatLon":{"lon":-1057804579,"lat":413651328}}},{"delta":{"node-LatLon":{"lon":-1057737049,"lat":413623514}}},{"delta":{"node-LatLon":{"lon":-1057662967,"lat":413603704}}},{"delta":{"node-LatLon":{"lon":-1057588887,"lat":413583895}}},{"delta":{"node-LatLon":{"lon":-1057516296,"lat":413564544}}},{"delta":{"node-LatLon":{"lon":-1057443317,"lat":413546135}}},{"delta":{"node-LatLon":{"lon":-1057367878,"lat":413535221}}},{"delta":{"node-LatLon":{"lon":-1057292600,"lat":413524353}}},{"delta":{"node-LatLon":{"lon":-1057217299,"lat":413513586}}},{"delta":{"node-LatLon":{"lon":-1057141027,"lat":413502656}}},{"delta":{"node-LatLon":{"lon":-1057064747,"lat":413491760}}},{"delta":{"node-LatLon":{"lon":-1056989068,"lat":413498824}}},{"delta":{"node-LatLon":{"lon":-1056912831,"lat":413504721}}},{"delta":{"node-LatLon":{"lon":-1056835658,"lat":413504909}}},{"delta":{"node-LatLon":{"lon":-1056757891,"lat":413505054}}},{"delta":{"node-LatLon":{"lon":-1056680124,"lat":413505252}}},{"delta":{"node-LatLon":{"lon":-1056603037,"lat":413505384}}},{"delta":{"node-LatLon":{"lon":-1056526628,"lat":413505543}}},{"delta":{"node-LatLon":{"lon":-1056450220,"lat":413505586}}},{"delta":{"node-LatLon":{"lon":-1056377627,"lat":413489027}}},{"delta":{"node-LatLon":{"lon":-1056311828,"lat":413459176}}},{"delta":{"node-LatLon":{"lon":-1056245669,"lat":413429174}}},{"delta":{"node-LatLon":{"lon":-1056183282,"lat":413395071}}},{"delta":{"node-LatLon":{"lon":-1056165228,"lat":413339197}}},{"delta":{"node-LatLon":{"lon":-1056160367,"lat":413283836}}},{"delta":{"node-LatLon":{"lon":-1056155562,"lat":413228473}}},{"delta":{"node-LatLon":{"lon":-1056150632,"lat":413171501}}},{"delta":{"node-LatLon":{"lon":-1056145513,"lat":413112925}}},{"delta":{"node-LatLon":{"lon":-1056139692,"lat":413054402}}},{"delta":{"node-LatLon":{"lon":-1056094488,"lat":413014131}}},{"delta":{"node-LatLon":{"lon":-1056025680,"lat":412995553}}},{"delta":{"node-LatLon":{"lon":-1055953535,"lat":412976113}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414407115,"long":-1059458100}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31500}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024653,"speed":24.46,"longitude":-105.0473207},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":72,"serialNumber":15501,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31500,"packetID":"0000000000000F8642","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414403179,"long":-1059400563},"name":"westbound_I80_279.86_290.44_SAT-D62DB515_RC_LARI80WRAWD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059418929,"lat":414405912}}},{"delta":{"node-LatLon":{"lon":-1059437301,"lat":414408619}}},{"delta":{"node-LatLon":{"lon":-1059474045,"lat":414414043}}},{"delta":{"node-LatLon":{"lon":-1059510782,"lat":414419489}}},{"delta":{"node-LatLon":{"lon":-1059549177,"lat":414426609}}},{"delta":{"node-LatLon":{"lon":-1059587159,"lat":414434951}}},{"delta":{"node-LatLon":{"lon":-1059624866,"lat":414443931}}},{"delta":{"node-LatLon":{"lon":-1059658797,"lat":414459046}}},{"delta":{"node-LatLon":{"lon":-1059685629,"lat":414480816}}},{"delta":{"node-LatLon":{"lon":-1059708612,"lat":414504233}}},{"delta":{"node-LatLon":{"lon":-1059731631,"lat":414527631}}},{"delta":{"node-LatLon":{"lon":-1059754662,"lat":414551022}}},{"delta":{"node-LatLon":{"lon":-1059777663,"lat":414574431}}},{"delta":{"node-LatLon":{"lon":-1059800605,"lat":414597873}}},{"delta":{"node-LatLon":{"lon":-1059825019,"lat":414620504}}},{"delta":{"node-LatLon":{"lon":-1059854975,"lat":414638959}}},{"delta":{"node-LatLon":{"lon":-1059886652,"lat":414655790}}},{"delta":{"node-LatLon":{"lon":-1059918347,"lat":414672602}}},{"delta":{"node-LatLon":{"lon":-1059950027,"lat":414689430}}},{"delta":{"node-LatLon":{"lon":-1059981533,"lat":414706207}}},{"delta":{"node-LatLon":{"lon":-1060013094,"lat":414722925}}},{"delta":{"node-LatLon":{"lon":-1060044644,"lat":414739656}}},{"delta":{"node-LatLon":{"lon":-1060076151,"lat":414756434}}},{"delta":{"node-LatLon":{"lon":-1060107672,"lat":414773199}}},{"delta":{"node-LatLon":{"lon":-1060138668,"lat":414789614}}},{"delta":{"node-LatLon":{"lon":-1060169596,"lat":414806103}}},{"delta":{"node-LatLon":{"lon":-1060200600,"lat":414822512}}},{"delta":{"node-LatLon":{"lon":-1060231565,"lat":414838964}}},{"delta":{"node-LatLon":{"lon":-1060262552,"lat":414855394}}},{"delta":{"node-LatLon":{"lon":-1060294303,"lat":414872314}}},{"delta":{"node-LatLon":{"lon":-1060326101,"lat":414889184}}},{"delta":{"node-LatLon":{"lon":-1060357880,"lat":414906076}}},{"delta":{"node-LatLon":{"lon":-1060389415,"lat":414923223}}},{"delta":{"node-LatLon":{"lon":-1060420573,"lat":414940760}}},{"delta":{"node-LatLon":{"lon":-1060450509,"lat":414958838}}},{"delta":{"node-LatLon":{"lon":-1060475868,"lat":414980491}}},{"delta":{"node-LatLon":{"lon":-1060495507,"lat":415005280}}},{"delta":{"node-LatLon":{"lon":-1060510699,"lat":415031818}}},{"delta":{"node-LatLon":{"lon":-1060524843,"lat":415058673}}},{"delta":{"node-LatLon":{"lon":-1060533417,"lat":415086879}}},{"delta":{"node-LatLon":{"lon":-1060540264,"lat":415115378}}},{"delta":{"node-LatLon":{"lon":-1060547197,"lat":415143865}}},{"delta":{"node-LatLon":{"lon":-1060554077,"lat":415172359}}},{"delta":{"node-LatLon":{"lon":-1060561492,"lat":415200772}}},{"delta":{"node-LatLon":{"lon":-1060576552,"lat":415227429}}},{"delta":{"node-LatLon":{"lon":-1060600749,"lat":415249961}}},{"delta":{"node-LatLon":{"lon":-1060632200,"lat":415266697}}},{"delta":{"node-LatLon":{"lon":-1060666183,"lat":415280527}}},{"delta":{"node-LatLon":{"lon":-1060695463,"lat":415299353}}},{"delta":{"node-LatLon":{"lon":-1060719162,"lat":415322019}}},{"delta":{"node-LatLon":{"lon":-1060742498,"lat":415344904}}},{"delta":{"node-LatLon":{"lon":-1060765869,"lat":415367768}}},{"delta":{"node-LatLon":{"lon":-1060789259,"lat":415390622}}},{"delta":{"node-LatLon":{"lon":-1060812632,"lat":415413487}}},{"delta":{"node-LatLon":{"lon":-1060836139,"lat":415436453}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001111"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414403179,"long":-1059400563}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5895}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31500}},"msgCnt":38}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.102461,"speed":24.46,"longitude":-105.0473492},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":70,"serialNumber":15499,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31288,"packetID":"00000000000007A7DE","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417284807,"long":-1077291383},"name":"westbound_I80_173.41_187.2_SAT-2205BAF6_RC_WAMI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1077310157,"lat":417280493}}},{"delta":{"node-LatLon":{"lon":-1077365582,"lat":417267865}}},{"delta":{"node-LatLon":{"lon":-1077438858,"lat":417251174}}},{"delta":{"node-LatLon":{"lon":-1077512126,"lat":417234471}}},{"delta":{"node-LatLon":{"lon":-1077586147,"lat":417217588}}},{"delta":{"node-LatLon":{"lon":-1077660175,"lat":417200729}}},{"delta":{"node-LatLon":{"lon":-1077734162,"lat":417183833}}},{"delta":{"node-LatLon":{"lon":-1077808136,"lat":417166974}}},{"delta":{"node-LatLon":{"lon":-1077882091,"lat":417150070}}},{"delta":{"node-LatLon":{"lon":-1077955526,"lat":417133360}}},{"delta":{"node-LatLon":{"lon":-1078028926,"lat":417116571}}},{"delta":{"node-LatLon":{"lon":-1078102836,"lat":417099694}}},{"delta":{"node-LatLon":{"lon":-1078177231,"lat":417082670}}},{"delta":{"node-LatLon":{"lon":-1078251628,"lat":417065655}}},{"delta":{"node-LatLon":{"lon":-1078327521,"lat":417053313}}},{"delta":{"node-LatLon":{"lon":-1078405145,"lat":417051623}}},{"delta":{"node-LatLon":{"lon":-1078479666,"lat":417055725}}},{"delta":{"node-LatLon":{"lon":-1078551136,"lat":417059767}}},{"delta":{"node-LatLon":{"lon":-1078622626,"lat":417063607}}},{"delta":{"node-LatLon":{"lon":-1078700426,"lat":417063986}}},{"delta":{"node-LatLon":{"lon":-1078778089,"lat":417060211}}},{"delta":{"node-LatLon":{"lon":-1078855705,"lat":417056048}}},{"delta":{"node-LatLon":{"lon":-1078933113,"lat":417050466}}},{"delta":{"node-LatLon":{"lon":-1079008244,"lat":417035644}}},{"delta":{"node-LatLon":{"lon":-1079081128,"lat":417014156}}},{"delta":{"node-LatLon":{"lon":-1079153926,"lat":416992506}}},{"delta":{"node-LatLon":{"lon":-1079226268,"lat":416970973}}},{"delta":{"node-LatLon":{"lon":-1079298175,"lat":416949594}}},{"delta":{"node-LatLon":{"lon":-1079370073,"lat":416928204}}},{"delta":{"node-LatLon":{"lon":-1079442362,"lat":416906685}}},{"delta":{"node-LatLon":{"lon":-1079513134,"lat":416882726}}},{"delta":{"node-LatLon":{"lon":-1079579019,"lat":416852706}}},{"delta":{"node-LatLon":{"lon":-1079644289,"lat":416822906}}},{"delta":{"node-LatLon":{"lon":-1079709585,"lat":416793141}}},{"delta":{"node-LatLon":{"lon":-1079776048,"lat":416762809}}},{"delta":{"node-LatLon":{"lon":-1079809278,"lat":416747641}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417284807,"long":-1077291383}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31288}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024653,"speed":24.46,"longitude":-105.0473207},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":71,"serialNumber":15500,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31500,"packetID":"00000000000002CC1B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415446372,"long":-1060853758},"name":"eastbound_I80_279.86_290.44_SAT-D603EB78_RC_LARI80WRAWI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060842121,"lat":415434989}}},{"delta":{"node-LatLon":{"lon":-1060818850,"lat":415412221}}},{"delta":{"node-LatLon":{"lon":-1060795306,"lat":415389123}}},{"delta":{"node-LatLon":{"lon":-1060772024,"lat":415365878}}},{"delta":{"node-LatLon":{"lon":-1060748924,"lat":415342529}}},{"delta":{"node-LatLon":{"lon":-1060725901,"lat":415319138}}},{"delta":{"node-LatLon":{"lon":-1060702891,"lat":415295740}}},{"delta":{"node-LatLon":{"lon":-1060677392,"lat":415274709}}},{"delta":{"node-LatLon":{"lon":-1060645465,"lat":415259440}}},{"delta":{"node-LatLon":{"lon":-1060611694,"lat":415246452}}},{"delta":{"node-LatLon":{"lon":-1060583936,"lat":415227230}}},{"delta":{"node-LatLon":{"lon":-1060567112,"lat":415201829}}},{"delta":{"node-LatLon":{"lon":-1060559250,"lat":415173268}}},{"delta":{"node-LatLon":{"lon":-1060551848,"lat":415144627}}},{"delta":{"node-LatLon":{"lon":-1060544578,"lat":415115967}}},{"delta":{"node-LatLon":{"lon":-1060537212,"lat":415087321}}},{"delta":{"node-LatLon":{"lon":-1060528192,"lat":415058965}}},{"delta":{"node-LatLon":{"lon":-1060513843,"lat":415031898}}},{"delta":{"node-LatLon":{"lon":-1060498684,"lat":415005075}}},{"delta":{"node-LatLon":{"lon":-1060479584,"lat":414979768}}},{"delta":{"node-LatLon":{"lon":-1060454612,"lat":414957536}}},{"delta":{"node-LatLon":{"lon":-1060424994,"lat":414938765}}},{"delta":{"node-LatLon":{"lon":-1060394265,"lat":414920704}}},{"delta":{"node-LatLon":{"lon":-1060362947,"lat":414903230}}},{"delta":{"node-LatLon":{"lon":-1060331139,"lat":414886261}}},{"delta":{"node-LatLon":{"lon":-1060299282,"lat":414869343}}},{"delta":{"node-LatLon":{"lon":-1060267401,"lat":414852453}}},{"delta":{"node-LatLon":{"lon":-1060236377,"lat":414836034}}},{"delta":{"node-LatLon":{"lon":-1060205413,"lat":414819550}}},{"delta":{"node-LatLon":{"lon":-1060174405,"lat":414803116}}},{"delta":{"node-LatLon":{"lon":-1060143426,"lat":414786651}}},{"delta":{"node-LatLon":{"lon":-1060112442,"lat":414770191}}},{"delta":{"node-LatLon":{"lon":-1060080853,"lat":414753421}}},{"delta":{"node-LatLon":{"lon":-1060049273,"lat":414736640}}},{"delta":{"node-LatLon":{"lon":-1060017699,"lat":414719856}}},{"delta":{"node-LatLon":{"lon":-1059986118,"lat":414703079}}},{"delta":{"node-LatLon":{"lon":-1059954550,"lat":414686289}}},{"delta":{"node-LatLon":{"lon":-1059923262,"lat":414669701}}},{"delta":{"node-LatLon":{"lon":-1059892003,"lat":414653083}}},{"delta":{"node-LatLon":{"lon":-1059860748,"lat":414636462}}},{"delta":{"node-LatLon":{"lon":-1059830894,"lat":414618511}}},{"delta":{"node-LatLon":{"lon":-1059806580,"lat":414596316}}},{"delta":{"node-LatLon":{"lon":-1059783729,"lat":414573041}}},{"delta":{"node-LatLon":{"lon":-1059760839,"lat":414549787}}},{"delta":{"node-LatLon":{"lon":-1059737946,"lat":414526535}}},{"delta":{"node-LatLon":{"lon":-1059715065,"lat":414503278}}},{"delta":{"node-LatLon":{"lon":-1059692206,"lat":414480008}}},{"delta":{"node-LatLon":{"lon":-1059665100,"lat":414457204}}},{"delta":{"node-LatLon":{"lon":-1059630733,"lat":414440918}}},{"delta":{"node-LatLon":{"lon":-1059592047,"lat":414431361}}},{"delta":{"node-LatLon":{"lon":-1059552953,"lat":414422717}}},{"delta":{"node-LatLon":{"lon":-1059513468,"lat":414415217}}},{"delta":{"node-LatLon":{"lon":-1059476558,"lat":414409805}}},{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059421200,"lat":414401666}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415446372,"long":-1060853758}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5895}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31500}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024565,"speed":24.46,"longitude":-105.0473778},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":69,"serialNumber":15498,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000D0886","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416734737,"long":-1079825644},"name":"eastbound_I80_173.41_187.2_SAT-045A0F96_RC_WAMI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1079808962,"lat":416742355}}},{"delta":{"node-LatLon":{"lon":-1079775625,"lat":416757626}}},{"delta":{"node-LatLon":{"lon":-1079708864,"lat":416788062}}},{"delta":{"node-LatLon":{"lon":-1079643761,"lat":416817816}}},{"delta":{"node-LatLon":{"lon":-1079578633,"lat":416847544}}},{"delta":{"node-LatLon":{"lon":-1079513021,"lat":416877502}}},{"delta":{"node-LatLon":{"lon":-1079442840,"lat":416901685}}},{"delta":{"node-LatLon":{"lon":-1079370904,"lat":416923092}}},{"delta":{"node-LatLon":{"lon":-1079299318,"lat":416944401}}},{"delta":{"node-LatLon":{"lon":-1079227728,"lat":416965705}}},{"delta":{"node-LatLon":{"lon":-1079155246,"lat":416987264}}},{"delta":{"node-LatLon":{"lon":-1079081869,"lat":417009073}}},{"delta":{"node-LatLon":{"lon":-1079008281,"lat":417030466}}},{"delta":{"node-LatLon":{"lon":-1078933736,"lat":417045037}}},{"delta":{"node-LatLon":{"lon":-1078857144,"lat":417051301}}},{"delta":{"node-LatLon":{"lon":-1078779954,"lat":417053823}}},{"delta":{"node-LatLon":{"lon":-1078702612,"lat":417056324}}},{"delta":{"node-LatLon":{"lon":-1078625459,"lat":417053640}}},{"delta":{"node-LatLon":{"lon":-1078550508,"lat":417040669}}},{"delta":{"node-LatLon":{"lon":-1078475631,"lat":417027451}}},{"delta":{"node-LatLon":{"lon":-1078399078,"lat":417028105}}},{"delta":{"node-LatLon":{"lon":-1078325093,"lat":417044119}}},{"delta":{"node-LatLon":{"lon":-1078251401,"lat":417060961}}},{"delta":{"node-LatLon":{"lon":-1078177495,"lat":417077861}}},{"delta":{"node-LatLon":{"lon":-1078103576,"lat":417094732}}},{"delta":{"node-LatLon":{"lon":-1078029860,"lat":417111623}}},{"delta":{"node-LatLon":{"lon":-1077956308,"lat":417128437}}},{"delta":{"node-LatLon":{"lon":-1077882736,"lat":417145206}}},{"delta":{"node-LatLon":{"lon":-1077809037,"lat":417162072}}},{"delta":{"node-LatLon":{"lon":-1077735310,"lat":417178873}}},{"delta":{"node-LatLon":{"lon":-1077661395,"lat":417195740}}},{"delta":{"node-LatLon":{"lon":-1077587285,"lat":417212656}}},{"delta":{"node-LatLon":{"lon":-1077513154,"lat":417229528}}},{"delta":{"node-LatLon":{"lon":-1077440112,"lat":417246166}}},{"delta":{"node-LatLon":{"lon":-1077367083,"lat":417262839}}},{"delta":{"node-LatLon":{"lon":-1077292868,"lat":417279720}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416734737,"long":-1079825644}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024565,"speed":24.46,"longitude":-105.0473778},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":68,"serialNumber":15497,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"00000000000004E35A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415325796,"long":-1094614954},"name":"westbound_I80_90.098_90.312_SAT-5302F9D3_RC_GRTUNWB","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094631379,"lat":415333237}}},{"delta":{"node-LatLon":{"lon":-1094647572,"lat":415340958}}},{"delta":{"node-LatLon":{"lon":-1094662661,"lat":415349838}}},{"delta":{"node-LatLon":{"lon":-1094677547,"lat":415358928}}},{"delta":{"node-LatLon":{"lon":-1094692747,"lat":415367707}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000000100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415325796,"long":-1094614954}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":18}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024523,"speed":24.46,"longitude":-105.0474064},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":67,"serialNumber":15496,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"000000000000064D1D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415367224,"long":-1094697171},"name":"eastbound_I80_90.109_90.324_SAT-D48C7646_RC_GRTUNEB","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094682069,"lat":415358380}}},{"delta":{"node-LatLon":{"lon":-1094666854,"lat":415349644}}},{"delta":{"node-LatLon":{"lon":-1094651565,"lat":415340982}}},{"delta":{"node-LatLon":{"lon":-1094636062,"lat":415332555}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000010000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415367224,"long":-1094697171}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024523,"speed":24.46,"longitude":-105.0474064},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":66,"serialNumber":15495,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.551Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000A389B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416780373,"long":-1087800160},"name":"westbound_I80_111.16_130.84_SAT-69F3DB7B_RC_RSI80ERAWD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1087818098,"lat":416784087}}},{"delta":{"node-LatLon":{"lon":-1087836031,"lat":416787816}}},{"delta":{"node-LatLon":{"lon":-1087907758,"lat":416802744}}},{"delta":{"node-LatLon":{"lon":-1087979504,"lat":416817627}}},{"delta":{"node-LatLon":{"lon":-1088052834,"lat":416835667}}},{"delta":{"node-LatLon":{"lon":-1088118809,"lat":416865925}}},{"delta":{"node-LatLon":{"lon":-1088189118,"lat":416887479}}},{"delta":{"node-LatLon":{"lon":-1088265956,"lat":416884718}}},{"delta":{"node-LatLon":{"lon":-1088342780,"lat":416881687}}},{"delta":{"node-LatLon":{"lon":-1088419492,"lat":416886484}}},{"delta":{"node-LatLon":{"lon":-1088493522,"lat":416903350}}},{"delta":{"node-LatLon":{"lon":-1088567559,"lat":416920405}}},{"delta":{"node-LatLon":{"lon":-1088642038,"lat":416936455}}},{"delta":{"node-LatLon":{"lon":-1088718787,"lat":416933306}}},{"delta":{"node-LatLon":{"lon":-1088792811,"lat":416916445}}},{"delta":{"node-LatLon":{"lon":-1088868743,"lat":416911533}}},{"delta":{"node-LatLon":{"lon":-1088944838,"lat":416921259}}},{"delta":{"node-LatLon":{"lon":-1089020933,"lat":416916370}}},{"delta":{"node-LatLon":{"lon":-1089090262,"lat":416891382}}},{"delta":{"node-LatLon":{"lon":-1089158444,"lat":416862087}}},{"delta":{"node-LatLon":{"lon":-1089206739,"lat":416816167}}},{"delta":{"node-LatLon":{"lon":-1089229701,"lat":416761043}}},{"delta":{"node-LatLon":{"lon":-1089278517,"lat":416719880}}},{"delta":{"node-LatLon":{"lon":-1089348486,"lat":416699184}}},{"delta":{"node-LatLon":{"lon":-1089425832,"lat":416694198}}},{"delta":{"node-LatLon":{"lon":-1089503649,"lat":416693457}}},{"delta":{"node-LatLon":{"lon":-1089580254,"lat":416689749}}},{"delta":{"node-LatLon":{"lon":-1089654935,"lat":416679778}}},{"delta":{"node-LatLon":{"lon":-1089727701,"lat":416664462}}},{"delta":{"node-LatLon":{"lon":-1089800350,"lat":416634151}}},{"delta":{"node-LatLon":{"lon":-1089872661,"lat":416603374}}},{"delta":{"node-LatLon":{"lon":-1089942282,"lat":416573714}}},{"delta":{"node-LatLon":{"lon":-1090009243,"lat":416545210}}},{"delta":{"node-LatLon":{"lon":-1090076173,"lat":416516668}}},{"delta":{"node-LatLon":{"lon":-1090143069,"lat":416488162}}},{"delta":{"node-LatLon":{"lon":-1090209918,"lat":416459596}}},{"delta":{"node-LatLon":{"lon":-1090277470,"lat":416430810}}},{"delta":{"node-LatLon":{"lon":-1090345662,"lat":416401720}}},{"delta":{"node-LatLon":{"lon":-1090413831,"lat":416372606}}},{"delta":{"node-LatLon":{"lon":-1090485302,"lat":416354405}}},{"delta":{"node-LatLon":{"lon":-1090559312,"lat":416342147}}},{"delta":{"node-LatLon":{"lon":-1090633109,"lat":416329839}}},{"delta":{"node-LatLon":{"lon":-1090706742,"lat":416317644}}},{"delta":{"node-LatLon":{"lon":-1090780363,"lat":416305412}}},{"delta":{"node-LatLon":{"lon":-1090854362,"lat":416289159}}},{"delta":{"node-LatLon":{"lon":-1090923703,"lat":416263510}}},{"delta":{"node-LatLon":{"lon":-1090992931,"lat":416237673}}},{"delta":{"node-LatLon":{"lon":-1091062121,"lat":416211766}}},{"delta":{"node-LatLon":{"lon":-1091131370,"lat":416185951}}},{"delta":{"node-LatLon":{"lon":-1091198118,"lat":416160999}}},{"delta":{"node-LatLon":{"lon":-1091264852,"lat":416136031}}},{"delta":{"node-LatLon":{"lon":-1091281511,"lat":416129751}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000011111100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416780373,"long":-1087800160}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024479,"speed":24.46,"longitude":-105.0474349},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":65,"serialNumber":15494,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.551Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"00000000000002E727","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"eastbound_I80_111.16_130.84_SAT-E83FBA7D_RC_RSI80ERAWI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024479,"speed":24.46,"longitude":-105.0474349},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":64,"serialNumber":15493,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"0000000000000EF239","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415272879,"long":-1094524441},"name":"westbound_I80_83.01_91.0_SAT-AE5C67DC_RC_RSI80WGRAD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}},{"delta":{"node-LatLon":{"lon":-1094567629,"lat":415301333}}},{"delta":{"node-LatLon":{"lon":-1094598552,"lat":415318326}}},{"delta":{"node-LatLon":{"lon":-1094631379,"lat":415333237}}},{"delta":{"node-LatLon":{"lon":-1094662661,"lat":415349838}}},{"delta":{"node-LatLon":{"lon":-1094692747,"lat":415367707}}},{"delta":{"node-LatLon":{"lon":-1094725523,"lat":415382855}}},{"delta":{"node-LatLon":{"lon":-1094759103,"lat":415397020}}},{"delta":{"node-LatLon":{"lon":-1094787376,"lat":415416158}}},{"delta":{"node-LatLon":{"lon":-1094803681,"lat":415442345}}},{"delta":{"node-LatLon":{"lon":-1094827523,"lat":415464696}}},{"delta":{"node-LatLon":{"lon":-1094857768,"lat":415483037}}},{"delta":{"node-LatLon":{"lon":-1094888001,"lat":415501390}}},{"delta":{"node-LatLon":{"lon":-1094919170,"lat":415518798}}},{"delta":{"node-LatLon":{"lon":-1094953846,"lat":415531903}}},{"delta":{"node-LatLon":{"lon":-1094991158,"lat":415539943}}},{"delta":{"node-LatLon":{"lon":-1095029104,"lat":415543908}}},{"delta":{"node-LatLon":{"lon":-1095067107,"lat":415547593}}},{"delta":{"node-LatLon":{"lon":-1095105120,"lat":415551220}}},{"delta":{"node-LatLon":{"lon":-1095142989,"lat":415555524}}},{"delta":{"node-LatLon":{"lon":-1095178583,"lat":415565942}}},{"delta":{"node-LatLon":{"lon":-1095212839,"lat":415581431}}},{"delta":{"node-LatLon":{"lon":-1095248825,"lat":415594355}}},{"delta":{"node-LatLon":{"lon":-1095287864,"lat":415600639}}},{"delta":{"node-LatLon":{"lon":-1095327361,"lat":415605311}}},{"delta":{"node-LatLon":{"lon":-1095366831,"lat":415610104}}},{"delta":{"node-LatLon":{"lon":-1095403172,"lat":415618111}}},{"delta":{"node-LatLon":{"lon":-1095437320,"lat":415630465}}},{"delta":{"node-LatLon":{"lon":-1095472268,"lat":415641378}}},{"delta":{"node-LatLon":{"lon":-1095509638,"lat":415645822}}},{"delta":{"node-LatLon":{"lon":-1095547341,"lat":415643461}}},{"delta":{"node-LatLon":{"lon":-1095583235,"lat":415634481}}},{"delta":{"node-LatLon":{"lon":-1095616942,"lat":415621427}}},{"delta":{"node-LatLon":{"lon":-1095650544,"lat":415608220}}},{"delta":{"node-LatLon":{"lon":-1095684389,"lat":415595379}}},{"delta":{"node-LatLon":{"lon":-1095720328,"lat":415586411}}},{"delta":{"node-LatLon":{"lon":-1095758260,"lat":415580697}}},{"delta":{"node-LatLon":{"lon":-1095796228,"lat":415575112}}},{"delta":{"node-LatLon":{"lon":-1095834193,"lat":415569520}}},{"delta":{"node-LatLon":{"lon":-1095872158,"lat":415563926}}},{"delta":{"node-LatLon":{"lon":-1095909369,"lat":415556119}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415272879,"long":-1094524441}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":18}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024436,"speed":24.46,"longitude":-105.0474634},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":63,"serialNumber":15492,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"00000000000004FE29","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415546021,"long":-1095927626},"name":"eastbound_I80_83.01_91.0_SAT-51917CF8_RC_RSI80WGRAI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1095910196,"lat":415552425}}},{"delta":{"node-LatLon":{"lon":-1095873554,"lat":415561468}}},{"delta":{"node-LatLon":{"lon":-1095835664,"lat":415567106}}},{"delta":{"node-LatLon":{"lon":-1095797758,"lat":415572690}}},{"delta":{"node-LatLon":{"lon":-1095759854,"lat":415578281}}},{"delta":{"node-LatLon":{"lon":-1095721965,"lat":415583926}}},{"delta":{"node-LatLon":{"lon":-1095685445,"lat":415592676}}},{"delta":{"node-LatLon":{"lon":-1095651117,"lat":415605559}}},{"delta":{"node-LatLon":{"lon":-1095617101,"lat":415618922}}},{"delta":{"node-LatLon":{"lon":-1095583008,"lat":415632176}}},{"delta":{"node-LatLon":{"lon":-1095546731,"lat":415641373}}},{"delta":{"node-LatLon":{"lon":-1095509731,"lat":415643672}}},{"delta":{"node-LatLon":{"lon":-1095473059,"lat":415639326}}},{"delta":{"node-LatLon":{"lon":-1095438752,"lat":415628644}}},{"delta":{"node-LatLon":{"lon":-1095405325,"lat":415616388}}},{"delta":{"node-LatLon":{"lon":-1095369730,"lat":415608358}}},{"delta":{"node-LatLon":{"lon":-1095330616,"lat":415603528}}},{"delta":{"node-LatLon":{"lon":-1095291457,"lat":415598888}}},{"delta":{"node-LatLon":{"lon":-1095252639,"lat":415593016}}},{"delta":{"node-LatLon":{"lon":-1095216703,"lat":415580638}}},{"delta":{"node-LatLon":{"lon":-1095182775,"lat":415565235}}},{"delta":{"node-LatLon":{"lon":-1095147149,"lat":415554096}}},{"delta":{"node-LatLon":{"lon":-1095108985,"lat":415549420}}},{"delta":{"node-LatLon":{"lon":-1095070589,"lat":415545729}}},{"delta":{"node-LatLon":{"lon":-1095032188,"lat":415542064}}},{"delta":{"node-LatLon":{"lon":-1094993831,"lat":415538174}}},{"delta":{"node-LatLon":{"lon":-1094956860,"lat":415530480}}},{"delta":{"node-LatLon":{"lon":-1094922411,"lat":415517802}}},{"delta":{"node-LatLon":{"lon":-1094891469,"lat":415500743}}},{"delta":{"node-LatLon":{"lon":-1094861594,"lat":415482600}}},{"delta":{"node-LatLon":{"lon":-1094831707,"lat":415464468}}},{"delta":{"node-LatLon":{"lon":-1094806972,"lat":415442662}}},{"delta":{"node-LatLon":{"lon":-1094790913,"lat":415416378}}},{"delta":{"node-LatLon":{"lon":-1094763585,"lat":415396461}}},{"delta":{"node-LatLon":{"lon":-1094730035,"lat":415382264}}},{"delta":{"node-LatLon":{"lon":-1094697171,"lat":415367224}}},{"delta":{"node-LatLon":{"lon":-1094666854,"lat":415349644}}},{"delta":{"node-LatLon":{"lon":-1094636062,"lat":415332555}}},{"delta":{"node-LatLon":{"lon":-1094603326,"lat":415317623}}},{"delta":{"node-LatLon":{"lon":-1094571921,"lat":415301218}}},{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011111000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415546021,"long":-1095927626}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024392,"speed":24.46,"longitude":-105.047492},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":62,"serialNumber":15491,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"000000000000059505","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416103734,"long":-1092210485},"name":"westbound_I80_91.0_104.83_SAT-16CC040B_RC_RSI80WGRFGD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092225602,"lat":416102051}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}},{"delta":{"node-LatLon":{"lon":-1092295103,"lat":416078549}}},{"delta":{"node-LatLon":{"lon":-1092353802,"lat":416055730}}},{"delta":{"node-LatLon":{"lon":-1092409233,"lat":415994268}}},{"delta":{"node-LatLon":{"lon":-1092453299,"lat":415926333}}},{"delta":{"node-LatLon":{"lon":-1092494255,"lat":415863151}}},{"delta":{"node-LatLon":{"lon":-1092542043,"lat":415808289}}},{"delta":{"node-LatLon":{"lon":-1092614541,"lat":415771804}}},{"delta":{"node-LatLon":{"lon":-1092686893,"lat":415745034}}},{"delta":{"node-LatLon":{"lon":-1092755235,"lat":415719687}}},{"delta":{"node-LatLon":{"lon":-1092824046,"lat":415694227}}},{"delta":{"node-LatLon":{"lon":-1092892916,"lat":415668054}}},{"delta":{"node-LatLon":{"lon":-1092959628,"lat":415638882}}},{"delta":{"node-LatLon":{"lon":-1093026230,"lat":415609696}}},{"delta":{"node-LatLon":{"lon":-1093092855,"lat":415580545}}},{"delta":{"node-LatLon":{"lon":-1093159414,"lat":415551340}}},{"delta":{"node-LatLon":{"lon":-1093225990,"lat":415522190}}},{"delta":{"node-LatLon":{"lon":-1093292630,"lat":415493128}}},{"delta":{"node-LatLon":{"lon":-1093362756,"lat":415469236}}},{"delta":{"node-LatLon":{"lon":-1093433593,"lat":415446486}}},{"delta":{"node-LatLon":{"lon":-1093501983,"lat":415419517}}},{"delta":{"node-LatLon":{"lon":-1093570430,"lat":415392320}}},{"delta":{"node-LatLon":{"lon":-1093638825,"lat":415365052}}},{"delta":{"node-LatLon":{"lon":-1093706625,"lat":415338051}}},{"delta":{"node-LatLon":{"lon":-1093779378,"lat":415323162}}},{"delta":{"node-LatLon":{"lon":-1093855135,"lat":415332204}}},{"delta":{"node-LatLon":{"lon":-1093927477,"lat":415317094}}},{"delta":{"node-LatLon":{"lon":-1093995757,"lat":415291937}}},{"delta":{"node-LatLon":{"lon":-1094070772,"lat":415279115}}},{"delta":{"node-LatLon":{"lon":-1094147255,"lat":415276886}}},{"delta":{"node-LatLon":{"lon":-1094224449,"lat":415282426}}},{"delta":{"node-LatLon":{"lon":-1094301394,"lat":415276124}}},{"delta":{"node-LatLon":{"lon":-1094371013,"lat":415249502}}},{"delta":{"node-LatLon":{"lon":-1094443930,"lat":415236997}}},{"delta":{"node-LatLon":{"lon":-1094510066,"lat":415263454}}},{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416103734,"long":-1092210485}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":18}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024392,"speed":24.46,"longitude":-105.047492},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":61,"serialNumber":15490,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"000000000000081102","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-6E2075B5_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.55,"latitude":41.1024304,"speed":24.32,"longitude":-105.047549},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":60,"serialNumber":15489,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"000000000000104155","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416142272,"long":-1091248169},"name":"westbound_I80_104.83_111.16_SAT-E4C7F6F3_RC_RSI80MARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091264852,"lat":416136031}}},{"delta":{"node-LatLon":{"lon":-1091298228,"lat":416123561}}},{"delta":{"node-LatLon":{"lon":-1091334018,"lat":416110189}}},{"delta":{"node-LatLon":{"lon":-1091369795,"lat":416096798}}},{"delta":{"node-LatLon":{"lon":-1091405563,"lat":416083396}}},{"delta":{"node-LatLon":{"lon":-1091441283,"lat":416069923}}},{"delta":{"node-LatLon":{"lon":-1091474700,"lat":416053537}}},{"delta":{"node-LatLon":{"lon":-1091501964,"lat":416033828}}},{"delta":{"node-LatLon":{"lon":-1091526844,"lat":416012368}}},{"delta":{"node-LatLon":{"lon":-1091552241,"lat":415991270}}},{"delta":{"node-LatLon":{"lon":-1091583184,"lat":415974991}}},{"delta":{"node-LatLon":{"lon":-1091618832,"lat":415965599}}},{"delta":{"node-LatLon":{"lon":-1091657262,"lat":415963124}}},{"delta":{"node-LatLon":{"lon":-1091695868,"lat":415962098}}},{"delta":{"node-LatLon":{"lon":-1091734473,"lat":415961055}}},{"delta":{"node-LatLon":{"lon":-1091772519,"lat":415956756}}},{"delta":{"node-LatLon":{"lon":-1091806953,"lat":415943769}}},{"delta":{"node-LatLon":{"lon":-1091836882,"lat":415930461}}},{"delta":{"node-LatLon":{"lon":-1091869287,"lat":415921267}}},{"delta":{"node-LatLon":{"lon":-1091903898,"lat":415920097}}},{"delta":{"node-LatLon":{"lon":-1091937392,"lat":415926747}}},{"delta":{"node-LatLon":{"lon":-1091966574,"lat":415940771}}},{"delta":{"node-LatLon":{"lon":-1091990723,"lat":415963402}}},{"delta":{"node-LatLon":{"lon":-1092004823,"lat":415990502}}},{"delta":{"node-LatLon":{"lon":-1092019104,"lat":416017543}}},{"delta":{"node-LatLon":{"lon":-1092043521,"lat":416040022}}},{"delta":{"node-LatLon":{"lon":-1092074899,"lat":416057166}}},{"delta":{"node-LatLon":{"lon":-1092100017,"lat":416070268}}},{"delta":{"node-LatLon":{"lon":-1092125100,"lat":416083407}}},{"delta":{"node-LatLon":{"lon":-1092151035,"lat":416095519}}},{"delta":{"node-LatLon":{"lon":-1092180024,"lat":416102624}}},{"delta":{"node-LatLon":{"lon":-1092210485,"lat":416103734}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111111"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416142272,"long":-1091248169}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":18}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.55,"latitude":41.1024304,"speed":24.32,"longitude":-105.047549},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":59,"serialNumber":15488,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"0000000000000B625E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416070648,"long":-1092309469},"name":"eastbound_I80_104.83_111.16_SAT-7802A0B6_RC_RSI80MARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092256961,"lat":416090938}}},{"delta":{"node-LatLon":{"lon":-1092220011,"lat":416100743}}},{"delta":{"node-LatLon":{"lon":-1092180837,"lat":416100613}}},{"delta":{"node-LatLon":{"lon":-1092144100,"lat":416090411}}},{"delta":{"node-LatLon":{"lon":-1092111577,"lat":416073768}}},{"delta":{"node-LatLon":{"lon":-1092079251,"lat":416056897}}},{"delta":{"node-LatLon":{"lon":-1092047614,"lat":416039914}}},{"delta":{"node-LatLon":{"lon":-1092022496,"lat":416017802}}},{"delta":{"node-LatLon":{"lon":-1092007875,"lat":415990813}}},{"delta":{"node-LatLon":{"lon":-1091994030,"lat":415963562}}},{"delta":{"node-LatLon":{"lon":-1091970384,"lat":415940547}}},{"delta":{"node-LatLon":{"lon":-1091941029,"lat":415925731}}},{"delta":{"node-LatLon":{"lon":-1091907083,"lat":415918255}}},{"delta":{"node-LatLon":{"lon":-1091871710,"lat":415918755}}},{"delta":{"node-LatLon":{"lon":-1091838259,"lat":415927373}}},{"delta":{"node-LatLon":{"lon":-1091807633,"lat":415940869}}},{"delta":{"node-LatLon":{"lon":-1091773693,"lat":415954295}}},{"delta":{"node-LatLon":{"lon":-1091735915,"lat":415958860}}},{"delta":{"node-LatLon":{"lon":-1091697507,"lat":415959950}}},{"delta":{"node-LatLon":{"lon":-1091659097,"lat":415960991}}},{"delta":{"node-LatLon":{"lon":-1091620811,"lat":415963173}}},{"delta":{"node-LatLon":{"lon":-1091584800,"lat":415972056}}},{"delta":{"node-LatLon":{"lon":-1091553176,"lat":415987749}}},{"delta":{"node-LatLon":{"lon":-1091527289,"lat":416008625}}},{"delta":{"node-LatLon":{"lon":-1091502330,"lat":416030163}}},{"delta":{"node-LatLon":{"lon":-1091474365,"lat":416049452}}},{"delta":{"node-LatLon":{"lon":-1091440655,"lat":416065279}}},{"delta":{"node-LatLon":{"lon":-1091405002,"lat":416078597}}},{"delta":{"node-LatLon":{"lon":-1091369361,"lat":416091933}}},{"delta":{"node-LatLon":{"lon":-1091333716,"lat":416105264}}},{"delta":{"node-LatLon":{"lon":-1091298057,"lat":416118575}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416070648,"long":-1092309469}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024261,"speed":24.14,"longitude":-105.0475775},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":58,"serialNumber":15487,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31551,"packetID":"000000000000038ED9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416344087,"long":-1082586926},"name":"westbound_I80_142.17_158.55_SAT-BC3CEF3B_RC_PDI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1082605867,"lat":416341147}}},{"delta":{"node-LatLon":{"lon":-1082643762,"lat":416335317}}},{"delta":{"node-LatLon":{"lon":-1082719537,"lat":416323607}}},{"delta":{"node-LatLon":{"lon":-1082795332,"lat":416311823}}},{"delta":{"node-LatLon":{"lon":-1082871219,"lat":416300396}}},{"delta":{"node-LatLon":{"lon":-1082948412,"lat":416300333}}},{"delta":{"node-LatLon":{"lon":-1083025592,"lat":416303069}}},{"delta":{"node-LatLon":{"lon":-1083102774,"lat":416305783}}},{"delta":{"node-LatLon":{"lon":-1083179715,"lat":416308441}}},{"delta":{"node-LatLon":{"lon":-1083256650,"lat":416311187}}},{"delta":{"node-LatLon":{"lon":-1083333670,"lat":416313866}}},{"delta":{"node-LatLon":{"lon":-1083410768,"lat":416316579}}},{"delta":{"node-LatLon":{"lon":-1083487872,"lat":416319193}}},{"delta":{"node-LatLon":{"lon":-1083564905,"lat":416322423}}},{"delta":{"node-LatLon":{"lon":-1083641683,"lat":416328142}}},{"delta":{"node-LatLon":{"lon":-1083718587,"lat":416332876}}},{"delta":{"node-LatLon":{"lon":-1083795496,"lat":416337572}}},{"delta":{"node-LatLon":{"lon":-1083872405,"lat":416342269}}},{"delta":{"node-LatLon":{"lon":-1083949300,"lat":416347096}}},{"delta":{"node-LatLon":{"lon":-1084026064,"lat":416352984}}},{"delta":{"node-LatLon":{"lon":-1084103063,"lat":416357400}}},{"delta":{"node-LatLon":{"lon":-1084180198,"lat":416361177}}},{"delta":{"node-LatLon":{"lon":-1084257244,"lat":416365879}}},{"delta":{"node-LatLon":{"lon":-1084326673,"lat":416370105}}},{"delta":{"node-LatLon":{"lon":-1084396100,"lat":416374353}}},{"delta":{"node-LatLon":{"lon":-1084469893,"lat":416378867}}},{"delta":{"node-LatLon":{"lon":-1084548056,"lat":416383611}}},{"delta":{"node-LatLon":{"lon":-1084626220,"lat":416388347}}},{"delta":{"node-LatLon":{"lon":-1084703702,"lat":416393060}}},{"delta":{"node-LatLon":{"lon":-1084781188,"lat":416397734}}},{"delta":{"node-LatLon":{"lon":-1084859010,"lat":416402450}}},{"delta":{"node-LatLon":{"lon":-1084937168,"lat":416407197}}},{"delta":{"node-LatLon":{"lon":-1085015328,"lat":416411930}}},{"delta":{"node-LatLon":{"lon":-1085093024,"lat":416416612}}},{"delta":{"node-LatLon":{"lon":-1085170718,"lat":416421321}}},{"delta":{"node-LatLon":{"lon":-1085248418,"lat":416425954}}},{"delta":{"node-LatLon":{"lon":-1085326100,"lat":416430747}}},{"delta":{"node-LatLon":{"lon":-1085403806,"lat":416435322}}},{"delta":{"node-LatLon":{"lon":-1085482142,"lat":416440051}}},{"delta":{"node-LatLon":{"lon":-1085560481,"lat":416444752}}},{"delta":{"node-LatLon":{"lon":-1085638702,"lat":416449395}}},{"delta":{"node-LatLon":{"lon":-1085716794,"lat":416454065}}},{"delta":{"node-LatLon":{"lon":-1085775366,"lat":416457555}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416344087,"long":-1082586926}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31551}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024175,"speed":24.14,"longitude":-105.0476338},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":55,"serialNumber":15484,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31448,"packetID":"000000000000078022","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416786287,"long":-1087839399},"name":"eastbound_I80_130.84_142.17_SAT-7FA0318B_RC_PDI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}},{"delta":{"node-LatLon":{"lon":-1087803620,"lat":416778902}}},{"delta":{"node-LatLon":{"lon":-1087765168,"lat":416771009}}},{"delta":{"node-LatLon":{"lon":-1087726370,"lat":416764174}}},{"delta":{"node-LatLon":{"lon":-1087686884,"lat":416760144}}},{"delta":{"node-LatLon":{"lon":-1087647203,"lat":416757279}}},{"delta":{"node-LatLon":{"lon":-1087607525,"lat":416754383}}},{"delta":{"node-LatLon":{"lon":-1087569186,"lat":416751628}}},{"delta":{"node-LatLon":{"lon":-1087530855,"lat":416748818}}},{"delta":{"node-LatLon":{"lon":-1087492521,"lat":416746033}}},{"delta":{"node-LatLon":{"lon":-1087454195,"lat":416743189}}},{"delta":{"node-LatLon":{"lon":-1087416702,"lat":416736770}}},{"delta":{"node-LatLon":{"lon":-1087381435,"lat":416725340}}},{"delta":{"node-LatLon":{"lon":-1087349578,"lat":416709238}}},{"delta":{"node-LatLon":{"lon":-1087320577,"lat":416690280}}},{"delta":{"node-LatLon":{"lon":-1087291648,"lat":416671260}}},{"delta":{"node-LatLon":{"lon":-1087262787,"lat":416652182}}},{"delta":{"node-LatLon":{"lon":-1087233802,"lat":416633016}}},{"delta":{"node-LatLon":{"lon":-1087204787,"lat":416613876}}},{"delta":{"node-LatLon":{"lon":-1087175815,"lat":416594699}}},{"delta":{"node-LatLon":{"lon":-1087146808,"lat":416575554}}},{"delta":{"node-LatLon":{"lon":-1087117854,"lat":416556364}}},{"delta":{"node-LatLon":{"lon":-1087088159,"lat":416538069}}},{"delta":{"node-LatLon":{"lon":-1087056409,"lat":416521833}}},{"delta":{"node-LatLon":{"lon":-1087022859,"lat":416507786}}},{"delta":{"node-LatLon":{"lon":-1086987709,"lat":416496142}}},{"delta":{"node-LatLon":{"lon":-1086951310,"lat":416486912}}},{"delta":{"node-LatLon":{"lon":-1086913467,"lat":416480171}}},{"delta":{"node-LatLon":{"lon":-1086874956,"lat":416476074}}},{"delta":{"node-LatLon":{"lon":-1086836114,"lat":416474482}}},{"delta":{"node-LatLon":{"lon":-1086797232,"lat":416473404}}},{"delta":{"node-LatLon":{"lon":-1086758350,"lat":416472330}}},{"delta":{"node-LatLon":{"lon":-1086719468,"lat":416471283}}},{"delta":{"node-LatLon":{"lon":-1086680585,"lat":416470225}}},{"delta":{"node-LatLon":{"lon":-1086641702,"lat":416469187}}},{"delta":{"node-LatLon":{"lon":-1086602819,"lat":416468148}}},{"delta":{"node-LatLon":{"lon":-1086563936,"lat":416467108}}},{"delta":{"node-LatLon":{"lon":-1086525511,"lat":416466317}}},{"delta":{"node-LatLon":{"lon":-1086487125,"lat":416467788}}},{"delta":{"node-LatLon":{"lon":-1086448944,"lat":416471177}}},{"delta":{"node-LatLon":{"lon":-1086410780,"lat":416474681}}},{"delta":{"node-LatLon":{"lon":-1086372613,"lat":416478166}}},{"delta":{"node-LatLon":{"lon":-1086334405,"lat":416481678}}},{"delta":{"node-LatLon":{"lon":-1086296197,"lat":416485199}}},{"delta":{"node-LatLon":{"lon":-1086257994,"lat":416488743}}},{"delta":{"node-LatLon":{"lon":-1086219779,"lat":416492224}}},{"delta":{"node-LatLon":{"lon":-1086181504,"lat":416495268}}},{"delta":{"node-LatLon":{"lon":-1086142990,"lat":416495887}}},{"delta":{"node-LatLon":{"lon":-1086104564,"lat":416493848}}},{"delta":{"node-LatLon":{"lon":-1086066501,"lat":416489365}}},{"delta":{"node-LatLon":{"lon":-1086028512,"lat":416484522}}},{"delta":{"node-LatLon":{"lon":-1085990518,"lat":416479699}}},{"delta":{"node-LatLon":{"lon":-1085952503,"lat":416474853}}},{"delta":{"node-LatLon":{"lon":-1085914496,"lat":416469967}}},{"delta":{"node-LatLon":{"lon":-1085876481,"lat":416465123}}},{"delta":{"node-LatLon":{"lon":-1085838471,"lat":416460258}}},{"delta":{"node-LatLon":{"lon":-1085800440,"lat":416455490}}},{"delta":{"node-LatLon":{"lon":-1085761374,"lat":416452277}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416786287,"long":-1087839399}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31448}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024218,"speed":24.14,"longitude":-105.0476056},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":57,"serialNumber":15486,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31551,"packetID":"00000000000004E0EC","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416455490,"long":-1085800440},"name":"eastbound_I80_142.17_158.55_SAT-A139FA35_RC_PDI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1085780958,"lat":416453533}}},{"delta":{"node-LatLon":{"lon":-1085722182,"lat":416449943}}},{"delta":{"node-LatLon":{"lon":-1085643804,"lat":416445230}}},{"delta":{"node-LatLon":{"lon":-1085565424,"lat":416440540}}},{"delta":{"node-LatLon":{"lon":-1085487043,"lat":416435869}}},{"delta":{"node-LatLon":{"lon":-1085408668,"lat":416431146}}},{"delta":{"node-LatLon":{"lon":-1085330293,"lat":416426421}}},{"delta":{"node-LatLon":{"lon":-1085251916,"lat":416421727}}},{"delta":{"node-LatLon":{"lon":-1085173902,"lat":416416997}}},{"delta":{"node-LatLon":{"lon":-1085096242,"lat":416412330}}},{"delta":{"node-LatLon":{"lon":-1085018585,"lat":416407636}}},{"delta":{"node-LatLon":{"lon":-1084940663,"lat":416402897}}},{"delta":{"node-LatLon":{"lon":-1084862741,"lat":416398163}}},{"delta":{"node-LatLon":{"lon":-1084784815,"lat":416393472}}},{"delta":{"node-LatLon":{"lon":-1084706889,"lat":416388787}}},{"delta":{"node-LatLon":{"lon":-1084628972,"lat":416384031}}},{"delta":{"node-LatLon":{"lon":-1084551057,"lat":416379343}}},{"delta":{"node-LatLon":{"lon":-1084473154,"lat":416374560}}},{"delta":{"node-LatLon":{"lon":-1084399541,"lat":416370085}}},{"delta":{"node-LatLon":{"lon":-1084330227,"lat":416365845}}},{"delta":{"node-LatLon":{"lon":-1084260912,"lat":416361623}}},{"delta":{"node-LatLon":{"lon":-1084184275,"lat":416356906}}},{"delta":{"node-LatLon":{"lon":-1084107548,"lat":416353136}}},{"delta":{"node-LatLon":{"lon":-1084030065,"lat":416348811}}},{"delta":{"node-LatLon":{"lon":-1083951951,"lat":416342842}}},{"delta":{"node-LatLon":{"lon":-1083873709,"lat":416337915}}},{"delta":{"node-LatLon":{"lon":-1083796972,"lat":416333186}}},{"delta":{"node-LatLon":{"lon":-1083720234,"lat":416328459}}},{"delta":{"node-LatLon":{"lon":-1083643497,"lat":416323733}}},{"delta":{"node-LatLon":{"lon":-1083566759,"lat":416319020}}},{"delta":{"node-LatLon":{"lon":-1083489868,"lat":416316067}}},{"delta":{"node-LatLon":{"lon":-1083413019,"lat":416313460}}},{"delta":{"node-LatLon":{"lon":-1083336178,"lat":416310750}}},{"delta":{"node-LatLon":{"lon":-1083259199,"lat":416308063}}},{"delta":{"node-LatLon":{"lon":-1083182086,"lat":416305377}}},{"delta":{"node-LatLon":{"lon":-1083104978,"lat":416302622}}},{"delta":{"node-LatLon":{"lon":-1083028061,"lat":416299895}}},{"delta":{"node-LatLon":{"lon":-1082951147,"lat":416297144}}},{"delta":{"node-LatLon":{"lon":-1082873751,"lat":416296812}}},{"delta":{"node-LatLon":{"lon":-1082797210,"lat":416308158}}},{"delta":{"node-LatLon":{"lon":-1082720795,"lat":416320017}}},{"delta":{"node-LatLon":{"lon":-1082645377,"lat":416331711}}},{"delta":{"node-LatLon":{"lon":-1082607675,"lat":416337584}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416455490,"long":-1085800440}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31551}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024218,"speed":24.14,"longitude":-105.0476056},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":56,"serialNumber":15485,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31448,"packetID":"00000000000008DC26","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416456408,"long":-1085755840},"name":"westbound_I80_130.84_142.17_SAT-84100418_RC_PDI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1085775366,"lat":416457555}}},{"delta":{"node-LatLon":{"lon":-1085794888,"lat":416458736}}},{"delta":{"node-LatLon":{"lon":-1085833690,"lat":416461832}}},{"delta":{"node-LatLon":{"lon":-1085872176,"lat":416466707}}},{"delta":{"node-LatLon":{"lon":-1085910651,"lat":416471634}}},{"delta":{"node-LatLon":{"lon":-1085949134,"lat":416476528}}},{"delta":{"node-LatLon":{"lon":-1085987613,"lat":416481440}}},{"delta":{"node-LatLon":{"lon":-1086025528,"lat":416486267}}},{"delta":{"node-LatLon":{"lon":-1086063443,"lat":416491103}}},{"delta":{"node-LatLon":{"lon":-1086101422,"lat":416495630}}},{"delta":{"node-LatLon":{"lon":-1086139754,"lat":416497851}}},{"delta":{"node-LatLon":{"lon":-1086178196,"lat":416497493}}},{"delta":{"node-LatLon":{"lon":-1086216694,"lat":416494658}}},{"delta":{"node-LatLon":{"lon":-1086255095,"lat":416491116}}},{"delta":{"node-LatLon":{"lon":-1086293500,"lat":416487604}}},{"delta":{"node-LatLon":{"lon":-1086331905,"lat":416484089}}},{"delta":{"node-LatLon":{"lon":-1086370307,"lat":416480557}}},{"delta":{"node-LatLon":{"lon":-1086408427,"lat":416477034}}},{"delta":{"node-LatLon":{"lon":-1086446550,"lat":416473535}}},{"delta":{"node-LatLon":{"lon":-1086484678,"lat":416470066}}},{"delta":{"node-LatLon":{"lon":-1086523010,"lat":416468441}}},{"delta":{"node-LatLon":{"lon":-1086561402,"lat":416469144}}},{"delta":{"node-LatLon":{"lon":-1086600122,"lat":416470197}}},{"delta":{"node-LatLon":{"lon":-1086638841,"lat":416471267}}},{"delta":{"node-LatLon":{"lon":-1086677561,"lat":416472320}}},{"delta":{"node-LatLon":{"lon":-1086716282,"lat":416473363}}},{"delta":{"node-LatLon":{"lon":-1086755004,"lat":416474397}}},{"delta":{"node-LatLon":{"lon":-1086793804,"lat":416475422}}},{"delta":{"node-LatLon":{"lon":-1086832605,"lat":416476448}}},{"delta":{"node-LatLon":{"lon":-1086871382,"lat":416477827}}},{"delta":{"node-LatLon":{"lon":-1086909854,"lat":416481660}}},{"delta":{"node-LatLon":{"lon":-1086947668,"lat":416488224}}},{"delta":{"node-LatLon":{"lon":-1086984094,"lat":416497241}}},{"delta":{"node-LatLon":{"lon":-1087019268,"lat":416508718}}},{"delta":{"node-LatLon":{"lon":-1087052913,"lat":416522538}}},{"delta":{"node-LatLon":{"lon":-1087084695,"lat":416538656}}},{"delta":{"node-LatLon":{"lon":-1087114440,"lat":416556828}}},{"delta":{"node-LatLon":{"lon":-1087143191,"lat":416575895}}},{"delta":{"node-LatLon":{"lon":-1087171993,"lat":416594919}}},{"delta":{"node-LatLon":{"lon":-1087200784,"lat":416613953}}},{"delta":{"node-LatLon":{"lon":-1087229590,"lat":416632975}}},{"delta":{"node-LatLon":{"lon":-1087258414,"lat":416651983}}},{"delta":{"node-LatLon":{"lon":-1087287411,"lat":416671131}}},{"delta":{"node-LatLon":{"lon":-1087316426,"lat":416690264}}},{"delta":{"node-LatLon":{"lon":-1087345506,"lat":416709342}}},{"delta":{"node-LatLon":{"lon":-1087377220,"lat":416725818}}},{"delta":{"node-LatLon":{"lon":-1087412334,"lat":416737800}}},{"delta":{"node-LatLon":{"lon":-1087450059,"lat":416744739}}},{"delta":{"node-LatLon":{"lon":-1087488730,"lat":416747863}}},{"delta":{"node-LatLon":{"lon":-1087527450,"lat":416750657}}},{"delta":{"node-LatLon":{"lon":-1087566170,"lat":416753452}}},{"delta":{"node-LatLon":{"lon":-1087604889,"lat":416756257}}},{"delta":{"node-LatLon":{"lon":-1087644394,"lat":416759090}}},{"delta":{"node-LatLon":{"lon":-1087683889,"lat":416761997}}},{"delta":{"node-LatLon":{"lon":-1087723223,"lat":416765852}}},{"delta":{"node-LatLon":{"lon":-1087761910,"lat":416772440}}},{"delta":{"node-LatLon":{"lon":-1087800160,"lat":416780373}}},{"delta":{"node-LatLon":{"lon":-1087836031,"lat":416787816}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416456408,"long":-1085755840}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31448}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024175,"speed":24.14,"longitude":-105.0476338},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":54,"serialNumber":15483,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31205,"packetID":"000000000000053EE5","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415560658,"long":-1095891000},"name":"westbound_I80_66.17_83.01_SAT-B436F4C6_RC_GRAI80ERSD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1095909369,"lat":415556119}}},{"delta":{"node-LatLon":{"lon":-1095944107,"lat":415543430}}},{"delta":{"node-LatLon":{"lon":-1096006459,"lat":415509058}}},{"delta":{"node-LatLon":{"lon":-1096069455,"lat":415475411}}},{"delta":{"node-LatLon":{"lon":-1096142938,"lat":415458428}}},{"delta":{"node-LatLon":{"lon":-1096220131,"lat":415454351}}},{"delta":{"node-LatLon":{"lon":-1096297661,"lat":415450429}}},{"delta":{"node-LatLon":{"lon":-1096375509,"lat":415446500}}},{"delta":{"node-LatLon":{"lon":-1096453356,"lat":415442570}}},{"delta":{"node-LatLon":{"lon":-1096529793,"lat":415438718}}},{"delta":{"node-LatLon":{"lon":-1096606229,"lat":415434853}}},{"delta":{"node-LatLon":{"lon":-1096682818,"lat":415430949}}},{"delta":{"node-LatLon":{"lon":-1096759566,"lat":415427053}}},{"delta":{"node-LatLon":{"lon":-1096836470,"lat":415426618}}},{"delta":{"node-LatLon":{"lon":-1096912173,"lat":415426953}}},{"delta":{"node-LatLon":{"lon":-1096987876,"lat":415427245}}},{"delta":{"node-LatLon":{"lon":-1097064311,"lat":415427583}}},{"delta":{"node-LatLon":{"lon":-1097141481,"lat":415427878}}},{"delta":{"node-LatLon":{"lon":-1097218650,"lat":415428173}}},{"delta":{"node-LatLon":{"lon":-1097295910,"lat":415428433}}},{"delta":{"node-LatLon":{"lon":-1097373170,"lat":415428724}}},{"delta":{"node-LatLon":{"lon":-1097450254,"lat":415429029}}},{"delta":{"node-LatLon":{"lon":-1097527162,"lat":415429272}}},{"delta":{"node-LatLon":{"lon":-1097604070,"lat":415429555}}},{"delta":{"node-LatLon":{"lon":-1097681194,"lat":415429816}}},{"delta":{"node-LatLon":{"lon":-1097758318,"lat":415430084}}},{"delta":{"node-LatLon":{"lon":-1097835692,"lat":415430343}}},{"delta":{"node-LatLon":{"lon":-1097913317,"lat":415430599}}},{"delta":{"node-LatLon":{"lon":-1097990942,"lat":415430851}}},{"delta":{"node-LatLon":{"lon":-1098065366,"lat":415431126}}},{"delta":{"node-LatLon":{"lon":-1098139791,"lat":415431337}}},{"delta":{"node-LatLon":{"lon":-1098216745,"lat":415431535}}},{"delta":{"node-LatLon":{"lon":-1098296228,"lat":415431795}}},{"delta":{"node-LatLon":{"lon":-1098375702,"lat":415431381}}},{"delta":{"node-LatLon":{"lon":-1098453162,"lat":415429222}}},{"delta":{"node-LatLon":{"lon":-1098530622,"lat":415427098}}},{"delta":{"node-LatLon":{"lon":-1098607730,"lat":415424827}}},{"delta":{"node-LatLon":{"lon":-1098684499,"lat":415422667}}},{"delta":{"node-LatLon":{"lon":-1098761268,"lat":415420511}}},{"delta":{"node-LatLon":{"lon":-1098838221,"lat":415418364}}},{"delta":{"node-LatLon":{"lon":-1098914903,"lat":415422678}}},{"delta":{"node-LatLon":{"lon":-1098990040,"lat":415435886}}},{"delta":{"node-LatLon":{"lon":-1099066262,"lat":415444919}}},{"delta":{"node-LatLon":{"lon":-1099124034,"lat":415441676}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415560658,"long":-1095891000}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31205}},"msgCnt":16}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.1024175,"speed":24.02,"longitude":-105.0476341},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":53,"serialNumber":15482,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000C0531","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415436014,"long":-1099144153},"name":"eastbound_I80_66.17_83.01_SAT-C94BB8D8_RC_GRAI80ERSI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1099125634,"lat":415439288}}},{"delta":{"node-LatLon":{"lon":-1099068840,"lat":415442454}}},{"delta":{"node-LatLon":{"lon":-1098994159,"lat":415432068}}},{"delta":{"node-LatLon":{"lon":-1098919298,"lat":415418672}}},{"delta":{"node-LatLon":{"lon":-1098841848,"lat":415413814}}},{"delta":{"node-LatLon":{"lon":-1098764064,"lat":415415860}}},{"delta":{"node-LatLon":{"lon":-1098686825,"lat":415418104}}},{"delta":{"node-LatLon":{"lon":-1098609587,"lat":415420386}}},{"delta":{"node-LatLon":{"lon":-1098532251,"lat":415422458}}},{"delta":{"node-LatLon":{"lon":-1098454828,"lat":415424612}}},{"delta":{"node-LatLon":{"lon":-1098377407,"lat":415426813}}},{"delta":{"node-LatLon":{"lon":-1098298392,"lat":415427231}}},{"delta":{"node-LatLon":{"lon":-1098219367,"lat":415427018}}},{"delta":{"node-LatLon":{"lon":-1098142482,"lat":415426813}}},{"delta":{"node-LatLon":{"lon":-1098067736,"lat":415426561}}},{"delta":{"node-LatLon":{"lon":-1097992991,"lat":415426314}}},{"delta":{"node-LatLon":{"lon":-1097915737,"lat":415426054}}},{"delta":{"node-LatLon":{"lon":-1097838483,"lat":415425798}}},{"delta":{"node-LatLon":{"lon":-1097761247,"lat":415425574}}},{"delta":{"node-LatLon":{"lon":-1097684029,"lat":415425298}}},{"delta":{"node-LatLon":{"lon":-1097606811,"lat":415425006}}},{"delta":{"node-LatLon":{"lon":-1097529582,"lat":415424747}}},{"delta":{"node-LatLon":{"lon":-1097452354,"lat":415424479}}},{"delta":{"node-LatLon":{"lon":-1097375180,"lat":415424173}}},{"delta":{"node-LatLon":{"lon":-1097298061,"lat":415423892}}},{"delta":{"node-LatLon":{"lon":-1097220943,"lat":415423592}}},{"delta":{"node-LatLon":{"lon":-1097143863,"lat":415423302}}},{"delta":{"node-LatLon":{"lon":-1097066784,"lat":415423022}}},{"delta":{"node-LatLon":{"lon":-1096989920,"lat":415422730}}},{"delta":{"node-LatLon":{"lon":-1096913273,"lat":415422418}}},{"delta":{"node-LatLon":{"lon":-1096836626,"lat":415422122}}},{"delta":{"node-LatLon":{"lon":-1096759032,"lat":415422540}}},{"delta":{"node-LatLon":{"lon":-1096681595,"lat":415426454}}},{"delta":{"node-LatLon":{"lon":-1096604890,"lat":415430398}}},{"delta":{"node-LatLon":{"lon":-1096528903,"lat":415434233}}},{"delta":{"node-LatLon":{"lon":-1096452915,"lat":415438069}}},{"delta":{"node-LatLon":{"lon":-1096375022,"lat":415442012}}},{"delta":{"node-LatLon":{"lon":-1096297130,"lat":415445968}}},{"delta":{"node-LatLon":{"lon":-1096219868,"lat":415449865}}},{"delta":{"node-LatLon":{"lon":-1096143253,"lat":415453868}}},{"delta":{"node-LatLon":{"lon":-1096070093,"lat":415470372}}},{"delta":{"node-LatLon":{"lon":-1096006307,"lat":415503454}}},{"delta":{"node-LatLon":{"lon":-1095944191,"lat":415538433}}},{"delta":{"node-LatLon":{"lon":-1095892161,"lat":415557599}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415436014,"long":-1099144153}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":22}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.1024175,"speed":24.02,"longitude":-105.0476341},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":52,"serialNumber":15481,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31214,"packetID":"0000000000000B2F91","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413575987,"long":-1103362302},"name":"westbound_I80_30.4_39.9_SAT-81C57B76_RC_LYMI80WEVAND","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1103379413,"lat":413570507}}},{"delta":{"node-LatLon":{"lon":-1103396581,"lat":413565130}}},{"delta":{"node-LatLon":{"lon":-1103431966,"lat":413556590}}},{"delta":{"node-LatLon":{"lon":-1103468559,"lat":413551740}}},{"delta":{"node-LatLon":{"lon":-1103505682,"lat":413550496}}},{"delta":{"node-LatLon":{"lon":-1103542862,"lat":413550244}}},{"delta":{"node-LatLon":{"lon":-1103582724,"lat":413550041}}},{"delta":{"node-LatLon":{"lon":-1103622586,"lat":413549804}}},{"delta":{"node-LatLon":{"lon":-1103662427,"lat":413549039}}},{"delta":{"node-LatLon":{"lon":-1103701626,"lat":413543839}}},{"delta":{"node-LatLon":{"lon":-1103738811,"lat":413533136}}},{"delta":{"node-LatLon":{"lon":-1103772015,"lat":413518736}}},{"delta":{"node-LatLon":{"lon":-1103804719,"lat":413503676}}},{"delta":{"node-LatLon":{"lon":-1103837423,"lat":413488615}}},{"delta":{"node-LatLon":{"lon":-1103870139,"lat":413473571}}},{"delta":{"node-LatLon":{"lon":-1103902852,"lat":413458525}}},{"delta":{"node-LatLon":{"lon":-1103935453,"lat":413443497}}},{"delta":{"node-LatLon":{"lon":-1103968058,"lat":413428474}}},{"delta":{"node-LatLon":{"lon":-1104000677,"lat":413413470}}},{"delta":{"node-LatLon":{"lon":-1104033300,"lat":413398472}}},{"delta":{"node-LatLon":{"lon":-1104066139,"lat":413383747}}},{"delta":{"node-LatLon":{"lon":-1104099921,"lat":413369977}}},{"delta":{"node-LatLon":{"lon":-1104134521,"lat":413357416}}},{"delta":{"node-LatLon":{"lon":-1104169857,"lat":413346086}}},{"delta":{"node-LatLon":{"lon":-1104205824,"lat":413335944}}},{"delta":{"node-LatLon":{"lon":-1104242388,"lat":413327102}}},{"delta":{"node-LatLon":{"lon":-1104279634,"lat":413319406}}},{"delta":{"node-LatLon":{"lon":-1104317320,"lat":413313051}}},{"delta":{"node-LatLon":{"lon":-1104355343,"lat":413307943}}},{"delta":{"node-LatLon":{"lon":-1104393408,"lat":413303019}}},{"delta":{"node-LatLon":{"lon":-1104431463,"lat":413298050}}},{"delta":{"node-LatLon":{"lon":-1104469251,"lat":413293160}}},{"delta":{"node-LatLon":{"lon":-1104507032,"lat":413288242}}},{"delta":{"node-LatLon":{"lon":-1104544821,"lat":413283359}}},{"delta":{"node-LatLon":{"lon":-1104582614,"lat":413278496}}},{"delta":{"node-LatLon":{"lon":-1104620358,"lat":413273425}}},{"delta":{"node-LatLon":{"lon":-1104657693,"lat":413266409}}},{"delta":{"node-LatLon":{"lon":-1104694040,"lat":413256888}}},{"delta":{"node-LatLon":{"lon":-1104729409,"lat":413245439}}},{"delta":{"node-LatLon":{"lon":-1104764689,"lat":413233834}}},{"delta":{"node-LatLon":{"lon":-1104799973,"lat":413222237}}},{"delta":{"node-LatLon":{"lon":-1104835095,"lat":413210680}}},{"delta":{"node-LatLon":{"lon":-1104870213,"lat":413199116}}},{"delta":{"node-LatLon":{"lon":-1104905341,"lat":413187570}}},{"delta":{"node-LatLon":{"lon":-1104940464,"lat":413176017}}},{"delta":{"node-LatLon":{"lon":-1104975588,"lat":413164466}}},{"delta":{"node-LatLon":{"lon":-1105010940,"lat":413152841}}},{"delta":{"node-LatLon":{"lon":-1105046305,"lat":413141239}}},{"delta":{"node-LatLon":{"lon":-1105081636,"lat":413129581}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000110000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413575987,"long":-1103362302}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31214}},"msgCnt":16}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.1024133,"speed":24.02,"longitude":-105.0476621},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":51,"serialNumber":15480,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"00000000000008948B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413121024,"long":-1105099337},"name":"eastbound_I80_30.4_39.9_SAT-2B017F7E_RC_LYMI80WEVANI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1105081780,"lat":413126737}}},{"delta":{"node-LatLon":{"lon":-1105046721,"lat":413138259}}},{"delta":{"node-LatLon":{"lon":-1105011682,"lat":413149818}}},{"delta":{"node-LatLon":{"lon":-1104976636,"lat":413161366}}},{"delta":{"node-LatLon":{"lon":-1104941339,"lat":413172988}}},{"delta":{"node-LatLon":{"lon":-1104906045,"lat":413184616}}},{"delta":{"node-LatLon":{"lon":-1104870749,"lat":413196242}}},{"delta":{"node-LatLon":{"lon":-1104835431,"lat":413207831}}},{"delta":{"node-LatLon":{"lon":-1104800118,"lat":413219429}}},{"delta":{"node-LatLon":{"lon":-1104764982,"lat":413230978}}},{"delta":{"node-LatLon":{"lon":-1104729863,"lat":413242558}}},{"delta":{"node-LatLon":{"lon":-1104694662,"lat":413253995}}},{"delta":{"node-LatLon":{"lon":-1104658541,"lat":413263634}}},{"delta":{"node-LatLon":{"lon":-1104621387,"lat":413270688}}},{"delta":{"node-LatLon":{"lon":-1104583599,"lat":413275784}}},{"delta":{"node-LatLon":{"lon":-1104545768,"lat":413280701}}},{"delta":{"node-LatLon":{"lon":-1104507932,"lat":413285595}}},{"delta":{"node-LatLon":{"lon":-1104470107,"lat":413290537}}},{"delta":{"node-LatLon":{"lon":-1104432261,"lat":413295393}}},{"delta":{"node-LatLon":{"lon":-1104394348,"lat":413300372}}},{"delta":{"node-LatLon":{"lon":-1104356408,"lat":413305233}}},{"delta":{"node-LatLon":{"lon":-1104318509,"lat":413310273}}},{"delta":{"node-LatLon":{"lon":-1104280839,"lat":413316200}}},{"delta":{"node-LatLon":{"lon":-1104243586,"lat":413323475}}},{"delta":{"node-LatLon":{"lon":-1104206850,"lat":413331998}}},{"delta":{"node-LatLon":{"lon":-1104170685,"lat":413341807}}},{"delta":{"node-LatLon":{"lon":-1104135154,"lat":413352860}}},{"delta":{"node-LatLon":{"lon":-1104100355,"lat":413365166}}},{"delta":{"node-LatLon":{"lon":-1104066322,"lat":413378639}}},{"delta":{"node-LatLon":{"lon":-1104032685,"lat":413393491}}},{"delta":{"node-LatLon":{"lon":-1103999387,"lat":413408776}}},{"delta":{"node-LatLon":{"lon":-1103966118,"lat":413424098}}},{"delta":{"node-LatLon":{"lon":-1103932864,"lat":413439440}}},{"delta":{"node-LatLon":{"lon":-1103899565,"lat":413454727}}},{"delta":{"node-LatLon":{"lon":-1103867253,"lat":413469609}}},{"delta":{"node-LatLon":{"lon":-1103835035,"lat":413484430}}},{"delta":{"node-LatLon":{"lon":-1103802824,"lat":413499260}}},{"delta":{"node-LatLon":{"lon":-1103770586,"lat":413514056}}},{"delta":{"node-LatLon":{"lon":-1103738028,"lat":413528436}}},{"delta":{"node-LatLon":{"lon":-1103701332,"lat":413539215}}},{"delta":{"node-LatLon":{"lon":-1103662594,"lat":413544545}}},{"delta":{"node-LatLon":{"lon":-1103623171,"lat":413545277}}},{"delta":{"node-LatLon":{"lon":-1103583727,"lat":413545520}}},{"delta":{"node-LatLon":{"lon":-1103544283,"lat":413545768}}},{"delta":{"node-LatLon":{"lon":-1103506786,"lat":413545969}}},{"delta":{"node-LatLon":{"lon":-1103469334,"lat":413547162}}},{"delta":{"node-LatLon":{"lon":-1103432403,"lat":413551942}}},{"delta":{"node-LatLon":{"lon":-1103396637,"lat":413560362}}},{"delta":{"node-LatLon":{"lon":-1103379293,"lat":413565730}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413121024,"long":-1105099337}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":22}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023962,"speed":23.76,"longitude":-105.047774},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":47,"serialNumber":15476,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.453Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000B2362","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414323150,"long":-1101107194},"name":"eastbound_I80_53.31_66.17_SAT-19D61E53_RC_GRAI80WLYMI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1101089557,"lat":414329241}}},{"delta":{"node-LatLon":{"lon":-1101036650,"lat":414347521}}},{"delta":{"node-LatLon":{"lon":-1100968154,"lat":414374868}}},{"delta":{"node-LatLon":{"lon":-1100906030,"lat":414408931}}},{"delta":{"node-LatLon":{"lon":-1100844476,"lat":414443598}}},{"delta":{"node-LatLon":{"lon":-1100783084,"lat":414478183}}},{"delta":{"node-LatLon":{"lon":-1100721845,"lat":414512678}}},{"delta":{"node-LatLon":{"lon":-1100660589,"lat":414547159}}},{"delta":{"node-LatLon":{"lon":-1100598696,"lat":414582011}}},{"delta":{"node-LatLon":{"lon":-1100536824,"lat":414616882}}},{"delta":{"node-LatLon":{"lon":-1100472780,"lat":414652911}}},{"delta":{"node-LatLon":{"lon":-1100407893,"lat":414691351}}},{"delta":{"node-LatLon":{"lon":-1100352218,"lat":414737180}}},{"delta":{"node-LatLon":{"lon":-1100303788,"lat":414782434}}},{"delta":{"node-LatLon":{"lon":-1100255356,"lat":414827689}}},{"delta":{"node-LatLon":{"lon":-1100207264,"lat":414872624}}},{"delta":{"node-LatLon":{"lon":-1100156738,"lat":414915457}}},{"delta":{"node-LatLon":{"lon":-1100105308,"lat":414957699}}},{"delta":{"node-LatLon":{"lon":-1100048563,"lat":414996592}}},{"delta":{"node-LatLon":{"lon":-1099984833,"lat":415028931}}},{"delta":{"node-LatLon":{"lon":-1099920979,"lat":415061041}}},{"delta":{"node-LatLon":{"lon":-1099857029,"lat":415092941}}},{"delta":{"node-LatLon":{"lon":-1099792739,"lat":415124448}}},{"delta":{"node-LatLon":{"lon":-1099728759,"lat":415156288}}},{"delta":{"node-LatLon":{"lon":-1099664735,"lat":415188081}}},{"delta":{"node-LatLon":{"lon":-1099600327,"lat":415220093}}},{"delta":{"node-LatLon":{"lon":-1099535522,"lat":415252310}}},{"delta":{"node-LatLon":{"lon":-1099470701,"lat":415284512}}},{"delta":{"node-LatLon":{"lon":-1099406151,"lat":415316553}}},{"delta":{"node-LatLon":{"lon":-1099341572,"lat":415348565}}},{"delta":{"node-LatLon":{"lon":-1099277375,"lat":415380463}}},{"delta":{"node-LatLon":{"lon":-1099213464,"lat":415412136}}},{"delta":{"node-LatLon":{"lon":-1099144153,"lat":415436014}}},{"delta":{"node-LatLon":{"lon":-1099106846,"lat":415441537}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111000000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414323150,"long":-1101107194}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.1024133,"speed":24.02,"longitude":-105.0476621},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":50,"serialNumber":15479,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31214,"packetID":"0000000000000A659A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414344751,"long":-1101051424},"name":"westbound_I80_39.9_53.31_SAT-08844513_RC_LYMI80EGRAD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1101068786,"lat":414338729}}},{"delta":{"node-LatLon":{"lon":-1101103554,"lat":414326761}}},{"delta":{"node-LatLon":{"lon":-1101173821,"lat":414302516}}},{"delta":{"node-LatLon":{"lon":-1101244744,"lat":414277845}}},{"delta":{"node-LatLon":{"lon":-1101310950,"lat":414246773}}},{"delta":{"node-LatLon":{"lon":-1101362064,"lat":414212123}}},{"delta":{"node-LatLon":{"lon":-1101407558,"lat":414173212}}},{"delta":{"node-LatLon":{"lon":-1101456142,"lat":414132500}}},{"delta":{"node-LatLon":{"lon":-1101515051,"lat":414095801}}},{"delta":{"node-LatLon":{"lon":-1101578308,"lat":414063326}}},{"delta":{"node-LatLon":{"lon":-1101641229,"lat":414030925}}},{"delta":{"node-LatLon":{"lon":-1101704290,"lat":413998477}}},{"delta":{"node-LatLon":{"lon":-1101767097,"lat":413966110}}},{"delta":{"node-LatLon":{"lon":-1101831402,"lat":413935792}}},{"delta":{"node-LatLon":{"lon":-1101901550,"lat":413914120}}},{"delta":{"node-LatLon":{"lon":-1101976786,"lat":413898894}}},{"delta":{"node-LatLon":{"lon":-1102052080,"lat":413883827}}},{"delta":{"node-LatLon":{"lon":-1102126907,"lat":413868839}}},{"delta":{"node-LatLon":{"lon":-1102200439,"lat":413851903}}},{"delta":{"node-LatLon":{"lon":-1102269103,"lat":413825929}}},{"delta":{"node-LatLon":{"lon":-1102332567,"lat":413793094}}},{"delta":{"node-LatLon":{"lon":-1102398732,"lat":413763591}}},{"delta":{"node-LatLon":{"lon":-1102470298,"lat":413743958}}},{"delta":{"node-LatLon":{"lon":-1102543982,"lat":413731406}}},{"delta":{"node-LatLon":{"lon":-1102617848,"lat":413719488}}},{"delta":{"node-LatLon":{"lon":-1102692470,"lat":413710650}}},{"delta":{"node-LatLon":{"lon":-1102767178,"lat":413702215}}},{"delta":{"node-LatLon":{"lon":-1102843114,"lat":413693602}}},{"delta":{"node-LatLon":{"lon":-1102920289,"lat":413684874}}},{"delta":{"node-LatLon":{"lon":-1102996200,"lat":413671478}}},{"delta":{"node-LatLon":{"lon":-1103069136,"lat":413655627}}},{"delta":{"node-LatLon":{"lon":-1103142026,"lat":413639808}}},{"delta":{"node-LatLon":{"lon":-1103216030,"lat":413622306}}},{"delta":{"node-LatLon":{"lon":-1103289209,"lat":413599223}}},{"delta":{"node-LatLon":{"lon":-1103362302,"lat":413575987}}},{"delta":{"node-LatLon":{"lon":-1103379413,"lat":413570507}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001110000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414344751,"long":-1101051424}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31214}},"msgCnt":23}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.102409,"speed":24.02,"longitude":-105.0476902},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":49,"serialNumber":15478,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.553Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"000000000000019B21","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413560362,"long":-1103396637},"name":"eastbound_I80_39.9_53.31_SAT-A835ACAE_RC_LYMI80EGRAI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1103379293,"lat":413565730}}},{"delta":{"node-LatLon":{"lon":-1103362018,"lat":413571225}}},{"delta":{"node-LatLon":{"lon":-1103289477,"lat":413594336}}},{"delta":{"node-LatLon":{"lon":-1103216886,"lat":413617361}}},{"delta":{"node-LatLon":{"lon":-1103144075,"lat":413634764}}},{"delta":{"node-LatLon":{"lon":-1103072890,"lat":413650240}}},{"delta":{"node-LatLon":{"lon":-1103001562,"lat":413665711}}},{"delta":{"node-LatLon":{"lon":-1102924478,"lat":413679917}}},{"delta":{"node-LatLon":{"lon":-1102845931,"lat":413688783}}},{"delta":{"node-LatLon":{"lon":-1102769203,"lat":413697491}}},{"delta":{"node-LatLon":{"lon":-1102694282,"lat":413705973}}},{"delta":{"node-LatLon":{"lon":-1102619427,"lat":413714771}}},{"delta":{"node-LatLon":{"lon":-1102543987,"lat":413726889}}},{"delta":{"node-LatLon":{"lon":-1102468757,"lat":413739737}}},{"delta":{"node-LatLon":{"lon":-1102396564,"lat":413759508}}},{"delta":{"node-LatLon":{"lon":-1102330529,"lat":413788757}}},{"delta":{"node-LatLon":{"lon":-1102267374,"lat":413821547}}},{"delta":{"node-LatLon":{"lon":-1102198471,"lat":413847770}}},{"delta":{"node-LatLon":{"lon":-1102124566,"lat":413864728}}},{"delta":{"node-LatLon":{"lon":-1102050308,"lat":413879597}}},{"delta":{"node-LatLon":{"lon":-1101976512,"lat":413894383}}},{"delta":{"node-LatLon":{"lon":-1101902756,"lat":413909284}}},{"delta":{"node-LatLon":{"lon":-1101831568,"lat":413930764}}},{"delta":{"node-LatLon":{"lon":-1101766297,"lat":413961147}}},{"delta":{"node-LatLon":{"lon":-1101702710,"lat":413993844}}},{"delta":{"node-LatLon":{"lon":-1101638962,"lat":414026618}}},{"delta":{"node-LatLon":{"lon":-1101574959,"lat":414059103}}},{"delta":{"node-LatLon":{"lon":-1101503795,"lat":414079486}}},{"delta":{"node-LatLon":{"lon":-1101430050,"lat":414094635}}},{"delta":{"node-LatLon":{"lon":-1101364010,"lat":414123142}}},{"delta":{"node-LatLon":{"lon":-1101315879,"lat":414167652}}},{"delta":{"node-LatLon":{"lon":-1101285137,"lat":414220512}}},{"delta":{"node-LatLon":{"lon":-1101240865,"lat":414267227}}},{"delta":{"node-LatLon":{"lon":-1101177309,"lat":414298942}}},{"delta":{"node-LatLon":{"lon":-1101107194,"lat":414323150}}},{"delta":{"node-LatLon":{"lon":-1101071949,"lat":414335378}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111000000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413560362,"long":-1103396637}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1024004,"speed":23.76,"longitude":-105.0477462},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":48,"serialNumber":15477,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.453Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31329,"packetID":"0000000000000D30E2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415444795,"long":-1099085600},"name":"westbound_I80_53.31_66.17_SAT-4E185B11_RC_GRAI80WLYMD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1099104884,"lat":415443688}}},{"delta":{"node-LatLon":{"lon":-1099142907,"lat":415438499}}},{"delta":{"node-LatLon":{"lon":-1099213633,"lat":415416960}}},{"delta":{"node-LatLon":{"lon":-1099277798,"lat":415385610}}},{"delta":{"node-LatLon":{"lon":-1099341920,"lat":415353771}}},{"delta":{"node-LatLon":{"lon":-1099406318,"lat":415321821}}},{"delta":{"node-LatLon":{"lon":-1099470693,"lat":415289849}}},{"delta":{"node-LatLon":{"lon":-1099535924,"lat":415257482}}},{"delta":{"node-LatLon":{"lon":-1099601115,"lat":415225072}}},{"delta":{"node-LatLon":{"lon":-1099665873,"lat":415192909}}},{"delta":{"node-LatLon":{"lon":-1099730154,"lat":415160943}}},{"delta":{"node-LatLon":{"lon":-1099794423,"lat":415128966}}},{"delta":{"node-LatLon":{"lon":-1099858611,"lat":415097082}}},{"delta":{"node-LatLon":{"lon":-1099922767,"lat":415065163}}},{"delta":{"node-LatLon":{"lon":-1099986894,"lat":415033282}}},{"delta":{"node-LatLon":{"lon":-1100050552,"lat":415000958}}},{"delta":{"node-LatLon":{"lon":-1100107537,"lat":414962342}}},{"delta":{"node-LatLon":{"lon":-1100159317,"lat":414919942}}},{"delta":{"node-LatLon":{"lon":-1100210275,"lat":414877000}}},{"delta":{"node-LatLon":{"lon":-1100258455,"lat":414831964}}},{"delta":{"node-LatLon":{"lon":-1100306816,"lat":414786740}}},{"delta":{"node-LatLon":{"lon":-1100355125,"lat":414741487}}},{"delta":{"node-LatLon":{"lon":-1100406269,"lat":414698457}}},{"delta":{"node-LatLon":{"lon":-1100466077,"lat":414662270}}},{"delta":{"node-LatLon":{"lon":-1100529550,"lat":414626554}}},{"delta":{"node-LatLon":{"lon":-1100594995,"lat":414589736}}},{"delta":{"node-LatLon":{"lon":-1100660445,"lat":414552926}}},{"delta":{"node-LatLon":{"lon":-1100720966,"lat":414518811}}},{"delta":{"node-LatLon":{"lon":-1100781507,"lat":414484719}}},{"delta":{"node-LatLon":{"lon":-1100843008,"lat":414450048}}},{"delta":{"node-LatLon":{"lon":-1100905513,"lat":414414842}}},{"delta":{"node-LatLon":{"lon":-1100968090,"lat":414379712}}},{"delta":{"node-LatLon":{"lon":-1101034065,"lat":414350776}}},{"delta":{"node-LatLon":{"lon":-1101086165,"lat":414332737}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001110000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415444795,"long":-1099085600}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31329}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023962,"speed":23.76,"longitude":-105.047774},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":46,"serialNumber":15475,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000AA646","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413135480,"long":-1105064011},"name":"westbound_I80_18.29_30.4_SAT-4E8C2D1C_RC_EVANI80ELYM2D","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1105081636,"lat":413129581}}},{"delta":{"node-LatLon":{"lon":-1105152429,"lat":413106493}}},{"delta":{"node-LatLon":{"lon":-1105222681,"lat":413083154}}},{"delta":{"node-LatLon":{"lon":-1105293041,"lat":413060007}}},{"delta":{"node-LatLon":{"lon":-1105365675,"lat":413036053}}},{"delta":{"node-LatLon":{"lon":-1105440576,"lat":413011281}}},{"delta":{"node-LatLon":{"lon":-1105515498,"lat":412986550}}},{"delta":{"node-LatLon":{"lon":-1105587007,"lat":412974643}}},{"delta":{"node-LatLon":{"lon":-1105660608,"lat":412975574}}},{"delta":{"node-LatLon":{"lon":-1105734210,"lat":412976799}}},{"delta":{"node-LatLon":{"lon":-1105807811,"lat":412978023}}},{"delta":{"node-LatLon":{"lon":-1105881411,"lat":412979276}}},{"delta":{"node-LatLon":{"lon":-1105958106,"lat":412980598}}},{"delta":{"node-LatLon":{"lon":-1106034803,"lat":412981835}}},{"delta":{"node-LatLon":{"lon":-1106111006,"lat":412983091}}},{"delta":{"node-LatLon":{"lon":-1106186716,"lat":412984304}}},{"delta":{"node-LatLon":{"lon":-1106262425,"lat":412985553}}},{"delta":{"node-LatLon":{"lon":-1106340719,"lat":412986812}}},{"delta":{"node-LatLon":{"lon":-1106419013,"lat":412988052}}},{"delta":{"node-LatLon":{"lon":-1106496051,"lat":412989281}}},{"delta":{"node-LatLon":{"lon":-1106571818,"lat":412990824}}},{"delta":{"node-LatLon":{"lon":-1106647599,"lat":412992029}}},{"delta":{"node-LatLon":{"lon":-1106726085,"lat":412993268}}},{"delta":{"node-LatLon":{"lon":-1106803345,"lat":412986953}}},{"delta":{"node-LatLon":{"lon":-1106867780,"lat":412955347}}},{"delta":{"node-LatLon":{"lon":-1106940824,"lat":412955290}}},{"delta":{"node-LatLon":{"lon":-1107004030,"lat":412986369}}},{"delta":{"node-LatLon":{"lon":-1107075211,"lat":413008691}}},{"delta":{"node-LatLon":{"lon":-1107146451,"lat":413030911}}},{"delta":{"node-LatLon":{"lon":-1107217304,"lat":413052985}}},{"delta":{"node-LatLon":{"lon":-1107287759,"lat":413074934}}},{"delta":{"node-LatLon":{"lon":-1107323024,"lat":413085837}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413135480,"long":-1105064011}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":12}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023962,"speed":23.76,"longitude":-105.047774},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":45,"serialNumber":15474,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"000000000000103B16","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413088220,"long":-1107346769},"name":"eastbound_I80_18.29_30.4_SAT-1BB0E1D9_RC_EVANI80ELYM2I","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1107327853,"lat":413085207}}},{"delta":{"node-LatLon":{"lon":-1107291892,"lat":413074355}}},{"delta":{"node-LatLon":{"lon":-1107220291,"lat":413052030}}},{"delta":{"node-LatLon":{"lon":-1107148980,"lat":413029795}}},{"delta":{"node-LatLon":{"lon":-1107078119,"lat":413007369}}},{"delta":{"node-LatLon":{"lon":-1107007132,"lat":412985172}}},{"delta":{"node-LatLon":{"lon":-1106941741,"lat":412953720}}},{"delta":{"node-LatLon":{"lon":-1106866866,"lat":412953036}}},{"delta":{"node-LatLon":{"lon":-1106802203,"lat":412985015}}},{"delta":{"node-LatLon":{"lon":-1106726168,"lat":412991195}}},{"delta":{"node-LatLon":{"lon":-1106648917,"lat":412989976}}},{"delta":{"node-LatLon":{"lon":-1106573197,"lat":412988796}}},{"delta":{"node-LatLon":{"lon":-1106497477,"lat":412987600}}},{"delta":{"node-LatLon":{"lon":-1106420644,"lat":412986371}}},{"delta":{"node-LatLon":{"lon":-1106342697,"lat":412985100}}},{"delta":{"node-LatLon":{"lon":-1106264749,"lat":412983842}}},{"delta":{"node-LatLon":{"lon":-1106189077,"lat":412982627}}},{"delta":{"node-LatLon":{"lon":-1106113405,"lat":412981388}}},{"delta":{"node-LatLon":{"lon":-1106037230,"lat":412980142}}},{"delta":{"node-LatLon":{"lon":-1105960566,"lat":412978554}}},{"delta":{"node-LatLon":{"lon":-1105883887,"lat":412977263}}},{"delta":{"node-LatLon":{"lon":-1105807259,"lat":412976192}}},{"delta":{"node-LatLon":{"lon":-1105730649,"lat":412974694}}},{"delta":{"node-LatLon":{"lon":-1105656816,"lat":412973443}}},{"delta":{"node-LatLon":{"lon":-1105585775,"lat":412972496}}},{"delta":{"node-LatLon":{"lon":-1105516502,"lat":412983227}}},{"delta":{"node-LatLon":{"lon":-1105441920,"lat":413008048}}},{"delta":{"node-LatLon":{"lon":-1105367237,"lat":413032710}}},{"delta":{"node-LatLon":{"lon":-1105294291,"lat":413056763}}},{"delta":{"node-LatLon":{"lon":-1105223123,"lat":413080276}}},{"delta":{"node-LatLon":{"lon":-1105151956,"lat":413103795}}},{"delta":{"node-LatLon":{"lon":-1105081780,"lat":413126737}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413088220,"long":-1107346769}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023962,"speed":23.76,"longitude":-105.047774},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":44,"serialNumber":15473,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000E3CF2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413074934,"long":-1107287759},"name":"westbound_I80_6.26_18.29_SAT-6167B0AE_RC_EVANI80ELYMD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1107305366,"lat":413080434}}},{"delta":{"node-LatLon":{"lon":-1107360431,"lat":413090250}}},{"delta":{"node-LatLon":{"lon":-1107435889,"lat":413072542}}},{"delta":{"node-LatLon":{"lon":-1107510137,"lat":413051412}}},{"delta":{"node-LatLon":{"lon":-1107583237,"lat":413030611}}},{"delta":{"node-LatLon":{"lon":-1107651303,"lat":413004057}}},{"delta":{"node-LatLon":{"lon":-1107715511,"lat":412972132}}},{"delta":{"node-LatLon":{"lon":-1107779433,"lat":412939683}}},{"delta":{"node-LatLon":{"lon":-1107834761,"lat":412899298}}},{"delta":{"node-LatLon":{"lon":-1107888585,"lat":412858118}}},{"delta":{"node-LatLon":{"lon":-1107942218,"lat":412817220}}},{"delta":{"node-LatLon":{"lon":-1107995791,"lat":412776279}}},{"delta":{"node-LatLon":{"lon":-1108052203,"lat":412738880}}},{"delta":{"node-LatLon":{"lon":-1108125567,"lat":412730945}}},{"delta":{"node-LatLon":{"lon":-1108200890,"lat":412730979}}},{"delta":{"node-LatLon":{"lon":-1108269016,"lat":412705671}}},{"delta":{"node-LatLon":{"lon":-1108336945,"lat":412680037}}},{"delta":{"node-LatLon":{"lon":-1108412418,"lat":412681664}}},{"delta":{"node-LatLon":{"lon":-1108481367,"lat":412706514}}},{"delta":{"node-LatLon":{"lon":-1108552780,"lat":412726456}}},{"delta":{"node-LatLon":{"lon":-1108625458,"lat":412710792}}},{"delta":{"node-LatLon":{"lon":-1108688492,"lat":412677244}}},{"delta":{"node-LatLon":{"lon":-1108755794,"lat":412649329}}},{"delta":{"node-LatLon":{"lon":-1108828743,"lat":412631226}}},{"delta":{"node-LatLon":{"lon":-1108904794,"lat":412623516}}},{"delta":{"node-LatLon":{"lon":-1108981375,"lat":412626474}}},{"delta":{"node-LatLon":{"lon":-1109056338,"lat":412638897}}},{"delta":{"node-LatLon":{"lon":-1109130675,"lat":412652858}}},{"delta":{"node-LatLon":{"lon":-1109205469,"lat":412665291}}},{"delta":{"node-LatLon":{"lon":-1109280079,"lat":412673471}}},{"delta":{"node-LatLon":{"lon":-1109353719,"lat":412680146}}},{"delta":{"node-LatLon":{"lon":-1109390798,"lat":412680579}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413074934,"long":-1107287759}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":12}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023921,"speed":23.64,"longitude":-105.0478016},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":43,"serialNumber":15472,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"000000000000085B12","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412678295,"long":-1109403156},"name":"eastbound_I80_6.26_18.29_SAT-5481DCC7_RC_EVANI80ELYMI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1109383397,"lat":412678737}}},{"delta":{"node-LatLon":{"lon":-1109363631,"lat":412678500}}},{"delta":{"node-LatLon":{"lon":-1109285083,"lat":412671839}}},{"delta":{"node-LatLon":{"lon":-1109208218,"lat":412662718}}},{"delta":{"node-LatLon":{"lon":-1109133790,"lat":412649197}}},{"delta":{"node-LatLon":{"lon":-1109059500,"lat":412635242}}},{"delta":{"node-LatLon":{"lon":-1108983731,"lat":412622770}}},{"delta":{"node-LatLon":{"lon":-1108906400,"lat":412619640}}},{"delta":{"node-LatLon":{"lon":-1108829878,"lat":412627699}}},{"delta":{"node-LatLon":{"lon":-1108756816,"lat":412646172}}},{"delta":{"node-LatLon":{"lon":-1108689511,"lat":412674500}}},{"delta":{"node-LatLon":{"lon":-1108627647,"lat":412707502}}},{"delta":{"node-LatLon":{"lon":-1108557015,"lat":412724866}}},{"delta":{"node-LatLon":{"lon":-1108485391,"lat":412706101}}},{"delta":{"node-LatLon":{"lon":-1108415692,"lat":412680645}}},{"delta":{"node-LatLon":{"lon":-1108339283,"lat":412677822}}},{"delta":{"node-LatLon":{"lon":-1108270801,"lat":412702792}}},{"delta":{"node-LatLon":{"lon":-1108202724,"lat":412728468}}},{"delta":{"node-LatLon":{"lon":-1108127111,"lat":412729008}}},{"delta":{"node-LatLon":{"lon":-1108052987,"lat":412735898}}},{"delta":{"node-LatLon":{"lon":-1107995597,"lat":412772983}}},{"delta":{"node-LatLon":{"lon":-1107941620,"lat":412814258}}},{"delta":{"node-LatLon":{"lon":-1107887900,"lat":412855724}}},{"delta":{"node-LatLon":{"lon":-1107834045,"lat":412896917}}},{"delta":{"node-LatLon":{"lon":-1107779426,"lat":412937317}}},{"delta":{"node-LatLon":{"lon":-1107716124,"lat":412969726}}},{"delta":{"node-LatLon":{"lon":-1107651938,"lat":413001633}}},{"delta":{"node-LatLon":{"lon":-1107584096,"lat":413028452}}},{"delta":{"node-LatLon":{"lon":-1107511903,"lat":413049025}}},{"delta":{"node-LatLon":{"lon":-1107439402,"lat":413069631}}},{"delta":{"node-LatLon":{"lon":-1107366103,"lat":413088130}}},{"delta":{"node-LatLon":{"lon":-1107309808,"lat":413079907}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412678295,"long":-1109403156}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023921,"speed":23.64,"longitude":-105.0478016},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":42,"serialNumber":15471,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31461,"packetID":"00000000000002B464","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412378541,"long":-1054372542},"name":"westbound_I80_317.45_323.05_SAT-DBAB5858_RC_LARI80ECHEYD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054376265,"lat":412392751}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}},{"delta":{"node-LatLon":{"lon":-1054388532,"lat":412420113}}},{"delta":{"node-LatLon":{"lon":-1054396624,"lat":412433185}}},{"delta":{"node-LatLon":{"lon":-1054404781,"lat":412446234}}},{"delta":{"node-LatLon":{"lon":-1054412998,"lat":412459262}}},{"delta":{"node-LatLon":{"lon":-1054421149,"lat":412472313}}},{"delta":{"node-LatLon":{"lon":-1054429340,"lat":412485351}}},{"delta":{"node-LatLon":{"lon":-1054437555,"lat":412498379}}},{"delta":{"node-LatLon":{"lon":-1054445744,"lat":412511417}}},{"delta":{"node-LatLon":{"lon":-1054453974,"lat":412524441}}},{"delta":{"node-LatLon":{"lon":-1054463289,"lat":412537025}}},{"delta":{"node-LatLon":{"lon":-1054475122,"lat":412548474}}},{"delta":{"node-LatLon":{"lon":-1054489160,"lat":412558405}}},{"delta":{"node-LatLon":{"lon":-1054504069,"lat":412567600}}},{"delta":{"node-LatLon":{"lon":-1054519000,"lat":412576776}}},{"delta":{"node-LatLon":{"lon":-1054533896,"lat":412585985}}},{"delta":{"node-LatLon":{"lon":-1054548833,"lat":412595156}}},{"delta":{"node-LatLon":{"lon":-1054563820,"lat":412604280}}},{"delta":{"node-LatLon":{"lon":-1054579779,"lat":412612388}}},{"delta":{"node-LatLon":{"lon":-1054597055,"lat":412618777}}},{"delta":{"node-LatLon":{"lon":-1054615114,"lat":412623812}}},{"delta":{"node-LatLon":{"lon":-1054632271,"lat":412629637}}},{"delta":{"node-LatLon":{"lon":-1054647306,"lat":412638180}}},{"delta":{"node-LatLon":{"lon":-1054662004,"lat":412647078}}},{"delta":{"node-LatLon":{"lon":-1054678467,"lat":412653902}}},{"delta":{"node-LatLon":{"lon":-1054696868,"lat":412656761}}},{"delta":{"node-LatLon":{"lon":-1054715678,"lat":412657581}}},{"delta":{"node-LatLon":{"lon":-1054734355,"lat":412659287}}},{"delta":{"node-LatLon":{"lon":-1054751683,"lat":412664718}}},{"delta":{"node-LatLon":{"lon":-1054765976,"lat":412673917}}},{"delta":{"node-LatLon":{"lon":-1054778503,"lat":412684544}}},{"delta":{"node-LatLon":{"lon":-1054791379,"lat":412695492}}},{"delta":{"node-LatLon":{"lon":-1054804278,"lat":412706425}}},{"delta":{"node-LatLon":{"lon":-1054818479,"lat":412716349}}},{"delta":{"node-LatLon":{"lon":-1054835859,"lat":412722690}}},{"delta":{"node-LatLon":{"lon":-1054854996,"lat":412724695}}},{"delta":{"node-LatLon":{"lon":-1054874196,"lat":412722759}}},{"delta":{"node-LatLon":{"lon":-1054893260,"lat":412720064}}},{"delta":{"node-LatLon":{"lon":-1054912492,"lat":412718274}}},{"delta":{"node-LatLon":{"lon":-1054931875,"lat":412718613}}},{"delta":{"node-LatLon":{"lon":-1054951253,"lat":412719209}}},{"delta":{"node-LatLon":{"lon":-1054969662,"lat":412719789}}},{"delta":{"node-LatLon":{"lon":-1054987987,"lat":412721117}}},{"delta":{"node-LatLon":{"lon":-1055005745,"lat":412724757}}},{"delta":{"node-LatLon":{"lon":-1055022420,"lat":412730636}}},{"delta":{"node-LatLon":{"lon":-1055038524,"lat":412737393}}},{"delta":{"node-LatLon":{"lon":-1055054603,"lat":412744185}}},{"delta":{"node-LatLon":{"lon":-1055070731,"lat":412750911}}},{"delta":{"node-LatLon":{"lon":-1055086830,"lat":412757675}}},{"delta":{"node-LatLon":{"lon":-1055102919,"lat":412764454}}},{"delta":{"node-LatLon":{"lon":-1055119050,"lat":412771172}}},{"delta":{"node-LatLon":{"lon":-1055134655,"lat":412779343}}},{"delta":{"node-LatLon":{"lon":-1055148584,"lat":412789095}}},{"delta":{"node-LatLon":{"lon":-1055160661,"lat":412800171}}},{"delta":{"node-LatLon":{"lon":-1055171718,"lat":412811853}}},{"delta":{"node-LatLon":{"lon":-1055182800,"lat":412823521}}},{"delta":{"node-LatLon":{"lon":-1055193934,"lat":412835162}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011111"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412378541,"long":-1054372542}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31461}},"msgCnt":12}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023878,"speed":23.64,"longitude":-105.0478293},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":41,"serialNumber":15470,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.052Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31461,"packetID":"0000000000000939DD","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412846200,"long":-1055207674},"name":"eastbound_I80_317.45_323.05_SAT-85B2D861_RC_LARI80ECHEYI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055196465,"lat":412834401}}},{"delta":{"node-LatLon":{"lon":-1055185238,"lat":412822611}}},{"delta":{"node-LatLon":{"lon":-1055174028,"lat":412810812}}},{"delta":{"node-LatLon":{"lon":-1055162838,"lat":412799002}}},{"delta":{"node-LatLon":{"lon":-1055151564,"lat":412787238}}},{"delta":{"node-LatLon":{"lon":-1055139485,"lat":412775945}}},{"delta":{"node-LatLon":{"lon":-1055126153,"lat":412765484}}},{"delta":{"node-LatLon":{"lon":-1055111710,"lat":412756134}}},{"delta":{"node-LatLon":{"lon":-1055096204,"lat":412747808}}},{"delta":{"node-LatLon":{"lon":-1055080126,"lat":412740115}}},{"delta":{"node-LatLon":{"lon":-1055063926,"lat":412732570}}},{"delta":{"node-LatLon":{"lon":-1055046853,"lat":412726244}}},{"delta":{"node-LatLon":{"lon":-1055028777,"lat":412721773}}},{"delta":{"node-LatLon":{"lon":-1055009981,"lat":412719587}}},{"delta":{"node-LatLon":{"lon":-1054990989,"lat":412718648}}},{"delta":{"node-LatLon":{"lon":-1054972006,"lat":412717639}}},{"delta":{"node-LatLon":{"lon":-1054953009,"lat":412716759}}},{"delta":{"node-LatLon":{"lon":-1054934016,"lat":412716179}}},{"delta":{"node-LatLon":{"lon":-1054915016,"lat":412715870}}},{"delta":{"node-LatLon":{"lon":-1054896123,"lat":412717322}}},{"delta":{"node-LatLon":{"lon":-1054877421,"lat":412719892}}},{"delta":{"node-LatLon":{"lon":-1054858665,"lat":412722173}}},{"delta":{"node-LatLon":{"lon":-1054839790,"lat":412721101}}},{"delta":{"node-LatLon":{"lon":-1054822378,"lat":412715508}}},{"delta":{"node-LatLon":{"lon":-1054808075,"lat":412706122}}},{"delta":{"node-LatLon":{"lon":-1054795466,"lat":412695384}}},{"delta":{"node-LatLon":{"lon":-1054782861,"lat":412684644}}},{"delta":{"node-LatLon":{"lon":-1054770097,"lat":412673836}}},{"delta":{"node-LatLon":{"lon":-1054756003,"lat":412664064}}},{"delta":{"node-LatLon":{"lon":-1054738855,"lat":412657720}}},{"delta":{"node-LatLon":{"lon":-1054719971,"lat":412655405}}},{"delta":{"node-LatLon":{"lon":-1054700821,"lat":412654615}}},{"delta":{"node-LatLon":{"lon":-1054681944,"lat":412652284}}},{"delta":{"node-LatLon":{"lon":-1054664843,"lat":412645844}}},{"delta":{"node-LatLon":{"lon":-1054649671,"lat":412637001}}},{"delta":{"node-LatLon":{"lon":-1054634409,"lat":412628251}}},{"delta":{"node-LatLon":{"lon":-1054617259,"lat":412621852}}},{"delta":{"node-LatLon":{"lon":-1054599367,"lat":412616899}}},{"delta":{"node-LatLon":{"lon":-1054582192,"lat":412610689}}},{"delta":{"node-LatLon":{"lon":-1054566302,"lat":412602767}}},{"delta":{"node-LatLon":{"lon":-1054551500,"lat":412593707}}},{"delta":{"node-LatLon":{"lon":-1054536736,"lat":412584610}}},{"delta":{"node-LatLon":{"lon":-1054521939,"lat":412575543}}},{"delta":{"node-LatLon":{"lon":-1054507197,"lat":412566427}}},{"delta":{"node-LatLon":{"lon":-1054492428,"lat":412557334}}},{"delta":{"node-LatLon":{"lon":-1054478373,"lat":412547636}}},{"delta":{"node-LatLon":{"lon":-1054466482,"lat":412536415}}},{"delta":{"node-LatLon":{"lon":-1054457123,"lat":412523979}}},{"delta":{"node-LatLon":{"lon":-1054448979,"lat":412511051}}},{"delta":{"node-LatLon":{"lon":-1054440857,"lat":412498114}}},{"delta":{"node-LatLon":{"lon":-1054432727,"lat":412485180}}},{"delta":{"node-LatLon":{"lon":-1054424622,"lat":412472238}}},{"delta":{"node-LatLon":{"lon":-1054416471,"lat":412459312}}},{"delta":{"node-LatLon":{"lon":-1054408332,"lat":412446382}}},{"delta":{"node-LatLon":{"lon":-1054400231,"lat":412433438}}},{"delta":{"node-LatLon":{"lon":-1054392109,"lat":412420501}}},{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054379237,"lat":412393551}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412846200,"long":-1055207674}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31461}},"msgCnt":12}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6625,"latitude":41.1023793,"speed":23.56,"longitude":-105.0478845},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":40,"serialNumber":15469,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.052Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31306,"packetID":"0000000000000936E7","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417414634,"long":-1068269969},"name":"westbound_I80_221.2_235.23_SAT-09D8678A_RC_RAWI80ELARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1068289321,"lat":417415359}}},{"delta":{"node-LatLon":{"lon":-1068308673,"lat":417416093}}},{"delta":{"node-LatLon":{"lon":-1068385974,"lat":417418859}}},{"delta":{"node-LatLon":{"lon":-1068463156,"lat":417421689}}},{"delta":{"node-LatLon":{"lon":-1068540338,"lat":417424515}}},{"delta":{"node-LatLon":{"lon":-1068617852,"lat":417427395}}},{"delta":{"node-LatLon":{"lon":-1068695369,"lat":417430231}}},{"delta":{"node-LatLon":{"lon":-1068772890,"lat":417433050}}},{"delta":{"node-LatLon":{"lon":-1068850417,"lat":417435830}}},{"delta":{"node-LatLon":{"lon":-1068927943,"lat":417438632}}},{"delta":{"node-LatLon":{"lon":-1069005025,"lat":417441424}}},{"delta":{"node-LatLon":{"lon":-1069082106,"lat":417444219}}},{"delta":{"node-LatLon":{"lon":-1069159408,"lat":417446974}}},{"delta":{"node-LatLon":{"lon":-1069236759,"lat":417451306}}},{"delta":{"node-LatLon":{"lon":-1069312011,"lat":417465173}}},{"delta":{"node-LatLon":{"lon":-1069385103,"lat":417484568}}},{"delta":{"node-LatLon":{"lon":-1069458135,"lat":417504094}}},{"delta":{"node-LatLon":{"lon":-1069530060,"lat":417523167}}},{"delta":{"node-LatLon":{"lon":-1069600849,"lat":417541844}}},{"delta":{"node-LatLon":{"lon":-1069673525,"lat":417555795}}},{"delta":{"node-LatLon":{"lon":-1069748966,"lat":417568966}}},{"delta":{"node-LatLon":{"lon":-1069824418,"lat":417582109}}},{"delta":{"node-LatLon":{"lon":-1069899351,"lat":417595155}}},{"delta":{"node-LatLon":{"lon":-1069973766,"lat":417608100}}},{"delta":{"node-LatLon":{"lon":-1070048170,"lat":417621086}}},{"delta":{"node-LatLon":{"lon":-1070123773,"lat":417634264}}},{"delta":{"node-LatLon":{"lon":-1070199399,"lat":417647374}}},{"delta":{"node-LatLon":{"lon":-1070274965,"lat":417660512}}},{"delta":{"node-LatLon":{"lon":-1070350472,"lat":417673678}}},{"delta":{"node-LatLon":{"lon":-1070425989,"lat":417686813}}},{"delta":{"node-LatLon":{"lon":-1070501711,"lat":417699947}}},{"delta":{"node-LatLon":{"lon":-1070577425,"lat":417713109}}},{"delta":{"node-LatLon":{"lon":-1070653637,"lat":417726293}}},{"delta":{"node-LatLon":{"lon":-1070730992,"lat":417736504}}},{"delta":{"node-LatLon":{"lon":-1070808409,"lat":417727589}}},{"delta":{"node-LatLon":{"lon":-1070884161,"lat":417718392}}},{"delta":{"node-LatLon":{"lon":-1070959940,"lat":417729715}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417414634,"long":-1068269969}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31306}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6625,"latitude":41.1023793,"speed":23.56,"longitude":-105.0478845},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":39,"serialNumber":15468,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31306,"packetID":"00000000000009698C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417730521,"long":-1070980675},"name":"eastbound_I80_221.2_235.23_SAT-BA88D691_RC_RAWI80ELARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1070961677,"lat":417727641}}},{"delta":{"node-LatLon":{"lon":-1070885649,"lat":417716362}}},{"delta":{"node-LatLon":{"lon":-1070809626,"lat":417725169}}},{"delta":{"node-LatLon":{"lon":-1070732756,"lat":417733042}}},{"delta":{"node-LatLon":{"lon":-1070656229,"lat":417722191}}},{"delta":{"node-LatLon":{"lon":-1070580490,"lat":417709023}}},{"delta":{"node-LatLon":{"lon":-1070504992,"lat":417695900}}},{"delta":{"node-LatLon":{"lon":-1070429493,"lat":417682786}}},{"delta":{"node-LatLon":{"lon":-1070354047,"lat":417669673}}},{"delta":{"node-LatLon":{"lon":-1070278596,"lat":417656581}}},{"delta":{"node-LatLon":{"lon":-1070202954,"lat":417643413}}},{"delta":{"node-LatLon":{"lon":-1070127097,"lat":417630244}}},{"delta":{"node-LatLon":{"lon":-1070051256,"lat":417617028}}},{"delta":{"node-LatLon":{"lon":-1069975759,"lat":417603852}}},{"delta":{"node-LatLon":{"lon":-1069900250,"lat":417590719}}},{"delta":{"node-LatLon":{"lon":-1069825529,"lat":417577695}}},{"delta":{"node-LatLon":{"lon":-1069751604,"lat":417564757}}},{"delta":{"node-LatLon":{"lon":-1069677665,"lat":417551870}}},{"delta":{"node-LatLon":{"lon":-1069603910,"lat":417538967}}},{"delta":{"node-LatLon":{"lon":-1069531945,"lat":417521380}}},{"delta":{"node-LatLon":{"lon":-1069460002,"lat":417502274}}},{"delta":{"node-LatLon":{"lon":-1069387530,"lat":417482961}}},{"delta":{"node-LatLon":{"lon":-1069315049,"lat":417463671}}},{"delta":{"node-LatLon":{"lon":-1069240161,"lat":417448143}}},{"delta":{"node-LatLon":{"lon":-1069162781,"lat":417442613}}},{"delta":{"node-LatLon":{"lon":-1069085198,"lat":417439823}}},{"delta":{"node-LatLon":{"lon":-1069007744,"lat":417437041}}},{"delta":{"node-LatLon":{"lon":-1068930291,"lat":417434237}}},{"delta":{"node-LatLon":{"lon":-1068853004,"lat":417431463}}},{"delta":{"node-LatLon":{"lon":-1068775721,"lat":417428637}}},{"delta":{"node-LatLon":{"lon":-1068698384,"lat":417425830}}},{"delta":{"node-LatLon":{"lon":-1068620993,"lat":417423054}}},{"delta":{"node-LatLon":{"lon":-1068543604,"lat":417420239}}},{"delta":{"node-LatLon":{"lon":-1068465827,"lat":417417448}}},{"delta":{"node-LatLon":{"lon":-1068388058,"lat":417414571}}},{"delta":{"node-LatLon":{"lon":-1068310584,"lat":417411739}}},{"delta":{"node-LatLon":{"lon":-1068291290,"lat":417411033}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417730521,"long":-1070980675}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31306}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6625,"latitude":41.1023754,"speed":23.44,"longitude":-105.047912},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":38,"serialNumber":15467,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31576,"packetID":"0000000000000CAD04","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417236030,"long":-1064577050},"name":"westbound_I80_235.23_255.6_SAT-5249C81B_RC_EMI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1064594442,"lat":417242599}}},{"delta":{"node-LatLon":{"lon":-1064663938,"lat":417268988}}},{"delta":{"node-LatLon":{"lon":-1064732992,"lat":417295169}}},{"delta":{"node-LatLon":{"lon":-1064801593,"lat":417321158}}},{"delta":{"node-LatLon":{"lon":-1064868982,"lat":417348724}}},{"delta":{"node-LatLon":{"lon":-1064918112,"lat":417392970}}},{"delta":{"node-LatLon":{"lon":-1064954285,"lat":417444108}}},{"delta":{"node-LatLon":{"lon":-1065013176,"lat":417481407}}},{"delta":{"node-LatLon":{"lon":-1065076232,"lat":417514937}}},{"delta":{"node-LatLon":{"lon":-1065143647,"lat":417541998}}},{"delta":{"node-LatLon":{"lon":-1065216141,"lat":417525688}}},{"delta":{"node-LatLon":{"lon":-1065286224,"lat":417501265}}},{"delta":{"node-LatLon":{"lon":-1065362113,"lat":417489852}}},{"delta":{"node-LatLon":{"lon":-1065436335,"lat":417474443}}},{"delta":{"node-LatLon":{"lon":-1065509545,"lat":417456289}}},{"delta":{"node-LatLon":{"lon":-1065583202,"lat":417438150}}},{"delta":{"node-LatLon":{"lon":-1065656809,"lat":417419903}}},{"delta":{"node-LatLon":{"lon":-1065731883,"lat":417405563}}},{"delta":{"node-LatLon":{"lon":-1065807502,"lat":417392751}}},{"delta":{"node-LatLon":{"lon":-1065883116,"lat":417379926}}},{"delta":{"node-LatLon":{"lon":-1065957863,"lat":417367400}}},{"delta":{"node-LatLon":{"lon":-1066034015,"lat":417367499}}},{"delta":{"node-LatLon":{"lon":-1066107964,"lat":417383273}}},{"delta":{"node-LatLon":{"lon":-1066182713,"lat":417397479}}},{"delta":{"node-LatLon":{"lon":-1066259373,"lat":417393785}}},{"delta":{"node-LatLon":{"lon":-1066332961,"lat":417375298}}},{"delta":{"node-LatLon":{"lon":-1066406270,"lat":417356150}}},{"delta":{"node-LatLon":{"lon":-1066479386,"lat":417336915}}},{"delta":{"node-LatLon":{"lon":-1066552888,"lat":417319016}}},{"delta":{"node-LatLon":{"lon":-1066629919,"lat":417314788}}},{"delta":{"node-LatLon":{"lon":-1066707699,"lat":417312949}}},{"delta":{"node-LatLon":{"lon":-1066785479,"lat":417311107}}},{"delta":{"node-LatLon":{"lon":-1066862945,"lat":417309275}}},{"delta":{"node-LatLon":{"lon":-1066940095,"lat":417307413}}},{"delta":{"node-LatLon":{"lon":-1067017196,"lat":417307583}}},{"delta":{"node-LatLon":{"lon":-1067093337,"lat":417317382}}},{"delta":{"node-LatLon":{"lon":-1067169430,"lat":417327402}}},{"delta":{"node-LatLon":{"lon":-1067245652,"lat":417337364}}},{"delta":{"node-LatLon":{"lon":-1067321980,"lat":417347366}}},{"delta":{"node-LatLon":{"lon":-1067398306,"lat":417357382}}},{"delta":{"node-LatLon":{"lon":-1067473287,"lat":417371223}}},{"delta":{"node-LatLon":{"lon":-1067545644,"lat":417391873}}},{"delta":{"node-LatLon":{"lon":-1067618034,"lat":417412485}}},{"delta":{"node-LatLon":{"lon":-1067691111,"lat":417431502}}},{"delta":{"node-LatLon":{"lon":-1067768403,"lat":417431260}}},{"delta":{"node-LatLon":{"lon":-1067845690,"lat":417428509}}},{"delta":{"node-LatLon":{"lon":-1067922977,"lat":417425763}}},{"delta":{"node-LatLon":{"lon":-1068000058,"lat":417422940}}},{"delta":{"node-LatLon":{"lon":-1068076949,"lat":417420295}}},{"delta":{"node-LatLon":{"lon":-1068153829,"lat":417417471}}},{"delta":{"node-LatLon":{"lon":-1068231245,"lat":417414693}}},{"delta":{"node-LatLon":{"lon":-1068308673,"lat":417416093}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417236030,"long":-1064577050}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31576}},"msgCnt":42}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6625,"latitude":41.1023754,"speed":23.44,"longitude":-105.047912},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":37,"serialNumber":15466,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.853Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31576,"packetID":"0000000000000B72CD","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417412478,"long":-1068329876},"name":"eastbound_I80_235.23_255.6_SAT-BC6CCC19_RC_EMI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1068310584,"lat":417411739}}},{"delta":{"node-LatLon":{"lon":-1068233386,"lat":417410283}}},{"delta":{"node-LatLon":{"lon":-1068156206,"lat":417413060}}},{"delta":{"node-LatLon":{"lon":-1068078777,"lat":417415820}}},{"delta":{"node-LatLon":{"lon":-1068001349,"lat":417418584}}},{"delta":{"node-LatLon":{"lon":-1067924043,"lat":417421374}}},{"delta":{"node-LatLon":{"lon":-1067846854,"lat":417424119}}},{"delta":{"node-LatLon":{"lon":-1067769664,"lat":417426862}}},{"delta":{"node-LatLon":{"lon":-1067693191,"lat":417427429}}},{"delta":{"node-LatLon":{"lon":-1067620890,"lat":417408658}}},{"delta":{"node-LatLon":{"lon":-1067548859,"lat":417388122}}},{"delta":{"node-LatLon":{"lon":-1067476428,"lat":417367444}}},{"delta":{"node-LatLon":{"lon":-1067401438,"lat":417353366}}},{"delta":{"node-LatLon":{"lon":-1067324763,"lat":417343330}}},{"delta":{"node-LatLon":{"lon":-1067248094,"lat":417333277}}},{"delta":{"node-LatLon":{"lon":-1067171506,"lat":417323258}}},{"delta":{"node-LatLon":{"lon":-1067095014,"lat":417313213}}},{"delta":{"node-LatLon":{"lon":-1067018343,"lat":417304140}}},{"delta":{"node-LatLon":{"lon":-1066941341,"lat":417305018}}},{"delta":{"node-LatLon":{"lon":-1066864327,"lat":417306535}}},{"delta":{"node-LatLon":{"lon":-1066786982,"lat":417308392}}},{"delta":{"node-LatLon":{"lon":-1066709294,"lat":417310231}}},{"delta":{"node-LatLon":{"lon":-1066631604,"lat":417312052}}},{"delta":{"node-LatLon":{"lon":-1066553905,"lat":417315567}}},{"delta":{"node-LatLon":{"lon":-1066479234,"lat":417331977}}},{"delta":{"node-LatLon":{"lon":-1066405938,"lat":417350968}}},{"delta":{"node-LatLon":{"lon":-1066333222,"lat":417370336}}},{"delta":{"node-LatLon":{"lon":-1066260210,"lat":417389047}}},{"delta":{"node-LatLon":{"lon":-1066185059,"lat":417393215}}},{"delta":{"node-LatLon":{"lon":-1066111705,"lat":417379368}}},{"delta":{"node-LatLon":{"lon":-1066037468,"lat":417363405}}},{"delta":{"node-LatLon":{"lon":-1065959182,"lat":417362605}}},{"delta":{"node-LatLon":{"lon":-1065882330,"lat":417375426}}},{"delta":{"node-LatLon":{"lon":-1065806758,"lat":417388216}}},{"delta":{"node-LatLon":{"lon":-1065731194,"lat":417401042}}},{"delta":{"node-LatLon":{"lon":-1065656118,"lat":417415246}}},{"delta":{"node-LatLon":{"lon":-1065582542,"lat":417433443}}},{"delta":{"node-LatLon":{"lon":-1065508992,"lat":417451702}}},{"delta":{"node-LatLon":{"lon":-1065434680,"lat":417470091}}},{"delta":{"node-LatLon":{"lon":-1065359330,"lat":417485637}}},{"delta":{"node-LatLon":{"lon":-1065283762,"lat":417497543}}},{"delta":{"node-LatLon":{"lon":-1065215939,"lat":417523097}}},{"delta":{"node-LatLon":{"lon":-1065145106,"lat":417539870}}},{"delta":{"node-LatLon":{"lon":-1065078198,"lat":417513374}}},{"delta":{"node-LatLon":{"lon":-1065015853,"lat":417480011}}},{"delta":{"node-LatLon":{"lon":-1064958078,"lat":417441842}}},{"delta":{"node-LatLon":{"lon":-1064922715,"lat":417389692}}},{"delta":{"node-LatLon":{"lon":-1064872664,"lat":417345234}}},{"delta":{"node-LatLon":{"lon":-1064805541,"lat":417317528}}},{"delta":{"node-LatLon":{"lon":-1064737065,"lat":417291583}}},{"delta":{"node-LatLon":{"lon":-1064668140,"lat":417265497}}},{"delta":{"node-LatLon":{"lon":-1064598834,"lat":417239175}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011111000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417412478,"long":-1068329876}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31576}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023629,"speed":23.16,"longitude":-105.0479939},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":32,"serialNumber":15461,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.553Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31547,"packetID":"0000000000000EF64E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415981013,"long":-1062070609},"name":"westbound_I80_267.19_272.06_SAT-1F82D7A2_RC_ARLI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062090421,"lat":415980971}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}},{"delta":{"node-LatLon":{"lon":-1062129021,"lat":415980789}}},{"delta":{"node-LatLon":{"lon":-1062147810,"lat":415980793}}},{"delta":{"node-LatLon":{"lon":-1062166552,"lat":415981611}}},{"delta":{"node-LatLon":{"lon":-1062184813,"lat":415984845}}},{"delta":{"node-LatLon":{"lon":-1062201989,"lat":415990520}}},{"delta":{"node-LatLon":{"lon":-1062217437,"lat":415998517}}},{"delta":{"node-LatLon":{"lon":-1062230703,"lat":416008482}}},{"delta":{"node-LatLon":{"lon":-1062241451,"lat":416020041}}},{"delta":{"node-LatLon":{"lon":-1062251290,"lat":416032060}}},{"delta":{"node-LatLon":{"lon":-1062261128,"lat":416044081}}},{"delta":{"node-LatLon":{"lon":-1062270774,"lat":416055871}}},{"delta":{"node-LatLon":{"lon":-1062280417,"lat":416067663}}},{"delta":{"node-LatLon":{"lon":-1062290067,"lat":416079452}}},{"delta":{"node-LatLon":{"lon":-1062299712,"lat":416091244}}},{"delta":{"node-LatLon":{"lon":-1062309426,"lat":416103003}}},{"delta":{"node-LatLon":{"lon":-1062319170,"lat":416114748}}},{"delta":{"node-LatLon":{"lon":-1062328711,"lat":416126587}}},{"delta":{"node-LatLon":{"lon":-1062338232,"lat":416138435}}},{"delta":{"node-LatLon":{"lon":-1062347925,"lat":416150205}}},{"delta":{"node-LatLon":{"lon":-1062357563,"lat":416162000}}},{"delta":{"node-LatLon":{"lon":-1062368179,"lat":416174692}}},{"delta":{"node-LatLon":{"lon":-1062379892,"lat":416186820}}},{"delta":{"node-LatLon":{"lon":-1062393288,"lat":416197926}}},{"delta":{"node-LatLon":{"lon":-1062408108,"lat":416207958}}},{"delta":{"node-LatLon":{"lon":-1062424227,"lat":416216793}}},{"delta":{"node-LatLon":{"lon":-1062441506,"lat":416224292}}},{"delta":{"node-LatLon":{"lon":-1062459705,"lat":416230444}}},{"delta":{"node-LatLon":{"lon":-1062478641,"lat":416235175}}},{"delta":{"node-LatLon":{"lon":-1062497949,"lat":416238998}}},{"delta":{"node-LatLon":{"lon":-1062517273,"lat":416242774}}},{"delta":{"node-LatLon":{"lon":-1062536082,"lat":416246433}}},{"delta":{"node-LatLon":{"lon":-1062554889,"lat":416250101}}},{"delta":{"node-LatLon":{"lon":-1062573685,"lat":416253798}}},{"delta":{"node-LatLon":{"lon":-1062592489,"lat":416257471}}},{"delta":{"node-LatLon":{"lon":-1062611298,"lat":416261134}}},{"delta":{"node-LatLon":{"lon":-1062630102,"lat":416264808}}},{"delta":{"node-LatLon":{"lon":-1062648910,"lat":416268474}}},{"delta":{"node-LatLon":{"lon":-1062667716,"lat":416272143}}},{"delta":{"node-LatLon":{"lon":-1062686526,"lat":416275802}}},{"delta":{"node-LatLon":{"lon":-1062705320,"lat":416279506}}},{"delta":{"node-LatLon":{"lon":-1062723512,"lat":416283487}}},{"delta":{"node-LatLon":{"lon":-1062741156,"lat":416288664}}},{"delta":{"node-LatLon":{"lon":-1062758081,"lat":416295053}}},{"delta":{"node-LatLon":{"lon":-1062774179,"lat":416302552}}},{"delta":{"node-LatLon":{"lon":-1062789262,"lat":416311156}}},{"delta":{"node-LatLon":{"lon":-1062803697,"lat":416320374}}},{"delta":{"node-LatLon":{"lon":-1062818144,"lat":416329581}}},{"delta":{"node-LatLon":{"lon":-1062832563,"lat":416338813}}},{"delta":{"node-LatLon":{"lon":-1062847004,"lat":416348027}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415981013,"long":-1062070609}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31547}},"msgCnt":54}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023711,"speed":23.16,"longitude":-105.0479398},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":36,"serialNumber":15465,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.753Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31576,"packetID":"000000000000097BE1","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416329581,"long":-1062818144},"name":"westbound_I80_255.6_267.19_SAT-EF31CF04_RC_EMI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062832563,"lat":416338813}}},{"delta":{"node-LatLon":{"lon":-1062861444,"lat":416357241}}},{"delta":{"node-LatLon":{"lon":-1062891617,"lat":416376465}}},{"delta":{"node-LatLon":{"lon":-1062924240,"lat":416393168}}},{"delta":{"node-LatLon":{"lon":-1062961089,"lat":416403834}}},{"delta":{"node-LatLon":{"lon":-1062999651,"lat":416410539}}},{"delta":{"node-LatLon":{"lon":-1063038256,"lat":416417110}}},{"delta":{"node-LatLon":{"lon":-1063075838,"lat":416423525}}},{"delta":{"node-LatLon":{"lon":-1063113422,"lat":416429935}}},{"delta":{"node-LatLon":{"lon":-1063151010,"lat":416436333}}},{"delta":{"node-LatLon":{"lon":-1063187758,"lat":416444929}}},{"delta":{"node-LatLon":{"lon":-1063221748,"lat":416458478}}},{"delta":{"node-LatLon":{"lon":-1063254248,"lat":416474223}}},{"delta":{"node-LatLon":{"lon":-1063286767,"lat":416489947}}},{"delta":{"node-LatLon":{"lon":-1063319286,"lat":416505671}}},{"delta":{"node-LatLon":{"lon":-1063351803,"lat":416521398}}},{"delta":{"node-LatLon":{"lon":-1063384308,"lat":416537141}}},{"delta":{"node-LatLon":{"lon":-1063416537,"lat":416552741}}},{"delta":{"node-LatLon":{"lon":-1063448756,"lat":416568353}}},{"delta":{"node-LatLon":{"lon":-1063480997,"lat":416583940}}},{"delta":{"node-LatLon":{"lon":-1063513230,"lat":416599539}}},{"delta":{"node-LatLon":{"lon":-1063545479,"lat":416615118}}},{"delta":{"node-LatLon":{"lon":-1063577703,"lat":416630746}}},{"delta":{"node-LatLon":{"lon":-1063609979,"lat":416646315}}},{"delta":{"node-LatLon":{"lon":-1063642246,"lat":416661894}}},{"delta":{"node-LatLon":{"lon":-1063674320,"lat":416677693}}},{"delta":{"node-LatLon":{"lon":-1063702475,"lat":416697159}}},{"delta":{"node-LatLon":{"lon":-1063724503,"lat":416721905}}},{"delta":{"node-LatLon":{"lon":-1063738013,"lat":416749885}}},{"delta":{"node-LatLon":{"lon":-1063745688,"lat":416779149}}},{"delta":{"node-LatLon":{"lon":-1063757512,"lat":416807580}}},{"delta":{"node-LatLon":{"lon":-1063775542,"lat":416834147}}},{"delta":{"node-LatLon":{"lon":-1063793398,"lat":416858977}}},{"delta":{"node-LatLon":{"lon":-1063809837,"lat":416884350}}},{"delta":{"node-LatLon":{"lon":-1063824918,"lat":416910195}}},{"delta":{"node-LatLon":{"lon":-1063839847,"lat":416936091}}},{"delta":{"node-LatLon":{"lon":-1063856289,"lat":416961436}}},{"delta":{"node-LatLon":{"lon":-1063880112,"lat":416984440}}},{"delta":{"node-LatLon":{"lon":-1063910309,"lat":417002755}}},{"delta":{"node-LatLon":{"lon":-1063944810,"lat":417016237}}},{"delta":{"node-LatLon":{"lon":-1063979929,"lat":417028841}}},{"delta":{"node-LatLon":{"lon":-1064015050,"lat":417041442}}},{"delta":{"node-LatLon":{"lon":-1064050617,"lat":417052787}}},{"delta":{"node-LatLon":{"lon":-1064088491,"lat":417058422}}},{"delta":{"node-LatLon":{"lon":-1064127128,"lat":417059995}}},{"delta":{"node-LatLon":{"lon":-1064165769,"lat":417061539}}},{"delta":{"node-LatLon":{"lon":-1064204408,"lat":417063119}}},{"delta":{"node-LatLon":{"lon":-1064242489,"lat":417067748}}},{"delta":{"node-LatLon":{"lon":-1064278067,"lat":417078928}}},{"delta":{"node-LatLon":{"lon":-1064309216,"lat":417095993}}},{"delta":{"node-LatLon":{"lon":-1064338068,"lat":417115288}}},{"delta":{"node-LatLon":{"lon":-1064366996,"lat":417134521}}},{"delta":{"node-LatLon":{"lon":-1064396523,"lat":417152988}}},{"delta":{"node-LatLon":{"lon":-1064427177,"lat":417170394}}},{"delta":{"node-LatLon":{"lon":-1064458838,"lat":417186756}}},{"delta":{"node-LatLon":{"lon":-1064491487,"lat":417201990}}},{"delta":{"node-LatLon":{"lon":-1064525046,"lat":417216068}}},{"delta":{"node-LatLon":{"lon":-1064559666,"lat":417229448}}},{"delta":{"node-LatLon":{"lon":-1064594442,"lat":417242599}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001111"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416329581,"long":-1062818144}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31576}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023629,"speed":23.16,"longitude":-105.0479939},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":33,"serialNumber":15462,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.653Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31547,"packetID":"00000000000010847D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415976300,"long":-1062132565},"name":"eastbound_I80_272.06_279.86_SAT-A456B6BD_RC_ARLI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062074266,"lat":415976387}}},{"delta":{"node-LatLon":{"lon":-1062035235,"lat":415976340}}},{"delta":{"node-LatLon":{"lon":-1061996980,"lat":415971514}}},{"delta":{"node-LatLon":{"lon":-1061962779,"lat":415957510}}},{"delta":{"node-LatLon":{"lon":-1061929530,"lat":415942161}}},{"delta":{"node-LatLon":{"lon":-1061896505,"lat":415926815}}},{"delta":{"node-LatLon":{"lon":-1061863465,"lat":415911487}}},{"delta":{"node-LatLon":{"lon":-1061830559,"lat":415896001}}},{"delta":{"node-LatLon":{"lon":-1061799243,"lat":415878765}}},{"delta":{"node-LatLon":{"lon":-1061768515,"lat":415860933}}},{"delta":{"node-LatLon":{"lon":-1061737747,"lat":415843066}}},{"delta":{"node-LatLon":{"lon":-1061706991,"lat":415825187}}},{"delta":{"node-LatLon":{"lon":-1061676217,"lat":415807327}}},{"delta":{"node-LatLon":{"lon":-1061645463,"lat":415789449}}},{"delta":{"node-LatLon":{"lon":-1061614689,"lat":415771591}}},{"delta":{"node-LatLon":{"lon":-1061584537,"lat":415754086}}},{"delta":{"node-LatLon":{"lon":-1061554447,"lat":415736525}}},{"delta":{"node-LatLon":{"lon":-1061524198,"lat":415719117}}},{"delta":{"node-LatLon":{"lon":-1061494074,"lat":415701589}}},{"delta":{"node-LatLon":{"lon":-1061463879,"lat":415684131}}},{"delta":{"node-LatLon":{"lon":-1061432150,"lat":415667054}}},{"delta":{"node-LatLon":{"lon":-1061396974,"lat":415654391}}},{"delta":{"node-LatLon":{"lon":-1061359292,"lat":415646802}}},{"delta":{"node-LatLon":{"lon":-1061320863,"lat":415641538}}},{"delta":{"node-LatLon":{"lon":-1061282426,"lat":415636308}}},{"delta":{"node-LatLon":{"lon":-1061244922,"lat":415631177}}},{"delta":{"node-LatLon":{"lon":-1061207418,"lat":415626048}}},{"delta":{"node-LatLon":{"lon":-1061169903,"lat":415620964}}},{"delta":{"node-LatLon":{"lon":-1061132571,"lat":415615219}}},{"delta":{"node-LatLon":{"lon":-1061096967,"lat":415605109}}},{"delta":{"node-LatLon":{"lon":-1061064131,"lat":415590319}}},{"delta":{"node-LatLon":{"lon":-1061032943,"lat":415573570}}},{"delta":{"node-LatLon":{"lon":-1061001748,"lat":415556828}}},{"delta":{"node-LatLon":{"lon":-1060970565,"lat":415540075}}},{"delta":{"node-LatLon":{"lon":-1060939622,"lat":415523077}}},{"delta":{"node-LatLon":{"lon":-1060912271,"lat":415503093}}},{"delta":{"node-LatLon":{"lon":-1060888721,"lat":415480493}}},{"delta":{"node-LatLon":{"lon":-1060865425,"lat":415457738}}},{"delta":{"node-LatLon":{"lon":-1060842121,"lat":415434989}}},{"delta":{"node-LatLon":{"lon":-1060830479,"lat":415423609}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415976300,"long":-1062132565}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31547}},"msgCnt":36}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.102367,"speed":23.16,"longitude":-105.0479669},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":35,"serialNumber":15464,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.753Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31576,"packetID":"000000000000043991","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417245737,"long":-1064616173},"name":"eastbound_I80_255.6_267.19_SAT-9BEE74D0_RC_EMI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1064598834,"lat":417239175}}},{"delta":{"node-LatLon":{"lon":-1064564140,"lat":417226077}}},{"delta":{"node-LatLon":{"lon":-1064529505,"lat":417212891}}},{"delta":{"node-LatLon":{"lon":-1064496024,"lat":417198853}}},{"delta":{"node-LatLon":{"lon":-1064463440,"lat":417183676}}},{"delta":{"node-LatLon":{"lon":-1064431804,"lat":417167410}}},{"delta":{"node-LatLon":{"lon":-1064401163,"lat":417150110}}},{"delta":{"node-LatLon":{"lon":-1064371651,"lat":417131742}}},{"delta":{"node-LatLon":{"lon":-1064342280,"lat":417112106}}},{"delta":{"node-LatLon":{"lon":-1064312928,"lat":417092456}}},{"delta":{"node-LatLon":{"lon":-1064281084,"lat":417075243}}},{"delta":{"node-LatLon":{"lon":-1064244933,"lat":417063737}}},{"delta":{"node-LatLon":{"lon":-1064206236,"lat":417058710}}},{"delta":{"node-LatLon":{"lon":-1064168081,"lat":417057202}}},{"delta":{"node-LatLon":{"lon":-1064129929,"lat":417055664}}},{"delta":{"node-LatLon":{"lon":-1064091774,"lat":417054155}}},{"delta":{"node-LatLon":{"lon":-1064054270,"lat":417049080}}},{"delta":{"node-LatLon":{"lon":-1064019101,"lat":417037984}}},{"delta":{"node-LatLon":{"lon":-1063985061,"lat":417025732}}},{"delta":{"node-LatLon":{"lon":-1063951019,"lat":417013482}}},{"delta":{"node-LatLon":{"lon":-1063917284,"lat":417000788}}},{"delta":{"node-LatLon":{"lon":-1063887416,"lat":416983573}}},{"delta":{"node-LatLon":{"lon":-1063863549,"lat":416961722}}},{"delta":{"node-LatLon":{"lon":-1063846461,"lat":416936273}}},{"delta":{"node-LatLon":{"lon":-1063831379,"lat":416910073}}},{"delta":{"node-LatLon":{"lon":-1063816138,"lat":416883925}}},{"delta":{"node-LatLon":{"lon":-1063799617,"lat":416858220}}},{"delta":{"node-LatLon":{"lon":-1063781616,"lat":416833080}}},{"delta":{"node-LatLon":{"lon":-1063763325,"lat":416806477}}},{"delta":{"node-LatLon":{"lon":-1063751513,"lat":416777919}}},{"delta":{"node-LatLon":{"lon":-1063743848,"lat":416748530}}},{"delta":{"node-LatLon":{"lon":-1063730315,"lat":416720424}}},{"delta":{"node-LatLon":{"lon":-1063708354,"lat":416695491}}},{"delta":{"node-LatLon":{"lon":-1063680444,"lat":416675556}}},{"delta":{"node-LatLon":{"lon":-1063648291,"lat":416659518}}},{"delta":{"node-LatLon":{"lon":-1063615844,"lat":416643807}}},{"delta":{"node-LatLon":{"lon":-1063583366,"lat":416628132}}},{"delta":{"node-LatLon":{"lon":-1063550917,"lat":416612423}}},{"delta":{"node-LatLon":{"lon":-1063518397,"lat":416596725}}},{"delta":{"node-LatLon":{"lon":-1063485899,"lat":416581001}}},{"delta":{"node-LatLon":{"lon":-1063453403,"lat":416565276}}},{"delta":{"node-LatLon":{"lon":-1063420938,"lat":416549517}}},{"delta":{"node-LatLon":{"lon":-1063388402,"lat":416533840}}},{"delta":{"node-LatLon":{"lon":-1063355954,"lat":416518111}}},{"delta":{"node-LatLon":{"lon":-1063323497,"lat":416502393}}},{"delta":{"node-LatLon":{"lon":-1063291009,"lat":416486712}}},{"delta":{"node-LatLon":{"lon":-1063258568,"lat":416470977}}},{"delta":{"node-LatLon":{"lon":-1063226121,"lat":416455250}}},{"delta":{"node-LatLon":{"lon":-1063191824,"lat":416441408}}},{"delta":{"node-LatLon":{"lon":-1063154787,"lat":416432390}}},{"delta":{"node-LatLon":{"lon":-1063116772,"lat":416425883}}},{"delta":{"node-LatLon":{"lon":-1063078751,"lat":416419398}}},{"delta":{"node-LatLon":{"lon":-1063040728,"lat":416412924}}},{"delta":{"node-LatLon":{"lon":-1063002941,"lat":416406471}}},{"delta":{"node-LatLon":{"lon":-1062965166,"lat":416399984}}},{"delta":{"node-LatLon":{"lon":-1062928900,"lat":416389943}}},{"delta":{"node-LatLon":{"lon":-1062896756,"lat":416373819}}},{"delta":{"node-LatLon":{"lon":-1062867209,"lat":416355008}}},{"delta":{"node-LatLon":{"lon":-1062837900,"lat":416336319}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417245737,"long":-1064616173}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31576}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.102367,"speed":23.16,"longitude":-105.0479669},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":34,"serialNumber":15463,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.653Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31547,"packetID":"0000000000000C4306","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415413487,"long":-1060812632},"name":"westbound_I80_272.06_279.86_SAT-84FB2473_RC_ARLI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060824406,"lat":415424958}}},{"delta":{"node-LatLon":{"lon":-1060836139,"lat":415436453}}},{"delta":{"node-LatLon":{"lon":-1060859605,"lat":415459445}}},{"delta":{"node-LatLon":{"lon":-1060883068,"lat":415482438}}},{"delta":{"node-LatLon":{"lon":-1060906872,"lat":415505231}}},{"delta":{"node-LatLon":{"lon":-1060934236,"lat":415525587}}},{"delta":{"node-LatLon":{"lon":-1060965310,"lat":415542824}}},{"delta":{"node-LatLon":{"lon":-1060996772,"lat":415559666}}},{"delta":{"node-LatLon":{"lon":-1061028237,"lat":415576506}}},{"delta":{"node-LatLon":{"lon":-1061059706,"lat":415593342}}},{"delta":{"node-LatLon":{"lon":-1061092588,"lat":415608515}}},{"delta":{"node-LatLon":{"lon":-1061128419,"lat":415618971}}},{"delta":{"node-LatLon":{"lon":-1061166060,"lat":415624943}}},{"delta":{"node-LatLon":{"lon":-1061203924,"lat":415630154}}},{"delta":{"node-LatLon":{"lon":-1061241795,"lat":415635339}}},{"delta":{"node-LatLon":{"lon":-1061279673,"lat":415640497}}},{"delta":{"node-LatLon":{"lon":-1061317589,"lat":415645644}}},{"delta":{"node-LatLon":{"lon":-1061355497,"lat":415650826}}},{"delta":{"node-LatLon":{"lon":-1061392771,"lat":415657996}}},{"delta":{"node-LatLon":{"lon":-1061427646,"lat":415670204}}},{"delta":{"node-LatLon":{"lon":-1061459115,"lat":415686864}}},{"delta":{"node-LatLon":{"lon":-1061489394,"lat":415704469}}},{"delta":{"node-LatLon":{"lon":-1061519697,"lat":415722052}}},{"delta":{"node-LatLon":{"lon":-1061549992,"lat":415739645}}},{"delta":{"node-LatLon":{"lon":-1061580273,"lat":415757250}}},{"delta":{"node-LatLon":{"lon":-1061610581,"lat":415774831}}},{"delta":{"node-LatLon":{"lon":-1061641248,"lat":415792650}}},{"delta":{"node-LatLon":{"lon":-1061671923,"lat":415810463}}},{"delta":{"node-LatLon":{"lon":-1061702592,"lat":415828282}}},{"delta":{"node-LatLon":{"lon":-1061733271,"lat":415846093}}},{"delta":{"node-LatLon":{"lon":-1061763976,"lat":415863879}}},{"delta":{"node-LatLon":{"lon":-1061794560,"lat":415881656}}},{"delta":{"node-LatLon":{"lon":-1061825730,"lat":415898841}}},{"delta":{"node-LatLon":{"lon":-1061858422,"lat":415914356}}},{"delta":{"node-LatLon":{"lon":-1061891331,"lat":415929615}}},{"delta":{"node-LatLon":{"lon":-1061924211,"lat":415944910}}},{"delta":{"node-LatLon":{"lon":-1061957798,"lat":415960692}}},{"delta":{"node-LatLon":{"lon":-1061992345,"lat":415975173}}},{"delta":{"node-LatLon":{"lon":-1062030986,"lat":415980852}}},{"delta":{"node-LatLon":{"lon":-1062070609,"lat":415981013}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415413487,"long":-1060812632}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31547}},"msgCnt":48}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023589,"speed":23.16,"longitude":-105.048021},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":28,"serialNumber":15457,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31584,"packetID":"0000000000000C776A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412012058,"long":-1054342550},"name":"westbound_I80_325.78_322.6_SAT-1A7FD750_VSL_V002148","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054353231,"lat":412023546}}},{"delta":{"node-LatLon":{"lon":-1054363915,"lat":412035033}}},{"delta":{"node-LatLon":{"lon":-1054374628,"lat":412046505}}},{"delta":{"node-LatLon":{"lon":-1054384730,"lat":412058284}}},{"delta":{"node-LatLon":{"lon":-1054393246,"lat":412070758}}},{"delta":{"node-LatLon":{"lon":-1054401396,"lat":412083376}}},{"delta":{"node-LatLon":{"lon":-1054408178,"lat":412096432}}},{"delta":{"node-LatLon":{"lon":-1054411451,"lat":412110222}}},{"delta":{"node-LatLon":{"lon":-1054410494,"lat":412124215}}},{"delta":{"node-LatLon":{"lon":-1054406258,"lat":412138313}}},{"delta":{"node-LatLon":{"lon":-1054401538,"lat":412152329}}},{"delta":{"node-LatLon":{"lon":-1054396763,"lat":412166333}}},{"delta":{"node-LatLon":{"lon":-1054391999,"lat":412180340}}},{"delta":{"node-LatLon":{"lon":-1054387248,"lat":412194350}}},{"delta":{"node-LatLon":{"lon":-1054382654,"lat":412208387}}},{"delta":{"node-LatLon":{"lon":-1054380050,"lat":412222697}}},{"delta":{"node-LatLon":{"lon":-1054380942,"lat":412237122}}},{"delta":{"node-LatLon":{"lon":-1054384055,"lat":412251390}}},{"delta":{"node-LatLon":{"lon":-1054387241,"lat":412265649}}},{"delta":{"node-LatLon":{"lon":-1054387713,"lat":412280108}}},{"delta":{"node-LatLon":{"lon":-1054383702,"lat":412294247}}},{"delta":{"node-LatLon":{"lon":-1054376516,"lat":412307678}}},{"delta":{"node-LatLon":{"lon":-1054369571,"lat":412321177}}},{"delta":{"node-LatLon":{"lon":-1054366196,"lat":412335412}}},{"delta":{"node-LatLon":{"lon":-1054366933,"lat":412349870}}},{"delta":{"node-LatLon":{"lon":-1054369671,"lat":412364212}}},{"delta":{"node-LatLon":{"lon":-1054372542,"lat":412378541}}},{"delta":{"node-LatLon":{"lon":-1054376265,"lat":412392751}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}},{"delta":{"node-LatLon":{"lon":-1054388532,"lat":412420113}}},{"delta":{"node-LatLon":{"lon":-1054396624,"lat":412433185}}},{"delta":{"node-LatLon":{"lon":-1054404781,"lat":412446234}}},{"delta":{"node-LatLon":{"lon":-1054412998,"lat":412459262}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1000000000000011}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412012058,"long":-1054342550}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31584}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023589,"speed":23.16,"longitude":-105.048021},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":31,"serialNumber":15460,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.553Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31547,"packetID":"0000000000000EA327","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416355008,"long":-1062867209},"name":"eastbound_I80_267.19_272.06_SAT-7ECE7CF3_RC_ARLI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062852549,"lat":416345669}}},{"delta":{"node-LatLon":{"lon":-1062837900,"lat":416336319}}},{"delta":{"node-LatLon":{"lon":-1062823256,"lat":416326967}}},{"delta":{"node-LatLon":{"lon":-1062808616,"lat":416317611}}},{"delta":{"node-LatLon":{"lon":-1062793947,"lat":416308280}}},{"delta":{"node-LatLon":{"lon":-1062778698,"lat":416299496}}},{"delta":{"node-LatLon":{"lon":-1062762456,"lat":416291782}}},{"delta":{"node-LatLon":{"lon":-1062745352,"lat":416285198}}},{"delta":{"node-LatLon":{"lon":-1062727519,"lat":416279817}}},{"delta":{"node-LatLon":{"lon":-1062709133,"lat":416275605}}},{"delta":{"node-LatLon":{"lon":-1062690294,"lat":416271928}}},{"delta":{"node-LatLon":{"lon":-1062671455,"lat":416268251}}},{"delta":{"node-LatLon":{"lon":-1062652620,"lat":416264564}}},{"delta":{"node-LatLon":{"lon":-1062633771,"lat":416260915}}},{"delta":{"node-LatLon":{"lon":-1062614940,"lat":416257216}}},{"delta":{"node-LatLon":{"lon":-1062596100,"lat":416253544}}},{"delta":{"node-LatLon":{"lon":-1062577255,"lat":416249886}}},{"delta":{"node-LatLon":{"lon":-1062558417,"lat":416246209}}},{"delta":{"node-LatLon":{"lon":-1062539573,"lat":416242549}}},{"delta":{"node-LatLon":{"lon":-1062520744,"lat":416238847}}},{"delta":{"node-LatLon":{"lon":-1062501815,"lat":416235141}}},{"delta":{"node-LatLon":{"lon":-1062482895,"lat":416231412}}},{"delta":{"node-LatLon":{"lon":-1062464244,"lat":416227007}}},{"delta":{"node-LatLon":{"lon":-1062446311,"lat":416221159}}},{"delta":{"node-LatLon":{"lon":-1062429289,"lat":416213939}}},{"delta":{"node-LatLon":{"lon":-1062413350,"lat":416205439}}},{"delta":{"node-LatLon":{"lon":-1062398699,"lat":416195722}}},{"delta":{"node-LatLon":{"lon":-1062385484,"lat":416184907}}},{"delta":{"node-LatLon":{"lon":-1062373783,"lat":416173151}}},{"delta":{"node-LatLon":{"lon":-1062363439,"lat":416160690}}},{"delta":{"node-LatLon":{"lon":-1062353839,"lat":416148895}}},{"delta":{"node-LatLon":{"lon":-1062344200,"lat":416137119}}},{"delta":{"node-LatLon":{"lon":-1062334576,"lat":416125335}}},{"delta":{"node-LatLon":{"lon":-1062324886,"lat":416113582}}},{"delta":{"node-LatLon":{"lon":-1062315283,"lat":416101788}}},{"delta":{"node-LatLon":{"lon":-1062305674,"lat":416089998}}},{"delta":{"node-LatLon":{"lon":-1062296038,"lat":416078220}}},{"delta":{"node-LatLon":{"lon":-1062286421,"lat":416066433}}},{"delta":{"node-LatLon":{"lon":-1062276808,"lat":416054645}}},{"delta":{"node-LatLon":{"lon":-1062267158,"lat":416042874}}},{"delta":{"node-LatLon":{"lon":-1062257093,"lat":416030536}}},{"delta":{"node-LatLon":{"lon":-1062246994,"lat":416018215}}},{"delta":{"node-LatLon":{"lon":-1062236012,"lat":416006340}}},{"delta":{"node-LatLon":{"lon":-1062222613,"lat":415995969}}},{"delta":{"node-LatLon":{"lon":-1062206968,"lat":415987559}}},{"delta":{"node-LatLon":{"lon":-1062189595,"lat":415981343}}},{"delta":{"node-LatLon":{"lon":-1062171008,"lat":415977603}}},{"delta":{"node-LatLon":{"lon":-1062151833,"lat":415976346}}},{"delta":{"node-LatLon":{"lon":-1062132565,"lat":415976300}}},{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062093782,"lat":415976349}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416355008,"long":-1062867209}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31547}},"msgCnt":42}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023589,"speed":23.16,"longitude":-105.048021},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":30,"serialNumber":15459,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31410,"packetID":"000000000000052CAD","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416762809,"long":-1079776048},"name":"westbound_I80_158.55_173.41_SAT-53B47E1D_RC_WAMI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1079792654,"lat":416755214}}},{"delta":{"node-LatLon":{"lon":-1079842491,"lat":416732454}}},{"delta":{"node-LatLon":{"lon":-1079913673,"lat":416710891}}},{"delta":{"node-LatLon":{"lon":-1079988998,"lat":416700558}}},{"delta":{"node-LatLon":{"lon":-1080064380,"lat":416690465}}},{"delta":{"node-LatLon":{"lon":-1080140410,"lat":416680262}}},{"delta":{"node-LatLon":{"lon":-1080216433,"lat":416670036}}},{"delta":{"node-LatLon":{"lon":-1080292501,"lat":416659806}}},{"delta":{"node-LatLon":{"lon":-1080368608,"lat":416649545}}},{"delta":{"node-LatLon":{"lon":-1080444725,"lat":416639329}}},{"delta":{"node-LatLon":{"lon":-1080520774,"lat":416629083}}},{"delta":{"node-LatLon":{"lon":-1080596810,"lat":416618789}}},{"delta":{"node-LatLon":{"lon":-1080672394,"lat":416608577}}},{"delta":{"node-LatLon":{"lon":-1080747529,"lat":416598458}}},{"delta":{"node-LatLon":{"lon":-1080822654,"lat":416588304}}},{"delta":{"node-LatLon":{"lon":-1080898633,"lat":416578054}}},{"delta":{"node-LatLon":{"lon":-1080974597,"lat":416567750}}},{"delta":{"node-LatLon":{"lon":-1081050829,"lat":416557420}}},{"delta":{"node-LatLon":{"lon":-1081127325,"lat":416547044}}},{"delta":{"node-LatLon":{"lon":-1081203413,"lat":416535198}}},{"delta":{"node-LatLon":{"lon":-1081277846,"lat":416519549}}},{"delta":{"node-LatLon":{"lon":-1081352245,"lat":416503811}}},{"delta":{"node-LatLon":{"lon":-1081426652,"lat":416488040}}},{"delta":{"node-LatLon":{"lon":-1081501076,"lat":416472261}}},{"delta":{"node-LatLon":{"lon":-1081575983,"lat":416457952}}},{"delta":{"node-LatLon":{"lon":-1081652109,"lat":416449993}}},{"delta":{"node-LatLon":{"lon":-1081728290,"lat":416442318}}},{"delta":{"node-LatLon":{"lon":-1081805260,"lat":416434541}}},{"delta":{"node-LatLon":{"lon":-1081883037,"lat":416426768}}},{"delta":{"node-LatLon":{"lon":-1081960802,"lat":416418934}}},{"delta":{"node-LatLon":{"lon":-1082036873,"lat":416411275}}},{"delta":{"node-LatLon":{"lon":-1082112938,"lat":416403591}}},{"delta":{"node-LatLon":{"lon":-1082188943,"lat":416395924}}},{"delta":{"node-LatLon":{"lon":-1082264890,"lat":416388279}}},{"delta":{"node-LatLon":{"lon":-1082340832,"lat":416380614}}},{"delta":{"node-LatLon":{"lon":-1082416741,"lat":416370373}}},{"delta":{"node-LatLon":{"lon":-1082492308,"lat":416358699}}},{"delta":{"node-LatLon":{"lon":-1082567978,"lat":416347001}}},{"delta":{"node-LatLon":{"lon":-1082624827,"lat":416338280}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000110000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416762809,"long":-1079776048}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31410}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023589,"speed":23.16,"longitude":-105.048021},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":29,"serialNumber":15458,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31410,"packetID":"00000000000006E136","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416331711,"long":-1082645377},"name":"eastbound_I80_158.55_173.41_SAT-C560983B_RC_WAMI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1082626530,"lat":416334663}}},{"delta":{"node-LatLon":{"lon":-1082569940,"lat":416343338}}},{"delta":{"node-LatLon":{"lon":-1082494293,"lat":416355057}}},{"delta":{"node-LatLon":{"lon":-1082418408,"lat":416366766}}},{"delta":{"node-LatLon":{"lon":-1082342222,"lat":416377204}}},{"delta":{"node-LatLon":{"lon":-1082266189,"lat":416384835}}},{"delta":{"node-LatLon":{"lon":-1082190159,"lat":416392484}}},{"delta":{"node-LatLon":{"lon":-1082114130,"lat":416400151}}},{"delta":{"node-LatLon":{"lon":-1082038109,"lat":416407878}}},{"delta":{"node-LatLon":{"lon":-1081962071,"lat":416415513}}},{"delta":{"node-LatLon":{"lon":-1081884585,"lat":416423333}}},{"delta":{"node-LatLon":{"lon":-1081807099,"lat":416431159}}},{"delta":{"node-LatLon":{"lon":-1081730361,"lat":416438843}}},{"delta":{"node-LatLon":{"lon":-1081654390,"lat":416446481}}},{"delta":{"node-LatLon":{"lon":-1081578471,"lat":416454403}}},{"delta":{"node-LatLon":{"lon":-1081503389,"lat":416468376}}},{"delta":{"node-LatLon":{"lon":-1081428908,"lat":416484193}}},{"delta":{"node-LatLon":{"lon":-1081354605,"lat":416499942}}},{"delta":{"node-LatLon":{"lon":-1081280498,"lat":416515672}}},{"delta":{"node-LatLon":{"lon":-1081206345,"lat":416531284}}},{"delta":{"node-LatLon":{"lon":-1081130243,"lat":416543380}}},{"delta":{"node-LatLon":{"lon":-1081053650,"lat":416553747}}},{"delta":{"node-LatLon":{"lon":-1080977254,"lat":416564119}}},{"delta":{"node-LatLon":{"lon":-1080901037,"lat":416574429}}},{"delta":{"node-LatLon":{"lon":-1080824822,"lat":416584754}}},{"delta":{"node-LatLon":{"lon":-1080749783,"lat":416594899}}},{"delta":{"node-LatLon":{"lon":-1080674747,"lat":416605063}}},{"delta":{"node-LatLon":{"lon":-1080599110,"lat":416615260}}},{"delta":{"node-LatLon":{"lon":-1080522881,"lat":416625527}}},{"delta":{"node-LatLon":{"lon":-1080446654,"lat":416635808}}},{"delta":{"node-LatLon":{"lon":-1080370892,"lat":416645963}}},{"delta":{"node-LatLon":{"lon":-1080295134,"lat":416656136}}},{"delta":{"node-LatLon":{"lon":-1080219094,"lat":416666380}}},{"delta":{"node-LatLon":{"lon":-1080142771,"lat":416676687}}},{"delta":{"node-LatLon":{"lon":-1080066436,"lat":416686950}}},{"delta":{"node-LatLon":{"lon":-1079990643,"lat":416697179}}},{"delta":{"node-LatLon":{"lon":-1079914851,"lat":416707417}}},{"delta":{"node-LatLon":{"lon":-1079842371,"lat":416727176}}},{"delta":{"node-LatLon":{"lon":-1079792300,"lat":416749998}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416331711,"long":-1082645377}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31410}},"msgCnt":42}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.7625,"latitude":41.1023509,"speed":22.96,"longitude":-105.048075},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":27,"serialNumber":15456,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31413,"packetID":"0000000000000974CF","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411380266,"long":-1053516546},"name":"westbound_I80_332.29_328.74_SAT-33F06F41_VSL_V002179","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053530152,"lat":411390760}}},{"delta":{"node-LatLon":{"lon":-1053544178,"lat":411400926}}},{"delta":{"node-LatLon":{"lon":-1053559400,"lat":411410052}}},{"delta":{"node-LatLon":{"lon":-1053575650,"lat":411418098}}},{"delta":{"node-LatLon":{"lon":-1053593540,"lat":411425178}}},{"delta":{"node-LatLon":{"lon":-1053612259,"lat":411430899}}},{"delta":{"node-LatLon":{"lon":-1053631611,"lat":411435251}}},{"delta":{"node-LatLon":{"lon":-1053651429,"lat":411438163}}},{"delta":{"node-LatLon":{"lon":-1053671518,"lat":411439715}}},{"delta":{"node-LatLon":{"lon":-1053691660,"lat":411440843}}},{"delta":{"node-LatLon":{"lon":-1053711798,"lat":411442014}}},{"delta":{"node-LatLon":{"lon":-1053731780,"lat":411444206}}},{"delta":{"node-LatLon":{"lon":-1053751386,"lat":411447856}}},{"delta":{"node-LatLon":{"lon":-1053770441,"lat":411452906}}},{"delta":{"node-LatLon":{"lon":-1053788278,"lat":411458052}}},{"delta":{"node-LatLon":{"lon":-1053806111,"lat":411463205}}},{"delta":{"node-LatLon":{"lon":-1053823914,"lat":411468418}}},{"delta":{"node-LatLon":{"lon":-1053841210,"lat":411474512}}},{"delta":{"node-LatLon":{"lon":-1053857700,"lat":411481776}}},{"delta":{"node-LatLon":{"lon":-1053873524,"lat":411489854}}},{"delta":{"node-LatLon":{"lon":-1053889263,"lat":411498027}}},{"delta":{"node-LatLon":{"lon":-1053905019,"lat":411506182}}},{"delta":{"node-LatLon":{"lon":-1053920800,"lat":411514309}}},{"delta":{"node-LatLon":{"lon":-1053936557,"lat":411522463}}},{"delta":{"node-LatLon":{"lon":-1053951905,"lat":411530400}}},{"delta":{"node-LatLon":{"lon":-1053967181,"lat":411538416}}},{"delta":{"node-LatLon":{"lon":-1053982070,"lat":411546836}}},{"delta":{"node-LatLon":{"lon":-1053996450,"lat":411555749}}},{"delta":{"node-LatLon":{"lon":-1054010245,"lat":411565176}}},{"delta":{"node-LatLon":{"lon":-1054023504,"lat":411575034}}},{"delta":{"node-LatLon":{"lon":-1054036337,"lat":411585207}}},{"delta":{"node-LatLon":{"lon":-1054048431,"lat":411595888}}},{"delta":{"node-LatLon":{"lon":-1054059788,"lat":411607021}}},{"delta":{"node-LatLon":{"lon":-1054070551,"lat":411618485}}},{"delta":{"node-LatLon":{"lon":-1054080907,"lat":411630774}}},{"delta":{"node-LatLon":{"lon":-1054090598,"lat":411643369}}},{"delta":{"node-LatLon":{"lon":-1054099821,"lat":411656166}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411380266,"long":-1053516546}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31413}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.7625,"latitude":41.1023509,"speed":22.96,"longitude":-105.048075},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":26,"serialNumber":15455,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31529,"packetID":"000000000000067287","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411261912,"long":-1053190756},"name":"westbound_I80_334.3_332.29_SAT-7CB2A0D8_VSL_V002205","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053209808,"lat":411263198}}},{"delta":{"node-LatLon":{"lon":-1053228859,"lat":411264489}}},{"delta":{"node-LatLon":{"lon":-1053247874,"lat":411266056}}},{"delta":{"node-LatLon":{"lon":-1053266797,"lat":411268154}}},{"delta":{"node-LatLon":{"lon":-1053284753,"lat":411270823}}},{"delta":{"node-LatLon":{"lon":-1053302624,"lat":411273801}}},{"delta":{"node-LatLon":{"lon":-1053320485,"lat":411276816}}},{"delta":{"node-LatLon":{"lon":-1053338337,"lat":411279861}}},{"delta":{"node-LatLon":{"lon":-1053356049,"lat":411283332}}},{"delta":{"node-LatLon":{"lon":-1053373293,"lat":411287955}}},{"delta":{"node-LatLon":{"lon":-1053389921,"lat":411293728}}},{"delta":{"node-LatLon":{"lon":-1053405816,"lat":411300582}}},{"delta":{"node-LatLon":{"lon":-1053420870,"lat":411308448}}},{"delta":{"node-LatLon":{"lon":-1053434927,"lat":411317306}}},{"delta":{"node-LatLon":{"lon":-1053448810,"lat":411327586}}},{"delta":{"node-LatLon":{"lon":-1053462344,"lat":411338132}}},{"delta":{"node-LatLon":{"lon":-1053475910,"lat":411348654}}},{"delta":{"node-LatLon":{"lon":-1053489459,"lat":411359188}}},{"delta":{"node-LatLon":{"lon":-1053503009,"lat":411369723}}},{"delta":{"node-LatLon":{"lon":-1053516546,"lat":411380266}}},{"delta":{"node-LatLon":{"lon":-1053530152,"lat":411390760}}},{"delta":{"node-LatLon":{"lon":-1053544178,"lat":411400926}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411261912,"long":-1053190756}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31529}},"msgCnt":25}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.7625,"latitude":41.1023469,"speed":22.96,"longitude":-105.0481018},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":25,"serialNumber":15454,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.152Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31413,"packetID":"000000000000021245","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412730636,"long":-1055022420},"name":"westbound_I80_318.5_316.0_SAT-A649856C_VSL_V003668","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055038524,"lat":412737393}}},{"delta":{"node-LatLon":{"lon":-1055054603,"lat":412744185}}},{"delta":{"node-LatLon":{"lon":-1055070731,"lat":412750911}}},{"delta":{"node-LatLon":{"lon":-1055086830,"lat":412757675}}},{"delta":{"node-LatLon":{"lon":-1055102919,"lat":412764454}}},{"delta":{"node-LatLon":{"lon":-1055119050,"lat":412771172}}},{"delta":{"node-LatLon":{"lon":-1055134655,"lat":412779343}}},{"delta":{"node-LatLon":{"lon":-1055148584,"lat":412789095}}},{"delta":{"node-LatLon":{"lon":-1055160661,"lat":412800171}}},{"delta":{"node-LatLon":{"lon":-1055171718,"lat":412811853}}},{"delta":{"node-LatLon":{"lon":-1055182800,"lat":412823521}}},{"delta":{"node-LatLon":{"lon":-1055193934,"lat":412835162}}},{"delta":{"node-LatLon":{"lon":-1055205033,"lat":412846820}}},{"delta":{"node-LatLon":{"lon":-1055216089,"lat":412858504}}},{"delta":{"node-LatLon":{"lon":-1055227100,"lat":412870211}}},{"delta":{"node-LatLon":{"lon":-1055238096,"lat":412881927}}},{"delta":{"node-LatLon":{"lon":-1055249775,"lat":412893620}}},{"delta":{"node-LatLon":{"lon":-1055264147,"lat":412903395}}},{"delta":{"node-LatLon":{"lon":-1055281500,"lat":412909856}}},{"delta":{"node-LatLon":{"lon":-1055300530,"lat":412912497}}},{"delta":{"node-LatLon":{"lon":-1055319936,"lat":412912720}}},{"delta":{"node-LatLon":{"lon":-1055339348,"lat":412912757}}},{"delta":{"node-LatLon":{"lon":-1055358760,"lat":412912763}}},{"delta":{"node-LatLon":{"lon":-1055378172,"lat":412912749}}},{"delta":{"node-LatLon":{"lon":-1055397583,"lat":412912794}}},{"delta":{"node-LatLon":{"lon":-1055416995,"lat":412912799}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412730636,"long":-1055022420}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31413}},"msgCnt":16}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.8,"latitude":41.1023428,"speed":22.84,"longitude":-105.0481287},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":24,"serialNumber":15453,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.152Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31529,"packetID":"000000000000074F73","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411295468,"long":-1053412343},"name":"eastbound_I80_333.32_336.16_SAT-04EA5301_VSL_V002192","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053397283,"lat":411286440}}},{"delta":{"node-LatLon":{"lon":-1053381215,"lat":411278476}}},{"delta":{"node-LatLon":{"lon":-1053364267,"lat":411271631}}},{"delta":{"node-LatLon":{"lon":-1053346537,"lat":411266040}}},{"delta":{"node-LatLon":{"lon":-1053328222,"lat":411261661}}},{"delta":{"node-LatLon":{"lon":-1053309440,"lat":411258607}}},{"delta":{"node-LatLon":{"lon":-1053290366,"lat":411256889}}},{"delta":{"node-LatLon":{"lon":-1053271167,"lat":411256326}}},{"delta":{"node-LatLon":{"lon":-1053252031,"lat":411256011}}},{"delta":{"node-LatLon":{"lon":-1053232894,"lat":411255714}}},{"delta":{"node-LatLon":{"lon":-1053213757,"lat":411255411}}},{"delta":{"node-LatLon":{"lon":-1053194621,"lat":411255101}}},{"delta":{"node-LatLon":{"lon":-1053175485,"lat":411254779}}},{"delta":{"node-LatLon":{"lon":-1053156349,"lat":411254454}}},{"delta":{"node-LatLon":{"lon":-1053137212,"lat":411254156}}},{"delta":{"node-LatLon":{"lon":-1053118075,"lat":411253866}}},{"delta":{"node-LatLon":{"lon":-1053098943,"lat":411253445}}},{"delta":{"node-LatLon":{"lon":-1053079915,"lat":411251929}}},{"delta":{"node-LatLon":{"lon":-1053061014,"lat":411249645}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}},{"delta":{"node-LatLon":{"lon":-1053023237,"lat":411244960}}},{"delta":{"node-LatLon":{"lon":-1053004357,"lat":411242579}}},{"delta":{"node-LatLon":{"lon":-1052985469,"lat":411240234}}},{"delta":{"node-LatLon":{"lon":-1052966667,"lat":411237536}}},{"delta":{"node-LatLon":{"lon":-1052948155,"lat":411233869}}},{"delta":{"node-LatLon":{"lon":-1052930037,"lat":411229208}}},{"delta":{"node-LatLon":{"lon":-1052912393,"lat":411223601}}},{"delta":{"node-LatLon":{"lon":-1052895308,"lat":411217079}}},{"delta":{"node-LatLon":{"lon":-1052878140,"lat":411209333}}},{"delta":{"node-LatLon":{"lon":-1052861535,"lat":411200909}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411295468,"long":-1053412343}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31529}},"msgCnt":23}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.8,"latitude":41.1023428,"speed":22.84,"longitude":-105.0481287},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":23,"serialNumber":15452,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.052Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31475,"packetID":"0000000000000C3025","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411544031,"long":-1053986991},"name":"eastbound_I80_329.88_333.32_SAT-B0A8A48A_VSL_V002170","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053971893,"lat":411535445}}},{"delta":{"node-LatLon":{"lon":-1053956403,"lat":411527267}}},{"delta":{"node-LatLon":{"lon":-1053940802,"lat":411519210}}},{"delta":{"node-LatLon":{"lon":-1053925020,"lat":411511050}}},{"delta":{"node-LatLon":{"lon":-1053909255,"lat":411502872}}},{"delta":{"node-LatLon":{"lon":-1053893491,"lat":411494693}}},{"delta":{"node-LatLon":{"lon":-1053877704,"lat":411486540}}},{"delta":{"node-LatLon":{"lon":-1053861842,"lat":411478470}}},{"delta":{"node-LatLon":{"lon":-1053845388,"lat":411471122}}},{"delta":{"node-LatLon":{"lon":-1053828169,"lat":411464855}}},{"delta":{"node-LatLon":{"lon":-1053810387,"lat":411459552}}},{"delta":{"node-LatLon":{"lon":-1053792523,"lat":411454408}}},{"delta":{"node-LatLon":{"lon":-1053774674,"lat":411449233}}},{"delta":{"node-LatLon":{"lon":-1053756865,"lat":411444076}}},{"delta":{"node-LatLon":{"lon":-1053739051,"lat":411438927}}},{"delta":{"node-LatLon":{"lon":-1053721237,"lat":411433777}}},{"delta":{"node-LatLon":{"lon":-1053703432,"lat":411428613}}},{"delta":{"node-LatLon":{"lon":-1053685615,"lat":411423471}}},{"delta":{"node-LatLon":{"lon":-1053667804,"lat":411418317}}},{"delta":{"node-LatLon":{"lon":-1053649988,"lat":411413175}}},{"delta":{"node-LatLon":{"lon":-1053632183,"lat":411408010}}},{"delta":{"node-LatLon":{"lon":-1053614378,"lat":411402847}}},{"delta":{"node-LatLon":{"lon":-1053596576,"lat":411397677}}},{"delta":{"node-LatLon":{"lon":-1053578772,"lat":411392366}}},{"delta":{"node-LatLon":{"lon":-1053561555,"lat":411386056}}},{"delta":{"node-LatLon":{"lon":-1053545194,"lat":411378553}}},{"delta":{"node-LatLon":{"lon":-1053529834,"lat":411369925}}},{"delta":{"node-LatLon":{"lon":-1053515122,"lat":411360665}}},{"delta":{"node-LatLon":{"lon":-1053500460,"lat":411351359}}},{"delta":{"node-LatLon":{"lon":-1053485794,"lat":411342057}}},{"delta":{"node-LatLon":{"lon":-1053471129,"lat":411332755}}},{"delta":{"node-LatLon":{"lon":-1053456470,"lat":411323446}}},{"delta":{"node-LatLon":{"lon":-1053441803,"lat":411314147}}},{"delta":{"node-LatLon":{"lon":-1053427082,"lat":411304799}}},{"delta":{"node-LatLon":{"lon":-1053412343,"lat":411295468}}},{"delta":{"node-LatLon":{"lon":-1053397283,"lat":411286440}}},{"delta":{"node-LatLon":{"lon":-1053381215,"lat":411278476}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411544031,"long":-1053986991}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31475}},"msgCnt":21}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9,"latitude":41.1023389,"speed":22.8,"longitude":-105.0481553},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":22,"serialNumber":15451,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.052Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31584,"packetID":"0000000000000D2C74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412034419,"long":-1054370810},"name":"eastbound_I80_325.82_329.88_SAT-99766A8D_VSL_V002155","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054359947,"lat":412022723}}},{"delta":{"node-LatLon":{"lon":-1054349054,"lat":412011044}}},{"delta":{"node-LatLon":{"lon":-1054338178,"lat":411999356}}},{"delta":{"node-LatLon":{"lon":-1054327183,"lat":411987515}}},{"delta":{"node-LatLon":{"lon":-1054316162,"lat":411975689}}},{"delta":{"node-LatLon":{"lon":-1054305136,"lat":411963865}}},{"delta":{"node-LatLon":{"lon":-1054294112,"lat":411952041}}},{"delta":{"node-LatLon":{"lon":-1054283086,"lat":411940217}}},{"delta":{"node-LatLon":{"lon":-1054272088,"lat":411928378}}},{"delta":{"node-LatLon":{"lon":-1054261070,"lat":411916551}}},{"delta":{"node-LatLon":{"lon":-1054250145,"lat":411904675}}},{"delta":{"node-LatLon":{"lon":-1054240737,"lat":411892089}}},{"delta":{"node-LatLon":{"lon":-1054233306,"lat":411878767}}},{"delta":{"node-LatLon":{"lon":-1054228088,"lat":411864884}}},{"delta":{"node-LatLon":{"lon":-1054224664,"lat":411850678}}},{"delta":{"node-LatLon":{"lon":-1054221515,"lat":411836434}}},{"delta":{"node-LatLon":{"lon":-1054217864,"lat":411822261}}},{"delta":{"node-LatLon":{"lon":-1054212576,"lat":411808389}}},{"delta":{"node-LatLon":{"lon":-1054205670,"lat":411794929}}},{"delta":{"node-LatLon":{"lon":-1054197171,"lat":411782001}}},{"delta":{"node-LatLon":{"lon":-1054188029,"lat":411769320}}},{"delta":{"node-LatLon":{"lon":-1054178851,"lat":411756655}}},{"delta":{"node-LatLon":{"lon":-1054169702,"lat":411743977}}},{"delta":{"node-LatLon":{"lon":-1054160547,"lat":411731223}}},{"delta":{"node-LatLon":{"lon":-1054151325,"lat":411718495}}},{"delta":{"node-LatLon":{"lon":-1054142157,"lat":411705746}}},{"delta":{"node-LatLon":{"lon":-1054132917,"lat":411693026}}},{"delta":{"node-LatLon":{"lon":-1054123777,"lat":411680265}}},{"delta":{"node-LatLon":{"lon":-1054114539,"lat":411667545}}},{"delta":{"node-LatLon":{"lon":-1054105341,"lat":411654808}}},{"delta":{"node-LatLon":{"lon":-1054096134,"lat":411642075}}},{"delta":{"node-LatLon":{"lon":-1054086588,"lat":411629487}}},{"delta":{"node-LatLon":{"lon":-1054076298,"lat":411617239}}},{"delta":{"node-LatLon":{"lon":-1054065465,"lat":411605534}}},{"delta":{"node-LatLon":{"lon":-1054053933,"lat":411594218}}},{"delta":{"node-LatLon":{"lon":-1054041764,"lat":411583290}}},{"delta":{"node-LatLon":{"lon":-1054029028,"lat":411572740}}},{"delta":{"node-LatLon":{"lon":-1054015535,"lat":411562740}}},{"delta":{"node-LatLon":{"lon":-1054001524,"lat":411553158}}},{"delta":{"node-LatLon":{"lon":-1053986991,"lat":411544031}}},{"delta":{"node-LatLon":{"lon":-1053971893,"lat":411535445}}},{"delta":{"node-LatLon":{"lon":-1053956403,"lat":411527267}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000011100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412034419,"long":-1054370810}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31584}},"msgCnt":23}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9,"latitude":41.1023389,"speed":22.8,"longitude":-105.0481553},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":21,"serialNumber":15450,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.952Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31413,"packetID":"0000000000000F6CF3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412309017,"long":-1054379125},"name":"eastbound_I80_323.85_325.82_SAT-0405F53D_VSL_V002136","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054386377,"lat":412295717}}},{"delta":{"node-LatLon":{"lon":-1054390587,"lat":412281719}}},{"delta":{"node-LatLon":{"lon":-1054390501,"lat":412267361}}},{"delta":{"node-LatLon":{"lon":-1054387340,"lat":412253070}}},{"delta":{"node-LatLon":{"lon":-1054384188,"lat":412238776}}},{"delta":{"node-LatLon":{"lon":-1054383083,"lat":412224323}}},{"delta":{"node-LatLon":{"lon":-1054385250,"lat":412209941}}},{"delta":{"node-LatLon":{"lon":-1054389797,"lat":412195863}}},{"delta":{"node-LatLon":{"lon":-1054394498,"lat":412181812}}},{"delta":{"node-LatLon":{"lon":-1054399238,"lat":412167769}}},{"delta":{"node-LatLon":{"lon":-1054403962,"lat":412153723}}},{"delta":{"node-LatLon":{"lon":-1054408711,"lat":412139682}}},{"delta":{"node-LatLon":{"lon":-1054413260,"lat":412125813}}},{"delta":{"node-LatLon":{"lon":-1054415782,"lat":412111677}}},{"delta":{"node-LatLon":{"lon":-1054414034,"lat":412097480}}},{"delta":{"node-LatLon":{"lon":-1054408252,"lat":412083905}}},{"delta":{"node-LatLon":{"lon":-1054400204,"lat":412070975}}},{"delta":{"node-LatLon":{"lon":-1054391746,"lat":412058198}}},{"delta":{"node-LatLon":{"lon":-1054381691,"lat":412046104}}},{"delta":{"node-LatLon":{"lon":-1054370810,"lat":412034419}}},{"delta":{"node-LatLon":{"lon":-1054359947,"lat":412022723}}},{"delta":{"node-LatLon":{"lon":-1054349054,"lat":412011044}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000001110000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412309017,"long":-1054379125}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31413}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9,"latitude":41.1023349,"speed":22.72,"longitude":-105.0481818},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":20,"serialNumber":15449,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":24569,"packetID":"000000000000031CC6","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414407115,"long":-1059458100},"name":"eastbound_I80_290.44_313.19_SAT-60A2FC8C_RC_LARI80WQDHLI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059365846,"lat":414393512}}},{"delta":{"node-LatLon":{"lon":-1059291346,"lat":414382504}}},{"delta":{"node-LatLon":{"lon":-1059216139,"lat":414371403}}},{"delta":{"node-LatLon":{"lon":-1059140930,"lat":414360321}}},{"delta":{"node-LatLon":{"lon":-1059066277,"lat":414349272}}},{"delta":{"node-LatLon":{"lon":-1058991615,"lat":414338261}}},{"delta":{"node-LatLon":{"lon":-1058917936,"lat":414323988}}},{"delta":{"node-LatLon":{"lon":-1058850449,"lat":414297022}}},{"delta":{"node-LatLon":{"lon":-1058783417,"lat":414269380}}},{"delta":{"node-LatLon":{"lon":-1058716328,"lat":414241773}}},{"delta":{"node-LatLon":{"lon":-1058649253,"lat":414214149}}},{"delta":{"node-LatLon":{"lon":-1058581712,"lat":414186261}}},{"delta":{"node-LatLon":{"lon":-1058513627,"lat":414158213}}},{"delta":{"node-LatLon":{"lon":-1058445557,"lat":414130150}}},{"delta":{"node-LatLon":{"lon":-1058380711,"lat":414099504}}},{"delta":{"node-LatLon":{"lon":-1058332454,"lat":414054913}}},{"delta":{"node-LatLon":{"lon":-1058291219,"lat":414005996}}},{"delta":{"node-LatLon":{"lon":-1058249903,"lat":413956936}}},{"delta":{"node-LatLon":{"lon":-1058208508,"lat":413907914}}},{"delta":{"node-LatLon":{"lon":-1058167409,"lat":413859113}}},{"delta":{"node-LatLon":{"lon":-1058121254,"lat":413813192}}},{"delta":{"node-LatLon":{"lon":-1058059188,"lat":413779109}}},{"delta":{"node-LatLon":{"lon":-1057994981,"lat":413746928}}},{"delta":{"node-LatLon":{"lon":-1057930809,"lat":413714712}}},{"delta":{"node-LatLon":{"lon":-1057867697,"lat":413683015}}},{"delta":{"node-LatLon":{"lon":-1057804579,"lat":413651328}}},{"delta":{"node-LatLon":{"lon":-1057737049,"lat":413623514}}},{"delta":{"node-LatLon":{"lon":-1057662967,"lat":413603704}}},{"delta":{"node-LatLon":{"lon":-1057588887,"lat":413583895}}},{"delta":{"node-LatLon":{"lon":-1057516296,"lat":413564544}}},{"delta":{"node-LatLon":{"lon":-1057443317,"lat":413546135}}},{"delta":{"node-LatLon":{"lon":-1057367878,"lat":413535221}}},{"delta":{"node-LatLon":{"lon":-1057292600,"lat":413524353}}},{"delta":{"node-LatLon":{"lon":-1057217299,"lat":413513586}}},{"delta":{"node-LatLon":{"lon":-1057141027,"lat":413502656}}},{"delta":{"node-LatLon":{"lon":-1057064747,"lat":413491760}}},{"delta":{"node-LatLon":{"lon":-1056989068,"lat":413498824}}},{"delta":{"node-LatLon":{"lon":-1056912831,"lat":413504721}}},{"delta":{"node-LatLon":{"lon":-1056835658,"lat":413504909}}},{"delta":{"node-LatLon":{"lon":-1056757891,"lat":413505054}}},{"delta":{"node-LatLon":{"lon":-1056680124,"lat":413505252}}},{"delta":{"node-LatLon":{"lon":-1056603037,"lat":413505384}}},{"delta":{"node-LatLon":{"lon":-1056526628,"lat":413505543}}},{"delta":{"node-LatLon":{"lon":-1056450220,"lat":413505586}}},{"delta":{"node-LatLon":{"lon":-1056377627,"lat":413489027}}},{"delta":{"node-LatLon":{"lon":-1056311828,"lat":413459176}}},{"delta":{"node-LatLon":{"lon":-1056245669,"lat":413429174}}},{"delta":{"node-LatLon":{"lon":-1056183282,"lat":413395071}}},{"delta":{"node-LatLon":{"lon":-1056165228,"lat":413339197}}},{"delta":{"node-LatLon":{"lon":-1056160367,"lat":413283836}}},{"delta":{"node-LatLon":{"lon":-1056155562,"lat":413228473}}},{"delta":{"node-LatLon":{"lon":-1056150632,"lat":413171501}}},{"delta":{"node-LatLon":{"lon":-1056145513,"lat":413112925}}},{"delta":{"node-LatLon":{"lon":-1056139692,"lat":413054402}}},{"delta":{"node-LatLon":{"lon":-1056094488,"lat":413014131}}},{"delta":{"node-LatLon":{"lon":-1056025680,"lat":412995553}}},{"delta":{"node-LatLon":{"lon":-1055953535,"lat":412976113}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414407115,"long":-1059458100}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":6011}},{"item":{"itis":5127}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":24569}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79.05,"latitude":41.102331,"speed":22.66,"longitude":-105.0482085},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":19,"serialNumber":15448,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":24569,"packetID":"000000000000066E2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414407115,"long":-1059458100},"name":"eastbound_I80_290.44_313.19_SAT-8CF74104_RC_LARI80WQDHLI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059365846,"lat":414393512}}},{"delta":{"node-LatLon":{"lon":-1059291346,"lat":414382504}}},{"delta":{"node-LatLon":{"lon":-1059216139,"lat":414371403}}},{"delta":{"node-LatLon":{"lon":-1059140930,"lat":414360321}}},{"delta":{"node-LatLon":{"lon":-1059066277,"lat":414349272}}},{"delta":{"node-LatLon":{"lon":-1058991615,"lat":414338261}}},{"delta":{"node-LatLon":{"lon":-1058917936,"lat":414323988}}},{"delta":{"node-LatLon":{"lon":-1058850449,"lat":414297022}}},{"delta":{"node-LatLon":{"lon":-1058783417,"lat":414269380}}},{"delta":{"node-LatLon":{"lon":-1058716328,"lat":414241773}}},{"delta":{"node-LatLon":{"lon":-1058649253,"lat":414214149}}},{"delta":{"node-LatLon":{"lon":-1058581712,"lat":414186261}}},{"delta":{"node-LatLon":{"lon":-1058513627,"lat":414158213}}},{"delta":{"node-LatLon":{"lon":-1058445557,"lat":414130150}}},{"delta":{"node-LatLon":{"lon":-1058380711,"lat":414099504}}},{"delta":{"node-LatLon":{"lon":-1058332454,"lat":414054913}}},{"delta":{"node-LatLon":{"lon":-1058291219,"lat":414005996}}},{"delta":{"node-LatLon":{"lon":-1058249903,"lat":413956936}}},{"delta":{"node-LatLon":{"lon":-1058208508,"lat":413907914}}},{"delta":{"node-LatLon":{"lon":-1058167409,"lat":413859113}}},{"delta":{"node-LatLon":{"lon":-1058121254,"lat":413813192}}},{"delta":{"node-LatLon":{"lon":-1058059188,"lat":413779109}}},{"delta":{"node-LatLon":{"lon":-1057994981,"lat":413746928}}},{"delta":{"node-LatLon":{"lon":-1057930809,"lat":413714712}}},{"delta":{"node-LatLon":{"lon":-1057867697,"lat":413683015}}},{"delta":{"node-LatLon":{"lon":-1057804579,"lat":413651328}}},{"delta":{"node-LatLon":{"lon":-1057737049,"lat":413623514}}},{"delta":{"node-LatLon":{"lon":-1057662967,"lat":413603704}}},{"delta":{"node-LatLon":{"lon":-1057588887,"lat":413583895}}},{"delta":{"node-LatLon":{"lon":-1057516296,"lat":413564544}}},{"delta":{"node-LatLon":{"lon":-1057443317,"lat":413546135}}},{"delta":{"node-LatLon":{"lon":-1057367878,"lat":413535221}}},{"delta":{"node-LatLon":{"lon":-1057292600,"lat":413524353}}},{"delta":{"node-LatLon":{"lon":-1057217299,"lat":413513586}}},{"delta":{"node-LatLon":{"lon":-1057141027,"lat":413502656}}},{"delta":{"node-LatLon":{"lon":-1057064747,"lat":413491760}}},{"delta":{"node-LatLon":{"lon":-1056989068,"lat":413498824}}},{"delta":{"node-LatLon":{"lon":-1056912831,"lat":413504721}}},{"delta":{"node-LatLon":{"lon":-1056835658,"lat":413504909}}},{"delta":{"node-LatLon":{"lon":-1056757891,"lat":413505054}}},{"delta":{"node-LatLon":{"lon":-1056680124,"lat":413505252}}},{"delta":{"node-LatLon":{"lon":-1056603037,"lat":413505384}}},{"delta":{"node-LatLon":{"lon":-1056526628,"lat":413505543}}},{"delta":{"node-LatLon":{"lon":-1056450220,"lat":413505586}}},{"delta":{"node-LatLon":{"lon":-1056377627,"lat":413489027}}},{"delta":{"node-LatLon":{"lon":-1056311828,"lat":413459176}}},{"delta":{"node-LatLon":{"lon":-1056245669,"lat":413429174}}},{"delta":{"node-LatLon":{"lon":-1056183282,"lat":413395071}}},{"delta":{"node-LatLon":{"lon":-1056165228,"lat":413339197}}},{"delta":{"node-LatLon":{"lon":-1056160367,"lat":413283836}}},{"delta":{"node-LatLon":{"lon":-1056155562,"lat":413228473}}},{"delta":{"node-LatLon":{"lon":-1056150632,"lat":413171501}}},{"delta":{"node-LatLon":{"lon":-1056145513,"lat":413112925}}},{"delta":{"node-LatLon":{"lon":-1056139692,"lat":413054402}}},{"delta":{"node-LatLon":{"lon":-1056094488,"lat":413014131}}},{"delta":{"node-LatLon":{"lon":-1056025680,"lat":412995553}}},{"delta":{"node-LatLon":{"lon":-1055953535,"lat":412976113}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414407115,"long":-1059458100}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":6011}},{"item":{"itis":5127}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":24569}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79.05,"latitude":41.102331,"speed":22.66,"longitude":-105.0482085},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":18,"serialNumber":15447,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.756Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":24213,"packetID":"00000000000003F64F","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411251929,"long":-1053079915},"name":"eastbound_I80_335.11_348.36_SAT-70957D0D_RC_CHEYI80WHARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053061014,"lat":411249645}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}},{"delta":{"node-LatLon":{"lon":-1052966667,"lat":411237536}}},{"delta":{"node-LatLon":{"lon":-1052895308,"lat":411217079}}},{"delta":{"node-LatLon":{"lon":-1052828416,"lat":411183958}}},{"delta":{"node-LatLon":{"lon":-1052762243,"lat":411149986}}},{"delta":{"node-LatLon":{"lon":-1052694431,"lat":411120945}}},{"delta":{"node-LatLon":{"lon":-1052623255,"lat":411100002}}},{"delta":{"node-LatLon":{"lon":-1052552081,"lat":411079062}}},{"delta":{"node-LatLon":{"lon":-1052479703,"lat":411059291}}},{"delta":{"node-LatLon":{"lon":-1052404522,"lat":411047559}}},{"delta":{"node-LatLon":{"lon":-1052327830,"lat":411046722}}},{"delta":{"node-LatLon":{"lon":-1052251668,"lat":411043133}}},{"delta":{"node-LatLon":{"lon":-1052181375,"lat":411021106}}},{"delta":{"node-LatLon":{"lon":-1052115683,"lat":410991356}}},{"delta":{"node-LatLon":{"lon":-1052050763,"lat":410960746}}},{"delta":{"node-LatLon":{"lon":-1051976364,"lat":410951581}}},{"delta":{"node-LatLon":{"lon":-1051901229,"lat":410960621}}},{"delta":{"node-LatLon":{"lon":-1051825257,"lat":410964045}}},{"delta":{"node-LatLon":{"lon":-1051748594,"lat":410968835}}},{"delta":{"node-LatLon":{"lon":-1051672128,"lat":410975297}}},{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411251929,"long":-1053079915}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":6011}},{"item":{"itis":5127}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":24213}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.102327,"speed":22.54,"longitude":-105.0482348},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":17,"serialNumber":15446,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.756Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":23113,"packetID":"000000000000064D7E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412669811,"long":-1109265496},"name":"eastbound_I80_6.94_8.45_SAT-C9A7ABD9_VSL_V004766","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1109245942,"lat":412667616}}},{"delta":{"node-LatLon":{"lon":-1109227078,"lat":412665173}}},{"delta":{"node-LatLon":{"lon":-1109208218,"lat":412662718}}},{"delta":{"node-LatLon":{"lon":-1109189533,"lat":412659588}}},{"delta":{"node-LatLon":{"lon":-1109170944,"lat":412656149}}},{"delta":{"node-LatLon":{"lon":-1109152362,"lat":412652687}}},{"delta":{"node-LatLon":{"lon":-1109133790,"lat":412649197}}},{"delta":{"node-LatLon":{"lon":-1109115215,"lat":412645713}}},{"delta":{"node-LatLon":{"lon":-1109096639,"lat":412642235}}},{"delta":{"node-LatLon":{"lon":-1109078070,"lat":412638736}}},{"delta":{"node-LatLon":{"lon":-1109059500,"lat":412635242}}},{"delta":{"node-LatLon":{"lon":-1109040676,"lat":412631705}}},{"delta":{"node-LatLon":{"lon":-1109021836,"lat":412628219}}},{"delta":{"node-LatLon":{"lon":-1109002866,"lat":412625167}}},{"delta":{"node-LatLon":{"lon":-1108983731,"lat":412622770}}},{"delta":{"node-LatLon":{"lon":-1108964506,"lat":412620829}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412669811,"long":-1109265496}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":23113}},"msgCnt":7}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.102327,"speed":22.54,"longitude":-105.0482348},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":16,"serialNumber":15445,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":21060,"packetID":212300001125002224,"urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411709740,"long":-1048394120},"name":"wydot_sirius_4_2_SAT-7EFD0225","laneWidth":20000,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048393730,"lat":411712450}}},{"delta":{"node-LatLon":{"lon":-1048383840,"lat":411767010}}},{"delta":{"node-LatLon":{"lon":-1048380500,"lat":411794860}}},{"delta":{"node-LatLon":{"lon":-1048379990,"lat":411809560}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411751930,"long":-1048286330}}},"priority":6,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":2574}},{"item":{"itis":12712}},{"item":{"itis":8709}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":21060}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79.1375,"latitude":41.1023232,"speed":22.5,"longitude":-105.0482612},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":15,"serialNumber":15444,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":21060,"packetID":212300001125002223,"urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411606840,"long":-1048289900},"name":"wydot_sirius_3_2_SAT-7EFD0225","laneWidth":10000,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048291070,"lat":411607850}}},{"delta":{"node-LatLon":{"lon":-1048323850,"lat":411632860}}},{"delta":{"node-LatLon":{"lon":-1048323850,"lat":411632860}}},{"delta":{"node-LatLon":{"lon":-1048338000,"lat":411643250}}},{"delta":{"node-LatLon":{"lon":-1048357350,"lat":411654510}}},{"delta":{"node-LatLon":{"lon":-1048383680,"lat":411667660}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411751930,"long":-1048286330}}},"priority":6,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4868}},{"item":{"itis":5907}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":21060}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79.1375,"latitude":41.1023232,"speed":22.5,"longitude":-105.0482612},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":14,"serialNumber":15443,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.551Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":21060,"packetID":212300001125002222,"urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411713780,"long":-1048286250},"name":"wydot_sirius_2_2_SAT-7EFD0225","laneWidth":10000,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048286250,"lat":411712160}}},{"delta":{"node-LatLon":{"lon":-1048287580,"lat":411641030}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000001111000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411751930,"long":-1048286330}}},"priority":6,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12579}},{"item":{"itis":8720}},{"item":{"itis":1025}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":21060}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023195,"speed":22.4,"longitude":-105.0482875},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":13,"serialNumber":15442,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":21060,"packetID":212300001125002221,"urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411751930,"long":-1048286330},"name":"wydot_sirius_1_2_SAT-7EFD0225","laneWidth":10000,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048286640,"lat":411748120}}},{"delta":{"node-LatLon":{"lon":-1048286110,"lat":411713600}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000001111000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411751930,"long":-1048286330}}},"priority":6,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":7443}},{"item":{"itis":12579}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":21060}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023157,"speed":22.22,"longitude":-105.0483139},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":12,"serialNumber":15441,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31504,"packetID":"0000000000000C6FA0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415389123,"long":-1060795306},"name":"eastbound_I80_280.36_291.0_SAT-9970CD4E_VSL_V000417","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060783562,"lat":415377559}}},{"delta":{"node-LatLon":{"lon":-1060772024,"lat":415365878}}},{"delta":{"node-LatLon":{"lon":-1060748924,"lat":415342529}}},{"delta":{"node-LatLon":{"lon":-1060725901,"lat":415319138}}},{"delta":{"node-LatLon":{"lon":-1060702891,"lat":415295740}}},{"delta":{"node-LatLon":{"lon":-1060677392,"lat":415274709}}},{"delta":{"node-LatLon":{"lon":-1060645465,"lat":415259440}}},{"delta":{"node-LatLon":{"lon":-1060611694,"lat":415246452}}},{"delta":{"node-LatLon":{"lon":-1060583936,"lat":415227230}}},{"delta":{"node-LatLon":{"lon":-1060567112,"lat":415201829}}},{"delta":{"node-LatLon":{"lon":-1060559250,"lat":415173268}}},{"delta":{"node-LatLon":{"lon":-1060551848,"lat":415144627}}},{"delta":{"node-LatLon":{"lon":-1060544578,"lat":415115967}}},{"delta":{"node-LatLon":{"lon":-1060537212,"lat":415087321}}},{"delta":{"node-LatLon":{"lon":-1060528192,"lat":415058965}}},{"delta":{"node-LatLon":{"lon":-1060513843,"lat":415031898}}},{"delta":{"node-LatLon":{"lon":-1060498684,"lat":415005075}}},{"delta":{"node-LatLon":{"lon":-1060479584,"lat":414979768}}},{"delta":{"node-LatLon":{"lon":-1060454612,"lat":414957536}}},{"delta":{"node-LatLon":{"lon":-1060424994,"lat":414938765}}},{"delta":{"node-LatLon":{"lon":-1060394265,"lat":414920704}}},{"delta":{"node-LatLon":{"lon":-1060362947,"lat":414903230}}},{"delta":{"node-LatLon":{"lon":-1060331139,"lat":414886261}}},{"delta":{"node-LatLon":{"lon":-1060299282,"lat":414869343}}},{"delta":{"node-LatLon":{"lon":-1060267401,"lat":414852453}}},{"delta":{"node-LatLon":{"lon":-1060236377,"lat":414836034}}},{"delta":{"node-LatLon":{"lon":-1060205413,"lat":414819550}}},{"delta":{"node-LatLon":{"lon":-1060174405,"lat":414803116}}},{"delta":{"node-LatLon":{"lon":-1060143426,"lat":414786651}}},{"delta":{"node-LatLon":{"lon":-1060112442,"lat":414770191}}},{"delta":{"node-LatLon":{"lon":-1060080853,"lat":414753421}}},{"delta":{"node-LatLon":{"lon":-1060049273,"lat":414736640}}},{"delta":{"node-LatLon":{"lon":-1060017699,"lat":414719856}}},{"delta":{"node-LatLon":{"lon":-1059986118,"lat":414703079}}},{"delta":{"node-LatLon":{"lon":-1059954550,"lat":414686289}}},{"delta":{"node-LatLon":{"lon":-1059923262,"lat":414669701}}},{"delta":{"node-LatLon":{"lon":-1059892003,"lat":414653083}}},{"delta":{"node-LatLon":{"lon":-1059860748,"lat":414636462}}},{"delta":{"node-LatLon":{"lon":-1059830894,"lat":414618511}}},{"delta":{"node-LatLon":{"lon":-1059806580,"lat":414596316}}},{"delta":{"node-LatLon":{"lon":-1059783729,"lat":414573041}}},{"delta":{"node-LatLon":{"lon":-1059760839,"lat":414549787}}},{"delta":{"node-LatLon":{"lon":-1059737946,"lat":414526535}}},{"delta":{"node-LatLon":{"lon":-1059715065,"lat":414503278}}},{"delta":{"node-LatLon":{"lon":-1059692206,"lat":414480008}}},{"delta":{"node-LatLon":{"lon":-1059665100,"lat":414457204}}},{"delta":{"node-LatLon":{"lon":-1059630733,"lat":414440918}}},{"delta":{"node-LatLon":{"lon":-1059592047,"lat":414431361}}},{"delta":{"node-LatLon":{"lon":-1059552953,"lat":414422717}}},{"delta":{"node-LatLon":{"lon":-1059513468,"lat":414415217}}},{"delta":{"node-LatLon":{"lon":-1059476558,"lat":414409805}}},{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059402750,"lat":414398944}}},{"delta":{"node-LatLon":{"lon":-1059365846,"lat":414393512}}},{"delta":{"node-LatLon":{"lon":-1059328946,"lat":414388067}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111100000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415389123,"long":-1060795306}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31504}},"msgCnt":25}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023157,"speed":22.22,"longitude":-105.0483139},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":11,"serialNumber":15440,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31475,"packetID":"000000000000028D2E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415887613,"long":-1061814678},"name":"eastbound_I80_273.85_280.36_SAT-307505E1_VSL_V000424","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1061799243,"lat":415878765}}},{"delta":{"node-LatLon":{"lon":-1061768515,"lat":415860933}}},{"delta":{"node-LatLon":{"lon":-1061737747,"lat":415843066}}},{"delta":{"node-LatLon":{"lon":-1061706991,"lat":415825187}}},{"delta":{"node-LatLon":{"lon":-1061676217,"lat":415807327}}},{"delta":{"node-LatLon":{"lon":-1061645463,"lat":415789449}}},{"delta":{"node-LatLon":{"lon":-1061614689,"lat":415771591}}},{"delta":{"node-LatLon":{"lon":-1061584537,"lat":415754086}}},{"delta":{"node-LatLon":{"lon":-1061554447,"lat":415736525}}},{"delta":{"node-LatLon":{"lon":-1061524198,"lat":415719117}}},{"delta":{"node-LatLon":{"lon":-1061494074,"lat":415701589}}},{"delta":{"node-LatLon":{"lon":-1061463879,"lat":415684131}}},{"delta":{"node-LatLon":{"lon":-1061432150,"lat":415667054}}},{"delta":{"node-LatLon":{"lon":-1061396974,"lat":415654391}}},{"delta":{"node-LatLon":{"lon":-1061359292,"lat":415646802}}},{"delta":{"node-LatLon":{"lon":-1061320863,"lat":415641538}}},{"delta":{"node-LatLon":{"lon":-1061282426,"lat":415636308}}},{"delta":{"node-LatLon":{"lon":-1061244922,"lat":415631177}}},{"delta":{"node-LatLon":{"lon":-1061207418,"lat":415626048}}},{"delta":{"node-LatLon":{"lon":-1061169903,"lat":415620964}}},{"delta":{"node-LatLon":{"lon":-1061132571,"lat":415615219}}},{"delta":{"node-LatLon":{"lon":-1061096967,"lat":415605109}}},{"delta":{"node-LatLon":{"lon":-1061064131,"lat":415590319}}},{"delta":{"node-LatLon":{"lon":-1061032943,"lat":415573570}}},{"delta":{"node-LatLon":{"lon":-1061001748,"lat":415556828}}},{"delta":{"node-LatLon":{"lon":-1060970565,"lat":415540075}}},{"delta":{"node-LatLon":{"lon":-1060939622,"lat":415523077}}},{"delta":{"node-LatLon":{"lon":-1060912271,"lat":415503093}}},{"delta":{"node-LatLon":{"lon":-1060888721,"lat":415480493}}},{"delta":{"node-LatLon":{"lon":-1060865425,"lat":415457738}}},{"delta":{"node-LatLon":{"lon":-1060842121,"lat":415434989}}},{"delta":{"node-LatLon":{"lon":-1060818850,"lat":415412221}}},{"delta":{"node-LatLon":{"lon":-1060795306,"lat":415389123}}},{"delta":{"node-LatLon":{"lon":-1060772024,"lat":415365878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415887613,"long":-1061814678}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31475}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023118,"speed":22.22,"longitude":-105.0483399},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":10,"serialNumber":15439,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31503,"packetID":"0000000000000C462C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416299496,"long":-1062778698},"name":"eastbound_I80_267.71_273.85_SAT-54C5D564_VSL_V000428","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062762456,"lat":416291782}}},{"delta":{"node-LatLon":{"lon":-1062745352,"lat":416285198}}},{"delta":{"node-LatLon":{"lon":-1062709133,"lat":416275605}}},{"delta":{"node-LatLon":{"lon":-1062671455,"lat":416268251}}},{"delta":{"node-LatLon":{"lon":-1062633771,"lat":416260915}}},{"delta":{"node-LatLon":{"lon":-1062596100,"lat":416253544}}},{"delta":{"node-LatLon":{"lon":-1062558417,"lat":416246209}}},{"delta":{"node-LatLon":{"lon":-1062520744,"lat":416238847}}},{"delta":{"node-LatLon":{"lon":-1062482895,"lat":416231412}}},{"delta":{"node-LatLon":{"lon":-1062446311,"lat":416221159}}},{"delta":{"node-LatLon":{"lon":-1062413350,"lat":416205439}}},{"delta":{"node-LatLon":{"lon":-1062385484,"lat":416184907}}},{"delta":{"node-LatLon":{"lon":-1062363439,"lat":416160690}}},{"delta":{"node-LatLon":{"lon":-1062344200,"lat":416137119}}},{"delta":{"node-LatLon":{"lon":-1062324886,"lat":416113582}}},{"delta":{"node-LatLon":{"lon":-1062305674,"lat":416089998}}},{"delta":{"node-LatLon":{"lon":-1062286421,"lat":416066433}}},{"delta":{"node-LatLon":{"lon":-1062267158,"lat":416042874}}},{"delta":{"node-LatLon":{"lon":-1062246994,"lat":416018215}}},{"delta":{"node-LatLon":{"lon":-1062222613,"lat":415995969}}},{"delta":{"node-LatLon":{"lon":-1062189595,"lat":415981343}}},{"delta":{"node-LatLon":{"lon":-1062151833,"lat":415976346}}},{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062074266,"lat":415976387}}},{"delta":{"node-LatLon":{"lon":-1062035235,"lat":415976340}}},{"delta":{"node-LatLon":{"lon":-1061996980,"lat":415971514}}},{"delta":{"node-LatLon":{"lon":-1061962779,"lat":415957510}}},{"delta":{"node-LatLon":{"lon":-1061929530,"lat":415942161}}},{"delta":{"node-LatLon":{"lon":-1061896505,"lat":415926815}}},{"delta":{"node-LatLon":{"lon":-1061863465,"lat":415911487}}},{"delta":{"node-LatLon":{"lon":-1061830559,"lat":415896001}}},{"delta":{"node-LatLon":{"lon":-1061799243,"lat":415878765}}},{"delta":{"node-LatLon":{"lon":-1061783879,"lat":415869849}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416299496,"long":-1062778698}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31503}},"msgCnt":34}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023118,"speed":22.22,"longitude":-105.0483399},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":9,"serialNumber":15438,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31503,"packetID":"0000000000000EDB21","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416667387,"long":-1063664504},"name":"eastbound_I80_262.4_267.71_SAT-2AAB775E_VSL_V000433","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1063648291,"lat":416659518}}},{"delta":{"node-LatLon":{"lon":-1063632072,"lat":416651657}}},{"delta":{"node-LatLon":{"lon":-1063615844,"lat":416643807}}},{"delta":{"node-LatLon":{"lon":-1063599618,"lat":416635954}}},{"delta":{"node-LatLon":{"lon":-1063583366,"lat":416628132}}},{"delta":{"node-LatLon":{"lon":-1063567147,"lat":416620270}}},{"delta":{"node-LatLon":{"lon":-1063550917,"lat":416612423}}},{"delta":{"node-LatLon":{"lon":-1063534665,"lat":416604565}}},{"delta":{"node-LatLon":{"lon":-1063518397,"lat":416596725}}},{"delta":{"node-LatLon":{"lon":-1063502152,"lat":416588858}}},{"delta":{"node-LatLon":{"lon":-1063485899,"lat":416581001}}},{"delta":{"node-LatLon":{"lon":-1063469644,"lat":416573146}}},{"delta":{"node-LatLon":{"lon":-1063453403,"lat":416565276}}},{"delta":{"node-LatLon":{"lon":-1063437145,"lat":416557426}}},{"delta":{"node-LatLon":{"lon":-1063420938,"lat":416549517}}},{"delta":{"node-LatLon":{"lon":-1063404651,"lat":416541700}}},{"delta":{"node-LatLon":{"lon":-1063388402,"lat":416533840}}},{"delta":{"node-LatLon":{"lon":-1063372187,"lat":416525964}}},{"delta":{"node-LatLon":{"lon":-1063355954,"lat":416518111}}},{"delta":{"node-LatLon":{"lon":-1063339726,"lat":416510251}}},{"delta":{"node-LatLon":{"lon":-1063323497,"lat":416502393}}},{"delta":{"node-LatLon":{"lon":-1063307259,"lat":416494545}}},{"delta":{"node-LatLon":{"lon":-1063291009,"lat":416486712}}},{"delta":{"node-LatLon":{"lon":-1063274801,"lat":416478829}}},{"delta":{"node-LatLon":{"lon":-1063258568,"lat":416470977}}},{"delta":{"node-LatLon":{"lon":-1063242340,"lat":416463119}}},{"delta":{"node-LatLon":{"lon":-1063226121,"lat":416455250}}},{"delta":{"node-LatLon":{"lon":-1063209373,"lat":416447767}}},{"delta":{"node-LatLon":{"lon":-1063191824,"lat":416441408}}},{"delta":{"node-LatLon":{"lon":-1063173583,"lat":416436257}}},{"delta":{"node-LatLon":{"lon":-1063154787,"lat":416432390}}},{"delta":{"node-LatLon":{"lon":-1063135782,"lat":416429129}}},{"delta":{"node-LatLon":{"lon":-1063116772,"lat":416425883}}},{"delta":{"node-LatLon":{"lon":-1063097755,"lat":416422664}}},{"delta":{"node-LatLon":{"lon":-1063078751,"lat":416419398}}},{"delta":{"node-LatLon":{"lon":-1063059740,"lat":416416159}}},{"delta":{"node-LatLon":{"lon":-1063040728,"lat":416412924}}},{"delta":{"node-LatLon":{"lon":-1063021827,"lat":416409723}}},{"delta":{"node-LatLon":{"lon":-1063002941,"lat":416406471}}},{"delta":{"node-LatLon":{"lon":-1062984045,"lat":416403256}}},{"delta":{"node-LatLon":{"lon":-1062965166,"lat":416399984}}},{"delta":{"node-LatLon":{"lon":-1062946625,"lat":416395793}}},{"delta":{"node-LatLon":{"lon":-1062928900,"lat":416389943}}},{"delta":{"node-LatLon":{"lon":-1062912200,"lat":416382587}}},{"delta":{"node-LatLon":{"lon":-1062896756,"lat":416373819}}},{"delta":{"node-LatLon":{"lon":-1062881956,"lat":416364437}}},{"delta":{"node-LatLon":{"lon":-1062867209,"lat":416355008}}},{"delta":{"node-LatLon":{"lon":-1062852549,"lat":416345669}}},{"delta":{"node-LatLon":{"lon":-1062837900,"lat":416336319}}},{"delta":{"node-LatLon":{"lon":-1062823256,"lat":416326967}}},{"delta":{"node-LatLon":{"lon":-1062808616,"lat":416317611}}},{"delta":{"node-LatLon":{"lon":-1062793947,"lat":416308280}}},{"delta":{"node-LatLon":{"lon":-1062778698,"lat":416299496}}},{"delta":{"node-LatLon":{"lon":-1062762456,"lat":416291782}}},{"delta":{"node-LatLon":{"lon":-1062745352,"lat":416285198}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000110000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416667387,"long":-1063664504}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31503}},"msgCnt":31}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.102308,"speed":22.22,"longitude":-105.0483658},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":7,"serialNumber":15436,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31503,"packetID":"0000000000000C0339","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416385526,"long":-1062907286},"name":"westbound_I80_266.58_259.77_SAT-2470209F_VSL_V000430","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062924240,"lat":416393168}}},{"delta":{"node-LatLon":{"lon":-1062961089,"lat":416403834}}},{"delta":{"node-LatLon":{"lon":-1062999651,"lat":416410539}}},{"delta":{"node-LatLon":{"lon":-1063038256,"lat":416417110}}},{"delta":{"node-LatLon":{"lon":-1063075838,"lat":416423525}}},{"delta":{"node-LatLon":{"lon":-1063113422,"lat":416429935}}},{"delta":{"node-LatLon":{"lon":-1063151010,"lat":416436333}}},{"delta":{"node-LatLon":{"lon":-1063187758,"lat":416444929}}},{"delta":{"node-LatLon":{"lon":-1063221748,"lat":416458478}}},{"delta":{"node-LatLon":{"lon":-1063254248,"lat":416474223}}},{"delta":{"node-LatLon":{"lon":-1063286767,"lat":416489947}}},{"delta":{"node-LatLon":{"lon":-1063319286,"lat":416505671}}},{"delta":{"node-LatLon":{"lon":-1063351803,"lat":416521398}}},{"delta":{"node-LatLon":{"lon":-1063384308,"lat":416537141}}},{"delta":{"node-LatLon":{"lon":-1063416537,"lat":416552741}}},{"delta":{"node-LatLon":{"lon":-1063448756,"lat":416568353}}},{"delta":{"node-LatLon":{"lon":-1063480997,"lat":416583940}}},{"delta":{"node-LatLon":{"lon":-1063513230,"lat":416599539}}},{"delta":{"node-LatLon":{"lon":-1063545479,"lat":416615118}}},{"delta":{"node-LatLon":{"lon":-1063577703,"lat":416630746}}},{"delta":{"node-LatLon":{"lon":-1063609979,"lat":416646315}}},{"delta":{"node-LatLon":{"lon":-1063642246,"lat":416661894}}},{"delta":{"node-LatLon":{"lon":-1063674320,"lat":416677693}}},{"delta":{"node-LatLon":{"lon":-1063702475,"lat":416697159}}},{"delta":{"node-LatLon":{"lon":-1063724503,"lat":416721905}}},{"delta":{"node-LatLon":{"lon":-1063738013,"lat":416749885}}},{"delta":{"node-LatLon":{"lon":-1063745688,"lat":416779149}}},{"delta":{"node-LatLon":{"lon":-1063757512,"lat":416807580}}},{"delta":{"node-LatLon":{"lon":-1063775542,"lat":416834147}}},{"delta":{"node-LatLon":{"lon":-1063793398,"lat":416858977}}},{"delta":{"node-LatLon":{"lon":-1063809837,"lat":416884350}}},{"delta":{"node-LatLon":{"lon":-1063824918,"lat":416910195}}},{"delta":{"node-LatLon":{"lon":-1063839847,"lat":416936091}}},{"delta":{"node-LatLon":{"lon":-1063856289,"lat":416961436}}},{"delta":{"node-LatLon":{"lon":-1063880112,"lat":416984440}}},{"delta":{"node-LatLon":{"lon":-1063894506,"lat":416994252}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001111"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416385526,"long":-1062907286}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31503}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.102308,"speed":22.22,"longitude":-105.0483658},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":8,"serialNumber":15437,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31503,"packetID":"0000000000000FE5E4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416973452,"long":-1063867317},"name":"westbound_I80_259.77_254.87_SAT-6C9DA4E2_VSL_V000435","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1063880112,"lat":416984440}}},{"delta":{"node-LatLon":{"lon":-1063894506,"lat":416994252}}},{"delta":{"node-LatLon":{"lon":-1063910309,"lat":417002755}}},{"delta":{"node-LatLon":{"lon":-1063927293,"lat":417009870}}},{"delta":{"node-LatLon":{"lon":-1063944810,"lat":417016237}}},{"delta":{"node-LatLon":{"lon":-1063962371,"lat":417022536}}},{"delta":{"node-LatLon":{"lon":-1063979929,"lat":417028841}}},{"delta":{"node-LatLon":{"lon":-1063997487,"lat":417035145}}},{"delta":{"node-LatLon":{"lon":-1064015050,"lat":417041442}}},{"delta":{"node-LatLon":{"lon":-1064032545,"lat":417047634}}},{"delta":{"node-LatLon":{"lon":-1064050617,"lat":417052787}}},{"delta":{"node-LatLon":{"lon":-1064069340,"lat":417056404}}},{"delta":{"node-LatLon":{"lon":-1064088491,"lat":417058422}}},{"delta":{"node-LatLon":{"lon":-1064107803,"lat":417059292}}},{"delta":{"node-LatLon":{"lon":-1064127128,"lat":417059995}}},{"delta":{"node-LatLon":{"lon":-1064146451,"lat":417060728}}},{"delta":{"node-LatLon":{"lon":-1064165769,"lat":417061539}}},{"delta":{"node-LatLon":{"lon":-1064185091,"lat":417062288}}},{"delta":{"node-LatLon":{"lon":-1064204408,"lat":417063119}}},{"delta":{"node-LatLon":{"lon":-1064223632,"lat":417064590}}},{"delta":{"node-LatLon":{"lon":-1064242489,"lat":417067748}}},{"delta":{"node-LatLon":{"lon":-1064260716,"lat":417072554}}},{"delta":{"node-LatLon":{"lon":-1064278067,"lat":417078928}}},{"delta":{"node-LatLon":{"lon":-1064294308,"lat":417086774}}},{"delta":{"node-LatLon":{"lon":-1064309216,"lat":417095993}}},{"delta":{"node-LatLon":{"lon":-1064323678,"lat":417105610}}},{"delta":{"node-LatLon":{"lon":-1064338068,"lat":417115288}}},{"delta":{"node-LatLon":{"lon":-1064352499,"lat":417124933}}},{"delta":{"node-LatLon":{"lon":-1064366996,"lat":417134521}}},{"delta":{"node-LatLon":{"lon":-1064381609,"lat":417143889}}},{"delta":{"node-LatLon":{"lon":-1064396523,"lat":417152988}}},{"delta":{"node-LatLon":{"lon":-1064411727,"lat":417161812}}},{"delta":{"node-LatLon":{"lon":-1064427177,"lat":417170394}}},{"delta":{"node-LatLon":{"lon":-1064442869,"lat":417178725}}},{"delta":{"node-LatLon":{"lon":-1064458838,"lat":417186756}}},{"delta":{"node-LatLon":{"lon":-1064475045,"lat":417194514}}},{"delta":{"node-LatLon":{"lon":-1064491487,"lat":417201990}}},{"delta":{"node-LatLon":{"lon":-1064508131,"lat":417209211}}},{"delta":{"node-LatLon":{"lon":-1064525046,"lat":417216068}}},{"delta":{"node-LatLon":{"lon":-1064542331,"lat":417222795}}},{"delta":{"node-LatLon":{"lon":-1064559666,"lat":417229448}}},{"delta":{"node-LatLon":{"lon":-1064577050,"lat":417236030}}},{"delta":{"node-LatLon":{"lon":-1064594442,"lat":417242599}}},{"delta":{"node-LatLon":{"lon":-1064611800,"lat":417249219}}},{"delta":{"node-LatLon":{"lon":-1064629183,"lat":417255803}}},{"delta":{"node-LatLon":{"lon":-1064646550,"lat":417262411}}},{"delta":{"node-LatLon":{"lon":-1064663938,"lat":417268988}}},{"delta":{"node-LatLon":{"lon":-1064681335,"lat":417275551}}},{"delta":{"node-LatLon":{"lon":-1064698689,"lat":417282178}}},{"delta":{"node-LatLon":{"lon":-1064715850,"lat":417288659}}},{"delta":{"node-LatLon":{"lon":-1064732992,"lat":417295169}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001100"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416973452,"long":-1063867317}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31503}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.102308,"speed":22.22,"longitude":-105.0483658},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":6,"serialNumber":15435,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.053Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31475,"packetID":"00000000000004B2BA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415980789,"long":-1062129021},"name":"westbound_I80_271.8_266.58_SAT-129A26E5_VSL_V000426","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062147810,"lat":415980793}}},{"delta":{"node-LatLon":{"lon":-1062166552,"lat":415981611}}},{"delta":{"node-LatLon":{"lon":-1062184813,"lat":415984845}}},{"delta":{"node-LatLon":{"lon":-1062201989,"lat":415990520}}},{"delta":{"node-LatLon":{"lon":-1062217437,"lat":415998517}}},{"delta":{"node-LatLon":{"lon":-1062230703,"lat":416008482}}},{"delta":{"node-LatLon":{"lon":-1062241451,"lat":416020041}}},{"delta":{"node-LatLon":{"lon":-1062251290,"lat":416032060}}},{"delta":{"node-LatLon":{"lon":-1062261128,"lat":416044081}}},{"delta":{"node-LatLon":{"lon":-1062270774,"lat":416055871}}},{"delta":{"node-LatLon":{"lon":-1062280417,"lat":416067663}}},{"delta":{"node-LatLon":{"lon":-1062290067,"lat":416079452}}},{"delta":{"node-LatLon":{"lon":-1062299712,"lat":416091244}}},{"delta":{"node-LatLon":{"lon":-1062309426,"lat":416103003}}},{"delta":{"node-LatLon":{"lon":-1062319170,"lat":416114748}}},{"delta":{"node-LatLon":{"lon":-1062328711,"lat":416126587}}},{"delta":{"node-LatLon":{"lon":-1062338232,"lat":416138435}}},{"delta":{"node-LatLon":{"lon":-1062347925,"lat":416150205}}},{"delta":{"node-LatLon":{"lon":-1062357563,"lat":416162000}}},{"delta":{"node-LatLon":{"lon":-1062368179,"lat":416174692}}},{"delta":{"node-LatLon":{"lon":-1062379892,"lat":416186820}}},{"delta":{"node-LatLon":{"lon":-1062393288,"lat":416197926}}},{"delta":{"node-LatLon":{"lon":-1062408108,"lat":416207958}}},{"delta":{"node-LatLon":{"lon":-1062424227,"lat":416216793}}},{"delta":{"node-LatLon":{"lon":-1062441506,"lat":416224292}}},{"delta":{"node-LatLon":{"lon":-1062459705,"lat":416230444}}},{"delta":{"node-LatLon":{"lon":-1062478641,"lat":416235175}}},{"delta":{"node-LatLon":{"lon":-1062497949,"lat":416238998}}},{"delta":{"node-LatLon":{"lon":-1062517273,"lat":416242774}}},{"delta":{"node-LatLon":{"lon":-1062536082,"lat":416246433}}},{"delta":{"node-LatLon":{"lon":-1062554889,"lat":416250101}}},{"delta":{"node-LatLon":{"lon":-1062573685,"lat":416253798}}},{"delta":{"node-LatLon":{"lon":-1062592489,"lat":416257471}}},{"delta":{"node-LatLon":{"lon":-1062611298,"lat":416261134}}},{"delta":{"node-LatLon":{"lon":-1062630102,"lat":416264808}}},{"delta":{"node-LatLon":{"lon":-1062648910,"lat":416268474}}},{"delta":{"node-LatLon":{"lon":-1062667716,"lat":416272143}}},{"delta":{"node-LatLon":{"lon":-1062686526,"lat":416275802}}},{"delta":{"node-LatLon":{"lon":-1062705320,"lat":416279506}}},{"delta":{"node-LatLon":{"lon":-1062723512,"lat":416283487}}},{"delta":{"node-LatLon":{"lon":-1062741156,"lat":416288664}}},{"delta":{"node-LatLon":{"lon":-1062758081,"lat":416295053}}},{"delta":{"node-LatLon":{"lon":-1062774179,"lat":416302552}}},{"delta":{"node-LatLon":{"lon":-1062789262,"lat":416311156}}},{"delta":{"node-LatLon":{"lon":-1062803697,"lat":416320374}}},{"delta":{"node-LatLon":{"lon":-1062818144,"lat":416329581}}},{"delta":{"node-LatLon":{"lon":-1062832563,"lat":416338813}}},{"delta":{"node-LatLon":{"lon":-1062847004,"lat":416348027}}},{"delta":{"node-LatLon":{"lon":-1062861444,"lat":416357241}}},{"delta":{"node-LatLon":{"lon":-1062876541,"lat":416366844}}},{"delta":{"node-LatLon":{"lon":-1062891617,"lat":416376465}}},{"delta":{"node-LatLon":{"lon":-1062907286,"lat":416385526}}},{"delta":{"node-LatLon":{"lon":-1062924240,"lat":416393168}}},{"delta":{"node-LatLon":{"lon":-1062942253,"lat":416399303}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415980789,"long":-1062129021}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31475}},"msgCnt":24}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9875,"latitude":41.1023005,"speed":22.12,"longitude":-105.0484177},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":5,"serialNumber":15434,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.053Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31475,"packetID":"0000000000000D81DE","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415470937,"long":-1060871344},"name":"westbound_I80_279.36_271.8_SAT-06EB7A5B_VSL_V000422","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060883068,"lat":415482438}}},{"delta":{"node-LatLon":{"lon":-1060906872,"lat":415505231}}},{"delta":{"node-LatLon":{"lon":-1060934236,"lat":415525587}}},{"delta":{"node-LatLon":{"lon":-1060965310,"lat":415542824}}},{"delta":{"node-LatLon":{"lon":-1060996772,"lat":415559666}}},{"delta":{"node-LatLon":{"lon":-1061028237,"lat":415576506}}},{"delta":{"node-LatLon":{"lon":-1061059706,"lat":415593342}}},{"delta":{"node-LatLon":{"lon":-1061092588,"lat":415608515}}},{"delta":{"node-LatLon":{"lon":-1061128419,"lat":415618971}}},{"delta":{"node-LatLon":{"lon":-1061166060,"lat":415624943}}},{"delta":{"node-LatLon":{"lon":-1061203924,"lat":415630154}}},{"delta":{"node-LatLon":{"lon":-1061241795,"lat":415635339}}},{"delta":{"node-LatLon":{"lon":-1061279673,"lat":415640497}}},{"delta":{"node-LatLon":{"lon":-1061317589,"lat":415645644}}},{"delta":{"node-LatLon":{"lon":-1061355497,"lat":415650826}}},{"delta":{"node-LatLon":{"lon":-1061392771,"lat":415657996}}},{"delta":{"node-LatLon":{"lon":-1061427646,"lat":415670204}}},{"delta":{"node-LatLon":{"lon":-1061459115,"lat":415686864}}},{"delta":{"node-LatLon":{"lon":-1061489394,"lat":415704469}}},{"delta":{"node-LatLon":{"lon":-1061519697,"lat":415722052}}},{"delta":{"node-LatLon":{"lon":-1061549992,"lat":415739645}}},{"delta":{"node-LatLon":{"lon":-1061580273,"lat":415757250}}},{"delta":{"node-LatLon":{"lon":-1061610581,"lat":415774831}}},{"delta":{"node-LatLon":{"lon":-1061641248,"lat":415792650}}},{"delta":{"node-LatLon":{"lon":-1061671923,"lat":415810463}}},{"delta":{"node-LatLon":{"lon":-1061702592,"lat":415828282}}},{"delta":{"node-LatLon":{"lon":-1061733271,"lat":415846093}}},{"delta":{"node-LatLon":{"lon":-1061763976,"lat":415863879}}},{"delta":{"node-LatLon":{"lon":-1061794560,"lat":415881656}}},{"delta":{"node-LatLon":{"lon":-1061825730,"lat":415898841}}},{"delta":{"node-LatLon":{"lon":-1061858422,"lat":415914356}}},{"delta":{"node-LatLon":{"lon":-1061891331,"lat":415929615}}},{"delta":{"node-LatLon":{"lon":-1061924211,"lat":415944910}}},{"delta":{"node-LatLon":{"lon":-1061957798,"lat":415960692}}},{"delta":{"node-LatLon":{"lon":-1061992345,"lat":415975173}}},{"delta":{"node-LatLon":{"lon":-1062030986,"lat":415980852}}},{"delta":{"node-LatLon":{"lon":-1062070609,"lat":415981013}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}},{"delta":{"node-LatLon":{"lon":-1062147810,"lat":415980793}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415470937,"long":-1060871344}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31475}},"msgCnt":25}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9875,"latitude":41.1023005,"speed":22.12,"longitude":-105.0484177},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":4,"serialNumber":15433,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.963Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31504,"packetID":"0000000000000B0C4D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414434951,"long":-1059587159},"name":"westbound_I80_289.5_279.36_SAT-FDFB3C3B_VSL_V000416","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059606146,"lat":414439136}}},{"delta":{"node-LatLon":{"lon":-1059624866,"lat":414443931}}},{"delta":{"node-LatLon":{"lon":-1059658797,"lat":414459046}}},{"delta":{"node-LatLon":{"lon":-1059685629,"lat":414480816}}},{"delta":{"node-LatLon":{"lon":-1059708612,"lat":414504233}}},{"delta":{"node-LatLon":{"lon":-1059731631,"lat":414527631}}},{"delta":{"node-LatLon":{"lon":-1059754662,"lat":414551022}}},{"delta":{"node-LatLon":{"lon":-1059777663,"lat":414574431}}},{"delta":{"node-LatLon":{"lon":-1059800605,"lat":414597873}}},{"delta":{"node-LatLon":{"lon":-1059825019,"lat":414620504}}},{"delta":{"node-LatLon":{"lon":-1059854975,"lat":414638959}}},{"delta":{"node-LatLon":{"lon":-1059886652,"lat":414655790}}},{"delta":{"node-LatLon":{"lon":-1059918347,"lat":414672602}}},{"delta":{"node-LatLon":{"lon":-1059950027,"lat":414689430}}},{"delta":{"node-LatLon":{"lon":-1059981533,"lat":414706207}}},{"delta":{"node-LatLon":{"lon":-1060013094,"lat":414722925}}},{"delta":{"node-LatLon":{"lon":-1060044644,"lat":414739656}}},{"delta":{"node-LatLon":{"lon":-1060076151,"lat":414756434}}},{"delta":{"node-LatLon":{"lon":-1060107672,"lat":414773199}}},{"delta":{"node-LatLon":{"lon":-1060138668,"lat":414789614}}},{"delta":{"node-LatLon":{"lon":-1060169596,"lat":414806103}}},{"delta":{"node-LatLon":{"lon":-1060200600,"lat":414822512}}},{"delta":{"node-LatLon":{"lon":-1060231565,"lat":414838964}}},{"delta":{"node-LatLon":{"lon":-1060262552,"lat":414855394}}},{"delta":{"node-LatLon":{"lon":-1060294303,"lat":414872314}}},{"delta":{"node-LatLon":{"lon":-1060326101,"lat":414889184}}},{"delta":{"node-LatLon":{"lon":-1060357880,"lat":414906076}}},{"delta":{"node-LatLon":{"lon":-1060389415,"lat":414923223}}},{"delta":{"node-LatLon":{"lon":-1060420573,"lat":414940760}}},{"delta":{"node-LatLon":{"lon":-1060450509,"lat":414958838}}},{"delta":{"node-LatLon":{"lon":-1060475868,"lat":414980491}}},{"delta":{"node-LatLon":{"lon":-1060495507,"lat":415005280}}},{"delta":{"node-LatLon":{"lon":-1060510699,"lat":415031818}}},{"delta":{"node-LatLon":{"lon":-1060524843,"lat":415058673}}},{"delta":{"node-LatLon":{"lon":-1060533417,"lat":415086879}}},{"delta":{"node-LatLon":{"lon":-1060540264,"lat":415115378}}},{"delta":{"node-LatLon":{"lon":-1060547197,"lat":415143865}}},{"delta":{"node-LatLon":{"lon":-1060554077,"lat":415172359}}},{"delta":{"node-LatLon":{"lon":-1060561492,"lat":415200772}}},{"delta":{"node-LatLon":{"lon":-1060576552,"lat":415227429}}},{"delta":{"node-LatLon":{"lon":-1060600749,"lat":415249961}}},{"delta":{"node-LatLon":{"lon":-1060632200,"lat":415266697}}},{"delta":{"node-LatLon":{"lon":-1060666183,"lat":415280527}}},{"delta":{"node-LatLon":{"lon":-1060695463,"lat":415299353}}},{"delta":{"node-LatLon":{"lon":-1060719162,"lat":415322019}}},{"delta":{"node-LatLon":{"lon":-1060742498,"lat":415344904}}},{"delta":{"node-LatLon":{"lon":-1060765869,"lat":415367768}}},{"delta":{"node-LatLon":{"lon":-1060789259,"lat":415390622}}},{"delta":{"node-LatLon":{"lon":-1060812632,"lat":415413487}}},{"delta":{"node-LatLon":{"lon":-1060836139,"lat":415436453}}},{"delta":{"node-LatLon":{"lon":-1060859605,"lat":415459445}}},{"delta":{"node-LatLon":{"lon":-1060883068,"lat":415482438}}},{"delta":{"node-LatLon":{"lon":-1060894883,"lat":415493886}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001111"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414434951,"long":-1059587159}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31504}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.1022969,"speed":22.06,"longitude":-105.0484435},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":3,"serialNumber":15432,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.963Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31267,"packetID":"000000000000094275","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417772272,"long":-1073083802},"name":"westbound_I80_187.2_209.5_SAT-B0DDD576_RC_RAWI80WRSD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1073103032,"lat":417770765}}},{"delta":{"node-LatLon":{"lon":-1073160734,"lat":417766344}}},{"delta":{"node-LatLon":{"lon":-1073237348,"lat":417761297}}},{"delta":{"node-LatLon":{"lon":-1073313648,"lat":417764434}}},{"delta":{"node-LatLon":{"lon":-1073388010,"lat":417777604}}},{"delta":{"node-LatLon":{"lon":-1073460227,"lat":417797785}}},{"delta":{"node-LatLon":{"lon":-1073532308,"lat":417818249}}},{"delta":{"node-LatLon":{"lon":-1073604685,"lat":417838835}}},{"delta":{"node-LatLon":{"lon":-1073677383,"lat":417859492}}},{"delta":{"node-LatLon":{"lon":-1073750200,"lat":417879909}}},{"delta":{"node-LatLon":{"lon":-1073825885,"lat":417892315}}},{"delta":{"node-LatLon":{"lon":-1073903361,"lat":417891911}}},{"delta":{"node-LatLon":{"lon":-1073980790,"lat":417878755}}},{"delta":{"node-LatLon":{"lon":-1074059270,"lat":417862672}}},{"delta":{"node-LatLon":{"lon":-1074138797,"lat":417849816}}},{"delta":{"node-LatLon":{"lon":-1074212379,"lat":417833423}}},{"delta":{"node-LatLon":{"lon":-1074285917,"lat":417816922}}},{"delta":{"node-LatLon":{"lon":-1074359753,"lat":417800402}}},{"delta":{"node-LatLon":{"lon":-1074433865,"lat":417783809}}},{"delta":{"node-LatLon":{"lon":-1074507971,"lat":417767209}}},{"delta":{"node-LatLon":{"lon":-1074582466,"lat":417750471}}},{"delta":{"node-LatLon":{"lon":-1074656974,"lat":417733772}}},{"delta":{"node-LatLon":{"lon":-1074730980,"lat":417717212}}},{"delta":{"node-LatLon":{"lon":-1074804466,"lat":417700741}}},{"delta":{"node-LatLon":{"lon":-1074877974,"lat":417684333}}},{"delta":{"node-LatLon":{"lon":-1074952181,"lat":417667699}}},{"delta":{"node-LatLon":{"lon":-1075026384,"lat":417651055}}},{"delta":{"node-LatLon":{"lon":-1075100631,"lat":417634583}}},{"delta":{"node-LatLon":{"lon":-1075174927,"lat":417618293}}},{"delta":{"node-LatLon":{"lon":-1075249229,"lat":417602021}}},{"delta":{"node-LatLon":{"lon":-1075324198,"lat":417585522}}},{"delta":{"node-LatLon":{"lon":-1075399202,"lat":417569122}}},{"delta":{"node-LatLon":{"lon":-1075474679,"lat":417552532}}},{"delta":{"node-LatLon":{"lon":-1075550650,"lat":417535815}}},{"delta":{"node-LatLon":{"lon":-1075626641,"lat":417519150}}},{"delta":{"node-LatLon":{"lon":-1075700169,"lat":417503005}}},{"delta":{"node-LatLon":{"lon":-1075773956,"lat":417487570}}},{"delta":{"node-LatLon":{"lon":-1075849915,"lat":417477896}}},{"delta":{"node-LatLon":{"lon":-1075927140,"lat":417472412}}},{"delta":{"node-LatLon":{"lon":-1076004368,"lat":417466944}}},{"delta":{"node-LatLon":{"lon":-1076078363,"lat":417461740}}},{"delta":{"node-LatLon":{"lon":-1076152354,"lat":417456501}}},{"delta":{"node-LatLon":{"lon":-1076228617,"lat":417451146}}},{"delta":{"node-LatLon":{"lon":-1076306386,"lat":417445637}}},{"delta":{"node-LatLon":{"lon":-1076384155,"lat":417440136}}},{"delta":{"node-LatLon":{"lon":-1076461786,"lat":417434636}}},{"delta":{"node-LatLon":{"lon":-1076539413,"lat":417429098}}},{"delta":{"node-LatLon":{"lon":-1076616980,"lat":417423684}}},{"delta":{"node-LatLon":{"lon":-1076694352,"lat":417417431}}},{"delta":{"node-LatLon":{"lon":-1076769822,"lat":417403428}}},{"delta":{"node-LatLon":{"lon":-1076844263,"lat":417386508}}},{"delta":{"node-LatLon":{"lon":-1076918694,"lat":417369570}}},{"delta":{"node-LatLon":{"lon":-1076992959,"lat":417352731}}},{"delta":{"node-LatLon":{"lon":-1077067009,"lat":417335868}}},{"delta":{"node-LatLon":{"lon":-1077141060,"lat":417319013}}},{"delta":{"node-LatLon":{"lon":-1077216222,"lat":417301908}}},{"delta":{"node-LatLon":{"lon":-1077291383,"lat":417284807}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417772272,"long":-1073083802}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31267}},"msgCnt":90}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.1022969,"speed":22.06,"longitude":-105.0484435},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":2,"serialNumber":15431,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31267,"packetID":"000000000000024E94","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417275428,"long":-1077311709},"name":"eastbound_I80_187.2_209.5_SAT-0A794CC9_RC_RAWI80WRSI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1077292868,"lat":417279720}}},{"delta":{"node-LatLon":{"lon":-1077217513,"lat":417296919}}},{"delta":{"node-LatLon":{"lon":-1077142143,"lat":417314087}}},{"delta":{"node-LatLon":{"lon":-1077068049,"lat":417330933}}},{"delta":{"node-LatLon":{"lon":-1076993961,"lat":417347795}}},{"delta":{"node-LatLon":{"lon":-1076919664,"lat":417364670}}},{"delta":{"node-LatLon":{"lon":-1076845181,"lat":417381611}}},{"delta":{"node-LatLon":{"lon":-1076770688,"lat":417398531}}},{"delta":{"node-LatLon":{"lon":-1076695769,"lat":417412771}}},{"delta":{"node-LatLon":{"lon":-1076618859,"lat":417418968}}},{"delta":{"node-LatLon":{"lon":-1076541598,"lat":417424427}}},{"delta":{"node-LatLon":{"lon":-1076464105,"lat":417429921}}},{"delta":{"node-LatLon":{"lon":-1076386610,"lat":417435404}}},{"delta":{"node-LatLon":{"lon":-1076309252,"lat":417440926}}},{"delta":{"node-LatLon":{"lon":-1076231889,"lat":417446401}}},{"delta":{"node-LatLon":{"lon":-1076155879,"lat":417451762}}},{"delta":{"node-LatLon":{"lon":-1076081223,"lat":417457006}}},{"delta":{"node-LatLon":{"lon":-1076006571,"lat":417462290}}},{"delta":{"node-LatLon":{"lon":-1075928925,"lat":417467718}}},{"delta":{"node-LatLon":{"lon":-1075851297,"lat":417473296}}},{"delta":{"node-LatLon":{"lon":-1075775135,"lat":417482757}}},{"delta":{"node-LatLon":{"lon":-1075701404,"lat":417498056}}},{"delta":{"node-LatLon":{"lon":-1075627970,"lat":417514175}}},{"delta":{"node-LatLon":{"lon":-1075551546,"lat":417530959}}},{"delta":{"node-LatLon":{"lon":-1075475121,"lat":417547742}}},{"delta":{"node-LatLon":{"lon":-1075399612,"lat":417564374}}},{"delta":{"node-LatLon":{"lon":-1075324973,"lat":417580735}}},{"delta":{"node-LatLon":{"lon":-1075250327,"lat":417597082}}},{"delta":{"node-LatLon":{"lon":-1075175762,"lat":417613457}}},{"delta":{"node-LatLon":{"lon":-1075101172,"lat":417629774}}},{"delta":{"node-LatLon":{"lon":-1075026992,"lat":417646108}}},{"delta":{"node-LatLon":{"lon":-1074953281,"lat":417662619}}},{"delta":{"node-LatLon":{"lon":-1074879569,"lat":417679134}}},{"delta":{"node-LatLon":{"lon":-1074805891,"lat":417695635}}},{"delta":{"node-LatLon":{"lon":-1074732212,"lat":417712139}}},{"delta":{"node-LatLon":{"lon":-1074658253,"lat":417728674}}},{"delta":{"node-LatLon":{"lon":-1074584060,"lat":417745361}}},{"delta":{"node-LatLon":{"lon":-1074509845,"lat":417761996}}},{"delta":{"node-LatLon":{"lon":-1074435611,"lat":417778588}}},{"delta":{"node-LatLon":{"lon":-1074361397,"lat":417795237}}},{"delta":{"node-LatLon":{"lon":-1074287484,"lat":417811796}}},{"delta":{"node-LatLon":{"lon":-1074213869,"lat":417828258}}},{"delta":{"node-LatLon":{"lon":-1074140155,"lat":417844465}}},{"delta":{"node-LatLon":{"lon":-1074062164,"lat":417855879}}},{"delta":{"node-LatLon":{"lon":-1073983504,"lat":417864579}}},{"delta":{"node-LatLon":{"lon":-1073906783,"lat":417873095}}},{"delta":{"node-LatLon":{"lon":-1073831510,"lat":417877605}}},{"delta":{"node-LatLon":{"lon":-1073756373,"lat":417872063}}},{"delta":{"node-LatLon":{"lon":-1073681801,"lat":417855903}}},{"delta":{"node-LatLon":{"lon":-1073609122,"lat":417835248}}},{"delta":{"node-LatLon":{"lon":-1073536658,"lat":417814684}}},{"delta":{"node-LatLon":{"lon":-1073464445,"lat":417794142}}},{"delta":{"node-LatLon":{"lon":-1073392087,"lat":417773900}}},{"delta":{"node-LatLon":{"lon":-1073317135,"lat":417760222}}},{"delta":{"node-LatLon":{"lon":-1073240133,"lat":417756689}}},{"delta":{"node-LatLon":{"lon":-1073163130,"lat":417761557}}},{"delta":{"node-LatLon":{"lon":-1073105417,"lat":417766002}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417275428,"long":-1077311709}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5385}}]}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":31267}},"msgCnt":78}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.1022969,"speed":22.06,"longitude":-105.0484435},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":1,"serialNumber":15430,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":22692,"packetID":"00000000000006AD92","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416344087,"long":-1082586926},"name":"westbound_I80_142.17_158.55_SAT-44ADF832_RC_PDI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1082605867,"lat":416341147}}},{"delta":{"node-LatLon":{"lon":-1082643762,"lat":416335317}}},{"delta":{"node-LatLon":{"lon":-1082719537,"lat":416323607}}},{"delta":{"node-LatLon":{"lon":-1082795332,"lat":416311823}}},{"delta":{"node-LatLon":{"lon":-1082871219,"lat":416300396}}},{"delta":{"node-LatLon":{"lon":-1082948412,"lat":416300333}}},{"delta":{"node-LatLon":{"lon":-1083025592,"lat":416303069}}},{"delta":{"node-LatLon":{"lon":-1083102774,"lat":416305783}}},{"delta":{"node-LatLon":{"lon":-1083179715,"lat":416308441}}},{"delta":{"node-LatLon":{"lon":-1083256650,"lat":416311187}}},{"delta":{"node-LatLon":{"lon":-1083333670,"lat":416313866}}},{"delta":{"node-LatLon":{"lon":-1083410768,"lat":416316579}}},{"delta":{"node-LatLon":{"lon":-1083487872,"lat":416319193}}},{"delta":{"node-LatLon":{"lon":-1083564905,"lat":416322423}}},{"delta":{"node-LatLon":{"lon":-1083641683,"lat":416328142}}},{"delta":{"node-LatLon":{"lon":-1083718587,"lat":416332876}}},{"delta":{"node-LatLon":{"lon":-1083795496,"lat":416337572}}},{"delta":{"node-LatLon":{"lon":-1083872405,"lat":416342269}}},{"delta":{"node-LatLon":{"lon":-1083949300,"lat":416347096}}},{"delta":{"node-LatLon":{"lon":-1084026064,"lat":416352984}}},{"delta":{"node-LatLon":{"lon":-1084103063,"lat":416357400}}},{"delta":{"node-LatLon":{"lon":-1084180198,"lat":416361177}}},{"delta":{"node-LatLon":{"lon":-1084257244,"lat":416365879}}},{"delta":{"node-LatLon":{"lon":-1084326673,"lat":416370105}}},{"delta":{"node-LatLon":{"lon":-1084396100,"lat":416374353}}},{"delta":{"node-LatLon":{"lon":-1084469893,"lat":416378867}}},{"delta":{"node-LatLon":{"lon":-1084548056,"lat":416383611}}},{"delta":{"node-LatLon":{"lon":-1084626220,"lat":416388347}}},{"delta":{"node-LatLon":{"lon":-1084703702,"lat":416393060}}},{"delta":{"node-LatLon":{"lon":-1084781188,"lat":416397734}}},{"delta":{"node-LatLon":{"lon":-1084859010,"lat":416402450}}},{"delta":{"node-LatLon":{"lon":-1084937168,"lat":416407197}}},{"delta":{"node-LatLon":{"lon":-1085015328,"lat":416411930}}},{"delta":{"node-LatLon":{"lon":-1085093024,"lat":416416612}}},{"delta":{"node-LatLon":{"lon":-1085170718,"lat":416421321}}},{"delta":{"node-LatLon":{"lon":-1085248418,"lat":416425954}}},{"delta":{"node-LatLon":{"lon":-1085326100,"lat":416430747}}},{"delta":{"node-LatLon":{"lon":-1085403806,"lat":416435322}}},{"delta":{"node-LatLon":{"lon":-1085482142,"lat":416440051}}},{"delta":{"node-LatLon":{"lon":-1085560481,"lat":416444752}}},{"delta":{"node-LatLon":{"lon":-1085638702,"lat":416449395}}},{"delta":{"node-LatLon":{"lon":-1085716794,"lat":416454065}}},{"delta":{"node-LatLon":{"lon":-1085775366,"lat":416457555}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416344087,"long":-1082586926}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5895}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":22692}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} -{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.1022969,"speed":22.06,"longitude":-105.0484435},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":15429,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":22692,"packetID":"000000000000086861","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416455490,"long":-1085800440},"name":"eastbound_I80_142.17_158.55_SAT-1C6D23BF_RC_PDI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1085780958,"lat":416453533}}},{"delta":{"node-LatLon":{"lon":-1085722182,"lat":416449943}}},{"delta":{"node-LatLon":{"lon":-1085643804,"lat":416445230}}},{"delta":{"node-LatLon":{"lon":-1085565424,"lat":416440540}}},{"delta":{"node-LatLon":{"lon":-1085487043,"lat":416435869}}},{"delta":{"node-LatLon":{"lon":-1085408668,"lat":416431146}}},{"delta":{"node-LatLon":{"lon":-1085330293,"lat":416426421}}},{"delta":{"node-LatLon":{"lon":-1085251916,"lat":416421727}}},{"delta":{"node-LatLon":{"lon":-1085173902,"lat":416416997}}},{"delta":{"node-LatLon":{"lon":-1085096242,"lat":416412330}}},{"delta":{"node-LatLon":{"lon":-1085018585,"lat":416407636}}},{"delta":{"node-LatLon":{"lon":-1084940663,"lat":416402897}}},{"delta":{"node-LatLon":{"lon":-1084862741,"lat":416398163}}},{"delta":{"node-LatLon":{"lon":-1084784815,"lat":416393472}}},{"delta":{"node-LatLon":{"lon":-1084706889,"lat":416388787}}},{"delta":{"node-LatLon":{"lon":-1084628972,"lat":416384031}}},{"delta":{"node-LatLon":{"lon":-1084551057,"lat":416379343}}},{"delta":{"node-LatLon":{"lon":-1084473154,"lat":416374560}}},{"delta":{"node-LatLon":{"lon":-1084399541,"lat":416370085}}},{"delta":{"node-LatLon":{"lon":-1084330227,"lat":416365845}}},{"delta":{"node-LatLon":{"lon":-1084260912,"lat":416361623}}},{"delta":{"node-LatLon":{"lon":-1084184275,"lat":416356906}}},{"delta":{"node-LatLon":{"lon":-1084107548,"lat":416353136}}},{"delta":{"node-LatLon":{"lon":-1084030065,"lat":416348811}}},{"delta":{"node-LatLon":{"lon":-1083951951,"lat":416342842}}},{"delta":{"node-LatLon":{"lon":-1083873709,"lat":416337915}}},{"delta":{"node-LatLon":{"lon":-1083796972,"lat":416333186}}},{"delta":{"node-LatLon":{"lon":-1083720234,"lat":416328459}}},{"delta":{"node-LatLon":{"lon":-1083643497,"lat":416323733}}},{"delta":{"node-LatLon":{"lon":-1083566759,"lat":416319020}}},{"delta":{"node-LatLon":{"lon":-1083489868,"lat":416316067}}},{"delta":{"node-LatLon":{"lon":-1083413019,"lat":416313460}}},{"delta":{"node-LatLon":{"lon":-1083336178,"lat":416310750}}},{"delta":{"node-LatLon":{"lon":-1083259199,"lat":416308063}}},{"delta":{"node-LatLon":{"lon":-1083182086,"lat":416305377}}},{"delta":{"node-LatLon":{"lon":-1083104978,"lat":416302622}}},{"delta":{"node-LatLon":{"lon":-1083028061,"lat":416299895}}},{"delta":{"node-LatLon":{"lon":-1082951147,"lat":416297144}}},{"delta":{"node-LatLon":{"lon":-1082873751,"lat":416296812}}},{"delta":{"node-LatLon":{"lon":-1082797210,"lat":416308158}}},{"delta":{"node-LatLon":{"lon":-1082720795,"lat":416320017}}},{"delta":{"node-LatLon":{"lon":-1082645377,"lat":416331711}}},{"delta":{"node-LatLon":{"lon":-1082607675,"lat":416337584}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"notUsed2":0,"notUsed3":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416455490,"long":-1085800440}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5895}}}},"url":null,"notUsed":0,"notUsed1":0,"frameType":{"advisory":""},"startTime":22692}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1842,"heading":270.4,"latitude":41.1164581,"speed":32.42,"longitude":-104.8309594},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":165,"serialNumber":15594,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:16:06.891Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1842,"heading":270.15,"latitude":41.1164558,"speed":32.92,"longitude":-104.8270153},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":164,"serialNumber":15593,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:15:56.582Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1827,"heading":259.0875,"latitude":41.120215,"speed":34.06,"longitude":-104.7970612},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":163,"serialNumber":15592,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:37.988Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":258.9,"latitude":41.1203737,"speed":34.14,"longitude":-104.7959839},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":162,"serialNumber":15591,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:35.384Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31631,"packetID":"0000000000000C4306","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415413487,"long":-1060812632},"name":"westbound_I80_272.06_279.86_SAT-84FB2473_RC_ARLI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060824406,"lat":415424958}}},{"delta":{"node-LatLon":{"lon":-1060836139,"lat":415436453}}},{"delta":{"node-LatLon":{"lon":-1060859605,"lat":415459445}}},{"delta":{"node-LatLon":{"lon":-1060883068,"lat":415482438}}},{"delta":{"node-LatLon":{"lon":-1060906872,"lat":415505231}}},{"delta":{"node-LatLon":{"lon":-1060934236,"lat":415525587}}},{"delta":{"node-LatLon":{"lon":-1060965310,"lat":415542824}}},{"delta":{"node-LatLon":{"lon":-1060996772,"lat":415559666}}},{"delta":{"node-LatLon":{"lon":-1061028237,"lat":415576506}}},{"delta":{"node-LatLon":{"lon":-1061059706,"lat":415593342}}},{"delta":{"node-LatLon":{"lon":-1061092588,"lat":415608515}}},{"delta":{"node-LatLon":{"lon":-1061128419,"lat":415618971}}},{"delta":{"node-LatLon":{"lon":-1061166060,"lat":415624943}}},{"delta":{"node-LatLon":{"lon":-1061203924,"lat":415630154}}},{"delta":{"node-LatLon":{"lon":-1061241795,"lat":415635339}}},{"delta":{"node-LatLon":{"lon":-1061279673,"lat":415640497}}},{"delta":{"node-LatLon":{"lon":-1061317589,"lat":415645644}}},{"delta":{"node-LatLon":{"lon":-1061355497,"lat":415650826}}},{"delta":{"node-LatLon":{"lon":-1061392771,"lat":415657996}}},{"delta":{"node-LatLon":{"lon":-1061427646,"lat":415670204}}},{"delta":{"node-LatLon":{"lon":-1061459115,"lat":415686864}}},{"delta":{"node-LatLon":{"lon":-1061489394,"lat":415704469}}},{"delta":{"node-LatLon":{"lon":-1061519697,"lat":415722052}}},{"delta":{"node-LatLon":{"lon":-1061549992,"lat":415739645}}},{"delta":{"node-LatLon":{"lon":-1061580273,"lat":415757250}}},{"delta":{"node-LatLon":{"lon":-1061610581,"lat":415774831}}},{"delta":{"node-LatLon":{"lon":-1061641248,"lat":415792650}}},{"delta":{"node-LatLon":{"lon":-1061671923,"lat":415810463}}},{"delta":{"node-LatLon":{"lon":-1061702592,"lat":415828282}}},{"delta":{"node-LatLon":{"lon":-1061733271,"lat":415846093}}},{"delta":{"node-LatLon":{"lon":-1061763976,"lat":415863879}}},{"delta":{"node-LatLon":{"lon":-1061794560,"lat":415881656}}},{"delta":{"node-LatLon":{"lon":-1061825730,"lat":415898841}}},{"delta":{"node-LatLon":{"lon":-1061858422,"lat":415914356}}},{"delta":{"node-LatLon":{"lon":-1061891331,"lat":415929615}}},{"delta":{"node-LatLon":{"lon":-1061924211,"lat":415944910}}},{"delta":{"node-LatLon":{"lon":-1061957798,"lat":415960692}}},{"delta":{"node-LatLon":{"lon":-1061992345,"lat":415975173}}},{"delta":{"node-LatLon":{"lon":-1062030986,"lat":415980852}}},{"delta":{"node-LatLon":{"lon":-1062070609,"lat":415981013}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415413487,"long":-1060812632}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31631}},"msgCnt":50}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":258.95,"latitude":41.1203855,"speed":34.18,"longitude":-104.7959041},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":159,"serialNumber":15588,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:35.206Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31631,"packetID":"0000000000000EA327","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416355008,"long":-1062867209},"name":"eastbound_I80_267.19_272.06_SAT-7ECE7CF3_RC_ARLI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062852549,"lat":416345669}}},{"delta":{"node-LatLon":{"lon":-1062837900,"lat":416336319}}},{"delta":{"node-LatLon":{"lon":-1062823256,"lat":416326967}}},{"delta":{"node-LatLon":{"lon":-1062808616,"lat":416317611}}},{"delta":{"node-LatLon":{"lon":-1062793947,"lat":416308280}}},{"delta":{"node-LatLon":{"lon":-1062778698,"lat":416299496}}},{"delta":{"node-LatLon":{"lon":-1062762456,"lat":416291782}}},{"delta":{"node-LatLon":{"lon":-1062745352,"lat":416285198}}},{"delta":{"node-LatLon":{"lon":-1062727519,"lat":416279817}}},{"delta":{"node-LatLon":{"lon":-1062709133,"lat":416275605}}},{"delta":{"node-LatLon":{"lon":-1062690294,"lat":416271928}}},{"delta":{"node-LatLon":{"lon":-1062671455,"lat":416268251}}},{"delta":{"node-LatLon":{"lon":-1062652620,"lat":416264564}}},{"delta":{"node-LatLon":{"lon":-1062633771,"lat":416260915}}},{"delta":{"node-LatLon":{"lon":-1062614940,"lat":416257216}}},{"delta":{"node-LatLon":{"lon":-1062596100,"lat":416253544}}},{"delta":{"node-LatLon":{"lon":-1062577255,"lat":416249886}}},{"delta":{"node-LatLon":{"lon":-1062558417,"lat":416246209}}},{"delta":{"node-LatLon":{"lon":-1062539573,"lat":416242549}}},{"delta":{"node-LatLon":{"lon":-1062520744,"lat":416238847}}},{"delta":{"node-LatLon":{"lon":-1062501815,"lat":416235141}}},{"delta":{"node-LatLon":{"lon":-1062482895,"lat":416231412}}},{"delta":{"node-LatLon":{"lon":-1062464244,"lat":416227007}}},{"delta":{"node-LatLon":{"lon":-1062446311,"lat":416221159}}},{"delta":{"node-LatLon":{"lon":-1062429289,"lat":416213939}}},{"delta":{"node-LatLon":{"lon":-1062413350,"lat":416205439}}},{"delta":{"node-LatLon":{"lon":-1062398699,"lat":416195722}}},{"delta":{"node-LatLon":{"lon":-1062385484,"lat":416184907}}},{"delta":{"node-LatLon":{"lon":-1062373783,"lat":416173151}}},{"delta":{"node-LatLon":{"lon":-1062363439,"lat":416160690}}},{"delta":{"node-LatLon":{"lon":-1062353839,"lat":416148895}}},{"delta":{"node-LatLon":{"lon":-1062344200,"lat":416137119}}},{"delta":{"node-LatLon":{"lon":-1062334576,"lat":416125335}}},{"delta":{"node-LatLon":{"lon":-1062324886,"lat":416113582}}},{"delta":{"node-LatLon":{"lon":-1062315283,"lat":416101788}}},{"delta":{"node-LatLon":{"lon":-1062305674,"lat":416089998}}},{"delta":{"node-LatLon":{"lon":-1062296038,"lat":416078220}}},{"delta":{"node-LatLon":{"lon":-1062286421,"lat":416066433}}},{"delta":{"node-LatLon":{"lon":-1062276808,"lat":416054645}}},{"delta":{"node-LatLon":{"lon":-1062267158,"lat":416042874}}},{"delta":{"node-LatLon":{"lon":-1062257093,"lat":416030536}}},{"delta":{"node-LatLon":{"lon":-1062246994,"lat":416018215}}},{"delta":{"node-LatLon":{"lon":-1062236012,"lat":416006340}}},{"delta":{"node-LatLon":{"lon":-1062222613,"lat":415995969}}},{"delta":{"node-LatLon":{"lon":-1062206968,"lat":415987559}}},{"delta":{"node-LatLon":{"lon":-1062189595,"lat":415981343}}},{"delta":{"node-LatLon":{"lon":-1062171008,"lat":415977603}}},{"delta":{"node-LatLon":{"lon":-1062151833,"lat":415976346}}},{"delta":{"node-LatLon":{"lon":-1062132565,"lat":415976300}}},{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062093782,"lat":415976349}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416355008,"long":-1062867209}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31631}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":258.9,"latitude":41.1203737,"speed":34.14,"longitude":-104.7959839},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":161,"serialNumber":15590,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:35.285Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31631,"packetID":"00000000000010847D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415976300,"long":-1062132565},"name":"eastbound_I80_272.06_279.86_SAT-A456B6BD_RC_ARLI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062074266,"lat":415976387}}},{"delta":{"node-LatLon":{"lon":-1062035235,"lat":415976340}}},{"delta":{"node-LatLon":{"lon":-1061996980,"lat":415971514}}},{"delta":{"node-LatLon":{"lon":-1061962779,"lat":415957510}}},{"delta":{"node-LatLon":{"lon":-1061929530,"lat":415942161}}},{"delta":{"node-LatLon":{"lon":-1061896505,"lat":415926815}}},{"delta":{"node-LatLon":{"lon":-1061863465,"lat":415911487}}},{"delta":{"node-LatLon":{"lon":-1061830559,"lat":415896001}}},{"delta":{"node-LatLon":{"lon":-1061799243,"lat":415878765}}},{"delta":{"node-LatLon":{"lon":-1061768515,"lat":415860933}}},{"delta":{"node-LatLon":{"lon":-1061737747,"lat":415843066}}},{"delta":{"node-LatLon":{"lon":-1061706991,"lat":415825187}}},{"delta":{"node-LatLon":{"lon":-1061676217,"lat":415807327}}},{"delta":{"node-LatLon":{"lon":-1061645463,"lat":415789449}}},{"delta":{"node-LatLon":{"lon":-1061614689,"lat":415771591}}},{"delta":{"node-LatLon":{"lon":-1061584537,"lat":415754086}}},{"delta":{"node-LatLon":{"lon":-1061554447,"lat":415736525}}},{"delta":{"node-LatLon":{"lon":-1061524198,"lat":415719117}}},{"delta":{"node-LatLon":{"lon":-1061494074,"lat":415701589}}},{"delta":{"node-LatLon":{"lon":-1061463879,"lat":415684131}}},{"delta":{"node-LatLon":{"lon":-1061432150,"lat":415667054}}},{"delta":{"node-LatLon":{"lon":-1061396974,"lat":415654391}}},{"delta":{"node-LatLon":{"lon":-1061359292,"lat":415646802}}},{"delta":{"node-LatLon":{"lon":-1061320863,"lat":415641538}}},{"delta":{"node-LatLon":{"lon":-1061282426,"lat":415636308}}},{"delta":{"node-LatLon":{"lon":-1061244922,"lat":415631177}}},{"delta":{"node-LatLon":{"lon":-1061207418,"lat":415626048}}},{"delta":{"node-LatLon":{"lon":-1061169903,"lat":415620964}}},{"delta":{"node-LatLon":{"lon":-1061132571,"lat":415615219}}},{"delta":{"node-LatLon":{"lon":-1061096967,"lat":415605109}}},{"delta":{"node-LatLon":{"lon":-1061064131,"lat":415590319}}},{"delta":{"node-LatLon":{"lon":-1061032943,"lat":415573570}}},{"delta":{"node-LatLon":{"lon":-1061001748,"lat":415556828}}},{"delta":{"node-LatLon":{"lon":-1060970565,"lat":415540075}}},{"delta":{"node-LatLon":{"lon":-1060939622,"lat":415523077}}},{"delta":{"node-LatLon":{"lon":-1060912271,"lat":415503093}}},{"delta":{"node-LatLon":{"lon":-1060888721,"lat":415480493}}},{"delta":{"node-LatLon":{"lon":-1060865425,"lat":415457738}}},{"delta":{"node-LatLon":{"lon":-1060842121,"lat":415434989}}},{"delta":{"node-LatLon":{"lon":-1060830479,"lat":415423609}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415976300,"long":-1062132565}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31631}},"msgCnt":38}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":258.95,"latitude":41.1203855,"speed":34.18,"longitude":-104.7959041},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":160,"serialNumber":15589,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:35.285Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31631,"packetID":"0000000000000EF64E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415981013,"long":-1062070609},"name":"westbound_I80_267.19_272.06_SAT-1F82D7A2_RC_ARLI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062090421,"lat":415980971}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}},{"delta":{"node-LatLon":{"lon":-1062129021,"lat":415980789}}},{"delta":{"node-LatLon":{"lon":-1062147810,"lat":415980793}}},{"delta":{"node-LatLon":{"lon":-1062166552,"lat":415981611}}},{"delta":{"node-LatLon":{"lon":-1062184813,"lat":415984845}}},{"delta":{"node-LatLon":{"lon":-1062201989,"lat":415990520}}},{"delta":{"node-LatLon":{"lon":-1062217437,"lat":415998517}}},{"delta":{"node-LatLon":{"lon":-1062230703,"lat":416008482}}},{"delta":{"node-LatLon":{"lon":-1062241451,"lat":416020041}}},{"delta":{"node-LatLon":{"lon":-1062251290,"lat":416032060}}},{"delta":{"node-LatLon":{"lon":-1062261128,"lat":416044081}}},{"delta":{"node-LatLon":{"lon":-1062270774,"lat":416055871}}},{"delta":{"node-LatLon":{"lon":-1062280417,"lat":416067663}}},{"delta":{"node-LatLon":{"lon":-1062290067,"lat":416079452}}},{"delta":{"node-LatLon":{"lon":-1062299712,"lat":416091244}}},{"delta":{"node-LatLon":{"lon":-1062309426,"lat":416103003}}},{"delta":{"node-LatLon":{"lon":-1062319170,"lat":416114748}}},{"delta":{"node-LatLon":{"lon":-1062328711,"lat":416126587}}},{"delta":{"node-LatLon":{"lon":-1062338232,"lat":416138435}}},{"delta":{"node-LatLon":{"lon":-1062347925,"lat":416150205}}},{"delta":{"node-LatLon":{"lon":-1062357563,"lat":416162000}}},{"delta":{"node-LatLon":{"lon":-1062368179,"lat":416174692}}},{"delta":{"node-LatLon":{"lon":-1062379892,"lat":416186820}}},{"delta":{"node-LatLon":{"lon":-1062393288,"lat":416197926}}},{"delta":{"node-LatLon":{"lon":-1062408108,"lat":416207958}}},{"delta":{"node-LatLon":{"lon":-1062424227,"lat":416216793}}},{"delta":{"node-LatLon":{"lon":-1062441506,"lat":416224292}}},{"delta":{"node-LatLon":{"lon":-1062459705,"lat":416230444}}},{"delta":{"node-LatLon":{"lon":-1062478641,"lat":416235175}}},{"delta":{"node-LatLon":{"lon":-1062497949,"lat":416238998}}},{"delta":{"node-LatLon":{"lon":-1062517273,"lat":416242774}}},{"delta":{"node-LatLon":{"lon":-1062536082,"lat":416246433}}},{"delta":{"node-LatLon":{"lon":-1062554889,"lat":416250101}}},{"delta":{"node-LatLon":{"lon":-1062573685,"lat":416253798}}},{"delta":{"node-LatLon":{"lon":-1062592489,"lat":416257471}}},{"delta":{"node-LatLon":{"lon":-1062611298,"lat":416261134}}},{"delta":{"node-LatLon":{"lon":-1062630102,"lat":416264808}}},{"delta":{"node-LatLon":{"lon":-1062648910,"lat":416268474}}},{"delta":{"node-LatLon":{"lon":-1062667716,"lat":416272143}}},{"delta":{"node-LatLon":{"lon":-1062686526,"lat":416275802}}},{"delta":{"node-LatLon":{"lon":-1062705320,"lat":416279506}}},{"delta":{"node-LatLon":{"lon":-1062723512,"lat":416283487}}},{"delta":{"node-LatLon":{"lon":-1062741156,"lat":416288664}}},{"delta":{"node-LatLon":{"lon":-1062758081,"lat":416295053}}},{"delta":{"node-LatLon":{"lon":-1062774179,"lat":416302552}}},{"delta":{"node-LatLon":{"lon":-1062789262,"lat":416311156}}},{"delta":{"node-LatLon":{"lon":-1062803697,"lat":416320374}}},{"delta":{"node-LatLon":{"lon":-1062818144,"lat":416329581}}},{"delta":{"node-LatLon":{"lon":-1062832563,"lat":416338813}}},{"delta":{"node-LatLon":{"lon":-1062847004,"lat":416348027}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415981013,"long":-1062070609}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31631}},"msgCnt":56}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1826,"heading":259.1,"latitude":41.1204147,"speed":34.18,"longitude":-104.7957042},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":158,"serialNumber":15587,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:34.686Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31632,"packetID":"0000000000000F6CF3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412309017,"long":-1054379125},"name":"eastbound_I80_323.85_325.82_SAT-0405F53D_VSL_V002136","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054386377,"lat":412295717}}},{"delta":{"node-LatLon":{"lon":-1054390587,"lat":412281719}}},{"delta":{"node-LatLon":{"lon":-1054390501,"lat":412267361}}},{"delta":{"node-LatLon":{"lon":-1054387340,"lat":412253070}}},{"delta":{"node-LatLon":{"lon":-1054384188,"lat":412238776}}},{"delta":{"node-LatLon":{"lon":-1054383083,"lat":412224323}}},{"delta":{"node-LatLon":{"lon":-1054385250,"lat":412209941}}},{"delta":{"node-LatLon":{"lon":-1054389797,"lat":412195863}}},{"delta":{"node-LatLon":{"lon":-1054394498,"lat":412181812}}},{"delta":{"node-LatLon":{"lon":-1054399238,"lat":412167769}}},{"delta":{"node-LatLon":{"lon":-1054403962,"lat":412153723}}},{"delta":{"node-LatLon":{"lon":-1054408711,"lat":412139682}}},{"delta":{"node-LatLon":{"lon":-1054413260,"lat":412125813}}},{"delta":{"node-LatLon":{"lon":-1054415782,"lat":412111677}}},{"delta":{"node-LatLon":{"lon":-1054414034,"lat":412097480}}},{"delta":{"node-LatLon":{"lon":-1054408252,"lat":412083905}}},{"delta":{"node-LatLon":{"lon":-1054400204,"lat":412070975}}},{"delta":{"node-LatLon":{"lon":-1054391746,"lat":412058198}}},{"delta":{"node-LatLon":{"lon":-1054381691,"lat":412046104}}},{"delta":{"node-LatLon":{"lon":-1054370810,"lat":412034419}}},{"delta":{"node-LatLon":{"lon":-1054359947,"lat":412022723}}},{"delta":{"node-LatLon":{"lon":-1054349054,"lat":412011044}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000001110000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412309017,"long":-1054379125}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31632}},"msgCnt":21}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1823,"heading":258.9125,"latitude":41.1207321,"speed":34.16,"longitude":-104.7935083},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":157,"serialNumber":15586,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:29.216Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31632,"packetID":"0000000000000E347A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412822611,"long":-1055185238},"name":"eastbound_I80_317.68_323.85_SAT-E7615079_VSL_V002118","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055174028,"lat":412810812}}},{"delta":{"node-LatLon":{"lon":-1055151564,"lat":412787238}}},{"delta":{"node-LatLon":{"lon":-1055126153,"lat":412765484}}},{"delta":{"node-LatLon":{"lon":-1055096204,"lat":412747808}}},{"delta":{"node-LatLon":{"lon":-1055063926,"lat":412732570}}},{"delta":{"node-LatLon":{"lon":-1055028777,"lat":412721773}}},{"delta":{"node-LatLon":{"lon":-1054990989,"lat":412718648}}},{"delta":{"node-LatLon":{"lon":-1054953009,"lat":412716759}}},{"delta":{"node-LatLon":{"lon":-1054915016,"lat":412715870}}},{"delta":{"node-LatLon":{"lon":-1054877421,"lat":412719892}}},{"delta":{"node-LatLon":{"lon":-1054839790,"lat":412721101}}},{"delta":{"node-LatLon":{"lon":-1054808075,"lat":412706122}}},{"delta":{"node-LatLon":{"lon":-1054782861,"lat":412684644}}},{"delta":{"node-LatLon":{"lon":-1054756003,"lat":412664064}}},{"delta":{"node-LatLon":{"lon":-1054719971,"lat":412655405}}},{"delta":{"node-LatLon":{"lon":-1054681944,"lat":412652284}}},{"delta":{"node-LatLon":{"lon":-1054649671,"lat":412637001}}},{"delta":{"node-LatLon":{"lon":-1054617259,"lat":412621852}}},{"delta":{"node-LatLon":{"lon":-1054582192,"lat":412610689}}},{"delta":{"node-LatLon":{"lon":-1054551500,"lat":412593707}}},{"delta":{"node-LatLon":{"lon":-1054521939,"lat":412575543}}},{"delta":{"node-LatLon":{"lon":-1054492428,"lat":412557334}}},{"delta":{"node-LatLon":{"lon":-1054466482,"lat":412536415}}},{"delta":{"node-LatLon":{"lon":-1054448979,"lat":412511051}}},{"delta":{"node-LatLon":{"lon":-1054432727,"lat":412485180}}},{"delta":{"node-LatLon":{"lon":-1054416471,"lat":412459312}}},{"delta":{"node-LatLon":{"lon":-1054400231,"lat":412433438}}},{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054375725,"lat":412379414}}},{"delta":{"node-LatLon":{"lon":-1054370239,"lat":412350939}}},{"delta":{"node-LatLon":{"lon":-1054372327,"lat":412322445}}},{"delta":{"node-LatLon":{"lon":-1054386377,"lat":412295717}}},{"delta":{"node-LatLon":{"lon":-1054390587,"lat":412281719}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111110000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412822611,"long":-1055185238}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31632}},"msgCnt":24}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1823,"heading":258.95,"latitude":41.1208274,"speed":34.16,"longitude":-104.7928706},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":156,"serialNumber":15585,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:14:27.595Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1805,"heading":268.9125,"latitude":41.1243603,"speed":34.06,"longitude":-104.7570576},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":155,"serialNumber":15584,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:12:58.605Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1788,"heading":245.6375,"latitude":41.1273721,"speed":34.2,"longitude":-104.7257668},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":154,"serialNumber":15583,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:11:40.212Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31498,"packetID":"000000000000057CF2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416103734,"long":-1092210485},"name":"westbound_I80_91.0_104.83_SAT-11EB1AFB_RC_RSI80WGRFGD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092225602,"lat":416102051}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}},{"delta":{"node-LatLon":{"lon":-1092295103,"lat":416078549}}},{"delta":{"node-LatLon":{"lon":-1092353802,"lat":416055730}}},{"delta":{"node-LatLon":{"lon":-1092409233,"lat":415994268}}},{"delta":{"node-LatLon":{"lon":-1092453299,"lat":415926333}}},{"delta":{"node-LatLon":{"lon":-1092494255,"lat":415863151}}},{"delta":{"node-LatLon":{"lon":-1092542043,"lat":415808289}}},{"delta":{"node-LatLon":{"lon":-1092614541,"lat":415771804}}},{"delta":{"node-LatLon":{"lon":-1092686893,"lat":415745034}}},{"delta":{"node-LatLon":{"lon":-1092755235,"lat":415719687}}},{"delta":{"node-LatLon":{"lon":-1092824046,"lat":415694227}}},{"delta":{"node-LatLon":{"lon":-1092892916,"lat":415668054}}},{"delta":{"node-LatLon":{"lon":-1092959628,"lat":415638882}}},{"delta":{"node-LatLon":{"lon":-1093026230,"lat":415609696}}},{"delta":{"node-LatLon":{"lon":-1093092855,"lat":415580545}}},{"delta":{"node-LatLon":{"lon":-1093159414,"lat":415551340}}},{"delta":{"node-LatLon":{"lon":-1093225990,"lat":415522190}}},{"delta":{"node-LatLon":{"lon":-1093292630,"lat":415493128}}},{"delta":{"node-LatLon":{"lon":-1093362756,"lat":415469236}}},{"delta":{"node-LatLon":{"lon":-1093433593,"lat":415446486}}},{"delta":{"node-LatLon":{"lon":-1093501983,"lat":415419517}}},{"delta":{"node-LatLon":{"lon":-1093570430,"lat":415392320}}},{"delta":{"node-LatLon":{"lon":-1093638825,"lat":415365052}}},{"delta":{"node-LatLon":{"lon":-1093706625,"lat":415338051}}},{"delta":{"node-LatLon":{"lon":-1093779378,"lat":415323162}}},{"delta":{"node-LatLon":{"lon":-1093855135,"lat":415332204}}},{"delta":{"node-LatLon":{"lon":-1093927477,"lat":415317094}}},{"delta":{"node-LatLon":{"lon":-1093995757,"lat":415291937}}},{"delta":{"node-LatLon":{"lon":-1094070772,"lat":415279115}}},{"delta":{"node-LatLon":{"lon":-1094147255,"lat":415276886}}},{"delta":{"node-LatLon":{"lon":-1094224449,"lat":415282426}}},{"delta":{"node-LatLon":{"lon":-1094301394,"lat":415276124}}},{"delta":{"node-LatLon":{"lon":-1094371013,"lat":415249502}}},{"delta":{"node-LatLon":{"lon":-1094443930,"lat":415236997}}},{"delta":{"node-LatLon":{"lon":-1094510066,"lat":415263454}}},{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416103734,"long":-1092210485}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31498}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1804,"heading":235.8125,"latitude":41.1407438,"speed":34.14,"longitude":-104.6942247},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":150,"serialNumber":15579,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:10:10.898Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1804,"heading":235.7625,"latitude":41.1407266,"speed":34.18,"longitude":-104.6942583},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":151,"serialNumber":15580,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:10:10.997Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31498,"packetID":"000000000000057CF2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416103734,"long":-1092210485},"name":"westbound_I80_91.0_104.83_SAT-11EB1AFB_RC_RSI80WGRFGD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092225602,"lat":416102051}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}},{"delta":{"node-LatLon":{"lon":-1092295103,"lat":416078549}}},{"delta":{"node-LatLon":{"lon":-1092353802,"lat":416055730}}},{"delta":{"node-LatLon":{"lon":-1092409233,"lat":415994268}}},{"delta":{"node-LatLon":{"lon":-1092453299,"lat":415926333}}},{"delta":{"node-LatLon":{"lon":-1092494255,"lat":415863151}}},{"delta":{"node-LatLon":{"lon":-1092542043,"lat":415808289}}},{"delta":{"node-LatLon":{"lon":-1092614541,"lat":415771804}}},{"delta":{"node-LatLon":{"lon":-1092686893,"lat":415745034}}},{"delta":{"node-LatLon":{"lon":-1092755235,"lat":415719687}}},{"delta":{"node-LatLon":{"lon":-1092824046,"lat":415694227}}},{"delta":{"node-LatLon":{"lon":-1092892916,"lat":415668054}}},{"delta":{"node-LatLon":{"lon":-1092959628,"lat":415638882}}},{"delta":{"node-LatLon":{"lon":-1093026230,"lat":415609696}}},{"delta":{"node-LatLon":{"lon":-1093092855,"lat":415580545}}},{"delta":{"node-LatLon":{"lon":-1093159414,"lat":415551340}}},{"delta":{"node-LatLon":{"lon":-1093225990,"lat":415522190}}},{"delta":{"node-LatLon":{"lon":-1093292630,"lat":415493128}}},{"delta":{"node-LatLon":{"lon":-1093362756,"lat":415469236}}},{"delta":{"node-LatLon":{"lon":-1093433593,"lat":415446486}}},{"delta":{"node-LatLon":{"lon":-1093501983,"lat":415419517}}},{"delta":{"node-LatLon":{"lon":-1093570430,"lat":415392320}}},{"delta":{"node-LatLon":{"lon":-1093638825,"lat":415365052}}},{"delta":{"node-LatLon":{"lon":-1093706625,"lat":415338051}}},{"delta":{"node-LatLon":{"lon":-1093779378,"lat":415323162}}},{"delta":{"node-LatLon":{"lon":-1093855135,"lat":415332204}}},{"delta":{"node-LatLon":{"lon":-1093927477,"lat":415317094}}},{"delta":{"node-LatLon":{"lon":-1093995757,"lat":415291937}}},{"delta":{"node-LatLon":{"lon":-1094070772,"lat":415279115}}},{"delta":{"node-LatLon":{"lon":-1094147255,"lat":415276886}}},{"delta":{"node-LatLon":{"lon":-1094224449,"lat":415282426}}},{"delta":{"node-LatLon":{"lon":-1094301394,"lat":415276124}}},{"delta":{"node-LatLon":{"lon":-1094371013,"lat":415249502}}},{"delta":{"node-LatLon":{"lon":-1094443930,"lat":415236997}}},{"delta":{"node-LatLon":{"lon":-1094510066,"lat":415263454}}},{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416103734,"long":-1092210485}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31498}},"msgCnt":5}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1787,"heading":245.0375,"latitude":41.1287356,"speed":34.1,"longitude":-104.7218965},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":153,"serialNumber":15582,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:11:29.798Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1804,"heading":235.8125,"latitude":41.1406572,"speed":34.14,"longitude":-104.6943927},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":152,"serialNumber":15581,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:10:11.497Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:19Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":242.75,"latitude":41.1563554,"speed":27.74,"longitude":-104.6602258},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":148,"serialNumber":15577,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:08:31.690Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.7375,"latitude":41.1504085,"speed":10.58,"longitude":-104.6569867},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":145,"serialNumber":15574,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:04.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"00000000000004865E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410974214,"long":-1051103433},"name":"eastbound_I80_345.9_349.15_SAT-2D188807_VSL_V002275","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051084469,"lat":410971913}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1051046217,"lat":410971780}}},{"delta":{"node-LatLon":{"lon":-1051027336,"lat":410973993}}},{"delta":{"node-LatLon":{"lon":-1051008857,"lat":410977669}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050972405,"lat":410986387}}},{"delta":{"node-LatLon":{"lon":-1050953820,"lat":410989753}}},{"delta":{"node-LatLon":{"lon":-1050934905,"lat":410991795}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050896815,"lat":410994269}}},{"delta":{"node-LatLon":{"lon":-1050877759,"lat":410995411}}},{"delta":{"node-LatLon":{"lon":-1050858673,"lat":410996615}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050820456,"lat":410998476}}},{"delta":{"node-LatLon":{"lon":-1050801305,"lat":410998519}}},{"delta":{"node-LatLon":{"lon":-1050782155,"lat":410998320}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050743855,"lat":410997929}}},{"delta":{"node-LatLon":{"lon":-1050724706,"lat":410997718}}},{"delta":{"node-LatLon":{"lon":-1050705556,"lat":410997530}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050667295,"lat":410997427}}},{"delta":{"node-LatLon":{"lon":-1050648246,"lat":410998545}}},{"delta":{"node-LatLon":{"lon":-1050629421,"lat":411001016}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}},{"delta":{"node-LatLon":{"lon":-1050591949,"lat":411006727}}},{"delta":{"node-LatLon":{"lon":-1050573199,"lat":411009532}}},{"delta":{"node-LatLon":{"lon":-1050554451,"lat":411012343}}},{"delta":{"node-LatLon":{"lon":-1050535715,"lat":411015202}}},{"delta":{"node-LatLon":{"lon":-1050516970,"lat":411018025}}},{"delta":{"node-LatLon":{"lon":-1050498229,"lat":411020862}}},{"delta":{"node-LatLon":{"lon":-1050479271,"lat":411023677}}},{"delta":{"node-LatLon":{"lon":-1050460327,"lat":411026546}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410974214,"long":-1051103433}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":17}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1813,"heading":235.65,"latitude":41.1425286,"speed":34.22,"longitude":-104.6907602},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":149,"serialNumber":15578,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:10:00.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1809,"heading":24.8125,"latitude":41.1514708,"speed":15.66,"longitude":-104.6561164},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":147,"serialNumber":15576,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:13.987Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":33.1625,"latitude":41.1504928,"speed":11.56,"longitude":-104.656914},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":146,"serialNumber":15575,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:05.097Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"0000000000000E71AE","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411217079,"long":-1052895308},"name":"eastbound_I80_336.16_339.86_SAT-3150A15C_VSL_V002214","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1052878140,"lat":411209333}}},{"delta":{"node-LatLon":{"lon":-1052861535,"lat":411200909}}},{"delta":{"node-LatLon":{"lon":-1052844985,"lat":411192422}}},{"delta":{"node-LatLon":{"lon":-1052828416,"lat":411183958}}},{"delta":{"node-LatLon":{"lon":-1052811861,"lat":411175478}}},{"delta":{"node-LatLon":{"lon":-1052795294,"lat":411167011}}},{"delta":{"node-LatLon":{"lon":-1052778775,"lat":411158491}}},{"delta":{"node-LatLon":{"lon":-1052762243,"lat":411149986}}},{"delta":{"node-LatLon":{"lon":-1052745689,"lat":411141506}}},{"delta":{"node-LatLon":{"lon":-1052728865,"lat":411133341}}},{"delta":{"node-LatLon":{"lon":-1052712029,"lat":411126535}}},{"delta":{"node-LatLon":{"lon":-1052694431,"lat":411120945}}},{"delta":{"node-LatLon":{"lon":-1052676657,"lat":411115670}}},{"delta":{"node-LatLon":{"lon":-1052658860,"lat":411110441}}},{"delta":{"node-LatLon":{"lon":-1052641069,"lat":411105200}}},{"delta":{"node-LatLon":{"lon":-1052623255,"lat":411100002}}},{"delta":{"node-LatLon":{"lon":-1052605463,"lat":411094765}}},{"delta":{"node-LatLon":{"lon":-1052587658,"lat":411089552}}},{"delta":{"node-LatLon":{"lon":-1052569865,"lat":411084315}}},{"delta":{"node-LatLon":{"lon":-1052552081,"lat":411079062}}},{"delta":{"node-LatLon":{"lon":-1052534102,"lat":411073877}}},{"delta":{"node-LatLon":{"lon":-1052516080,"lat":411068778}}},{"delta":{"node-LatLon":{"lon":-1052497957,"lat":411063891}}},{"delta":{"node-LatLon":{"lon":-1052479703,"lat":411059291}}},{"delta":{"node-LatLon":{"lon":-1052461302,"lat":411055044}}},{"delta":{"node-LatLon":{"lon":-1052442589,"lat":411051677}}},{"delta":{"node-LatLon":{"lon":-1052423634,"lat":411049202}}},{"delta":{"node-LatLon":{"lon":-1052404522,"lat":411047559}}},{"delta":{"node-LatLon":{"lon":-1052385309,"lat":411046833}}},{"delta":{"node-LatLon":{"lon":-1052366071,"lat":411046704}}},{"delta":{"node-LatLon":{"lon":-1052346951,"lat":411046651}}},{"delta":{"node-LatLon":{"lon":-1052327830,"lat":411046722}}},{"delta":{"node-LatLon":{"lon":-1052308709,"lat":411046714}}},{"delta":{"node-LatLon":{"lon":-1052289589,"lat":411046568}}},{"delta":{"node-LatLon":{"lon":-1052270529,"lat":411045480}}},{"delta":{"node-LatLon":{"lon":-1052251668,"lat":411043133}}},{"delta":{"node-LatLon":{"lon":-1052233174,"lat":411039476}}},{"delta":{"node-LatLon":{"lon":-1052215223,"lat":411034508}}},{"delta":{"node-LatLon":{"lon":-1052197936,"lat":411028337}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411217079,"long":-1052895308}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":23}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.65,"latitude":41.1504005,"speed":10.48,"longitude":-104.6569936},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":144,"serialNumber":15573,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.992Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"000000000000019963","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410982319,"long":-1051615463},"name":"eastbound_I80_343.24_345.9_SAT-7C287339_VSL_V002255","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051578694,"lat":410989607}}},{"delta":{"node-LatLon":{"lon":-1051560307,"lat":410993246}}},{"delta":{"node-LatLon":{"lon":-1051541730,"lat":410996259}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051503871,"lat":410998228}}},{"delta":{"node-LatLon":{"lon":-1051484919,"lat":410997224}}},{"delta":{"node-LatLon":{"lon":-1051466104,"lat":410995204}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051428300,"lat":410990965}}},{"delta":{"node-LatLon":{"lon":-1051409297,"lat":410988823}}},{"delta":{"node-LatLon":{"lon":-1051390243,"lat":410986964}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051351924,"lat":410984978}}},{"delta":{"node-LatLon":{"lon":-1051332714,"lat":410985049}}},{"delta":{"node-LatLon":{"lon":-1051313512,"lat":410985509}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051275112,"lat":410986528}}},{"delta":{"node-LatLon":{"lon":-1051255905,"lat":410986855}}},{"delta":{"node-LatLon":{"lon":-1051236694,"lat":410986784}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051198327,"lat":410985247}}},{"delta":{"node-LatLon":{"lon":-1051179211,"lat":410983796}}},{"delta":{"node-LatLon":{"lon":-1051160152,"lat":410981958}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051122310,"lat":410976921}}},{"delta":{"node-LatLon":{"lon":-1051103433,"lat":410974214}}},{"delta":{"node-LatLon":{"lon":-1051084469,"lat":410971913}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410982319,"long":-1051615463}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":17}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.75,"latitude":41.1503925,"speed":10.4,"longitude":-104.6570004},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":143,"serialNumber":15572,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.895Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"0000000000000D7A5F","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411039476,"long":-1052233174},"name":"eastbound_I80_339.86_343.24_SAT-C920DC35_VSL_V002234","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1052215223,"lat":411034508}}},{"delta":{"node-LatLon":{"lon":-1052197936,"lat":411028337}}},{"delta":{"node-LatLon":{"lon":-1052181375,"lat":411021106}}},{"delta":{"node-LatLon":{"lon":-1052164942,"lat":411013681}}},{"delta":{"node-LatLon":{"lon":-1052148522,"lat":411006239}}},{"delta":{"node-LatLon":{"lon":-1052132112,"lat":410998785}}},{"delta":{"node-LatLon":{"lon":-1052115683,"lat":410991356}}},{"delta":{"node-LatLon":{"lon":-1052099402,"lat":410983743}}},{"delta":{"node-LatLon":{"lon":-1052083431,"lat":410975763}}},{"delta":{"node-LatLon":{"lon":-1052067516,"lat":410967720}}},{"delta":{"node-LatLon":{"lon":-1052050763,"lat":410960746}}},{"delta":{"node-LatLon":{"lon":-1052032886,"lat":410955603}}},{"delta":{"node-LatLon":{"lon":-1052014286,"lat":410952254}}},{"delta":{"node-LatLon":{"lon":-1051995357,"lat":410950942}}},{"delta":{"node-LatLon":{"lon":-1051976364,"lat":410951581}}},{"delta":{"node-LatLon":{"lon":-1051957579,"lat":410953842}}},{"delta":{"node-LatLon":{"lon":-1051938862,"lat":410956431}}},{"delta":{"node-LatLon":{"lon":-1051920112,"lat":410958875}}},{"delta":{"node-LatLon":{"lon":-1051901229,"lat":410960621}}},{"delta":{"node-LatLon":{"lon":-1051882249,"lat":410961626}}},{"delta":{"node-LatLon":{"lon":-1051863254,"lat":410962462}}},{"delta":{"node-LatLon":{"lon":-1051844258,"lat":410963288}}},{"delta":{"node-LatLon":{"lon":-1051825257,"lat":410964045}}},{"delta":{"node-LatLon":{"lon":-1051806052,"lat":410964852}}},{"delta":{"node-LatLon":{"lon":-1051786867,"lat":410965906}}},{"delta":{"node-LatLon":{"lon":-1051767713,"lat":410967235}}},{"delta":{"node-LatLon":{"lon":-1051748594,"lat":410968835}}},{"delta":{"node-LatLon":{"lon":-1051729481,"lat":410970472}}},{"delta":{"node-LatLon":{"lon":-1051710370,"lat":410972125}}},{"delta":{"node-LatLon":{"lon":-1051691247,"lat":410973695}}},{"delta":{"node-LatLon":{"lon":-1051672128,"lat":410975297}}},{"delta":{"node-LatLon":{"lon":-1051653026,"lat":410977005}}},{"delta":{"node-LatLon":{"lon":-1051634017,"lat":410979217}}},{"delta":{"node-LatLon":{"lon":-1051615463,"lat":410982319}}},{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051578694,"lat":410989607}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411039476,"long":-1052233174}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.8375,"latitude":41.1503846,"speed":10.24,"longitude":-104.6570069},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":142,"serialNumber":15571,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.795Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"0000000000000CBE5E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411072254,"long":-1052512418},"name":"westbound_I80_338.1_334.3_SAT-6073BA35_VSL_V002226","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1052530201,"lat":411077493}}},{"delta":{"node-LatLon":{"lon":-1052547987,"lat":411082724}}},{"delta":{"node-LatLon":{"lon":-1052565806,"lat":411087956}}},{"delta":{"node-LatLon":{"lon":-1052583610,"lat":411093218}}},{"delta":{"node-LatLon":{"lon":-1052601439,"lat":411098430}}},{"delta":{"node-LatLon":{"lon":-1052619267,"lat":411103644}}},{"delta":{"node-LatLon":{"lon":-1052637078,"lat":411108892}}},{"delta":{"node-LatLon":{"lon":-1052654889,"lat":411114140}}},{"delta":{"node-LatLon":{"lon":-1052672710,"lat":411119370}}},{"delta":{"node-LatLon":{"lon":-1052690521,"lat":411124618}}},{"delta":{"node-LatLon":{"lon":-1052708153,"lat":411130194}}},{"delta":{"node-LatLon":{"lon":-1052725070,"lat":411136916}}},{"delta":{"node-LatLon":{"lon":-1052741814,"lat":411145056}}},{"delta":{"node-LatLon":{"lon":-1052758326,"lat":411153468}}},{"delta":{"node-LatLon":{"lon":-1052774845,"lat":411161873}}},{"delta":{"node-LatLon":{"lon":-1052791339,"lat":411170306}}},{"delta":{"node-LatLon":{"lon":-1052807830,"lat":411178743}}},{"delta":{"node-LatLon":{"lon":-1052824352,"lat":411187145}}},{"delta":{"node-LatLon":{"lon":-1052840856,"lat":411195568}}},{"delta":{"node-LatLon":{"lon":-1052857346,"lat":411204006}}},{"delta":{"node-LatLon":{"lon":-1052873972,"lat":411212287}}},{"delta":{"node-LatLon":{"lon":-1052891232,"lat":411219785}}},{"delta":{"node-LatLon":{"lon":-1052908476,"lat":411226105}}},{"delta":{"node-LatLon":{"lon":-1052926265,"lat":411231492}}},{"delta":{"node-LatLon":{"lon":-1052944495,"lat":411235952}}},{"delta":{"node-LatLon":{"lon":-1052963092,"lat":411239437}}},{"delta":{"node-LatLon":{"lon":-1052981949,"lat":411242012}}},{"delta":{"node-LatLon":{"lon":-1053000858,"lat":411244369}}},{"delta":{"node-LatLon":{"lon":-1053019776,"lat":411246688}}},{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053057596,"lat":411251395}}},{"delta":{"node-LatLon":{"lon":-1053076521,"lat":411253681}}},{"delta":{"node-LatLon":{"lon":-1053095502,"lat":411255432}}},{"delta":{"node-LatLon":{"lon":-1053114552,"lat":411256735}}},{"delta":{"node-LatLon":{"lon":-1053133604,"lat":411258022}}},{"delta":{"node-LatLon":{"lon":-1053152654,"lat":411259322}}},{"delta":{"node-LatLon":{"lon":-1053171705,"lat":411260611}}},{"delta":{"node-LatLon":{"lon":-1053190756,"lat":411261912}}},{"delta":{"node-LatLon":{"lon":-1053209808,"lat":411263198}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411072254,"long":-1052512418}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":22}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.9375,"latitude":41.150377,"speed":10.18,"longitude":-104.6570136},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":141,"serialNumber":15570,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.795Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"000000000000025AF6","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410964119,"long":-1051880840},"name":"westbound_I80_341.6_338.1_SAT-540A458A_VSL_V002247","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}},{"delta":{"node-LatLon":{"lon":-1051918620,"lat":410961452}}},{"delta":{"node-LatLon":{"lon":-1051937339,"lat":410959095}}},{"delta":{"node-LatLon":{"lon":-1051956011,"lat":410956529}}},{"delta":{"node-LatLon":{"lon":-1051974706,"lat":410954064}}},{"delta":{"node-LatLon":{"lon":-1051993632,"lat":410953204}}},{"delta":{"node-LatLon":{"lon":-1052012535,"lat":410954343}}},{"delta":{"node-LatLon":{"lon":-1052031026,"lat":410957479}}},{"delta":{"node-LatLon":{"lon":-1052048783,"lat":410962474}}},{"delta":{"node-LatLon":{"lon":-1052065392,"lat":410969376}}},{"delta":{"node-LatLon":{"lon":-1052081156,"lat":410977355}}},{"delta":{"node-LatLon":{"lon":-1052097000,"lat":410985243}}},{"delta":{"node-LatLon":{"lon":-1052113110,"lat":410992814}}},{"delta":{"node-LatLon":{"lon":-1052129309,"lat":411000279}}},{"delta":{"node-LatLon":{"lon":-1052145586,"lat":411007645}}},{"delta":{"node-LatLon":{"lon":-1052161846,"lat":411015033}}},{"delta":{"node-LatLon":{"lon":-1052178141,"lat":411022378}}},{"delta":{"node-LatLon":{"lon":-1052194841,"lat":411029703}}},{"delta":{"node-LatLon":{"lon":-1052212178,"lat":411036116}}},{"delta":{"node-LatLon":{"lon":-1052230242,"lat":411041252}}},{"delta":{"node-LatLon":{"lon":-1052248856,"lat":411045103}}},{"delta":{"node-LatLon":{"lon":-1052267858,"lat":411047647}}},{"delta":{"node-LatLon":{"lon":-1052287100,"lat":411048748}}},{"delta":{"node-LatLon":{"lon":-1052306402,"lat":411048858}}},{"delta":{"node-LatLon":{"lon":-1052325706,"lat":411048940}}},{"delta":{"node-LatLon":{"lon":-1052345008,"lat":411049101}}},{"delta":{"node-LatLon":{"lon":-1052364312,"lat":411049135}}},{"delta":{"node-LatLon":{"lon":-1052383393,"lat":411049206}}},{"delta":{"node-LatLon":{"lon":-1052402452,"lat":411049814}}},{"delta":{"node-LatLon":{"lon":-1052421426,"lat":411051319}}},{"delta":{"node-LatLon":{"lon":-1052440234,"lat":411053738}}},{"delta":{"node-LatLon":{"lon":-1052458744,"lat":411057225}}},{"delta":{"node-LatLon":{"lon":-1052476819,"lat":411061846}}},{"delta":{"node-LatLon":{"lon":-1052494624,"lat":411067040}}},{"delta":{"node-LatLon":{"lon":-1052512418,"lat":411072254}}},{"delta":{"node-LatLon":{"lon":-1052530201,"lat":411077493}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410964119,"long":-1051880840}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":17}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":32.9375,"latitude":41.150377,"speed":10.18,"longitude":-104.6570136},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":140,"serialNumber":15569,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"00000000000001F426","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410988342,"long":-1051297925},"name":"westbound_I80_344.69_341.6_SAT-0D253AC5_VSL_V002266","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051316401,"lat":410987822}}},{"delta":{"node-LatLon":{"lon":-1051334880,"lat":410987346}}},{"delta":{"node-LatLon":{"lon":-1051353366,"lat":410987336}}},{"delta":{"node-LatLon":{"lon":-1051371832,"lat":410988032}}},{"delta":{"node-LatLon":{"lon":-1051390245,"lat":410989287}}},{"delta":{"node-LatLon":{"lon":-1051408562,"lat":410991189}}},{"delta":{"node-LatLon":{"lon":-1051426852,"lat":410993239}}},{"delta":{"node-LatLon":{"lon":-1051445141,"lat":410995292}}},{"delta":{"node-LatLon":{"lon":-1051464077,"lat":410997440}}},{"delta":{"node-LatLon":{"lon":-1051483045,"lat":410999413}}},{"delta":{"node-LatLon":{"lon":-1051502129,"lat":411000540}}},{"delta":{"node-LatLon":{"lon":-1051521267,"lat":411000337}}},{"delta":{"node-LatLon":{"lon":-1051540305,"lat":410998837}}},{"delta":{"node-LatLon":{"lon":-1051559069,"lat":410995977}}},{"delta":{"node-LatLon":{"lon":-1051577615,"lat":410992374}}},{"delta":{"node-LatLon":{"lon":-1051596119,"lat":410988652}}},{"delta":{"node-LatLon":{"lon":-1051614630,"lat":410984946}}},{"delta":{"node-LatLon":{"lon":-1051633310,"lat":410981780}}},{"delta":{"node-LatLon":{"lon":-1051652234,"lat":410979420}}},{"delta":{"node-LatLon":{"lon":-1051671284,"lat":410977720}}},{"delta":{"node-LatLon":{"lon":-1051690345,"lat":410976089}}},{"delta":{"node-LatLon":{"lon":-1051709415,"lat":410974522}}},{"delta":{"node-LatLon":{"lon":-1051728480,"lat":410972919}}},{"delta":{"node-LatLon":{"lon":-1051747551,"lat":410971360}}},{"delta":{"node-LatLon":{"lon":-1051766615,"lat":410969748}}},{"delta":{"node-LatLon":{"lon":-1051785706,"lat":410968344}}},{"delta":{"node-LatLon":{"lon":-1051804844,"lat":410967360}}},{"delta":{"node-LatLon":{"lon":-1051823993,"lat":410966522}}},{"delta":{"node-LatLon":{"lon":-1051842945,"lat":410965770}}},{"delta":{"node-LatLon":{"lon":-1051861895,"lat":410964974}}},{"delta":{"node-LatLon":{"lon":-1051880840,"lat":410964119}}},{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410988342,"long":-1051297925}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":17}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":251.0625,"latitude":41.1531237,"speed":0.02,"longitude":-104.6592302},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":137,"serialNumber":15566,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:05:45.221Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":33.15,"latitude":41.1503693,"speed":10.08,"longitude":-104.6570203},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":139,"serialNumber":15568,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:03.695Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31624,"packetID":"0000000000000AB37E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411002479,"long":-1050722393},"name":"westbound_I80_347.69_344.69_SAT-3E628AB0_VSL_V002290","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050741574,"lat":411002681}}},{"delta":{"node-LatLon":{"lon":-1050760755,"lat":411002869}}},{"delta":{"node-LatLon":{"lon":-1050779937,"lat":411002969}}},{"delta":{"node-LatLon":{"lon":-1050799110,"lat":411002558}}},{"delta":{"node-LatLon":{"lon":-1050818249,"lat":411001589}}},{"delta":{"node-LatLon":{"lon":-1050837364,"lat":411000370}}},{"delta":{"node-LatLon":{"lon":-1050856482,"lat":410999179}}},{"delta":{"node-LatLon":{"lon":-1050875598,"lat":410997967}}},{"delta":{"node-LatLon":{"lon":-1050895063,"lat":410996770}}},{"delta":{"node-LatLon":{"lon":-1050914524,"lat":410995536}}},{"delta":{"node-LatLon":{"lon":-1050933978,"lat":410994246}}},{"delta":{"node-LatLon":{"lon":-1050953322,"lat":410992263}}},{"delta":{"node-LatLon":{"lon":-1050972317,"lat":410988851}}},{"delta":{"node-LatLon":{"lon":-1050990956,"lat":410984444}}},{"delta":{"node-LatLon":{"lon":-1051009569,"lat":410979971}}},{"delta":{"node-LatLon":{"lon":-1051028444,"lat":410976198}}},{"delta":{"node-LatLon":{"lon":-1051047752,"lat":410974038}}},{"delta":{"node-LatLon":{"lon":-1051067254,"lat":410973454}}},{"delta":{"node-LatLon":{"lon":-1051086711,"lat":410974535}}},{"delta":{"node-LatLon":{"lon":-1051105965,"lat":410976959}}},{"delta":{"node-LatLon":{"lon":-1051125148,"lat":410979701}}},{"delta":{"node-LatLon":{"lon":-1051144365,"lat":410982302}}},{"delta":{"node-LatLon":{"lon":-1051163659,"lat":410984549}}},{"delta":{"node-LatLon":{"lon":-1051183016,"lat":410986460}}},{"delta":{"node-LatLon":{"lon":-1051202450,"lat":410987845}}},{"delta":{"node-LatLon":{"lon":-1051221934,"lat":410988766}}},{"delta":{"node-LatLon":{"lon":-1051241445,"lat":410989249}}},{"delta":{"node-LatLon":{"lon":-1051260967,"lat":410989237}}},{"delta":{"node-LatLon":{"lon":-1051279448,"lat":410988854}}},{"delta":{"node-LatLon":{"lon":-1051297925,"lat":410988342}}},{"delta":{"node-LatLon":{"lon":-1051316401,"lat":410987822}}},{"delta":{"node-LatLon":{"lon":-1051334880,"lat":410987346}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411002479,"long":-1050722393}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31624}},"msgCnt":13}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":35.525,"latitude":41.1502985,"speed":8.76,"longitude":-104.6570835},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":138,"serialNumber":15567,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:07:02.689Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":251.0625,"latitude":41.1531242,"speed":0.02,"longitude":-104.6592305},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":136,"serialNumber":15565,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:05:33.701Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":251.0625,"latitude":41.1531244,"speed":0.02,"longitude":-104.6592302},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":135,"serialNumber":15564,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:04:35.702Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1808,"heading":251.0625,"latitude":41.1531259,"speed":0.02,"longitude":-104.659231},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":134,"serialNumber":15563,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:04:24.119Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":251.0625,"latitude":41.1531274,"speed":0.02,"longitude":-104.6592349},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":133,"serialNumber":15562,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T23:00:21.777Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1821,"heading":55.6625,"latitude":41.1432762,"speed":33.68,"longitude":-104.6883421},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":132,"serialNumber":15561,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:53:06.352Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31610,"packetID":"0000000000000B4F4D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411246688,"long":-1053019776},"name":"westbound_I80_323.05_335.11_SAT-B91A2E52_RC_LARI80ECHEYBD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053114552,"lat":411256735}}},{"delta":{"node-LatLon":{"lon":-1053190756,"lat":411261912}}},{"delta":{"node-LatLon":{"lon":-1053266797,"lat":411268154}}},{"delta":{"node-LatLon":{"lon":-1053338337,"lat":411279861}}},{"delta":{"node-LatLon":{"lon":-1053405816,"lat":411300582}}},{"delta":{"node-LatLon":{"lon":-1053462344,"lat":411338132}}},{"delta":{"node-LatLon":{"lon":-1053516546,"lat":411380266}}},{"delta":{"node-LatLon":{"lon":-1053575650,"lat":411418098}}},{"delta":{"node-LatLon":{"lon":-1053651429,"lat":411438163}}},{"delta":{"node-LatLon":{"lon":-1053731780,"lat":411444206}}},{"delta":{"node-LatLon":{"lon":-1053806111,"lat":411463205}}},{"delta":{"node-LatLon":{"lon":-1053873524,"lat":411489854}}},{"delta":{"node-LatLon":{"lon":-1053936557,"lat":411522463}}},{"delta":{"node-LatLon":{"lon":-1053996450,"lat":411555749}}},{"delta":{"node-LatLon":{"lon":-1054048431,"lat":411595888}}},{"delta":{"node-LatLon":{"lon":-1054090598,"lat":411643369}}},{"delta":{"node-LatLon":{"lon":-1054127454,"lat":411694572}}},{"delta":{"node-LatLon":{"lon":-1054164403,"lat":411745737}}},{"delta":{"node-LatLon":{"lon":-1054200041,"lat":411796105}}},{"delta":{"node-LatLon":{"lon":-1054218886,"lat":411851211}}},{"delta":{"node-LatLon":{"lon":-1054243815,"lat":411905185}}},{"delta":{"node-LatLon":{"lon":-1054287780,"lat":411952905}}},{"delta":{"node-LatLon":{"lon":-1054331852,"lat":412000578}}},{"delta":{"node-LatLon":{"lon":-1054374628,"lat":412046505}}},{"delta":{"node-LatLon":{"lon":-1054408178,"lat":412096432}}},{"delta":{"node-LatLon":{"lon":-1054401538,"lat":412152329}}},{"delta":{"node-LatLon":{"lon":-1054382654,"lat":412208387}}},{"delta":{"node-LatLon":{"lon":-1054387241,"lat":412265649}}},{"delta":{"node-LatLon":{"lon":-1054369571,"lat":412321177}}},{"delta":{"node-LatLon":{"lon":-1054372542,"lat":412378541}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1000000000001111}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411246688,"long":-1053019776}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5127}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31610}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1821,"heading":55.6,"latitude":41.143259,"speed":33.66,"longitude":-104.6883751},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":131,"serialNumber":15560,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:53:06.352Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31610,"packetID":"0000000000000F25D6","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412420501,"long":-1054392109},"name":"eastbound_I80_323.05_335.11_SAT-2FAB6C57_RC_LARI80ECHEYBI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054375725,"lat":412379414}}},{"delta":{"node-LatLon":{"lon":-1054372327,"lat":412322445}}},{"delta":{"node-LatLon":{"lon":-1054390501,"lat":412267361}}},{"delta":{"node-LatLon":{"lon":-1054385250,"lat":412209941}}},{"delta":{"node-LatLon":{"lon":-1054403962,"lat":412153723}}},{"delta":{"node-LatLon":{"lon":-1054414034,"lat":412097480}}},{"delta":{"node-LatLon":{"lon":-1054381691,"lat":412046104}}},{"delta":{"node-LatLon":{"lon":-1054338178,"lat":411999356}}},{"delta":{"node-LatLon":{"lon":-1054294112,"lat":411952041}}},{"delta":{"node-LatLon":{"lon":-1054250145,"lat":411904675}}},{"delta":{"node-LatLon":{"lon":-1054224664,"lat":411850678}}},{"delta":{"node-LatLon":{"lon":-1054205670,"lat":411794929}}},{"delta":{"node-LatLon":{"lon":-1054169702,"lat":411743977}}},{"delta":{"node-LatLon":{"lon":-1054132917,"lat":411693026}}},{"delta":{"node-LatLon":{"lon":-1054096134,"lat":411642075}}},{"delta":{"node-LatLon":{"lon":-1054053933,"lat":411594218}}},{"delta":{"node-LatLon":{"lon":-1054001524,"lat":411553158}}},{"delta":{"node-LatLon":{"lon":-1053940802,"lat":411519210}}},{"delta":{"node-LatLon":{"lon":-1053877704,"lat":411486540}}},{"delta":{"node-LatLon":{"lon":-1053810387,"lat":411459552}}},{"delta":{"node-LatLon":{"lon":-1053739051,"lat":411438927}}},{"delta":{"node-LatLon":{"lon":-1053667804,"lat":411418317}}},{"delta":{"node-LatLon":{"lon":-1053596576,"lat":411397677}}},{"delta":{"node-LatLon":{"lon":-1053529834,"lat":411369925}}},{"delta":{"node-LatLon":{"lon":-1053471129,"lat":411332755}}},{"delta":{"node-LatLon":{"lon":-1053412343,"lat":411295468}}},{"delta":{"node-LatLon":{"lon":-1053346537,"lat":411266040}}},{"delta":{"node-LatLon":{"lon":-1053271167,"lat":411256326}}},{"delta":{"node-LatLon":{"lon":-1053194621,"lat":411255101}}},{"delta":{"node-LatLon":{"lon":-1053118075,"lat":411253866}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111110000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412420501,"long":-1054392109}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5127}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31610}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1820,"heading":55.65,"latitude":41.1429505,"speed":33.72,"longitude":-104.6889711},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":130,"serialNumber":15559,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:53:04.456Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31610,"packetID":"0000000000000936E7","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417414634,"long":-1068269969},"name":"westbound_I80_221.2_235.23_SAT-09D8678A_RC_RAWI80ELARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1068289321,"lat":417415359}}},{"delta":{"node-LatLon":{"lon":-1068308673,"lat":417416093}}},{"delta":{"node-LatLon":{"lon":-1068385974,"lat":417418859}}},{"delta":{"node-LatLon":{"lon":-1068463156,"lat":417421689}}},{"delta":{"node-LatLon":{"lon":-1068540338,"lat":417424515}}},{"delta":{"node-LatLon":{"lon":-1068617852,"lat":417427395}}},{"delta":{"node-LatLon":{"lon":-1068695369,"lat":417430231}}},{"delta":{"node-LatLon":{"lon":-1068772890,"lat":417433050}}},{"delta":{"node-LatLon":{"lon":-1068850417,"lat":417435830}}},{"delta":{"node-LatLon":{"lon":-1068927943,"lat":417438632}}},{"delta":{"node-LatLon":{"lon":-1069005025,"lat":417441424}}},{"delta":{"node-LatLon":{"lon":-1069082106,"lat":417444219}}},{"delta":{"node-LatLon":{"lon":-1069159408,"lat":417446974}}},{"delta":{"node-LatLon":{"lon":-1069236759,"lat":417451306}}},{"delta":{"node-LatLon":{"lon":-1069312011,"lat":417465173}}},{"delta":{"node-LatLon":{"lon":-1069385103,"lat":417484568}}},{"delta":{"node-LatLon":{"lon":-1069458135,"lat":417504094}}},{"delta":{"node-LatLon":{"lon":-1069530060,"lat":417523167}}},{"delta":{"node-LatLon":{"lon":-1069600849,"lat":417541844}}},{"delta":{"node-LatLon":{"lon":-1069673525,"lat":417555795}}},{"delta":{"node-LatLon":{"lon":-1069748966,"lat":417568966}}},{"delta":{"node-LatLon":{"lon":-1069824418,"lat":417582109}}},{"delta":{"node-LatLon":{"lon":-1069899351,"lat":417595155}}},{"delta":{"node-LatLon":{"lon":-1069973766,"lat":417608100}}},{"delta":{"node-LatLon":{"lon":-1070048170,"lat":417621086}}},{"delta":{"node-LatLon":{"lon":-1070123773,"lat":417634264}}},{"delta":{"node-LatLon":{"lon":-1070199399,"lat":417647374}}},{"delta":{"node-LatLon":{"lon":-1070274965,"lat":417660512}}},{"delta":{"node-LatLon":{"lon":-1070350472,"lat":417673678}}},{"delta":{"node-LatLon":{"lon":-1070425989,"lat":417686813}}},{"delta":{"node-LatLon":{"lon":-1070501711,"lat":417699947}}},{"delta":{"node-LatLon":{"lon":-1070577425,"lat":417713109}}},{"delta":{"node-LatLon":{"lon":-1070653637,"lat":417726293}}},{"delta":{"node-LatLon":{"lon":-1070730992,"lat":417736504}}},{"delta":{"node-LatLon":{"lon":-1070808409,"lat":417727589}}},{"delta":{"node-LatLon":{"lon":-1070884161,"lat":417718392}}},{"delta":{"node-LatLon":{"lon":-1070959940,"lat":417729715}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417414634,"long":-1068269969}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31610}},"msgCnt":34}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1819,"heading":55.6625,"latitude":41.1429333,"speed":33.7,"longitude":-104.6890041},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":129,"serialNumber":15558,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:53:04.456Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31610,"packetID":"00000000000009698C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417730521,"long":-1070980675},"name":"eastbound_I80_221.2_235.23_SAT-BA88D691_RC_RAWI80ELARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1070961677,"lat":417727641}}},{"delta":{"node-LatLon":{"lon":-1070885649,"lat":417716362}}},{"delta":{"node-LatLon":{"lon":-1070809626,"lat":417725169}}},{"delta":{"node-LatLon":{"lon":-1070732756,"lat":417733042}}},{"delta":{"node-LatLon":{"lon":-1070656229,"lat":417722191}}},{"delta":{"node-LatLon":{"lon":-1070580490,"lat":417709023}}},{"delta":{"node-LatLon":{"lon":-1070504992,"lat":417695900}}},{"delta":{"node-LatLon":{"lon":-1070429493,"lat":417682786}}},{"delta":{"node-LatLon":{"lon":-1070354047,"lat":417669673}}},{"delta":{"node-LatLon":{"lon":-1070278596,"lat":417656581}}},{"delta":{"node-LatLon":{"lon":-1070202954,"lat":417643413}}},{"delta":{"node-LatLon":{"lon":-1070127097,"lat":417630244}}},{"delta":{"node-LatLon":{"lon":-1070051256,"lat":417617028}}},{"delta":{"node-LatLon":{"lon":-1069975759,"lat":417603852}}},{"delta":{"node-LatLon":{"lon":-1069900250,"lat":417590719}}},{"delta":{"node-LatLon":{"lon":-1069825529,"lat":417577695}}},{"delta":{"node-LatLon":{"lon":-1069751604,"lat":417564757}}},{"delta":{"node-LatLon":{"lon":-1069677665,"lat":417551870}}},{"delta":{"node-LatLon":{"lon":-1069603910,"lat":417538967}}},{"delta":{"node-LatLon":{"lon":-1069531945,"lat":417521380}}},{"delta":{"node-LatLon":{"lon":-1069460002,"lat":417502274}}},{"delta":{"node-LatLon":{"lon":-1069387530,"lat":417482961}}},{"delta":{"node-LatLon":{"lon":-1069315049,"lat":417463671}}},{"delta":{"node-LatLon":{"lon":-1069240161,"lat":417448143}}},{"delta":{"node-LatLon":{"lon":-1069162781,"lat":417442613}}},{"delta":{"node-LatLon":{"lon":-1069085198,"lat":417439823}}},{"delta":{"node-LatLon":{"lon":-1069007744,"lat":417437041}}},{"delta":{"node-LatLon":{"lon":-1068930291,"lat":417434237}}},{"delta":{"node-LatLon":{"lon":-1068853004,"lat":417431463}}},{"delta":{"node-LatLon":{"lon":-1068775721,"lat":417428637}}},{"delta":{"node-LatLon":{"lon":-1068698384,"lat":417425830}}},{"delta":{"node-LatLon":{"lon":-1068620993,"lat":417423054}}},{"delta":{"node-LatLon":{"lon":-1068543604,"lat":417420239}}},{"delta":{"node-LatLon":{"lon":-1068465827,"lat":417417448}}},{"delta":{"node-LatLon":{"lon":-1068388058,"lat":417414571}}},{"delta":{"node-LatLon":{"lon":-1068310584,"lat":417411739}}},{"delta":{"node-LatLon":{"lon":-1068291290,"lat":417411033}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417730521,"long":-1070980675}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31610}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1813,"heading":55.8,"latitude":41.1416528,"speed":33.86,"longitude":-104.6915031},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":128,"serialNumber":15557,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:52:56.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1785,"heading":64.5,"latitude":41.1294943,"speed":33.72,"longitude":-104.7183663},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":127,"serialNumber":15556,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:51:38.659Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1785,"heading":64.4875,"latitude":41.129429,"speed":33.72,"longitude":-104.7185478},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":126,"serialNumber":15555,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:51:38.064Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1786,"heading":64.4,"latitude":41.1281042,"speed":33.72,"longitude":-104.7222965},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":125,"serialNumber":15554,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:51:27.862Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1810,"heading":83.2375,"latitude":41.1237719,"speed":33.74,"longitude":-104.7710343},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":124,"serialNumber":15553,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:49:24.469Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1812,"heading":79.025,"latitude":41.1232447,"speed":33.74,"longitude":-104.7751515},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":123,"serialNumber":15552,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:49:14.272Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1847,"heading":78.975,"latitude":41.1169477,"speed":32.36,"longitude":-104.8182828},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":122,"serialNumber":15551,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:47:24.575Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1845,"heading":77.7,"latitude":41.1159012,"speed":34,"longitude":-104.8409627},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":121,"serialNumber":15550,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:46:27.777Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1849,"heading":73.9,"latitude":41.1149888,"speed":33.66,"longitude":-104.8452745},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":120,"serialNumber":15549,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:46:16.678Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1906,"heading":89.55,"latitude":41.116473,"speed":33.74,"longitude":-104.8918353},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":119,"serialNumber":15548,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:44:17.473Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1934,"heading":81.9125,"latitude":41.1133295,"speed":33.72,"longitude":-104.928415},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":118,"serialNumber":15547,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:42:45.469Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1935,"heading":81.8375,"latitude":41.112875,"speed":33.74,"longitude":-104.9328746},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":117,"serialNumber":15546,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:42:34.275Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":1974,"heading":84.1875,"latitude":41.1097147,"speed":33.74,"longitude":-104.9682881},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":116,"serialNumber":15545,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:41:05.380Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2012,"heading":69.7125,"latitude":41.1052636,"speed":33.68,"longitude":-104.9975033},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":115,"serialNumber":15544,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:39:50.989Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2013,"heading":69.6,"latitude":41.1051793,"speed":33.7,"longitude":-104.9978043},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":114,"serialNumber":15543,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:39:50.295Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2023,"heading":69.3,"latitude":41.1036902,"speed":33.84,"longitude":-105.0030723},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":113,"serialNumber":15542,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:39:36.288Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2067,"heading":88.15,"latitude":41.103157,"speed":32.74,"longitude":-105.0380418},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":112,"serialNumber":15541,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:38:06.906Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2101,"heading":89.1625,"latitude":41.0997427,"speed":29.06,"longitude":-105.0669513},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":111,"serialNumber":15540,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:36:43.704Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2106,"heading":90.6,"latitude":41.0997719,"speed":29.24,"longitude":-105.072266},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":110,"serialNumber":15539,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:36:28.405Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2156,"heading":92.55,"latitude":41.0978479,"speed":18.52,"longitude":-105.114164},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":109,"serialNumber":15538,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:34:24.894Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.7,"latitude":41.0973887,"speed":29.26,"longitude":-105.1050253},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":108,"serialNumber":15537,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.398Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525486,"packetID":"0000000000000A59C2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410988342,"long":-1051297925},"name":"westbound_I80_344.69_341.6_RSU-10.145.13.73_VSL_V002266","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051316401,"lat":410987822}}},{"delta":{"node-LatLon":{"lon":-1051334880,"lat":410987346}}},{"delta":{"node-LatLon":{"lon":-1051353366,"lat":410987336}}},{"delta":{"node-LatLon":{"lon":-1051371832,"lat":410988032}}},{"delta":{"node-LatLon":{"lon":-1051390245,"lat":410989287}}},{"delta":{"node-LatLon":{"lon":-1051408562,"lat":410991189}}},{"delta":{"node-LatLon":{"lon":-1051426852,"lat":410993239}}},{"delta":{"node-LatLon":{"lon":-1051445141,"lat":410995292}}},{"delta":{"node-LatLon":{"lon":-1051464077,"lat":410997440}}},{"delta":{"node-LatLon":{"lon":-1051483045,"lat":410999413}}},{"delta":{"node-LatLon":{"lon":-1051502129,"lat":411000540}}},{"delta":{"node-LatLon":{"lon":-1051521267,"lat":411000337}}},{"delta":{"node-LatLon":{"lon":-1051540305,"lat":410998837}}},{"delta":{"node-LatLon":{"lon":-1051559069,"lat":410995977}}},{"delta":{"node-LatLon":{"lon":-1051577615,"lat":410992374}}},{"delta":{"node-LatLon":{"lon":-1051596119,"lat":410988652}}},{"delta":{"node-LatLon":{"lon":-1051614630,"lat":410984946}}},{"delta":{"node-LatLon":{"lon":-1051633310,"lat":410981780}}},{"delta":{"node-LatLon":{"lon":-1051652234,"lat":410979420}}},{"delta":{"node-LatLon":{"lon":-1051671284,"lat":410977720}}},{"delta":{"node-LatLon":{"lon":-1051690345,"lat":410976089}}},{"delta":{"node-LatLon":{"lon":-1051709415,"lat":410974522}}},{"delta":{"node-LatLon":{"lon":-1051728480,"lat":410972919}}},{"delta":{"node-LatLon":{"lon":-1051747551,"lat":410971360}}},{"delta":{"node-LatLon":{"lon":-1051766615,"lat":410969748}}},{"delta":{"node-LatLon":{"lon":-1051785706,"lat":410968344}}},{"delta":{"node-LatLon":{"lon":-1051804844,"lat":410967360}}},{"delta":{"node-LatLon":{"lon":-1051823993,"lat":410966522}}},{"delta":{"node-LatLon":{"lon":-1051842945,"lat":410965770}}},{"delta":{"node-LatLon":{"lon":-1051861895,"lat":410964974}}},{"delta":{"node-LatLon":{"lon":-1051880840,"lat":410964119}}},{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410988342,"long":-1051297925}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":525486}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.4125,"latitude":41.0973906,"speed":29.22,"longitude":-105.1049903},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":107,"serialNumber":15536,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.298Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525488,"packetID":"000000000000095E23","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410982319,"long":-1051615463},"name":"eastbound_I80_343.24_345.9_RSU-10.145.13.73_VSL_V002255","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051578694,"lat":410989607}}},{"delta":{"node-LatLon":{"lon":-1051560307,"lat":410993246}}},{"delta":{"node-LatLon":{"lon":-1051541730,"lat":410996259}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051503871,"lat":410998228}}},{"delta":{"node-LatLon":{"lon":-1051484919,"lat":410997224}}},{"delta":{"node-LatLon":{"lon":-1051466104,"lat":410995204}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051428300,"lat":410990965}}},{"delta":{"node-LatLon":{"lon":-1051409297,"lat":410988823}}},{"delta":{"node-LatLon":{"lon":-1051390243,"lat":410986964}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051351924,"lat":410984978}}},{"delta":{"node-LatLon":{"lon":-1051332714,"lat":410985049}}},{"delta":{"node-LatLon":{"lon":-1051313512,"lat":410985509}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051275112,"lat":410986528}}},{"delta":{"node-LatLon":{"lon":-1051255905,"lat":410986855}}},{"delta":{"node-LatLon":{"lon":-1051236694,"lat":410986784}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051198327,"lat":410985247}}},{"delta":{"node-LatLon":{"lon":-1051179211,"lat":410983796}}},{"delta":{"node-LatLon":{"lon":-1051160152,"lat":410981958}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051122310,"lat":410976921}}},{"delta":{"node-LatLon":{"lon":-1051103433,"lat":410974214}}},{"delta":{"node-LatLon":{"lon":-1051084469,"lat":410971913}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410982319,"long":-1051615463}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":525488}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.4125,"latitude":41.0973927,"speed":29.22,"longitude":-105.1049556},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":106,"serialNumber":15535,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.202Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525489,"packetID":"000000000000075900","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410974214,"long":-1051103433},"name":"eastbound_I80_345.9_349.15_RSU-10.145.13.73_VSL_V002275","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1051084469,"lat":410971913}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1051046217,"lat":410971780}}},{"delta":{"node-LatLon":{"lon":-1051027336,"lat":410973993}}},{"delta":{"node-LatLon":{"lon":-1051008857,"lat":410977669}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050972405,"lat":410986387}}},{"delta":{"node-LatLon":{"lon":-1050953820,"lat":410989753}}},{"delta":{"node-LatLon":{"lon":-1050934905,"lat":410991795}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050896815,"lat":410994269}}},{"delta":{"node-LatLon":{"lon":-1050877759,"lat":410995411}}},{"delta":{"node-LatLon":{"lon":-1050858673,"lat":410996615}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050820456,"lat":410998476}}},{"delta":{"node-LatLon":{"lon":-1050801305,"lat":410998519}}},{"delta":{"node-LatLon":{"lon":-1050782155,"lat":410998320}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050743855,"lat":410997929}}},{"delta":{"node-LatLon":{"lon":-1050724706,"lat":410997718}}},{"delta":{"node-LatLon":{"lon":-1050705556,"lat":410997530}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050667295,"lat":410997427}}},{"delta":{"node-LatLon":{"lon":-1050648246,"lat":410998545}}},{"delta":{"node-LatLon":{"lon":-1050629421,"lat":411001016}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}},{"delta":{"node-LatLon":{"lon":-1050591949,"lat":411006727}}},{"delta":{"node-LatLon":{"lon":-1050573199,"lat":411009532}}},{"delta":{"node-LatLon":{"lon":-1050554451,"lat":411012343}}},{"delta":{"node-LatLon":{"lon":-1050535715,"lat":411015202}}},{"delta":{"node-LatLon":{"lon":-1050516970,"lat":411018025}}},{"delta":{"node-LatLon":{"lon":-1050498229,"lat":411020862}}},{"delta":{"node-LatLon":{"lon":-1050479271,"lat":411023677}}},{"delta":{"node-LatLon":{"lon":-1050460327,"lat":411026546}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410974214,"long":-1051103433}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":525489}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.1625,"latitude":41.0973947,"speed":29.22,"longitude":-105.1049209},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":105,"serialNumber":15534,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.102Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525489,"packetID":"0000000000000B442E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411020862,"long":-1050498229},"name":"eastbound_I80_349.15_353.5_RSU-10.145.13.73_VSL_V002299","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050479271,"lat":411023677}}},{"delta":{"node-LatLon":{"lon":-1050460327,"lat":411026546}}},{"delta":{"node-LatLon":{"lon":-1050441324,"lat":411029165}}},{"delta":{"node-LatLon":{"lon":-1050422091,"lat":411030485}}},{"delta":{"node-LatLon":{"lon":-1050402781,"lat":411030948}}},{"delta":{"node-LatLon":{"lon":-1050383473,"lat":411031428}}},{"delta":{"node-LatLon":{"lon":-1050364161,"lat":411031843}}},{"delta":{"node-LatLon":{"lon":-1050344848,"lat":411031826}}},{"delta":{"node-LatLon":{"lon":-1050325631,"lat":411030376}}},{"delta":{"node-LatLon":{"lon":-1050306653,"lat":411027659}}},{"delta":{"node-LatLon":{"lon":-1050288159,"lat":411024603}}},{"delta":{"node-LatLon":{"lon":-1050269678,"lat":411021507}}},{"delta":{"node-LatLon":{"lon":-1050251179,"lat":411018469}}},{"delta":{"node-LatLon":{"lon":-1050232676,"lat":411015448}}},{"delta":{"node-LatLon":{"lon":-1050214174,"lat":411012425}}},{"delta":{"node-LatLon":{"lon":-1050195535,"lat":411009957}}},{"delta":{"node-LatLon":{"lon":-1050176673,"lat":411008812}}},{"delta":{"node-LatLon":{"lon":-1050157751,"lat":411008904}}},{"delta":{"node-LatLon":{"lon":-1050138924,"lat":411010341}}},{"delta":{"node-LatLon":{"lon":-1050120335,"lat":411013008}}},{"delta":{"node-LatLon":{"lon":-1050102002,"lat":411016953}}},{"delta":{"node-LatLon":{"lon":-1050084082,"lat":411021875}}},{"delta":{"node-LatLon":{"lon":-1050066198,"lat":411026874}}},{"delta":{"node-LatLon":{"lon":-1050048325,"lat":411031899}}},{"delta":{"node-LatLon":{"lon":-1050030476,"lat":411036969}}},{"delta":{"node-LatLon":{"lon":-1050012604,"lat":411041995}}},{"delta":{"node-LatLon":{"lon":-1049994738,"lat":411047033}}},{"delta":{"node-LatLon":{"lon":-1049976865,"lat":411052057}}},{"delta":{"node-LatLon":{"lon":-1049959011,"lat":411057120}}},{"delta":{"node-LatLon":{"lon":-1049941141,"lat":411062151}}},{"delta":{"node-LatLon":{"lon":-1049923053,"lat":411066918}}},{"delta":{"node-LatLon":{"lon":-1049904488,"lat":411070470}}},{"delta":{"node-LatLon":{"lon":-1049885607,"lat":411072913}}},{"delta":{"node-LatLon":{"lon":-1049866692,"lat":411075206}}},{"delta":{"node-LatLon":{"lon":-1049847778,"lat":411077504}}},{"delta":{"node-LatLon":{"lon":-1049828870,"lat":411079830}}},{"delta":{"node-LatLon":{"lon":-1049809945,"lat":411082077}}},{"delta":{"node-LatLon":{"lon":-1049791039,"lat":411084415}}},{"delta":{"node-LatLon":{"lon":-1049772121,"lat":411086693}}},{"delta":{"node-LatLon":{"lon":-1049753209,"lat":411089002}}},{"delta":{"node-LatLon":{"lon":-1049734291,"lat":411091274}}},{"delta":{"node-LatLon":{"lon":-1049715382,"lat":411093589}}},{"delta":{"node-LatLon":{"lon":-1049696453,"lat":411095807}}},{"delta":{"node-LatLon":{"lon":-1049677431,"lat":411097499}}},{"delta":{"node-LatLon":{"lon":-1049658348,"lat":411098753}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411020862,"long":-1050498229}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":525489}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"RSU","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":265.1625,"latitude":41.097397,"speed":29.22,"longitude":-105.1048863},"rxSource":"RSU"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":104,"serialNumber":15533,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:13.102Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":525486,"packetID":"000000000000026E43","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411002479,"long":-1050722393},"name":"westbound_I80_347.69_344.69_RSU-10.145.13.73_VSL_V002290","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050741574,"lat":411002681}}},{"delta":{"node-LatLon":{"lon":-1050760755,"lat":411002869}}},{"delta":{"node-LatLon":{"lon":-1050779937,"lat":411002969}}},{"delta":{"node-LatLon":{"lon":-1050799110,"lat":411002558}}},{"delta":{"node-LatLon":{"lon":-1050818249,"lat":411001589}}},{"delta":{"node-LatLon":{"lon":-1050837364,"lat":411000370}}},{"delta":{"node-LatLon":{"lon":-1050856482,"lat":410999179}}},{"delta":{"node-LatLon":{"lon":-1050875598,"lat":410997967}}},{"delta":{"node-LatLon":{"lon":-1050895063,"lat":410996770}}},{"delta":{"node-LatLon":{"lon":-1050914524,"lat":410995536}}},{"delta":{"node-LatLon":{"lon":-1050933978,"lat":410994246}}},{"delta":{"node-LatLon":{"lon":-1050953322,"lat":410992263}}},{"delta":{"node-LatLon":{"lon":-1050972317,"lat":410988851}}},{"delta":{"node-LatLon":{"lon":-1050990956,"lat":410984444}}},{"delta":{"node-LatLon":{"lon":-1051009569,"lat":410979971}}},{"delta":{"node-LatLon":{"lon":-1051028444,"lat":410976198}}},{"delta":{"node-LatLon":{"lon":-1051047752,"lat":410974038}}},{"delta":{"node-LatLon":{"lon":-1051067254,"lat":410973454}}},{"delta":{"node-LatLon":{"lon":-1051086711,"lat":410974535}}},{"delta":{"node-LatLon":{"lon":-1051105965,"lat":410976959}}},{"delta":{"node-LatLon":{"lon":-1051125148,"lat":410979701}}},{"delta":{"node-LatLon":{"lon":-1051144365,"lat":410982302}}},{"delta":{"node-LatLon":{"lon":-1051163659,"lat":410984549}}},{"delta":{"node-LatLon":{"lon":-1051183016,"lat":410986460}}},{"delta":{"node-LatLon":{"lon":-1051202450,"lat":410987845}}},{"delta":{"node-LatLon":{"lon":-1051221934,"lat":410988766}}},{"delta":{"node-LatLon":{"lon":-1051241445,"lat":410989249}}},{"delta":{"node-LatLon":{"lon":-1051260967,"lat":410989237}}},{"delta":{"node-LatLon":{"lon":-1051279448,"lat":410988854}}},{"delta":{"node-LatLon":{"lon":-1051297925,"lat":410988342}}},{"delta":{"node-LatLon":{"lon":-1051316401,"lat":410987822}}},{"delta":{"node-LatLon":{"lon":-1051334880,"lat":410987346}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411002479,"long":-1050722393}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":525486}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":263.275,"latitude":41.0974419,"speed":29.16,"longitude":-105.1042981},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":103,"serialNumber":15532,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:11.398Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2147,"heading":262.5375,"latitude":41.0974641,"speed":29.2,"longitude":-105.1040569},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":102,"serialNumber":15531,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:33:10.599Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2066,"heading":268.2875,"latitude":41.1036482,"speed":33.28,"longitude":-105.0369024},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":99,"serialNumber":15528,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:30:09.661Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31494,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31494}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2149,"heading":252.35,"latitude":41.0983605,"speed":29.5,"longitude":-105.0994445},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":101,"serialNumber":15530,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:32:56.892Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2100,"heading":269.9,"latitude":41.1002133,"speed":33.28,"longitude":-105.0674061},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":100,"serialNumber":15529,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:31:27.899Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2062,"heading":278.05,"latitude":41.1035285,"speed":32.36,"longitude":-105.0326251},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":98,"serialNumber":15527,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:29:58.756Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2044,"heading":102.4,"latitude":41.1010291,"speed":29.68,"longitude":-105.0199132},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":97,"serialNumber":15526,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:28:29.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":521096,"packetID":"0000000000000D1DE9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411471325,"long":-1046807852},"name":"eastbound_I-80_369.0_370.0_SAT-35E16D57_RW_4794%BUFF0","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046791998,"lat":411479473}}},{"delta":{"node-LatLon":{"lon":-1046776252,"lat":411487602}}},{"delta":{"node-LatLon":{"lon":-1046760496,"lat":411495722}}},{"delta":{"node-LatLon":{"lon":-1046744707,"lat":411503803}}},{"delta":{"node-LatLon":{"lon":-1046728753,"lat":411511697}}},{"delta":{"node-LatLon":{"lon":-1046712447,"lat":411519168}}},{"delta":{"node-LatLon":{"lon":-1046695838,"lat":411526248}}},{"delta":{"node-LatLon":{"lon":-1046678980,"lat":411532982}}},{"delta":{"node-LatLon":{"lon":-1046661836,"lat":411539290}}},{"delta":{"node-LatLon":{"lon":-1046644437,"lat":411545186}}},{"delta":{"node-LatLon":{"lon":-1046626808,"lat":411550674}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":1440,"doNotUse3":0,"doNotUse4":0,"startYear":2018,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411471325,"long":-1046807852}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":777}},{"item":{"itis":13579}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":510180}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025307,"speed":24.46,"longitude":-105.0468926},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":96,"serialNumber":15525,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000F6380","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"Temp","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":1,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":4868}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":3}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025263,"speed":24.46,"longitude":-105.0469211},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":94,"serialNumber":15523,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31532,"packetID":"0000000000000D4252","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412846200,"long":-1055207674},"name":"eastbound_I80_317.45_323.05_SAT-5AFFFEF8_RC_LARI80ECHEYI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055196465,"lat":412834401}}},{"delta":{"node-LatLon":{"lon":-1055185238,"lat":412822611}}},{"delta":{"node-LatLon":{"lon":-1055174028,"lat":412810812}}},{"delta":{"node-LatLon":{"lon":-1055162838,"lat":412799002}}},{"delta":{"node-LatLon":{"lon":-1055151564,"lat":412787238}}},{"delta":{"node-LatLon":{"lon":-1055139485,"lat":412775945}}},{"delta":{"node-LatLon":{"lon":-1055126153,"lat":412765484}}},{"delta":{"node-LatLon":{"lon":-1055111710,"lat":412756134}}},{"delta":{"node-LatLon":{"lon":-1055096204,"lat":412747808}}},{"delta":{"node-LatLon":{"lon":-1055080126,"lat":412740115}}},{"delta":{"node-LatLon":{"lon":-1055063926,"lat":412732570}}},{"delta":{"node-LatLon":{"lon":-1055046853,"lat":412726244}}},{"delta":{"node-LatLon":{"lon":-1055028777,"lat":412721773}}},{"delta":{"node-LatLon":{"lon":-1055009981,"lat":412719587}}},{"delta":{"node-LatLon":{"lon":-1054990989,"lat":412718648}}},{"delta":{"node-LatLon":{"lon":-1054972006,"lat":412717639}}},{"delta":{"node-LatLon":{"lon":-1054953009,"lat":412716759}}},{"delta":{"node-LatLon":{"lon":-1054934016,"lat":412716179}}},{"delta":{"node-LatLon":{"lon":-1054915016,"lat":412715870}}},{"delta":{"node-LatLon":{"lon":-1054896123,"lat":412717322}}},{"delta":{"node-LatLon":{"lon":-1054877421,"lat":412719892}}},{"delta":{"node-LatLon":{"lon":-1054858665,"lat":412722173}}},{"delta":{"node-LatLon":{"lon":-1054839790,"lat":412721101}}},{"delta":{"node-LatLon":{"lon":-1054822378,"lat":412715508}}},{"delta":{"node-LatLon":{"lon":-1054808075,"lat":412706122}}},{"delta":{"node-LatLon":{"lon":-1054795466,"lat":412695384}}},{"delta":{"node-LatLon":{"lon":-1054782861,"lat":412684644}}},{"delta":{"node-LatLon":{"lon":-1054770097,"lat":412673836}}},{"delta":{"node-LatLon":{"lon":-1054756003,"lat":412664064}}},{"delta":{"node-LatLon":{"lon":-1054738855,"lat":412657720}}},{"delta":{"node-LatLon":{"lon":-1054719971,"lat":412655405}}},{"delta":{"node-LatLon":{"lon":-1054700821,"lat":412654615}}},{"delta":{"node-LatLon":{"lon":-1054681944,"lat":412652284}}},{"delta":{"node-LatLon":{"lon":-1054664843,"lat":412645844}}},{"delta":{"node-LatLon":{"lon":-1054649671,"lat":412637001}}},{"delta":{"node-LatLon":{"lon":-1054634409,"lat":412628251}}},{"delta":{"node-LatLon":{"lon":-1054617259,"lat":412621852}}},{"delta":{"node-LatLon":{"lon":-1054599367,"lat":412616899}}},{"delta":{"node-LatLon":{"lon":-1054582192,"lat":412610689}}},{"delta":{"node-LatLon":{"lon":-1054566302,"lat":412602767}}},{"delta":{"node-LatLon":{"lon":-1054551500,"lat":412593707}}},{"delta":{"node-LatLon":{"lon":-1054536736,"lat":412584610}}},{"delta":{"node-LatLon":{"lon":-1054521939,"lat":412575543}}},{"delta":{"node-LatLon":{"lon":-1054507197,"lat":412566427}}},{"delta":{"node-LatLon":{"lon":-1054492428,"lat":412557334}}},{"delta":{"node-LatLon":{"lon":-1054478373,"lat":412547636}}},{"delta":{"node-LatLon":{"lon":-1054466482,"lat":412536415}}},{"delta":{"node-LatLon":{"lon":-1054457123,"lat":412523979}}},{"delta":{"node-LatLon":{"lon":-1054448979,"lat":412511051}}},{"delta":{"node-LatLon":{"lon":-1054440857,"lat":412498114}}},{"delta":{"node-LatLon":{"lon":-1054432727,"lat":412485180}}},{"delta":{"node-LatLon":{"lon":-1054424622,"lat":412472238}}},{"delta":{"node-LatLon":{"lon":-1054416471,"lat":412459312}}},{"delta":{"node-LatLon":{"lon":-1054408332,"lat":412446382}}},{"delta":{"node-LatLon":{"lon":-1054400231,"lat":412433438}}},{"delta":{"node-LatLon":{"lon":-1054392109,"lat":412420501}}},{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054379237,"lat":412393551}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412846200,"long":-1055207674}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31532}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025307,"speed":24.46,"longitude":-105.0468926},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":95,"serialNumber":15524,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31534,"packetID":"0000000000000BF552","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412378541,"long":-1054372542},"name":"westbound_I80_317.45_323.05_SAT-7D6DFE3D_RC_LARI80ECHEYD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054376265,"lat":412392751}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}},{"delta":{"node-LatLon":{"lon":-1054388532,"lat":412420113}}},{"delta":{"node-LatLon":{"lon":-1054396624,"lat":412433185}}},{"delta":{"node-LatLon":{"lon":-1054404781,"lat":412446234}}},{"delta":{"node-LatLon":{"lon":-1054412998,"lat":412459262}}},{"delta":{"node-LatLon":{"lon":-1054421149,"lat":412472313}}},{"delta":{"node-LatLon":{"lon":-1054429340,"lat":412485351}}},{"delta":{"node-LatLon":{"lon":-1054437555,"lat":412498379}}},{"delta":{"node-LatLon":{"lon":-1054445744,"lat":412511417}}},{"delta":{"node-LatLon":{"lon":-1054453974,"lat":412524441}}},{"delta":{"node-LatLon":{"lon":-1054463289,"lat":412537025}}},{"delta":{"node-LatLon":{"lon":-1054475122,"lat":412548474}}},{"delta":{"node-LatLon":{"lon":-1054489160,"lat":412558405}}},{"delta":{"node-LatLon":{"lon":-1054504069,"lat":412567600}}},{"delta":{"node-LatLon":{"lon":-1054519000,"lat":412576776}}},{"delta":{"node-LatLon":{"lon":-1054533896,"lat":412585985}}},{"delta":{"node-LatLon":{"lon":-1054548833,"lat":412595156}}},{"delta":{"node-LatLon":{"lon":-1054563820,"lat":412604280}}},{"delta":{"node-LatLon":{"lon":-1054579779,"lat":412612388}}},{"delta":{"node-LatLon":{"lon":-1054597055,"lat":412618777}}},{"delta":{"node-LatLon":{"lon":-1054615114,"lat":412623812}}},{"delta":{"node-LatLon":{"lon":-1054632271,"lat":412629637}}},{"delta":{"node-LatLon":{"lon":-1054647306,"lat":412638180}}},{"delta":{"node-LatLon":{"lon":-1054662004,"lat":412647078}}},{"delta":{"node-LatLon":{"lon":-1054678467,"lat":412653902}}},{"delta":{"node-LatLon":{"lon":-1054696868,"lat":412656761}}},{"delta":{"node-LatLon":{"lon":-1054715678,"lat":412657581}}},{"delta":{"node-LatLon":{"lon":-1054734355,"lat":412659287}}},{"delta":{"node-LatLon":{"lon":-1054751683,"lat":412664718}}},{"delta":{"node-LatLon":{"lon":-1054765976,"lat":412673917}}},{"delta":{"node-LatLon":{"lon":-1054778503,"lat":412684544}}},{"delta":{"node-LatLon":{"lon":-1054791379,"lat":412695492}}},{"delta":{"node-LatLon":{"lon":-1054804278,"lat":412706425}}},{"delta":{"node-LatLon":{"lon":-1054818479,"lat":412716349}}},{"delta":{"node-LatLon":{"lon":-1054835859,"lat":412722690}}},{"delta":{"node-LatLon":{"lon":-1054854996,"lat":412724695}}},{"delta":{"node-LatLon":{"lon":-1054874196,"lat":412722759}}},{"delta":{"node-LatLon":{"lon":-1054893260,"lat":412720064}}},{"delta":{"node-LatLon":{"lon":-1054912492,"lat":412718274}}},{"delta":{"node-LatLon":{"lon":-1054931875,"lat":412718613}}},{"delta":{"node-LatLon":{"lon":-1054951253,"lat":412719209}}},{"delta":{"node-LatLon":{"lon":-1054969662,"lat":412719789}}},{"delta":{"node-LatLon":{"lon":-1054987987,"lat":412721117}}},{"delta":{"node-LatLon":{"lon":-1055005745,"lat":412724757}}},{"delta":{"node-LatLon":{"lon":-1055022420,"lat":412730636}}},{"delta":{"node-LatLon":{"lon":-1055038524,"lat":412737393}}},{"delta":{"node-LatLon":{"lon":-1055054603,"lat":412744185}}},{"delta":{"node-LatLon":{"lon":-1055070731,"lat":412750911}}},{"delta":{"node-LatLon":{"lon":-1055086830,"lat":412757675}}},{"delta":{"node-LatLon":{"lon":-1055102919,"lat":412764454}}},{"delta":{"node-LatLon":{"lon":-1055119050,"lat":412771172}}},{"delta":{"node-LatLon":{"lon":-1055134655,"lat":412779343}}},{"delta":{"node-LatLon":{"lon":-1055148584,"lat":412789095}}},{"delta":{"node-LatLon":{"lon":-1055160661,"lat":412800171}}},{"delta":{"node-LatLon":{"lon":-1055171718,"lat":412811853}}},{"delta":{"node-LatLon":{"lon":-1055182800,"lat":412823521}}},{"delta":{"node-LatLon":{"lon":-1055193934,"lat":412835162}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011111"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412378541,"long":-1054372542}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31534}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.102522,"speed":24.46,"longitude":-105.0469496},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":93,"serialNumber":15522,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"00000000000003E132","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"eastbound_I80_111.16_130.84_SAT-DEE31829_RC_RSI80ERAWI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.102522,"speed":24.46,"longitude":-105.0469496},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":92,"serialNumber":15521,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"000000000000032307","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416780373,"long":-1087800160},"name":"westbound_I80_111.16_130.84_SAT-60EFA4BA_RC_RSI80ERAWD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1087818098,"lat":416784087}}},{"delta":{"node-LatLon":{"lon":-1087836031,"lat":416787816}}},{"delta":{"node-LatLon":{"lon":-1087907758,"lat":416802744}}},{"delta":{"node-LatLon":{"lon":-1087979504,"lat":416817627}}},{"delta":{"node-LatLon":{"lon":-1088052834,"lat":416835667}}},{"delta":{"node-LatLon":{"lon":-1088118809,"lat":416865925}}},{"delta":{"node-LatLon":{"lon":-1088189118,"lat":416887479}}},{"delta":{"node-LatLon":{"lon":-1088265956,"lat":416884718}}},{"delta":{"node-LatLon":{"lon":-1088342780,"lat":416881687}}},{"delta":{"node-LatLon":{"lon":-1088419492,"lat":416886484}}},{"delta":{"node-LatLon":{"lon":-1088493522,"lat":416903350}}},{"delta":{"node-LatLon":{"lon":-1088567559,"lat":416920405}}},{"delta":{"node-LatLon":{"lon":-1088642038,"lat":416936455}}},{"delta":{"node-LatLon":{"lon":-1088718787,"lat":416933306}}},{"delta":{"node-LatLon":{"lon":-1088792811,"lat":416916445}}},{"delta":{"node-LatLon":{"lon":-1088868743,"lat":416911533}}},{"delta":{"node-LatLon":{"lon":-1088944838,"lat":416921259}}},{"delta":{"node-LatLon":{"lon":-1089020933,"lat":416916370}}},{"delta":{"node-LatLon":{"lon":-1089090262,"lat":416891382}}},{"delta":{"node-LatLon":{"lon":-1089158444,"lat":416862087}}},{"delta":{"node-LatLon":{"lon":-1089206739,"lat":416816167}}},{"delta":{"node-LatLon":{"lon":-1089229701,"lat":416761043}}},{"delta":{"node-LatLon":{"lon":-1089278517,"lat":416719880}}},{"delta":{"node-LatLon":{"lon":-1089348486,"lat":416699184}}},{"delta":{"node-LatLon":{"lon":-1089425832,"lat":416694198}}},{"delta":{"node-LatLon":{"lon":-1089503649,"lat":416693457}}},{"delta":{"node-LatLon":{"lon":-1089580254,"lat":416689749}}},{"delta":{"node-LatLon":{"lon":-1089654935,"lat":416679778}}},{"delta":{"node-LatLon":{"lon":-1089727701,"lat":416664462}}},{"delta":{"node-LatLon":{"lon":-1089800350,"lat":416634151}}},{"delta":{"node-LatLon":{"lon":-1089872661,"lat":416603374}}},{"delta":{"node-LatLon":{"lon":-1089942282,"lat":416573714}}},{"delta":{"node-LatLon":{"lon":-1090009243,"lat":416545210}}},{"delta":{"node-LatLon":{"lon":-1090076173,"lat":416516668}}},{"delta":{"node-LatLon":{"lon":-1090143069,"lat":416488162}}},{"delta":{"node-LatLon":{"lon":-1090209918,"lat":416459596}}},{"delta":{"node-LatLon":{"lon":-1090277470,"lat":416430810}}},{"delta":{"node-LatLon":{"lon":-1090345662,"lat":416401720}}},{"delta":{"node-LatLon":{"lon":-1090413831,"lat":416372606}}},{"delta":{"node-LatLon":{"lon":-1090485302,"lat":416354405}}},{"delta":{"node-LatLon":{"lon":-1090559312,"lat":416342147}}},{"delta":{"node-LatLon":{"lon":-1090633109,"lat":416329839}}},{"delta":{"node-LatLon":{"lon":-1090706742,"lat":416317644}}},{"delta":{"node-LatLon":{"lon":-1090780363,"lat":416305412}}},{"delta":{"node-LatLon":{"lon":-1090854362,"lat":416289159}}},{"delta":{"node-LatLon":{"lon":-1090923703,"lat":416263510}}},{"delta":{"node-LatLon":{"lon":-1090992931,"lat":416237673}}},{"delta":{"node-LatLon":{"lon":-1091062121,"lat":416211766}}},{"delta":{"node-LatLon":{"lon":-1091131370,"lat":416185951}}},{"delta":{"node-LatLon":{"lon":-1091198118,"lat":416160999}}},{"delta":{"node-LatLon":{"lon":-1091264852,"lat":416136031}}},{"delta":{"node-LatLon":{"lon":-1091281511,"lat":416129751}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000011111100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416780373,"long":-1087800160}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025176,"speed":24.46,"longitude":-105.0469782},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":91,"serialNumber":15520,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31497,"packetID":"0000000000000BC3EF","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415325796,"long":-1094614954},"name":"westbound_I80_90.098_90.312_SAT-8D4B0B6B_RC_GRTUNWB","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094631379,"lat":415333237}}},{"delta":{"node-LatLon":{"lon":-1094647572,"lat":415340958}}},{"delta":{"node-LatLon":{"lon":-1094662661,"lat":415349838}}},{"delta":{"node-LatLon":{"lon":-1094677547,"lat":415358928}}},{"delta":{"node-LatLon":{"lon":-1094692747,"lat":415367707}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000000100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415325796,"long":-1094614954}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31497}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025176,"speed":24.46,"longitude":-105.0469782},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":90,"serialNumber":15519,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:12.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000A6155","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415272879,"long":-1094524441},"name":"westbound_I80_83.01_91.0_SAT-BCC7F251_RC_RSI80WGRAD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}},{"delta":{"node-LatLon":{"lon":-1094567629,"lat":415301333}}},{"delta":{"node-LatLon":{"lon":-1094598552,"lat":415318326}}},{"delta":{"node-LatLon":{"lon":-1094631379,"lat":415333237}}},{"delta":{"node-LatLon":{"lon":-1094662661,"lat":415349838}}},{"delta":{"node-LatLon":{"lon":-1094692747,"lat":415367707}}},{"delta":{"node-LatLon":{"lon":-1094725523,"lat":415382855}}},{"delta":{"node-LatLon":{"lon":-1094759103,"lat":415397020}}},{"delta":{"node-LatLon":{"lon":-1094787376,"lat":415416158}}},{"delta":{"node-LatLon":{"lon":-1094803681,"lat":415442345}}},{"delta":{"node-LatLon":{"lon":-1094827523,"lat":415464696}}},{"delta":{"node-LatLon":{"lon":-1094857768,"lat":415483037}}},{"delta":{"node-LatLon":{"lon":-1094888001,"lat":415501390}}},{"delta":{"node-LatLon":{"lon":-1094919170,"lat":415518798}}},{"delta":{"node-LatLon":{"lon":-1094953846,"lat":415531903}}},{"delta":{"node-LatLon":{"lon":-1094991158,"lat":415539943}}},{"delta":{"node-LatLon":{"lon":-1095029104,"lat":415543908}}},{"delta":{"node-LatLon":{"lon":-1095067107,"lat":415547593}}},{"delta":{"node-LatLon":{"lon":-1095105120,"lat":415551220}}},{"delta":{"node-LatLon":{"lon":-1095142989,"lat":415555524}}},{"delta":{"node-LatLon":{"lon":-1095178583,"lat":415565942}}},{"delta":{"node-LatLon":{"lon":-1095212839,"lat":415581431}}},{"delta":{"node-LatLon":{"lon":-1095248825,"lat":415594355}}},{"delta":{"node-LatLon":{"lon":-1095287864,"lat":415600639}}},{"delta":{"node-LatLon":{"lon":-1095327361,"lat":415605311}}},{"delta":{"node-LatLon":{"lon":-1095366831,"lat":415610104}}},{"delta":{"node-LatLon":{"lon":-1095403172,"lat":415618111}}},{"delta":{"node-LatLon":{"lon":-1095437320,"lat":415630465}}},{"delta":{"node-LatLon":{"lon":-1095472268,"lat":415641378}}},{"delta":{"node-LatLon":{"lon":-1095509638,"lat":415645822}}},{"delta":{"node-LatLon":{"lon":-1095547341,"lat":415643461}}},{"delta":{"node-LatLon":{"lon":-1095583235,"lat":415634481}}},{"delta":{"node-LatLon":{"lon":-1095616942,"lat":415621427}}},{"delta":{"node-LatLon":{"lon":-1095650544,"lat":415608220}}},{"delta":{"node-LatLon":{"lon":-1095684389,"lat":415595379}}},{"delta":{"node-LatLon":{"lon":-1095720328,"lat":415586411}}},{"delta":{"node-LatLon":{"lon":-1095758260,"lat":415580697}}},{"delta":{"node-LatLon":{"lon":-1095796228,"lat":415575112}}},{"delta":{"node-LatLon":{"lon":-1095834193,"lat":415569520}}},{"delta":{"node-LatLon":{"lon":-1095872158,"lat":415563926}}},{"delta":{"node-LatLon":{"lon":-1095909369,"lat":415556119}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415272879,"long":-1094524441}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025133,"speed":24.46,"longitude":-105.0470067},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":89,"serialNumber":15518,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000210A5","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415546021,"long":-1095927626},"name":"eastbound_I80_83.01_91.0_SAT-AEC2BC20_RC_RSI80WGRAI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1095910196,"lat":415552425}}},{"delta":{"node-LatLon":{"lon":-1095873554,"lat":415561468}}},{"delta":{"node-LatLon":{"lon":-1095835664,"lat":415567106}}},{"delta":{"node-LatLon":{"lon":-1095797758,"lat":415572690}}},{"delta":{"node-LatLon":{"lon":-1095759854,"lat":415578281}}},{"delta":{"node-LatLon":{"lon":-1095721965,"lat":415583926}}},{"delta":{"node-LatLon":{"lon":-1095685445,"lat":415592676}}},{"delta":{"node-LatLon":{"lon":-1095651117,"lat":415605559}}},{"delta":{"node-LatLon":{"lon":-1095617101,"lat":415618922}}},{"delta":{"node-LatLon":{"lon":-1095583008,"lat":415632176}}},{"delta":{"node-LatLon":{"lon":-1095546731,"lat":415641373}}},{"delta":{"node-LatLon":{"lon":-1095509731,"lat":415643672}}},{"delta":{"node-LatLon":{"lon":-1095473059,"lat":415639326}}},{"delta":{"node-LatLon":{"lon":-1095438752,"lat":415628644}}},{"delta":{"node-LatLon":{"lon":-1095405325,"lat":415616388}}},{"delta":{"node-LatLon":{"lon":-1095369730,"lat":415608358}}},{"delta":{"node-LatLon":{"lon":-1095330616,"lat":415603528}}},{"delta":{"node-LatLon":{"lon":-1095291457,"lat":415598888}}},{"delta":{"node-LatLon":{"lon":-1095252639,"lat":415593016}}},{"delta":{"node-LatLon":{"lon":-1095216703,"lat":415580638}}},{"delta":{"node-LatLon":{"lon":-1095182775,"lat":415565235}}},{"delta":{"node-LatLon":{"lon":-1095147149,"lat":415554096}}},{"delta":{"node-LatLon":{"lon":-1095108985,"lat":415549420}}},{"delta":{"node-LatLon":{"lon":-1095070589,"lat":415545729}}},{"delta":{"node-LatLon":{"lon":-1095032188,"lat":415542064}}},{"delta":{"node-LatLon":{"lon":-1094993831,"lat":415538174}}},{"delta":{"node-LatLon":{"lon":-1094956860,"lat":415530480}}},{"delta":{"node-LatLon":{"lon":-1094922411,"lat":415517802}}},{"delta":{"node-LatLon":{"lon":-1094891469,"lat":415500743}}},{"delta":{"node-LatLon":{"lon":-1094861594,"lat":415482600}}},{"delta":{"node-LatLon":{"lon":-1094831707,"lat":415464468}}},{"delta":{"node-LatLon":{"lon":-1094806972,"lat":415442662}}},{"delta":{"node-LatLon":{"lon":-1094790913,"lat":415416378}}},{"delta":{"node-LatLon":{"lon":-1094763585,"lat":415396461}}},{"delta":{"node-LatLon":{"lon":-1094730035,"lat":415382264}}},{"delta":{"node-LatLon":{"lon":-1094697171,"lat":415367224}}},{"delta":{"node-LatLon":{"lon":-1094666854,"lat":415349644}}},{"delta":{"node-LatLon":{"lon":-1094636062,"lat":415332555}}},{"delta":{"node-LatLon":{"lon":-1094603326,"lat":415317623}}},{"delta":{"node-LatLon":{"lon":-1094571921,"lat":415301218}}},{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011111000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415546021,"long":-1095927626}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025088,"speed":24.46,"longitude":-105.0470353},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":88,"serialNumber":15517,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31498,"packetID":"000000000000057CF2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416103734,"long":-1092210485},"name":"westbound_I80_91.0_104.83_SAT-11EB1AFB_RC_RSI80WGRFGD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092225602,"lat":416102051}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}},{"delta":{"node-LatLon":{"lon":-1092295103,"lat":416078549}}},{"delta":{"node-LatLon":{"lon":-1092353802,"lat":416055730}}},{"delta":{"node-LatLon":{"lon":-1092409233,"lat":415994268}}},{"delta":{"node-LatLon":{"lon":-1092453299,"lat":415926333}}},{"delta":{"node-LatLon":{"lon":-1092494255,"lat":415863151}}},{"delta":{"node-LatLon":{"lon":-1092542043,"lat":415808289}}},{"delta":{"node-LatLon":{"lon":-1092614541,"lat":415771804}}},{"delta":{"node-LatLon":{"lon":-1092686893,"lat":415745034}}},{"delta":{"node-LatLon":{"lon":-1092755235,"lat":415719687}}},{"delta":{"node-LatLon":{"lon":-1092824046,"lat":415694227}}},{"delta":{"node-LatLon":{"lon":-1092892916,"lat":415668054}}},{"delta":{"node-LatLon":{"lon":-1092959628,"lat":415638882}}},{"delta":{"node-LatLon":{"lon":-1093026230,"lat":415609696}}},{"delta":{"node-LatLon":{"lon":-1093092855,"lat":415580545}}},{"delta":{"node-LatLon":{"lon":-1093159414,"lat":415551340}}},{"delta":{"node-LatLon":{"lon":-1093225990,"lat":415522190}}},{"delta":{"node-LatLon":{"lon":-1093292630,"lat":415493128}}},{"delta":{"node-LatLon":{"lon":-1093362756,"lat":415469236}}},{"delta":{"node-LatLon":{"lon":-1093433593,"lat":415446486}}},{"delta":{"node-LatLon":{"lon":-1093501983,"lat":415419517}}},{"delta":{"node-LatLon":{"lon":-1093570430,"lat":415392320}}},{"delta":{"node-LatLon":{"lon":-1093638825,"lat":415365052}}},{"delta":{"node-LatLon":{"lon":-1093706625,"lat":415338051}}},{"delta":{"node-LatLon":{"lon":-1093779378,"lat":415323162}}},{"delta":{"node-LatLon":{"lon":-1093855135,"lat":415332204}}},{"delta":{"node-LatLon":{"lon":-1093927477,"lat":415317094}}},{"delta":{"node-LatLon":{"lon":-1093995757,"lat":415291937}}},{"delta":{"node-LatLon":{"lon":-1094070772,"lat":415279115}}},{"delta":{"node-LatLon":{"lon":-1094147255,"lat":415276886}}},{"delta":{"node-LatLon":{"lon":-1094224449,"lat":415282426}}},{"delta":{"node-LatLon":{"lon":-1094301394,"lat":415276124}}},{"delta":{"node-LatLon":{"lon":-1094371013,"lat":415249502}}},{"delta":{"node-LatLon":{"lon":-1094443930,"lat":415236997}}},{"delta":{"node-LatLon":{"lon":-1094510066,"lat":415263454}}},{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416103734,"long":-1092210485}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31498}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025046,"speed":24.46,"longitude":-105.0470638},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":87,"serialNumber":15516,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31495,"packetID":"00000000000008F38B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416142272,"long":-1091248169},"name":"westbound_I80_104.83_111.16_SAT-F2240036_RC_RSI80MARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091264852,"lat":416136031}}},{"delta":{"node-LatLon":{"lon":-1091298228,"lat":416123561}}},{"delta":{"node-LatLon":{"lon":-1091334018,"lat":416110189}}},{"delta":{"node-LatLon":{"lon":-1091369795,"lat":416096798}}},{"delta":{"node-LatLon":{"lon":-1091405563,"lat":416083396}}},{"delta":{"node-LatLon":{"lon":-1091441283,"lat":416069923}}},{"delta":{"node-LatLon":{"lon":-1091474700,"lat":416053537}}},{"delta":{"node-LatLon":{"lon":-1091501964,"lat":416033828}}},{"delta":{"node-LatLon":{"lon":-1091526844,"lat":416012368}}},{"delta":{"node-LatLon":{"lon":-1091552241,"lat":415991270}}},{"delta":{"node-LatLon":{"lon":-1091583184,"lat":415974991}}},{"delta":{"node-LatLon":{"lon":-1091618832,"lat":415965599}}},{"delta":{"node-LatLon":{"lon":-1091657262,"lat":415963124}}},{"delta":{"node-LatLon":{"lon":-1091695868,"lat":415962098}}},{"delta":{"node-LatLon":{"lon":-1091734473,"lat":415961055}}},{"delta":{"node-LatLon":{"lon":-1091772519,"lat":415956756}}},{"delta":{"node-LatLon":{"lon":-1091806953,"lat":415943769}}},{"delta":{"node-LatLon":{"lon":-1091836882,"lat":415930461}}},{"delta":{"node-LatLon":{"lon":-1091869287,"lat":415921267}}},{"delta":{"node-LatLon":{"lon":-1091903898,"lat":415920097}}},{"delta":{"node-LatLon":{"lon":-1091937392,"lat":415926747}}},{"delta":{"node-LatLon":{"lon":-1091966574,"lat":415940771}}},{"delta":{"node-LatLon":{"lon":-1091990723,"lat":415963402}}},{"delta":{"node-LatLon":{"lon":-1092004823,"lat":415990502}}},{"delta":{"node-LatLon":{"lon":-1092019104,"lat":416017543}}},{"delta":{"node-LatLon":{"lon":-1092043521,"lat":416040022}}},{"delta":{"node-LatLon":{"lon":-1092074899,"lat":416057166}}},{"delta":{"node-LatLon":{"lon":-1092100017,"lat":416070268}}},{"delta":{"node-LatLon":{"lon":-1092125100,"lat":416083407}}},{"delta":{"node-LatLon":{"lon":-1092151035,"lat":416095519}}},{"delta":{"node-LatLon":{"lon":-1092180024,"lat":416102624}}},{"delta":{"node-LatLon":{"lon":-1092210485,"lat":416103734}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111111"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416142272,"long":-1091248169}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31495}},"msgCnt":2}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025046,"speed":24.46,"longitude":-105.0470638},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":86,"serialNumber":15515,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31496,"packetID":"0000000000000CADD0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-F2F2EEFD_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31496}},"msgCnt":8}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1025002,"speed":24.46,"longitude":-105.0470924},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":85,"serialNumber":15514,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31490,"packetID":"0000000000000A5426","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416070648,"long":-1092309469},"name":"eastbound_I80_104.83_111.16_SAT-5D20AE10_RC_RSI80MARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092256961,"lat":416090938}}},{"delta":{"node-LatLon":{"lon":-1092220011,"lat":416100743}}},{"delta":{"node-LatLon":{"lon":-1092180837,"lat":416100613}}},{"delta":{"node-LatLon":{"lon":-1092144100,"lat":416090411}}},{"delta":{"node-LatLon":{"lon":-1092111577,"lat":416073768}}},{"delta":{"node-LatLon":{"lon":-1092079251,"lat":416056897}}},{"delta":{"node-LatLon":{"lon":-1092047614,"lat":416039914}}},{"delta":{"node-LatLon":{"lon":-1092022496,"lat":416017802}}},{"delta":{"node-LatLon":{"lon":-1092007875,"lat":415990813}}},{"delta":{"node-LatLon":{"lon":-1091994030,"lat":415963562}}},{"delta":{"node-LatLon":{"lon":-1091970384,"lat":415940547}}},{"delta":{"node-LatLon":{"lon":-1091941029,"lat":415925731}}},{"delta":{"node-LatLon":{"lon":-1091907083,"lat":415918255}}},{"delta":{"node-LatLon":{"lon":-1091871710,"lat":415918755}}},{"delta":{"node-LatLon":{"lon":-1091838259,"lat":415927373}}},{"delta":{"node-LatLon":{"lon":-1091807633,"lat":415940869}}},{"delta":{"node-LatLon":{"lon":-1091773693,"lat":415954295}}},{"delta":{"node-LatLon":{"lon":-1091735915,"lat":415958860}}},{"delta":{"node-LatLon":{"lon":-1091697507,"lat":415959950}}},{"delta":{"node-LatLon":{"lon":-1091659097,"lat":415960991}}},{"delta":{"node-LatLon":{"lon":-1091620811,"lat":415963173}}},{"delta":{"node-LatLon":{"lon":-1091584800,"lat":415972056}}},{"delta":{"node-LatLon":{"lon":-1091553176,"lat":415987749}}},{"delta":{"node-LatLon":{"lon":-1091527289,"lat":416008625}}},{"delta":{"node-LatLon":{"lon":-1091502330,"lat":416030163}}},{"delta":{"node-LatLon":{"lon":-1091474365,"lat":416049452}}},{"delta":{"node-LatLon":{"lon":-1091440655,"lat":416065279}}},{"delta":{"node-LatLon":{"lon":-1091405002,"lat":416078597}}},{"delta":{"node-LatLon":{"lon":-1091369361,"lat":416091933}}},{"delta":{"node-LatLon":{"lon":-1091333716,"lat":416105264}}},{"delta":{"node-LatLon":{"lon":-1091298057,"lat":416118575}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416070648,"long":-1092309469}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31490}},"msgCnt":4}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024958,"speed":24.46,"longitude":-105.0471209},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":84,"serialNumber":15513,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31281,"packetID":"000000000000073298","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411170053,"long":-1048682540},"name":"westbound_I80_348.36_358.5_SAT-C5FF6D31_RC_CHEYI80WLARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048702211,"lat":411170073}}},{"delta":{"node-LatLon":{"lon":-1048721881,"lat":411170051}}},{"delta":{"node-LatLon":{"lon":-1048761222,"lat":411169874}}},{"delta":{"node-LatLon":{"lon":-1048800563,"lat":411169714}}},{"delta":{"node-LatLon":{"lon":-1048839240,"lat":411169551}}},{"delta":{"node-LatLon":{"lon":-1048877917,"lat":411169445}}},{"delta":{"node-LatLon":{"lon":-1048916593,"lat":411169353}}},{"delta":{"node-LatLon":{"lon":-1048955270,"lat":411169236}}},{"delta":{"node-LatLon":{"lon":-1048993946,"lat":411169016}}},{"delta":{"node-LatLon":{"lon":-1049032247,"lat":411168874}}},{"delta":{"node-LatLon":{"lon":-1049070527,"lat":411168170}}},{"delta":{"node-LatLon":{"lon":-1049108247,"lat":411163290}}},{"delta":{"node-LatLon":{"lon":-1049145661,"lat":411157085}}},{"delta":{"node-LatLon":{"lon":-1049183059,"lat":411150832}}},{"delta":{"node-LatLon":{"lon":-1049220325,"lat":411144893}}},{"delta":{"node-LatLon":{"lon":-1049257999,"lat":411140682}}},{"delta":{"node-LatLon":{"lon":-1049295723,"lat":411136728}}},{"delta":{"node-LatLon":{"lon":-1049333444,"lat":411132751}}},{"delta":{"node-LatLon":{"lon":-1049371183,"lat":411128874}}},{"delta":{"node-LatLon":{"lon":-1049409390,"lat":411124909}}},{"delta":{"node-LatLon":{"lon":-1049447598,"lat":411120949}}},{"delta":{"node-LatLon":{"lon":-1049485797,"lat":411116940}}},{"delta":{"node-LatLon":{"lon":-1049524006,"lat":411112988}}},{"delta":{"node-LatLon":{"lon":-1049562308,"lat":411109647}}},{"delta":{"node-LatLon":{"lon":-1049600401,"lat":411107207}}},{"delta":{"node-LatLon":{"lon":-1049638492,"lat":411104750}}},{"delta":{"node-LatLon":{"lon":-1049676581,"lat":411102282}}},{"delta":{"node-LatLon":{"lon":-1049714466,"lat":411098457}}},{"delta":{"node-LatLon":{"lon":-1049752216,"lat":411093893}}},{"delta":{"node-LatLon":{"lon":-1049790068,"lat":411089292}}},{"delta":{"node-LatLon":{"lon":-1049827923,"lat":411084707}}},{"delta":{"node-LatLon":{"lon":-1049865779,"lat":411080125}}},{"delta":{"node-LatLon":{"lon":-1049903602,"lat":411075397}}},{"delta":{"node-LatLon":{"lon":-1049940392,"lat":411067384}}},{"delta":{"node-LatLon":{"lon":-1049976102,"lat":411057362}}},{"delta":{"node-LatLon":{"lon":-1050011796,"lat":411047308}}},{"delta":{"node-LatLon":{"lon":-1050047479,"lat":411037232}}},{"delta":{"node-LatLon":{"lon":-1050083173,"lat":411027181}}},{"delta":{"node-LatLon":{"lon":-1050119263,"lat":411018037}}},{"delta":{"node-LatLon":{"lon":-1050156120,"lat":411013697}}},{"delta":{"node-LatLon":{"lon":-1050193406,"lat":411014492}}},{"delta":{"node-LatLon":{"lon":-1050230066,"lat":411019821}}},{"delta":{"node-LatLon":{"lon":-1050266545,"lat":411025893}}},{"delta":{"node-LatLon":{"lon":-1050303026,"lat":411031959}}},{"delta":{"node-LatLon":{"lon":-1050341801,"lat":411036364}}},{"delta":{"node-LatLon":{"lon":-1050381045,"lat":411036216}}},{"delta":{"node-LatLon":{"lon":-1050420282,"lat":411035204}}},{"delta":{"node-LatLon":{"lon":-1050459188,"lat":411031556}}},{"delta":{"node-LatLon":{"lon":-1050497693,"lat":411025753}}},{"delta":{"node-LatLon":{"lon":-1050534808,"lat":411020098}}},{"delta":{"node-LatLon":{"lon":-1050571919,"lat":411014428}}},{"delta":{"node-LatLon":{"lon":-1050609033,"lat":411008772}}},{"delta":{"node-LatLon":{"lon":-1050627605,"lat":411006003}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411170053,"long":-1048682540}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31281}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024958,"speed":24.46,"longitude":-105.0471209},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":83,"serialNumber":15512,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.551Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31281,"packetID":"0000000000000B9403","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":410998545,"long":-1050648246},"name":"eastbound_I80_348.36_358.5_SAT-D8707F73_RC_CHEYI80WLARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050629421,"lat":411001016}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}},{"delta":{"node-LatLon":{"lon":-1050573199,"lat":411009532}}},{"delta":{"node-LatLon":{"lon":-1050535715,"lat":411015202}}},{"delta":{"node-LatLon":{"lon":-1050498229,"lat":411020862}}},{"delta":{"node-LatLon":{"lon":-1050460327,"lat":411026546}}},{"delta":{"node-LatLon":{"lon":-1050422091,"lat":411030485}}},{"delta":{"node-LatLon":{"lon":-1050383473,"lat":411031428}}},{"delta":{"node-LatLon":{"lon":-1050344848,"lat":411031826}}},{"delta":{"node-LatLon":{"lon":-1050306653,"lat":411027659}}},{"delta":{"node-LatLon":{"lon":-1050269678,"lat":411021507}}},{"delta":{"node-LatLon":{"lon":-1050232676,"lat":411015448}}},{"delta":{"node-LatLon":{"lon":-1050195535,"lat":411009957}}},{"delta":{"node-LatLon":{"lon":-1050157751,"lat":411008904}}},{"delta":{"node-LatLon":{"lon":-1050120335,"lat":411013008}}},{"delta":{"node-LatLon":{"lon":-1050084082,"lat":411021875}}},{"delta":{"node-LatLon":{"lon":-1050048325,"lat":411031899}}},{"delta":{"node-LatLon":{"lon":-1050012604,"lat":411041995}}},{"delta":{"node-LatLon":{"lon":-1049976865,"lat":411052057}}},{"delta":{"node-LatLon":{"lon":-1049941141,"lat":411062151}}},{"delta":{"node-LatLon":{"lon":-1049904488,"lat":411070470}}},{"delta":{"node-LatLon":{"lon":-1049866692,"lat":411075206}}},{"delta":{"node-LatLon":{"lon":-1049828870,"lat":411079830}}},{"delta":{"node-LatLon":{"lon":-1049791039,"lat":411084415}}},{"delta":{"node-LatLon":{"lon":-1049753209,"lat":411089002}}},{"delta":{"node-LatLon":{"lon":-1049715382,"lat":411093589}}},{"delta":{"node-LatLon":{"lon":-1049677431,"lat":411097499}}},{"delta":{"node-LatLon":{"lon":-1049639263,"lat":411099987}}},{"delta":{"node-LatLon":{"lon":-1049601097,"lat":411102498}}},{"delta":{"node-LatLon":{"lon":-1049562935,"lat":411105044}}},{"delta":{"node-LatLon":{"lon":-1049524970,"lat":411108146}}},{"delta":{"node-LatLon":{"lon":-1049487125,"lat":411112044}}},{"delta":{"node-LatLon":{"lon":-1049449291,"lat":411116003}}},{"delta":{"node-LatLon":{"lon":-1049411457,"lat":411119968}}},{"delta":{"node-LatLon":{"lon":-1049373623,"lat":411123930}}},{"delta":{"node-LatLon":{"lon":-1049335535,"lat":411127975}}},{"delta":{"node-LatLon":{"lon":-1049297422,"lat":411131886}}},{"delta":{"node-LatLon":{"lon":-1049259309,"lat":411135796}}},{"delta":{"node-LatLon":{"lon":-1049221247,"lat":411139978}}},{"delta":{"node-LatLon":{"lon":-1049183591,"lat":411145899}}},{"delta":{"node-LatLon":{"lon":-1049146455,"lat":411152154}}},{"delta":{"node-LatLon":{"lon":-1049109301,"lat":411158352}}},{"delta":{"node-LatLon":{"lon":-1049071864,"lat":411163355}}},{"delta":{"node-LatLon":{"lon":-1049033848,"lat":411164138}}},{"delta":{"node-LatLon":{"lon":-1048995803,"lat":411164285}}},{"delta":{"node-LatLon":{"lon":-1048957165,"lat":411164452}}},{"delta":{"node-LatLon":{"lon":-1048918528,"lat":411164604}}},{"delta":{"node-LatLon":{"lon":-1048879891,"lat":411164841}}},{"delta":{"node-LatLon":{"lon":-1048841254,"lat":411165037}}},{"delta":{"node-LatLon":{"lon":-1048802617,"lat":411165193}}},{"delta":{"node-LatLon":{"lon":-1048763807,"lat":411165332}}},{"delta":{"node-LatLon":{"lon":-1048724997,"lat":411165480}}},{"delta":{"node-LatLon":{"lon":-1048705592,"lat":411165575}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":410998545,"long":-1050648246}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31281}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024915,"speed":24.46,"longitude":-105.0471495},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":82,"serialNumber":15511,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31281,"packetID":"000000000000087964","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411011592,"long":-1050590473},"name":"westbound_I80_335.11_348.36_SAT-4982596C_RC_CHEYI80WHARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050609033,"lat":411008772}}},{"delta":{"node-LatLon":{"lon":-1050684029,"lat":411002155}}},{"delta":{"node-LatLon":{"lon":-1050760755,"lat":411002869}}},{"delta":{"node-LatLon":{"lon":-1050837364,"lat":411000370}}},{"delta":{"node-LatLon":{"lon":-1050914524,"lat":410995536}}},{"delta":{"node-LatLon":{"lon":-1050990956,"lat":410984444}}},{"delta":{"node-LatLon":{"lon":-1051067254,"lat":410973454}}},{"delta":{"node-LatLon":{"lon":-1051144365,"lat":410982302}}},{"delta":{"node-LatLon":{"lon":-1051221934,"lat":410988766}}},{"delta":{"node-LatLon":{"lon":-1051297925,"lat":410988342}}},{"delta":{"node-LatLon":{"lon":-1051371832,"lat":410988032}}},{"delta":{"node-LatLon":{"lon":-1051445141,"lat":410995292}}},{"delta":{"node-LatLon":{"lon":-1051521267,"lat":411000337}}},{"delta":{"node-LatLon":{"lon":-1051596119,"lat":410988652}}},{"delta":{"node-LatLon":{"lon":-1051671284,"lat":410977720}}},{"delta":{"node-LatLon":{"lon":-1051747551,"lat":410971360}}},{"delta":{"node-LatLon":{"lon":-1051823993,"lat":410966522}}},{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}},{"delta":{"node-LatLon":{"lon":-1051974706,"lat":410954064}}},{"delta":{"node-LatLon":{"lon":-1052048783,"lat":410962474}}},{"delta":{"node-LatLon":{"lon":-1052113110,"lat":410992814}}},{"delta":{"node-LatLon":{"lon":-1052178141,"lat":411022378}}},{"delta":{"node-LatLon":{"lon":-1052248856,"lat":411045103}}},{"delta":{"node-LatLon":{"lon":-1052325706,"lat":411048940}}},{"delta":{"node-LatLon":{"lon":-1052402452,"lat":411049814}}},{"delta":{"node-LatLon":{"lon":-1052476819,"lat":411061846}}},{"delta":{"node-LatLon":{"lon":-1052547987,"lat":411082724}}},{"delta":{"node-LatLon":{"lon":-1052619267,"lat":411103644}}},{"delta":{"node-LatLon":{"lon":-1052690521,"lat":411124618}}},{"delta":{"node-LatLon":{"lon":-1052758326,"lat":411153468}}},{"delta":{"node-LatLon":{"lon":-1052824352,"lat":411187145}}},{"delta":{"node-LatLon":{"lon":-1052891232,"lat":411219785}}},{"delta":{"node-LatLon":{"lon":-1052963092,"lat":411239437}}},{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053057596,"lat":411251395}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411011592,"long":-1050590473}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31281}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024871,"speed":24.46,"longitude":-105.047178},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":81,"serialNumber":15510,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31281,"packetID":"0000000000000A3B4E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411251929,"long":-1053079915},"name":"eastbound_I80_335.11_348.36_SAT-6CD34EF8_RC_CHEYI80WHARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053061014,"lat":411249645}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}},{"delta":{"node-LatLon":{"lon":-1052966667,"lat":411237536}}},{"delta":{"node-LatLon":{"lon":-1052895308,"lat":411217079}}},{"delta":{"node-LatLon":{"lon":-1052828416,"lat":411183958}}},{"delta":{"node-LatLon":{"lon":-1052762243,"lat":411149986}}},{"delta":{"node-LatLon":{"lon":-1052694431,"lat":411120945}}},{"delta":{"node-LatLon":{"lon":-1052623255,"lat":411100002}}},{"delta":{"node-LatLon":{"lon":-1052552081,"lat":411079062}}},{"delta":{"node-LatLon":{"lon":-1052479703,"lat":411059291}}},{"delta":{"node-LatLon":{"lon":-1052404522,"lat":411047559}}},{"delta":{"node-LatLon":{"lon":-1052327830,"lat":411046722}}},{"delta":{"node-LatLon":{"lon":-1052251668,"lat":411043133}}},{"delta":{"node-LatLon":{"lon":-1052181375,"lat":411021106}}},{"delta":{"node-LatLon":{"lon":-1052115683,"lat":410991356}}},{"delta":{"node-LatLon":{"lon":-1052050763,"lat":410960746}}},{"delta":{"node-LatLon":{"lon":-1051976364,"lat":410951581}}},{"delta":{"node-LatLon":{"lon":-1051901229,"lat":410960621}}},{"delta":{"node-LatLon":{"lon":-1051825257,"lat":410964045}}},{"delta":{"node-LatLon":{"lon":-1051748594,"lat":410968835}}},{"delta":{"node-LatLon":{"lon":-1051672128,"lat":410975297}}},{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411251929,"long":-1053079915}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31281}},"msgCnt":6}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024871,"speed":24.46,"longitude":-105.047178},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":80,"serialNumber":15509,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31276,"packetID":"0000000000000C7BDC","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411583071,"long":-1045194573},"name":"westbound_I80_370.1_377.35_SAT-1F3353B9_RC_CHEYI80EPBD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1045213731,"lat":411583474}}},{"delta":{"node-LatLon":{"lon":-1045252048,"lat":411584277}}},{"delta":{"node-LatLon":{"lon":-1045290377,"lat":411584588}}},{"delta":{"node-LatLon":{"lon":-1045329055,"lat":411584606}}},{"delta":{"node-LatLon":{"lon":-1045367733,"lat":411584612}}},{"delta":{"node-LatLon":{"lon":-1045406412,"lat":411584626}}},{"delta":{"node-LatLon":{"lon":-1045445090,"lat":411584615}}},{"delta":{"node-LatLon":{"lon":-1045483768,"lat":411584618}}},{"delta":{"node-LatLon":{"lon":-1045521914,"lat":411584627}}},{"delta":{"node-LatLon":{"lon":-1045560059,"lat":411584625}}},{"delta":{"node-LatLon":{"lon":-1045598205,"lat":411584639}}},{"delta":{"node-LatLon":{"lon":-1045636350,"lat":411584589}}},{"delta":{"node-LatLon":{"lon":-1045674495,"lat":411584576}}},{"delta":{"node-LatLon":{"lon":-1045712807,"lat":411584579}}},{"delta":{"node-LatLon":{"lon":-1045751120,"lat":411584598}}},{"delta":{"node-LatLon":{"lon":-1045789432,"lat":411584756}}},{"delta":{"node-LatLon":{"lon":-1045827743,"lat":411584908}}},{"delta":{"node-LatLon":{"lon":-1045866056,"lat":411585030}}},{"delta":{"node-LatLon":{"lon":-1045904386,"lat":411585214}}},{"delta":{"node-LatLon":{"lon":-1045942717,"lat":411585361}}},{"delta":{"node-LatLon":{"lon":-1045981047,"lat":411585545}}},{"delta":{"node-LatLon":{"lon":-1046019378,"lat":411585693}}},{"delta":{"node-LatLon":{"lon":-1046057708,"lat":411585870}}},{"delta":{"node-LatLon":{"lon":-1046096147,"lat":411586011}}},{"delta":{"node-LatLon":{"lon":-1046134585,"lat":411586177}}},{"delta":{"node-LatLon":{"lon":-1046173023,"lat":411586326}}},{"delta":{"node-LatLon":{"lon":-1046211460,"lat":411586584}}},{"delta":{"node-LatLon":{"lon":-1046249897,"lat":411586868}}},{"delta":{"node-LatLon":{"lon":-1046288331,"lat":411587218}}},{"delta":{"node-LatLon":{"lon":-1046326766,"lat":411587517}}},{"delta":{"node-LatLon":{"lon":-1046365200,"lat":411587809}}},{"delta":{"node-LatLon":{"lon":-1046403636,"lat":411588036}}},{"delta":{"node-LatLon":{"lon":-1046442034,"lat":411586845}}},{"delta":{"node-LatLon":{"lon":-1046479971,"lat":411583989}}},{"delta":{"node-LatLon":{"lon":-1046517601,"lat":411579361}}},{"delta":{"node-LatLon":{"lon":-1046554803,"lat":411573054}}},{"delta":{"node-LatLon":{"lon":-1046591419,"lat":411565023}}},{"delta":{"node-LatLon":{"lon":-1046609462,"lat":411560366}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411583071,"long":-1045194573}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31276}},"msgCnt":4}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024828,"speed":24.46,"longitude":-105.0472065},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":79,"serialNumber":15508,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31276,"packetID":"00000000000005CEB8","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411550674,"long":-1046626808},"name":"eastbound_I80_370.1_377.35_SAT-D4C24D15_RC_CHEYI80EPBI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1046609118,"lat":411555717}}},{"delta":{"node-LatLon":{"lon":-1046591249,"lat":411560386}}},{"delta":{"node-LatLon":{"lon":-1046554972,"lat":411568439}}},{"delta":{"node-LatLon":{"lon":-1046518106,"lat":411574777}}},{"delta":{"node-LatLon":{"lon":-1046480798,"lat":411579409}}},{"delta":{"node-LatLon":{"lon":-1046443186,"lat":411582321}}},{"delta":{"node-LatLon":{"lon":-1046405109,"lat":411583506}}},{"delta":{"node-LatLon":{"lon":-1046366997,"lat":411583305}}},{"delta":{"node-LatLon":{"lon":-1046328885,"lat":411583053}}},{"delta":{"node-LatLon":{"lon":-1046290773,"lat":411582732}}},{"delta":{"node-LatLon":{"lon":-1046252662,"lat":411582431}}},{"delta":{"node-LatLon":{"lon":-1046213997,"lat":411582141}}},{"delta":{"node-LatLon":{"lon":-1046175333,"lat":411581845}}},{"delta":{"node-LatLon":{"lon":-1046136667,"lat":411581682}}},{"delta":{"node-LatLon":{"lon":-1046098002,"lat":411581519}}},{"delta":{"node-LatLon":{"lon":-1046059336,"lat":411581347}}},{"delta":{"node-LatLon":{"lon":-1046021098,"lat":411581225}}},{"delta":{"node-LatLon":{"lon":-1045982860,"lat":411581049}}},{"delta":{"node-LatLon":{"lon":-1045944622,"lat":411580911}}},{"delta":{"node-LatLon":{"lon":-1045906384,"lat":411580755}}},{"delta":{"node-LatLon":{"lon":-1045868146,"lat":411580589}}},{"delta":{"node-LatLon":{"lon":-1045829878,"lat":411580440}}},{"delta":{"node-LatLon":{"lon":-1045791610,"lat":411580257}}},{"delta":{"node-LatLon":{"lon":-1045753341,"lat":411580119}}},{"delta":{"node-LatLon":{"lon":-1045715072,"lat":411580125}}},{"delta":{"node-LatLon":{"lon":-1045676803,"lat":411580094}}},{"delta":{"node-LatLon":{"lon":-1045638356,"lat":411580096}}},{"delta":{"node-LatLon":{"lon":-1045599910,"lat":411580126}}},{"delta":{"node-LatLon":{"lon":-1045561463,"lat":411580111}}},{"delta":{"node-LatLon":{"lon":-1045523016,"lat":411580105}}},{"delta":{"node-LatLon":{"lon":-1045484569,"lat":411580102}}},{"delta":{"node-LatLon":{"lon":-1045446114,"lat":411580096}}},{"delta":{"node-LatLon":{"lon":-1045407659,"lat":411580116}}},{"delta":{"node-LatLon":{"lon":-1045369203,"lat":411580107}}},{"delta":{"node-LatLon":{"lon":-1045330748,"lat":411580102}}},{"delta":{"node-LatLon":{"lon":-1045292292,"lat":411580094}}},{"delta":{"node-LatLon":{"lon":-1045253937,"lat":411579790}}},{"delta":{"node-LatLon":{"lon":-1045215592,"lat":411579032}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411550674,"long":-1046626808}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":770}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31276}},"msgCnt":4}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024828,"speed":24.46,"longitude":-105.0472065},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":78,"serialNumber":15507,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31484,"packetID":"0000000000000687E2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411011592,"long":-1050590473},"name":"westbound_I80_335.11_348.36_SAT-592E2A83_RC_CHEYI80WHARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1050609033,"lat":411008772}}},{"delta":{"node-LatLon":{"lon":-1050684029,"lat":411002155}}},{"delta":{"node-LatLon":{"lon":-1050760755,"lat":411002869}}},{"delta":{"node-LatLon":{"lon":-1050837364,"lat":411000370}}},{"delta":{"node-LatLon":{"lon":-1050914524,"lat":410995536}}},{"delta":{"node-LatLon":{"lon":-1050990956,"lat":410984444}}},{"delta":{"node-LatLon":{"lon":-1051067254,"lat":410973454}}},{"delta":{"node-LatLon":{"lon":-1051144365,"lat":410982302}}},{"delta":{"node-LatLon":{"lon":-1051221934,"lat":410988766}}},{"delta":{"node-LatLon":{"lon":-1051297925,"lat":410988342}}},{"delta":{"node-LatLon":{"lon":-1051371832,"lat":410988032}}},{"delta":{"node-LatLon":{"lon":-1051445141,"lat":410995292}}},{"delta":{"node-LatLon":{"lon":-1051521267,"lat":411000337}}},{"delta":{"node-LatLon":{"lon":-1051596119,"lat":410988652}}},{"delta":{"node-LatLon":{"lon":-1051671284,"lat":410977720}}},{"delta":{"node-LatLon":{"lon":-1051747551,"lat":410971360}}},{"delta":{"node-LatLon":{"lon":-1051823993,"lat":410966522}}},{"delta":{"node-LatLon":{"lon":-1051899770,"lat":410963108}}},{"delta":{"node-LatLon":{"lon":-1051974706,"lat":410954064}}},{"delta":{"node-LatLon":{"lon":-1052048783,"lat":410962474}}},{"delta":{"node-LatLon":{"lon":-1052113110,"lat":410992814}}},{"delta":{"node-LatLon":{"lon":-1052178141,"lat":411022378}}},{"delta":{"node-LatLon":{"lon":-1052248856,"lat":411045103}}},{"delta":{"node-LatLon":{"lon":-1052325706,"lat":411048940}}},{"delta":{"node-LatLon":{"lon":-1052402452,"lat":411049814}}},{"delta":{"node-LatLon":{"lon":-1052476819,"lat":411061846}}},{"delta":{"node-LatLon":{"lon":-1052547987,"lat":411082724}}},{"delta":{"node-LatLon":{"lon":-1052619267,"lat":411103644}}},{"delta":{"node-LatLon":{"lon":-1052690521,"lat":411124618}}},{"delta":{"node-LatLon":{"lon":-1052758326,"lat":411153468}}},{"delta":{"node-LatLon":{"lon":-1052824352,"lat":411187145}}},{"delta":{"node-LatLon":{"lon":-1052891232,"lat":411219785}}},{"delta":{"node-LatLon":{"lon":-1052963092,"lat":411239437}}},{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053057596,"lat":411251395}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411011592,"long":-1050590473}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31484}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024784,"speed":24.46,"longitude":-105.0472351},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":76,"serialNumber":15505,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31483,"packetID":"0000000000000B4F4D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411246688,"long":-1053019776},"name":"westbound_I80_323.05_335.11_SAT-B91A2E52_RC_LARI80ECHEYBD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053038685,"lat":411249047}}},{"delta":{"node-LatLon":{"lon":-1053114552,"lat":411256735}}},{"delta":{"node-LatLon":{"lon":-1053190756,"lat":411261912}}},{"delta":{"node-LatLon":{"lon":-1053266797,"lat":411268154}}},{"delta":{"node-LatLon":{"lon":-1053338337,"lat":411279861}}},{"delta":{"node-LatLon":{"lon":-1053405816,"lat":411300582}}},{"delta":{"node-LatLon":{"lon":-1053462344,"lat":411338132}}},{"delta":{"node-LatLon":{"lon":-1053516546,"lat":411380266}}},{"delta":{"node-LatLon":{"lon":-1053575650,"lat":411418098}}},{"delta":{"node-LatLon":{"lon":-1053651429,"lat":411438163}}},{"delta":{"node-LatLon":{"lon":-1053731780,"lat":411444206}}},{"delta":{"node-LatLon":{"lon":-1053806111,"lat":411463205}}},{"delta":{"node-LatLon":{"lon":-1053873524,"lat":411489854}}},{"delta":{"node-LatLon":{"lon":-1053936557,"lat":411522463}}},{"delta":{"node-LatLon":{"lon":-1053996450,"lat":411555749}}},{"delta":{"node-LatLon":{"lon":-1054048431,"lat":411595888}}},{"delta":{"node-LatLon":{"lon":-1054090598,"lat":411643369}}},{"delta":{"node-LatLon":{"lon":-1054127454,"lat":411694572}}},{"delta":{"node-LatLon":{"lon":-1054164403,"lat":411745737}}},{"delta":{"node-LatLon":{"lon":-1054200041,"lat":411796105}}},{"delta":{"node-LatLon":{"lon":-1054218886,"lat":411851211}}},{"delta":{"node-LatLon":{"lon":-1054243815,"lat":411905185}}},{"delta":{"node-LatLon":{"lon":-1054287780,"lat":411952905}}},{"delta":{"node-LatLon":{"lon":-1054331852,"lat":412000578}}},{"delta":{"node-LatLon":{"lon":-1054374628,"lat":412046505}}},{"delta":{"node-LatLon":{"lon":-1054408178,"lat":412096432}}},{"delta":{"node-LatLon":{"lon":-1054401538,"lat":412152329}}},{"delta":{"node-LatLon":{"lon":-1054382654,"lat":412208387}}},{"delta":{"node-LatLon":{"lon":-1054387241,"lat":412265649}}},{"delta":{"node-LatLon":{"lon":-1054369571,"lat":412321177}}},{"delta":{"node-LatLon":{"lon":-1054372542,"lat":412378541}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1000000000001111}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411246688,"long":-1053019776}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":4868}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31483}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024784,"speed":24.46,"longitude":-105.0472351},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":77,"serialNumber":15506,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31484,"packetID":"00000000000004AA70","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411251929,"long":-1053079915},"name":"eastbound_I80_335.11_348.36_SAT-9AFEBCD7_RC_CHEYI80WHARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053061014,"lat":411249645}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}},{"delta":{"node-LatLon":{"lon":-1052966667,"lat":411237536}}},{"delta":{"node-LatLon":{"lon":-1052895308,"lat":411217079}}},{"delta":{"node-LatLon":{"lon":-1052828416,"lat":411183958}}},{"delta":{"node-LatLon":{"lon":-1052762243,"lat":411149986}}},{"delta":{"node-LatLon":{"lon":-1052694431,"lat":411120945}}},{"delta":{"node-LatLon":{"lon":-1052623255,"lat":411100002}}},{"delta":{"node-LatLon":{"lon":-1052552081,"lat":411079062}}},{"delta":{"node-LatLon":{"lon":-1052479703,"lat":411059291}}},{"delta":{"node-LatLon":{"lon":-1052404522,"lat":411047559}}},{"delta":{"node-LatLon":{"lon":-1052327830,"lat":411046722}}},{"delta":{"node-LatLon":{"lon":-1052251668,"lat":411043133}}},{"delta":{"node-LatLon":{"lon":-1052181375,"lat":411021106}}},{"delta":{"node-LatLon":{"lon":-1052115683,"lat":410991356}}},{"delta":{"node-LatLon":{"lon":-1052050763,"lat":410960746}}},{"delta":{"node-LatLon":{"lon":-1051976364,"lat":410951581}}},{"delta":{"node-LatLon":{"lon":-1051901229,"lat":410960621}}},{"delta":{"node-LatLon":{"lon":-1051825257,"lat":410964045}}},{"delta":{"node-LatLon":{"lon":-1051748594,"lat":410968835}}},{"delta":{"node-LatLon":{"lon":-1051672128,"lat":410975297}}},{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411251929,"long":-1053079915}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31484}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024741,"speed":24.46,"longitude":-105.0472635},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":75,"serialNumber":15504,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31483,"packetID":"0000000000000F25D6","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412420501,"long":-1054392109},"name":"eastbound_I80_323.05_335.11_SAT-2FAB6C57_RC_LARI80ECHEYBI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054375725,"lat":412379414}}},{"delta":{"node-LatLon":{"lon":-1054372327,"lat":412322445}}},{"delta":{"node-LatLon":{"lon":-1054390501,"lat":412267361}}},{"delta":{"node-LatLon":{"lon":-1054385250,"lat":412209941}}},{"delta":{"node-LatLon":{"lon":-1054403962,"lat":412153723}}},{"delta":{"node-LatLon":{"lon":-1054414034,"lat":412097480}}},{"delta":{"node-LatLon":{"lon":-1054381691,"lat":412046104}}},{"delta":{"node-LatLon":{"lon":-1054338178,"lat":411999356}}},{"delta":{"node-LatLon":{"lon":-1054294112,"lat":411952041}}},{"delta":{"node-LatLon":{"lon":-1054250145,"lat":411904675}}},{"delta":{"node-LatLon":{"lon":-1054224664,"lat":411850678}}},{"delta":{"node-LatLon":{"lon":-1054205670,"lat":411794929}}},{"delta":{"node-LatLon":{"lon":-1054169702,"lat":411743977}}},{"delta":{"node-LatLon":{"lon":-1054132917,"lat":411693026}}},{"delta":{"node-LatLon":{"lon":-1054096134,"lat":411642075}}},{"delta":{"node-LatLon":{"lon":-1054053933,"lat":411594218}}},{"delta":{"node-LatLon":{"lon":-1054001524,"lat":411553158}}},{"delta":{"node-LatLon":{"lon":-1053940802,"lat":411519210}}},{"delta":{"node-LatLon":{"lon":-1053877704,"lat":411486540}}},{"delta":{"node-LatLon":{"lon":-1053810387,"lat":411459552}}},{"delta":{"node-LatLon":{"lon":-1053739051,"lat":411438927}}},{"delta":{"node-LatLon":{"lon":-1053667804,"lat":411418317}}},{"delta":{"node-LatLon":{"lon":-1053596576,"lat":411397677}}},{"delta":{"node-LatLon":{"lon":-1053529834,"lat":411369925}}},{"delta":{"node-LatLon":{"lon":-1053471129,"lat":411332755}}},{"delta":{"node-LatLon":{"lon":-1053412343,"lat":411295468}}},{"delta":{"node-LatLon":{"lon":-1053346537,"lat":411266040}}},{"delta":{"node-LatLon":{"lon":-1053271167,"lat":411256326}}},{"delta":{"node-LatLon":{"lon":-1053194621,"lat":411255101}}},{"delta":{"node-LatLon":{"lon":-1053118075,"lat":411253866}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111110000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412420501,"long":-1054392109}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":4868}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31483}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024697,"speed":24.46,"longitude":-105.0472922},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":74,"serialNumber":15503,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:11.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31500,"packetID":"0000000000000992DB","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412969911,"long":-1055922054},"name":"westbound_I80_290.44_313.19_SAT-39E13EDB_RC_LARI80WQDHLD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055939598,"lat":412974628}}},{"delta":{"node-LatLon":{"lon":-1056011013,"lat":412993846}}},{"delta":{"node-LatLon":{"lon":-1056083564,"lat":413013351}}},{"delta":{"node-LatLon":{"lon":-1056136131,"lat":413051965}}},{"delta":{"node-LatLon":{"lon":-1056142604,"lat":413111070}}},{"delta":{"node-LatLon":{"lon":-1056147739,"lat":413170299}}},{"delta":{"node-LatLon":{"lon":-1056152707,"lat":413227440}}},{"delta":{"node-LatLon":{"lon":-1056157480,"lat":413282495}}},{"delta":{"node-LatLon":{"lon":-1056162332,"lat":413337546}}},{"delta":{"node-LatLon":{"lon":-1056179338,"lat":413394642}}},{"delta":{"node-LatLon":{"lon":-1056241841,"lat":413429971}}},{"delta":{"node-LatLon":{"lon":-1056308986,"lat":413460456}}},{"delta":{"node-LatLon":{"lon":-1056375806,"lat":413490715}}},{"delta":{"node-LatLon":{"lon":-1056448549,"lat":413509883}}},{"delta":{"node-LatLon":{"lon":-1056524673,"lat":413510070}}},{"delta":{"node-LatLon":{"lon":-1056600806,"lat":413509928}}},{"delta":{"node-LatLon":{"lon":-1056677878,"lat":413509777}}},{"delta":{"node-LatLon":{"lon":-1056755890,"lat":413509624}}},{"delta":{"node-LatLon":{"lon":-1056833901,"lat":413509486}}},{"delta":{"node-LatLon":{"lon":-1056911534,"lat":413509321}}},{"delta":{"node-LatLon":{"lon":-1056988345,"lat":413503756}}},{"delta":{"node-LatLon":{"lon":-1057063632,"lat":413496157}}},{"delta":{"node-LatLon":{"lon":-1057138866,"lat":413506949}}},{"delta":{"node-LatLon":{"lon":-1057214104,"lat":413517735}}},{"delta":{"node-LatLon":{"lon":-1057289680,"lat":413528551}}},{"delta":{"node-LatLon":{"lon":-1057365257,"lat":413539367}}},{"delta":{"node-LatLon":{"lon":-1057440379,"lat":413550309}}},{"delta":{"node-LatLon":{"lon":-1057512568,"lat":413568354}}},{"delta":{"node-LatLon":{"lon":-1057584309,"lat":413587502}}},{"delta":{"node-LatLon":{"lon":-1057657989,"lat":413607176}}},{"delta":{"node-LatLon":{"lon":-1057731667,"lat":413626859}}},{"delta":{"node-LatLon":{"lon":-1057799444,"lat":413654138}}},{"delta":{"node-LatLon":{"lon":-1057862738,"lat":413685955}}},{"delta":{"node-LatLon":{"lon":-1057926032,"lat":413717776}}},{"delta":{"node-LatLon":{"lon":-1057990466,"lat":413750126}}},{"delta":{"node-LatLon":{"lon":-1058054871,"lat":413782512}}},{"delta":{"node-LatLon":{"lon":-1058117509,"lat":413815643}}},{"delta":{"node-LatLon":{"lon":-1058164753,"lat":413859952}}},{"delta":{"node-LatLon":{"lon":-1058205339,"lat":413908152}}},{"delta":{"node-LatLon":{"lon":-1058246686,"lat":413957163}}},{"delta":{"node-LatLon":{"lon":-1058288005,"lat":414006188}}},{"delta":{"node-LatLon":{"lon":-1058329488,"lat":414055451}}},{"delta":{"node-LatLon":{"lon":-1058376904,"lat":414101638}}},{"delta":{"node-LatLon":{"lon":-1058441692,"lat":414133752}}},{"delta":{"node-LatLon":{"lon":-1058509642,"lat":414161765}}},{"delta":{"node-LatLon":{"lon":-1058577606,"lat":414189762}}},{"delta":{"node-LatLon":{"lon":-1058645229,"lat":414217630}}},{"delta":{"node-LatLon":{"lon":-1058712523,"lat":414245352}}},{"delta":{"node-LatLon":{"lon":-1058779847,"lat":414273037}}},{"delta":{"node-LatLon":{"lon":-1058847466,"lat":414300930}}},{"delta":{"node-LatLon":{"lon":-1058915586,"lat":414328088}}},{"delta":{"node-LatLon":{"lon":-1058989523,"lat":414342520}}},{"delta":{"node-LatLon":{"lon":-1059064093,"lat":414353551}}},{"delta":{"node-LatLon":{"lon":-1059138674,"lat":414364546}}},{"delta":{"node-LatLon":{"lon":-1059214026,"lat":414375694}}},{"delta":{"node-LatLon":{"lon":-1059289381,"lat":414386834}}},{"delta":{"node-LatLon":{"lon":-1059363802,"lat":414397824}}},{"delta":{"node-LatLon":{"lon":-1059437301,"lat":414408619}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011111"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412969911,"long":-1055922054}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31500}},"msgCnt":38}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024697,"speed":24.46,"longitude":-105.0472922},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":73,"serialNumber":15502,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31500,"packetID":"0000000000000A5948","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414407115,"long":-1059458100},"name":"eastbound_I80_290.44_313.19_SAT-864EB729_RC_LARI80WQDHLI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059365846,"lat":414393512}}},{"delta":{"node-LatLon":{"lon":-1059291346,"lat":414382504}}},{"delta":{"node-LatLon":{"lon":-1059216139,"lat":414371403}}},{"delta":{"node-LatLon":{"lon":-1059140930,"lat":414360321}}},{"delta":{"node-LatLon":{"lon":-1059066277,"lat":414349272}}},{"delta":{"node-LatLon":{"lon":-1058991615,"lat":414338261}}},{"delta":{"node-LatLon":{"lon":-1058917936,"lat":414323988}}},{"delta":{"node-LatLon":{"lon":-1058850449,"lat":414297022}}},{"delta":{"node-LatLon":{"lon":-1058783417,"lat":414269380}}},{"delta":{"node-LatLon":{"lon":-1058716328,"lat":414241773}}},{"delta":{"node-LatLon":{"lon":-1058649253,"lat":414214149}}},{"delta":{"node-LatLon":{"lon":-1058581712,"lat":414186261}}},{"delta":{"node-LatLon":{"lon":-1058513627,"lat":414158213}}},{"delta":{"node-LatLon":{"lon":-1058445557,"lat":414130150}}},{"delta":{"node-LatLon":{"lon":-1058380711,"lat":414099504}}},{"delta":{"node-LatLon":{"lon":-1058332454,"lat":414054913}}},{"delta":{"node-LatLon":{"lon":-1058291219,"lat":414005996}}},{"delta":{"node-LatLon":{"lon":-1058249903,"lat":413956936}}},{"delta":{"node-LatLon":{"lon":-1058208508,"lat":413907914}}},{"delta":{"node-LatLon":{"lon":-1058167409,"lat":413859113}}},{"delta":{"node-LatLon":{"lon":-1058121254,"lat":413813192}}},{"delta":{"node-LatLon":{"lon":-1058059188,"lat":413779109}}},{"delta":{"node-LatLon":{"lon":-1057994981,"lat":413746928}}},{"delta":{"node-LatLon":{"lon":-1057930809,"lat":413714712}}},{"delta":{"node-LatLon":{"lon":-1057867697,"lat":413683015}}},{"delta":{"node-LatLon":{"lon":-1057804579,"lat":413651328}}},{"delta":{"node-LatLon":{"lon":-1057737049,"lat":413623514}}},{"delta":{"node-LatLon":{"lon":-1057662967,"lat":413603704}}},{"delta":{"node-LatLon":{"lon":-1057588887,"lat":413583895}}},{"delta":{"node-LatLon":{"lon":-1057516296,"lat":413564544}}},{"delta":{"node-LatLon":{"lon":-1057443317,"lat":413546135}}},{"delta":{"node-LatLon":{"lon":-1057367878,"lat":413535221}}},{"delta":{"node-LatLon":{"lon":-1057292600,"lat":413524353}}},{"delta":{"node-LatLon":{"lon":-1057217299,"lat":413513586}}},{"delta":{"node-LatLon":{"lon":-1057141027,"lat":413502656}}},{"delta":{"node-LatLon":{"lon":-1057064747,"lat":413491760}}},{"delta":{"node-LatLon":{"lon":-1056989068,"lat":413498824}}},{"delta":{"node-LatLon":{"lon":-1056912831,"lat":413504721}}},{"delta":{"node-LatLon":{"lon":-1056835658,"lat":413504909}}},{"delta":{"node-LatLon":{"lon":-1056757891,"lat":413505054}}},{"delta":{"node-LatLon":{"lon":-1056680124,"lat":413505252}}},{"delta":{"node-LatLon":{"lon":-1056603037,"lat":413505384}}},{"delta":{"node-LatLon":{"lon":-1056526628,"lat":413505543}}},{"delta":{"node-LatLon":{"lon":-1056450220,"lat":413505586}}},{"delta":{"node-LatLon":{"lon":-1056377627,"lat":413489027}}},{"delta":{"node-LatLon":{"lon":-1056311828,"lat":413459176}}},{"delta":{"node-LatLon":{"lon":-1056245669,"lat":413429174}}},{"delta":{"node-LatLon":{"lon":-1056183282,"lat":413395071}}},{"delta":{"node-LatLon":{"lon":-1056165228,"lat":413339197}}},{"delta":{"node-LatLon":{"lon":-1056160367,"lat":413283836}}},{"delta":{"node-LatLon":{"lon":-1056155562,"lat":413228473}}},{"delta":{"node-LatLon":{"lon":-1056150632,"lat":413171501}}},{"delta":{"node-LatLon":{"lon":-1056145513,"lat":413112925}}},{"delta":{"node-LatLon":{"lon":-1056139692,"lat":413054402}}},{"delta":{"node-LatLon":{"lon":-1056094488,"lat":413014131}}},{"delta":{"node-LatLon":{"lon":-1056025680,"lat":412995553}}},{"delta":{"node-LatLon":{"lon":-1055953535,"lat":412976113}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414407115,"long":-1059458100}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31500}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024653,"speed":24.46,"longitude":-105.0473207},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":72,"serialNumber":15501,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31500,"packetID":"0000000000000F8642","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414403179,"long":-1059400563},"name":"westbound_I80_279.86_290.44_SAT-D62DB515_RC_LARI80WRAWD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059418929,"lat":414405912}}},{"delta":{"node-LatLon":{"lon":-1059437301,"lat":414408619}}},{"delta":{"node-LatLon":{"lon":-1059474045,"lat":414414043}}},{"delta":{"node-LatLon":{"lon":-1059510782,"lat":414419489}}},{"delta":{"node-LatLon":{"lon":-1059549177,"lat":414426609}}},{"delta":{"node-LatLon":{"lon":-1059587159,"lat":414434951}}},{"delta":{"node-LatLon":{"lon":-1059624866,"lat":414443931}}},{"delta":{"node-LatLon":{"lon":-1059658797,"lat":414459046}}},{"delta":{"node-LatLon":{"lon":-1059685629,"lat":414480816}}},{"delta":{"node-LatLon":{"lon":-1059708612,"lat":414504233}}},{"delta":{"node-LatLon":{"lon":-1059731631,"lat":414527631}}},{"delta":{"node-LatLon":{"lon":-1059754662,"lat":414551022}}},{"delta":{"node-LatLon":{"lon":-1059777663,"lat":414574431}}},{"delta":{"node-LatLon":{"lon":-1059800605,"lat":414597873}}},{"delta":{"node-LatLon":{"lon":-1059825019,"lat":414620504}}},{"delta":{"node-LatLon":{"lon":-1059854975,"lat":414638959}}},{"delta":{"node-LatLon":{"lon":-1059886652,"lat":414655790}}},{"delta":{"node-LatLon":{"lon":-1059918347,"lat":414672602}}},{"delta":{"node-LatLon":{"lon":-1059950027,"lat":414689430}}},{"delta":{"node-LatLon":{"lon":-1059981533,"lat":414706207}}},{"delta":{"node-LatLon":{"lon":-1060013094,"lat":414722925}}},{"delta":{"node-LatLon":{"lon":-1060044644,"lat":414739656}}},{"delta":{"node-LatLon":{"lon":-1060076151,"lat":414756434}}},{"delta":{"node-LatLon":{"lon":-1060107672,"lat":414773199}}},{"delta":{"node-LatLon":{"lon":-1060138668,"lat":414789614}}},{"delta":{"node-LatLon":{"lon":-1060169596,"lat":414806103}}},{"delta":{"node-LatLon":{"lon":-1060200600,"lat":414822512}}},{"delta":{"node-LatLon":{"lon":-1060231565,"lat":414838964}}},{"delta":{"node-LatLon":{"lon":-1060262552,"lat":414855394}}},{"delta":{"node-LatLon":{"lon":-1060294303,"lat":414872314}}},{"delta":{"node-LatLon":{"lon":-1060326101,"lat":414889184}}},{"delta":{"node-LatLon":{"lon":-1060357880,"lat":414906076}}},{"delta":{"node-LatLon":{"lon":-1060389415,"lat":414923223}}},{"delta":{"node-LatLon":{"lon":-1060420573,"lat":414940760}}},{"delta":{"node-LatLon":{"lon":-1060450509,"lat":414958838}}},{"delta":{"node-LatLon":{"lon":-1060475868,"lat":414980491}}},{"delta":{"node-LatLon":{"lon":-1060495507,"lat":415005280}}},{"delta":{"node-LatLon":{"lon":-1060510699,"lat":415031818}}},{"delta":{"node-LatLon":{"lon":-1060524843,"lat":415058673}}},{"delta":{"node-LatLon":{"lon":-1060533417,"lat":415086879}}},{"delta":{"node-LatLon":{"lon":-1060540264,"lat":415115378}}},{"delta":{"node-LatLon":{"lon":-1060547197,"lat":415143865}}},{"delta":{"node-LatLon":{"lon":-1060554077,"lat":415172359}}},{"delta":{"node-LatLon":{"lon":-1060561492,"lat":415200772}}},{"delta":{"node-LatLon":{"lon":-1060576552,"lat":415227429}}},{"delta":{"node-LatLon":{"lon":-1060600749,"lat":415249961}}},{"delta":{"node-LatLon":{"lon":-1060632200,"lat":415266697}}},{"delta":{"node-LatLon":{"lon":-1060666183,"lat":415280527}}},{"delta":{"node-LatLon":{"lon":-1060695463,"lat":415299353}}},{"delta":{"node-LatLon":{"lon":-1060719162,"lat":415322019}}},{"delta":{"node-LatLon":{"lon":-1060742498,"lat":415344904}}},{"delta":{"node-LatLon":{"lon":-1060765869,"lat":415367768}}},{"delta":{"node-LatLon":{"lon":-1060789259,"lat":415390622}}},{"delta":{"node-LatLon":{"lon":-1060812632,"lat":415413487}}},{"delta":{"node-LatLon":{"lon":-1060836139,"lat":415436453}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001111"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414403179,"long":-1059400563}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5895}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31500}},"msgCnt":38}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.102461,"speed":24.46,"longitude":-105.0473492},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":70,"serialNumber":15499,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31288,"packetID":"00000000000007A7DE","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417284807,"long":-1077291383},"name":"westbound_I80_173.41_187.2_SAT-2205BAF6_RC_WAMI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1077310157,"lat":417280493}}},{"delta":{"node-LatLon":{"lon":-1077365582,"lat":417267865}}},{"delta":{"node-LatLon":{"lon":-1077438858,"lat":417251174}}},{"delta":{"node-LatLon":{"lon":-1077512126,"lat":417234471}}},{"delta":{"node-LatLon":{"lon":-1077586147,"lat":417217588}}},{"delta":{"node-LatLon":{"lon":-1077660175,"lat":417200729}}},{"delta":{"node-LatLon":{"lon":-1077734162,"lat":417183833}}},{"delta":{"node-LatLon":{"lon":-1077808136,"lat":417166974}}},{"delta":{"node-LatLon":{"lon":-1077882091,"lat":417150070}}},{"delta":{"node-LatLon":{"lon":-1077955526,"lat":417133360}}},{"delta":{"node-LatLon":{"lon":-1078028926,"lat":417116571}}},{"delta":{"node-LatLon":{"lon":-1078102836,"lat":417099694}}},{"delta":{"node-LatLon":{"lon":-1078177231,"lat":417082670}}},{"delta":{"node-LatLon":{"lon":-1078251628,"lat":417065655}}},{"delta":{"node-LatLon":{"lon":-1078327521,"lat":417053313}}},{"delta":{"node-LatLon":{"lon":-1078405145,"lat":417051623}}},{"delta":{"node-LatLon":{"lon":-1078479666,"lat":417055725}}},{"delta":{"node-LatLon":{"lon":-1078551136,"lat":417059767}}},{"delta":{"node-LatLon":{"lon":-1078622626,"lat":417063607}}},{"delta":{"node-LatLon":{"lon":-1078700426,"lat":417063986}}},{"delta":{"node-LatLon":{"lon":-1078778089,"lat":417060211}}},{"delta":{"node-LatLon":{"lon":-1078855705,"lat":417056048}}},{"delta":{"node-LatLon":{"lon":-1078933113,"lat":417050466}}},{"delta":{"node-LatLon":{"lon":-1079008244,"lat":417035644}}},{"delta":{"node-LatLon":{"lon":-1079081128,"lat":417014156}}},{"delta":{"node-LatLon":{"lon":-1079153926,"lat":416992506}}},{"delta":{"node-LatLon":{"lon":-1079226268,"lat":416970973}}},{"delta":{"node-LatLon":{"lon":-1079298175,"lat":416949594}}},{"delta":{"node-LatLon":{"lon":-1079370073,"lat":416928204}}},{"delta":{"node-LatLon":{"lon":-1079442362,"lat":416906685}}},{"delta":{"node-LatLon":{"lon":-1079513134,"lat":416882726}}},{"delta":{"node-LatLon":{"lon":-1079579019,"lat":416852706}}},{"delta":{"node-LatLon":{"lon":-1079644289,"lat":416822906}}},{"delta":{"node-LatLon":{"lon":-1079709585,"lat":416793141}}},{"delta":{"node-LatLon":{"lon":-1079776048,"lat":416762809}}},{"delta":{"node-LatLon":{"lon":-1079809278,"lat":416747641}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417284807,"long":-1077291383}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31288}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024653,"speed":24.46,"longitude":-105.0473207},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":71,"serialNumber":15500,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.999Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31500,"packetID":"00000000000002CC1B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415446372,"long":-1060853758},"name":"eastbound_I80_279.86_290.44_SAT-D603EB78_RC_LARI80WRAWI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060842121,"lat":415434989}}},{"delta":{"node-LatLon":{"lon":-1060818850,"lat":415412221}}},{"delta":{"node-LatLon":{"lon":-1060795306,"lat":415389123}}},{"delta":{"node-LatLon":{"lon":-1060772024,"lat":415365878}}},{"delta":{"node-LatLon":{"lon":-1060748924,"lat":415342529}}},{"delta":{"node-LatLon":{"lon":-1060725901,"lat":415319138}}},{"delta":{"node-LatLon":{"lon":-1060702891,"lat":415295740}}},{"delta":{"node-LatLon":{"lon":-1060677392,"lat":415274709}}},{"delta":{"node-LatLon":{"lon":-1060645465,"lat":415259440}}},{"delta":{"node-LatLon":{"lon":-1060611694,"lat":415246452}}},{"delta":{"node-LatLon":{"lon":-1060583936,"lat":415227230}}},{"delta":{"node-LatLon":{"lon":-1060567112,"lat":415201829}}},{"delta":{"node-LatLon":{"lon":-1060559250,"lat":415173268}}},{"delta":{"node-LatLon":{"lon":-1060551848,"lat":415144627}}},{"delta":{"node-LatLon":{"lon":-1060544578,"lat":415115967}}},{"delta":{"node-LatLon":{"lon":-1060537212,"lat":415087321}}},{"delta":{"node-LatLon":{"lon":-1060528192,"lat":415058965}}},{"delta":{"node-LatLon":{"lon":-1060513843,"lat":415031898}}},{"delta":{"node-LatLon":{"lon":-1060498684,"lat":415005075}}},{"delta":{"node-LatLon":{"lon":-1060479584,"lat":414979768}}},{"delta":{"node-LatLon":{"lon":-1060454612,"lat":414957536}}},{"delta":{"node-LatLon":{"lon":-1060424994,"lat":414938765}}},{"delta":{"node-LatLon":{"lon":-1060394265,"lat":414920704}}},{"delta":{"node-LatLon":{"lon":-1060362947,"lat":414903230}}},{"delta":{"node-LatLon":{"lon":-1060331139,"lat":414886261}}},{"delta":{"node-LatLon":{"lon":-1060299282,"lat":414869343}}},{"delta":{"node-LatLon":{"lon":-1060267401,"lat":414852453}}},{"delta":{"node-LatLon":{"lon":-1060236377,"lat":414836034}}},{"delta":{"node-LatLon":{"lon":-1060205413,"lat":414819550}}},{"delta":{"node-LatLon":{"lon":-1060174405,"lat":414803116}}},{"delta":{"node-LatLon":{"lon":-1060143426,"lat":414786651}}},{"delta":{"node-LatLon":{"lon":-1060112442,"lat":414770191}}},{"delta":{"node-LatLon":{"lon":-1060080853,"lat":414753421}}},{"delta":{"node-LatLon":{"lon":-1060049273,"lat":414736640}}},{"delta":{"node-LatLon":{"lon":-1060017699,"lat":414719856}}},{"delta":{"node-LatLon":{"lon":-1059986118,"lat":414703079}}},{"delta":{"node-LatLon":{"lon":-1059954550,"lat":414686289}}},{"delta":{"node-LatLon":{"lon":-1059923262,"lat":414669701}}},{"delta":{"node-LatLon":{"lon":-1059892003,"lat":414653083}}},{"delta":{"node-LatLon":{"lon":-1059860748,"lat":414636462}}},{"delta":{"node-LatLon":{"lon":-1059830894,"lat":414618511}}},{"delta":{"node-LatLon":{"lon":-1059806580,"lat":414596316}}},{"delta":{"node-LatLon":{"lon":-1059783729,"lat":414573041}}},{"delta":{"node-LatLon":{"lon":-1059760839,"lat":414549787}}},{"delta":{"node-LatLon":{"lon":-1059737946,"lat":414526535}}},{"delta":{"node-LatLon":{"lon":-1059715065,"lat":414503278}}},{"delta":{"node-LatLon":{"lon":-1059692206,"lat":414480008}}},{"delta":{"node-LatLon":{"lon":-1059665100,"lat":414457204}}},{"delta":{"node-LatLon":{"lon":-1059630733,"lat":414440918}}},{"delta":{"node-LatLon":{"lon":-1059592047,"lat":414431361}}},{"delta":{"node-LatLon":{"lon":-1059552953,"lat":414422717}}},{"delta":{"node-LatLon":{"lon":-1059513468,"lat":414415217}}},{"delta":{"node-LatLon":{"lon":-1059476558,"lat":414409805}}},{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059421200,"lat":414401666}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415446372,"long":-1060853758}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5895}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31500}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024565,"speed":24.46,"longitude":-105.0473778},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":69,"serialNumber":15498,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000D0886","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416734737,"long":-1079825644},"name":"eastbound_I80_173.41_187.2_SAT-045A0F96_RC_WAMI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1079808962,"lat":416742355}}},{"delta":{"node-LatLon":{"lon":-1079775625,"lat":416757626}}},{"delta":{"node-LatLon":{"lon":-1079708864,"lat":416788062}}},{"delta":{"node-LatLon":{"lon":-1079643761,"lat":416817816}}},{"delta":{"node-LatLon":{"lon":-1079578633,"lat":416847544}}},{"delta":{"node-LatLon":{"lon":-1079513021,"lat":416877502}}},{"delta":{"node-LatLon":{"lon":-1079442840,"lat":416901685}}},{"delta":{"node-LatLon":{"lon":-1079370904,"lat":416923092}}},{"delta":{"node-LatLon":{"lon":-1079299318,"lat":416944401}}},{"delta":{"node-LatLon":{"lon":-1079227728,"lat":416965705}}},{"delta":{"node-LatLon":{"lon":-1079155246,"lat":416987264}}},{"delta":{"node-LatLon":{"lon":-1079081869,"lat":417009073}}},{"delta":{"node-LatLon":{"lon":-1079008281,"lat":417030466}}},{"delta":{"node-LatLon":{"lon":-1078933736,"lat":417045037}}},{"delta":{"node-LatLon":{"lon":-1078857144,"lat":417051301}}},{"delta":{"node-LatLon":{"lon":-1078779954,"lat":417053823}}},{"delta":{"node-LatLon":{"lon":-1078702612,"lat":417056324}}},{"delta":{"node-LatLon":{"lon":-1078625459,"lat":417053640}}},{"delta":{"node-LatLon":{"lon":-1078550508,"lat":417040669}}},{"delta":{"node-LatLon":{"lon":-1078475631,"lat":417027451}}},{"delta":{"node-LatLon":{"lon":-1078399078,"lat":417028105}}},{"delta":{"node-LatLon":{"lon":-1078325093,"lat":417044119}}},{"delta":{"node-LatLon":{"lon":-1078251401,"lat":417060961}}},{"delta":{"node-LatLon":{"lon":-1078177495,"lat":417077861}}},{"delta":{"node-LatLon":{"lon":-1078103576,"lat":417094732}}},{"delta":{"node-LatLon":{"lon":-1078029860,"lat":417111623}}},{"delta":{"node-LatLon":{"lon":-1077956308,"lat":417128437}}},{"delta":{"node-LatLon":{"lon":-1077882736,"lat":417145206}}},{"delta":{"node-LatLon":{"lon":-1077809037,"lat":417162072}}},{"delta":{"node-LatLon":{"lon":-1077735310,"lat":417178873}}},{"delta":{"node-LatLon":{"lon":-1077661395,"lat":417195740}}},{"delta":{"node-LatLon":{"lon":-1077587285,"lat":417212656}}},{"delta":{"node-LatLon":{"lon":-1077513154,"lat":417229528}}},{"delta":{"node-LatLon":{"lon":-1077440112,"lat":417246166}}},{"delta":{"node-LatLon":{"lon":-1077367083,"lat":417262839}}},{"delta":{"node-LatLon":{"lon":-1077292868,"lat":417279720}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416734737,"long":-1079825644}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024565,"speed":24.46,"longitude":-105.0473778},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":68,"serialNumber":15497,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"00000000000004E35A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415325796,"long":-1094614954},"name":"westbound_I80_90.098_90.312_SAT-5302F9D3_RC_GRTUNWB","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094631379,"lat":415333237}}},{"delta":{"node-LatLon":{"lon":-1094647572,"lat":415340958}}},{"delta":{"node-LatLon":{"lon":-1094662661,"lat":415349838}}},{"delta":{"node-LatLon":{"lon":-1094677547,"lat":415358928}}},{"delta":{"node-LatLon":{"lon":-1094692747,"lat":415367707}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000000100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415325796,"long":-1094614954}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":18}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024523,"speed":24.46,"longitude":-105.0474064},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":67,"serialNumber":15496,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"000000000000064D1D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415367224,"long":-1094697171},"name":"eastbound_I80_90.109_90.324_SAT-D48C7646_RC_GRTUNEB","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094682069,"lat":415358380}}},{"delta":{"node-LatLon":{"lon":-1094666854,"lat":415349644}}},{"delta":{"node-LatLon":{"lon":-1094651565,"lat":415340982}}},{"delta":{"node-LatLon":{"lon":-1094636062,"lat":415332555}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000010000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415367224,"long":-1094697171}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024523,"speed":24.46,"longitude":-105.0474064},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":66,"serialNumber":15495,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.551Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000A389B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416780373,"long":-1087800160},"name":"westbound_I80_111.16_130.84_SAT-69F3DB7B_RC_RSI80ERAWD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1087818098,"lat":416784087}}},{"delta":{"node-LatLon":{"lon":-1087836031,"lat":416787816}}},{"delta":{"node-LatLon":{"lon":-1087907758,"lat":416802744}}},{"delta":{"node-LatLon":{"lon":-1087979504,"lat":416817627}}},{"delta":{"node-LatLon":{"lon":-1088052834,"lat":416835667}}},{"delta":{"node-LatLon":{"lon":-1088118809,"lat":416865925}}},{"delta":{"node-LatLon":{"lon":-1088189118,"lat":416887479}}},{"delta":{"node-LatLon":{"lon":-1088265956,"lat":416884718}}},{"delta":{"node-LatLon":{"lon":-1088342780,"lat":416881687}}},{"delta":{"node-LatLon":{"lon":-1088419492,"lat":416886484}}},{"delta":{"node-LatLon":{"lon":-1088493522,"lat":416903350}}},{"delta":{"node-LatLon":{"lon":-1088567559,"lat":416920405}}},{"delta":{"node-LatLon":{"lon":-1088642038,"lat":416936455}}},{"delta":{"node-LatLon":{"lon":-1088718787,"lat":416933306}}},{"delta":{"node-LatLon":{"lon":-1088792811,"lat":416916445}}},{"delta":{"node-LatLon":{"lon":-1088868743,"lat":416911533}}},{"delta":{"node-LatLon":{"lon":-1088944838,"lat":416921259}}},{"delta":{"node-LatLon":{"lon":-1089020933,"lat":416916370}}},{"delta":{"node-LatLon":{"lon":-1089090262,"lat":416891382}}},{"delta":{"node-LatLon":{"lon":-1089158444,"lat":416862087}}},{"delta":{"node-LatLon":{"lon":-1089206739,"lat":416816167}}},{"delta":{"node-LatLon":{"lon":-1089229701,"lat":416761043}}},{"delta":{"node-LatLon":{"lon":-1089278517,"lat":416719880}}},{"delta":{"node-LatLon":{"lon":-1089348486,"lat":416699184}}},{"delta":{"node-LatLon":{"lon":-1089425832,"lat":416694198}}},{"delta":{"node-LatLon":{"lon":-1089503649,"lat":416693457}}},{"delta":{"node-LatLon":{"lon":-1089580254,"lat":416689749}}},{"delta":{"node-LatLon":{"lon":-1089654935,"lat":416679778}}},{"delta":{"node-LatLon":{"lon":-1089727701,"lat":416664462}}},{"delta":{"node-LatLon":{"lon":-1089800350,"lat":416634151}}},{"delta":{"node-LatLon":{"lon":-1089872661,"lat":416603374}}},{"delta":{"node-LatLon":{"lon":-1089942282,"lat":416573714}}},{"delta":{"node-LatLon":{"lon":-1090009243,"lat":416545210}}},{"delta":{"node-LatLon":{"lon":-1090076173,"lat":416516668}}},{"delta":{"node-LatLon":{"lon":-1090143069,"lat":416488162}}},{"delta":{"node-LatLon":{"lon":-1090209918,"lat":416459596}}},{"delta":{"node-LatLon":{"lon":-1090277470,"lat":416430810}}},{"delta":{"node-LatLon":{"lon":-1090345662,"lat":416401720}}},{"delta":{"node-LatLon":{"lon":-1090413831,"lat":416372606}}},{"delta":{"node-LatLon":{"lon":-1090485302,"lat":416354405}}},{"delta":{"node-LatLon":{"lon":-1090559312,"lat":416342147}}},{"delta":{"node-LatLon":{"lon":-1090633109,"lat":416329839}}},{"delta":{"node-LatLon":{"lon":-1090706742,"lat":416317644}}},{"delta":{"node-LatLon":{"lon":-1090780363,"lat":416305412}}},{"delta":{"node-LatLon":{"lon":-1090854362,"lat":416289159}}},{"delta":{"node-LatLon":{"lon":-1090923703,"lat":416263510}}},{"delta":{"node-LatLon":{"lon":-1090992931,"lat":416237673}}},{"delta":{"node-LatLon":{"lon":-1091062121,"lat":416211766}}},{"delta":{"node-LatLon":{"lon":-1091131370,"lat":416185951}}},{"delta":{"node-LatLon":{"lon":-1091198118,"lat":416160999}}},{"delta":{"node-LatLon":{"lon":-1091264852,"lat":416136031}}},{"delta":{"node-LatLon":{"lon":-1091281511,"lat":416129751}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000011111100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416780373,"long":-1087800160}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024479,"speed":24.46,"longitude":-105.0474349},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":65,"serialNumber":15494,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.551Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"00000000000002E727","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416118575,"long":-1091298057},"name":"eastbound_I80_111.16_130.84_SAT-E83FBA7D_RC_RSI80ERAWI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091281363,"lat":416124819}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}},{"delta":{"node-LatLon":{"lon":-1091197851,"lat":416155972}}},{"delta":{"node-LatLon":{"lon":-1091131081,"lat":416180959}}},{"delta":{"node-LatLon":{"lon":-1091061948,"lat":416206791}}},{"delta":{"node-LatLon":{"lon":-1090992816,"lat":416232629}}},{"delta":{"node-LatLon":{"lon":-1090923774,"lat":416258380}}},{"delta":{"node-LatLon":{"lon":-1090854860,"lat":416284101}}},{"delta":{"node-LatLon":{"lon":-1090781365,"lat":416300658}}},{"delta":{"node-LatLon":{"lon":-1090707741,"lat":416312858}}},{"delta":{"node-LatLon":{"lon":-1090634136,"lat":416325123}}},{"delta":{"node-LatLon":{"lon":-1090559994,"lat":416337414}}},{"delta":{"node-LatLon":{"lon":-1090485346,"lat":416349841}}},{"delta":{"node-LatLon":{"lon":-1090413083,"lat":416367890}}},{"delta":{"node-LatLon":{"lon":-1090344728,"lat":416396917}}},{"delta":{"node-LatLon":{"lon":-1090276443,"lat":416426043}}},{"delta":{"node-LatLon":{"lon":-1090208858,"lat":416454891}}},{"delta":{"node-LatLon":{"lon":-1090141947,"lat":416483428}}},{"delta":{"node-LatLon":{"lon":-1090075022,"lat":416511951}}},{"delta":{"node-LatLon":{"lon":-1090008142,"lat":416540450}}},{"delta":{"node-LatLon":{"lon":-1089941256,"lat":416568945}}},{"delta":{"node-LatLon":{"lon":-1089871816,"lat":416598516}}},{"delta":{"node-LatLon":{"lon":-1089799835,"lat":416629182}}},{"delta":{"node-LatLon":{"lon":-1089727632,"lat":416659547}}},{"delta":{"node-LatLon":{"lon":-1089655858,"lat":416675127}}},{"delta":{"node-LatLon":{"lon":-1089582024,"lat":416685077}}},{"delta":{"node-LatLon":{"lon":-1089506421,"lat":416691287}}},{"delta":{"node-LatLon":{"lon":-1089429140,"lat":416692075}}},{"delta":{"node-LatLon":{"lon":-1089352223,"lat":416696411}}},{"delta":{"node-LatLon":{"lon":-1089279710,"lat":416716970}}},{"delta":{"node-LatLon":{"lon":-1089227822,"lat":416758449}}},{"delta":{"node-LatLon":{"lon":-1089204951,"lat":416814026}}},{"delta":{"node-LatLon":{"lon":-1089158069,"lat":416859587}}},{"delta":{"node-LatLon":{"lon":-1089091158,"lat":416888588}}},{"delta":{"node-LatLon":{"lon":-1089022414,"lat":416913801}}},{"delta":{"node-LatLon":{"lon":-1088946848,"lat":416919297}}},{"delta":{"node-LatLon":{"lon":-1088870915,"lat":416909691}}},{"delta":{"node-LatLon":{"lon":-1088794827,"lat":416913757}}},{"delta":{"node-LatLon":{"lon":-1088720754,"lat":416930631}}},{"delta":{"node-LatLon":{"lon":-1088644702,"lat":416934650}}},{"delta":{"node-LatLon":{"lon":-1088570748,"lat":416918931}}},{"delta":{"node-LatLon":{"lon":-1088496778,"lat":416901918}}},{"delta":{"node-LatLon":{"lon":-1088422329,"lat":416884944}}},{"delta":{"node-LatLon":{"lon":-1088345218,"lat":416879835}}},{"delta":{"node-LatLon":{"lon":-1088268750,"lat":416882872}}},{"delta":{"node-LatLon":{"lon":-1088192271,"lat":416885698}}},{"delta":{"node-LatLon":{"lon":-1088121685,"lat":416865247}}},{"delta":{"node-LatLon":{"lon":-1088055642,"lat":416834746}}},{"delta":{"node-LatLon":{"lon":-1087982459,"lat":416815998}}},{"delta":{"node-LatLon":{"lon":-1087910924,"lat":416801153}}},{"delta":{"node-LatLon":{"lon":-1087839399,"lat":416786287}}},{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111110000000000}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416118575,"long":-1091298057}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024479,"speed":24.46,"longitude":-105.0474349},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":64,"serialNumber":15493,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"0000000000000EF239","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415272879,"long":-1094524441},"name":"westbound_I80_83.01_91.0_SAT-AE5C67DC_RC_RSI80WGRAD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}},{"delta":{"node-LatLon":{"lon":-1094567629,"lat":415301333}}},{"delta":{"node-LatLon":{"lon":-1094598552,"lat":415318326}}},{"delta":{"node-LatLon":{"lon":-1094631379,"lat":415333237}}},{"delta":{"node-LatLon":{"lon":-1094662661,"lat":415349838}}},{"delta":{"node-LatLon":{"lon":-1094692747,"lat":415367707}}},{"delta":{"node-LatLon":{"lon":-1094725523,"lat":415382855}}},{"delta":{"node-LatLon":{"lon":-1094759103,"lat":415397020}}},{"delta":{"node-LatLon":{"lon":-1094787376,"lat":415416158}}},{"delta":{"node-LatLon":{"lon":-1094803681,"lat":415442345}}},{"delta":{"node-LatLon":{"lon":-1094827523,"lat":415464696}}},{"delta":{"node-LatLon":{"lon":-1094857768,"lat":415483037}}},{"delta":{"node-LatLon":{"lon":-1094888001,"lat":415501390}}},{"delta":{"node-LatLon":{"lon":-1094919170,"lat":415518798}}},{"delta":{"node-LatLon":{"lon":-1094953846,"lat":415531903}}},{"delta":{"node-LatLon":{"lon":-1094991158,"lat":415539943}}},{"delta":{"node-LatLon":{"lon":-1095029104,"lat":415543908}}},{"delta":{"node-LatLon":{"lon":-1095067107,"lat":415547593}}},{"delta":{"node-LatLon":{"lon":-1095105120,"lat":415551220}}},{"delta":{"node-LatLon":{"lon":-1095142989,"lat":415555524}}},{"delta":{"node-LatLon":{"lon":-1095178583,"lat":415565942}}},{"delta":{"node-LatLon":{"lon":-1095212839,"lat":415581431}}},{"delta":{"node-LatLon":{"lon":-1095248825,"lat":415594355}}},{"delta":{"node-LatLon":{"lon":-1095287864,"lat":415600639}}},{"delta":{"node-LatLon":{"lon":-1095327361,"lat":415605311}}},{"delta":{"node-LatLon":{"lon":-1095366831,"lat":415610104}}},{"delta":{"node-LatLon":{"lon":-1095403172,"lat":415618111}}},{"delta":{"node-LatLon":{"lon":-1095437320,"lat":415630465}}},{"delta":{"node-LatLon":{"lon":-1095472268,"lat":415641378}}},{"delta":{"node-LatLon":{"lon":-1095509638,"lat":415645822}}},{"delta":{"node-LatLon":{"lon":-1095547341,"lat":415643461}}},{"delta":{"node-LatLon":{"lon":-1095583235,"lat":415634481}}},{"delta":{"node-LatLon":{"lon":-1095616942,"lat":415621427}}},{"delta":{"node-LatLon":{"lon":-1095650544,"lat":415608220}}},{"delta":{"node-LatLon":{"lon":-1095684389,"lat":415595379}}},{"delta":{"node-LatLon":{"lon":-1095720328,"lat":415586411}}},{"delta":{"node-LatLon":{"lon":-1095758260,"lat":415580697}}},{"delta":{"node-LatLon":{"lon":-1095796228,"lat":415575112}}},{"delta":{"node-LatLon":{"lon":-1095834193,"lat":415569520}}},{"delta":{"node-LatLon":{"lon":-1095872158,"lat":415563926}}},{"delta":{"node-LatLon":{"lon":-1095909369,"lat":415556119}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415272879,"long":-1094524441}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":18}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024436,"speed":24.46,"longitude":-105.0474634},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":63,"serialNumber":15492,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"00000000000004FE29","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415546021,"long":-1095927626},"name":"eastbound_I80_83.01_91.0_SAT-51917CF8_RC_RSI80WGRAI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1095910196,"lat":415552425}}},{"delta":{"node-LatLon":{"lon":-1095873554,"lat":415561468}}},{"delta":{"node-LatLon":{"lon":-1095835664,"lat":415567106}}},{"delta":{"node-LatLon":{"lon":-1095797758,"lat":415572690}}},{"delta":{"node-LatLon":{"lon":-1095759854,"lat":415578281}}},{"delta":{"node-LatLon":{"lon":-1095721965,"lat":415583926}}},{"delta":{"node-LatLon":{"lon":-1095685445,"lat":415592676}}},{"delta":{"node-LatLon":{"lon":-1095651117,"lat":415605559}}},{"delta":{"node-LatLon":{"lon":-1095617101,"lat":415618922}}},{"delta":{"node-LatLon":{"lon":-1095583008,"lat":415632176}}},{"delta":{"node-LatLon":{"lon":-1095546731,"lat":415641373}}},{"delta":{"node-LatLon":{"lon":-1095509731,"lat":415643672}}},{"delta":{"node-LatLon":{"lon":-1095473059,"lat":415639326}}},{"delta":{"node-LatLon":{"lon":-1095438752,"lat":415628644}}},{"delta":{"node-LatLon":{"lon":-1095405325,"lat":415616388}}},{"delta":{"node-LatLon":{"lon":-1095369730,"lat":415608358}}},{"delta":{"node-LatLon":{"lon":-1095330616,"lat":415603528}}},{"delta":{"node-LatLon":{"lon":-1095291457,"lat":415598888}}},{"delta":{"node-LatLon":{"lon":-1095252639,"lat":415593016}}},{"delta":{"node-LatLon":{"lon":-1095216703,"lat":415580638}}},{"delta":{"node-LatLon":{"lon":-1095182775,"lat":415565235}}},{"delta":{"node-LatLon":{"lon":-1095147149,"lat":415554096}}},{"delta":{"node-LatLon":{"lon":-1095108985,"lat":415549420}}},{"delta":{"node-LatLon":{"lon":-1095070589,"lat":415545729}}},{"delta":{"node-LatLon":{"lon":-1095032188,"lat":415542064}}},{"delta":{"node-LatLon":{"lon":-1094993831,"lat":415538174}}},{"delta":{"node-LatLon":{"lon":-1094956860,"lat":415530480}}},{"delta":{"node-LatLon":{"lon":-1094922411,"lat":415517802}}},{"delta":{"node-LatLon":{"lon":-1094891469,"lat":415500743}}},{"delta":{"node-LatLon":{"lon":-1094861594,"lat":415482600}}},{"delta":{"node-LatLon":{"lon":-1094831707,"lat":415464468}}},{"delta":{"node-LatLon":{"lon":-1094806972,"lat":415442662}}},{"delta":{"node-LatLon":{"lon":-1094790913,"lat":415416378}}},{"delta":{"node-LatLon":{"lon":-1094763585,"lat":415396461}}},{"delta":{"node-LatLon":{"lon":-1094730035,"lat":415382264}}},{"delta":{"node-LatLon":{"lon":-1094697171,"lat":415367224}}},{"delta":{"node-LatLon":{"lon":-1094666854,"lat":415349644}}},{"delta":{"node-LatLon":{"lon":-1094636062,"lat":415332555}}},{"delta":{"node-LatLon":{"lon":-1094603326,"lat":415317623}}},{"delta":{"node-LatLon":{"lon":-1094571921,"lat":415301218}}},{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011111000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415546021,"long":-1095927626}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024392,"speed":24.46,"longitude":-105.047492},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":62,"serialNumber":15491,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"000000000000059505","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416103734,"long":-1092210485},"name":"westbound_I80_91.0_104.83_SAT-16CC040B_RC_RSI80WGRFGD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092225602,"lat":416102051}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}},{"delta":{"node-LatLon":{"lon":-1092295103,"lat":416078549}}},{"delta":{"node-LatLon":{"lon":-1092353802,"lat":416055730}}},{"delta":{"node-LatLon":{"lon":-1092409233,"lat":415994268}}},{"delta":{"node-LatLon":{"lon":-1092453299,"lat":415926333}}},{"delta":{"node-LatLon":{"lon":-1092494255,"lat":415863151}}},{"delta":{"node-LatLon":{"lon":-1092542043,"lat":415808289}}},{"delta":{"node-LatLon":{"lon":-1092614541,"lat":415771804}}},{"delta":{"node-LatLon":{"lon":-1092686893,"lat":415745034}}},{"delta":{"node-LatLon":{"lon":-1092755235,"lat":415719687}}},{"delta":{"node-LatLon":{"lon":-1092824046,"lat":415694227}}},{"delta":{"node-LatLon":{"lon":-1092892916,"lat":415668054}}},{"delta":{"node-LatLon":{"lon":-1092959628,"lat":415638882}}},{"delta":{"node-LatLon":{"lon":-1093026230,"lat":415609696}}},{"delta":{"node-LatLon":{"lon":-1093092855,"lat":415580545}}},{"delta":{"node-LatLon":{"lon":-1093159414,"lat":415551340}}},{"delta":{"node-LatLon":{"lon":-1093225990,"lat":415522190}}},{"delta":{"node-LatLon":{"lon":-1093292630,"lat":415493128}}},{"delta":{"node-LatLon":{"lon":-1093362756,"lat":415469236}}},{"delta":{"node-LatLon":{"lon":-1093433593,"lat":415446486}}},{"delta":{"node-LatLon":{"lon":-1093501983,"lat":415419517}}},{"delta":{"node-LatLon":{"lon":-1093570430,"lat":415392320}}},{"delta":{"node-LatLon":{"lon":-1093638825,"lat":415365052}}},{"delta":{"node-LatLon":{"lon":-1093706625,"lat":415338051}}},{"delta":{"node-LatLon":{"lon":-1093779378,"lat":415323162}}},{"delta":{"node-LatLon":{"lon":-1093855135,"lat":415332204}}},{"delta":{"node-LatLon":{"lon":-1093927477,"lat":415317094}}},{"delta":{"node-LatLon":{"lon":-1093995757,"lat":415291937}}},{"delta":{"node-LatLon":{"lon":-1094070772,"lat":415279115}}},{"delta":{"node-LatLon":{"lon":-1094147255,"lat":415276886}}},{"delta":{"node-LatLon":{"lon":-1094224449,"lat":415282426}}},{"delta":{"node-LatLon":{"lon":-1094301394,"lat":415276124}}},{"delta":{"node-LatLon":{"lon":-1094371013,"lat":415249502}}},{"delta":{"node-LatLon":{"lon":-1094443930,"lat":415236997}}},{"delta":{"node-LatLon":{"lon":-1094510066,"lat":415263454}}},{"delta":{"node-LatLon":{"lon":-1094538788,"lat":415282328}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416103734,"long":-1092210485}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":18}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.5875,"latitude":41.1024392,"speed":24.46,"longitude":-105.047492},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":61,"serialNumber":15490,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"000000000000081102","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415291783,"long":-1094557465},"name":"eastbound_I80_91.0_104.83_SAT-6E2075B5_RC_RSI80WGRFGI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1094543062,"lat":415282303}}},{"delta":{"node-LatLon":{"lon":-1094513887,"lat":415263122}}},{"delta":{"node-LatLon":{"lon":-1094447291,"lat":415235238}}},{"delta":{"node-LatLon":{"lon":-1094372833,"lat":415246383}}},{"delta":{"node-LatLon":{"lon":-1094303758,"lat":415272043}}},{"delta":{"node-LatLon":{"lon":-1094227621,"lat":415277316}}},{"delta":{"node-LatLon":{"lon":-1094148912,"lat":415268934}}},{"delta":{"node-LatLon":{"lon":-1094067595,"lat":415271090}}},{"delta":{"node-LatLon":{"lon":-1093987494,"lat":415283663}}},{"delta":{"node-LatLon":{"lon":-1093925069,"lat":415311063}}},{"delta":{"node-LatLon":{"lon":-1093857979,"lat":415329441}}},{"delta":{"node-LatLon":{"lon":-1093783441,"lat":415321335}}},{"delta":{"node-LatLon":{"lon":-1093709018,"lat":415334717}}},{"delta":{"node-LatLon":{"lon":-1093640120,"lat":415362181}}},{"delta":{"node-LatLon":{"lon":-1093571698,"lat":415389400}}},{"delta":{"node-LatLon":{"lon":-1093503273,"lat":415416618}}},{"delta":{"node-LatLon":{"lon":-1093434965,"lat":415443640}}},{"delta":{"node-LatLon":{"lon":-1093364275,"lat":415466496}}},{"delta":{"node-LatLon":{"lon":-1093294066,"lat":415490133}}},{"delta":{"node-LatLon":{"lon":-1093227263,"lat":415519148}}},{"delta":{"node-LatLon":{"lon":-1093160626,"lat":415548385}}},{"delta":{"node-LatLon":{"lon":-1093093946,"lat":415577570}}},{"delta":{"node-LatLon":{"lon":-1093027278,"lat":415606775}}},{"delta":{"node-LatLon":{"lon":-1092960606,"lat":415635979}}},{"delta":{"node-LatLon":{"lon":-1092894081,"lat":415665067}}},{"delta":{"node-LatLon":{"lon":-1092825492,"lat":415691296}}},{"delta":{"node-LatLon":{"lon":-1092756640,"lat":415716802}}},{"delta":{"node-LatLon":{"lon":-1092687981,"lat":415742243}}},{"delta":{"node-LatLon":{"lon":-1092622869,"lat":415766320}}},{"delta":{"node-LatLon":{"lon":-1092557117,"lat":415795122}}},{"delta":{"node-LatLon":{"lon":-1092507779,"lat":415838460}}},{"delta":{"node-LatLon":{"lon":-1092473834,"lat":415889802}}},{"delta":{"node-LatLon":{"lon":-1092438357,"lat":415944761}}},{"delta":{"node-LatLon":{"lon":-1092402488,"lat":415999793}}},{"delta":{"node-LatLon":{"lon":-1092361225,"lat":416049415}}},{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092274460,"lat":416084170}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415291783,"long":-1094557465}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.55,"latitude":41.1024304,"speed":24.32,"longitude":-105.047549},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":60,"serialNumber":15489,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"000000000000104155","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416142272,"long":-1091248169},"name":"westbound_I80_104.83_111.16_SAT-E4C7F6F3_RC_RSI80MARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1091264852,"lat":416136031}}},{"delta":{"node-LatLon":{"lon":-1091298228,"lat":416123561}}},{"delta":{"node-LatLon":{"lon":-1091334018,"lat":416110189}}},{"delta":{"node-LatLon":{"lon":-1091369795,"lat":416096798}}},{"delta":{"node-LatLon":{"lon":-1091405563,"lat":416083396}}},{"delta":{"node-LatLon":{"lon":-1091441283,"lat":416069923}}},{"delta":{"node-LatLon":{"lon":-1091474700,"lat":416053537}}},{"delta":{"node-LatLon":{"lon":-1091501964,"lat":416033828}}},{"delta":{"node-LatLon":{"lon":-1091526844,"lat":416012368}}},{"delta":{"node-LatLon":{"lon":-1091552241,"lat":415991270}}},{"delta":{"node-LatLon":{"lon":-1091583184,"lat":415974991}}},{"delta":{"node-LatLon":{"lon":-1091618832,"lat":415965599}}},{"delta":{"node-LatLon":{"lon":-1091657262,"lat":415963124}}},{"delta":{"node-LatLon":{"lon":-1091695868,"lat":415962098}}},{"delta":{"node-LatLon":{"lon":-1091734473,"lat":415961055}}},{"delta":{"node-LatLon":{"lon":-1091772519,"lat":415956756}}},{"delta":{"node-LatLon":{"lon":-1091806953,"lat":415943769}}},{"delta":{"node-LatLon":{"lon":-1091836882,"lat":415930461}}},{"delta":{"node-LatLon":{"lon":-1091869287,"lat":415921267}}},{"delta":{"node-LatLon":{"lon":-1091903898,"lat":415920097}}},{"delta":{"node-LatLon":{"lon":-1091937392,"lat":415926747}}},{"delta":{"node-LatLon":{"lon":-1091966574,"lat":415940771}}},{"delta":{"node-LatLon":{"lon":-1091990723,"lat":415963402}}},{"delta":{"node-LatLon":{"lon":-1092004823,"lat":415990502}}},{"delta":{"node-LatLon":{"lon":-1092019104,"lat":416017543}}},{"delta":{"node-LatLon":{"lon":-1092043521,"lat":416040022}}},{"delta":{"node-LatLon":{"lon":-1092074899,"lat":416057166}}},{"delta":{"node-LatLon":{"lon":-1092100017,"lat":416070268}}},{"delta":{"node-LatLon":{"lon":-1092125100,"lat":416083407}}},{"delta":{"node-LatLon":{"lon":-1092151035,"lat":416095519}}},{"delta":{"node-LatLon":{"lon":-1092180024,"lat":416102624}}},{"delta":{"node-LatLon":{"lon":-1092210485,"lat":416103734}}},{"delta":{"node-LatLon":{"lon":-1092240287,"lat":416098876}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111111"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416142272,"long":-1091248169}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":18}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.55,"latitude":41.1024304,"speed":24.32,"longitude":-105.047549},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":59,"serialNumber":15488,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31326,"packetID":"0000000000000B625E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416070648,"long":-1092309469},"name":"eastbound_I80_104.83_111.16_SAT-7802A0B6_RC_RSI80MARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1092291967,"lat":416077413}}},{"delta":{"node-LatLon":{"lon":-1092256961,"lat":416090938}}},{"delta":{"node-LatLon":{"lon":-1092220011,"lat":416100743}}},{"delta":{"node-LatLon":{"lon":-1092180837,"lat":416100613}}},{"delta":{"node-LatLon":{"lon":-1092144100,"lat":416090411}}},{"delta":{"node-LatLon":{"lon":-1092111577,"lat":416073768}}},{"delta":{"node-LatLon":{"lon":-1092079251,"lat":416056897}}},{"delta":{"node-LatLon":{"lon":-1092047614,"lat":416039914}}},{"delta":{"node-LatLon":{"lon":-1092022496,"lat":416017802}}},{"delta":{"node-LatLon":{"lon":-1092007875,"lat":415990813}}},{"delta":{"node-LatLon":{"lon":-1091994030,"lat":415963562}}},{"delta":{"node-LatLon":{"lon":-1091970384,"lat":415940547}}},{"delta":{"node-LatLon":{"lon":-1091941029,"lat":415925731}}},{"delta":{"node-LatLon":{"lon":-1091907083,"lat":415918255}}},{"delta":{"node-LatLon":{"lon":-1091871710,"lat":415918755}}},{"delta":{"node-LatLon":{"lon":-1091838259,"lat":415927373}}},{"delta":{"node-LatLon":{"lon":-1091807633,"lat":415940869}}},{"delta":{"node-LatLon":{"lon":-1091773693,"lat":415954295}}},{"delta":{"node-LatLon":{"lon":-1091735915,"lat":415958860}}},{"delta":{"node-LatLon":{"lon":-1091697507,"lat":415959950}}},{"delta":{"node-LatLon":{"lon":-1091659097,"lat":415960991}}},{"delta":{"node-LatLon":{"lon":-1091620811,"lat":415963173}}},{"delta":{"node-LatLon":{"lon":-1091584800,"lat":415972056}}},{"delta":{"node-LatLon":{"lon":-1091553176,"lat":415987749}}},{"delta":{"node-LatLon":{"lon":-1091527289,"lat":416008625}}},{"delta":{"node-LatLon":{"lon":-1091502330,"lat":416030163}}},{"delta":{"node-LatLon":{"lon":-1091474365,"lat":416049452}}},{"delta":{"node-LatLon":{"lon":-1091440655,"lat":416065279}}},{"delta":{"node-LatLon":{"lon":-1091405002,"lat":416078597}}},{"delta":{"node-LatLon":{"lon":-1091369361,"lat":416091933}}},{"delta":{"node-LatLon":{"lon":-1091333716,"lat":416105264}}},{"delta":{"node-LatLon":{"lon":-1091298057,"lat":416118575}}},{"delta":{"node-LatLon":{"lon":-1091264664,"lat":416131054}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416070648,"long":-1092309469}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31326}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024261,"speed":24.14,"longitude":-105.0475775},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":58,"serialNumber":15487,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31551,"packetID":"000000000000038ED9","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416344087,"long":-1082586926},"name":"westbound_I80_142.17_158.55_SAT-BC3CEF3B_RC_PDI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1082605867,"lat":416341147}}},{"delta":{"node-LatLon":{"lon":-1082643762,"lat":416335317}}},{"delta":{"node-LatLon":{"lon":-1082719537,"lat":416323607}}},{"delta":{"node-LatLon":{"lon":-1082795332,"lat":416311823}}},{"delta":{"node-LatLon":{"lon":-1082871219,"lat":416300396}}},{"delta":{"node-LatLon":{"lon":-1082948412,"lat":416300333}}},{"delta":{"node-LatLon":{"lon":-1083025592,"lat":416303069}}},{"delta":{"node-LatLon":{"lon":-1083102774,"lat":416305783}}},{"delta":{"node-LatLon":{"lon":-1083179715,"lat":416308441}}},{"delta":{"node-LatLon":{"lon":-1083256650,"lat":416311187}}},{"delta":{"node-LatLon":{"lon":-1083333670,"lat":416313866}}},{"delta":{"node-LatLon":{"lon":-1083410768,"lat":416316579}}},{"delta":{"node-LatLon":{"lon":-1083487872,"lat":416319193}}},{"delta":{"node-LatLon":{"lon":-1083564905,"lat":416322423}}},{"delta":{"node-LatLon":{"lon":-1083641683,"lat":416328142}}},{"delta":{"node-LatLon":{"lon":-1083718587,"lat":416332876}}},{"delta":{"node-LatLon":{"lon":-1083795496,"lat":416337572}}},{"delta":{"node-LatLon":{"lon":-1083872405,"lat":416342269}}},{"delta":{"node-LatLon":{"lon":-1083949300,"lat":416347096}}},{"delta":{"node-LatLon":{"lon":-1084026064,"lat":416352984}}},{"delta":{"node-LatLon":{"lon":-1084103063,"lat":416357400}}},{"delta":{"node-LatLon":{"lon":-1084180198,"lat":416361177}}},{"delta":{"node-LatLon":{"lon":-1084257244,"lat":416365879}}},{"delta":{"node-LatLon":{"lon":-1084326673,"lat":416370105}}},{"delta":{"node-LatLon":{"lon":-1084396100,"lat":416374353}}},{"delta":{"node-LatLon":{"lon":-1084469893,"lat":416378867}}},{"delta":{"node-LatLon":{"lon":-1084548056,"lat":416383611}}},{"delta":{"node-LatLon":{"lon":-1084626220,"lat":416388347}}},{"delta":{"node-LatLon":{"lon":-1084703702,"lat":416393060}}},{"delta":{"node-LatLon":{"lon":-1084781188,"lat":416397734}}},{"delta":{"node-LatLon":{"lon":-1084859010,"lat":416402450}}},{"delta":{"node-LatLon":{"lon":-1084937168,"lat":416407197}}},{"delta":{"node-LatLon":{"lon":-1085015328,"lat":416411930}}},{"delta":{"node-LatLon":{"lon":-1085093024,"lat":416416612}}},{"delta":{"node-LatLon":{"lon":-1085170718,"lat":416421321}}},{"delta":{"node-LatLon":{"lon":-1085248418,"lat":416425954}}},{"delta":{"node-LatLon":{"lon":-1085326100,"lat":416430747}}},{"delta":{"node-LatLon":{"lon":-1085403806,"lat":416435322}}},{"delta":{"node-LatLon":{"lon":-1085482142,"lat":416440051}}},{"delta":{"node-LatLon":{"lon":-1085560481,"lat":416444752}}},{"delta":{"node-LatLon":{"lon":-1085638702,"lat":416449395}}},{"delta":{"node-LatLon":{"lon":-1085716794,"lat":416454065}}},{"delta":{"node-LatLon":{"lon":-1085775366,"lat":416457555}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416344087,"long":-1082586926}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31551}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024175,"speed":24.14,"longitude":-105.0476338},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":55,"serialNumber":15484,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31448,"packetID":"000000000000078022","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416786287,"long":-1087839399},"name":"eastbound_I80_130.84_142.17_SAT-7FA0318B_RC_PDI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1087821508,"lat":416782598}}},{"delta":{"node-LatLon":{"lon":-1087803620,"lat":416778902}}},{"delta":{"node-LatLon":{"lon":-1087765168,"lat":416771009}}},{"delta":{"node-LatLon":{"lon":-1087726370,"lat":416764174}}},{"delta":{"node-LatLon":{"lon":-1087686884,"lat":416760144}}},{"delta":{"node-LatLon":{"lon":-1087647203,"lat":416757279}}},{"delta":{"node-LatLon":{"lon":-1087607525,"lat":416754383}}},{"delta":{"node-LatLon":{"lon":-1087569186,"lat":416751628}}},{"delta":{"node-LatLon":{"lon":-1087530855,"lat":416748818}}},{"delta":{"node-LatLon":{"lon":-1087492521,"lat":416746033}}},{"delta":{"node-LatLon":{"lon":-1087454195,"lat":416743189}}},{"delta":{"node-LatLon":{"lon":-1087416702,"lat":416736770}}},{"delta":{"node-LatLon":{"lon":-1087381435,"lat":416725340}}},{"delta":{"node-LatLon":{"lon":-1087349578,"lat":416709238}}},{"delta":{"node-LatLon":{"lon":-1087320577,"lat":416690280}}},{"delta":{"node-LatLon":{"lon":-1087291648,"lat":416671260}}},{"delta":{"node-LatLon":{"lon":-1087262787,"lat":416652182}}},{"delta":{"node-LatLon":{"lon":-1087233802,"lat":416633016}}},{"delta":{"node-LatLon":{"lon":-1087204787,"lat":416613876}}},{"delta":{"node-LatLon":{"lon":-1087175815,"lat":416594699}}},{"delta":{"node-LatLon":{"lon":-1087146808,"lat":416575554}}},{"delta":{"node-LatLon":{"lon":-1087117854,"lat":416556364}}},{"delta":{"node-LatLon":{"lon":-1087088159,"lat":416538069}}},{"delta":{"node-LatLon":{"lon":-1087056409,"lat":416521833}}},{"delta":{"node-LatLon":{"lon":-1087022859,"lat":416507786}}},{"delta":{"node-LatLon":{"lon":-1086987709,"lat":416496142}}},{"delta":{"node-LatLon":{"lon":-1086951310,"lat":416486912}}},{"delta":{"node-LatLon":{"lon":-1086913467,"lat":416480171}}},{"delta":{"node-LatLon":{"lon":-1086874956,"lat":416476074}}},{"delta":{"node-LatLon":{"lon":-1086836114,"lat":416474482}}},{"delta":{"node-LatLon":{"lon":-1086797232,"lat":416473404}}},{"delta":{"node-LatLon":{"lon":-1086758350,"lat":416472330}}},{"delta":{"node-LatLon":{"lon":-1086719468,"lat":416471283}}},{"delta":{"node-LatLon":{"lon":-1086680585,"lat":416470225}}},{"delta":{"node-LatLon":{"lon":-1086641702,"lat":416469187}}},{"delta":{"node-LatLon":{"lon":-1086602819,"lat":416468148}}},{"delta":{"node-LatLon":{"lon":-1086563936,"lat":416467108}}},{"delta":{"node-LatLon":{"lon":-1086525511,"lat":416466317}}},{"delta":{"node-LatLon":{"lon":-1086487125,"lat":416467788}}},{"delta":{"node-LatLon":{"lon":-1086448944,"lat":416471177}}},{"delta":{"node-LatLon":{"lon":-1086410780,"lat":416474681}}},{"delta":{"node-LatLon":{"lon":-1086372613,"lat":416478166}}},{"delta":{"node-LatLon":{"lon":-1086334405,"lat":416481678}}},{"delta":{"node-LatLon":{"lon":-1086296197,"lat":416485199}}},{"delta":{"node-LatLon":{"lon":-1086257994,"lat":416488743}}},{"delta":{"node-LatLon":{"lon":-1086219779,"lat":416492224}}},{"delta":{"node-LatLon":{"lon":-1086181504,"lat":416495268}}},{"delta":{"node-LatLon":{"lon":-1086142990,"lat":416495887}}},{"delta":{"node-LatLon":{"lon":-1086104564,"lat":416493848}}},{"delta":{"node-LatLon":{"lon":-1086066501,"lat":416489365}}},{"delta":{"node-LatLon":{"lon":-1086028512,"lat":416484522}}},{"delta":{"node-LatLon":{"lon":-1085990518,"lat":416479699}}},{"delta":{"node-LatLon":{"lon":-1085952503,"lat":416474853}}},{"delta":{"node-LatLon":{"lon":-1085914496,"lat":416469967}}},{"delta":{"node-LatLon":{"lon":-1085876481,"lat":416465123}}},{"delta":{"node-LatLon":{"lon":-1085838471,"lat":416460258}}},{"delta":{"node-LatLon":{"lon":-1085800440,"lat":416455490}}},{"delta":{"node-LatLon":{"lon":-1085761374,"lat":416452277}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416786287,"long":-1087839399}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31448}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024218,"speed":24.14,"longitude":-105.0476056},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":57,"serialNumber":15486,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:10.051Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31551,"packetID":"00000000000004E0EC","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416455490,"long":-1085800440},"name":"eastbound_I80_142.17_158.55_SAT-A139FA35_RC_PDI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1085780958,"lat":416453533}}},{"delta":{"node-LatLon":{"lon":-1085722182,"lat":416449943}}},{"delta":{"node-LatLon":{"lon":-1085643804,"lat":416445230}}},{"delta":{"node-LatLon":{"lon":-1085565424,"lat":416440540}}},{"delta":{"node-LatLon":{"lon":-1085487043,"lat":416435869}}},{"delta":{"node-LatLon":{"lon":-1085408668,"lat":416431146}}},{"delta":{"node-LatLon":{"lon":-1085330293,"lat":416426421}}},{"delta":{"node-LatLon":{"lon":-1085251916,"lat":416421727}}},{"delta":{"node-LatLon":{"lon":-1085173902,"lat":416416997}}},{"delta":{"node-LatLon":{"lon":-1085096242,"lat":416412330}}},{"delta":{"node-LatLon":{"lon":-1085018585,"lat":416407636}}},{"delta":{"node-LatLon":{"lon":-1084940663,"lat":416402897}}},{"delta":{"node-LatLon":{"lon":-1084862741,"lat":416398163}}},{"delta":{"node-LatLon":{"lon":-1084784815,"lat":416393472}}},{"delta":{"node-LatLon":{"lon":-1084706889,"lat":416388787}}},{"delta":{"node-LatLon":{"lon":-1084628972,"lat":416384031}}},{"delta":{"node-LatLon":{"lon":-1084551057,"lat":416379343}}},{"delta":{"node-LatLon":{"lon":-1084473154,"lat":416374560}}},{"delta":{"node-LatLon":{"lon":-1084399541,"lat":416370085}}},{"delta":{"node-LatLon":{"lon":-1084330227,"lat":416365845}}},{"delta":{"node-LatLon":{"lon":-1084260912,"lat":416361623}}},{"delta":{"node-LatLon":{"lon":-1084184275,"lat":416356906}}},{"delta":{"node-LatLon":{"lon":-1084107548,"lat":416353136}}},{"delta":{"node-LatLon":{"lon":-1084030065,"lat":416348811}}},{"delta":{"node-LatLon":{"lon":-1083951951,"lat":416342842}}},{"delta":{"node-LatLon":{"lon":-1083873709,"lat":416337915}}},{"delta":{"node-LatLon":{"lon":-1083796972,"lat":416333186}}},{"delta":{"node-LatLon":{"lon":-1083720234,"lat":416328459}}},{"delta":{"node-LatLon":{"lon":-1083643497,"lat":416323733}}},{"delta":{"node-LatLon":{"lon":-1083566759,"lat":416319020}}},{"delta":{"node-LatLon":{"lon":-1083489868,"lat":416316067}}},{"delta":{"node-LatLon":{"lon":-1083413019,"lat":416313460}}},{"delta":{"node-LatLon":{"lon":-1083336178,"lat":416310750}}},{"delta":{"node-LatLon":{"lon":-1083259199,"lat":416308063}}},{"delta":{"node-LatLon":{"lon":-1083182086,"lat":416305377}}},{"delta":{"node-LatLon":{"lon":-1083104978,"lat":416302622}}},{"delta":{"node-LatLon":{"lon":-1083028061,"lat":416299895}}},{"delta":{"node-LatLon":{"lon":-1082951147,"lat":416297144}}},{"delta":{"node-LatLon":{"lon":-1082873751,"lat":416296812}}},{"delta":{"node-LatLon":{"lon":-1082797210,"lat":416308158}}},{"delta":{"node-LatLon":{"lon":-1082720795,"lat":416320017}}},{"delta":{"node-LatLon":{"lon":-1082645377,"lat":416331711}}},{"delta":{"node-LatLon":{"lon":-1082607675,"lat":416337584}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416455490,"long":-1085800440}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31551}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024218,"speed":24.14,"longitude":-105.0476056},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":56,"serialNumber":15485,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31448,"packetID":"00000000000008DC26","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416456408,"long":-1085755840},"name":"westbound_I80_130.84_142.17_SAT-84100418_RC_PDI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1085775366,"lat":416457555}}},{"delta":{"node-LatLon":{"lon":-1085794888,"lat":416458736}}},{"delta":{"node-LatLon":{"lon":-1085833690,"lat":416461832}}},{"delta":{"node-LatLon":{"lon":-1085872176,"lat":416466707}}},{"delta":{"node-LatLon":{"lon":-1085910651,"lat":416471634}}},{"delta":{"node-LatLon":{"lon":-1085949134,"lat":416476528}}},{"delta":{"node-LatLon":{"lon":-1085987613,"lat":416481440}}},{"delta":{"node-LatLon":{"lon":-1086025528,"lat":416486267}}},{"delta":{"node-LatLon":{"lon":-1086063443,"lat":416491103}}},{"delta":{"node-LatLon":{"lon":-1086101422,"lat":416495630}}},{"delta":{"node-LatLon":{"lon":-1086139754,"lat":416497851}}},{"delta":{"node-LatLon":{"lon":-1086178196,"lat":416497493}}},{"delta":{"node-LatLon":{"lon":-1086216694,"lat":416494658}}},{"delta":{"node-LatLon":{"lon":-1086255095,"lat":416491116}}},{"delta":{"node-LatLon":{"lon":-1086293500,"lat":416487604}}},{"delta":{"node-LatLon":{"lon":-1086331905,"lat":416484089}}},{"delta":{"node-LatLon":{"lon":-1086370307,"lat":416480557}}},{"delta":{"node-LatLon":{"lon":-1086408427,"lat":416477034}}},{"delta":{"node-LatLon":{"lon":-1086446550,"lat":416473535}}},{"delta":{"node-LatLon":{"lon":-1086484678,"lat":416470066}}},{"delta":{"node-LatLon":{"lon":-1086523010,"lat":416468441}}},{"delta":{"node-LatLon":{"lon":-1086561402,"lat":416469144}}},{"delta":{"node-LatLon":{"lon":-1086600122,"lat":416470197}}},{"delta":{"node-LatLon":{"lon":-1086638841,"lat":416471267}}},{"delta":{"node-LatLon":{"lon":-1086677561,"lat":416472320}}},{"delta":{"node-LatLon":{"lon":-1086716282,"lat":416473363}}},{"delta":{"node-LatLon":{"lon":-1086755004,"lat":416474397}}},{"delta":{"node-LatLon":{"lon":-1086793804,"lat":416475422}}},{"delta":{"node-LatLon":{"lon":-1086832605,"lat":416476448}}},{"delta":{"node-LatLon":{"lon":-1086871382,"lat":416477827}}},{"delta":{"node-LatLon":{"lon":-1086909854,"lat":416481660}}},{"delta":{"node-LatLon":{"lon":-1086947668,"lat":416488224}}},{"delta":{"node-LatLon":{"lon":-1086984094,"lat":416497241}}},{"delta":{"node-LatLon":{"lon":-1087019268,"lat":416508718}}},{"delta":{"node-LatLon":{"lon":-1087052913,"lat":416522538}}},{"delta":{"node-LatLon":{"lon":-1087084695,"lat":416538656}}},{"delta":{"node-LatLon":{"lon":-1087114440,"lat":416556828}}},{"delta":{"node-LatLon":{"lon":-1087143191,"lat":416575895}}},{"delta":{"node-LatLon":{"lon":-1087171993,"lat":416594919}}},{"delta":{"node-LatLon":{"lon":-1087200784,"lat":416613953}}},{"delta":{"node-LatLon":{"lon":-1087229590,"lat":416632975}}},{"delta":{"node-LatLon":{"lon":-1087258414,"lat":416651983}}},{"delta":{"node-LatLon":{"lon":-1087287411,"lat":416671131}}},{"delta":{"node-LatLon":{"lon":-1087316426,"lat":416690264}}},{"delta":{"node-LatLon":{"lon":-1087345506,"lat":416709342}}},{"delta":{"node-LatLon":{"lon":-1087377220,"lat":416725818}}},{"delta":{"node-LatLon":{"lon":-1087412334,"lat":416737800}}},{"delta":{"node-LatLon":{"lon":-1087450059,"lat":416744739}}},{"delta":{"node-LatLon":{"lon":-1087488730,"lat":416747863}}},{"delta":{"node-LatLon":{"lon":-1087527450,"lat":416750657}}},{"delta":{"node-LatLon":{"lon":-1087566170,"lat":416753452}}},{"delta":{"node-LatLon":{"lon":-1087604889,"lat":416756257}}},{"delta":{"node-LatLon":{"lon":-1087644394,"lat":416759090}}},{"delta":{"node-LatLon":{"lon":-1087683889,"lat":416761997}}},{"delta":{"node-LatLon":{"lon":-1087723223,"lat":416765852}}},{"delta":{"node-LatLon":{"lon":-1087761910,"lat":416772440}}},{"delta":{"node-LatLon":{"lon":-1087800160,"lat":416780373}}},{"delta":{"node-LatLon":{"lon":-1087836031,"lat":416787816}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416456408,"long":-1085755840}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31448}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6375,"latitude":41.1024175,"speed":24.14,"longitude":-105.0476338},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":54,"serialNumber":15483,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31205,"packetID":"000000000000053EE5","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415560658,"long":-1095891000},"name":"westbound_I80_66.17_83.01_SAT-B436F4C6_RC_GRAI80ERSD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1095909369,"lat":415556119}}},{"delta":{"node-LatLon":{"lon":-1095944107,"lat":415543430}}},{"delta":{"node-LatLon":{"lon":-1096006459,"lat":415509058}}},{"delta":{"node-LatLon":{"lon":-1096069455,"lat":415475411}}},{"delta":{"node-LatLon":{"lon":-1096142938,"lat":415458428}}},{"delta":{"node-LatLon":{"lon":-1096220131,"lat":415454351}}},{"delta":{"node-LatLon":{"lon":-1096297661,"lat":415450429}}},{"delta":{"node-LatLon":{"lon":-1096375509,"lat":415446500}}},{"delta":{"node-LatLon":{"lon":-1096453356,"lat":415442570}}},{"delta":{"node-LatLon":{"lon":-1096529793,"lat":415438718}}},{"delta":{"node-LatLon":{"lon":-1096606229,"lat":415434853}}},{"delta":{"node-LatLon":{"lon":-1096682818,"lat":415430949}}},{"delta":{"node-LatLon":{"lon":-1096759566,"lat":415427053}}},{"delta":{"node-LatLon":{"lon":-1096836470,"lat":415426618}}},{"delta":{"node-LatLon":{"lon":-1096912173,"lat":415426953}}},{"delta":{"node-LatLon":{"lon":-1096987876,"lat":415427245}}},{"delta":{"node-LatLon":{"lon":-1097064311,"lat":415427583}}},{"delta":{"node-LatLon":{"lon":-1097141481,"lat":415427878}}},{"delta":{"node-LatLon":{"lon":-1097218650,"lat":415428173}}},{"delta":{"node-LatLon":{"lon":-1097295910,"lat":415428433}}},{"delta":{"node-LatLon":{"lon":-1097373170,"lat":415428724}}},{"delta":{"node-LatLon":{"lon":-1097450254,"lat":415429029}}},{"delta":{"node-LatLon":{"lon":-1097527162,"lat":415429272}}},{"delta":{"node-LatLon":{"lon":-1097604070,"lat":415429555}}},{"delta":{"node-LatLon":{"lon":-1097681194,"lat":415429816}}},{"delta":{"node-LatLon":{"lon":-1097758318,"lat":415430084}}},{"delta":{"node-LatLon":{"lon":-1097835692,"lat":415430343}}},{"delta":{"node-LatLon":{"lon":-1097913317,"lat":415430599}}},{"delta":{"node-LatLon":{"lon":-1097990942,"lat":415430851}}},{"delta":{"node-LatLon":{"lon":-1098065366,"lat":415431126}}},{"delta":{"node-LatLon":{"lon":-1098139791,"lat":415431337}}},{"delta":{"node-LatLon":{"lon":-1098216745,"lat":415431535}}},{"delta":{"node-LatLon":{"lon":-1098296228,"lat":415431795}}},{"delta":{"node-LatLon":{"lon":-1098375702,"lat":415431381}}},{"delta":{"node-LatLon":{"lon":-1098453162,"lat":415429222}}},{"delta":{"node-LatLon":{"lon":-1098530622,"lat":415427098}}},{"delta":{"node-LatLon":{"lon":-1098607730,"lat":415424827}}},{"delta":{"node-LatLon":{"lon":-1098684499,"lat":415422667}}},{"delta":{"node-LatLon":{"lon":-1098761268,"lat":415420511}}},{"delta":{"node-LatLon":{"lon":-1098838221,"lat":415418364}}},{"delta":{"node-LatLon":{"lon":-1098914903,"lat":415422678}}},{"delta":{"node-LatLon":{"lon":-1098990040,"lat":415435886}}},{"delta":{"node-LatLon":{"lon":-1099066262,"lat":415444919}}},{"delta":{"node-LatLon":{"lon":-1099124034,"lat":415441676}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415560658,"long":-1095891000}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31205}},"msgCnt":16}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.1024175,"speed":24.02,"longitude":-105.0476341},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":53,"serialNumber":15482,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000C0531","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415436014,"long":-1099144153},"name":"eastbound_I80_66.17_83.01_SAT-C94BB8D8_RC_GRAI80ERSI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1099125634,"lat":415439288}}},{"delta":{"node-LatLon":{"lon":-1099068840,"lat":415442454}}},{"delta":{"node-LatLon":{"lon":-1098994159,"lat":415432068}}},{"delta":{"node-LatLon":{"lon":-1098919298,"lat":415418672}}},{"delta":{"node-LatLon":{"lon":-1098841848,"lat":415413814}}},{"delta":{"node-LatLon":{"lon":-1098764064,"lat":415415860}}},{"delta":{"node-LatLon":{"lon":-1098686825,"lat":415418104}}},{"delta":{"node-LatLon":{"lon":-1098609587,"lat":415420386}}},{"delta":{"node-LatLon":{"lon":-1098532251,"lat":415422458}}},{"delta":{"node-LatLon":{"lon":-1098454828,"lat":415424612}}},{"delta":{"node-LatLon":{"lon":-1098377407,"lat":415426813}}},{"delta":{"node-LatLon":{"lon":-1098298392,"lat":415427231}}},{"delta":{"node-LatLon":{"lon":-1098219367,"lat":415427018}}},{"delta":{"node-LatLon":{"lon":-1098142482,"lat":415426813}}},{"delta":{"node-LatLon":{"lon":-1098067736,"lat":415426561}}},{"delta":{"node-LatLon":{"lon":-1097992991,"lat":415426314}}},{"delta":{"node-LatLon":{"lon":-1097915737,"lat":415426054}}},{"delta":{"node-LatLon":{"lon":-1097838483,"lat":415425798}}},{"delta":{"node-LatLon":{"lon":-1097761247,"lat":415425574}}},{"delta":{"node-LatLon":{"lon":-1097684029,"lat":415425298}}},{"delta":{"node-LatLon":{"lon":-1097606811,"lat":415425006}}},{"delta":{"node-LatLon":{"lon":-1097529582,"lat":415424747}}},{"delta":{"node-LatLon":{"lon":-1097452354,"lat":415424479}}},{"delta":{"node-LatLon":{"lon":-1097375180,"lat":415424173}}},{"delta":{"node-LatLon":{"lon":-1097298061,"lat":415423892}}},{"delta":{"node-LatLon":{"lon":-1097220943,"lat":415423592}}},{"delta":{"node-LatLon":{"lon":-1097143863,"lat":415423302}}},{"delta":{"node-LatLon":{"lon":-1097066784,"lat":415423022}}},{"delta":{"node-LatLon":{"lon":-1096989920,"lat":415422730}}},{"delta":{"node-LatLon":{"lon":-1096913273,"lat":415422418}}},{"delta":{"node-LatLon":{"lon":-1096836626,"lat":415422122}}},{"delta":{"node-LatLon":{"lon":-1096759032,"lat":415422540}}},{"delta":{"node-LatLon":{"lon":-1096681595,"lat":415426454}}},{"delta":{"node-LatLon":{"lon":-1096604890,"lat":415430398}}},{"delta":{"node-LatLon":{"lon":-1096528903,"lat":415434233}}},{"delta":{"node-LatLon":{"lon":-1096452915,"lat":415438069}}},{"delta":{"node-LatLon":{"lon":-1096375022,"lat":415442012}}},{"delta":{"node-LatLon":{"lon":-1096297130,"lat":415445968}}},{"delta":{"node-LatLon":{"lon":-1096219868,"lat":415449865}}},{"delta":{"node-LatLon":{"lon":-1096143253,"lat":415453868}}},{"delta":{"node-LatLon":{"lon":-1096070093,"lat":415470372}}},{"delta":{"node-LatLon":{"lon":-1096006307,"lat":415503454}}},{"delta":{"node-LatLon":{"lon":-1095944191,"lat":415538433}}},{"delta":{"node-LatLon":{"lon":-1095892161,"lat":415557599}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415436014,"long":-1099144153}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":22}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.1024175,"speed":24.02,"longitude":-105.0476341},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":52,"serialNumber":15481,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31214,"packetID":"0000000000000B2F91","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413575987,"long":-1103362302},"name":"westbound_I80_30.4_39.9_SAT-81C57B76_RC_LYMI80WEVAND","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1103379413,"lat":413570507}}},{"delta":{"node-LatLon":{"lon":-1103396581,"lat":413565130}}},{"delta":{"node-LatLon":{"lon":-1103431966,"lat":413556590}}},{"delta":{"node-LatLon":{"lon":-1103468559,"lat":413551740}}},{"delta":{"node-LatLon":{"lon":-1103505682,"lat":413550496}}},{"delta":{"node-LatLon":{"lon":-1103542862,"lat":413550244}}},{"delta":{"node-LatLon":{"lon":-1103582724,"lat":413550041}}},{"delta":{"node-LatLon":{"lon":-1103622586,"lat":413549804}}},{"delta":{"node-LatLon":{"lon":-1103662427,"lat":413549039}}},{"delta":{"node-LatLon":{"lon":-1103701626,"lat":413543839}}},{"delta":{"node-LatLon":{"lon":-1103738811,"lat":413533136}}},{"delta":{"node-LatLon":{"lon":-1103772015,"lat":413518736}}},{"delta":{"node-LatLon":{"lon":-1103804719,"lat":413503676}}},{"delta":{"node-LatLon":{"lon":-1103837423,"lat":413488615}}},{"delta":{"node-LatLon":{"lon":-1103870139,"lat":413473571}}},{"delta":{"node-LatLon":{"lon":-1103902852,"lat":413458525}}},{"delta":{"node-LatLon":{"lon":-1103935453,"lat":413443497}}},{"delta":{"node-LatLon":{"lon":-1103968058,"lat":413428474}}},{"delta":{"node-LatLon":{"lon":-1104000677,"lat":413413470}}},{"delta":{"node-LatLon":{"lon":-1104033300,"lat":413398472}}},{"delta":{"node-LatLon":{"lon":-1104066139,"lat":413383747}}},{"delta":{"node-LatLon":{"lon":-1104099921,"lat":413369977}}},{"delta":{"node-LatLon":{"lon":-1104134521,"lat":413357416}}},{"delta":{"node-LatLon":{"lon":-1104169857,"lat":413346086}}},{"delta":{"node-LatLon":{"lon":-1104205824,"lat":413335944}}},{"delta":{"node-LatLon":{"lon":-1104242388,"lat":413327102}}},{"delta":{"node-LatLon":{"lon":-1104279634,"lat":413319406}}},{"delta":{"node-LatLon":{"lon":-1104317320,"lat":413313051}}},{"delta":{"node-LatLon":{"lon":-1104355343,"lat":413307943}}},{"delta":{"node-LatLon":{"lon":-1104393408,"lat":413303019}}},{"delta":{"node-LatLon":{"lon":-1104431463,"lat":413298050}}},{"delta":{"node-LatLon":{"lon":-1104469251,"lat":413293160}}},{"delta":{"node-LatLon":{"lon":-1104507032,"lat":413288242}}},{"delta":{"node-LatLon":{"lon":-1104544821,"lat":413283359}}},{"delta":{"node-LatLon":{"lon":-1104582614,"lat":413278496}}},{"delta":{"node-LatLon":{"lon":-1104620358,"lat":413273425}}},{"delta":{"node-LatLon":{"lon":-1104657693,"lat":413266409}}},{"delta":{"node-LatLon":{"lon":-1104694040,"lat":413256888}}},{"delta":{"node-LatLon":{"lon":-1104729409,"lat":413245439}}},{"delta":{"node-LatLon":{"lon":-1104764689,"lat":413233834}}},{"delta":{"node-LatLon":{"lon":-1104799973,"lat":413222237}}},{"delta":{"node-LatLon":{"lon":-1104835095,"lat":413210680}}},{"delta":{"node-LatLon":{"lon":-1104870213,"lat":413199116}}},{"delta":{"node-LatLon":{"lon":-1104905341,"lat":413187570}}},{"delta":{"node-LatLon":{"lon":-1104940464,"lat":413176017}}},{"delta":{"node-LatLon":{"lon":-1104975588,"lat":413164466}}},{"delta":{"node-LatLon":{"lon":-1105010940,"lat":413152841}}},{"delta":{"node-LatLon":{"lon":-1105046305,"lat":413141239}}},{"delta":{"node-LatLon":{"lon":-1105081636,"lat":413129581}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000110000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413575987,"long":-1103362302}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31214}},"msgCnt":16}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.1024133,"speed":24.02,"longitude":-105.0476621},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":51,"serialNumber":15480,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"00000000000008948B","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413121024,"long":-1105099337},"name":"eastbound_I80_30.4_39.9_SAT-2B017F7E_RC_LYMI80WEVANI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1105081780,"lat":413126737}}},{"delta":{"node-LatLon":{"lon":-1105046721,"lat":413138259}}},{"delta":{"node-LatLon":{"lon":-1105011682,"lat":413149818}}},{"delta":{"node-LatLon":{"lon":-1104976636,"lat":413161366}}},{"delta":{"node-LatLon":{"lon":-1104941339,"lat":413172988}}},{"delta":{"node-LatLon":{"lon":-1104906045,"lat":413184616}}},{"delta":{"node-LatLon":{"lon":-1104870749,"lat":413196242}}},{"delta":{"node-LatLon":{"lon":-1104835431,"lat":413207831}}},{"delta":{"node-LatLon":{"lon":-1104800118,"lat":413219429}}},{"delta":{"node-LatLon":{"lon":-1104764982,"lat":413230978}}},{"delta":{"node-LatLon":{"lon":-1104729863,"lat":413242558}}},{"delta":{"node-LatLon":{"lon":-1104694662,"lat":413253995}}},{"delta":{"node-LatLon":{"lon":-1104658541,"lat":413263634}}},{"delta":{"node-LatLon":{"lon":-1104621387,"lat":413270688}}},{"delta":{"node-LatLon":{"lon":-1104583599,"lat":413275784}}},{"delta":{"node-LatLon":{"lon":-1104545768,"lat":413280701}}},{"delta":{"node-LatLon":{"lon":-1104507932,"lat":413285595}}},{"delta":{"node-LatLon":{"lon":-1104470107,"lat":413290537}}},{"delta":{"node-LatLon":{"lon":-1104432261,"lat":413295393}}},{"delta":{"node-LatLon":{"lon":-1104394348,"lat":413300372}}},{"delta":{"node-LatLon":{"lon":-1104356408,"lat":413305233}}},{"delta":{"node-LatLon":{"lon":-1104318509,"lat":413310273}}},{"delta":{"node-LatLon":{"lon":-1104280839,"lat":413316200}}},{"delta":{"node-LatLon":{"lon":-1104243586,"lat":413323475}}},{"delta":{"node-LatLon":{"lon":-1104206850,"lat":413331998}}},{"delta":{"node-LatLon":{"lon":-1104170685,"lat":413341807}}},{"delta":{"node-LatLon":{"lon":-1104135154,"lat":413352860}}},{"delta":{"node-LatLon":{"lon":-1104100355,"lat":413365166}}},{"delta":{"node-LatLon":{"lon":-1104066322,"lat":413378639}}},{"delta":{"node-LatLon":{"lon":-1104032685,"lat":413393491}}},{"delta":{"node-LatLon":{"lon":-1103999387,"lat":413408776}}},{"delta":{"node-LatLon":{"lon":-1103966118,"lat":413424098}}},{"delta":{"node-LatLon":{"lon":-1103932864,"lat":413439440}}},{"delta":{"node-LatLon":{"lon":-1103899565,"lat":413454727}}},{"delta":{"node-LatLon":{"lon":-1103867253,"lat":413469609}}},{"delta":{"node-LatLon":{"lon":-1103835035,"lat":413484430}}},{"delta":{"node-LatLon":{"lon":-1103802824,"lat":413499260}}},{"delta":{"node-LatLon":{"lon":-1103770586,"lat":413514056}}},{"delta":{"node-LatLon":{"lon":-1103738028,"lat":413528436}}},{"delta":{"node-LatLon":{"lon":-1103701332,"lat":413539215}}},{"delta":{"node-LatLon":{"lon":-1103662594,"lat":413544545}}},{"delta":{"node-LatLon":{"lon":-1103623171,"lat":413545277}}},{"delta":{"node-LatLon":{"lon":-1103583727,"lat":413545520}}},{"delta":{"node-LatLon":{"lon":-1103544283,"lat":413545768}}},{"delta":{"node-LatLon":{"lon":-1103506786,"lat":413545969}}},{"delta":{"node-LatLon":{"lon":-1103469334,"lat":413547162}}},{"delta":{"node-LatLon":{"lon":-1103432403,"lat":413551942}}},{"delta":{"node-LatLon":{"lon":-1103396637,"lat":413560362}}},{"delta":{"node-LatLon":{"lon":-1103379293,"lat":413565730}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413121024,"long":-1105099337}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":22}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023962,"speed":23.76,"longitude":-105.047774},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":47,"serialNumber":15476,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.453Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000B2362","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414323150,"long":-1101107194},"name":"eastbound_I80_53.31_66.17_SAT-19D61E53_RC_GRAI80WLYMI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1101089557,"lat":414329241}}},{"delta":{"node-LatLon":{"lon":-1101036650,"lat":414347521}}},{"delta":{"node-LatLon":{"lon":-1100968154,"lat":414374868}}},{"delta":{"node-LatLon":{"lon":-1100906030,"lat":414408931}}},{"delta":{"node-LatLon":{"lon":-1100844476,"lat":414443598}}},{"delta":{"node-LatLon":{"lon":-1100783084,"lat":414478183}}},{"delta":{"node-LatLon":{"lon":-1100721845,"lat":414512678}}},{"delta":{"node-LatLon":{"lon":-1100660589,"lat":414547159}}},{"delta":{"node-LatLon":{"lon":-1100598696,"lat":414582011}}},{"delta":{"node-LatLon":{"lon":-1100536824,"lat":414616882}}},{"delta":{"node-LatLon":{"lon":-1100472780,"lat":414652911}}},{"delta":{"node-LatLon":{"lon":-1100407893,"lat":414691351}}},{"delta":{"node-LatLon":{"lon":-1100352218,"lat":414737180}}},{"delta":{"node-LatLon":{"lon":-1100303788,"lat":414782434}}},{"delta":{"node-LatLon":{"lon":-1100255356,"lat":414827689}}},{"delta":{"node-LatLon":{"lon":-1100207264,"lat":414872624}}},{"delta":{"node-LatLon":{"lon":-1100156738,"lat":414915457}}},{"delta":{"node-LatLon":{"lon":-1100105308,"lat":414957699}}},{"delta":{"node-LatLon":{"lon":-1100048563,"lat":414996592}}},{"delta":{"node-LatLon":{"lon":-1099984833,"lat":415028931}}},{"delta":{"node-LatLon":{"lon":-1099920979,"lat":415061041}}},{"delta":{"node-LatLon":{"lon":-1099857029,"lat":415092941}}},{"delta":{"node-LatLon":{"lon":-1099792739,"lat":415124448}}},{"delta":{"node-LatLon":{"lon":-1099728759,"lat":415156288}}},{"delta":{"node-LatLon":{"lon":-1099664735,"lat":415188081}}},{"delta":{"node-LatLon":{"lon":-1099600327,"lat":415220093}}},{"delta":{"node-LatLon":{"lon":-1099535522,"lat":415252310}}},{"delta":{"node-LatLon":{"lon":-1099470701,"lat":415284512}}},{"delta":{"node-LatLon":{"lon":-1099406151,"lat":415316553}}},{"delta":{"node-LatLon":{"lon":-1099341572,"lat":415348565}}},{"delta":{"node-LatLon":{"lon":-1099277375,"lat":415380463}}},{"delta":{"node-LatLon":{"lon":-1099213464,"lat":415412136}}},{"delta":{"node-LatLon":{"lon":-1099144153,"lat":415436014}}},{"delta":{"node-LatLon":{"lon":-1099106846,"lat":415441537}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111000000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414323150,"long":-1101107194}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.1024133,"speed":24.02,"longitude":-105.0476621},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":50,"serialNumber":15479,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31214,"packetID":"0000000000000A659A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414344751,"long":-1101051424},"name":"westbound_I80_39.9_53.31_SAT-08844513_RC_LYMI80EGRAD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1101068786,"lat":414338729}}},{"delta":{"node-LatLon":{"lon":-1101103554,"lat":414326761}}},{"delta":{"node-LatLon":{"lon":-1101173821,"lat":414302516}}},{"delta":{"node-LatLon":{"lon":-1101244744,"lat":414277845}}},{"delta":{"node-LatLon":{"lon":-1101310950,"lat":414246773}}},{"delta":{"node-LatLon":{"lon":-1101362064,"lat":414212123}}},{"delta":{"node-LatLon":{"lon":-1101407558,"lat":414173212}}},{"delta":{"node-LatLon":{"lon":-1101456142,"lat":414132500}}},{"delta":{"node-LatLon":{"lon":-1101515051,"lat":414095801}}},{"delta":{"node-LatLon":{"lon":-1101578308,"lat":414063326}}},{"delta":{"node-LatLon":{"lon":-1101641229,"lat":414030925}}},{"delta":{"node-LatLon":{"lon":-1101704290,"lat":413998477}}},{"delta":{"node-LatLon":{"lon":-1101767097,"lat":413966110}}},{"delta":{"node-LatLon":{"lon":-1101831402,"lat":413935792}}},{"delta":{"node-LatLon":{"lon":-1101901550,"lat":413914120}}},{"delta":{"node-LatLon":{"lon":-1101976786,"lat":413898894}}},{"delta":{"node-LatLon":{"lon":-1102052080,"lat":413883827}}},{"delta":{"node-LatLon":{"lon":-1102126907,"lat":413868839}}},{"delta":{"node-LatLon":{"lon":-1102200439,"lat":413851903}}},{"delta":{"node-LatLon":{"lon":-1102269103,"lat":413825929}}},{"delta":{"node-LatLon":{"lon":-1102332567,"lat":413793094}}},{"delta":{"node-LatLon":{"lon":-1102398732,"lat":413763591}}},{"delta":{"node-LatLon":{"lon":-1102470298,"lat":413743958}}},{"delta":{"node-LatLon":{"lon":-1102543982,"lat":413731406}}},{"delta":{"node-LatLon":{"lon":-1102617848,"lat":413719488}}},{"delta":{"node-LatLon":{"lon":-1102692470,"lat":413710650}}},{"delta":{"node-LatLon":{"lon":-1102767178,"lat":413702215}}},{"delta":{"node-LatLon":{"lon":-1102843114,"lat":413693602}}},{"delta":{"node-LatLon":{"lon":-1102920289,"lat":413684874}}},{"delta":{"node-LatLon":{"lon":-1102996200,"lat":413671478}}},{"delta":{"node-LatLon":{"lon":-1103069136,"lat":413655627}}},{"delta":{"node-LatLon":{"lon":-1103142026,"lat":413639808}}},{"delta":{"node-LatLon":{"lon":-1103216030,"lat":413622306}}},{"delta":{"node-LatLon":{"lon":-1103289209,"lat":413599223}}},{"delta":{"node-LatLon":{"lon":-1103362302,"lat":413575987}}},{"delta":{"node-LatLon":{"lon":-1103379413,"lat":413570507}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001110000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414344751,"long":-1101051424}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31214}},"msgCnt":23}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.65,"latitude":41.102409,"speed":24.02,"longitude":-105.0476902},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":49,"serialNumber":15478,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.553Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"000000000000019B21","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413560362,"long":-1103396637},"name":"eastbound_I80_39.9_53.31_SAT-A835ACAE_RC_LYMI80EGRAI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1103379293,"lat":413565730}}},{"delta":{"node-LatLon":{"lon":-1103362018,"lat":413571225}}},{"delta":{"node-LatLon":{"lon":-1103289477,"lat":413594336}}},{"delta":{"node-LatLon":{"lon":-1103216886,"lat":413617361}}},{"delta":{"node-LatLon":{"lon":-1103144075,"lat":413634764}}},{"delta":{"node-LatLon":{"lon":-1103072890,"lat":413650240}}},{"delta":{"node-LatLon":{"lon":-1103001562,"lat":413665711}}},{"delta":{"node-LatLon":{"lon":-1102924478,"lat":413679917}}},{"delta":{"node-LatLon":{"lon":-1102845931,"lat":413688783}}},{"delta":{"node-LatLon":{"lon":-1102769203,"lat":413697491}}},{"delta":{"node-LatLon":{"lon":-1102694282,"lat":413705973}}},{"delta":{"node-LatLon":{"lon":-1102619427,"lat":413714771}}},{"delta":{"node-LatLon":{"lon":-1102543987,"lat":413726889}}},{"delta":{"node-LatLon":{"lon":-1102468757,"lat":413739737}}},{"delta":{"node-LatLon":{"lon":-1102396564,"lat":413759508}}},{"delta":{"node-LatLon":{"lon":-1102330529,"lat":413788757}}},{"delta":{"node-LatLon":{"lon":-1102267374,"lat":413821547}}},{"delta":{"node-LatLon":{"lon":-1102198471,"lat":413847770}}},{"delta":{"node-LatLon":{"lon":-1102124566,"lat":413864728}}},{"delta":{"node-LatLon":{"lon":-1102050308,"lat":413879597}}},{"delta":{"node-LatLon":{"lon":-1101976512,"lat":413894383}}},{"delta":{"node-LatLon":{"lon":-1101902756,"lat":413909284}}},{"delta":{"node-LatLon":{"lon":-1101831568,"lat":413930764}}},{"delta":{"node-LatLon":{"lon":-1101766297,"lat":413961147}}},{"delta":{"node-LatLon":{"lon":-1101702710,"lat":413993844}}},{"delta":{"node-LatLon":{"lon":-1101638962,"lat":414026618}}},{"delta":{"node-LatLon":{"lon":-1101574959,"lat":414059103}}},{"delta":{"node-LatLon":{"lon":-1101503795,"lat":414079486}}},{"delta":{"node-LatLon":{"lon":-1101430050,"lat":414094635}}},{"delta":{"node-LatLon":{"lon":-1101364010,"lat":414123142}}},{"delta":{"node-LatLon":{"lon":-1101315879,"lat":414167652}}},{"delta":{"node-LatLon":{"lon":-1101285137,"lat":414220512}}},{"delta":{"node-LatLon":{"lon":-1101240865,"lat":414267227}}},{"delta":{"node-LatLon":{"lon":-1101177309,"lat":414298942}}},{"delta":{"node-LatLon":{"lon":-1101107194,"lat":414323150}}},{"delta":{"node-LatLon":{"lon":-1101071949,"lat":414335378}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111000000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413560362,"long":-1103396637}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1024004,"speed":23.76,"longitude":-105.0477462},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":48,"serialNumber":15477,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.453Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31329,"packetID":"0000000000000D30E2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415444795,"long":-1099085600},"name":"westbound_I80_53.31_66.17_SAT-4E185B11_RC_GRAI80WLYMD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1099104884,"lat":415443688}}},{"delta":{"node-LatLon":{"lon":-1099142907,"lat":415438499}}},{"delta":{"node-LatLon":{"lon":-1099213633,"lat":415416960}}},{"delta":{"node-LatLon":{"lon":-1099277798,"lat":415385610}}},{"delta":{"node-LatLon":{"lon":-1099341920,"lat":415353771}}},{"delta":{"node-LatLon":{"lon":-1099406318,"lat":415321821}}},{"delta":{"node-LatLon":{"lon":-1099470693,"lat":415289849}}},{"delta":{"node-LatLon":{"lon":-1099535924,"lat":415257482}}},{"delta":{"node-LatLon":{"lon":-1099601115,"lat":415225072}}},{"delta":{"node-LatLon":{"lon":-1099665873,"lat":415192909}}},{"delta":{"node-LatLon":{"lon":-1099730154,"lat":415160943}}},{"delta":{"node-LatLon":{"lon":-1099794423,"lat":415128966}}},{"delta":{"node-LatLon":{"lon":-1099858611,"lat":415097082}}},{"delta":{"node-LatLon":{"lon":-1099922767,"lat":415065163}}},{"delta":{"node-LatLon":{"lon":-1099986894,"lat":415033282}}},{"delta":{"node-LatLon":{"lon":-1100050552,"lat":415000958}}},{"delta":{"node-LatLon":{"lon":-1100107537,"lat":414962342}}},{"delta":{"node-LatLon":{"lon":-1100159317,"lat":414919942}}},{"delta":{"node-LatLon":{"lon":-1100210275,"lat":414877000}}},{"delta":{"node-LatLon":{"lon":-1100258455,"lat":414831964}}},{"delta":{"node-LatLon":{"lon":-1100306816,"lat":414786740}}},{"delta":{"node-LatLon":{"lon":-1100355125,"lat":414741487}}},{"delta":{"node-LatLon":{"lon":-1100406269,"lat":414698457}}},{"delta":{"node-LatLon":{"lon":-1100466077,"lat":414662270}}},{"delta":{"node-LatLon":{"lon":-1100529550,"lat":414626554}}},{"delta":{"node-LatLon":{"lon":-1100594995,"lat":414589736}}},{"delta":{"node-LatLon":{"lon":-1100660445,"lat":414552926}}},{"delta":{"node-LatLon":{"lon":-1100720966,"lat":414518811}}},{"delta":{"node-LatLon":{"lon":-1100781507,"lat":414484719}}},{"delta":{"node-LatLon":{"lon":-1100843008,"lat":414450048}}},{"delta":{"node-LatLon":{"lon":-1100905513,"lat":414414842}}},{"delta":{"node-LatLon":{"lon":-1100968090,"lat":414379712}}},{"delta":{"node-LatLon":{"lon":-1101034065,"lat":414350776}}},{"delta":{"node-LatLon":{"lon":-1101086165,"lat":414332737}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001110000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415444795,"long":-1099085600}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31329}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023962,"speed":23.76,"longitude":-105.047774},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":46,"serialNumber":15475,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000AA646","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413135480,"long":-1105064011},"name":"westbound_I80_18.29_30.4_SAT-4E8C2D1C_RC_EVANI80ELYM2D","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1105081636,"lat":413129581}}},{"delta":{"node-LatLon":{"lon":-1105152429,"lat":413106493}}},{"delta":{"node-LatLon":{"lon":-1105222681,"lat":413083154}}},{"delta":{"node-LatLon":{"lon":-1105293041,"lat":413060007}}},{"delta":{"node-LatLon":{"lon":-1105365675,"lat":413036053}}},{"delta":{"node-LatLon":{"lon":-1105440576,"lat":413011281}}},{"delta":{"node-LatLon":{"lon":-1105515498,"lat":412986550}}},{"delta":{"node-LatLon":{"lon":-1105587007,"lat":412974643}}},{"delta":{"node-LatLon":{"lon":-1105660608,"lat":412975574}}},{"delta":{"node-LatLon":{"lon":-1105734210,"lat":412976799}}},{"delta":{"node-LatLon":{"lon":-1105807811,"lat":412978023}}},{"delta":{"node-LatLon":{"lon":-1105881411,"lat":412979276}}},{"delta":{"node-LatLon":{"lon":-1105958106,"lat":412980598}}},{"delta":{"node-LatLon":{"lon":-1106034803,"lat":412981835}}},{"delta":{"node-LatLon":{"lon":-1106111006,"lat":412983091}}},{"delta":{"node-LatLon":{"lon":-1106186716,"lat":412984304}}},{"delta":{"node-LatLon":{"lon":-1106262425,"lat":412985553}}},{"delta":{"node-LatLon":{"lon":-1106340719,"lat":412986812}}},{"delta":{"node-LatLon":{"lon":-1106419013,"lat":412988052}}},{"delta":{"node-LatLon":{"lon":-1106496051,"lat":412989281}}},{"delta":{"node-LatLon":{"lon":-1106571818,"lat":412990824}}},{"delta":{"node-LatLon":{"lon":-1106647599,"lat":412992029}}},{"delta":{"node-LatLon":{"lon":-1106726085,"lat":412993268}}},{"delta":{"node-LatLon":{"lon":-1106803345,"lat":412986953}}},{"delta":{"node-LatLon":{"lon":-1106867780,"lat":412955347}}},{"delta":{"node-LatLon":{"lon":-1106940824,"lat":412955290}}},{"delta":{"node-LatLon":{"lon":-1107004030,"lat":412986369}}},{"delta":{"node-LatLon":{"lon":-1107075211,"lat":413008691}}},{"delta":{"node-LatLon":{"lon":-1107146451,"lat":413030911}}},{"delta":{"node-LatLon":{"lon":-1107217304,"lat":413052985}}},{"delta":{"node-LatLon":{"lon":-1107287759,"lat":413074934}}},{"delta":{"node-LatLon":{"lon":-1107323024,"lat":413085837}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413135480,"long":-1105064011}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":12}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023962,"speed":23.76,"longitude":-105.047774},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":45,"serialNumber":15474,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"000000000000103B16","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413088220,"long":-1107346769},"name":"eastbound_I80_18.29_30.4_SAT-1BB0E1D9_RC_EVANI80ELYM2I","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1107327853,"lat":413085207}}},{"delta":{"node-LatLon":{"lon":-1107291892,"lat":413074355}}},{"delta":{"node-LatLon":{"lon":-1107220291,"lat":413052030}}},{"delta":{"node-LatLon":{"lon":-1107148980,"lat":413029795}}},{"delta":{"node-LatLon":{"lon":-1107078119,"lat":413007369}}},{"delta":{"node-LatLon":{"lon":-1107007132,"lat":412985172}}},{"delta":{"node-LatLon":{"lon":-1106941741,"lat":412953720}}},{"delta":{"node-LatLon":{"lon":-1106866866,"lat":412953036}}},{"delta":{"node-LatLon":{"lon":-1106802203,"lat":412985015}}},{"delta":{"node-LatLon":{"lon":-1106726168,"lat":412991195}}},{"delta":{"node-LatLon":{"lon":-1106648917,"lat":412989976}}},{"delta":{"node-LatLon":{"lon":-1106573197,"lat":412988796}}},{"delta":{"node-LatLon":{"lon":-1106497477,"lat":412987600}}},{"delta":{"node-LatLon":{"lon":-1106420644,"lat":412986371}}},{"delta":{"node-LatLon":{"lon":-1106342697,"lat":412985100}}},{"delta":{"node-LatLon":{"lon":-1106264749,"lat":412983842}}},{"delta":{"node-LatLon":{"lon":-1106189077,"lat":412982627}}},{"delta":{"node-LatLon":{"lon":-1106113405,"lat":412981388}}},{"delta":{"node-LatLon":{"lon":-1106037230,"lat":412980142}}},{"delta":{"node-LatLon":{"lon":-1105960566,"lat":412978554}}},{"delta":{"node-LatLon":{"lon":-1105883887,"lat":412977263}}},{"delta":{"node-LatLon":{"lon":-1105807259,"lat":412976192}}},{"delta":{"node-LatLon":{"lon":-1105730649,"lat":412974694}}},{"delta":{"node-LatLon":{"lon":-1105656816,"lat":412973443}}},{"delta":{"node-LatLon":{"lon":-1105585775,"lat":412972496}}},{"delta":{"node-LatLon":{"lon":-1105516502,"lat":412983227}}},{"delta":{"node-LatLon":{"lon":-1105441920,"lat":413008048}}},{"delta":{"node-LatLon":{"lon":-1105367237,"lat":413032710}}},{"delta":{"node-LatLon":{"lon":-1105294291,"lat":413056763}}},{"delta":{"node-LatLon":{"lon":-1105223123,"lat":413080276}}},{"delta":{"node-LatLon":{"lon":-1105151956,"lat":413103795}}},{"delta":{"node-LatLon":{"lon":-1105081780,"lat":413126737}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413088220,"long":-1107346769}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023962,"speed":23.76,"longitude":-105.047774},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":44,"serialNumber":15473,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.998Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"0000000000000E3CF2","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":413074934,"long":-1107287759},"name":"westbound_I80_6.26_18.29_SAT-6167B0AE_RC_EVANI80ELYMD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1107305366,"lat":413080434}}},{"delta":{"node-LatLon":{"lon":-1107360431,"lat":413090250}}},{"delta":{"node-LatLon":{"lon":-1107435889,"lat":413072542}}},{"delta":{"node-LatLon":{"lon":-1107510137,"lat":413051412}}},{"delta":{"node-LatLon":{"lon":-1107583237,"lat":413030611}}},{"delta":{"node-LatLon":{"lon":-1107651303,"lat":413004057}}},{"delta":{"node-LatLon":{"lon":-1107715511,"lat":412972132}}},{"delta":{"node-LatLon":{"lon":-1107779433,"lat":412939683}}},{"delta":{"node-LatLon":{"lon":-1107834761,"lat":412899298}}},{"delta":{"node-LatLon":{"lon":-1107888585,"lat":412858118}}},{"delta":{"node-LatLon":{"lon":-1107942218,"lat":412817220}}},{"delta":{"node-LatLon":{"lon":-1107995791,"lat":412776279}}},{"delta":{"node-LatLon":{"lon":-1108052203,"lat":412738880}}},{"delta":{"node-LatLon":{"lon":-1108125567,"lat":412730945}}},{"delta":{"node-LatLon":{"lon":-1108200890,"lat":412730979}}},{"delta":{"node-LatLon":{"lon":-1108269016,"lat":412705671}}},{"delta":{"node-LatLon":{"lon":-1108336945,"lat":412680037}}},{"delta":{"node-LatLon":{"lon":-1108412418,"lat":412681664}}},{"delta":{"node-LatLon":{"lon":-1108481367,"lat":412706514}}},{"delta":{"node-LatLon":{"lon":-1108552780,"lat":412726456}}},{"delta":{"node-LatLon":{"lon":-1108625458,"lat":412710792}}},{"delta":{"node-LatLon":{"lon":-1108688492,"lat":412677244}}},{"delta":{"node-LatLon":{"lon":-1108755794,"lat":412649329}}},{"delta":{"node-LatLon":{"lon":-1108828743,"lat":412631226}}},{"delta":{"node-LatLon":{"lon":-1108904794,"lat":412623516}}},{"delta":{"node-LatLon":{"lon":-1108981375,"lat":412626474}}},{"delta":{"node-LatLon":{"lon":-1109056338,"lat":412638897}}},{"delta":{"node-LatLon":{"lon":-1109130675,"lat":412652858}}},{"delta":{"node-LatLon":{"lon":-1109205469,"lat":412665291}}},{"delta":{"node-LatLon":{"lon":-1109280079,"lat":412673471}}},{"delta":{"node-LatLon":{"lon":-1109353719,"lat":412680146}}},{"delta":{"node-LatLon":{"lon":-1109390798,"lat":412680579}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000001111100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":413074934,"long":-1107287759}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":12}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023921,"speed":23.64,"longitude":-105.0478016},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":43,"serialNumber":15472,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31337,"packetID":"000000000000085B12","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412678295,"long":-1109403156},"name":"eastbound_I80_6.26_18.29_SAT-5481DCC7_RC_EVANI80ELYMI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1109383397,"lat":412678737}}},{"delta":{"node-LatLon":{"lon":-1109363631,"lat":412678500}}},{"delta":{"node-LatLon":{"lon":-1109285083,"lat":412671839}}},{"delta":{"node-LatLon":{"lon":-1109208218,"lat":412662718}}},{"delta":{"node-LatLon":{"lon":-1109133790,"lat":412649197}}},{"delta":{"node-LatLon":{"lon":-1109059500,"lat":412635242}}},{"delta":{"node-LatLon":{"lon":-1108983731,"lat":412622770}}},{"delta":{"node-LatLon":{"lon":-1108906400,"lat":412619640}}},{"delta":{"node-LatLon":{"lon":-1108829878,"lat":412627699}}},{"delta":{"node-LatLon":{"lon":-1108756816,"lat":412646172}}},{"delta":{"node-LatLon":{"lon":-1108689511,"lat":412674500}}},{"delta":{"node-LatLon":{"lon":-1108627647,"lat":412707502}}},{"delta":{"node-LatLon":{"lon":-1108557015,"lat":412724866}}},{"delta":{"node-LatLon":{"lon":-1108485391,"lat":412706101}}},{"delta":{"node-LatLon":{"lon":-1108415692,"lat":412680645}}},{"delta":{"node-LatLon":{"lon":-1108339283,"lat":412677822}}},{"delta":{"node-LatLon":{"lon":-1108270801,"lat":412702792}}},{"delta":{"node-LatLon":{"lon":-1108202724,"lat":412728468}}},{"delta":{"node-LatLon":{"lon":-1108127111,"lat":412729008}}},{"delta":{"node-LatLon":{"lon":-1108052987,"lat":412735898}}},{"delta":{"node-LatLon":{"lon":-1107995597,"lat":412772983}}},{"delta":{"node-LatLon":{"lon":-1107941620,"lat":412814258}}},{"delta":{"node-LatLon":{"lon":-1107887900,"lat":412855724}}},{"delta":{"node-LatLon":{"lon":-1107834045,"lat":412896917}}},{"delta":{"node-LatLon":{"lon":-1107779426,"lat":412937317}}},{"delta":{"node-LatLon":{"lon":-1107716124,"lat":412969726}}},{"delta":{"node-LatLon":{"lon":-1107651938,"lat":413001633}}},{"delta":{"node-LatLon":{"lon":-1107584096,"lat":413028452}}},{"delta":{"node-LatLon":{"lon":-1107511903,"lat":413049025}}},{"delta":{"node-LatLon":{"lon":-1107439402,"lat":413069631}}},{"delta":{"node-LatLon":{"lon":-1107366103,"lat":413088130}}},{"delta":{"node-LatLon":{"lon":-1107309808,"lat":413079907}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0111110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412678295,"long":-1109403156}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5907}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31337}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023921,"speed":23.64,"longitude":-105.0478016},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":42,"serialNumber":15471,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31461,"packetID":"00000000000002B464","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412378541,"long":-1054372542},"name":"westbound_I80_317.45_323.05_SAT-DBAB5858_RC_LARI80ECHEYD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054376265,"lat":412392751}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}},{"delta":{"node-LatLon":{"lon":-1054388532,"lat":412420113}}},{"delta":{"node-LatLon":{"lon":-1054396624,"lat":412433185}}},{"delta":{"node-LatLon":{"lon":-1054404781,"lat":412446234}}},{"delta":{"node-LatLon":{"lon":-1054412998,"lat":412459262}}},{"delta":{"node-LatLon":{"lon":-1054421149,"lat":412472313}}},{"delta":{"node-LatLon":{"lon":-1054429340,"lat":412485351}}},{"delta":{"node-LatLon":{"lon":-1054437555,"lat":412498379}}},{"delta":{"node-LatLon":{"lon":-1054445744,"lat":412511417}}},{"delta":{"node-LatLon":{"lon":-1054453974,"lat":412524441}}},{"delta":{"node-LatLon":{"lon":-1054463289,"lat":412537025}}},{"delta":{"node-LatLon":{"lon":-1054475122,"lat":412548474}}},{"delta":{"node-LatLon":{"lon":-1054489160,"lat":412558405}}},{"delta":{"node-LatLon":{"lon":-1054504069,"lat":412567600}}},{"delta":{"node-LatLon":{"lon":-1054519000,"lat":412576776}}},{"delta":{"node-LatLon":{"lon":-1054533896,"lat":412585985}}},{"delta":{"node-LatLon":{"lon":-1054548833,"lat":412595156}}},{"delta":{"node-LatLon":{"lon":-1054563820,"lat":412604280}}},{"delta":{"node-LatLon":{"lon":-1054579779,"lat":412612388}}},{"delta":{"node-LatLon":{"lon":-1054597055,"lat":412618777}}},{"delta":{"node-LatLon":{"lon":-1054615114,"lat":412623812}}},{"delta":{"node-LatLon":{"lon":-1054632271,"lat":412629637}}},{"delta":{"node-LatLon":{"lon":-1054647306,"lat":412638180}}},{"delta":{"node-LatLon":{"lon":-1054662004,"lat":412647078}}},{"delta":{"node-LatLon":{"lon":-1054678467,"lat":412653902}}},{"delta":{"node-LatLon":{"lon":-1054696868,"lat":412656761}}},{"delta":{"node-LatLon":{"lon":-1054715678,"lat":412657581}}},{"delta":{"node-LatLon":{"lon":-1054734355,"lat":412659287}}},{"delta":{"node-LatLon":{"lon":-1054751683,"lat":412664718}}},{"delta":{"node-LatLon":{"lon":-1054765976,"lat":412673917}}},{"delta":{"node-LatLon":{"lon":-1054778503,"lat":412684544}}},{"delta":{"node-LatLon":{"lon":-1054791379,"lat":412695492}}},{"delta":{"node-LatLon":{"lon":-1054804278,"lat":412706425}}},{"delta":{"node-LatLon":{"lon":-1054818479,"lat":412716349}}},{"delta":{"node-LatLon":{"lon":-1054835859,"lat":412722690}}},{"delta":{"node-LatLon":{"lon":-1054854996,"lat":412724695}}},{"delta":{"node-LatLon":{"lon":-1054874196,"lat":412722759}}},{"delta":{"node-LatLon":{"lon":-1054893260,"lat":412720064}}},{"delta":{"node-LatLon":{"lon":-1054912492,"lat":412718274}}},{"delta":{"node-LatLon":{"lon":-1054931875,"lat":412718613}}},{"delta":{"node-LatLon":{"lon":-1054951253,"lat":412719209}}},{"delta":{"node-LatLon":{"lon":-1054969662,"lat":412719789}}},{"delta":{"node-LatLon":{"lon":-1054987987,"lat":412721117}}},{"delta":{"node-LatLon":{"lon":-1055005745,"lat":412724757}}},{"delta":{"node-LatLon":{"lon":-1055022420,"lat":412730636}}},{"delta":{"node-LatLon":{"lon":-1055038524,"lat":412737393}}},{"delta":{"node-LatLon":{"lon":-1055054603,"lat":412744185}}},{"delta":{"node-LatLon":{"lon":-1055070731,"lat":412750911}}},{"delta":{"node-LatLon":{"lon":-1055086830,"lat":412757675}}},{"delta":{"node-LatLon":{"lon":-1055102919,"lat":412764454}}},{"delta":{"node-LatLon":{"lon":-1055119050,"lat":412771172}}},{"delta":{"node-LatLon":{"lon":-1055134655,"lat":412779343}}},{"delta":{"node-LatLon":{"lon":-1055148584,"lat":412789095}}},{"delta":{"node-LatLon":{"lon":-1055160661,"lat":412800171}}},{"delta":{"node-LatLon":{"lon":-1055171718,"lat":412811853}}},{"delta":{"node-LatLon":{"lon":-1055182800,"lat":412823521}}},{"delta":{"node-LatLon":{"lon":-1055193934,"lat":412835162}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011111"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412378541,"long":-1054372542}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31461}},"msgCnt":12}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6,"latitude":41.1023878,"speed":23.64,"longitude":-105.0478293},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":41,"serialNumber":15470,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.052Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31461,"packetID":"0000000000000939DD","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412846200,"long":-1055207674},"name":"eastbound_I80_317.45_323.05_SAT-85B2D861_RC_LARI80ECHEYI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055196465,"lat":412834401}}},{"delta":{"node-LatLon":{"lon":-1055185238,"lat":412822611}}},{"delta":{"node-LatLon":{"lon":-1055174028,"lat":412810812}}},{"delta":{"node-LatLon":{"lon":-1055162838,"lat":412799002}}},{"delta":{"node-LatLon":{"lon":-1055151564,"lat":412787238}}},{"delta":{"node-LatLon":{"lon":-1055139485,"lat":412775945}}},{"delta":{"node-LatLon":{"lon":-1055126153,"lat":412765484}}},{"delta":{"node-LatLon":{"lon":-1055111710,"lat":412756134}}},{"delta":{"node-LatLon":{"lon":-1055096204,"lat":412747808}}},{"delta":{"node-LatLon":{"lon":-1055080126,"lat":412740115}}},{"delta":{"node-LatLon":{"lon":-1055063926,"lat":412732570}}},{"delta":{"node-LatLon":{"lon":-1055046853,"lat":412726244}}},{"delta":{"node-LatLon":{"lon":-1055028777,"lat":412721773}}},{"delta":{"node-LatLon":{"lon":-1055009981,"lat":412719587}}},{"delta":{"node-LatLon":{"lon":-1054990989,"lat":412718648}}},{"delta":{"node-LatLon":{"lon":-1054972006,"lat":412717639}}},{"delta":{"node-LatLon":{"lon":-1054953009,"lat":412716759}}},{"delta":{"node-LatLon":{"lon":-1054934016,"lat":412716179}}},{"delta":{"node-LatLon":{"lon":-1054915016,"lat":412715870}}},{"delta":{"node-LatLon":{"lon":-1054896123,"lat":412717322}}},{"delta":{"node-LatLon":{"lon":-1054877421,"lat":412719892}}},{"delta":{"node-LatLon":{"lon":-1054858665,"lat":412722173}}},{"delta":{"node-LatLon":{"lon":-1054839790,"lat":412721101}}},{"delta":{"node-LatLon":{"lon":-1054822378,"lat":412715508}}},{"delta":{"node-LatLon":{"lon":-1054808075,"lat":412706122}}},{"delta":{"node-LatLon":{"lon":-1054795466,"lat":412695384}}},{"delta":{"node-LatLon":{"lon":-1054782861,"lat":412684644}}},{"delta":{"node-LatLon":{"lon":-1054770097,"lat":412673836}}},{"delta":{"node-LatLon":{"lon":-1054756003,"lat":412664064}}},{"delta":{"node-LatLon":{"lon":-1054738855,"lat":412657720}}},{"delta":{"node-LatLon":{"lon":-1054719971,"lat":412655405}}},{"delta":{"node-LatLon":{"lon":-1054700821,"lat":412654615}}},{"delta":{"node-LatLon":{"lon":-1054681944,"lat":412652284}}},{"delta":{"node-LatLon":{"lon":-1054664843,"lat":412645844}}},{"delta":{"node-LatLon":{"lon":-1054649671,"lat":412637001}}},{"delta":{"node-LatLon":{"lon":-1054634409,"lat":412628251}}},{"delta":{"node-LatLon":{"lon":-1054617259,"lat":412621852}}},{"delta":{"node-LatLon":{"lon":-1054599367,"lat":412616899}}},{"delta":{"node-LatLon":{"lon":-1054582192,"lat":412610689}}},{"delta":{"node-LatLon":{"lon":-1054566302,"lat":412602767}}},{"delta":{"node-LatLon":{"lon":-1054551500,"lat":412593707}}},{"delta":{"node-LatLon":{"lon":-1054536736,"lat":412584610}}},{"delta":{"node-LatLon":{"lon":-1054521939,"lat":412575543}}},{"delta":{"node-LatLon":{"lon":-1054507197,"lat":412566427}}},{"delta":{"node-LatLon":{"lon":-1054492428,"lat":412557334}}},{"delta":{"node-LatLon":{"lon":-1054478373,"lat":412547636}}},{"delta":{"node-LatLon":{"lon":-1054466482,"lat":412536415}}},{"delta":{"node-LatLon":{"lon":-1054457123,"lat":412523979}}},{"delta":{"node-LatLon":{"lon":-1054448979,"lat":412511051}}},{"delta":{"node-LatLon":{"lon":-1054440857,"lat":412498114}}},{"delta":{"node-LatLon":{"lon":-1054432727,"lat":412485180}}},{"delta":{"node-LatLon":{"lon":-1054424622,"lat":412472238}}},{"delta":{"node-LatLon":{"lon":-1054416471,"lat":412459312}}},{"delta":{"node-LatLon":{"lon":-1054408332,"lat":412446382}}},{"delta":{"node-LatLon":{"lon":-1054400231,"lat":412433438}}},{"delta":{"node-LatLon":{"lon":-1054392109,"lat":412420501}}},{"delta":{"node-LatLon":{"lon":-1054384744,"lat":412407315}}},{"delta":{"node-LatLon":{"lon":-1054379237,"lat":412393551}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412846200,"long":-1055207674}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5906}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31461}},"msgCnt":12}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6625,"latitude":41.1023793,"speed":23.56,"longitude":-105.0478845},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":40,"serialNumber":15469,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:09.052Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31306,"packetID":"0000000000000936E7","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417414634,"long":-1068269969},"name":"westbound_I80_221.2_235.23_SAT-09D8678A_RC_RAWI80ELARD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1068289321,"lat":417415359}}},{"delta":{"node-LatLon":{"lon":-1068308673,"lat":417416093}}},{"delta":{"node-LatLon":{"lon":-1068385974,"lat":417418859}}},{"delta":{"node-LatLon":{"lon":-1068463156,"lat":417421689}}},{"delta":{"node-LatLon":{"lon":-1068540338,"lat":417424515}}},{"delta":{"node-LatLon":{"lon":-1068617852,"lat":417427395}}},{"delta":{"node-LatLon":{"lon":-1068695369,"lat":417430231}}},{"delta":{"node-LatLon":{"lon":-1068772890,"lat":417433050}}},{"delta":{"node-LatLon":{"lon":-1068850417,"lat":417435830}}},{"delta":{"node-LatLon":{"lon":-1068927943,"lat":417438632}}},{"delta":{"node-LatLon":{"lon":-1069005025,"lat":417441424}}},{"delta":{"node-LatLon":{"lon":-1069082106,"lat":417444219}}},{"delta":{"node-LatLon":{"lon":-1069159408,"lat":417446974}}},{"delta":{"node-LatLon":{"lon":-1069236759,"lat":417451306}}},{"delta":{"node-LatLon":{"lon":-1069312011,"lat":417465173}}},{"delta":{"node-LatLon":{"lon":-1069385103,"lat":417484568}}},{"delta":{"node-LatLon":{"lon":-1069458135,"lat":417504094}}},{"delta":{"node-LatLon":{"lon":-1069530060,"lat":417523167}}},{"delta":{"node-LatLon":{"lon":-1069600849,"lat":417541844}}},{"delta":{"node-LatLon":{"lon":-1069673525,"lat":417555795}}},{"delta":{"node-LatLon":{"lon":-1069748966,"lat":417568966}}},{"delta":{"node-LatLon":{"lon":-1069824418,"lat":417582109}}},{"delta":{"node-LatLon":{"lon":-1069899351,"lat":417595155}}},{"delta":{"node-LatLon":{"lon":-1069973766,"lat":417608100}}},{"delta":{"node-LatLon":{"lon":-1070048170,"lat":417621086}}},{"delta":{"node-LatLon":{"lon":-1070123773,"lat":417634264}}},{"delta":{"node-LatLon":{"lon":-1070199399,"lat":417647374}}},{"delta":{"node-LatLon":{"lon":-1070274965,"lat":417660512}}},{"delta":{"node-LatLon":{"lon":-1070350472,"lat":417673678}}},{"delta":{"node-LatLon":{"lon":-1070425989,"lat":417686813}}},{"delta":{"node-LatLon":{"lon":-1070501711,"lat":417699947}}},{"delta":{"node-LatLon":{"lon":-1070577425,"lat":417713109}}},{"delta":{"node-LatLon":{"lon":-1070653637,"lat":417726293}}},{"delta":{"node-LatLon":{"lon":-1070730992,"lat":417736504}}},{"delta":{"node-LatLon":{"lon":-1070808409,"lat":417727589}}},{"delta":{"node-LatLon":{"lon":-1070884161,"lat":417718392}}},{"delta":{"node-LatLon":{"lon":-1070959940,"lat":417729715}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417414634,"long":-1068269969}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31306}},"msgCnt":32}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6625,"latitude":41.1023793,"speed":23.56,"longitude":-105.0478845},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":39,"serialNumber":15468,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31306,"packetID":"00000000000009698C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417730521,"long":-1070980675},"name":"eastbound_I80_221.2_235.23_SAT-BA88D691_RC_RAWI80ELARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1070961677,"lat":417727641}}},{"delta":{"node-LatLon":{"lon":-1070885649,"lat":417716362}}},{"delta":{"node-LatLon":{"lon":-1070809626,"lat":417725169}}},{"delta":{"node-LatLon":{"lon":-1070732756,"lat":417733042}}},{"delta":{"node-LatLon":{"lon":-1070656229,"lat":417722191}}},{"delta":{"node-LatLon":{"lon":-1070580490,"lat":417709023}}},{"delta":{"node-LatLon":{"lon":-1070504992,"lat":417695900}}},{"delta":{"node-LatLon":{"lon":-1070429493,"lat":417682786}}},{"delta":{"node-LatLon":{"lon":-1070354047,"lat":417669673}}},{"delta":{"node-LatLon":{"lon":-1070278596,"lat":417656581}}},{"delta":{"node-LatLon":{"lon":-1070202954,"lat":417643413}}},{"delta":{"node-LatLon":{"lon":-1070127097,"lat":417630244}}},{"delta":{"node-LatLon":{"lon":-1070051256,"lat":417617028}}},{"delta":{"node-LatLon":{"lon":-1069975759,"lat":417603852}}},{"delta":{"node-LatLon":{"lon":-1069900250,"lat":417590719}}},{"delta":{"node-LatLon":{"lon":-1069825529,"lat":417577695}}},{"delta":{"node-LatLon":{"lon":-1069751604,"lat":417564757}}},{"delta":{"node-LatLon":{"lon":-1069677665,"lat":417551870}}},{"delta":{"node-LatLon":{"lon":-1069603910,"lat":417538967}}},{"delta":{"node-LatLon":{"lon":-1069531945,"lat":417521380}}},{"delta":{"node-LatLon":{"lon":-1069460002,"lat":417502274}}},{"delta":{"node-LatLon":{"lon":-1069387530,"lat":417482961}}},{"delta":{"node-LatLon":{"lon":-1069315049,"lat":417463671}}},{"delta":{"node-LatLon":{"lon":-1069240161,"lat":417448143}}},{"delta":{"node-LatLon":{"lon":-1069162781,"lat":417442613}}},{"delta":{"node-LatLon":{"lon":-1069085198,"lat":417439823}}},{"delta":{"node-LatLon":{"lon":-1069007744,"lat":417437041}}},{"delta":{"node-LatLon":{"lon":-1068930291,"lat":417434237}}},{"delta":{"node-LatLon":{"lon":-1068853004,"lat":417431463}}},{"delta":{"node-LatLon":{"lon":-1068775721,"lat":417428637}}},{"delta":{"node-LatLon":{"lon":-1068698384,"lat":417425830}}},{"delta":{"node-LatLon":{"lon":-1068620993,"lat":417423054}}},{"delta":{"node-LatLon":{"lon":-1068543604,"lat":417420239}}},{"delta":{"node-LatLon":{"lon":-1068465827,"lat":417417448}}},{"delta":{"node-LatLon":{"lon":-1068388058,"lat":417414571}}},{"delta":{"node-LatLon":{"lon":-1068310584,"lat":417411739}}},{"delta":{"node-LatLon":{"lon":-1068291290,"lat":417411033}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417730521,"long":-1070980675}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31306}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6625,"latitude":41.1023754,"speed":23.44,"longitude":-105.047912},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":38,"serialNumber":15467,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.951Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31576,"packetID":"0000000000000CAD04","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417236030,"long":-1064577050},"name":"westbound_I80_235.23_255.6_SAT-5249C81B_RC_EMI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1064594442,"lat":417242599}}},{"delta":{"node-LatLon":{"lon":-1064663938,"lat":417268988}}},{"delta":{"node-LatLon":{"lon":-1064732992,"lat":417295169}}},{"delta":{"node-LatLon":{"lon":-1064801593,"lat":417321158}}},{"delta":{"node-LatLon":{"lon":-1064868982,"lat":417348724}}},{"delta":{"node-LatLon":{"lon":-1064918112,"lat":417392970}}},{"delta":{"node-LatLon":{"lon":-1064954285,"lat":417444108}}},{"delta":{"node-LatLon":{"lon":-1065013176,"lat":417481407}}},{"delta":{"node-LatLon":{"lon":-1065076232,"lat":417514937}}},{"delta":{"node-LatLon":{"lon":-1065143647,"lat":417541998}}},{"delta":{"node-LatLon":{"lon":-1065216141,"lat":417525688}}},{"delta":{"node-LatLon":{"lon":-1065286224,"lat":417501265}}},{"delta":{"node-LatLon":{"lon":-1065362113,"lat":417489852}}},{"delta":{"node-LatLon":{"lon":-1065436335,"lat":417474443}}},{"delta":{"node-LatLon":{"lon":-1065509545,"lat":417456289}}},{"delta":{"node-LatLon":{"lon":-1065583202,"lat":417438150}}},{"delta":{"node-LatLon":{"lon":-1065656809,"lat":417419903}}},{"delta":{"node-LatLon":{"lon":-1065731883,"lat":417405563}}},{"delta":{"node-LatLon":{"lon":-1065807502,"lat":417392751}}},{"delta":{"node-LatLon":{"lon":-1065883116,"lat":417379926}}},{"delta":{"node-LatLon":{"lon":-1065957863,"lat":417367400}}},{"delta":{"node-LatLon":{"lon":-1066034015,"lat":417367499}}},{"delta":{"node-LatLon":{"lon":-1066107964,"lat":417383273}}},{"delta":{"node-LatLon":{"lon":-1066182713,"lat":417397479}}},{"delta":{"node-LatLon":{"lon":-1066259373,"lat":417393785}}},{"delta":{"node-LatLon":{"lon":-1066332961,"lat":417375298}}},{"delta":{"node-LatLon":{"lon":-1066406270,"lat":417356150}}},{"delta":{"node-LatLon":{"lon":-1066479386,"lat":417336915}}},{"delta":{"node-LatLon":{"lon":-1066552888,"lat":417319016}}},{"delta":{"node-LatLon":{"lon":-1066629919,"lat":417314788}}},{"delta":{"node-LatLon":{"lon":-1066707699,"lat":417312949}}},{"delta":{"node-LatLon":{"lon":-1066785479,"lat":417311107}}},{"delta":{"node-LatLon":{"lon":-1066862945,"lat":417309275}}},{"delta":{"node-LatLon":{"lon":-1066940095,"lat":417307413}}},{"delta":{"node-LatLon":{"lon":-1067017196,"lat":417307583}}},{"delta":{"node-LatLon":{"lon":-1067093337,"lat":417317382}}},{"delta":{"node-LatLon":{"lon":-1067169430,"lat":417327402}}},{"delta":{"node-LatLon":{"lon":-1067245652,"lat":417337364}}},{"delta":{"node-LatLon":{"lon":-1067321980,"lat":417347366}}},{"delta":{"node-LatLon":{"lon":-1067398306,"lat":417357382}}},{"delta":{"node-LatLon":{"lon":-1067473287,"lat":417371223}}},{"delta":{"node-LatLon":{"lon":-1067545644,"lat":417391873}}},{"delta":{"node-LatLon":{"lon":-1067618034,"lat":417412485}}},{"delta":{"node-LatLon":{"lon":-1067691111,"lat":417431502}}},{"delta":{"node-LatLon":{"lon":-1067768403,"lat":417431260}}},{"delta":{"node-LatLon":{"lon":-1067845690,"lat":417428509}}},{"delta":{"node-LatLon":{"lon":-1067922977,"lat":417425763}}},{"delta":{"node-LatLon":{"lon":-1068000058,"lat":417422940}}},{"delta":{"node-LatLon":{"lon":-1068076949,"lat":417420295}}},{"delta":{"node-LatLon":{"lon":-1068153829,"lat":417417471}}},{"delta":{"node-LatLon":{"lon":-1068231245,"lat":417414693}}},{"delta":{"node-LatLon":{"lon":-1068308673,"lat":417416093}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000111110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417236030,"long":-1064577050}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31576}},"msgCnt":42}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.6625,"latitude":41.1023754,"speed":23.44,"longitude":-105.047912},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":37,"serialNumber":15466,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.853Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31576,"packetID":"0000000000000B72CD","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417412478,"long":-1068329876},"name":"eastbound_I80_235.23_255.6_SAT-BC6CCC19_RC_EMI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1068310584,"lat":417411739}}},{"delta":{"node-LatLon":{"lon":-1068233386,"lat":417410283}}},{"delta":{"node-LatLon":{"lon":-1068156206,"lat":417413060}}},{"delta":{"node-LatLon":{"lon":-1068078777,"lat":417415820}}},{"delta":{"node-LatLon":{"lon":-1068001349,"lat":417418584}}},{"delta":{"node-LatLon":{"lon":-1067924043,"lat":417421374}}},{"delta":{"node-LatLon":{"lon":-1067846854,"lat":417424119}}},{"delta":{"node-LatLon":{"lon":-1067769664,"lat":417426862}}},{"delta":{"node-LatLon":{"lon":-1067693191,"lat":417427429}}},{"delta":{"node-LatLon":{"lon":-1067620890,"lat":417408658}}},{"delta":{"node-LatLon":{"lon":-1067548859,"lat":417388122}}},{"delta":{"node-LatLon":{"lon":-1067476428,"lat":417367444}}},{"delta":{"node-LatLon":{"lon":-1067401438,"lat":417353366}}},{"delta":{"node-LatLon":{"lon":-1067324763,"lat":417343330}}},{"delta":{"node-LatLon":{"lon":-1067248094,"lat":417333277}}},{"delta":{"node-LatLon":{"lon":-1067171506,"lat":417323258}}},{"delta":{"node-LatLon":{"lon":-1067095014,"lat":417313213}}},{"delta":{"node-LatLon":{"lon":-1067018343,"lat":417304140}}},{"delta":{"node-LatLon":{"lon":-1066941341,"lat":417305018}}},{"delta":{"node-LatLon":{"lon":-1066864327,"lat":417306535}}},{"delta":{"node-LatLon":{"lon":-1066786982,"lat":417308392}}},{"delta":{"node-LatLon":{"lon":-1066709294,"lat":417310231}}},{"delta":{"node-LatLon":{"lon":-1066631604,"lat":417312052}}},{"delta":{"node-LatLon":{"lon":-1066553905,"lat":417315567}}},{"delta":{"node-LatLon":{"lon":-1066479234,"lat":417331977}}},{"delta":{"node-LatLon":{"lon":-1066405938,"lat":417350968}}},{"delta":{"node-LatLon":{"lon":-1066333222,"lat":417370336}}},{"delta":{"node-LatLon":{"lon":-1066260210,"lat":417389047}}},{"delta":{"node-LatLon":{"lon":-1066185059,"lat":417393215}}},{"delta":{"node-LatLon":{"lon":-1066111705,"lat":417379368}}},{"delta":{"node-LatLon":{"lon":-1066037468,"lat":417363405}}},{"delta":{"node-LatLon":{"lon":-1065959182,"lat":417362605}}},{"delta":{"node-LatLon":{"lon":-1065882330,"lat":417375426}}},{"delta":{"node-LatLon":{"lon":-1065806758,"lat":417388216}}},{"delta":{"node-LatLon":{"lon":-1065731194,"lat":417401042}}},{"delta":{"node-LatLon":{"lon":-1065656118,"lat":417415246}}},{"delta":{"node-LatLon":{"lon":-1065582542,"lat":417433443}}},{"delta":{"node-LatLon":{"lon":-1065508992,"lat":417451702}}},{"delta":{"node-LatLon":{"lon":-1065434680,"lat":417470091}}},{"delta":{"node-LatLon":{"lon":-1065359330,"lat":417485637}}},{"delta":{"node-LatLon":{"lon":-1065283762,"lat":417497543}}},{"delta":{"node-LatLon":{"lon":-1065215939,"lat":417523097}}},{"delta":{"node-LatLon":{"lon":-1065145106,"lat":417539870}}},{"delta":{"node-LatLon":{"lon":-1065078198,"lat":417513374}}},{"delta":{"node-LatLon":{"lon":-1065015853,"lat":417480011}}},{"delta":{"node-LatLon":{"lon":-1064958078,"lat":417441842}}},{"delta":{"node-LatLon":{"lon":-1064922715,"lat":417389692}}},{"delta":{"node-LatLon":{"lon":-1064872664,"lat":417345234}}},{"delta":{"node-LatLon":{"lon":-1064805541,"lat":417317528}}},{"delta":{"node-LatLon":{"lon":-1064737065,"lat":417291583}}},{"delta":{"node-LatLon":{"lon":-1064668140,"lat":417265497}}},{"delta":{"node-LatLon":{"lon":-1064598834,"lat":417239175}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011111000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417412478,"long":-1068329876}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31576}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023629,"speed":23.16,"longitude":-105.0479939},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":32,"serialNumber":15461,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.553Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31547,"packetID":"0000000000000EF64E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415981013,"long":-1062070609},"name":"westbound_I80_267.19_272.06_SAT-1F82D7A2_RC_ARLI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062090421,"lat":415980971}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}},{"delta":{"node-LatLon":{"lon":-1062129021,"lat":415980789}}},{"delta":{"node-LatLon":{"lon":-1062147810,"lat":415980793}}},{"delta":{"node-LatLon":{"lon":-1062166552,"lat":415981611}}},{"delta":{"node-LatLon":{"lon":-1062184813,"lat":415984845}}},{"delta":{"node-LatLon":{"lon":-1062201989,"lat":415990520}}},{"delta":{"node-LatLon":{"lon":-1062217437,"lat":415998517}}},{"delta":{"node-LatLon":{"lon":-1062230703,"lat":416008482}}},{"delta":{"node-LatLon":{"lon":-1062241451,"lat":416020041}}},{"delta":{"node-LatLon":{"lon":-1062251290,"lat":416032060}}},{"delta":{"node-LatLon":{"lon":-1062261128,"lat":416044081}}},{"delta":{"node-LatLon":{"lon":-1062270774,"lat":416055871}}},{"delta":{"node-LatLon":{"lon":-1062280417,"lat":416067663}}},{"delta":{"node-LatLon":{"lon":-1062290067,"lat":416079452}}},{"delta":{"node-LatLon":{"lon":-1062299712,"lat":416091244}}},{"delta":{"node-LatLon":{"lon":-1062309426,"lat":416103003}}},{"delta":{"node-LatLon":{"lon":-1062319170,"lat":416114748}}},{"delta":{"node-LatLon":{"lon":-1062328711,"lat":416126587}}},{"delta":{"node-LatLon":{"lon":-1062338232,"lat":416138435}}},{"delta":{"node-LatLon":{"lon":-1062347925,"lat":416150205}}},{"delta":{"node-LatLon":{"lon":-1062357563,"lat":416162000}}},{"delta":{"node-LatLon":{"lon":-1062368179,"lat":416174692}}},{"delta":{"node-LatLon":{"lon":-1062379892,"lat":416186820}}},{"delta":{"node-LatLon":{"lon":-1062393288,"lat":416197926}}},{"delta":{"node-LatLon":{"lon":-1062408108,"lat":416207958}}},{"delta":{"node-LatLon":{"lon":-1062424227,"lat":416216793}}},{"delta":{"node-LatLon":{"lon":-1062441506,"lat":416224292}}},{"delta":{"node-LatLon":{"lon":-1062459705,"lat":416230444}}},{"delta":{"node-LatLon":{"lon":-1062478641,"lat":416235175}}},{"delta":{"node-LatLon":{"lon":-1062497949,"lat":416238998}}},{"delta":{"node-LatLon":{"lon":-1062517273,"lat":416242774}}},{"delta":{"node-LatLon":{"lon":-1062536082,"lat":416246433}}},{"delta":{"node-LatLon":{"lon":-1062554889,"lat":416250101}}},{"delta":{"node-LatLon":{"lon":-1062573685,"lat":416253798}}},{"delta":{"node-LatLon":{"lon":-1062592489,"lat":416257471}}},{"delta":{"node-LatLon":{"lon":-1062611298,"lat":416261134}}},{"delta":{"node-LatLon":{"lon":-1062630102,"lat":416264808}}},{"delta":{"node-LatLon":{"lon":-1062648910,"lat":416268474}}},{"delta":{"node-LatLon":{"lon":-1062667716,"lat":416272143}}},{"delta":{"node-LatLon":{"lon":-1062686526,"lat":416275802}}},{"delta":{"node-LatLon":{"lon":-1062705320,"lat":416279506}}},{"delta":{"node-LatLon":{"lon":-1062723512,"lat":416283487}}},{"delta":{"node-LatLon":{"lon":-1062741156,"lat":416288664}}},{"delta":{"node-LatLon":{"lon":-1062758081,"lat":416295053}}},{"delta":{"node-LatLon":{"lon":-1062774179,"lat":416302552}}},{"delta":{"node-LatLon":{"lon":-1062789262,"lat":416311156}}},{"delta":{"node-LatLon":{"lon":-1062803697,"lat":416320374}}},{"delta":{"node-LatLon":{"lon":-1062818144,"lat":416329581}}},{"delta":{"node-LatLon":{"lon":-1062832563,"lat":416338813}}},{"delta":{"node-LatLon":{"lon":-1062847004,"lat":416348027}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415981013,"long":-1062070609}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31547}},"msgCnt":54}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023711,"speed":23.16,"longitude":-105.0479398},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":36,"serialNumber":15465,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.753Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31576,"packetID":"000000000000097BE1","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416329581,"long":-1062818144},"name":"westbound_I80_255.6_267.19_SAT-EF31CF04_RC_EMI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062832563,"lat":416338813}}},{"delta":{"node-LatLon":{"lon":-1062861444,"lat":416357241}}},{"delta":{"node-LatLon":{"lon":-1062891617,"lat":416376465}}},{"delta":{"node-LatLon":{"lon":-1062924240,"lat":416393168}}},{"delta":{"node-LatLon":{"lon":-1062961089,"lat":416403834}}},{"delta":{"node-LatLon":{"lon":-1062999651,"lat":416410539}}},{"delta":{"node-LatLon":{"lon":-1063038256,"lat":416417110}}},{"delta":{"node-LatLon":{"lon":-1063075838,"lat":416423525}}},{"delta":{"node-LatLon":{"lon":-1063113422,"lat":416429935}}},{"delta":{"node-LatLon":{"lon":-1063151010,"lat":416436333}}},{"delta":{"node-LatLon":{"lon":-1063187758,"lat":416444929}}},{"delta":{"node-LatLon":{"lon":-1063221748,"lat":416458478}}},{"delta":{"node-LatLon":{"lon":-1063254248,"lat":416474223}}},{"delta":{"node-LatLon":{"lon":-1063286767,"lat":416489947}}},{"delta":{"node-LatLon":{"lon":-1063319286,"lat":416505671}}},{"delta":{"node-LatLon":{"lon":-1063351803,"lat":416521398}}},{"delta":{"node-LatLon":{"lon":-1063384308,"lat":416537141}}},{"delta":{"node-LatLon":{"lon":-1063416537,"lat":416552741}}},{"delta":{"node-LatLon":{"lon":-1063448756,"lat":416568353}}},{"delta":{"node-LatLon":{"lon":-1063480997,"lat":416583940}}},{"delta":{"node-LatLon":{"lon":-1063513230,"lat":416599539}}},{"delta":{"node-LatLon":{"lon":-1063545479,"lat":416615118}}},{"delta":{"node-LatLon":{"lon":-1063577703,"lat":416630746}}},{"delta":{"node-LatLon":{"lon":-1063609979,"lat":416646315}}},{"delta":{"node-LatLon":{"lon":-1063642246,"lat":416661894}}},{"delta":{"node-LatLon":{"lon":-1063674320,"lat":416677693}}},{"delta":{"node-LatLon":{"lon":-1063702475,"lat":416697159}}},{"delta":{"node-LatLon":{"lon":-1063724503,"lat":416721905}}},{"delta":{"node-LatLon":{"lon":-1063738013,"lat":416749885}}},{"delta":{"node-LatLon":{"lon":-1063745688,"lat":416779149}}},{"delta":{"node-LatLon":{"lon":-1063757512,"lat":416807580}}},{"delta":{"node-LatLon":{"lon":-1063775542,"lat":416834147}}},{"delta":{"node-LatLon":{"lon":-1063793398,"lat":416858977}}},{"delta":{"node-LatLon":{"lon":-1063809837,"lat":416884350}}},{"delta":{"node-LatLon":{"lon":-1063824918,"lat":416910195}}},{"delta":{"node-LatLon":{"lon":-1063839847,"lat":416936091}}},{"delta":{"node-LatLon":{"lon":-1063856289,"lat":416961436}}},{"delta":{"node-LatLon":{"lon":-1063880112,"lat":416984440}}},{"delta":{"node-LatLon":{"lon":-1063910309,"lat":417002755}}},{"delta":{"node-LatLon":{"lon":-1063944810,"lat":417016237}}},{"delta":{"node-LatLon":{"lon":-1063979929,"lat":417028841}}},{"delta":{"node-LatLon":{"lon":-1064015050,"lat":417041442}}},{"delta":{"node-LatLon":{"lon":-1064050617,"lat":417052787}}},{"delta":{"node-LatLon":{"lon":-1064088491,"lat":417058422}}},{"delta":{"node-LatLon":{"lon":-1064127128,"lat":417059995}}},{"delta":{"node-LatLon":{"lon":-1064165769,"lat":417061539}}},{"delta":{"node-LatLon":{"lon":-1064204408,"lat":417063119}}},{"delta":{"node-LatLon":{"lon":-1064242489,"lat":417067748}}},{"delta":{"node-LatLon":{"lon":-1064278067,"lat":417078928}}},{"delta":{"node-LatLon":{"lon":-1064309216,"lat":417095993}}},{"delta":{"node-LatLon":{"lon":-1064338068,"lat":417115288}}},{"delta":{"node-LatLon":{"lon":-1064366996,"lat":417134521}}},{"delta":{"node-LatLon":{"lon":-1064396523,"lat":417152988}}},{"delta":{"node-LatLon":{"lon":-1064427177,"lat":417170394}}},{"delta":{"node-LatLon":{"lon":-1064458838,"lat":417186756}}},{"delta":{"node-LatLon":{"lon":-1064491487,"lat":417201990}}},{"delta":{"node-LatLon":{"lon":-1064525046,"lat":417216068}}},{"delta":{"node-LatLon":{"lon":-1064559666,"lat":417229448}}},{"delta":{"node-LatLon":{"lon":-1064594442,"lat":417242599}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001111"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416329581,"long":-1062818144}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31576}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023629,"speed":23.16,"longitude":-105.0479939},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":33,"serialNumber":15462,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.653Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31547,"packetID":"00000000000010847D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415976300,"long":-1062132565},"name":"eastbound_I80_272.06_279.86_SAT-A456B6BD_RC_ARLI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062074266,"lat":415976387}}},{"delta":{"node-LatLon":{"lon":-1062035235,"lat":415976340}}},{"delta":{"node-LatLon":{"lon":-1061996980,"lat":415971514}}},{"delta":{"node-LatLon":{"lon":-1061962779,"lat":415957510}}},{"delta":{"node-LatLon":{"lon":-1061929530,"lat":415942161}}},{"delta":{"node-LatLon":{"lon":-1061896505,"lat":415926815}}},{"delta":{"node-LatLon":{"lon":-1061863465,"lat":415911487}}},{"delta":{"node-LatLon":{"lon":-1061830559,"lat":415896001}}},{"delta":{"node-LatLon":{"lon":-1061799243,"lat":415878765}}},{"delta":{"node-LatLon":{"lon":-1061768515,"lat":415860933}}},{"delta":{"node-LatLon":{"lon":-1061737747,"lat":415843066}}},{"delta":{"node-LatLon":{"lon":-1061706991,"lat":415825187}}},{"delta":{"node-LatLon":{"lon":-1061676217,"lat":415807327}}},{"delta":{"node-LatLon":{"lon":-1061645463,"lat":415789449}}},{"delta":{"node-LatLon":{"lon":-1061614689,"lat":415771591}}},{"delta":{"node-LatLon":{"lon":-1061584537,"lat":415754086}}},{"delta":{"node-LatLon":{"lon":-1061554447,"lat":415736525}}},{"delta":{"node-LatLon":{"lon":-1061524198,"lat":415719117}}},{"delta":{"node-LatLon":{"lon":-1061494074,"lat":415701589}}},{"delta":{"node-LatLon":{"lon":-1061463879,"lat":415684131}}},{"delta":{"node-LatLon":{"lon":-1061432150,"lat":415667054}}},{"delta":{"node-LatLon":{"lon":-1061396974,"lat":415654391}}},{"delta":{"node-LatLon":{"lon":-1061359292,"lat":415646802}}},{"delta":{"node-LatLon":{"lon":-1061320863,"lat":415641538}}},{"delta":{"node-LatLon":{"lon":-1061282426,"lat":415636308}}},{"delta":{"node-LatLon":{"lon":-1061244922,"lat":415631177}}},{"delta":{"node-LatLon":{"lon":-1061207418,"lat":415626048}}},{"delta":{"node-LatLon":{"lon":-1061169903,"lat":415620964}}},{"delta":{"node-LatLon":{"lon":-1061132571,"lat":415615219}}},{"delta":{"node-LatLon":{"lon":-1061096967,"lat":415605109}}},{"delta":{"node-LatLon":{"lon":-1061064131,"lat":415590319}}},{"delta":{"node-LatLon":{"lon":-1061032943,"lat":415573570}}},{"delta":{"node-LatLon":{"lon":-1061001748,"lat":415556828}}},{"delta":{"node-LatLon":{"lon":-1060970565,"lat":415540075}}},{"delta":{"node-LatLon":{"lon":-1060939622,"lat":415523077}}},{"delta":{"node-LatLon":{"lon":-1060912271,"lat":415503093}}},{"delta":{"node-LatLon":{"lon":-1060888721,"lat":415480493}}},{"delta":{"node-LatLon":{"lon":-1060865425,"lat":415457738}}},{"delta":{"node-LatLon":{"lon":-1060842121,"lat":415434989}}},{"delta":{"node-LatLon":{"lon":-1060830479,"lat":415423609}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415976300,"long":-1062132565}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31547}},"msgCnt":36}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.102367,"speed":23.16,"longitude":-105.0479669},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":35,"serialNumber":15464,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.753Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31576,"packetID":"000000000000043991","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417245737,"long":-1064616173},"name":"eastbound_I80_255.6_267.19_SAT-9BEE74D0_RC_EMI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1064598834,"lat":417239175}}},{"delta":{"node-LatLon":{"lon":-1064564140,"lat":417226077}}},{"delta":{"node-LatLon":{"lon":-1064529505,"lat":417212891}}},{"delta":{"node-LatLon":{"lon":-1064496024,"lat":417198853}}},{"delta":{"node-LatLon":{"lon":-1064463440,"lat":417183676}}},{"delta":{"node-LatLon":{"lon":-1064431804,"lat":417167410}}},{"delta":{"node-LatLon":{"lon":-1064401163,"lat":417150110}}},{"delta":{"node-LatLon":{"lon":-1064371651,"lat":417131742}}},{"delta":{"node-LatLon":{"lon":-1064342280,"lat":417112106}}},{"delta":{"node-LatLon":{"lon":-1064312928,"lat":417092456}}},{"delta":{"node-LatLon":{"lon":-1064281084,"lat":417075243}}},{"delta":{"node-LatLon":{"lon":-1064244933,"lat":417063737}}},{"delta":{"node-LatLon":{"lon":-1064206236,"lat":417058710}}},{"delta":{"node-LatLon":{"lon":-1064168081,"lat":417057202}}},{"delta":{"node-LatLon":{"lon":-1064129929,"lat":417055664}}},{"delta":{"node-LatLon":{"lon":-1064091774,"lat":417054155}}},{"delta":{"node-LatLon":{"lon":-1064054270,"lat":417049080}}},{"delta":{"node-LatLon":{"lon":-1064019101,"lat":417037984}}},{"delta":{"node-LatLon":{"lon":-1063985061,"lat":417025732}}},{"delta":{"node-LatLon":{"lon":-1063951019,"lat":417013482}}},{"delta":{"node-LatLon":{"lon":-1063917284,"lat":417000788}}},{"delta":{"node-LatLon":{"lon":-1063887416,"lat":416983573}}},{"delta":{"node-LatLon":{"lon":-1063863549,"lat":416961722}}},{"delta":{"node-LatLon":{"lon":-1063846461,"lat":416936273}}},{"delta":{"node-LatLon":{"lon":-1063831379,"lat":416910073}}},{"delta":{"node-LatLon":{"lon":-1063816138,"lat":416883925}}},{"delta":{"node-LatLon":{"lon":-1063799617,"lat":416858220}}},{"delta":{"node-LatLon":{"lon":-1063781616,"lat":416833080}}},{"delta":{"node-LatLon":{"lon":-1063763325,"lat":416806477}}},{"delta":{"node-LatLon":{"lon":-1063751513,"lat":416777919}}},{"delta":{"node-LatLon":{"lon":-1063743848,"lat":416748530}}},{"delta":{"node-LatLon":{"lon":-1063730315,"lat":416720424}}},{"delta":{"node-LatLon":{"lon":-1063708354,"lat":416695491}}},{"delta":{"node-LatLon":{"lon":-1063680444,"lat":416675556}}},{"delta":{"node-LatLon":{"lon":-1063648291,"lat":416659518}}},{"delta":{"node-LatLon":{"lon":-1063615844,"lat":416643807}}},{"delta":{"node-LatLon":{"lon":-1063583366,"lat":416628132}}},{"delta":{"node-LatLon":{"lon":-1063550917,"lat":416612423}}},{"delta":{"node-LatLon":{"lon":-1063518397,"lat":416596725}}},{"delta":{"node-LatLon":{"lon":-1063485899,"lat":416581001}}},{"delta":{"node-LatLon":{"lon":-1063453403,"lat":416565276}}},{"delta":{"node-LatLon":{"lon":-1063420938,"lat":416549517}}},{"delta":{"node-LatLon":{"lon":-1063388402,"lat":416533840}}},{"delta":{"node-LatLon":{"lon":-1063355954,"lat":416518111}}},{"delta":{"node-LatLon":{"lon":-1063323497,"lat":416502393}}},{"delta":{"node-LatLon":{"lon":-1063291009,"lat":416486712}}},{"delta":{"node-LatLon":{"lon":-1063258568,"lat":416470977}}},{"delta":{"node-LatLon":{"lon":-1063226121,"lat":416455250}}},{"delta":{"node-LatLon":{"lon":-1063191824,"lat":416441408}}},{"delta":{"node-LatLon":{"lon":-1063154787,"lat":416432390}}},{"delta":{"node-LatLon":{"lon":-1063116772,"lat":416425883}}},{"delta":{"node-LatLon":{"lon":-1063078751,"lat":416419398}}},{"delta":{"node-LatLon":{"lon":-1063040728,"lat":416412924}}},{"delta":{"node-LatLon":{"lon":-1063002941,"lat":416406471}}},{"delta":{"node-LatLon":{"lon":-1062965166,"lat":416399984}}},{"delta":{"node-LatLon":{"lon":-1062928900,"lat":416389943}}},{"delta":{"node-LatLon":{"lon":-1062896756,"lat":416373819}}},{"delta":{"node-LatLon":{"lon":-1062867209,"lat":416355008}}},{"delta":{"node-LatLon":{"lon":-1062837900,"lat":416336319}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417245737,"long":-1064616173}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31576}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.102367,"speed":23.16,"longitude":-105.0479669},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":34,"serialNumber":15463,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.653Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31547,"packetID":"0000000000000C4306","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415413487,"long":-1060812632},"name":"westbound_I80_272.06_279.86_SAT-84FB2473_RC_ARLI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060824406,"lat":415424958}}},{"delta":{"node-LatLon":{"lon":-1060836139,"lat":415436453}}},{"delta":{"node-LatLon":{"lon":-1060859605,"lat":415459445}}},{"delta":{"node-LatLon":{"lon":-1060883068,"lat":415482438}}},{"delta":{"node-LatLon":{"lon":-1060906872,"lat":415505231}}},{"delta":{"node-LatLon":{"lon":-1060934236,"lat":415525587}}},{"delta":{"node-LatLon":{"lon":-1060965310,"lat":415542824}}},{"delta":{"node-LatLon":{"lon":-1060996772,"lat":415559666}}},{"delta":{"node-LatLon":{"lon":-1061028237,"lat":415576506}}},{"delta":{"node-LatLon":{"lon":-1061059706,"lat":415593342}}},{"delta":{"node-LatLon":{"lon":-1061092588,"lat":415608515}}},{"delta":{"node-LatLon":{"lon":-1061128419,"lat":415618971}}},{"delta":{"node-LatLon":{"lon":-1061166060,"lat":415624943}}},{"delta":{"node-LatLon":{"lon":-1061203924,"lat":415630154}}},{"delta":{"node-LatLon":{"lon":-1061241795,"lat":415635339}}},{"delta":{"node-LatLon":{"lon":-1061279673,"lat":415640497}}},{"delta":{"node-LatLon":{"lon":-1061317589,"lat":415645644}}},{"delta":{"node-LatLon":{"lon":-1061355497,"lat":415650826}}},{"delta":{"node-LatLon":{"lon":-1061392771,"lat":415657996}}},{"delta":{"node-LatLon":{"lon":-1061427646,"lat":415670204}}},{"delta":{"node-LatLon":{"lon":-1061459115,"lat":415686864}}},{"delta":{"node-LatLon":{"lon":-1061489394,"lat":415704469}}},{"delta":{"node-LatLon":{"lon":-1061519697,"lat":415722052}}},{"delta":{"node-LatLon":{"lon":-1061549992,"lat":415739645}}},{"delta":{"node-LatLon":{"lon":-1061580273,"lat":415757250}}},{"delta":{"node-LatLon":{"lon":-1061610581,"lat":415774831}}},{"delta":{"node-LatLon":{"lon":-1061641248,"lat":415792650}}},{"delta":{"node-LatLon":{"lon":-1061671923,"lat":415810463}}},{"delta":{"node-LatLon":{"lon":-1061702592,"lat":415828282}}},{"delta":{"node-LatLon":{"lon":-1061733271,"lat":415846093}}},{"delta":{"node-LatLon":{"lon":-1061763976,"lat":415863879}}},{"delta":{"node-LatLon":{"lon":-1061794560,"lat":415881656}}},{"delta":{"node-LatLon":{"lon":-1061825730,"lat":415898841}}},{"delta":{"node-LatLon":{"lon":-1061858422,"lat":415914356}}},{"delta":{"node-LatLon":{"lon":-1061891331,"lat":415929615}}},{"delta":{"node-LatLon":{"lon":-1061924211,"lat":415944910}}},{"delta":{"node-LatLon":{"lon":-1061957798,"lat":415960692}}},{"delta":{"node-LatLon":{"lon":-1061992345,"lat":415975173}}},{"delta":{"node-LatLon":{"lon":-1062030986,"lat":415980852}}},{"delta":{"node-LatLon":{"lon":-1062070609,"lat":415981013}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415413487,"long":-1060812632}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31547}},"msgCnt":48}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023589,"speed":23.16,"longitude":-105.048021},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":28,"serialNumber":15457,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31584,"packetID":"0000000000000C776A","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412012058,"long":-1054342550},"name":"westbound_I80_325.78_322.6_SAT-1A7FD750_VSL_V002148","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054353231,"lat":412023546}}},{"delta":{"node-LatLon":{"lon":-1054363915,"lat":412035033}}},{"delta":{"node-LatLon":{"lon":-1054374628,"lat":412046505}}},{"delta":{"node-LatLon":{"lon":-1054384730,"lat":412058284}}},{"delta":{"node-LatLon":{"lon":-1054393246,"lat":412070758}}},{"delta":{"node-LatLon":{"lon":-1054401396,"lat":412083376}}},{"delta":{"node-LatLon":{"lon":-1054408178,"lat":412096432}}},{"delta":{"node-LatLon":{"lon":-1054411451,"lat":412110222}}},{"delta":{"node-LatLon":{"lon":-1054410494,"lat":412124215}}},{"delta":{"node-LatLon":{"lon":-1054406258,"lat":412138313}}},{"delta":{"node-LatLon":{"lon":-1054401538,"lat":412152329}}},{"delta":{"node-LatLon":{"lon":-1054396763,"lat":412166333}}},{"delta":{"node-LatLon":{"lon":-1054391999,"lat":412180340}}},{"delta":{"node-LatLon":{"lon":-1054387248,"lat":412194350}}},{"delta":{"node-LatLon":{"lon":-1054382654,"lat":412208387}}},{"delta":{"node-LatLon":{"lon":-1054380050,"lat":412222697}}},{"delta":{"node-LatLon":{"lon":-1054380942,"lat":412237122}}},{"delta":{"node-LatLon":{"lon":-1054384055,"lat":412251390}}},{"delta":{"node-LatLon":{"lon":-1054387241,"lat":412265649}}},{"delta":{"node-LatLon":{"lon":-1054387713,"lat":412280108}}},{"delta":{"node-LatLon":{"lon":-1054383702,"lat":412294247}}},{"delta":{"node-LatLon":{"lon":-1054376516,"lat":412307678}}},{"delta":{"node-LatLon":{"lon":-1054369571,"lat":412321177}}},{"delta":{"node-LatLon":{"lon":-1054366196,"lat":412335412}}},{"delta":{"node-LatLon":{"lon":-1054366933,"lat":412349870}}},{"delta":{"node-LatLon":{"lon":-1054369671,"lat":412364212}}},{"delta":{"node-LatLon":{"lon":-1054372542,"lat":412378541}}},{"delta":{"node-LatLon":{"lon":-1054376265,"lat":412392751}}},{"delta":{"node-LatLon":{"lon":-1054381673,"lat":412406651}}},{"delta":{"node-LatLon":{"lon":-1054388532,"lat":412420113}}},{"delta":{"node-LatLon":{"lon":-1054396624,"lat":412433185}}},{"delta":{"node-LatLon":{"lon":-1054404781,"lat":412446234}}},{"delta":{"node-LatLon":{"lon":-1054412998,"lat":412459262}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1000000000000011}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412012058,"long":-1054342550}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31584}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023589,"speed":23.16,"longitude":-105.048021},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":31,"serialNumber":15460,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.553Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31547,"packetID":"0000000000000EA327","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416355008,"long":-1062867209},"name":"eastbound_I80_267.19_272.06_SAT-7ECE7CF3_RC_ARLI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062852549,"lat":416345669}}},{"delta":{"node-LatLon":{"lon":-1062837900,"lat":416336319}}},{"delta":{"node-LatLon":{"lon":-1062823256,"lat":416326967}}},{"delta":{"node-LatLon":{"lon":-1062808616,"lat":416317611}}},{"delta":{"node-LatLon":{"lon":-1062793947,"lat":416308280}}},{"delta":{"node-LatLon":{"lon":-1062778698,"lat":416299496}}},{"delta":{"node-LatLon":{"lon":-1062762456,"lat":416291782}}},{"delta":{"node-LatLon":{"lon":-1062745352,"lat":416285198}}},{"delta":{"node-LatLon":{"lon":-1062727519,"lat":416279817}}},{"delta":{"node-LatLon":{"lon":-1062709133,"lat":416275605}}},{"delta":{"node-LatLon":{"lon":-1062690294,"lat":416271928}}},{"delta":{"node-LatLon":{"lon":-1062671455,"lat":416268251}}},{"delta":{"node-LatLon":{"lon":-1062652620,"lat":416264564}}},{"delta":{"node-LatLon":{"lon":-1062633771,"lat":416260915}}},{"delta":{"node-LatLon":{"lon":-1062614940,"lat":416257216}}},{"delta":{"node-LatLon":{"lon":-1062596100,"lat":416253544}}},{"delta":{"node-LatLon":{"lon":-1062577255,"lat":416249886}}},{"delta":{"node-LatLon":{"lon":-1062558417,"lat":416246209}}},{"delta":{"node-LatLon":{"lon":-1062539573,"lat":416242549}}},{"delta":{"node-LatLon":{"lon":-1062520744,"lat":416238847}}},{"delta":{"node-LatLon":{"lon":-1062501815,"lat":416235141}}},{"delta":{"node-LatLon":{"lon":-1062482895,"lat":416231412}}},{"delta":{"node-LatLon":{"lon":-1062464244,"lat":416227007}}},{"delta":{"node-LatLon":{"lon":-1062446311,"lat":416221159}}},{"delta":{"node-LatLon":{"lon":-1062429289,"lat":416213939}}},{"delta":{"node-LatLon":{"lon":-1062413350,"lat":416205439}}},{"delta":{"node-LatLon":{"lon":-1062398699,"lat":416195722}}},{"delta":{"node-LatLon":{"lon":-1062385484,"lat":416184907}}},{"delta":{"node-LatLon":{"lon":-1062373783,"lat":416173151}}},{"delta":{"node-LatLon":{"lon":-1062363439,"lat":416160690}}},{"delta":{"node-LatLon":{"lon":-1062353839,"lat":416148895}}},{"delta":{"node-LatLon":{"lon":-1062344200,"lat":416137119}}},{"delta":{"node-LatLon":{"lon":-1062334576,"lat":416125335}}},{"delta":{"node-LatLon":{"lon":-1062324886,"lat":416113582}}},{"delta":{"node-LatLon":{"lon":-1062315283,"lat":416101788}}},{"delta":{"node-LatLon":{"lon":-1062305674,"lat":416089998}}},{"delta":{"node-LatLon":{"lon":-1062296038,"lat":416078220}}},{"delta":{"node-LatLon":{"lon":-1062286421,"lat":416066433}}},{"delta":{"node-LatLon":{"lon":-1062276808,"lat":416054645}}},{"delta":{"node-LatLon":{"lon":-1062267158,"lat":416042874}}},{"delta":{"node-LatLon":{"lon":-1062257093,"lat":416030536}}},{"delta":{"node-LatLon":{"lon":-1062246994,"lat":416018215}}},{"delta":{"node-LatLon":{"lon":-1062236012,"lat":416006340}}},{"delta":{"node-LatLon":{"lon":-1062222613,"lat":415995969}}},{"delta":{"node-LatLon":{"lon":-1062206968,"lat":415987559}}},{"delta":{"node-LatLon":{"lon":-1062189595,"lat":415981343}}},{"delta":{"node-LatLon":{"lon":-1062171008,"lat":415977603}}},{"delta":{"node-LatLon":{"lon":-1062151833,"lat":415976346}}},{"delta":{"node-LatLon":{"lon":-1062132565,"lat":415976300}}},{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062093782,"lat":415976349}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416355008,"long":-1062867209}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31547}},"msgCnt":42}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023589,"speed":23.16,"longitude":-105.048021},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":30,"serialNumber":15459,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31410,"packetID":"000000000000052CAD","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416762809,"long":-1079776048},"name":"westbound_I80_158.55_173.41_SAT-53B47E1D_RC_WAMI80WD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1079792654,"lat":416755214}}},{"delta":{"node-LatLon":{"lon":-1079842491,"lat":416732454}}},{"delta":{"node-LatLon":{"lon":-1079913673,"lat":416710891}}},{"delta":{"node-LatLon":{"lon":-1079988998,"lat":416700558}}},{"delta":{"node-LatLon":{"lon":-1080064380,"lat":416690465}}},{"delta":{"node-LatLon":{"lon":-1080140410,"lat":416680262}}},{"delta":{"node-LatLon":{"lon":-1080216433,"lat":416670036}}},{"delta":{"node-LatLon":{"lon":-1080292501,"lat":416659806}}},{"delta":{"node-LatLon":{"lon":-1080368608,"lat":416649545}}},{"delta":{"node-LatLon":{"lon":-1080444725,"lat":416639329}}},{"delta":{"node-LatLon":{"lon":-1080520774,"lat":416629083}}},{"delta":{"node-LatLon":{"lon":-1080596810,"lat":416618789}}},{"delta":{"node-LatLon":{"lon":-1080672394,"lat":416608577}}},{"delta":{"node-LatLon":{"lon":-1080747529,"lat":416598458}}},{"delta":{"node-LatLon":{"lon":-1080822654,"lat":416588304}}},{"delta":{"node-LatLon":{"lon":-1080898633,"lat":416578054}}},{"delta":{"node-LatLon":{"lon":-1080974597,"lat":416567750}}},{"delta":{"node-LatLon":{"lon":-1081050829,"lat":416557420}}},{"delta":{"node-LatLon":{"lon":-1081127325,"lat":416547044}}},{"delta":{"node-LatLon":{"lon":-1081203413,"lat":416535198}}},{"delta":{"node-LatLon":{"lon":-1081277846,"lat":416519549}}},{"delta":{"node-LatLon":{"lon":-1081352245,"lat":416503811}}},{"delta":{"node-LatLon":{"lon":-1081426652,"lat":416488040}}},{"delta":{"node-LatLon":{"lon":-1081501076,"lat":416472261}}},{"delta":{"node-LatLon":{"lon":-1081575983,"lat":416457952}}},{"delta":{"node-LatLon":{"lon":-1081652109,"lat":416449993}}},{"delta":{"node-LatLon":{"lon":-1081728290,"lat":416442318}}},{"delta":{"node-LatLon":{"lon":-1081805260,"lat":416434541}}},{"delta":{"node-LatLon":{"lon":-1081883037,"lat":416426768}}},{"delta":{"node-LatLon":{"lon":-1081960802,"lat":416418934}}},{"delta":{"node-LatLon":{"lon":-1082036873,"lat":416411275}}},{"delta":{"node-LatLon":{"lon":-1082112938,"lat":416403591}}},{"delta":{"node-LatLon":{"lon":-1082188943,"lat":416395924}}},{"delta":{"node-LatLon":{"lon":-1082264890,"lat":416388279}}},{"delta":{"node-LatLon":{"lon":-1082340832,"lat":416380614}}},{"delta":{"node-LatLon":{"lon":-1082416741,"lat":416370373}}},{"delta":{"node-LatLon":{"lon":-1082492308,"lat":416358699}}},{"delta":{"node-LatLon":{"lon":-1082567978,"lat":416347001}}},{"delta":{"node-LatLon":{"lon":-1082624827,"lat":416338280}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000110000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416762809,"long":-1079776048}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31410}},"msgCnt":44}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2079,"heading":78.75,"latitude":41.1023589,"speed":23.16,"longitude":-105.048021},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":29,"serialNumber":15458,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31410,"packetID":"00000000000006E136","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416331711,"long":-1082645377},"name":"eastbound_I80_158.55_173.41_SAT-C560983B_RC_WAMI80WI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1082626530,"lat":416334663}}},{"delta":{"node-LatLon":{"lon":-1082569940,"lat":416343338}}},{"delta":{"node-LatLon":{"lon":-1082494293,"lat":416355057}}},{"delta":{"node-LatLon":{"lon":-1082418408,"lat":416366766}}},{"delta":{"node-LatLon":{"lon":-1082342222,"lat":416377204}}},{"delta":{"node-LatLon":{"lon":-1082266189,"lat":416384835}}},{"delta":{"node-LatLon":{"lon":-1082190159,"lat":416392484}}},{"delta":{"node-LatLon":{"lon":-1082114130,"lat":416400151}}},{"delta":{"node-LatLon":{"lon":-1082038109,"lat":416407878}}},{"delta":{"node-LatLon":{"lon":-1081962071,"lat":416415513}}},{"delta":{"node-LatLon":{"lon":-1081884585,"lat":416423333}}},{"delta":{"node-LatLon":{"lon":-1081807099,"lat":416431159}}},{"delta":{"node-LatLon":{"lon":-1081730361,"lat":416438843}}},{"delta":{"node-LatLon":{"lon":-1081654390,"lat":416446481}}},{"delta":{"node-LatLon":{"lon":-1081578471,"lat":416454403}}},{"delta":{"node-LatLon":{"lon":-1081503389,"lat":416468376}}},{"delta":{"node-LatLon":{"lon":-1081428908,"lat":416484193}}},{"delta":{"node-LatLon":{"lon":-1081354605,"lat":416499942}}},{"delta":{"node-LatLon":{"lon":-1081280498,"lat":416515672}}},{"delta":{"node-LatLon":{"lon":-1081206345,"lat":416531284}}},{"delta":{"node-LatLon":{"lon":-1081130243,"lat":416543380}}},{"delta":{"node-LatLon":{"lon":-1081053650,"lat":416553747}}},{"delta":{"node-LatLon":{"lon":-1080977254,"lat":416564119}}},{"delta":{"node-LatLon":{"lon":-1080901037,"lat":416574429}}},{"delta":{"node-LatLon":{"lon":-1080824822,"lat":416584754}}},{"delta":{"node-LatLon":{"lon":-1080749783,"lat":416594899}}},{"delta":{"node-LatLon":{"lon":-1080674747,"lat":416605063}}},{"delta":{"node-LatLon":{"lon":-1080599110,"lat":416615260}}},{"delta":{"node-LatLon":{"lon":-1080522881,"lat":416625527}}},{"delta":{"node-LatLon":{"lon":-1080446654,"lat":416635808}}},{"delta":{"node-LatLon":{"lon":-1080370892,"lat":416645963}}},{"delta":{"node-LatLon":{"lon":-1080295134,"lat":416656136}}},{"delta":{"node-LatLon":{"lon":-1080219094,"lat":416666380}}},{"delta":{"node-LatLon":{"lon":-1080142771,"lat":416676687}}},{"delta":{"node-LatLon":{"lon":-1080066436,"lat":416686950}}},{"delta":{"node-LatLon":{"lon":-1079990643,"lat":416697179}}},{"delta":{"node-LatLon":{"lon":-1079914851,"lat":416707417}}},{"delta":{"node-LatLon":{"lon":-1079842371,"lat":416727176}}},{"delta":{"node-LatLon":{"lon":-1079792300,"lat":416749998}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0011000000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416331711,"long":-1082645377}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5895}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31410}},"msgCnt":42}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.7625,"latitude":41.1023509,"speed":22.96,"longitude":-105.048075},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":27,"serialNumber":15456,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31413,"packetID":"0000000000000974CF","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411380266,"long":-1053516546},"name":"westbound_I80_332.29_328.74_SAT-33F06F41_VSL_V002179","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053530152,"lat":411390760}}},{"delta":{"node-LatLon":{"lon":-1053544178,"lat":411400926}}},{"delta":{"node-LatLon":{"lon":-1053559400,"lat":411410052}}},{"delta":{"node-LatLon":{"lon":-1053575650,"lat":411418098}}},{"delta":{"node-LatLon":{"lon":-1053593540,"lat":411425178}}},{"delta":{"node-LatLon":{"lon":-1053612259,"lat":411430899}}},{"delta":{"node-LatLon":{"lon":-1053631611,"lat":411435251}}},{"delta":{"node-LatLon":{"lon":-1053651429,"lat":411438163}}},{"delta":{"node-LatLon":{"lon":-1053671518,"lat":411439715}}},{"delta":{"node-LatLon":{"lon":-1053691660,"lat":411440843}}},{"delta":{"node-LatLon":{"lon":-1053711798,"lat":411442014}}},{"delta":{"node-LatLon":{"lon":-1053731780,"lat":411444206}}},{"delta":{"node-LatLon":{"lon":-1053751386,"lat":411447856}}},{"delta":{"node-LatLon":{"lon":-1053770441,"lat":411452906}}},{"delta":{"node-LatLon":{"lon":-1053788278,"lat":411458052}}},{"delta":{"node-LatLon":{"lon":-1053806111,"lat":411463205}}},{"delta":{"node-LatLon":{"lon":-1053823914,"lat":411468418}}},{"delta":{"node-LatLon":{"lon":-1053841210,"lat":411474512}}},{"delta":{"node-LatLon":{"lon":-1053857700,"lat":411481776}}},{"delta":{"node-LatLon":{"lon":-1053873524,"lat":411489854}}},{"delta":{"node-LatLon":{"lon":-1053889263,"lat":411498027}}},{"delta":{"node-LatLon":{"lon":-1053905019,"lat":411506182}}},{"delta":{"node-LatLon":{"lon":-1053920800,"lat":411514309}}},{"delta":{"node-LatLon":{"lon":-1053936557,"lat":411522463}}},{"delta":{"node-LatLon":{"lon":-1053951905,"lat":411530400}}},{"delta":{"node-LatLon":{"lon":-1053967181,"lat":411538416}}},{"delta":{"node-LatLon":{"lon":-1053982070,"lat":411546836}}},{"delta":{"node-LatLon":{"lon":-1053996450,"lat":411555749}}},{"delta":{"node-LatLon":{"lon":-1054010245,"lat":411565176}}},{"delta":{"node-LatLon":{"lon":-1054023504,"lat":411575034}}},{"delta":{"node-LatLon":{"lon":-1054036337,"lat":411585207}}},{"delta":{"node-LatLon":{"lon":-1054048431,"lat":411595888}}},{"delta":{"node-LatLon":{"lon":-1054059788,"lat":411607021}}},{"delta":{"node-LatLon":{"lon":-1054070551,"lat":411618485}}},{"delta":{"node-LatLon":{"lon":-1054080907,"lat":411630774}}},{"delta":{"node-LatLon":{"lon":-1054090598,"lat":411643369}}},{"delta":{"node-LatLon":{"lon":-1054099821,"lat":411656166}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411380266,"long":-1053516546}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31413}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.7625,"latitude":41.1023509,"speed":22.96,"longitude":-105.048075},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":26,"serialNumber":15455,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31529,"packetID":"000000000000067287","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411261912,"long":-1053190756},"name":"westbound_I80_334.3_332.29_SAT-7CB2A0D8_VSL_V002205","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053209808,"lat":411263198}}},{"delta":{"node-LatLon":{"lon":-1053228859,"lat":411264489}}},{"delta":{"node-LatLon":{"lon":-1053247874,"lat":411266056}}},{"delta":{"node-LatLon":{"lon":-1053266797,"lat":411268154}}},{"delta":{"node-LatLon":{"lon":-1053284753,"lat":411270823}}},{"delta":{"node-LatLon":{"lon":-1053302624,"lat":411273801}}},{"delta":{"node-LatLon":{"lon":-1053320485,"lat":411276816}}},{"delta":{"node-LatLon":{"lon":-1053338337,"lat":411279861}}},{"delta":{"node-LatLon":{"lon":-1053356049,"lat":411283332}}},{"delta":{"node-LatLon":{"lon":-1053373293,"lat":411287955}}},{"delta":{"node-LatLon":{"lon":-1053389921,"lat":411293728}}},{"delta":{"node-LatLon":{"lon":-1053405816,"lat":411300582}}},{"delta":{"node-LatLon":{"lon":-1053420870,"lat":411308448}}},{"delta":{"node-LatLon":{"lon":-1053434927,"lat":411317306}}},{"delta":{"node-LatLon":{"lon":-1053448810,"lat":411327586}}},{"delta":{"node-LatLon":{"lon":-1053462344,"lat":411338132}}},{"delta":{"node-LatLon":{"lon":-1053475910,"lat":411348654}}},{"delta":{"node-LatLon":{"lon":-1053489459,"lat":411359188}}},{"delta":{"node-LatLon":{"lon":-1053503009,"lat":411369723}}},{"delta":{"node-LatLon":{"lon":-1053516546,"lat":411380266}}},{"delta":{"node-LatLon":{"lon":-1053530152,"lat":411390760}}},{"delta":{"node-LatLon":{"lon":-1053544178,"lat":411400926}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411261912,"long":-1053190756}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31529}},"msgCnt":25}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.7625,"latitude":41.1023469,"speed":22.96,"longitude":-105.0481018},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":25,"serialNumber":15454,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.152Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31413,"packetID":"000000000000021245","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412730636,"long":-1055022420},"name":"westbound_I80_318.5_316.0_SAT-A649856C_VSL_V003668","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1055038524,"lat":412737393}}},{"delta":{"node-LatLon":{"lon":-1055054603,"lat":412744185}}},{"delta":{"node-LatLon":{"lon":-1055070731,"lat":412750911}}},{"delta":{"node-LatLon":{"lon":-1055086830,"lat":412757675}}},{"delta":{"node-LatLon":{"lon":-1055102919,"lat":412764454}}},{"delta":{"node-LatLon":{"lon":-1055119050,"lat":412771172}}},{"delta":{"node-LatLon":{"lon":-1055134655,"lat":412779343}}},{"delta":{"node-LatLon":{"lon":-1055148584,"lat":412789095}}},{"delta":{"node-LatLon":{"lon":-1055160661,"lat":412800171}}},{"delta":{"node-LatLon":{"lon":-1055171718,"lat":412811853}}},{"delta":{"node-LatLon":{"lon":-1055182800,"lat":412823521}}},{"delta":{"node-LatLon":{"lon":-1055193934,"lat":412835162}}},{"delta":{"node-LatLon":{"lon":-1055205033,"lat":412846820}}},{"delta":{"node-LatLon":{"lon":-1055216089,"lat":412858504}}},{"delta":{"node-LatLon":{"lon":-1055227100,"lat":412870211}}},{"delta":{"node-LatLon":{"lon":-1055238096,"lat":412881927}}},{"delta":{"node-LatLon":{"lon":-1055249775,"lat":412893620}}},{"delta":{"node-LatLon":{"lon":-1055264147,"lat":412903395}}},{"delta":{"node-LatLon":{"lon":-1055281500,"lat":412909856}}},{"delta":{"node-LatLon":{"lon":-1055300530,"lat":412912497}}},{"delta":{"node-LatLon":{"lon":-1055319936,"lat":412912720}}},{"delta":{"node-LatLon":{"lon":-1055339348,"lat":412912757}}},{"delta":{"node-LatLon":{"lon":-1055358760,"lat":412912763}}},{"delta":{"node-LatLon":{"lon":-1055378172,"lat":412912749}}},{"delta":{"node-LatLon":{"lon":-1055397583,"lat":412912794}}},{"delta":{"node-LatLon":{"lon":-1055416995,"lat":412912799}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412730636,"long":-1055022420}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31413}},"msgCnt":16}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.8,"latitude":41.1023428,"speed":22.84,"longitude":-105.0481287},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":24,"serialNumber":15453,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.152Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31529,"packetID":"000000000000074F73","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411295468,"long":-1053412343},"name":"eastbound_I80_333.32_336.16_SAT-04EA5301_VSL_V002192","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053397283,"lat":411286440}}},{"delta":{"node-LatLon":{"lon":-1053381215,"lat":411278476}}},{"delta":{"node-LatLon":{"lon":-1053364267,"lat":411271631}}},{"delta":{"node-LatLon":{"lon":-1053346537,"lat":411266040}}},{"delta":{"node-LatLon":{"lon":-1053328222,"lat":411261661}}},{"delta":{"node-LatLon":{"lon":-1053309440,"lat":411258607}}},{"delta":{"node-LatLon":{"lon":-1053290366,"lat":411256889}}},{"delta":{"node-LatLon":{"lon":-1053271167,"lat":411256326}}},{"delta":{"node-LatLon":{"lon":-1053252031,"lat":411256011}}},{"delta":{"node-LatLon":{"lon":-1053232894,"lat":411255714}}},{"delta":{"node-LatLon":{"lon":-1053213757,"lat":411255411}}},{"delta":{"node-LatLon":{"lon":-1053194621,"lat":411255101}}},{"delta":{"node-LatLon":{"lon":-1053175485,"lat":411254779}}},{"delta":{"node-LatLon":{"lon":-1053156349,"lat":411254454}}},{"delta":{"node-LatLon":{"lon":-1053137212,"lat":411254156}}},{"delta":{"node-LatLon":{"lon":-1053118075,"lat":411253866}}},{"delta":{"node-LatLon":{"lon":-1053098943,"lat":411253445}}},{"delta":{"node-LatLon":{"lon":-1053079915,"lat":411251929}}},{"delta":{"node-LatLon":{"lon":-1053061014,"lat":411249645}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}},{"delta":{"node-LatLon":{"lon":-1053023237,"lat":411244960}}},{"delta":{"node-LatLon":{"lon":-1053004357,"lat":411242579}}},{"delta":{"node-LatLon":{"lon":-1052985469,"lat":411240234}}},{"delta":{"node-LatLon":{"lon":-1052966667,"lat":411237536}}},{"delta":{"node-LatLon":{"lon":-1052948155,"lat":411233869}}},{"delta":{"node-LatLon":{"lon":-1052930037,"lat":411229208}}},{"delta":{"node-LatLon":{"lon":-1052912393,"lat":411223601}}},{"delta":{"node-LatLon":{"lon":-1052895308,"lat":411217079}}},{"delta":{"node-LatLon":{"lon":-1052878140,"lat":411209333}}},{"delta":{"node-LatLon":{"lon":-1052861535,"lat":411200909}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411295468,"long":-1053412343}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12609}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31529}},"msgCnt":23}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.8,"latitude":41.1023428,"speed":22.84,"longitude":-105.0481287},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":23,"serialNumber":15452,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.052Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31475,"packetID":"0000000000000C3025","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411544031,"long":-1053986991},"name":"eastbound_I80_329.88_333.32_SAT-B0A8A48A_VSL_V002170","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053971893,"lat":411535445}}},{"delta":{"node-LatLon":{"lon":-1053956403,"lat":411527267}}},{"delta":{"node-LatLon":{"lon":-1053940802,"lat":411519210}}},{"delta":{"node-LatLon":{"lon":-1053925020,"lat":411511050}}},{"delta":{"node-LatLon":{"lon":-1053909255,"lat":411502872}}},{"delta":{"node-LatLon":{"lon":-1053893491,"lat":411494693}}},{"delta":{"node-LatLon":{"lon":-1053877704,"lat":411486540}}},{"delta":{"node-LatLon":{"lon":-1053861842,"lat":411478470}}},{"delta":{"node-LatLon":{"lon":-1053845388,"lat":411471122}}},{"delta":{"node-LatLon":{"lon":-1053828169,"lat":411464855}}},{"delta":{"node-LatLon":{"lon":-1053810387,"lat":411459552}}},{"delta":{"node-LatLon":{"lon":-1053792523,"lat":411454408}}},{"delta":{"node-LatLon":{"lon":-1053774674,"lat":411449233}}},{"delta":{"node-LatLon":{"lon":-1053756865,"lat":411444076}}},{"delta":{"node-LatLon":{"lon":-1053739051,"lat":411438927}}},{"delta":{"node-LatLon":{"lon":-1053721237,"lat":411433777}}},{"delta":{"node-LatLon":{"lon":-1053703432,"lat":411428613}}},{"delta":{"node-LatLon":{"lon":-1053685615,"lat":411423471}}},{"delta":{"node-LatLon":{"lon":-1053667804,"lat":411418317}}},{"delta":{"node-LatLon":{"lon":-1053649988,"lat":411413175}}},{"delta":{"node-LatLon":{"lon":-1053632183,"lat":411408010}}},{"delta":{"node-LatLon":{"lon":-1053614378,"lat":411402847}}},{"delta":{"node-LatLon":{"lon":-1053596576,"lat":411397677}}},{"delta":{"node-LatLon":{"lon":-1053578772,"lat":411392366}}},{"delta":{"node-LatLon":{"lon":-1053561555,"lat":411386056}}},{"delta":{"node-LatLon":{"lon":-1053545194,"lat":411378553}}},{"delta":{"node-LatLon":{"lon":-1053529834,"lat":411369925}}},{"delta":{"node-LatLon":{"lon":-1053515122,"lat":411360665}}},{"delta":{"node-LatLon":{"lon":-1053500460,"lat":411351359}}},{"delta":{"node-LatLon":{"lon":-1053485794,"lat":411342057}}},{"delta":{"node-LatLon":{"lon":-1053471129,"lat":411332755}}},{"delta":{"node-LatLon":{"lon":-1053456470,"lat":411323446}}},{"delta":{"node-LatLon":{"lon":-1053441803,"lat":411314147}}},{"delta":{"node-LatLon":{"lon":-1053427082,"lat":411304799}}},{"delta":{"node-LatLon":{"lon":-1053412343,"lat":411295468}}},{"delta":{"node-LatLon":{"lon":-1053397283,"lat":411286440}}},{"delta":{"node-LatLon":{"lon":-1053381215,"lat":411278476}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411544031,"long":-1053986991}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31475}},"msgCnt":21}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9,"latitude":41.1023389,"speed":22.8,"longitude":-105.0481553},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":22,"serialNumber":15451,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:08.052Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31584,"packetID":"0000000000000D2C74","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412034419,"long":-1054370810},"name":"eastbound_I80_325.82_329.88_SAT-99766A8D_VSL_V002155","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054359947,"lat":412022723}}},{"delta":{"node-LatLon":{"lon":-1054349054,"lat":412011044}}},{"delta":{"node-LatLon":{"lon":-1054338178,"lat":411999356}}},{"delta":{"node-LatLon":{"lon":-1054327183,"lat":411987515}}},{"delta":{"node-LatLon":{"lon":-1054316162,"lat":411975689}}},{"delta":{"node-LatLon":{"lon":-1054305136,"lat":411963865}}},{"delta":{"node-LatLon":{"lon":-1054294112,"lat":411952041}}},{"delta":{"node-LatLon":{"lon":-1054283086,"lat":411940217}}},{"delta":{"node-LatLon":{"lon":-1054272088,"lat":411928378}}},{"delta":{"node-LatLon":{"lon":-1054261070,"lat":411916551}}},{"delta":{"node-LatLon":{"lon":-1054250145,"lat":411904675}}},{"delta":{"node-LatLon":{"lon":-1054240737,"lat":411892089}}},{"delta":{"node-LatLon":{"lon":-1054233306,"lat":411878767}}},{"delta":{"node-LatLon":{"lon":-1054228088,"lat":411864884}}},{"delta":{"node-LatLon":{"lon":-1054224664,"lat":411850678}}},{"delta":{"node-LatLon":{"lon":-1054221515,"lat":411836434}}},{"delta":{"node-LatLon":{"lon":-1054217864,"lat":411822261}}},{"delta":{"node-LatLon":{"lon":-1054212576,"lat":411808389}}},{"delta":{"node-LatLon":{"lon":-1054205670,"lat":411794929}}},{"delta":{"node-LatLon":{"lon":-1054197171,"lat":411782001}}},{"delta":{"node-LatLon":{"lon":-1054188029,"lat":411769320}}},{"delta":{"node-LatLon":{"lon":-1054178851,"lat":411756655}}},{"delta":{"node-LatLon":{"lon":-1054169702,"lat":411743977}}},{"delta":{"node-LatLon":{"lon":-1054160547,"lat":411731223}}},{"delta":{"node-LatLon":{"lon":-1054151325,"lat":411718495}}},{"delta":{"node-LatLon":{"lon":-1054142157,"lat":411705746}}},{"delta":{"node-LatLon":{"lon":-1054132917,"lat":411693026}}},{"delta":{"node-LatLon":{"lon":-1054123777,"lat":411680265}}},{"delta":{"node-LatLon":{"lon":-1054114539,"lat":411667545}}},{"delta":{"node-LatLon":{"lon":-1054105341,"lat":411654808}}},{"delta":{"node-LatLon":{"lon":-1054096134,"lat":411642075}}},{"delta":{"node-LatLon":{"lon":-1054086588,"lat":411629487}}},{"delta":{"node-LatLon":{"lon":-1054076298,"lat":411617239}}},{"delta":{"node-LatLon":{"lon":-1054065465,"lat":411605534}}},{"delta":{"node-LatLon":{"lon":-1054053933,"lat":411594218}}},{"delta":{"node-LatLon":{"lon":-1054041764,"lat":411583290}}},{"delta":{"node-LatLon":{"lon":-1054029028,"lat":411572740}}},{"delta":{"node-LatLon":{"lon":-1054015535,"lat":411562740}}},{"delta":{"node-LatLon":{"lon":-1054001524,"lat":411553158}}},{"delta":{"node-LatLon":{"lon":-1053986991,"lat":411544031}}},{"delta":{"node-LatLon":{"lon":-1053971893,"lat":411535445}}},{"delta":{"node-LatLon":{"lon":-1053956403,"lat":411527267}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000011100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412034419,"long":-1054370810}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31584}},"msgCnt":23}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9,"latitude":41.1023389,"speed":22.8,"longitude":-105.0481553},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":21,"serialNumber":15450,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.952Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31413,"packetID":"0000000000000F6CF3","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412309017,"long":-1054379125},"name":"eastbound_I80_323.85_325.82_SAT-0405F53D_VSL_V002136","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1054386377,"lat":412295717}}},{"delta":{"node-LatLon":{"lon":-1054390587,"lat":412281719}}},{"delta":{"node-LatLon":{"lon":-1054390501,"lat":412267361}}},{"delta":{"node-LatLon":{"lon":-1054387340,"lat":412253070}}},{"delta":{"node-LatLon":{"lon":-1054384188,"lat":412238776}}},{"delta":{"node-LatLon":{"lon":-1054383083,"lat":412224323}}},{"delta":{"node-LatLon":{"lon":-1054385250,"lat":412209941}}},{"delta":{"node-LatLon":{"lon":-1054389797,"lat":412195863}}},{"delta":{"node-LatLon":{"lon":-1054394498,"lat":412181812}}},{"delta":{"node-LatLon":{"lon":-1054399238,"lat":412167769}}},{"delta":{"node-LatLon":{"lon":-1054403962,"lat":412153723}}},{"delta":{"node-LatLon":{"lon":-1054408711,"lat":412139682}}},{"delta":{"node-LatLon":{"lon":-1054413260,"lat":412125813}}},{"delta":{"node-LatLon":{"lon":-1054415782,"lat":412111677}}},{"delta":{"node-LatLon":{"lon":-1054414034,"lat":412097480}}},{"delta":{"node-LatLon":{"lon":-1054408252,"lat":412083905}}},{"delta":{"node-LatLon":{"lon":-1054400204,"lat":412070975}}},{"delta":{"node-LatLon":{"lon":-1054391746,"lat":412058198}}},{"delta":{"node-LatLon":{"lon":-1054381691,"lat":412046104}}},{"delta":{"node-LatLon":{"lon":-1054370810,"lat":412034419}}},{"delta":{"node-LatLon":{"lon":-1054359947,"lat":412022723}}},{"delta":{"node-LatLon":{"lon":-1054349054,"lat":412011044}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000001110000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412309017,"long":-1054379125}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12599}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31413}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9,"latitude":41.1023349,"speed":22.72,"longitude":-105.0481818},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":20,"serialNumber":15449,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.997Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":24569,"packetID":"000000000000031CC6","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414407115,"long":-1059458100},"name":"eastbound_I80_290.44_313.19_SAT-60A2FC8C_RC_LARI80WQDHLI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059365846,"lat":414393512}}},{"delta":{"node-LatLon":{"lon":-1059291346,"lat":414382504}}},{"delta":{"node-LatLon":{"lon":-1059216139,"lat":414371403}}},{"delta":{"node-LatLon":{"lon":-1059140930,"lat":414360321}}},{"delta":{"node-LatLon":{"lon":-1059066277,"lat":414349272}}},{"delta":{"node-LatLon":{"lon":-1058991615,"lat":414338261}}},{"delta":{"node-LatLon":{"lon":-1058917936,"lat":414323988}}},{"delta":{"node-LatLon":{"lon":-1058850449,"lat":414297022}}},{"delta":{"node-LatLon":{"lon":-1058783417,"lat":414269380}}},{"delta":{"node-LatLon":{"lon":-1058716328,"lat":414241773}}},{"delta":{"node-LatLon":{"lon":-1058649253,"lat":414214149}}},{"delta":{"node-LatLon":{"lon":-1058581712,"lat":414186261}}},{"delta":{"node-LatLon":{"lon":-1058513627,"lat":414158213}}},{"delta":{"node-LatLon":{"lon":-1058445557,"lat":414130150}}},{"delta":{"node-LatLon":{"lon":-1058380711,"lat":414099504}}},{"delta":{"node-LatLon":{"lon":-1058332454,"lat":414054913}}},{"delta":{"node-LatLon":{"lon":-1058291219,"lat":414005996}}},{"delta":{"node-LatLon":{"lon":-1058249903,"lat":413956936}}},{"delta":{"node-LatLon":{"lon":-1058208508,"lat":413907914}}},{"delta":{"node-LatLon":{"lon":-1058167409,"lat":413859113}}},{"delta":{"node-LatLon":{"lon":-1058121254,"lat":413813192}}},{"delta":{"node-LatLon":{"lon":-1058059188,"lat":413779109}}},{"delta":{"node-LatLon":{"lon":-1057994981,"lat":413746928}}},{"delta":{"node-LatLon":{"lon":-1057930809,"lat":413714712}}},{"delta":{"node-LatLon":{"lon":-1057867697,"lat":413683015}}},{"delta":{"node-LatLon":{"lon":-1057804579,"lat":413651328}}},{"delta":{"node-LatLon":{"lon":-1057737049,"lat":413623514}}},{"delta":{"node-LatLon":{"lon":-1057662967,"lat":413603704}}},{"delta":{"node-LatLon":{"lon":-1057588887,"lat":413583895}}},{"delta":{"node-LatLon":{"lon":-1057516296,"lat":413564544}}},{"delta":{"node-LatLon":{"lon":-1057443317,"lat":413546135}}},{"delta":{"node-LatLon":{"lon":-1057367878,"lat":413535221}}},{"delta":{"node-LatLon":{"lon":-1057292600,"lat":413524353}}},{"delta":{"node-LatLon":{"lon":-1057217299,"lat":413513586}}},{"delta":{"node-LatLon":{"lon":-1057141027,"lat":413502656}}},{"delta":{"node-LatLon":{"lon":-1057064747,"lat":413491760}}},{"delta":{"node-LatLon":{"lon":-1056989068,"lat":413498824}}},{"delta":{"node-LatLon":{"lon":-1056912831,"lat":413504721}}},{"delta":{"node-LatLon":{"lon":-1056835658,"lat":413504909}}},{"delta":{"node-LatLon":{"lon":-1056757891,"lat":413505054}}},{"delta":{"node-LatLon":{"lon":-1056680124,"lat":413505252}}},{"delta":{"node-LatLon":{"lon":-1056603037,"lat":413505384}}},{"delta":{"node-LatLon":{"lon":-1056526628,"lat":413505543}}},{"delta":{"node-LatLon":{"lon":-1056450220,"lat":413505586}}},{"delta":{"node-LatLon":{"lon":-1056377627,"lat":413489027}}},{"delta":{"node-LatLon":{"lon":-1056311828,"lat":413459176}}},{"delta":{"node-LatLon":{"lon":-1056245669,"lat":413429174}}},{"delta":{"node-LatLon":{"lon":-1056183282,"lat":413395071}}},{"delta":{"node-LatLon":{"lon":-1056165228,"lat":413339197}}},{"delta":{"node-LatLon":{"lon":-1056160367,"lat":413283836}}},{"delta":{"node-LatLon":{"lon":-1056155562,"lat":413228473}}},{"delta":{"node-LatLon":{"lon":-1056150632,"lat":413171501}}},{"delta":{"node-LatLon":{"lon":-1056145513,"lat":413112925}}},{"delta":{"node-LatLon":{"lon":-1056139692,"lat":413054402}}},{"delta":{"node-LatLon":{"lon":-1056094488,"lat":413014131}}},{"delta":{"node-LatLon":{"lon":-1056025680,"lat":412995553}}},{"delta":{"node-LatLon":{"lon":-1055953535,"lat":412976113}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414407115,"long":-1059458100}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":6011}},{"item":{"itis":5127}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":24569}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79.05,"latitude":41.102331,"speed":22.66,"longitude":-105.0482085},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":19,"serialNumber":15448,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":24569,"packetID":"000000000000066E2C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414407115,"long":-1059458100},"name":"eastbound_I80_290.44_313.19_SAT-8CF74104_RC_LARI80WQDHLI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059365846,"lat":414393512}}},{"delta":{"node-LatLon":{"lon":-1059291346,"lat":414382504}}},{"delta":{"node-LatLon":{"lon":-1059216139,"lat":414371403}}},{"delta":{"node-LatLon":{"lon":-1059140930,"lat":414360321}}},{"delta":{"node-LatLon":{"lon":-1059066277,"lat":414349272}}},{"delta":{"node-LatLon":{"lon":-1058991615,"lat":414338261}}},{"delta":{"node-LatLon":{"lon":-1058917936,"lat":414323988}}},{"delta":{"node-LatLon":{"lon":-1058850449,"lat":414297022}}},{"delta":{"node-LatLon":{"lon":-1058783417,"lat":414269380}}},{"delta":{"node-LatLon":{"lon":-1058716328,"lat":414241773}}},{"delta":{"node-LatLon":{"lon":-1058649253,"lat":414214149}}},{"delta":{"node-LatLon":{"lon":-1058581712,"lat":414186261}}},{"delta":{"node-LatLon":{"lon":-1058513627,"lat":414158213}}},{"delta":{"node-LatLon":{"lon":-1058445557,"lat":414130150}}},{"delta":{"node-LatLon":{"lon":-1058380711,"lat":414099504}}},{"delta":{"node-LatLon":{"lon":-1058332454,"lat":414054913}}},{"delta":{"node-LatLon":{"lon":-1058291219,"lat":414005996}}},{"delta":{"node-LatLon":{"lon":-1058249903,"lat":413956936}}},{"delta":{"node-LatLon":{"lon":-1058208508,"lat":413907914}}},{"delta":{"node-LatLon":{"lon":-1058167409,"lat":413859113}}},{"delta":{"node-LatLon":{"lon":-1058121254,"lat":413813192}}},{"delta":{"node-LatLon":{"lon":-1058059188,"lat":413779109}}},{"delta":{"node-LatLon":{"lon":-1057994981,"lat":413746928}}},{"delta":{"node-LatLon":{"lon":-1057930809,"lat":413714712}}},{"delta":{"node-LatLon":{"lon":-1057867697,"lat":413683015}}},{"delta":{"node-LatLon":{"lon":-1057804579,"lat":413651328}}},{"delta":{"node-LatLon":{"lon":-1057737049,"lat":413623514}}},{"delta":{"node-LatLon":{"lon":-1057662967,"lat":413603704}}},{"delta":{"node-LatLon":{"lon":-1057588887,"lat":413583895}}},{"delta":{"node-LatLon":{"lon":-1057516296,"lat":413564544}}},{"delta":{"node-LatLon":{"lon":-1057443317,"lat":413546135}}},{"delta":{"node-LatLon":{"lon":-1057367878,"lat":413535221}}},{"delta":{"node-LatLon":{"lon":-1057292600,"lat":413524353}}},{"delta":{"node-LatLon":{"lon":-1057217299,"lat":413513586}}},{"delta":{"node-LatLon":{"lon":-1057141027,"lat":413502656}}},{"delta":{"node-LatLon":{"lon":-1057064747,"lat":413491760}}},{"delta":{"node-LatLon":{"lon":-1056989068,"lat":413498824}}},{"delta":{"node-LatLon":{"lon":-1056912831,"lat":413504721}}},{"delta":{"node-LatLon":{"lon":-1056835658,"lat":413504909}}},{"delta":{"node-LatLon":{"lon":-1056757891,"lat":413505054}}},{"delta":{"node-LatLon":{"lon":-1056680124,"lat":413505252}}},{"delta":{"node-LatLon":{"lon":-1056603037,"lat":413505384}}},{"delta":{"node-LatLon":{"lon":-1056526628,"lat":413505543}}},{"delta":{"node-LatLon":{"lon":-1056450220,"lat":413505586}}},{"delta":{"node-LatLon":{"lon":-1056377627,"lat":413489027}}},{"delta":{"node-LatLon":{"lon":-1056311828,"lat":413459176}}},{"delta":{"node-LatLon":{"lon":-1056245669,"lat":413429174}}},{"delta":{"node-LatLon":{"lon":-1056183282,"lat":413395071}}},{"delta":{"node-LatLon":{"lon":-1056165228,"lat":413339197}}},{"delta":{"node-LatLon":{"lon":-1056160367,"lat":413283836}}},{"delta":{"node-LatLon":{"lon":-1056155562,"lat":413228473}}},{"delta":{"node-LatLon":{"lon":-1056150632,"lat":413171501}}},{"delta":{"node-LatLon":{"lon":-1056145513,"lat":413112925}}},{"delta":{"node-LatLon":{"lon":-1056139692,"lat":413054402}}},{"delta":{"node-LatLon":{"lon":-1056094488,"lat":413014131}}},{"delta":{"node-LatLon":{"lon":-1056025680,"lat":412995553}}},{"delta":{"node-LatLon":{"lon":-1055953535,"lat":412976113}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414407115,"long":-1059458100}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":6011}},{"item":{"itis":5127}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":24569}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79.05,"latitude":41.102331,"speed":22.66,"longitude":-105.0482085},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":18,"serialNumber":15447,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.756Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":24213,"packetID":"00000000000003F64F","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411251929,"long":-1053079915},"name":"eastbound_I80_335.11_348.36_SAT-70957D0D_RC_CHEYI80WHARI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1053061014,"lat":411249645}}},{"delta":{"node-LatLon":{"lon":-1053042122,"lat":411247319}}},{"delta":{"node-LatLon":{"lon":-1052966667,"lat":411237536}}},{"delta":{"node-LatLon":{"lon":-1052895308,"lat":411217079}}},{"delta":{"node-LatLon":{"lon":-1052828416,"lat":411183958}}},{"delta":{"node-LatLon":{"lon":-1052762243,"lat":411149986}}},{"delta":{"node-LatLon":{"lon":-1052694431,"lat":411120945}}},{"delta":{"node-LatLon":{"lon":-1052623255,"lat":411100002}}},{"delta":{"node-LatLon":{"lon":-1052552081,"lat":411079062}}},{"delta":{"node-LatLon":{"lon":-1052479703,"lat":411059291}}},{"delta":{"node-LatLon":{"lon":-1052404522,"lat":411047559}}},{"delta":{"node-LatLon":{"lon":-1052327830,"lat":411046722}}},{"delta":{"node-LatLon":{"lon":-1052251668,"lat":411043133}}},{"delta":{"node-LatLon":{"lon":-1052181375,"lat":411021106}}},{"delta":{"node-LatLon":{"lon":-1052115683,"lat":410991356}}},{"delta":{"node-LatLon":{"lon":-1052050763,"lat":410960746}}},{"delta":{"node-LatLon":{"lon":-1051976364,"lat":410951581}}},{"delta":{"node-LatLon":{"lon":-1051901229,"lat":410960621}}},{"delta":{"node-LatLon":{"lon":-1051825257,"lat":410964045}}},{"delta":{"node-LatLon":{"lon":-1051748594,"lat":410968835}}},{"delta":{"node-LatLon":{"lon":-1051672128,"lat":410975297}}},{"delta":{"node-LatLon":{"lon":-1051597070,"lat":410985937}}},{"delta":{"node-LatLon":{"lon":-1051522865,"lat":410997958}}},{"delta":{"node-LatLon":{"lon":-1051447302,"lat":410993106}}},{"delta":{"node-LatLon":{"lon":-1051371114,"lat":410985628}}},{"delta":{"node-LatLon":{"lon":-1051294312,"lat":410986015}}},{"delta":{"node-LatLon":{"lon":-1051217495,"lat":410986235}}},{"delta":{"node-LatLon":{"lon":-1051141211,"lat":410979532}}},{"delta":{"node-LatLon":{"lon":-1051065300,"lat":410971078}}},{"delta":{"node-LatLon":{"lon":-1050990664,"lat":410982109}}},{"delta":{"node-LatLon":{"lon":-1050915862,"lat":410993050}}},{"delta":{"node-LatLon":{"lon":-1050839582,"lat":410997762}}},{"delta":{"node-LatLon":{"lon":-1050763005,"lat":410998142}}},{"delta":{"node-LatLon":{"lon":-1050686406,"lat":410997353}}},{"delta":{"node-LatLon":{"lon":-1050610683,"lat":411003862}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411251929,"long":-1053079915}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":6011}},{"item":{"itis":5127}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":24213}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.102327,"speed":22.54,"longitude":-105.0482348},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":17,"serialNumber":15446,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.756Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":23113,"packetID":"000000000000064D7E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":412669811,"long":-1109265496},"name":"eastbound_I80_6.94_8.45_SAT-C9A7ABD9_VSL_V004766","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1109245942,"lat":412667616}}},{"delta":{"node-LatLon":{"lon":-1109227078,"lat":412665173}}},{"delta":{"node-LatLon":{"lon":-1109208218,"lat":412662718}}},{"delta":{"node-LatLon":{"lon":-1109189533,"lat":412659588}}},{"delta":{"node-LatLon":{"lon":-1109170944,"lat":412656149}}},{"delta":{"node-LatLon":{"lon":-1109152362,"lat":412652687}}},{"delta":{"node-LatLon":{"lon":-1109133790,"lat":412649197}}},{"delta":{"node-LatLon":{"lon":-1109115215,"lat":412645713}}},{"delta":{"node-LatLon":{"lon":-1109096639,"lat":412642235}}},{"delta":{"node-LatLon":{"lon":-1109078070,"lat":412638736}}},{"delta":{"node-LatLon":{"lon":-1109059500,"lat":412635242}}},{"delta":{"node-LatLon":{"lon":-1109040676,"lat":412631705}}},{"delta":{"node-LatLon":{"lon":-1109021836,"lat":412628219}}},{"delta":{"node-LatLon":{"lon":-1109002866,"lat":412625167}}},{"delta":{"node-LatLon":{"lon":-1108983731,"lat":412622770}}},{"delta":{"node-LatLon":{"lon":-1108964506,"lat":412620829}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":412669811,"long":-1109265496}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":23113}},"msgCnt":7}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.102327,"speed":22.54,"longitude":-105.0482348},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":16,"serialNumber":15445,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":21060,"packetID":212300001125002224,"urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411709740,"long":-1048394120},"name":"wydot_sirius_4_2_SAT-7EFD0225","laneWidth":20000,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048393730,"lat":411712450}}},{"delta":{"node-LatLon":{"lon":-1048383840,"lat":411767010}}},{"delta":{"node-LatLon":{"lon":-1048380500,"lat":411794860}}},{"delta":{"node-LatLon":{"lon":-1048379990,"lat":411809560}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411751930,"long":-1048286330}}},"priority":6,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":2574}},{"item":{"itis":12712}},{"item":{"itis":8709}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":21060}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79.1375,"latitude":41.1023232,"speed":22.5,"longitude":-105.0482612},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":15,"serialNumber":15444,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.651Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":21060,"packetID":212300001125002223,"urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411606840,"long":-1048289900},"name":"wydot_sirius_3_2_SAT-7EFD0225","laneWidth":10000,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048291070,"lat":411607850}}},{"delta":{"node-LatLon":{"lon":-1048323850,"lat":411632860}}},{"delta":{"node-LatLon":{"lon":-1048323850,"lat":411632860}}},{"delta":{"node-LatLon":{"lon":-1048338000,"lat":411643250}}},{"delta":{"node-LatLon":{"lon":-1048357350,"lat":411654510}}},{"delta":{"node-LatLon":{"lon":-1048383680,"lat":411667660}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":1111111111111111}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411751930,"long":-1048286330}}},"priority":6,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":4868}},{"item":{"itis":5907}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":21060}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79.1375,"latitude":41.1023232,"speed":22.5,"longitude":-105.0482612},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":14,"serialNumber":15443,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.551Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":21060,"packetID":212300001125002222,"urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411713780,"long":-1048286250},"name":"wydot_sirius_2_2_SAT-7EFD0225","laneWidth":10000,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048286250,"lat":411712160}}},{"delta":{"node-LatLon":{"lon":-1048287580,"lat":411641030}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000001111000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411751930,"long":-1048286330}}},"priority":6,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12579}},{"item":{"itis":8720}},{"item":{"itis":1025}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":21060}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023195,"speed":22.4,"longitude":-105.0482875},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":13,"serialNumber":15442,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":21060,"packetID":212300001125002221,"urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":411751930,"long":-1048286330},"name":"wydot_sirius_1_2_SAT-7EFD0225","laneWidth":10000,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1048286640,"lat":411748120}}},{"delta":{"node-LatLon":{"lon":-1048286110,"lat":411713600}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000001111000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":411751930,"long":-1048286330}}},"priority":6,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":7443}},{"item":{"itis":12579}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":21060}},"msgCnt":1}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023157,"speed":22.22,"longitude":-105.0483139},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":12,"serialNumber":15441,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.451Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31504,"packetID":"0000000000000C6FA0","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415389123,"long":-1060795306},"name":"eastbound_I80_280.36_291.0_SAT-9970CD4E_VSL_V000417","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060783562,"lat":415377559}}},{"delta":{"node-LatLon":{"lon":-1060772024,"lat":415365878}}},{"delta":{"node-LatLon":{"lon":-1060748924,"lat":415342529}}},{"delta":{"node-LatLon":{"lon":-1060725901,"lat":415319138}}},{"delta":{"node-LatLon":{"lon":-1060702891,"lat":415295740}}},{"delta":{"node-LatLon":{"lon":-1060677392,"lat":415274709}}},{"delta":{"node-LatLon":{"lon":-1060645465,"lat":415259440}}},{"delta":{"node-LatLon":{"lon":-1060611694,"lat":415246452}}},{"delta":{"node-LatLon":{"lon":-1060583936,"lat":415227230}}},{"delta":{"node-LatLon":{"lon":-1060567112,"lat":415201829}}},{"delta":{"node-LatLon":{"lon":-1060559250,"lat":415173268}}},{"delta":{"node-LatLon":{"lon":-1060551848,"lat":415144627}}},{"delta":{"node-LatLon":{"lon":-1060544578,"lat":415115967}}},{"delta":{"node-LatLon":{"lon":-1060537212,"lat":415087321}}},{"delta":{"node-LatLon":{"lon":-1060528192,"lat":415058965}}},{"delta":{"node-LatLon":{"lon":-1060513843,"lat":415031898}}},{"delta":{"node-LatLon":{"lon":-1060498684,"lat":415005075}}},{"delta":{"node-LatLon":{"lon":-1060479584,"lat":414979768}}},{"delta":{"node-LatLon":{"lon":-1060454612,"lat":414957536}}},{"delta":{"node-LatLon":{"lon":-1060424994,"lat":414938765}}},{"delta":{"node-LatLon":{"lon":-1060394265,"lat":414920704}}},{"delta":{"node-LatLon":{"lon":-1060362947,"lat":414903230}}},{"delta":{"node-LatLon":{"lon":-1060331139,"lat":414886261}}},{"delta":{"node-LatLon":{"lon":-1060299282,"lat":414869343}}},{"delta":{"node-LatLon":{"lon":-1060267401,"lat":414852453}}},{"delta":{"node-LatLon":{"lon":-1060236377,"lat":414836034}}},{"delta":{"node-LatLon":{"lon":-1060205413,"lat":414819550}}},{"delta":{"node-LatLon":{"lon":-1060174405,"lat":414803116}}},{"delta":{"node-LatLon":{"lon":-1060143426,"lat":414786651}}},{"delta":{"node-LatLon":{"lon":-1060112442,"lat":414770191}}},{"delta":{"node-LatLon":{"lon":-1060080853,"lat":414753421}}},{"delta":{"node-LatLon":{"lon":-1060049273,"lat":414736640}}},{"delta":{"node-LatLon":{"lon":-1060017699,"lat":414719856}}},{"delta":{"node-LatLon":{"lon":-1059986118,"lat":414703079}}},{"delta":{"node-LatLon":{"lon":-1059954550,"lat":414686289}}},{"delta":{"node-LatLon":{"lon":-1059923262,"lat":414669701}}},{"delta":{"node-LatLon":{"lon":-1059892003,"lat":414653083}}},{"delta":{"node-LatLon":{"lon":-1059860748,"lat":414636462}}},{"delta":{"node-LatLon":{"lon":-1059830894,"lat":414618511}}},{"delta":{"node-LatLon":{"lon":-1059806580,"lat":414596316}}},{"delta":{"node-LatLon":{"lon":-1059783729,"lat":414573041}}},{"delta":{"node-LatLon":{"lon":-1059760839,"lat":414549787}}},{"delta":{"node-LatLon":{"lon":-1059737946,"lat":414526535}}},{"delta":{"node-LatLon":{"lon":-1059715065,"lat":414503278}}},{"delta":{"node-LatLon":{"lon":-1059692206,"lat":414480008}}},{"delta":{"node-LatLon":{"lon":-1059665100,"lat":414457204}}},{"delta":{"node-LatLon":{"lon":-1059630733,"lat":414440918}}},{"delta":{"node-LatLon":{"lon":-1059592047,"lat":414431361}}},{"delta":{"node-LatLon":{"lon":-1059552953,"lat":414422717}}},{"delta":{"node-LatLon":{"lon":-1059513468,"lat":414415217}}},{"delta":{"node-LatLon":{"lon":-1059476558,"lat":414409805}}},{"delta":{"node-LatLon":{"lon":-1059439656,"lat":414404366}}},{"delta":{"node-LatLon":{"lon":-1059402750,"lat":414398944}}},{"delta":{"node-LatLon":{"lon":-1059365846,"lat":414393512}}},{"delta":{"node-LatLon":{"lon":-1059328946,"lat":414388067}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111100000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415389123,"long":-1060795306}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31504}},"msgCnt":25}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023157,"speed":22.22,"longitude":-105.0483139},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":11,"serialNumber":15440,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31475,"packetID":"000000000000028D2E","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415887613,"long":-1061814678},"name":"eastbound_I80_273.85_280.36_SAT-307505E1_VSL_V000424","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1061799243,"lat":415878765}}},{"delta":{"node-LatLon":{"lon":-1061768515,"lat":415860933}}},{"delta":{"node-LatLon":{"lon":-1061737747,"lat":415843066}}},{"delta":{"node-LatLon":{"lon":-1061706991,"lat":415825187}}},{"delta":{"node-LatLon":{"lon":-1061676217,"lat":415807327}}},{"delta":{"node-LatLon":{"lon":-1061645463,"lat":415789449}}},{"delta":{"node-LatLon":{"lon":-1061614689,"lat":415771591}}},{"delta":{"node-LatLon":{"lon":-1061584537,"lat":415754086}}},{"delta":{"node-LatLon":{"lon":-1061554447,"lat":415736525}}},{"delta":{"node-LatLon":{"lon":-1061524198,"lat":415719117}}},{"delta":{"node-LatLon":{"lon":-1061494074,"lat":415701589}}},{"delta":{"node-LatLon":{"lon":-1061463879,"lat":415684131}}},{"delta":{"node-LatLon":{"lon":-1061432150,"lat":415667054}}},{"delta":{"node-LatLon":{"lon":-1061396974,"lat":415654391}}},{"delta":{"node-LatLon":{"lon":-1061359292,"lat":415646802}}},{"delta":{"node-LatLon":{"lon":-1061320863,"lat":415641538}}},{"delta":{"node-LatLon":{"lon":-1061282426,"lat":415636308}}},{"delta":{"node-LatLon":{"lon":-1061244922,"lat":415631177}}},{"delta":{"node-LatLon":{"lon":-1061207418,"lat":415626048}}},{"delta":{"node-LatLon":{"lon":-1061169903,"lat":415620964}}},{"delta":{"node-LatLon":{"lon":-1061132571,"lat":415615219}}},{"delta":{"node-LatLon":{"lon":-1061096967,"lat":415605109}}},{"delta":{"node-LatLon":{"lon":-1061064131,"lat":415590319}}},{"delta":{"node-LatLon":{"lon":-1061032943,"lat":415573570}}},{"delta":{"node-LatLon":{"lon":-1061001748,"lat":415556828}}},{"delta":{"node-LatLon":{"lon":-1060970565,"lat":415540075}}},{"delta":{"node-LatLon":{"lon":-1060939622,"lat":415523077}}},{"delta":{"node-LatLon":{"lon":-1060912271,"lat":415503093}}},{"delta":{"node-LatLon":{"lon":-1060888721,"lat":415480493}}},{"delta":{"node-LatLon":{"lon":-1060865425,"lat":415457738}}},{"delta":{"node-LatLon":{"lon":-1060842121,"lat":415434989}}},{"delta":{"node-LatLon":{"lon":-1060818850,"lat":415412221}}},{"delta":{"node-LatLon":{"lon":-1060795306,"lat":415389123}}},{"delta":{"node-LatLon":{"lon":-1060772024,"lat":415365878}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415887613,"long":-1061814678}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31475}},"msgCnt":30}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023118,"speed":22.22,"longitude":-105.0483399},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":10,"serialNumber":15439,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.351Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31503,"packetID":"0000000000000C462C","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416299496,"long":-1062778698},"name":"eastbound_I80_267.71_273.85_SAT-54C5D564_VSL_V000428","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062762456,"lat":416291782}}},{"delta":{"node-LatLon":{"lon":-1062745352,"lat":416285198}}},{"delta":{"node-LatLon":{"lon":-1062709133,"lat":416275605}}},{"delta":{"node-LatLon":{"lon":-1062671455,"lat":416268251}}},{"delta":{"node-LatLon":{"lon":-1062633771,"lat":416260915}}},{"delta":{"node-LatLon":{"lon":-1062596100,"lat":416253544}}},{"delta":{"node-LatLon":{"lon":-1062558417,"lat":416246209}}},{"delta":{"node-LatLon":{"lon":-1062520744,"lat":416238847}}},{"delta":{"node-LatLon":{"lon":-1062482895,"lat":416231412}}},{"delta":{"node-LatLon":{"lon":-1062446311,"lat":416221159}}},{"delta":{"node-LatLon":{"lon":-1062413350,"lat":416205439}}},{"delta":{"node-LatLon":{"lon":-1062385484,"lat":416184907}}},{"delta":{"node-LatLon":{"lon":-1062363439,"lat":416160690}}},{"delta":{"node-LatLon":{"lon":-1062344200,"lat":416137119}}},{"delta":{"node-LatLon":{"lon":-1062324886,"lat":416113582}}},{"delta":{"node-LatLon":{"lon":-1062305674,"lat":416089998}}},{"delta":{"node-LatLon":{"lon":-1062286421,"lat":416066433}}},{"delta":{"node-LatLon":{"lon":-1062267158,"lat":416042874}}},{"delta":{"node-LatLon":{"lon":-1062246994,"lat":416018215}}},{"delta":{"node-LatLon":{"lon":-1062222613,"lat":415995969}}},{"delta":{"node-LatLon":{"lon":-1062189595,"lat":415981343}}},{"delta":{"node-LatLon":{"lon":-1062151833,"lat":415976346}}},{"delta":{"node-LatLon":{"lon":-1062113298,"lat":415976355}}},{"delta":{"node-LatLon":{"lon":-1062074266,"lat":415976387}}},{"delta":{"node-LatLon":{"lon":-1062035235,"lat":415976340}}},{"delta":{"node-LatLon":{"lon":-1061996980,"lat":415971514}}},{"delta":{"node-LatLon":{"lon":-1061962779,"lat":415957510}}},{"delta":{"node-LatLon":{"lon":-1061929530,"lat":415942161}}},{"delta":{"node-LatLon":{"lon":-1061896505,"lat":415926815}}},{"delta":{"node-LatLon":{"lon":-1061863465,"lat":415911487}}},{"delta":{"node-LatLon":{"lon":-1061830559,"lat":415896001}}},{"delta":{"node-LatLon":{"lon":-1061799243,"lat":415878765}}},{"delta":{"node-LatLon":{"lon":-1061783879,"lat":415869849}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000111000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416299496,"long":-1062778698}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31503}},"msgCnt":34}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.1023118,"speed":22.22,"longitude":-105.0483399},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":9,"serialNumber":15438,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31503,"packetID":"0000000000000EDB21","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416667387,"long":-1063664504},"name":"eastbound_I80_262.4_267.71_SAT-2AAB775E_VSL_V000433","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1063648291,"lat":416659518}}},{"delta":{"node-LatLon":{"lon":-1063632072,"lat":416651657}}},{"delta":{"node-LatLon":{"lon":-1063615844,"lat":416643807}}},{"delta":{"node-LatLon":{"lon":-1063599618,"lat":416635954}}},{"delta":{"node-LatLon":{"lon":-1063583366,"lat":416628132}}},{"delta":{"node-LatLon":{"lon":-1063567147,"lat":416620270}}},{"delta":{"node-LatLon":{"lon":-1063550917,"lat":416612423}}},{"delta":{"node-LatLon":{"lon":-1063534665,"lat":416604565}}},{"delta":{"node-LatLon":{"lon":-1063518397,"lat":416596725}}},{"delta":{"node-LatLon":{"lon":-1063502152,"lat":416588858}}},{"delta":{"node-LatLon":{"lon":-1063485899,"lat":416581001}}},{"delta":{"node-LatLon":{"lon":-1063469644,"lat":416573146}}},{"delta":{"node-LatLon":{"lon":-1063453403,"lat":416565276}}},{"delta":{"node-LatLon":{"lon":-1063437145,"lat":416557426}}},{"delta":{"node-LatLon":{"lon":-1063420938,"lat":416549517}}},{"delta":{"node-LatLon":{"lon":-1063404651,"lat":416541700}}},{"delta":{"node-LatLon":{"lon":-1063388402,"lat":416533840}}},{"delta":{"node-LatLon":{"lon":-1063372187,"lat":416525964}}},{"delta":{"node-LatLon":{"lon":-1063355954,"lat":416518111}}},{"delta":{"node-LatLon":{"lon":-1063339726,"lat":416510251}}},{"delta":{"node-LatLon":{"lon":-1063323497,"lat":416502393}}},{"delta":{"node-LatLon":{"lon":-1063307259,"lat":416494545}}},{"delta":{"node-LatLon":{"lon":-1063291009,"lat":416486712}}},{"delta":{"node-LatLon":{"lon":-1063274801,"lat":416478829}}},{"delta":{"node-LatLon":{"lon":-1063258568,"lat":416470977}}},{"delta":{"node-LatLon":{"lon":-1063242340,"lat":416463119}}},{"delta":{"node-LatLon":{"lon":-1063226121,"lat":416455250}}},{"delta":{"node-LatLon":{"lon":-1063209373,"lat":416447767}}},{"delta":{"node-LatLon":{"lon":-1063191824,"lat":416441408}}},{"delta":{"node-LatLon":{"lon":-1063173583,"lat":416436257}}},{"delta":{"node-LatLon":{"lon":-1063154787,"lat":416432390}}},{"delta":{"node-LatLon":{"lon":-1063135782,"lat":416429129}}},{"delta":{"node-LatLon":{"lon":-1063116772,"lat":416425883}}},{"delta":{"node-LatLon":{"lon":-1063097755,"lat":416422664}}},{"delta":{"node-LatLon":{"lon":-1063078751,"lat":416419398}}},{"delta":{"node-LatLon":{"lon":-1063059740,"lat":416416159}}},{"delta":{"node-LatLon":{"lon":-1063040728,"lat":416412924}}},{"delta":{"node-LatLon":{"lon":-1063021827,"lat":416409723}}},{"delta":{"node-LatLon":{"lon":-1063002941,"lat":416406471}}},{"delta":{"node-LatLon":{"lon":-1062984045,"lat":416403256}}},{"delta":{"node-LatLon":{"lon":-1062965166,"lat":416399984}}},{"delta":{"node-LatLon":{"lon":-1062946625,"lat":416395793}}},{"delta":{"node-LatLon":{"lon":-1062928900,"lat":416389943}}},{"delta":{"node-LatLon":{"lon":-1062912200,"lat":416382587}}},{"delta":{"node-LatLon":{"lon":-1062896756,"lat":416373819}}},{"delta":{"node-LatLon":{"lon":-1062881956,"lat":416364437}}},{"delta":{"node-LatLon":{"lon":-1062867209,"lat":416355008}}},{"delta":{"node-LatLon":{"lon":-1062852549,"lat":416345669}}},{"delta":{"node-LatLon":{"lon":-1062837900,"lat":416336319}}},{"delta":{"node-LatLon":{"lon":-1062823256,"lat":416326967}}},{"delta":{"node-LatLon":{"lon":-1062808616,"lat":416317611}}},{"delta":{"node-LatLon":{"lon":-1062793947,"lat":416308280}}},{"delta":{"node-LatLon":{"lon":-1062778698,"lat":416299496}}},{"delta":{"node-LatLon":{"lon":-1062762456,"lat":416291782}}},{"delta":{"node-LatLon":{"lon":-1062745352,"lat":416285198}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000110000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416667387,"long":-1063664504}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31503}},"msgCnt":31}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.102308,"speed":22.22,"longitude":-105.0483658},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":7,"serialNumber":15436,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.151Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31503,"packetID":"0000000000000C0339","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416385526,"long":-1062907286},"name":"westbound_I80_266.58_259.77_SAT-2470209F_VSL_V000430","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062924240,"lat":416393168}}},{"delta":{"node-LatLon":{"lon":-1062961089,"lat":416403834}}},{"delta":{"node-LatLon":{"lon":-1062999651,"lat":416410539}}},{"delta":{"node-LatLon":{"lon":-1063038256,"lat":416417110}}},{"delta":{"node-LatLon":{"lon":-1063075838,"lat":416423525}}},{"delta":{"node-LatLon":{"lon":-1063113422,"lat":416429935}}},{"delta":{"node-LatLon":{"lon":-1063151010,"lat":416436333}}},{"delta":{"node-LatLon":{"lon":-1063187758,"lat":416444929}}},{"delta":{"node-LatLon":{"lon":-1063221748,"lat":416458478}}},{"delta":{"node-LatLon":{"lon":-1063254248,"lat":416474223}}},{"delta":{"node-LatLon":{"lon":-1063286767,"lat":416489947}}},{"delta":{"node-LatLon":{"lon":-1063319286,"lat":416505671}}},{"delta":{"node-LatLon":{"lon":-1063351803,"lat":416521398}}},{"delta":{"node-LatLon":{"lon":-1063384308,"lat":416537141}}},{"delta":{"node-LatLon":{"lon":-1063416537,"lat":416552741}}},{"delta":{"node-LatLon":{"lon":-1063448756,"lat":416568353}}},{"delta":{"node-LatLon":{"lon":-1063480997,"lat":416583940}}},{"delta":{"node-LatLon":{"lon":-1063513230,"lat":416599539}}},{"delta":{"node-LatLon":{"lon":-1063545479,"lat":416615118}}},{"delta":{"node-LatLon":{"lon":-1063577703,"lat":416630746}}},{"delta":{"node-LatLon":{"lon":-1063609979,"lat":416646315}}},{"delta":{"node-LatLon":{"lon":-1063642246,"lat":416661894}}},{"delta":{"node-LatLon":{"lon":-1063674320,"lat":416677693}}},{"delta":{"node-LatLon":{"lon":-1063702475,"lat":416697159}}},{"delta":{"node-LatLon":{"lon":-1063724503,"lat":416721905}}},{"delta":{"node-LatLon":{"lon":-1063738013,"lat":416749885}}},{"delta":{"node-LatLon":{"lon":-1063745688,"lat":416779149}}},{"delta":{"node-LatLon":{"lon":-1063757512,"lat":416807580}}},{"delta":{"node-LatLon":{"lon":-1063775542,"lat":416834147}}},{"delta":{"node-LatLon":{"lon":-1063793398,"lat":416858977}}},{"delta":{"node-LatLon":{"lon":-1063809837,"lat":416884350}}},{"delta":{"node-LatLon":{"lon":-1063824918,"lat":416910195}}},{"delta":{"node-LatLon":{"lon":-1063839847,"lat":416936091}}},{"delta":{"node-LatLon":{"lon":-1063856289,"lat":416961436}}},{"delta":{"node-LatLon":{"lon":-1063880112,"lat":416984440}}},{"delta":{"node-LatLon":{"lon":-1063894506,"lat":416994252}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001111"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416385526,"long":-1062907286}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31503}},"msgCnt":26}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.102308,"speed":22.22,"longitude":-105.0483658},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":8,"serialNumber":15437,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.251Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31503,"packetID":"0000000000000FE5E4","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416973452,"long":-1063867317},"name":"westbound_I80_259.77_254.87_SAT-6C9DA4E2_VSL_V000435","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1063880112,"lat":416984440}}},{"delta":{"node-LatLon":{"lon":-1063894506,"lat":416994252}}},{"delta":{"node-LatLon":{"lon":-1063910309,"lat":417002755}}},{"delta":{"node-LatLon":{"lon":-1063927293,"lat":417009870}}},{"delta":{"node-LatLon":{"lon":-1063944810,"lat":417016237}}},{"delta":{"node-LatLon":{"lon":-1063962371,"lat":417022536}}},{"delta":{"node-LatLon":{"lon":-1063979929,"lat":417028841}}},{"delta":{"node-LatLon":{"lon":-1063997487,"lat":417035145}}},{"delta":{"node-LatLon":{"lon":-1064015050,"lat":417041442}}},{"delta":{"node-LatLon":{"lon":-1064032545,"lat":417047634}}},{"delta":{"node-LatLon":{"lon":-1064050617,"lat":417052787}}},{"delta":{"node-LatLon":{"lon":-1064069340,"lat":417056404}}},{"delta":{"node-LatLon":{"lon":-1064088491,"lat":417058422}}},{"delta":{"node-LatLon":{"lon":-1064107803,"lat":417059292}}},{"delta":{"node-LatLon":{"lon":-1064127128,"lat":417059995}}},{"delta":{"node-LatLon":{"lon":-1064146451,"lat":417060728}}},{"delta":{"node-LatLon":{"lon":-1064165769,"lat":417061539}}},{"delta":{"node-LatLon":{"lon":-1064185091,"lat":417062288}}},{"delta":{"node-LatLon":{"lon":-1064204408,"lat":417063119}}},{"delta":{"node-LatLon":{"lon":-1064223632,"lat":417064590}}},{"delta":{"node-LatLon":{"lon":-1064242489,"lat":417067748}}},{"delta":{"node-LatLon":{"lon":-1064260716,"lat":417072554}}},{"delta":{"node-LatLon":{"lon":-1064278067,"lat":417078928}}},{"delta":{"node-LatLon":{"lon":-1064294308,"lat":417086774}}},{"delta":{"node-LatLon":{"lon":-1064309216,"lat":417095993}}},{"delta":{"node-LatLon":{"lon":-1064323678,"lat":417105610}}},{"delta":{"node-LatLon":{"lon":-1064338068,"lat":417115288}}},{"delta":{"node-LatLon":{"lon":-1064352499,"lat":417124933}}},{"delta":{"node-LatLon":{"lon":-1064366996,"lat":417134521}}},{"delta":{"node-LatLon":{"lon":-1064381609,"lat":417143889}}},{"delta":{"node-LatLon":{"lon":-1064396523,"lat":417152988}}},{"delta":{"node-LatLon":{"lon":-1064411727,"lat":417161812}}},{"delta":{"node-LatLon":{"lon":-1064427177,"lat":417170394}}},{"delta":{"node-LatLon":{"lon":-1064442869,"lat":417178725}}},{"delta":{"node-LatLon":{"lon":-1064458838,"lat":417186756}}},{"delta":{"node-LatLon":{"lon":-1064475045,"lat":417194514}}},{"delta":{"node-LatLon":{"lon":-1064491487,"lat":417201990}}},{"delta":{"node-LatLon":{"lon":-1064508131,"lat":417209211}}},{"delta":{"node-LatLon":{"lon":-1064525046,"lat":417216068}}},{"delta":{"node-LatLon":{"lon":-1064542331,"lat":417222795}}},{"delta":{"node-LatLon":{"lon":-1064559666,"lat":417229448}}},{"delta":{"node-LatLon":{"lon":-1064577050,"lat":417236030}}},{"delta":{"node-LatLon":{"lon":-1064594442,"lat":417242599}}},{"delta":{"node-LatLon":{"lon":-1064611800,"lat":417249219}}},{"delta":{"node-LatLon":{"lon":-1064629183,"lat":417255803}}},{"delta":{"node-LatLon":{"lon":-1064646550,"lat":417262411}}},{"delta":{"node-LatLon":{"lon":-1064663938,"lat":417268988}}},{"delta":{"node-LatLon":{"lon":-1064681335,"lat":417275551}}},{"delta":{"node-LatLon":{"lon":-1064698689,"lat":417282178}}},{"delta":{"node-LatLon":{"lon":-1064715850,"lat":417288659}}},{"delta":{"node-LatLon":{"lon":-1064732992,"lat":417295169}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001100"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416973452,"long":-1063867317}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31503}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.95,"latitude":41.102308,"speed":22.22,"longitude":-105.0483658},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":6,"serialNumber":15435,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.053Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31475,"packetID":"00000000000004B2BA","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415980789,"long":-1062129021},"name":"westbound_I80_271.8_266.58_SAT-129A26E5_VSL_V000426","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1062147810,"lat":415980793}}},{"delta":{"node-LatLon":{"lon":-1062166552,"lat":415981611}}},{"delta":{"node-LatLon":{"lon":-1062184813,"lat":415984845}}},{"delta":{"node-LatLon":{"lon":-1062201989,"lat":415990520}}},{"delta":{"node-LatLon":{"lon":-1062217437,"lat":415998517}}},{"delta":{"node-LatLon":{"lon":-1062230703,"lat":416008482}}},{"delta":{"node-LatLon":{"lon":-1062241451,"lat":416020041}}},{"delta":{"node-LatLon":{"lon":-1062251290,"lat":416032060}}},{"delta":{"node-LatLon":{"lon":-1062261128,"lat":416044081}}},{"delta":{"node-LatLon":{"lon":-1062270774,"lat":416055871}}},{"delta":{"node-LatLon":{"lon":-1062280417,"lat":416067663}}},{"delta":{"node-LatLon":{"lon":-1062290067,"lat":416079452}}},{"delta":{"node-LatLon":{"lon":-1062299712,"lat":416091244}}},{"delta":{"node-LatLon":{"lon":-1062309426,"lat":416103003}}},{"delta":{"node-LatLon":{"lon":-1062319170,"lat":416114748}}},{"delta":{"node-LatLon":{"lon":-1062328711,"lat":416126587}}},{"delta":{"node-LatLon":{"lon":-1062338232,"lat":416138435}}},{"delta":{"node-LatLon":{"lon":-1062347925,"lat":416150205}}},{"delta":{"node-LatLon":{"lon":-1062357563,"lat":416162000}}},{"delta":{"node-LatLon":{"lon":-1062368179,"lat":416174692}}},{"delta":{"node-LatLon":{"lon":-1062379892,"lat":416186820}}},{"delta":{"node-LatLon":{"lon":-1062393288,"lat":416197926}}},{"delta":{"node-LatLon":{"lon":-1062408108,"lat":416207958}}},{"delta":{"node-LatLon":{"lon":-1062424227,"lat":416216793}}},{"delta":{"node-LatLon":{"lon":-1062441506,"lat":416224292}}},{"delta":{"node-LatLon":{"lon":-1062459705,"lat":416230444}}},{"delta":{"node-LatLon":{"lon":-1062478641,"lat":416235175}}},{"delta":{"node-LatLon":{"lon":-1062497949,"lat":416238998}}},{"delta":{"node-LatLon":{"lon":-1062517273,"lat":416242774}}},{"delta":{"node-LatLon":{"lon":-1062536082,"lat":416246433}}},{"delta":{"node-LatLon":{"lon":-1062554889,"lat":416250101}}},{"delta":{"node-LatLon":{"lon":-1062573685,"lat":416253798}}},{"delta":{"node-LatLon":{"lon":-1062592489,"lat":416257471}}},{"delta":{"node-LatLon":{"lon":-1062611298,"lat":416261134}}},{"delta":{"node-LatLon":{"lon":-1062630102,"lat":416264808}}},{"delta":{"node-LatLon":{"lon":-1062648910,"lat":416268474}}},{"delta":{"node-LatLon":{"lon":-1062667716,"lat":416272143}}},{"delta":{"node-LatLon":{"lon":-1062686526,"lat":416275802}}},{"delta":{"node-LatLon":{"lon":-1062705320,"lat":416279506}}},{"delta":{"node-LatLon":{"lon":-1062723512,"lat":416283487}}},{"delta":{"node-LatLon":{"lon":-1062741156,"lat":416288664}}},{"delta":{"node-LatLon":{"lon":-1062758081,"lat":416295053}}},{"delta":{"node-LatLon":{"lon":-1062774179,"lat":416302552}}},{"delta":{"node-LatLon":{"lon":-1062789262,"lat":416311156}}},{"delta":{"node-LatLon":{"lon":-1062803697,"lat":416320374}}},{"delta":{"node-LatLon":{"lon":-1062818144,"lat":416329581}}},{"delta":{"node-LatLon":{"lon":-1062832563,"lat":416338813}}},{"delta":{"node-LatLon":{"lon":-1062847004,"lat":416348027}}},{"delta":{"node-LatLon":{"lon":-1062861444,"lat":416357241}}},{"delta":{"node-LatLon":{"lon":-1062876541,"lat":416366844}}},{"delta":{"node-LatLon":{"lon":-1062891617,"lat":416376465}}},{"delta":{"node-LatLon":{"lon":-1062907286,"lat":416385526}}},{"delta":{"node-LatLon":{"lon":-1062924240,"lat":416393168}}},{"delta":{"node-LatLon":{"lon":-1062942253,"lat":416399303}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415980789,"long":-1062129021}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31475}},"msgCnt":24}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9875,"latitude":41.1023005,"speed":22.12,"longitude":-105.0484177},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":5,"serialNumber":15434,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:07.053Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31475,"packetID":"0000000000000D81DE","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":415470937,"long":-1060871344},"name":"westbound_I80_279.36_271.8_SAT-06EB7A5B_VSL_V000422","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1060883068,"lat":415482438}}},{"delta":{"node-LatLon":{"lon":-1060906872,"lat":415505231}}},{"delta":{"node-LatLon":{"lon":-1060934236,"lat":415525587}}},{"delta":{"node-LatLon":{"lon":-1060965310,"lat":415542824}}},{"delta":{"node-LatLon":{"lon":-1060996772,"lat":415559666}}},{"delta":{"node-LatLon":{"lon":-1061028237,"lat":415576506}}},{"delta":{"node-LatLon":{"lon":-1061059706,"lat":415593342}}},{"delta":{"node-LatLon":{"lon":-1061092588,"lat":415608515}}},{"delta":{"node-LatLon":{"lon":-1061128419,"lat":415618971}}},{"delta":{"node-LatLon":{"lon":-1061166060,"lat":415624943}}},{"delta":{"node-LatLon":{"lon":-1061203924,"lat":415630154}}},{"delta":{"node-LatLon":{"lon":-1061241795,"lat":415635339}}},{"delta":{"node-LatLon":{"lon":-1061279673,"lat":415640497}}},{"delta":{"node-LatLon":{"lon":-1061317589,"lat":415645644}}},{"delta":{"node-LatLon":{"lon":-1061355497,"lat":415650826}}},{"delta":{"node-LatLon":{"lon":-1061392771,"lat":415657996}}},{"delta":{"node-LatLon":{"lon":-1061427646,"lat":415670204}}},{"delta":{"node-LatLon":{"lon":-1061459115,"lat":415686864}}},{"delta":{"node-LatLon":{"lon":-1061489394,"lat":415704469}}},{"delta":{"node-LatLon":{"lon":-1061519697,"lat":415722052}}},{"delta":{"node-LatLon":{"lon":-1061549992,"lat":415739645}}},{"delta":{"node-LatLon":{"lon":-1061580273,"lat":415757250}}},{"delta":{"node-LatLon":{"lon":-1061610581,"lat":415774831}}},{"delta":{"node-LatLon":{"lon":-1061641248,"lat":415792650}}},{"delta":{"node-LatLon":{"lon":-1061671923,"lat":415810463}}},{"delta":{"node-LatLon":{"lon":-1061702592,"lat":415828282}}},{"delta":{"node-LatLon":{"lon":-1061733271,"lat":415846093}}},{"delta":{"node-LatLon":{"lon":-1061763976,"lat":415863879}}},{"delta":{"node-LatLon":{"lon":-1061794560,"lat":415881656}}},{"delta":{"node-LatLon":{"lon":-1061825730,"lat":415898841}}},{"delta":{"node-LatLon":{"lon":-1061858422,"lat":415914356}}},{"delta":{"node-LatLon":{"lon":-1061891331,"lat":415929615}}},{"delta":{"node-LatLon":{"lon":-1061924211,"lat":415944910}}},{"delta":{"node-LatLon":{"lon":-1061957798,"lat":415960692}}},{"delta":{"node-LatLon":{"lon":-1061992345,"lat":415975173}}},{"delta":{"node-LatLon":{"lon":-1062030986,"lat":415980852}}},{"delta":{"node-LatLon":{"lon":-1062070609,"lat":415981013}}},{"delta":{"node-LatLon":{"lon":-1062110232,"lat":415980876}}},{"delta":{"node-LatLon":{"lon":-1062147810,"lat":415980793}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011110"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":415470937,"long":-1060871344}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31475}},"msgCnt":25}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":78.9875,"latitude":41.1023005,"speed":22.12,"longitude":-105.0484177},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":4,"serialNumber":15433,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.963Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31504,"packetID":"0000000000000B0C4D","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":414434951,"long":-1059587159},"name":"westbound_I80_289.5_279.36_SAT-FDFB3C3B_VSL_V000416","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1059606146,"lat":414439136}}},{"delta":{"node-LatLon":{"lon":-1059624866,"lat":414443931}}},{"delta":{"node-LatLon":{"lon":-1059658797,"lat":414459046}}},{"delta":{"node-LatLon":{"lon":-1059685629,"lat":414480816}}},{"delta":{"node-LatLon":{"lon":-1059708612,"lat":414504233}}},{"delta":{"node-LatLon":{"lon":-1059731631,"lat":414527631}}},{"delta":{"node-LatLon":{"lon":-1059754662,"lat":414551022}}},{"delta":{"node-LatLon":{"lon":-1059777663,"lat":414574431}}},{"delta":{"node-LatLon":{"lon":-1059800605,"lat":414597873}}},{"delta":{"node-LatLon":{"lon":-1059825019,"lat":414620504}}},{"delta":{"node-LatLon":{"lon":-1059854975,"lat":414638959}}},{"delta":{"node-LatLon":{"lon":-1059886652,"lat":414655790}}},{"delta":{"node-LatLon":{"lon":-1059918347,"lat":414672602}}},{"delta":{"node-LatLon":{"lon":-1059950027,"lat":414689430}}},{"delta":{"node-LatLon":{"lon":-1059981533,"lat":414706207}}},{"delta":{"node-LatLon":{"lon":-1060013094,"lat":414722925}}},{"delta":{"node-LatLon":{"lon":-1060044644,"lat":414739656}}},{"delta":{"node-LatLon":{"lon":-1060076151,"lat":414756434}}},{"delta":{"node-LatLon":{"lon":-1060107672,"lat":414773199}}},{"delta":{"node-LatLon":{"lon":-1060138668,"lat":414789614}}},{"delta":{"node-LatLon":{"lon":-1060169596,"lat":414806103}}},{"delta":{"node-LatLon":{"lon":-1060200600,"lat":414822512}}},{"delta":{"node-LatLon":{"lon":-1060231565,"lat":414838964}}},{"delta":{"node-LatLon":{"lon":-1060262552,"lat":414855394}}},{"delta":{"node-LatLon":{"lon":-1060294303,"lat":414872314}}},{"delta":{"node-LatLon":{"lon":-1060326101,"lat":414889184}}},{"delta":{"node-LatLon":{"lon":-1060357880,"lat":414906076}}},{"delta":{"node-LatLon":{"lon":-1060389415,"lat":414923223}}},{"delta":{"node-LatLon":{"lon":-1060420573,"lat":414940760}}},{"delta":{"node-LatLon":{"lon":-1060450509,"lat":414958838}}},{"delta":{"node-LatLon":{"lon":-1060475868,"lat":414980491}}},{"delta":{"node-LatLon":{"lon":-1060495507,"lat":415005280}}},{"delta":{"node-LatLon":{"lon":-1060510699,"lat":415031818}}},{"delta":{"node-LatLon":{"lon":-1060524843,"lat":415058673}}},{"delta":{"node-LatLon":{"lon":-1060533417,"lat":415086879}}},{"delta":{"node-LatLon":{"lon":-1060540264,"lat":415115378}}},{"delta":{"node-LatLon":{"lon":-1060547197,"lat":415143865}}},{"delta":{"node-LatLon":{"lon":-1060554077,"lat":415172359}}},{"delta":{"node-LatLon":{"lon":-1060561492,"lat":415200772}}},{"delta":{"node-LatLon":{"lon":-1060576552,"lat":415227429}}},{"delta":{"node-LatLon":{"lon":-1060600749,"lat":415249961}}},{"delta":{"node-LatLon":{"lon":-1060632200,"lat":415266697}}},{"delta":{"node-LatLon":{"lon":-1060666183,"lat":415280527}}},{"delta":{"node-LatLon":{"lon":-1060695463,"lat":415299353}}},{"delta":{"node-LatLon":{"lon":-1060719162,"lat":415322019}}},{"delta":{"node-LatLon":{"lon":-1060742498,"lat":415344904}}},{"delta":{"node-LatLon":{"lon":-1060765869,"lat":415367768}}},{"delta":{"node-LatLon":{"lon":-1060789259,"lat":415390622}}},{"delta":{"node-LatLon":{"lon":-1060812632,"lat":415413487}}},{"delta":{"node-LatLon":{"lon":-1060836139,"lat":415436453}}},{"delta":{"node-LatLon":{"lon":-1060859605,"lat":415459445}}},{"delta":{"node-LatLon":{"lon":-1060883068,"lat":415482438}}},{"delta":{"node-LatLon":{"lon":-1060894883,"lat":415493886}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000001111"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":414434951,"long":-1059587159}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":268}},{"item":{"itis":12619}},{"item":{"itis":8720}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31504}},"msgCnt":28}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.1022969,"speed":22.06,"longitude":-105.0484435},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":3,"serialNumber":15432,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.963Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31267,"packetID":"000000000000094275","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417772272,"long":-1073083802},"name":"westbound_I80_187.2_209.5_SAT-B0DDD576_RC_RAWI80WRSD","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1073103032,"lat":417770765}}},{"delta":{"node-LatLon":{"lon":-1073160734,"lat":417766344}}},{"delta":{"node-LatLon":{"lon":-1073237348,"lat":417761297}}},{"delta":{"node-LatLon":{"lon":-1073313648,"lat":417764434}}},{"delta":{"node-LatLon":{"lon":-1073388010,"lat":417777604}}},{"delta":{"node-LatLon":{"lon":-1073460227,"lat":417797785}}},{"delta":{"node-LatLon":{"lon":-1073532308,"lat":417818249}}},{"delta":{"node-LatLon":{"lon":-1073604685,"lat":417838835}}},{"delta":{"node-LatLon":{"lon":-1073677383,"lat":417859492}}},{"delta":{"node-LatLon":{"lon":-1073750200,"lat":417879909}}},{"delta":{"node-LatLon":{"lon":-1073825885,"lat":417892315}}},{"delta":{"node-LatLon":{"lon":-1073903361,"lat":417891911}}},{"delta":{"node-LatLon":{"lon":-1073980790,"lat":417878755}}},{"delta":{"node-LatLon":{"lon":-1074059270,"lat":417862672}}},{"delta":{"node-LatLon":{"lon":-1074138797,"lat":417849816}}},{"delta":{"node-LatLon":{"lon":-1074212379,"lat":417833423}}},{"delta":{"node-LatLon":{"lon":-1074285917,"lat":417816922}}},{"delta":{"node-LatLon":{"lon":-1074359753,"lat":417800402}}},{"delta":{"node-LatLon":{"lon":-1074433865,"lat":417783809}}},{"delta":{"node-LatLon":{"lon":-1074507971,"lat":417767209}}},{"delta":{"node-LatLon":{"lon":-1074582466,"lat":417750471}}},{"delta":{"node-LatLon":{"lon":-1074656974,"lat":417733772}}},{"delta":{"node-LatLon":{"lon":-1074730980,"lat":417717212}}},{"delta":{"node-LatLon":{"lon":-1074804466,"lat":417700741}}},{"delta":{"node-LatLon":{"lon":-1074877974,"lat":417684333}}},{"delta":{"node-LatLon":{"lon":-1074952181,"lat":417667699}}},{"delta":{"node-LatLon":{"lon":-1075026384,"lat":417651055}}},{"delta":{"node-LatLon":{"lon":-1075100631,"lat":417634583}}},{"delta":{"node-LatLon":{"lon":-1075174927,"lat":417618293}}},{"delta":{"node-LatLon":{"lon":-1075249229,"lat":417602021}}},{"delta":{"node-LatLon":{"lon":-1075324198,"lat":417585522}}},{"delta":{"node-LatLon":{"lon":-1075399202,"lat":417569122}}},{"delta":{"node-LatLon":{"lon":-1075474679,"lat":417552532}}},{"delta":{"node-LatLon":{"lon":-1075550650,"lat":417535815}}},{"delta":{"node-LatLon":{"lon":-1075626641,"lat":417519150}}},{"delta":{"node-LatLon":{"lon":-1075700169,"lat":417503005}}},{"delta":{"node-LatLon":{"lon":-1075773956,"lat":417487570}}},{"delta":{"node-LatLon":{"lon":-1075849915,"lat":417477896}}},{"delta":{"node-LatLon":{"lon":-1075927140,"lat":417472412}}},{"delta":{"node-LatLon":{"lon":-1076004368,"lat":417466944}}},{"delta":{"node-LatLon":{"lon":-1076078363,"lat":417461740}}},{"delta":{"node-LatLon":{"lon":-1076152354,"lat":417456501}}},{"delta":{"node-LatLon":{"lon":-1076228617,"lat":417451146}}},{"delta":{"node-LatLon":{"lon":-1076306386,"lat":417445637}}},{"delta":{"node-LatLon":{"lon":-1076384155,"lat":417440136}}},{"delta":{"node-LatLon":{"lon":-1076461786,"lat":417434636}}},{"delta":{"node-LatLon":{"lon":-1076539413,"lat":417429098}}},{"delta":{"node-LatLon":{"lon":-1076616980,"lat":417423684}}},{"delta":{"node-LatLon":{"lon":-1076694352,"lat":417417431}}},{"delta":{"node-LatLon":{"lon":-1076769822,"lat":417403428}}},{"delta":{"node-LatLon":{"lon":-1076844263,"lat":417386508}}},{"delta":{"node-LatLon":{"lon":-1076918694,"lat":417369570}}},{"delta":{"node-LatLon":{"lon":-1076992959,"lat":417352731}}},{"delta":{"node-LatLon":{"lon":-1077067009,"lat":417335868}}},{"delta":{"node-LatLon":{"lon":-1077141060,"lat":417319013}}},{"delta":{"node-LatLon":{"lon":-1077216222,"lat":417301908}}},{"delta":{"node-LatLon":{"lon":-1077291383,"lat":417284807}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417772272,"long":-1073083802}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31267}},"msgCnt":90}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.1022969,"speed":22.06,"longitude":-105.0484435},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":2,"serialNumber":15431,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":31267,"packetID":"000000000000024E94","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":417275428,"long":-1077311709},"name":"eastbound_I80_187.2_209.5_SAT-0A794CC9_RC_RAWI80WRSI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1077292868,"lat":417279720}}},{"delta":{"node-LatLon":{"lon":-1077217513,"lat":417296919}}},{"delta":{"node-LatLon":{"lon":-1077142143,"lat":417314087}}},{"delta":{"node-LatLon":{"lon":-1077068049,"lat":417330933}}},{"delta":{"node-LatLon":{"lon":-1076993961,"lat":417347795}}},{"delta":{"node-LatLon":{"lon":-1076919664,"lat":417364670}}},{"delta":{"node-LatLon":{"lon":-1076845181,"lat":417381611}}},{"delta":{"node-LatLon":{"lon":-1076770688,"lat":417398531}}},{"delta":{"node-LatLon":{"lon":-1076695769,"lat":417412771}}},{"delta":{"node-LatLon":{"lon":-1076618859,"lat":417418968}}},{"delta":{"node-LatLon":{"lon":-1076541598,"lat":417424427}}},{"delta":{"node-LatLon":{"lon":-1076464105,"lat":417429921}}},{"delta":{"node-LatLon":{"lon":-1076386610,"lat":417435404}}},{"delta":{"node-LatLon":{"lon":-1076309252,"lat":417440926}}},{"delta":{"node-LatLon":{"lon":-1076231889,"lat":417446401}}},{"delta":{"node-LatLon":{"lon":-1076155879,"lat":417451762}}},{"delta":{"node-LatLon":{"lon":-1076081223,"lat":417457006}}},{"delta":{"node-LatLon":{"lon":-1076006571,"lat":417462290}}},{"delta":{"node-LatLon":{"lon":-1075928925,"lat":417467718}}},{"delta":{"node-LatLon":{"lon":-1075851297,"lat":417473296}}},{"delta":{"node-LatLon":{"lon":-1075775135,"lat":417482757}}},{"delta":{"node-LatLon":{"lon":-1075701404,"lat":417498056}}},{"delta":{"node-LatLon":{"lon":-1075627970,"lat":417514175}}},{"delta":{"node-LatLon":{"lon":-1075551546,"lat":417530959}}},{"delta":{"node-LatLon":{"lon":-1075475121,"lat":417547742}}},{"delta":{"node-LatLon":{"lon":-1075399612,"lat":417564374}}},{"delta":{"node-LatLon":{"lon":-1075324973,"lat":417580735}}},{"delta":{"node-LatLon":{"lon":-1075250327,"lat":417597082}}},{"delta":{"node-LatLon":{"lon":-1075175762,"lat":417613457}}},{"delta":{"node-LatLon":{"lon":-1075101172,"lat":417629774}}},{"delta":{"node-LatLon":{"lon":-1075026992,"lat":417646108}}},{"delta":{"node-LatLon":{"lon":-1074953281,"lat":417662619}}},{"delta":{"node-LatLon":{"lon":-1074879569,"lat":417679134}}},{"delta":{"node-LatLon":{"lon":-1074805891,"lat":417695635}}},{"delta":{"node-LatLon":{"lon":-1074732212,"lat":417712139}}},{"delta":{"node-LatLon":{"lon":-1074658253,"lat":417728674}}},{"delta":{"node-LatLon":{"lon":-1074584060,"lat":417745361}}},{"delta":{"node-LatLon":{"lon":-1074509845,"lat":417761996}}},{"delta":{"node-LatLon":{"lon":-1074435611,"lat":417778588}}},{"delta":{"node-LatLon":{"lon":-1074361397,"lat":417795237}}},{"delta":{"node-LatLon":{"lon":-1074287484,"lat":417811796}}},{"delta":{"node-LatLon":{"lon":-1074213869,"lat":417828258}}},{"delta":{"node-LatLon":{"lon":-1074140155,"lat":417844465}}},{"delta":{"node-LatLon":{"lon":-1074062164,"lat":417855879}}},{"delta":{"node-LatLon":{"lon":-1073983504,"lat":417864579}}},{"delta":{"node-LatLon":{"lon":-1073906783,"lat":417873095}}},{"delta":{"node-LatLon":{"lon":-1073831510,"lat":417877605}}},{"delta":{"node-LatLon":{"lon":-1073756373,"lat":417872063}}},{"delta":{"node-LatLon":{"lon":-1073681801,"lat":417855903}}},{"delta":{"node-LatLon":{"lon":-1073609122,"lat":417835248}}},{"delta":{"node-LatLon":{"lon":-1073536658,"lat":417814684}}},{"delta":{"node-LatLon":{"lon":-1073464445,"lat":417794142}}},{"delta":{"node-LatLon":{"lon":-1073392087,"lat":417773900}}},{"delta":{"node-LatLon":{"lon":-1073317135,"lat":417760222}}},{"delta":{"node-LatLon":{"lon":-1073240133,"lat":417756689}}},{"delta":{"node-LatLon":{"lon":-1073163130,"lat":417761557}}},{"delta":{"node-LatLon":{"lon":-1073105417,"lat":417766002}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":417275428,"long":-1077311709}}},"priority":5,"content":{"advisory":{"SEQUENCE":[{"item":{"itis":5906}},{"item":{"itis":5385}}]}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":31267}},"msgCnt":78}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.1022969,"speed":22.06,"longitude":-105.0484435},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":1,"serialNumber":15430,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.851Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":22692,"packetID":"00000000000006AD92","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416344087,"long":-1082586926},"name":"westbound_I80_142.17_158.55_SAT-44ADF832_RC_PDI80ED","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1082605867,"lat":416341147}}},{"delta":{"node-LatLon":{"lon":-1082643762,"lat":416335317}}},{"delta":{"node-LatLon":{"lon":-1082719537,"lat":416323607}}},{"delta":{"node-LatLon":{"lon":-1082795332,"lat":416311823}}},{"delta":{"node-LatLon":{"lon":-1082871219,"lat":416300396}}},{"delta":{"node-LatLon":{"lon":-1082948412,"lat":416300333}}},{"delta":{"node-LatLon":{"lon":-1083025592,"lat":416303069}}},{"delta":{"node-LatLon":{"lon":-1083102774,"lat":416305783}}},{"delta":{"node-LatLon":{"lon":-1083179715,"lat":416308441}}},{"delta":{"node-LatLon":{"lon":-1083256650,"lat":416311187}}},{"delta":{"node-LatLon":{"lon":-1083333670,"lat":416313866}}},{"delta":{"node-LatLon":{"lon":-1083410768,"lat":416316579}}},{"delta":{"node-LatLon":{"lon":-1083487872,"lat":416319193}}},{"delta":{"node-LatLon":{"lon":-1083564905,"lat":416322423}}},{"delta":{"node-LatLon":{"lon":-1083641683,"lat":416328142}}},{"delta":{"node-LatLon":{"lon":-1083718587,"lat":416332876}}},{"delta":{"node-LatLon":{"lon":-1083795496,"lat":416337572}}},{"delta":{"node-LatLon":{"lon":-1083872405,"lat":416342269}}},{"delta":{"node-LatLon":{"lon":-1083949300,"lat":416347096}}},{"delta":{"node-LatLon":{"lon":-1084026064,"lat":416352984}}},{"delta":{"node-LatLon":{"lon":-1084103063,"lat":416357400}}},{"delta":{"node-LatLon":{"lon":-1084180198,"lat":416361177}}},{"delta":{"node-LatLon":{"lon":-1084257244,"lat":416365879}}},{"delta":{"node-LatLon":{"lon":-1084326673,"lat":416370105}}},{"delta":{"node-LatLon":{"lon":-1084396100,"lat":416374353}}},{"delta":{"node-LatLon":{"lon":-1084469893,"lat":416378867}}},{"delta":{"node-LatLon":{"lon":-1084548056,"lat":416383611}}},{"delta":{"node-LatLon":{"lon":-1084626220,"lat":416388347}}},{"delta":{"node-LatLon":{"lon":-1084703702,"lat":416393060}}},{"delta":{"node-LatLon":{"lon":-1084781188,"lat":416397734}}},{"delta":{"node-LatLon":{"lon":-1084859010,"lat":416402450}}},{"delta":{"node-LatLon":{"lon":-1084937168,"lat":416407197}}},{"delta":{"node-LatLon":{"lon":-1085015328,"lat":416411930}}},{"delta":{"node-LatLon":{"lon":-1085093024,"lat":416416612}}},{"delta":{"node-LatLon":{"lon":-1085170718,"lat":416421321}}},{"delta":{"node-LatLon":{"lon":-1085248418,"lat":416425954}}},{"delta":{"node-LatLon":{"lon":-1085326100,"lat":416430747}}},{"delta":{"node-LatLon":{"lon":-1085403806,"lat":416435322}}},{"delta":{"node-LatLon":{"lon":-1085482142,"lat":416440051}}},{"delta":{"node-LatLon":{"lon":-1085560481,"lat":416444752}}},{"delta":{"node-LatLon":{"lon":-1085638702,"lat":416449395}}},{"delta":{"node-LatLon":{"lon":-1085716794,"lat":416454065}}},{"delta":{"node-LatLon":{"lon":-1085775366,"lat":416457555}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0000000000011000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416344087,"long":-1082586926}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5895}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":22692}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} +{"metadata":{"securityResultCode":"success","recordGeneratedBy":"TMC_VIA_SAT","receivedMessageDetails":{"locationData":{"elevation":2080,"heading":79,"latitude":41.1022969,"speed":22.06,"longitude":-105.0484435},"rxSource":"SAT"},"schemaVersion":6,"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"recordId":0,"serialNumber":15429,"streamId":"801780cb-d91d-444b-8f4d-9c44fe27f5ea","bundleSize":166,"bundleId":77},"sanitized":false,"recordGeneratedAt":"2019-01-22T22:27:06.751Z","recordType":"rxMsg","logFileName":"rxMsg_TIM_GeneratedBy_TMC_VIA_SAT.gz","odeReceivedAt":"2019-04-09T18:11:18.996Z"},"payload":{"data":{"MessageFrame":{"messageId":31,"value":{"TravelerInformation":{"timeStamp":22692,"packetID":"000000000000086861","urlB":null,"dataFrames":{"TravelerDataFrame":{"regions":{"GeographicalPath":{"closedPath":{"false":""},"anchor":{"lat":416455490,"long":-1085800440},"name":"eastbound_I80_142.17_158.55_SAT-1C6D23BF_RC_PDI80EI","laneWidth":32700,"directionality":{"both":""},"description":{"path":{"offset":{"xy":{"nodes":{"NodeXY":[{"delta":{"node-LatLon":{"lon":-1085780958,"lat":416453533}}},{"delta":{"node-LatLon":{"lon":-1085722182,"lat":416449943}}},{"delta":{"node-LatLon":{"lon":-1085643804,"lat":416445230}}},{"delta":{"node-LatLon":{"lon":-1085565424,"lat":416440540}}},{"delta":{"node-LatLon":{"lon":-1085487043,"lat":416435869}}},{"delta":{"node-LatLon":{"lon":-1085408668,"lat":416431146}}},{"delta":{"node-LatLon":{"lon":-1085330293,"lat":416426421}}},{"delta":{"node-LatLon":{"lon":-1085251916,"lat":416421727}}},{"delta":{"node-LatLon":{"lon":-1085173902,"lat":416416997}}},{"delta":{"node-LatLon":{"lon":-1085096242,"lat":416412330}}},{"delta":{"node-LatLon":{"lon":-1085018585,"lat":416407636}}},{"delta":{"node-LatLon":{"lon":-1084940663,"lat":416402897}}},{"delta":{"node-LatLon":{"lon":-1084862741,"lat":416398163}}},{"delta":{"node-LatLon":{"lon":-1084784815,"lat":416393472}}},{"delta":{"node-LatLon":{"lon":-1084706889,"lat":416388787}}},{"delta":{"node-LatLon":{"lon":-1084628972,"lat":416384031}}},{"delta":{"node-LatLon":{"lon":-1084551057,"lat":416379343}}},{"delta":{"node-LatLon":{"lon":-1084473154,"lat":416374560}}},{"delta":{"node-LatLon":{"lon":-1084399541,"lat":416370085}}},{"delta":{"node-LatLon":{"lon":-1084330227,"lat":416365845}}},{"delta":{"node-LatLon":{"lon":-1084260912,"lat":416361623}}},{"delta":{"node-LatLon":{"lon":-1084184275,"lat":416356906}}},{"delta":{"node-LatLon":{"lon":-1084107548,"lat":416353136}}},{"delta":{"node-LatLon":{"lon":-1084030065,"lat":416348811}}},{"delta":{"node-LatLon":{"lon":-1083951951,"lat":416342842}}},{"delta":{"node-LatLon":{"lon":-1083873709,"lat":416337915}}},{"delta":{"node-LatLon":{"lon":-1083796972,"lat":416333186}}},{"delta":{"node-LatLon":{"lon":-1083720234,"lat":416328459}}},{"delta":{"node-LatLon":{"lon":-1083643497,"lat":416323733}}},{"delta":{"node-LatLon":{"lon":-1083566759,"lat":416319020}}},{"delta":{"node-LatLon":{"lon":-1083489868,"lat":416316067}}},{"delta":{"node-LatLon":{"lon":-1083413019,"lat":416313460}}},{"delta":{"node-LatLon":{"lon":-1083336178,"lat":416310750}}},{"delta":{"node-LatLon":{"lon":-1083259199,"lat":416308063}}},{"delta":{"node-LatLon":{"lon":-1083182086,"lat":416305377}}},{"delta":{"node-LatLon":{"lon":-1083104978,"lat":416302622}}},{"delta":{"node-LatLon":{"lon":-1083028061,"lat":416299895}}},{"delta":{"node-LatLon":{"lon":-1082951147,"lat":416297144}}},{"delta":{"node-LatLon":{"lon":-1082873751,"lat":416296812}}},{"delta":{"node-LatLon":{"lon":-1082797210,"lat":416308158}}},{"delta":{"node-LatLon":{"lon":-1082720795,"lat":416320017}}},{"delta":{"node-LatLon":{"lon":-1082645377,"lat":416331711}}},{"delta":{"node-LatLon":{"lon":-1082607675,"lat":416337584}}}]}}},"scale":0}},"id":{"id":0,"region":0},"direction":"0001100000000000"}},"durationTime":32000,"doNotUse3":0,"doNotUse4":0,"startYear":2019,"msgId":{"roadSignID":{"viewAngle":1111111111111111,"mutcdCode":{"warning":""},"position":{"lat":416455490,"long":-1085800440}}},"priority":5,"content":{"advisory":{"SEQUENCE":{"item":{"itis":5895}}}},"url":null,"doNotUse1":0,"doNotUse2":0,"frameType":{"advisory":""},"startTime":22692}},"msgCnt":20}}}},"dataType":"TravelerInformation"}} diff --git a/docker-compose.yml b/docker-compose.yml index e5f5e809a..b5172e1dc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,6 +32,7 @@ services: - "6666:6666/udp" environment: DOCKER_HOST_IP: ${DOCKER_HOST_IP} + ODE_KAFKA_BROKERS: ${DOCKER_HOST_IP}:9092 ODE_SECURITY_SVCS_SIGNATURE_URI: ${ODE_SECURITY_SVCS_SIGNATURE_URI} ODE_RSU_USERNAME: ${ODE_RSU_USERNAME} ODE_RSU_PASSWORD: ${ODE_RSU_PASSWORD} @@ -41,6 +42,9 @@ services: DATA_SIGNING_ENABLED_RSU: ${DATA_SIGNING_ENABLED_RSU} DATA_SIGNING_ENABLED_SDW: ${DATA_SIGNING_ENABLED_SDW} DEFAULT_SNMP_PROTOCOL: ${DEFAULT_SNMP_PROTOCOL} + KAFKA_LINGER_MS: ${KAFKA_LINGER_MS} + ODE_TIM_INGEST_MONITORING_ENABLED: ${ODE_TIM_INGEST_MONITORING_ENABLED} + ODE_TIM_INGEST_MONITORING_INTERVAL: ${ODE_TIM_INGEST_MONITORING_INTERVAL} depends_on: kafka: condition: service_healthy @@ -245,4 +249,4 @@ services: logging: options: max-size: "10m" - max-file: "5" \ No newline at end of file + max-file: "5" diff --git a/docs/ODESwagger.yaml b/docs/ODESwagger.yaml index 8128bd30b..382302c24 100644 --- a/docs/ODESwagger.yaml +++ b/docs/ODESwagger.yaml @@ -358,7 +358,7 @@ definitions: required: - sspindex properties: - notUsed: + doNotUse1: type: integer description: A short header information frameType: @@ -377,7 +377,7 @@ definitions: means forever. priority: type: integer - notUsed1: + doNotUse2: type: integer sspindex: type: integer @@ -391,9 +391,9 @@ definitions: type: array items: $ref: '#/definitions/Region' - sspMsgTypes: + doNotUse4: type: integer - sspMsgContent: + doNotUse3: type: integer content: type: string diff --git a/docs/Release_notes.md b/docs/Release_notes.md index 1b9a89b4e..0d5382121 100644 --- a/docs/Release_notes.md +++ b/docs/Release_notes.md @@ -1,6 +1,91 @@ JPO-ODE Release Notes ---------------------------- +Version 4.0.0, released January 2025 +---------------------------------------- +### **Summary** + +The jpo-ode 4.0.0 release brings a variety of updates aimed at enhancing functionality, maintainability, and overall development experience. + +Key highlights include: +- The introduction of a generated TMC TIM Topic +- The migration from a custom Kafka client to Spring Kafka for improved Spring integration +- Updates to TIM schemas and JSON annotations for more J2735-accurate ODE processing + +Significant strides have been made in optimizing configurations through enhancements like the extraction of Kafka properties, +environment variables, and Kafka topics into more streamlined Spring Configuration properties. + +Schema updates have been applied to increment the version of output messages and provide partial compatibility with J2735 2024. +However, several limitations remain. +- Due to [a bug in the ASN.1 Compiler](https://github.com/usdot-fhwa-stol/usdot-asn1c/issues/2), the VehicleEventFlags bitstring has been reverted to + its 2020 version. This excludes the eventJackKnife bit introduced in the 2024 revision, which will not appear in output BSMs + until the issue is resolved. +- Additionally, fields newly added in J2735 2024 to BSM-related structures are not yet supported in the ODE. These include + fhwaVehicleClass, trailers, and schoolBus under SupplementalVehicleExtensions, as well as trailerPresent, pivotPoint, axles, + and leanAngle under VehicleData. +- Similarly, new fields introduced for MAPs, SPATs, and TIMs, such as roadAuthorityId and contentNew, are not currently supported + in the ODE. +- These limitations will be addressed in future updates. + +Developer-focused changes include revisions to the README, Makefile, and devcontainer to support smoother onboarding and +ease of use. Other vital updates encompass new entries in the submodule compatibility guide, version upgrades, and +bug fixes related to Kafka configurations and message handling. + +Enhancements in this release: +- [CDOT PR 100](https://github.com/CDOT-CV/jpo-ode/pull/100): Add Generated TMC TIM Topic +- [CDOT PR 102](https://github.com/CDOT-CV/jpo-ode/pull/102): Remove Sping Dependencies from Maven Jars +- [CDOT PR 105](https://github.com/CDOT-CV/jpo-ode/pull/105): Updates to README, Makefile, and devcontainer to improve onboarding and developer experience +- [CDOT PR 106](https://github.com/CDOT-CV/jpo-ode/pull/106): Add configurable alert to print log statement warning of missing TIMs deposits +- [CDOT PR 107](https://github.com/CDOT-CV/jpo-ode/pull/107): Submodule Compatibility Guide Entry for ODE 3.0.0 +- [CDOT PR 108](https://github.com/CDOT-CV/jpo-ode/pull/108): Update Release Documentation to Include jpo-utils Submodule +- [CDOT PR 109](https://github.com/CDOT-CV/jpo-ode/pull/109): Update TIM schema +- [CDOT PR 110](https://github.com/CDOT-CV/jpo-ode/pull/110): Extract Kafka properties from OdeProperties as a first step to breaking apart the monstrosity +- [CDOT PR 111](https://github.com/CDOT-CV/jpo-ode/pull/111): Adding Compression to Ode +- [CDOT PR 112](https://github.com/CDOT-CV/jpo-ode/pull/112): Extract Kafka Topics and related configurations into Spring Configuration properties +- [CDOT PR 113](https://github.com/CDOT-CV/jpo-ode/pull/113): Extract environment variables from OdeProperties into Spring Configuration objects +- [CDOT PR 114](https://github.com/CDOT-CV/jpo-ode/pull/114): Fixed JSON annotations to enable ODE processing of circle geometries +- [CDOT PR 115](https://github.com/CDOT-CV/jpo-ode/pull/115): Update the TIM schema test +- [CDOT PR 116](https://github.com/CDOT-CV/jpo-ode/pull/116): Add Approval Tests for MAP Data Flows +- [CDOT PR 117](https://github.com/CDOT-CV/jpo-ode/pull/117): SSM Processing Fix +- [CDOT PR 118](https://github.com/CDOT-CV/jpo-ode/pull/118): Spring Kafka Proof-of-Concept - Implemented in MAP Data Flow +- [CDOT PR 119](https://github.com/CDOT-CV/jpo-ode/pull/119): OdeTimJson POJO Processing Rework +- [CDOT PR 120](https://github.com/CDOT-CV/jpo-ode/pull/120): Introduce Checkstyle Linter to GH pipeline and provide steps for local configuration +- [CDOT PR 121](https://github.com/CDOT-CV/jpo-ode/pull/121): Switching adopt builder to temurin +- [CDOT PR 122](https://github.com/CDOT-CV/jpo-ode/pull/122): J2735 2024 Compatibility and Enhanced TIM Format Handling +- [CDOT PR 123](https://github.com/CDOT-CV/jpo-ode/pull/123): add missing confluent.password and confluent.username to application.yaml +- [CDOT PR 129](https://github.com/CDOT-CV/jpo-ode/pull/129): Migrate UDPRecievers to use Spring Kafka +- [CDOT PR 130](https://github.com/CDOT-CV/jpo-ode/pull/130): BugFix: use correct config value for setting up producers with Confluent Properties +- [CDOT PR 131](https://github.com/CDOT-CV/jpo-ode/pull/131): Migrate Asn1DecodedDataRouter to use Spring Kafka +- [CDOT PR 132](https://github.com/CDOT-CV/jpo-ode/pull/132): Update POM Version 4.0.0 +- [CDOT PR 134](https://github.com/CDOT-CV/jpo-ode/pull/134): Migrate AsnCodecMessageServiceController to Spring Kafka +- [CDOT PR 136](https://github.com/CDOT-CV/jpo-ode/pull/136): Update the schema version to 8 for the output messages +- [CDOT PR 137](https://github.com/CDOT-CV/jpo-ode/pull/137): GitHub Actions Caching +- [CDOT PR 140](https://github.com/CDOT-CV/jpo-ode/pull/140): Data flow diagram updates - Spring Kafka related +- [CDOT PR 141](https://github.com/CDOT-CV/jpo-ode/pull/141): CDOT ASN1 Codec Submodule Update +- [CDOT PR 142](https://github.com/CDOT-CV/jpo-ode/pull/142): Set scope of annotation processors to 'provided' +- [CDOT PR 143](https://github.com/CDOT-CV/jpo-ode/pull/143): Updated Submodule Compatibility Guide for 2025 Q1 Release +- [CDOT PR 145](https://github.com/CDOT-CV/jpo-ode/pull/145): Resolve TIM schema inconsistency +- [CDOT PR 146](https://github.com/CDOT-CV/jpo-ode/pull/146): Update jpo-utils Submodule Reference to Fix Linux Startup Issues +- [CDOT PR 147](https://github.com/CDOT-CV/jpo-ode/pull/147): Fixed Data Loss in UDP Payload Handling by Updating UdpHexDecoder Logic +- [CDOT PR 148](https://github.com/CDOT-CV/jpo-ode/pull/148): Update jpo-utils Submodule Reference to Fix Required ENV Variables +- [CDOT PR 149](https://github.com/CDOT-CV/jpo-ode/pull/149): JPO Utils Commit Reference Change to Create "topic.OdeTimRxJson" Topic +- [CDOT PR 151](https://github.com/CDOT-CV/jpo-ode/pull/151): Kafka and logging updates +- [CDOT PR 152](https://github.com/CDOT-CV/jpo-ode/pull/152): TIM and Map Schema Fixes +- [CDOT PR 153](https://github.com/CDOT-CV/jpo-ode/pull/153): Fix: producer failures +- [CDOT PR 154](https://github.com/CDOT-CV/jpo-ode/pull/154): Fix: Use odeKafkaProperties env vars to drive producer retries +- [CDOT PR 158](https://github.com/CDOT-CV/jpo-ode/pull/158): Release/PSM schema fix +- [CDOT PR 160](https://github.com/CDOT-CV/jpo-ode/pull/160): Support Renamed Fields in J2735 2024 BSM Structures +- [CDOT PR 165](https://github.com/CDOT-CV/jpo-ode/pull/165): fix: force BigDecimal serialization to NUMBER format +- [USDOT PR 559](https://github.com/usdot-jpo-ode/jpo-ode/pull/559): Update GitHub Actions Third-Party Action Versions +- [USDOT PR 561](https://github.com/usdot-jpo-ode/jpo-ode/pull/561): Bump ch.qos.logback:logback-core from 1.4.14 to 1.5.13 in /jpo-ode-plugins + +Breaking changes: +- The major version was incremented to reflect breaking changes related to TIM XER encoding introduced in the 2024 revision of J2735. + +Known Issues: +- **VehicleEventFlags Bitstring Bug**: A bug in the ASN.1 Compiler has necessitated reverting the VehicleEventFlags bitstring to its 2020 version, which excludes the eventJackKnife bit added in the 2024 revision. As a result, this bit will not appear in output BSMs until the bug is fixed. +- **Unsupported BSM Fields**: New fields introduced in BSM-related structures by the 2024 revision of J2735 are currently not supported in the ODE. These fields will be implemented in a future release. + Version 3.0.0, released September 2024 ---------------------------------------- ### **Summary** @@ -18,6 +103,8 @@ Enhancements in this release: - CDOT PR 95: Fixed dev container build failure due to specified uid being taken - CDOT PR 96: Added the source ASN1 bytes payload to message topics to allow for IMP depositor support - CDOT PR 97: Removed jpo-s3-deposit submodule and added jpo-utils repository as a submodule +- CDOT PR 99: Remove Spring Dependencies from Maven Jars +- CDOT PR 101: ODE JSON Schema Updates Version 2.1.0, released June 2024 @@ -267,5 +354,193 @@ The New Ode version 1.0.8 includes below updates: 1. Integrated odevalidator v0.0.6 2. Updated test-harness 3. Changed SNMP deposit timestamp format from MM/DD/YYYY to YYYY/MM/DD - +### Release 1.0.7 (Apr 15, 2019) +- Integrated odevalidator v0.0.3 + +### Release 1.0.6 (Apr 8, 2019) +- Integrated odevalidator v0.0.1 + - ODE-1234 Updated the odevalidator library with conditional configurability. + +### Release 1.0.5 (Mar 20, 2019) +- ODE-1209 Fixed missing bsmSource metadata field +- ODE-944 Creates SDW Depositor microservice using the new SDW REST API +- ODE-1056 Modifying ODE to support both WebSocket interface or SDW Depositor microservice by configurable properties + +### Release 1.0.4 (Feb 12, 2019) +- ODE-1136 Fixed metadata bug causing duplicate or invalid metadata elements (locationData, odeReceivedAt, recordGeneratedAt) +- ODE-844 Fixed GitHub issue 264: New Content Type for TIMs desired by WYDOT +- ODE-994 Add the ODE version number to the Demo UI + +### Release 1.0.3 (Feb 7, 2019) +- ODE-944 Added Situation Data Warehouse depositor submodule to the ODE + +### Release 1.0.2 (Jan 22, 2019) +- ODE-1076 New values added for metadata.recordGeneratedBy: RSU, TMC_VIA_SAT, TMC_VIA_SNMP + +### Release 1.0.1 (Dec 20, 2019) +- ODE-466 serialId element of metadata will now provide a true serial number to help identify missing records. +- ODE-964 Added ode.rsuUsername/ode.rsuPassword application properties or alternatively ODE_RSU_USERNAME and ODE_RSU_PASSWORD environment variables to authenticate communications with RSU instead of using the REST API parameters. +- ODE-992 Added `/version` endpoint to get the version information of a running ODE. + +### Release 1.0.0 +- ODE-787 Publish J2735 version of Broadcast TIM in addition to the REST request version (see GitHub Issue #262). Please see https://github.com/usdot-jpo-ode/jpo-ode/wiki/Schema-Version-6-Change-Notice for details. + +### Sprint 38 +- ODE-769 Initiated output schema change SOP. See https://github.com/usdot-jpo-ode/jpo-ode/wiki/SchemaVersion-5-Change-Notice for details +- ODE-771 Fixed PPM crash bug + +### Sprint 37 +- ODE-745 Updated ODE documentation to reflect actual implementation of the ODE output interface schema +- ODE-763 Added support for TIMs with ITIS custom text +- ODE-764 Fixed how Trailer Mass was calculated +- ODE-768 Created a repository of ASN.1 schema files on usdot-jpo-ode GitHub organization based on scms-asn to eliminate dependency on CAMP SCMS and avoid build failures due to scms-asn site outages. All references to CAMP SCMS repository was changed to point to usdot-jpo-ode/scms-asn1 repository. + +### Sprint 36 +- ODE-741 Added capability to load Explicit Enrollment Certificates + +### Sprint 35 +- ODE-736 Added capability to configure Record ID of SDW TIMs + +### Sprint 34 +- ODE-733 Fixed a bug where single-byte OCTET STRINGs were being encoded incorrectly + +### Sprint 33 +- ODE-560 Added capability to Receive Compressed Log Files +- ODE-707 Fixed a bug resulting in first TIM deposit after startup not propagating +- ODE-725 Registered ODE in Code.gov + +### Sprint 32 + + +### Sprint 31 +- ODE-685 Added metadata field `bsmSource` to identify the source of the BSM as host (EV) or remote (RV). See https://github.com/usdot-jpo-ode/jpo-ode/wiki/Log-File-Changes-(schemaVersion=4) for details. +- ODE-688 Deploed firehose into production for CVPEP and RDE +- ODE-689 and ODE-690: Replaced boolean metadata field `validSignature` with integer `securityResultCode` to better convey the status of security validation. See https://github.com/usdot-jpo-ode/jpo-ode/wiki/Log-File-Changes-(schemaVersion=4) for details. +- ODE-692 Improved AEM/ADM error handling for when connection with Kafka broker is interrupted + +### Sprint 30 +- ODE-680 Migrated SDW/SDC calls to new production endpoints + +### Sprint 29 +- ODE-675 CHanged jpo-S3-deposit module to send CVPEP data through AWS Firehose + +### Sprint 28 +- ODE-670 J2735TravelerInformationMessage.packetID needs to be BigInteger + see https://github.com/usdot-jpo-ode/jpo-ode/wiki/TIM-REST-Endpoint-Changes for interface changes. + +### Sprint 27 +- ODE-661 CVPEP Data Inconsistency for TIM Files +- ODE-657 Continue Supporting WyDOT issues +- ODE-591 ORNL - Further generalize encoding and decoding capability of asn1_codec module + +### Sprint 26 +- ODE-646 Sirius XM Requires ASD messages to be wrapped in IEEE 1698.2 Data +- ODE-645 Update Documentation for Metadata +- ODE-642 Address SDW and RSU flexibility +- ODE-632 ODE Error out on log files + +### Sprint 25 +- ODE-588 Free and Open Source ODE Minimum Viable Product +- ODE-615 ORNL Implement SDW TIM encoding +- ODE-587 Implement TIM data encoding through ASN.1 Encoder Module (AEM) +- ODE-596 Support receiving and publishing of Driver Alert Messages +- ODE-613 SDW Sending of TIM Messages using asn1_codec +- ODE-631 Add capability to disable output topics + +### Sprint 24 +- ODE-537 ASN1 CODEC Module development +- ODE-543 Publish a defined v3 for metadata Story Medule +- ODE-581 Integrate ODE with asn1 decoder module (adm) for BSM decoding +- ODE-584 Decode Inbound TIM through asn1 decoder module (adm) +- ODE-585 Implement asn1 decoding capability +- ODE-586 Implement asn1 encoding capability +- ODE-592 Added Message Frame to Outbound TIM messages +- ODE-593 Support the receiving and publishing of Distress Notifications +- ODE-604 Support multiple types of payloads for receivedMsgRecord + +### Sprint 23 +- ODE-559 ASN1 CODEC Decoder Module Connection + +### Sprint 22 +- ODE-528 Support publishing of TIM data received from WYDOT log files + +### Sprint 21 +- ODE-483 Implementing generatedAt field in the metadata for TIM +- ODE-512 Support receiving WYDOT BSM Log files + +### Sprint 20 +- ODE-476 Change TIM schema to use real unit values +- ODE-485 TIM S3 depositor service + +### Sprint 18 +- ODE-201 Validate/authenticate Basic Safety Message (BSM) and MessageFrames received from the OBU using the 1609.2 Implementation +- ODE-436 Provide header information in JSON stream of processed BSM Story Medium + +### Sprint 17 +- ODE-314 Build VSDs from received BSMs and deposit them to SDC (Phase 2) +- ODE-413 Generalize S3 Depositor with configuration features + +### Sprint 16 +- ODE-400 Updated TIM REST Calls to enable querying and deleting messages +- ODE-401 Created S3 deposit service to watch Kafka topic and deposit BSM files +- ODE-381 1609.2 Security Libary is located within the ODE library + +### Sprint 15 +- ODE-381 Leidos Security Library Integration implementing 1609.2 + -- As part of this new feature, the build process was updated in the [ODE README file](../README.md)) with additional steps for obtaining the source code and building the application. Please review the [Getting Started](https://github.com/usdot-jpo-ode/jpo-ode#getting-started) section for details. + +### Sprint 14 +- ODE-312 Receiving Raw BSMs over UDP/IP (Phase 2) +- ODE-310 Receiving Raw ISD (Phase 1) +- ODE-311 Submiting ISD to SDC (Phase 1) + +### Sprint 13 +- ODE-290 Integrate with ORNL Privacy Protection Module (PPM) + +### Sprint 12 +- ODE-339 Deposit Raw VSD to SDC (Phase 1) + +### Sprint 11 +- (ODE-77 Subtask) ODE-274 Publish to J2735BsmRawJson + +### Sprint 10 +- ODE-259 Interface Control Document (ICD) - Updated +- ODE-268 Fixed Message CRC field in TIM messages causing error + +### Sprint 9 +- ODE-227 Probe Data Management (PDM) - Outbound +- ODE-230 Interface Control Document (ICD) - Created +- ODE-202 Evaluate Current 1609.2 Leidos Code + +### Sprint 8 +- ODE-143 Outbound TIM Message Parameters - Phase 2 +- ODE-146 Provide generic SDW Deposit Capability +- ODE-147 Deposit TIM message to SDW. + +### Sprint 7 +- ODE-125 Expose empty field ODE output records when presented in JSON format +- ODE-142 Outbound TIM Message Parameters - Phase 1 +- ODE-169 Encode TIM Message to ASN.1 - Outbound +- ODE-171 Research 1609.2 Standard Implementation + +### Sprint 6 +- ODE-138 Add Capability for Raw BSM Data (bin format only) with Header Information +- ODE-150 Encode TIM Message to ASN.1 (Inbound messages only) +- ODE-148 Develop More Robust User Facing Documentation + +### Sprint 5 +- ODE-126 ADD to ODE 58 - Log ODE Data Flows On/off without restarting ODE +- ODE-74 RESTful SNMP Wrapper Service to pass SNMP messages to an RSU +- ODE-127 Defined future story and tasks for inbound/outbound TIM messages + +### Sprint 4 +- ODE-123 Developed a sample client application to interface directly with Kafka service to subscribe to ODE data +- ODE-118 Validate BSM data decoding, inclusing Part II, with real binary data from OBU +- ODE-54 Authored first draft of ODE User Guide +- ODE-58 Developed ODE Event Logger +- ODE-41 Importer improvements + +### Sprint 3 +- ODE-42 Clean up the kafka adapter and make it work with Kafka broker. Integrated kafka. Kept Stomp as the high level WebSocket API protocol. +- ODE-36 - Docker, docker-compose, Kafka and ode Integration diff --git a/docs/UserGuide.md b/docs/UserGuide.md index 7f0669803..2cea591bd 100644 --- a/docs/UserGuide.md +++ b/docs/UserGuide.md @@ -353,72 +353,13 @@ and deploying the JPO-ODE services. #### 6.6.4 - ODE Application Properties -JPO ODE configuration can be modified in a number of ways. +JPO ODE configuration is managed through the [application.yaml](../jpo-ode-svcs/src/main/resources/application.yaml). +Many of the configuration values in the application.yaml are derived from environment variables. +It is recommended that you set these properties from your system environment variables in your .env file. +See [sample.env](../sample.env) for examples and variable names. -1. You can specify the configuration parameters in a file named - _application.properties_ located in the same directory from which - the application is launched. - -2. You may specify properties as command line options in the form of - -```bash ---ode.propertyName=propertyValue -``` - -For example, add - -```bash ---ode.uploadLocation=myUploadFolder -``` - -3. _You may_ specify properties as system environment variables in the - form of _ode.sdwApiKey=12345_ - -Other properties not specific to the ODE can also be defined in a -similar way but without the _ode_ prefix. - -Current ODE properties and their default are defined in OdeProperties -class. The property name is the name of the OdeProperties class instance -parameter. - -The following table describes all the ODE properties currently -available. - -_Table 1 - ODE Application Properties_ - -| Name | Default Value | Required | Description | -|------------------------------------------|-----------------------------------------------------------------------------------------------|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| ode.kafkaBrokers | $DOCKER_HOST_IP:9092 | X | List of kafka brokers and ports | -| ode.uploadLocationRoot | ./uploads | | Location of the shared directory where ODE monitors for files to ingest. | -| ode.uploadLocationObuLog | ./uploads/bsmlog | | Specific location for OBU log files with header fields to specify direction, UTC timestamp, and other metadata | -| ode.pluginsLocations | ./plugins | | Location of the jar files for ODE plugins. | -| ode.kafkaProducerType | async | | Specifies whether publishing to Kafka will be synchronous (i.e. blocking until the data has been persisted) or asynchronous (i.e. publish and forget). Valid values are: sync or async. Sync will generally be slower but more reliable, async is faster with the risk of losing data if kafka crashes during the write operation. | -| ode.sdcIp | 104.130.170.234 | | IPv4 address of SDC | -| ode.sdcPort | 46753 | | Destination port of SDC | -| ode.bsmReceiverPort | 46800 | | The UDP port that ODE will use to listen to BSM messages. | -| ode.bsmBufferSize | 500 | | Size of the buffer allocated for receiving BSM messages through UDP interface | -| ode. kafkaTopicVsdPojo | AsnVsdPojo | | The topic that contains VSDs if ode.enabledVsdKafkaTopic is enabled. | -| ode.vsdBufferSize | 500 | | Size of the buffer allocated for receiving VSD messages through UDP interface | -| ode.vsdReceiverPort | 46753 | | The UDP port that ODE will use to listen to VSD messages. | -| ode.vsdDepositorPort | 5555 | | The UDP port that ODE will use to send VSD messages to SDC for deposit. | -| ode.vsdTrustport | 5556 | | The UDP port that ODE will use to establish trust with the SDC for VSD messages. | -| ode.caCertPath | | | | -| | null | X | path/to/CaCertFile or define env variable ${ODE_CA_CERT_PATH} | -| ode.selfCertPath | null | X | path/to/selfCertFile or define env variable ${ODE_SELF_CERT_PATH} | -| ode.selfPrivateKeyReconstructionFilePath | null | X | path/to/selfPrivateKeyReconstructionFile or define env variable ${ODE_SELF_PRIVATE_KEY_RECONSTRUCTION_FILE_PATH} | -| ode.selfSigningPrivateKeyFilePath | null | X | path/to/selfSigningPrivateKeyFile or define env variable ${ODE_SELF_SIGNING_PRIVATE_KEY_FILE_PATH} | -| ode.isdBufferSize | 500 | | Size of the buffer allocated for receiving ISD messages through UDP interface | -| ode.isdReceiverPort | 46801 | | The UDP port that ODE will use to listen to ISD messages. | -| ode.isdDepositorPort | 6666 | | The UDP port that ODE will use to send ISD messages to SDC for deposit. | -| ode.isdTrustPort | 6667 | | The UDP port that ODE will use to establish trust with the SDC for ISD messages. | -| ode.dataReceiptBufferSize | null | | Size of the buffer allocated for receiving ISD receipt messages through UDP interface | -| ode.depositSanitizedBsmToSdc | false | | Enable/disable packaging of BSMs into VSDs and depositing VSDs to SDC | -| ode.serviceRespExpirationSeconds | 10 | | Number of seconds the trust manager will wait to receive service request response before timing out. | -| Kafka Topics | See Section 8.3.1.1 | | See Section 8.3.1.1 | -| ode.securitySvcsSignatureUri | null | | The URI for signing data using the jpo-security-svcs module. Normally doesn't need to be set because ODE will calculate it based on DOCKER_HOST_IP. If the service is deployed outside Docker, it should be set to of the server it's running on. If you do not want to sign the data set this property to UNSECURED. | -| ode.rsuUsername | null | If not present in JSON | The SNMP username used to authenticate with an RSU when depositing, deleting, or querying TIMs. | -| ode.rsuPassword | null | If not present in JSON | The SNMP password used to authenticate with an RSU when depositing, deleting, or querying TIMs. | -| ode.kafkaTopicsDisabled | topic.OdeBsmRxPojo, topic.OdeBsmTxPojo, topic.OdeBsmDuringEventPojo,topic.OdeTimBroadcastPojo | | List of topics to be disabled from publishing. | +See [Spring Boot's Externalized Configuration documentation](https://docs.spring.io/spring-boot/reference/features/external-config.html) +for more information on how to use the application.yaml file and how to override the default values. diff --git a/docs/compatibility.md b/docs/compatibility.md index 451264e6e..8cf2748bb 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -3,6 +3,8 @@ This table serves as a guide, suggesting which versions of individual submodules | [ODE (this project)](https://github.com/usdot-jpo-ode/jpo-ode/releases) | [ACM](https://github.com/usdot-jpo-ode/asn1_codec/releases) | [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp/releases) | [SEC](https://github.com/usdot-jpo-ode/jpo-security-svcs/releases) | [SDWD](https://github.com/usdot-jpo-ode/jpo-sdw-depositor/releases) | [S3D](https://github.com/usdot-jpo-ode/jpo-s3-deposit/releases) | [GJConverter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter/releases) | [CMonitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor/releases) | [CVisualizer](https://github.com/usdot-jpo-ode/jpo-conflictvisualizer/releases) | [CVManager](https://github.com/usdot-jpo-ode/jpo-cvmanager/releases) | | ----------------- | --- | --- | --- | ---- | --- | ----------- | -------- | ----------- | ----------- | +| 4.0.0 | 3.0.0 | 1.5.0 | 1.5.0 | 1.9.0 | 1.7.0 | 2.0.0 | 2.0.0 | 1.5.0 | 1.5.0 | +| 3.0.0 | 2.2.0 | 1.4.0 | 1.5.0 | 1.8.0 | 1.6.0 | 1.4.2 | 1.4.2 | 1.4.1 | 1.4.0 | | 2.1.0 | 2.1.0 | 1.3.0 | 1.4.0 | 1.7.0 | 1.5.0 | 1.3.0 | 1.3.0 | 1.3.0 | 1.3.0 | | 2.0.x | 2.0.0 | 1.3.0 | 1.4.0 | 1.6.0 | 1.4.0 | 1.2.0 | 1.2.0 | 1.2.0 | 1.2.0 | | 1.5.1 | 1.5.0 | 1.2.0 | 1.3.0 | 1.5.0 | 1.3.0 | 1.1.0 | 1.1.0 | 1.1.0 | 1.1.0 | @@ -10,4 +12,4 @@ This table serves as a guide, suggesting which versions of individual submodules | 1.4.0 | 1.4.0 | 1.1.0 | 1.2.0 | 1.4.0 | 1.2.0 | N/A | N/A | N/A | N/A | | 1.3.0 | 1.3.0 | 1.0.0 | 1.0.1 | 1.3.0 | 1.1.0 | N/A | N/A | N/A | N/A | -For example, if you're using ODE version 2.0.1, it's recommended to use ACM 2.0.0, PPM 1.3.0, SEC 1.4.0, SDWD 1.6.0, S3D 1.4.0, GJConverter 1.2.0, CMonitor 1.2.0, CVisualizer 1.2.0, and CVManager 1.2.0. While other combinations may work, these versions are suggested for the best compatibility. \ No newline at end of file +For example, if you're using ODE version 2.0.1, it's recommended to use ACM 2.0.0, PPM 1.3.0, SEC 1.4.0, SDWD 1.6.0, S3D 1.4.0, GJConverter 1.2.0, CMonitor 1.2.0, CVisualizer 1.2.0, and CVManager 1.2.0. While other combinations may work, these versions are suggested for the best compatibility. diff --git a/docs/data-flow-diagrams/ODE Data Flow Overview.drawio b/docs/data-flow-diagrams/ODE Data Flow Overview.drawio deleted file mode 100644 index 1209b5cac..000000000 --- a/docs/data-flow-diagrams/ODE Data Flow Overview.drawio +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/data-flow-diagrams/ODE Data Flow Overview.drawio.png b/docs/data-flow-diagrams/ODE Data Flow Overview.drawio.png index 4e4335470..6167ecb34 100644 Binary files a/docs/data-flow-diagrams/ODE Data Flow Overview.drawio.png and b/docs/data-flow-diagrams/ODE Data Flow Overview.drawio.png differ diff --git a/docs/data-flow-diagrams/README.md b/docs/data-flow-diagrams/README.md index 6a65768e6..64ec2fab4 100644 --- a/docs/data-flow-diagrams/README.md +++ b/docs/data-flow-diagrams/README.md @@ -26,10 +26,10 @@ The purpose of these diagrams is to show: ### Overview Data Flow 2 (Receiver Classes) 1. Messages come in through the receiver classes and are pushed to the Raw Encoded Messages group of topics. -1. The AsnCodecMessageServiceController pulls these raw encoded messages and passes them over to the Asn1Decode classes. +1. The classes under [jpo/ode/kafka/listeners/asn1](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1) process these raw encoded messages 1. These classes push the message to the Asn1DecoderInput topic. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from that topic and pushes decoded messages to the Asn1DecoderOutput topic. -1. The Asn1DecodeDataRouter class pulls from the Asn1DecodeOutput topic and deposits messages into the Pojo Messages group of topics and the Json Messages group of topics. +1. The Asn1DecodedDataRouter class pulls from the Asn1DecoderOutput topic and deposits messages into the Pojo Messages group of topics and the Json Messages group of topics. 1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the Json Messages group of topics and pushes filtered messages to the Filtered Json Messages group of topics. 1. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the Json Messages group of topics, converts the messages and pushes them to the Processed Spat/Map group of topics. 1. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the Processed Map/Spat group of topics and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. @@ -39,20 +39,21 @@ The purpose of these diagrams is to show: 1. The FileUploadController class indirectly invokes the LogFileToAsn1CodecPublisher class, which handles the offloaded messages. 1. If the message is a DriverAlert, the LogFileToAsn1CodecPublisher class pushes it to the OdeDriverAlertJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. 1. If the message is a BSM, SPAT, TIM or MAP, the LogFileToAsn1CodecPublisher class pushes it to the corresponding OdeRawEncoded JSON topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. If the message is a BSM, SPAT, TIM or MAP, the Asn1CodecMessageServiceController pulls from the OdeRawEncoded JSON topics and processes the data with the corresponding Asn1Decode JSON class. This class then writes to the Asn1DecoderInput topic. +1. If the message is a BSM, SPAT, TIM or MAP, the relevant router under [kafka/listeners/asn1](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1) + pulls from the OdeRawEncoded JSON topics and processes the data. This class then writes to the Asn1DecoderInput topic. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from that topic and pushes decoded messages to the Asn1DecoderOutput topic. -1. The Asn1DecodeDataRouter class pulls from the Asn1DecodeOutput topic and deposits messages into the Pojo Messages group of topics and the Json Messages group of topics. +1. The Asn1DecodedDataRouter class pulls from the Asn1DecoderOutput topic and deposits messages into the Pojo Messages group of topics and the Json Messages group of topics. 1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the Json Messages group of topics and pushes filtered messages to the Filtered Json Messages group of topics. 1. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the Json Messages group of topics, converts the messages and pushes them to the Processed Spat/Map group of topics. 1. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the Processed Map/Spat group of topics and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. ### BSM Data Flow 1 (Receiver Classes) 1. The BSM comes in through the BsmReceiver class and is pushed to the OdeRawEncodedBSMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The Asn1CodecMessageServiceController pulls from the OdeRawEncodedBSMJson topic and pushes the BSM to the Asn1DecodeBSMJSON class. -1. The Asn1DecodeBSMJSON class pushes the BSM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. +1. The [RawEncodedBSMJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouter.java) processes messages from the OdeRawEncodedBSMJson topic +1. The RawEncodedBSMJsonRouter class pushes the TIM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic and pushes the decoded BSM to the Asn1DecoderOutput topic. -1. The AsnCodecRouterServiceController pulls from the Asn1DecoderOutput topic and passes the BSM to the Asn1DecodedDataRouter class. -1. The Asn1DecodedDataRouter pushes the BSM to the OdeBsmRxPojo, OdeBsmTxPojo, OdeBsmPojo and OdeBsmDuringEventPojo topics. +1. The [Asn1DecodedDataRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java) class pulls from the Asn1DecoderOutput topic and + pushes the BSM to the OdeBsmRxPojo, OdeBsmTxPojo, OdeBsmPojo and OdeBsmDuringEventPojo topics. 1. The ToJsonServiceController class pulls from OdeBsmPojo and pushes the BSM in JSON form to the OdeBsmJson topic. 1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeBsmJson topic and pushes the filtered BSM to the FilteredOdeBsmJson topic. @@ -60,11 +61,11 @@ The purpose of these diagrams is to show: 1. The BSM is offloaded onto a directory referenced by the FileUploadController class. 1. The FileUploadController class indirectly invokes the LogFileToAsn1CodecPublisher class, which handles the offloaded message. 1. The LogFileToAsn1CodecPublisher class pushes the BSM to the RawEncodedBSMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The Asn1CodecMessageServiceController pulls from the OdeRawEncodedBSMJson topic and pushes the BSM to the Asn1DecodeBSMJSON class. -1. The Asn1DecodeBSMJSON class pushes the BSM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. +1. The [RawEncodedBSMJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouter.java) processes messages from the OdeRawEncodedBSMJson topic +1. The RawEncodedBSMJsonRouter class pushes the TIM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic and pushes the decoded BSM to the Asn1DecoderOutput topic. -1. The AsnCodecRouterServiceController pulls from the Asn1DecoderOutput topic and passes the BSM to the Asn1DecodedDataRouter class. -1. The Asn1DecodedDataRouter pushes the BSM to the OdeBsmRxPojo, OdeBsmTxPojo, OdeBsmPojo and OdeBsmDuringEventPojo topics. +1. The [Asn1DecodedDataRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java) class pulls from the Asn1DecoderOutput topic and + pushes the BSM to the OdeBsmRxPojo, OdeBsmTxPojo, OdeBsmPojo and OdeBsmDuringEventPojo topics. 1. The ToJsonServiceController class pulls from OdeBsmPojo and pushes the BSM in JSON form to the OdeBsmJson topic. 1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeBsmJson topic and pushes the filtered BSM to the FilteredOdeBsmJson topic. @@ -79,8 +80,8 @@ The purpose of these diagrams is to show: ### TIM Data Flow 2 (Receiver Classes) 1. The TIM comes in through the TimReceiver class and is pushed to the OdeRawEncodedTIMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The AsnCodecMessageServiceController pulls from the OdeRawEncodedTIMJson topic and passes the TIM to the Asn1DecodeTIMJSON class. -1. The Asn1DecodeTIMJSON class pushes the TIM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. +1. The [RawEncodedTIMJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouter.java) processes messages from the OdeRawEncodedTIMJson topic +1. The RawEncodedTIMJsonRouter class pushes the TIM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the TIM, and pushes it to the Asn1DecoderOutput topic. 1. The Asn1DecodedDataRouter pulls from the Asn1DecoderOutput topic and pushes the TIM to the OdeTimJson, OdeTimRxJson and OdeDNMsgJson topics. @@ -88,19 +89,18 @@ The purpose of these diagrams is to show: 1. The TIM is offloaded onto a directory referenced by the FileUploadController class. 1. The FileUploadController class indirectly invokes the LogFileToAsn1CodecPublisher class, which handles the offloaded message. 1. The LogFileToAsn1CodecPublisher class pushes the TIM to the RawEncodedTIMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The AsnCodecMessageServiceController pulls from the OdeRawEncodedTIMJson topic and passes the TIM to the Asn1DecodeTIMJSON class. +1. The [RawEncodedTIMJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouter.java) processes messages from the OdeRawEncodedTIMJson topic 1. The Asn1DecodeTIMJSON class pushes the TIM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the TIM, and pushes it to the Asn1DecoderOutput topic. 1. The Asn1DecodedDataRouter pulls from the Asn1DecoderOutput topic and pushes the TIM to the OdeTimJson, OdeTimRxJson and OdeDNMsgJson topics. ### SPAT Data Flow 1 (Receiver Classes) 1. The SPAT comes in through the SpatReceiver class and is pushed to the OdeRawEncodedSPATJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The AsnCodecMessageServiceController class pulls from the OdeRawEncodedSPATJson topic and passes the SRM to the Asn1DecodeSPATJSON class. -1. The Asn1DecodeSPATJSON class pushes the SPAT to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. +1. The [RawEncodedSPATJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouter.java) processes messages from the OdeRawEncodedSPATJson topic. +1. The RawEncodedSPATJsonRouter class pushes the SPAT to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the SPAT, and pushes it to the Asn1DecoderOutput topic. -1. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the SPAT to the Asn1DecodedDataRouter class. -1. The Asn1DecodedDataRouter pushes the SPAT to the OdeSpatPojo, OdeSpatRxPojo, OdeDNMsgJson, OdeSpatRxJson, OdeSpatTxPojo and OdeSpatJson topics. -1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeSpatJson topic, filters the SPAT, and pushes it to the FilteredOdeSpatJson topic. +1. The [Asn1DecodedDataRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java) class pulls from the Asn1DecoderOutput topic and + pushes the SPAT to the OdeSpatPojo, OdeSpatRxPojo, OdeDNMsgJson, OdeSpatRxJson, OdeSpatTxPojo and OdeSpatJson topics. 1. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the OdeSpatJson topic, converts the SPAT and pushes it to the ProcessedOdeSpatJson topic. 1. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the ProcessedOdeSpatJson topic and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. @@ -108,22 +108,21 @@ The purpose of these diagrams is to show: 1. The SPAT is offloaded onto a directory referenced by the FileUploadController class. 1. The FileUploadController class indirectly invokes the LogFileToAsn1CodecPublisher class, which handles the offloaded message. 1. The LogFileToAsn1CodecPublisher class pushes the SPAT to the OdeRawEncodedSPATJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The AsnCodecMessageServiceController class pulls from the OdeRawEncodedSPATJson topic and passes the SRM to the Asn1DecodeSPATJSON class. -1. The Asn1DecodeSPATJSON class pushes the SPAT to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. +1. The [RawEncodedSPATJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouter.java) processes messages from the OdeRawEncodedSPATJson topic. +1. The RawEncodedSPATJsonRouter class pushes the SPAT to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the SPAT, and pushes it to the Asn1DecoderOutput topic. -1. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the SPAT to the Asn1DecodedDataRouter class. -1. The Asn1DecodedDataRouter pushes the SPAT to the OdeSpatPojo, OdeSpatRxPojo, OdeDNMsgJson, OdeSpatRxJson, OdeSpatTxPojo and OdeSpatJson topics. -1. The [PPM](https://github.com/usdot-jpo-ode/jpo-cvdp) pulls from the OdeSpatJson topic, filters the SPAT, and pushes it to the FilteredOdeSpatJson topic. +1. The [Asn1DecodedDataRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java) class pulls from the Asn1DecoderOutput topic and + pushes the SPAT to the OdeSpatPojo, OdeSpatRxPojo, OdeDNMsgJson, OdeSpatRxJson, OdeSpatTxPojo and OdeSpatJson topics. 1. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the OdeSpatJson topic, converts the SPAT and pushes it to the ProcessedOdeSpatJson topic. 1. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the ProcessedOdeSpatJson topic and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. ### MAP Data Flow 1 (Receiver Classes) 1. The MAP comes in through the MapReceiver class and is pushed to the OdeRawEncodedMAPJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The AsnCodecMessageServiceController class pulls from the OdeRawEncodedMAPJson topic and passes the MAP to the Asn1DecodeMAPJSON class. -1. The Asn1DecodeMAPJSON class pushes the MAP to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. +1. The [RawEncodedMAPJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouter.java) processes messages from the OdeRawEncodedMAPJson topic. +1. The RawEncodedMAPJsonRouter class pushes the MAP to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the MAP, and pushes it to the Asn1DecoderOutput topic. -1. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the MAP to the Asn1DecodedDataRouter class. -1. The Asn1DecodedDataRouter class pushes the MAP to the OdeMapTxPojo and OdeMapJson topics. +1. The [Asn1DecodedDataRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java) class pulls from the Asn1DecoderOutput topic and + pushes the MAP to the OdeMapTxPojo and OdeMapJson topics. 1. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the OdeMapJson topic, converts the MAP and pushes it to the ProcessedOdeMapJson topic. 1. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the ProcessedOdeMapJson topic and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. @@ -131,34 +130,34 @@ The purpose of these diagrams is to show: 1. The MAP is offloaded onto a directory referenced by the FileUploadController class. 1. The FileUploadController class indirectly invokes the LogFileToAsn1CodecPublisher class, which handles the offloaded message. 1. The LogFileToAsn1CodecPublisher class pushes the MAP to the OdeRawEncodedMAPJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The AsnCodecMessageServiceController class pulls from the OdeRawEncodedMAPJson topic and passes the MAP to the Asn1DecodeMAPJSON class. -1. The Asn1DecodeMAPJSON class pushes the MAP to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. +1. The [RawEncodedMAPJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouter.java) processes messages from the OdeRawEncodedMAPJson topic. +1. The RawEncodedMAPJsonRouter class pushes the MAP to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the MAP, and pushes it to the Asn1DecoderOutput topic. -1. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the MAP to the Asn1DecodedDataRouter class. -1. The Asn1DecodedDataRouter class pushes the MAP to the OdeMapTxPojo and OdeMapJson topics. +1. The [Asn1DecodedDataRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java) class pulls from the Asn1DecoderOutput topic and + pushes the MAP to the OdeMapTxPojo and OdeMapJson topics. 1. The [GeoJSON Converter](https://github.com/usdot-jpo-ode/jpo-geojsonconverter) pulls from the OdeMapJson topic, converts the MAP and pushes it to the ProcessedOdeMapJson topic. 1. The [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) pulls from the ProcessedOdeMapJson topic and pushes to the [Conflict Monitor](https://github.com/usdot-jpo-ode/jpo-conflictmonitor) Output Topics group. ### SRM Data Flow 1. The SRM comes in through the SrmReceiver class and is pushed to the OdeRawEncodedSRMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The AsnCodecMessageServiceController class pulls from the OdeRawEncodedSRMJson topic and passes the SRM to the Asn1DecodeSRMJSON class. -1. The Asn1DecodeSRMJSON class pushes the SRM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. +1. The [RawEncodedSRMJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouter.java) processes messages from the OdeRawEncodedSRMJson topic. +1. The RawEncodedSRMJsonRouter class pushes the SRM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the SRM, and pushes it to the Asn1DecoderOutput topic. -1. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the SRM to the Asn1DecodedDataRouter class. -1. The Asn1DecodedDataRouter class pushes the SRM to the OdeSrmTxPojo and OdeSrmJson topics. +1. The [Asn1DecodedDataRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java) class pulls from the Asn1DecoderOutput topic and + pushes the SRM to the OdeSrmTxPojo and OdeSrmJson topics. ### SSM Data Flow 1. The SSM comes in through the SsmReceiver class and is pushed to the OdeRawEncodedSSMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The AsnCodecMessageServiceController class pulls from the OdeRawEncodedSSMJson topic and passes the SSM to the Asn1DecodeSSMJSON class. -1. The Asn1DecodeSSMJSON class pushes the SSM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. +1. The [RawEncodedSSMJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouter.java) processes messages from the OdeRawEncodedSSMJson topic. +1. The RawEncodedSSMJsonRouter class pushes the SSM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the SSM, and pushes it to the Asn1DecoderOutput topic. -1. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the SSM to the Asn1DecodedDataRouter class. -1. The Asn1DecodedDataRouter class pushes the SSM to the OdeSsmTxPojo and OdeSsmJson topics. +1. The [Asn1DecodedDataRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java) class pulls from the Asn1DecoderOutput topic and + pushes the SSM to the OdeSsmPojo and OdeSsmJson topics. ### PSM Data Flow 1. The PSM comes in through the PsmReceiver class and is pushed to the OdeRawEncodedPSMJson topic. Any IEEE 1609.3 or unsigned IEEE 1609.2 headers are stripped at this point. -1. The AsnCodecMessageServiceController class pulls from the OdeRawEncodedPSMJson topic and passes the PSM to the Asn1DecodePSMJSON class. Any remaining signed IEEE 1609.2 headers are removed at this point. -1. The Asn1DecodePSMJSON class pushes the PSM to the Asn1DecoderInput topic. +1. The [RawEncodedPSMJsonRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouter.java) processes messages from the OdeRawEncodedPSMJson topic. +1. The RawEncodedPSMJsonRouter class pushes the SRM to the Asn1DecoderInput topic. Any remaining signed IEEE 1609.2 headers are removed at this point. 1. The [ACM](https://github.com/usdot-jpo-ode/asn1_codec) pulls from the Asn1DecoderInput topic, decodes the PSM, and pushes it to the Asn1DecoderOutput topic. -1. The AsnCodecRouterServiceController class pulls from the Asn1DecoderOutput topic and passes the PSM to the Asn1DecodedDataRouter class. -1. The Asn1DecodedDataRouter class pushes the PSM to the OdePsmTxPojo and OdePsmJson topics. \ No newline at end of file +1. The [Asn1DecodedDataRouter](/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java) class pulls from the Asn1DecoderOutput topic and + pushes the PSM to the OdePsmTxPojo and OdePsmJson topics. \ No newline at end of file diff --git a/docs/data-flow-diagrams/bsm/BSM Data Flow.drawio b/docs/data-flow-diagrams/bsm/BSM Data Flow.drawio deleted file mode 100644 index e230ea639..000000000 --- a/docs/data-flow-diagrams/bsm/BSM Data Flow.drawio +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/data-flow-diagrams/bsm/BSM Data Flow.drawio.png b/docs/data-flow-diagrams/bsm/BSM Data Flow.drawio.png index 2b51b350e..e854b72d5 100644 Binary files a/docs/data-flow-diagrams/bsm/BSM Data Flow.drawio.png and b/docs/data-flow-diagrams/bsm/BSM Data Flow.drawio.png differ diff --git a/docs/data-flow-diagrams/map/MAP Data Flow.drawio b/docs/data-flow-diagrams/map/MAP Data Flow.drawio deleted file mode 100644 index a4e70d1a2..000000000 --- a/docs/data-flow-diagrams/map/MAP Data Flow.drawio +++ /dev/null @@ -1,160 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/data-flow-diagrams/map/MAP Data Flow.drawio.png b/docs/data-flow-diagrams/map/MAP Data Flow.drawio.png index 1803fc557..977ddef81 100644 Binary files a/docs/data-flow-diagrams/map/MAP Data Flow.drawio.png and b/docs/data-flow-diagrams/map/MAP Data Flow.drawio.png differ diff --git a/docs/data-flow-diagrams/psm/PSM Data Flow.drawio b/docs/data-flow-diagrams/psm/PSM Data Flow.drawio deleted file mode 100644 index 64aca0d5c..000000000 --- a/docs/data-flow-diagrams/psm/PSM Data Flow.drawio +++ /dev/null @@ -1 +0,0 @@ -5Vtbd6I6FP41rnXOgyzCnUdb7W2mttZOby+zIkSlBWK5VDu//gRIBCRD7VTU4/SByg6GsL/97RuxJR97i9MAzqaX2EZuSxLtRUvutiRJAqJK/iWS90wCDGBkkkng2FSWC4bOL0SFIpXGjo3C0oURxm7kzMpCC/s+sqKSDAYBnpcvG2O3fNcZnKCKYGhBtyq9d+xomkkNSc/lZ8iZTNmdgWZmIx5kF9MnCafQxvOCSO615OMA4yj75C2OkZtoj+nl/vz93v3+op1eDMJX+OPo223/rp1NdvKZrywfIUB+9MdT3/16fRAn/eHix+N0MJp6SO89tSX6aNE70xeyifroKQ6iKZ5gH7q9XHoU4Ni3UTKrSM7ya75jPCNCQITPKIreqS3AOMJENI08l46ihRM9JF8XJJWePhaGugs6dXryTk/W1AHVVYjjwKJPZMTPzk24cF/O2oOjTk977d9O2YNHMJigqEZBFPtEKwV7oho+RdhDUfBOLgiQCyPnrWx0kNruZHldjg/5QCH6BFzybuHS9x4usCu46lb9Bt2Y3qkT+qCLLOJm7S6M4A2OIxQIz/ANVpAt4zafOhEazmCqpTnx1WWMxo7rHmMXB+l3ZRsiY2wReRgF+AUVRjTLQKPxpwF6Q0GEFrUqpaNtmUYMGjDaQKEcmufuF+hUNi24Xk38OgyTxeLp5nR8N7U7F7o5vB08hoP20oFvlzY+WfsD40Zy8piSSGWnOXHSs68zh/vwapU53OuAuSvq1C27SJ3jSyL4p9O9/LcCJwnNs+TjLMAWCsOP+TKC1sskhfgqjlzHR7/hkYoMW+HxyJBGsqY1ySOJ8YYRSZE5RJIaItLPu7NpgE8HoK/Mz35G53rfNXeTLWyYD+aafNCkveKDyQslxySOWJfE4JOUFwVvjkVMlDgT7LqHFlUUYyWsaIpSYYMkbzOssELorwwrQF6TR+pe0Ygtm5uSBef+LI6qoLouKVbRp+kyHo8li0sXWxtpaqPBYxkrlsGDl4XxgofRGF2AdgDhA6wbP5adk32xfG4EYZZPsqBDMX11JVDs3vJVfbeBIo8Nj6XQsJ36w1g34dpZq6V23QW+XIfeDbIQufWhJVer0cLQdl1qgIpy/3+xginnQ9Pfr9KbLbtg+Vc2uoHznp82rq6Hlxch9g8iWCir0ULnWT6vW9VYtNDUvzhasKr74/RK3i/O1LV6E8IMr/oHFjPUlZih8vIsbasFubjjivxz1Mnfq2zjtUp9kVLkW92rjD2h23LdnH5Y9k7lwNthQFxhnyxW2bd8B7+VjG0nL1n+nA/PDw+d0/MIP/VO7h/00bl7cuK3Aduh8GFXy9gVH2rXXaBDTXrG3pZYLo7tj82+uRCyWnaY5hZLda4RKx/rMXltNPuiTpbbXeCITSvW6goYqxWaUW1/L31Ame9N6arqgluS5kaJoyRet6Q07TXGbKAdpmTukAskZbbIB8mnSfJ/GI88bMfkq3Q6srpsxmy8gsgO3/65cITco+V07BIfJ3NymFNrdGszR9WSnTNFe5BlTVANVdbYocojg8cjXTBExdCXh4ZMRauYyjf0XsVx7nguTDVXr9fEGmhIAEYTei4GUdMUzOKfsk2OVZtQVb/u251kn1zq0GEYOlbZ2MsxdiMGq60Z/ApqVDnWx2Rrx0h6h2vspP6FYSgayc6kIh1UBQiKJiuAHcpzZnkAnSZHqDqzIQu6UsBeL91F0QxBMiXNYIeV22RZROU2qSEstfTntlFt6G/G/36D4xeSKYu3eEZsaU0f3GDzZ5Mm+xUfC3RV0ERTV9lBW8/JAqALoi4DfXloyFmAauNuMxZx1e2RsYu0gBKPEyezrlnkzgc0UV/txjQUQ2DtJ+ZvDEGt5mPAzG1oNep+3QTqtquWW7fXoXdLXNsz3iZrv5gh15S+0haLhLpNphUlH0pXfJtVWOflZ4wHpnHiYKvz0IddxTvlWLGXbXJqpb8JIKlCmKQf2euIdKFknZKYdFwFq4IAeeqorGroOhM/yZeI4hDR6lGiG8eCbocOeI5tZw0KRHwjLdKS9GmWBPP0cdWjltpN5oojHNJctIIWy1cL0P7WN21q2+DqRimds21Q4sEpNQVnlS85nE6CpI0YkuMAe59Bcl11r484j6XlFLo56Fa3Tss6h4m8pp7aFHRSQxlFsvmdDJ64pG5ZM5XYD/A/m3FsxjQkfaX9IyuSoMqFyoSTi/I4rsiC2ZCpVHfWUZaHqddOye4naeTwqp8wHQcerO442g+UG8MRlHEEnD6NyMkYG+N3td/JB+366uLqbwWtDQAhWwk3g+OXN4QbOc1/Upi1CvJfZsq9/wA= \ No newline at end of file diff --git a/docs/data-flow-diagrams/psm/PSM Data Flow.drawio.png b/docs/data-flow-diagrams/psm/PSM Data Flow.drawio.png index 9203886ae..7f6faf57d 100644 Binary files a/docs/data-flow-diagrams/psm/PSM Data Flow.drawio.png and b/docs/data-flow-diagrams/psm/PSM Data Flow.drawio.png differ diff --git a/docs/data-flow-diagrams/spat/SPAT Data Flow.drawio b/docs/data-flow-diagrams/spat/SPAT Data Flow.drawio deleted file mode 100644 index 9cdf02de0..000000000 --- a/docs/data-flow-diagrams/spat/SPAT Data Flow.drawio +++ /dev/null @@ -1,220 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/data-flow-diagrams/spat/SPAT Data Flow.drawio.png b/docs/data-flow-diagrams/spat/SPAT Data Flow.drawio.png index 8741be56f..df803f65f 100644 Binary files a/docs/data-flow-diagrams/spat/SPAT Data Flow.drawio.png and b/docs/data-flow-diagrams/spat/SPAT Data Flow.drawio.png differ diff --git a/docs/data-flow-diagrams/srm/SRM Data Flow.drawio b/docs/data-flow-diagrams/srm/SRM Data Flow.drawio deleted file mode 100644 index 7a1facd07..000000000 --- a/docs/data-flow-diagrams/srm/SRM Data Flow.drawio +++ /dev/null @@ -1 +0,0 @@ -5VtbV+I6FP41rHXOA11N730ExNuMOoLjZV5mlTZANTTYFkF//UlK0gupFUdLPYwPle6ENN3f/vYlCS21N1sdhc58eoY9iFqK7K1a6kFLURQg6+QflTyvJcAC1loyCX2PyTLB0H+BTCgz6cL3YFToGGOMYn9eFLo4CKAbF2ROGOJlsdsYo+JT584ECoKh6yBReuN78XQttRQzkx9DfzLlTwaGvW6ZObwze5No6nh4mROp/ZbaCzGO159mqx5EVHtcLzcnzzfo+4NxdHoZPTo/u9+uzq/b68EO3/OV9BVCGMR/PPT1y+OtPDkfrn7eTS9H0xk0+7/aCnu1+JnrC3pEfewWh/EUT3DgoH4m7YZ4EXiQjiqTu6zPd4znRAiI8B7G8TOzBWcRYyKaxjPEWuHKj2/p1yVFZ7d3uaaDFRs6uXlmN1vqgOkqwovQZW9kLe79QbRCD8fty26nbzyeX035i8dOOIFxhYIY9lQrOXtiGj6CeAbj8Jl0CCFyYv+paHQOs91J2i/Dh3xgEL0DLrVZuMwvDxdoCq6qWT85aMGe1IkCcABd4ma9Ayd2BngRw1C6d54cAdkibsupH8Ph3Em0tCS+uojR2EeohxEOk++qngOtsUvkURziB5hrMVwLjsbvBugJhjFcVaqUtbZVFjFYwGgDjXFomblfYDLZNOd6DfnjMExWq1+Do/H11Oucmvbw6vIuumynDny3tAnI3G85N+jNXUIind9mxEnuPs6c0pfXReaU9gN2U9SpmnaeOr0zIvinc3D2rwAnCc1z+nEeYhdG0dt8GTnuwySB+GIRIz+Ar/BIh5anlfHIUkaqYdTJI4XzhhNJU0uIpNREpN/Xx9MQH12Cc215/Ds+Mc+R3Uy28Ml8sLfkg6F8KT7YZaGkR+KIe0YMnqa8MHzyXWKixJlghPYtqmjWRlgxNE1gg6LuMqzwQuivDCtA3ZJH+peiEZ92aUoWngTzRSyCihApVuG76TIejxW3lC6eMTL0WoNHGivS4FGWhZUFD6s2ugBjD8IH2DZ+pCsnX8XySyMIt3ySBe2L6esbgaJ5y9fNZgNFFhvuCqFhN/WHtW3C1dhSS+W8c3wZhrMBdCF59L4lV5vRwjKaLjWAoNz/X6zgynnT9L9W6c2nnbP8Cw8OnGU/SBauhoOz0wgHexEstM1oYZZZftlqVW3RwtD/4mjBq+630yv1a3GmaqmXEmZ4cb5nMUPfiBl6WZ5l7LQglxuuyN9HnWxfZRfbKtVFSp5vVVsZX4Ru6bxL1sPWeyp7vhwG5A32qbLIvnQPficZWyObLH/Oh/vb287RSYx/9Q9vbs3RCTo8DNqAn1B4c1XLaooPlfPO0aEiPeO7JS7CC+9ts68vhGyWHba9w1K91Ii1t/VIt43mH9RJetzFGfFh5UpdAWuzQrPE5e/UBxT5XpeuRBfcUgwUU0dJvG5BacbjAvOGdpSQuUM6KNp8lTWSTxP6f7gYzbC3IF9lw5HZrUdctwuINLj7h5wRRN10ON4lwHTMEuZUGt3WzNENenImbw+qaki6pasGv4g8ssp4ZEqWrFlmeqnJVAzBVL7BZxHHpT9DTqK5ar1Sa2AhAVh16DkfRG1bsvN/2i45ZtbEMXr4hDQeIrzclmVEZ3GRRkVacGxyHGIiB/mTgMYbAg8k8i5FwHcd1GENM9/z0GsLB8Uc4VMIZ2xtCKzVLnpfXQOSZmwXqjRVsmsyDnGFUgz6gdehhyiTaO9Eke8WIaxPuW9mRjnF6SV647KtEyj2hB/YT4jBcZUtemxNRE/VAL8Ux1wniWyYDCFxZEuVTC3nGMzCUzTDkhRbMSx+2XjMOsUUHpMYQqqlP7cNcbfncxzHN2f8QD3HFZ4TW9rSddS4MtiMPxADMDB1yZBtU+eXEvdQFoEBMCXZVIGZXmpyFkBc1f0ci7g46JO206S6lnvUyWxrFpnzAXUU382YhmZJfG2S+xtL0sVkHdiZDW2mZB83gaqzzMV1/WE4uyKu7R7vkrWi8j9rXUTZYQVZdQJZUPK+bJnsskS/GKhLqztdyi+9l1PDG3SR1Sux4tn6BFwr+cEISRUimn6s96qSiZJ5KjJdjpfcLbLa7bPVEBLfyCp4mj7NaTBPXlfvtvQDOtYixhErVN6RMNdGD2XzFJ1ZcqZUKYNTqQtOkS8ZnD5F0oMcyXGIZ+9Bson6pD7oNs/Vq2YJE8tWfPW6oFNegy5KqJggSHye/OPi9ILCh8OZI54x2nPcAFCkInJWCW5ySSZQG27iGchy3Oim5d+KW7p3wvP7khW1TwKN3GY/IlzXf9lvMdX+fw== \ No newline at end of file diff --git a/docs/data-flow-diagrams/srm/SRM Data Flow.drawio.png b/docs/data-flow-diagrams/srm/SRM Data Flow.drawio.png index 7c1d733cd..bf0ab84d0 100644 Binary files a/docs/data-flow-diagrams/srm/SRM Data Flow.drawio.png and b/docs/data-flow-diagrams/srm/SRM Data Flow.drawio.png differ diff --git a/docs/data-flow-diagrams/ssm/SSM Data Flow.drawio b/docs/data-flow-diagrams/ssm/SSM Data Flow.drawio deleted file mode 100644 index da722a3a6..000000000 --- a/docs/data-flow-diagrams/ssm/SSM Data Flow.drawio +++ /dev/null @@ -1 +0,0 @@ -5Vtbd6I6FP41rnXOgyzCnUdbrW1naqe108u8zIoQlRaI5VLt/PoTIBGQDNWpqMfpA5UdDGF/+9s3Yks+9Rb9AM6mV9hGbksS7UVL7rYkSQKiSv4lkvdMAgxgZJJJ4NhUlguGzi9EhSKVxo6NwtKFEcZu5MzKQgv7PrKikgwGAZ6XLxtjt3zXGZygimBoQbcqfXDsaJpJDUnP5efImUzZnYFmZiMeZBfTJwmn0MbzgkjuteTTAOMo++QtTpGbaI/p5eHi/cH9+qL1L2/CV/j95Mvd4L6dTXa2yVeWjxAgP/rjqe9/vT6Kk8Fw8f1pejOaekjv/WhL9NGid6YvZBP10VMcRFM8wT50e7n0JMCxb6NkVpGc5dd8xXhGhIAIn1EUvVNbgHGEiWgaeS4dRQsneky+LkgqPX0qDHUXdOr05J2erKkDqqsQx4FFn8iIn53bcOG+nLdvTjo97XVwN2UPHsFggqIaBVHsE60U7IlquI+wh6LgnVwQIBdGzlvZ6CC13cnyuhwf8oFCtAFc8n7h0g8eLrAvuOpW/QbdmN6pE/qgiyziZu0ujOAtjiMUCM/wDVaQLeM2nzoRGs5gqqU58dVljMaO655iFwfpd2UbImNsEXkYBfgFFUY0y0Cj8cYAvaEgQotaldLRtkwjBg0YbaBQDs1z9wt0KpsWXK8mfh6GyWLx47Y/vp/anUvdHN7dPIU37aUD3y1tfLL2R8aN5OQpJZHKTnPipGefZw734dUqc7jXAXNf1KlbdpE6p1dE8E+ne/VvBU4SmmfJx1mALRSGH/NlBK2XSQrxdRy5jo9+wyMVGbbC45EhjWRNa5JHEuMNI5Iic4gkNUSkn/fn0wD3b8BAmZ//jC70gWvuJ1vYMh/MNfmgSQfFB5MXSk5JHLGuiMEnKS8K3hyLmChxJth1jy2qKMZKWNEUpcIGSd5lWGGF0F8ZVoC8Jo/Ug6IRWzY3JQsu/FkcVUF1XVKsoo3pMh6PJYtLF1sbaWqjwWMZK5bBg5eF8YKH0RhdgHYE4QOsGz+WnZNDsXxuBGGWT7KgYzF9dSVQ7N/yVX2/gSKPDU+l0LCb+sNYN+HaW6uldt0FvgxD7xZZiNz62JKr1WhhaPsuNUBFuf+/WMGU86HpH1bpzZZdsPxrG93Cec9PG1fD4dVliP2jCBbKarTQeZbP61Y1Fi009S+OFqzq/ji9kg+LM3Wt3oQww+vBkcUMdSVmqLw8S9tpQS7uuSLfjDr5e5VdvFapL1KKfKt7lXEgdFuum9MPy96pHHk7DIgr7JPFKvuW7+B3krHt5SXLn/Ph+fGx07+I8I/e2cOjPrpwz878NmA7FD7sahn74kPtugt0qEnP2NsSy8Wx/bHZNxdCVssO09xhqc41YuVjPSavjWaf1MlyuwscsWnFWl0BY7VCM6rt76UPKPO9KV1VXXBL0twocZTE65aUpr3GmA20w5TMHXKBpMwW+SD5NEn+D+ORh+2YfJVOR1aXzZiNVxDZ49s/F46Qe7Kcjl3i42RODnNqjW5t5qhasnOmaA+yrAmqocoaO1R5ZPB4pAuGqBj68tCQqWgVU/mC3qs4zh3Phanm6vWaWAMNCcBoQs/FIGqagln8U3bJsWoTqurXfbuT7JNLHToMQ8cqG3s5xm7FYLU1g19BjSrH+phs7RhJ7/ANO6l/YRiKRrIzqUgHVQGCoskKYIfynFkeQKfJEarObMiCrhSw10t3UTRDkExJM9hh5TZZFlG5TWoISy39uW1UG/rb8b9f4PiFZMriHZ4RW1rTBzfY/NmmyX7GxwJdFTTR1FV20NZzsgDogqjLQF8eGnIWoNq4245FXHd7ZOwyLaDE08TJrGsWufMBTdRX+zENxRBY+4n5G0NQq/kYMHMbWo26nzeBuu2q5dbtMPS+4We8S85+Mj+uKXylHZYIdVtMKyo+lp74LmuwzsvPGN+YxpmDrc7jAHYVr8+xYS/b4tRKfxFAEoUwST6ylxHpQsk6JTHptwpWBQHy1FFZ1dB1Jn6SLRHFIaLVk0Q3jgXdDh3wHNvO2hOIeEZaoiXJ0ywJ5enjqicttZvMFUc4pJloBS2WrRag/a1n2tamwdVtUjpn06DEg1NqCs4qX3I4nQRJGzEkxwH2NkFyXXWvjziPpeUEujnoVjdOyzqHibyWntoUdFJD+USy9Z0MnrmkalkzkTgM8DfNN7ZjGpK+0vyRFUlQ5UJdwslEeRxXZMFsyFSq++ooy8PUa6dk95Mkcng9SJiOAw9W9xsdBsqN4QjKOAJOl0bk5IuN8bva7eSD9u368vpvBa0NACFbCTeD45e3hBs5zX9QmDUK8t9lyr3/AA== \ No newline at end of file diff --git a/docs/data-flow-diagrams/ssm/SSM Data Flow.drawio.png b/docs/data-flow-diagrams/ssm/SSM Data Flow.drawio.png index 7e5c31e1a..4873a1cef 100644 Binary files a/docs/data-flow-diagrams/ssm/SSM Data Flow.drawio.png and b/docs/data-flow-diagrams/ssm/SSM Data Flow.drawio.png differ diff --git a/docs/data-flow-diagrams/tim/TIM Data Flow.drawio b/docs/data-flow-diagrams/tim/TIM Data Flow.drawio deleted file mode 100644 index 7bdae6831..000000000 --- a/docs/data-flow-diagrams/tim/TIM Data Flow.drawio +++ /dev/null @@ -1,319 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/data-flow-diagrams/tim/TIM Data Flow.drawio.png b/docs/data-flow-diagrams/tim/TIM Data Flow.drawio.png index 1c28d8e7f..72df963a6 100644 Binary files a/docs/data-flow-diagrams/tim/TIM Data Flow.drawio.png and b/docs/data-flow-diagrams/tim/TIM Data Flow.drawio.png differ diff --git a/docs/index.html b/docs/index.html index 444b8bbfc..8cf5f42f5 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1303,7 +1303,7 @@ "type" : "object", "required" : [ "sspindex" ], "properties" : { - "notUsed" : { + "doNotUse1" : { "type" : "integer", "description" : "A short header information" }, @@ -1324,7 +1324,7 @@ "priority" : { "type" : "integer" }, - "notUsed1" : { + "doNotUse2" : { "type" : "integer" }, "sspindex" : { @@ -1337,10 +1337,10 @@ "$ref" : "#/definitions/Region" } }, - "sspMsgTypes" : { + "doNotUse4" : { "type" : "integer" }, - "sspMsgContent" : { + "doNotUse3" : { "type" : "integer" }, "content" : { diff --git a/docs/pull_request_template.md b/docs/pull_request_template.md index ede3dfb6c..1e3d1a748 100644 --- a/docs/pull_request_template.md +++ b/docs/pull_request_template.md @@ -39,6 +39,6 @@ - [ ] My change requires a change to the documentation. - [ ] I have updated the documentation accordingly. - [ ] I have read the **CONTRIBUTING** document. -[ODE Contributing Guide](https://github.com/usdot-jpo-ode/jpo-ode/blob/bugfix/Pull_request_template/docs/contributing_guide.md) +[ODE Contributing Guide](https://github.com/usdot-jpo-ode/jpo-ode/blob/develop/docs/contributing_guide.md) - [ ] I have added tests to cover my changes. - [ ] All new and existing tests passed. diff --git a/docs/release_process.md b/docs/release_process.md index 79d1cf007..42255e65f 100644 --- a/docs/release_process.md +++ b/docs/release_process.md @@ -148,10 +148,11 @@ After preliminary testing is complete, project reference updates should be made ### Steps #### Merging release branches, updating project references and creating releases -1. Update version number in pom.xml for the following projects. +1. Update version number in pom.xml for the following projects if not already done: - jpo-security-svcs - jpo-sdw-depositor - jpo-s3-deposit + - jpo-utils 2. Merge ‘release_(year)-(quarter)’ branch into ‘master/main’ branch for the following projects: - asn1_codec @@ -159,6 +160,7 @@ After preliminary testing is complete, project reference updates should be made - jpo-security-svcs - jpo-sdw-depositor - jpo-s3-deposit + - jpo-utils 2a. Create a release for the asn1_codec project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. asn1_codec-x.x.x) @@ -170,7 +172,9 @@ After preliminary testing is complete, project reference updates should be made 2e. Create a release for the jpo-s3-deposit project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-s3-deposit-x.x.x) -3. Update version number in pom.xml files for the 'jpo-ode' project. + 2f. Create a release for the jpo-utils project from the ‘master/main’ branch and tag the release with the version number of the release. (e.g. jpo-utils-x.x.x) + +3. Update version number in pom.xml files for the 'jpo-ode' project if not already done. 3a. Open the jpo-ode project in an IDE @@ -190,7 +194,7 @@ After preliminary testing is complete, project reference updates should be made 4e. Navigate to the jpo-sdw-depositor directory and run `git checkout tags/jpo-sdw-depositor-x.x.x` to update the submodule reference. - 4f. Navigate to the jpo-s3-deposit directory and run `git checkout tags/jpo-s3-deposit-x.x.x` to update the submodule reference. + 4f. Navigate to the jpo-utils directory and run `git checkout tags/jpo-utils-x.x.x` to update the submodule reference. 4g. Commit these changes to the `release_(year)-(quarter)` branch & push the changes to the remote repository. @@ -198,7 +202,7 @@ After preliminary testing is complete, project reference updates should be made 5. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-ode project, and create a release with the version number of the release. (e.g. jpo-ode-x.x.x) -6. Update version number in pom.xml file for the `jpo-geojsonconverter` project. +6. Update version number in pom.xml file for the `jpo-geojsonconverter` project if not already done. 7. Update git submodule references for the ‘jpo-geojsonconverter’ project to point to the tagged commit in jpo-ode master/main branch. @@ -214,7 +218,7 @@ After preliminary testing is complete, project reference updates should be made 8. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-geojsonconverter project, and create a release with the version number of the release. (e.g. jpo-geojsonconverter-x.x.x) -9. Update version number in pom.xml file for the `jpo-conflictmonitor` project. +9. Update version number in pom.xml file for the `jpo-conflictmonitor` project if not already done. 10. Update git submodule references for the `jpo-conflictmonitor` project to point to the tagged commit in jpo-geojsonconverter master/main branch. Also update the corresponding version number for the jpo-geojsonconverter and jpo-ode-* dependencies in the pom.xml files of the conflictmonitor project. This change will be necessary in the jpo-conflictmonitor/pom.xml, jpo-deduplicator/pom.xml and message-sender/pom.xml files. @@ -230,7 +234,7 @@ After preliminary testing is complete, project reference updates should be made 11. Merge `release_(year)-(quarter)` branch into `master/main` branch for the jpo-conflictmonitor project, and create a release with the version number of the release. (e.g. jpo-conflictmonitor-x.x.x) -12. Update version number in pom.xml file for the `jpo-conflictvisualizer` project. The pom.xml can be found in the `api/jpo-conflictvisualizer-api` directory. +12. Update version number in pom.xml file for the `jpo-conflictvisualizer` project if not already done. The pom.xml can be found in the `api/jpo-conflictvisualizer-api` directory. 13. Update git submodule references for the `jpo-conflictvisualizer` project to point to the tagged commit in jpo-conflictmonitor master/main branch. Also update the corresponding version number for the jpo-conflictmonitor dependency in the pom.xml file of the conflictvisualizer project. diff --git a/docs/schemas/README.md b/docs/schemas/README.md index 58da1e5a9..f0d71cb08 100644 --- a/docs/schemas/README.md +++ b/docs/schemas/README.md @@ -1,8 +1,9 @@ # jpo-ode JSON Output Schemas -The jpo-ode supports receiving and decoding ASN1 messages from RSUs. The supported message types are currently BSM, MAP, SPaT, SRM and SSM. These are decoded into XML, deserialized into POJOs and finally serialized into JSON. This JSON output can be access from any of the corresponding message's JSON output Kafka topics: +The jpo-ode supports receiving and decoding ASN1 messages from RSUs. The supported message types are currently BSM, TIM, MAP, SPaT, SRM, SSM, and PSM. These are decoded into XML, deserialized into POJOs and finally serialized into JSON. This JSON output can be access from any of the corresponding message's JSON output Kafka topics: - [topic.OdeBsmJson](../../jpo-ode-core/src/main/resources/schemas/schema-bsm.json) +- [topic.OdeTimJson](../../jpo-ode-core/src/main/resources/schemas/schema-tim.json) - [topic.OdeMapJson](../../jpo-ode-core/src/main/resources/schemas/schema-map.json) - [topic.OdeSpatJson](../../jpo-ode-core/src/main/resources/schemas/schema-spat.json) - [topic.OdeSrmJson](../../jpo-ode-core/src/main/resources/schemas/schema-srm.json) @@ -11,6 +12,8 @@ The jpo-ode supports receiving and decoding ASN1 messages from RSUs. The support The output JSON of the ODE is complex but it is similar to the official standard of J2735 with some minor differences due to the form of their deserialized POJOs. To help implement proper data validation for the JSON output of the ODE into any data pipeline infrastructure, you may use the provided validation schemas within this directory. +Each jpo-ode output object also contains a `schemaVersion`. This value represents the version of the jpo-ode output that the object came from. This version is not intended to be changed except in the scenario of newly added breaking changes to the output. This value is set [here](./jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMsgMetadata.java). + ## Testing the schemas These schemas can be used for manual validation in the following steps: 1. To perform a simple schema validation check against output JSON data from the jpo-ode, you may use a schema validation site such as https://www.jsonschemavalidator.net. diff --git a/docs/timEndpointCurl.sh b/docs/timEndpointCurl.sh index 5c6d4f6c3..b3952dada 100755 --- a/docs/timEndpointCurl.sh +++ b/docs/timEndpointCurl.sh @@ -196,8 +196,8 @@ curl -X POST -H "Content-Type: application/json" -H "Cache-Control: no-cache" -H }] }, "content": { - "notUsed2": "0", - "notUsed3": "0", + "doNotUse3": 0, + "doNotUse4": 0, "contentType": { "advisory": [{ "ITISCodes": "268", diff --git a/docs/timEndpointPython.py b/docs/timEndpointPython.py index 2ec2afbf1..e8c880ef4 100644 --- a/docs/timEndpointPython.py +++ b/docs/timEndpointPython.py @@ -2,7 +2,7 @@ url = "http://localhost:8080/tim" -payload = "{\r\n\t\"timContent\": {\r\n\t\t\"msgcnt\": \"1\",\r\n\t\t\"timestamp\": \"op\",\r\n\t\t\"packetID\": \"op\",\r\n\t\t\"urlB\": \"op\",\r\n\t\t\"travelerDataFrame\": [{\r\n\t\t\t\"header\": {\r\n\t\t\t\t\"sspindex\": \"1\",\r\n\t\t\t\t\"travelerInfoType\": \"1\",\r\n\t\t\t\t\"msgId\": {\r\n\t\t\t\t\t\"FurtherInfoID\": \"1\",\r\n\t\t\t\t\t\"RoadSignID\": {\r\n\t\t\t\t\t\t\"position3D\": {\r\n\t\t\t\t\t\t\t\"latitude\": \"1\",\r\n\t\t\t\t\t\t\t\"longitude\": \"1\",\r\n\t\t\t\t\t\t\t\"elevation\": \"1\",\r\n\t\t\t\t\t\t\t\"regional\": \"op\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"HeadingSlice\": \"1010011010010100\",\r\n\t\t\t\t\t\t\"MUTCDCode\": \"op\",\r\n\t\t\t\t\t\t\"MsgCRC\": \"op\"\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"DYear\": \"op\",\r\n\t\t\t\t\"MinuteOfTheYear\": \"0\",\r\n\t\t\t\t\"MinutesDuration\": \"0\",\r\n\t\t\t\t\"SignPriority\": \"0\"\r\n\t\t\t},\r\n\t\t\t\"region\": {\r\n\t\t\t\t\"sspindex\": \"0\",\r\n\t\t\t\t\"GeographicalPath\": [{\r\n\t\t\t\t\t\"name\": \"op\",\r\n\t\t\t\t\t\"id\": \"op\",\r\n\t\t\t\t\t\"anchor\": \"op\",\r\n\t\t\t\t\t\"laneWidth\": \"op\",\r\n\t\t\t\t\t\"diretionality\": \"op\",\r\n\t\t\t\t\t\"closedPath\": \"op\",\r\n\t\t\t\t\t\"direction\": \"op\",\r\n\t\t\t\t\t\"description\": [{\r\n\t\t\t\t\t\t\"path\": [{\r\n\t\t\t\t\t\t\t\"scale\": \"op\",\r\n\t\t\t\t\t\t\t\"offset\": [{\r\n\t\t\t\t\t\t\t\t\"xy\": [{\r\n\t\t\t\t\t\t\t\t\t\"nodes\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"delta\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL1\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL2\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL3\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL4\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL5\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL6\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"attributes\": \"op\"\r\n\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\"computed\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"referenceLaneID\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"offsetXaxis\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"small\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\t\"large\": \"1\"\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"offsetYaxis\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"small\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\t\"large\": \"1\"\r\n\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\"ll\": [{\r\n\t\t\t\t\t\t\t\t\t\"nodes\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"delta\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL1\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL2\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL3\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL4\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL5\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL6\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"attributes\": \"op\"\r\n\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\"geometry\": [{\r\n\t\t\t\t\t\t\t\"direction\": \"1001101100100100\",\r\n\t\t\t\t\t\t\t\"circle\": [{\r\n\t\t\t\t\t\t\t\t\"center\": [{\r\n\t\t\t\t\t\t\t\t\t\"latitude\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\"longitude\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\"elevation\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\"regional\": \"op\"\r\n\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\"radius\": \"3\",\r\n\t\t\t\t\t\t\t\t\"units\": \"4\"\r\n\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\"oldRegion\": [{\r\n\t\t\t\t\t\t\t\"direction\": \"1001101100100100\",\r\n\t\t\t\t\t\t\t\"area\": [{\r\n\t\t\t\t\t\t\t\t\"shapePointSet\": [{\r\n\t\t\t\t\t\t\t\t\t\"nodes\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"delta\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL1\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL2\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL3\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL4\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL5\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL6\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"attributes\": \"op\"\r\n\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\"computed\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"referenceLaneID\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"offsetXaxis\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"small\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\t\"large\": \"1\"\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"offsetYaxis\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"small\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\t\"large\": \"1\"\r\n\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\"circle\": [{\r\n\t\t\t\t\t\t\t\t\t\"center\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"latitude\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"longitude\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"elevation\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"regional\": \"op\"\r\n\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\"radius\": \"3\",\r\n\t\t\t\t\t\t\t\t\t\"units\": \"4\"\r\n\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\"regionPointSet\": [{\r\n\t\t\t\t\t\t\t\t\t\"nodeList\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"xOffset\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"yOffset\": \"1\"\r\n\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t}]\r\n\t\t\t\t\t}]\r\n\t\t\t\t}]\r\n\t\t\t},\r\n\t\t\t\"content\": {\r\n\t\t\t\t\"notUsed2\": \"0\",\r\n\t\t\t\t\"notUsed3\": \"0\",\r\n\t\t\t\t\"contentType\": {\r\n\t\t\t\t\t\"advisory\": [{\r\n\t\t\t\t\t\t\"ITISCodes\": \"268\",\r\n\t\t\t\t\t\t\"ITIStext\": \"Speed Limit\"\r\n\t\t\t\t\t} ],\r\n\t\t\t\t\t\"workZone\": [],\r\n\t\t\t\t\t\"genericSign\": [],\r\n\t\t\t\t\t\"speedLimit\": [],\r\n\t\t\t\t\t\"exitService\": []\r\n\t\t\t\t},\r\n\t\t\t\t\"URL-Short\": \"op\",\r\n\t\t\t\t\"regional\": \"op\"\r\n\t\t\t}\r\n\t\t}],\r\n\t\t\"regional\": \"op\"\r\n\t},\r\n\t\"RSUs\": [{\r\n\t\t\"target\": \"127.0.0.1\",\r\n\t\t\"username\": \"v3user\",\r\n\t\t\"password\": \"password\",\r\n\t\t\"retries\": \"1\",\r\n\t\t\"timeout\": \"2000\"\r\n\t}], \r\n\t\"snmp\": {\r\n\t\t\"rsuid\": \"8300\",\r\n\t\t\"msgid\": \"31\",\r\n\t\t\"mode\": \"1\",\r\n\t\t\"channel\": \"178\",\r\n\t\t\"interval\": \"1\",\r\n\t\t\"deliverystart\": \"010114111530\",\r\n\t\t\"deliverystop\": \"010114130000\",\r\n\t\t\"enable\": \"1\",\r\n\t\t\"status\": \"4\"\r\n\t}\r\n}" +payload = "{\r\n\t\"timContent\": {\r\n\t\t\"msgcnt\": \"1\",\r\n\t\t\"timestamp\": \"op\",\r\n\t\t\"packetID\": \"op\",\r\n\t\t\"urlB\": \"op\",\r\n\t\t\"travelerDataFrame\": [{\r\n\t\t\t\"header\": {\r\n\t\t\t\t\"sspindex\": \"1\",\r\n\t\t\t\t\"travelerInfoType\": \"1\",\r\n\t\t\t\t\"msgId\": {\r\n\t\t\t\t\t\"FurtherInfoID\": \"1\",\r\n\t\t\t\t\t\"RoadSignID\": {\r\n\t\t\t\t\t\t\"position3D\": {\r\n\t\t\t\t\t\t\t\"latitude\": \"1\",\r\n\t\t\t\t\t\t\t\"longitude\": \"1\",\r\n\t\t\t\t\t\t\t\"elevation\": \"1\",\r\n\t\t\t\t\t\t\t\"regional\": \"op\"\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\"HeadingSlice\": \"1010011010010100\",\r\n\t\t\t\t\t\t\"MUTCDCode\": \"op\",\r\n\t\t\t\t\t\t\"MsgCRC\": \"op\"\r\n\t\t\t\t\t}\r\n\t\t\t\t},\r\n\t\t\t\t\"DYear\": \"op\",\r\n\t\t\t\t\"MinuteOfTheYear\": \"0\",\r\n\t\t\t\t\"MinutesDuration\": \"0\",\r\n\t\t\t\t\"SignPriority\": \"0\"\r\n\t\t\t},\r\n\t\t\t\"region\": {\r\n\t\t\t\t\"sspindex\": \"0\",\r\n\t\t\t\t\"GeographicalPath\": [{\r\n\t\t\t\t\t\"name\": \"op\",\r\n\t\t\t\t\t\"id\": \"op\",\r\n\t\t\t\t\t\"anchor\": \"op\",\r\n\t\t\t\t\t\"laneWidth\": \"op\",\r\n\t\t\t\t\t\"diretionality\": \"op\",\r\n\t\t\t\t\t\"closedPath\": \"op\",\r\n\t\t\t\t\t\"direction\": \"op\",\r\n\t\t\t\t\t\"description\": [{\r\n\t\t\t\t\t\t\"path\": [{\r\n\t\t\t\t\t\t\t\"scale\": \"op\",\r\n\t\t\t\t\t\t\t\"offset\": [{\r\n\t\t\t\t\t\t\t\t\"xy\": [{\r\n\t\t\t\t\t\t\t\t\t\"nodes\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"delta\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL1\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL2\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL3\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL4\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL5\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL6\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"attributes\": \"op\"\r\n\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\"computed\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"referenceLaneID\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"offsetXaxis\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"small\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\t\"large\": \"1\"\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"offsetYaxis\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"small\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\t\"large\": \"1\"\r\n\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\"ll\": [{\r\n\t\t\t\t\t\t\t\t\t\"nodes\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"delta\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL1\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL2\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL3\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL4\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL5\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL6\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"attributes\": \"op\"\r\n\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\"geometry\": [{\r\n\t\t\t\t\t\t\t\"direction\": \"1001101100100100\",\r\n\t\t\t\t\t\t\t\"circle\": [{\r\n\t\t\t\t\t\t\t\t\"center\": [{\r\n\t\t\t\t\t\t\t\t\t\"latitude\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\"longitude\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\"elevation\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\"regional\": \"op\"\r\n\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\"radius\": \"3\",\r\n\t\t\t\t\t\t\t\t\"units\": \"4\"\r\n\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\"oldRegion\": [{\r\n\t\t\t\t\t\t\t\"direction\": \"1001101100100100\",\r\n\t\t\t\t\t\t\t\"area\": [{\r\n\t\t\t\t\t\t\t\t\"shapePointSet\": [{\r\n\t\t\t\t\t\t\t\t\t\"nodes\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"delta\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL1\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL2\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL3\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL4\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL5\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\t\"node-LL6\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lon\": \"20\",\r\n\t\t\t\t\t\t\t\t\t\t\t\t\"lat\": \"21\"\r\n\t\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"attributes\": \"op\"\r\n\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\"computed\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"referenceLaneID\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"offsetXaxis\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"small\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\t\"large\": \"1\"\r\n\t\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\t\"offsetYaxis\": [{\r\n\t\t\t\t\t\t\t\t\t\t\t\"small\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\t\"large\": \"1\"\r\n\t\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\"circle\": [{\r\n\t\t\t\t\t\t\t\t\t\"center\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"latitude\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"longitude\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"elevation\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"regional\": \"op\"\r\n\t\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\t\"radius\": \"3\",\r\n\t\t\t\t\t\t\t\t\t\"units\": \"4\"\r\n\t\t\t\t\t\t\t\t}],\r\n\t\t\t\t\t\t\t\t\"regionPointSet\": [{\r\n\t\t\t\t\t\t\t\t\t\"nodeList\": [{\r\n\t\t\t\t\t\t\t\t\t\t\"xOffset\": \"1\",\r\n\t\t\t\t\t\t\t\t\t\t\"yOffset\": \"1\"\r\n\t\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t\t}]\r\n\t\t\t\t\t\t}]\r\n\t\t\t\t\t}]\r\n\t\t\t\t}]\r\n\t\t\t},\r\n\t\t\t\"content\": {\r\n\t\t\t\t\"doNotUse3\": \"0\",\r\n\t\t\t\t\"doNotUse4\": \"0\",\r\n\t\t\t\t\"contentType\": {\r\n\t\t\t\t\t\"advisory\": [{\r\n\t\t\t\t\t\t\"ITISCodes\": \"268\",\r\n\t\t\t\t\t\t\"ITIStext\": \"Speed Limit\"\r\n\t\t\t\t\t} ],\r\n\t\t\t\t\t\"workZone\": [],\r\n\t\t\t\t\t\"genericSign\": [],\r\n\t\t\t\t\t\"speedLimit\": [],\r\n\t\t\t\t\t\"exitService\": []\r\n\t\t\t\t},\r\n\t\t\t\t\"URL-Short\": \"op\",\r\n\t\t\t\t\"regional\": \"op\"\r\n\t\t\t}\r\n\t\t}],\r\n\t\t\"regional\": \"op\"\r\n\t},\r\n\t\"RSUs\": [{\r\n\t\t\"target\": \"127.0.0.1\",\r\n\t\t\"username\": \"v3user\",\r\n\t\t\"password\": \"password\",\r\n\t\t\"retries\": \"1\",\r\n\t\t\"timeout\": \"2000\"\r\n\t}], \r\n\t\"snmp\": {\r\n\t\t\"rsuid\": \"8300\",\r\n\t\t\"msgid\": \"31\",\r\n\t\t\"mode\": \"1\",\r\n\t\t\"channel\": \"178\",\r\n\t\t\"interval\": \"1\",\r\n\t\t\"deliverystart\": \"010114111530\",\r\n\t\t\"deliverystop\": \"010114130000\",\r\n\t\t\"enable\": \"1\",\r\n\t\t\"status\": \"4\"\r\n\t}\r\n}" headers = { 'content-type': "application/json", 'cache-control': "no-cache", diff --git a/jpo-ode-common/pom.xml b/jpo-ode-common/pom.xml index 7ba82c8d5..0b08b2e67 100644 --- a/jpo-ode-common/pom.xml +++ b/jpo-ode-common/pom.xml @@ -5,7 +5,7 @@ usdot.jpo.ode jpo-ode - 3.0.0-SNAPSHOT + 4.0.0 jpo-ode-common diff --git a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/inet/InetPacketException.java b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/inet/InetPacketException.java index 3058b4774..10c681bec 100644 --- a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/inet/InetPacketException.java +++ b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/inet/InetPacketException.java @@ -1,29 +1,30 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.inet; public class InetPacketException extends Exception { - - private static final long serialVersionUID = 1L; - public InetPacketException(String message) { - super(message); - } - - public InetPacketException(String message, Throwable cause) { - super(message, cause); - } + private static final long serialVersionUID = 1L; + + public InetPacketException(String message) { + super(message); + } + + public InetPacketException(String message, Throwable cause) { + super(message, cause); + } } diff --git a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/inet/InetPacketSender.java b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/inet/InetPacketSender.java index e084a7b61..5ac17ac1c 100644 --- a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/inet/InetPacketSender.java +++ b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/inet/InetPacketSender.java @@ -1,174 +1,185 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.inet; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; - -import us.dot.its.jpo.ode.eventlog.EventLogger; +import lombok.extern.slf4j.Slf4j; /** * Sender/Forwarder helper class for use by Forwarder, Transport, and Data Sink - * that need to send packets around + * that need to send packets around. */ +@Slf4j public class InetPacketSender { - private static final String INVALID_PARAMETERS_MSG = "Invalid Parameters. Parameters destination point and payload can not be null"; - - /** - * Inet address and port to forward packets to - */ - private InetPoint frwdPoint; - - /** - * Specifies whether outbound IPv4 messages should be send directly or - * forwarded. Default is send directly. - * To force forwarding IPv4 messages, set this variable to true. - */ - private boolean forwardAll; - - public InetPacketSender() { - } - - /** - * Creates an instance of the forwarder/sender helper class. - * - * @param frwdPoint is the destination to use for forwarding - */ - public InetPacketSender(InetPoint frwdPoint) { - this.frwdPoint = frwdPoint; - } - - /** - * Forward packet. Intended client is the forwarder that received a packet - * - * @param inbound UDP packet - * @throws InetPacketException - */ - public void forward(DatagramPacket packet) throws InetPacketException { - if (packet == null) { - EventLogger.logger.warn("Ignoring forward request for null packet"); - return; - } - if (frwdPoint == null) - throw new InetPacketException("Couldn't forward packet. Reason: Forwarding destination is not defined."); - send(frwdPoint, new InetPacket(packet).getBundle()); - } - - /** - * Send packet. Intended client is the forwarder that sends outbound packet - * - * @param packet outbound packet that contains destination+payload bundle - * @throws InetPacketException - */ - public void send(DatagramPacket packet) throws InetPacketException { - if (packet == null) { - EventLogger.logger.warn("Ignoring send request for null packet"); - return; - } - InetPacket p = new InetPacket(packet); - InetPoint point = p.getPoint(); - if (point == null) - throw new InetPacketException( - "Couldn't send packet. Reason: Destination is not defined in the packet (not a bundle?)"); - send(point, p.getPayload()); - } - - /** - * Forward payload to be sent to dstPoint. Intended clients are Transport or - * Data Sink sending via forwarder - * - * @param dstPoint destination address and port for forwarder to forward to - * @param payload data to forward - * @throws InetPacketException - */ - public void forward(InetPoint dstPoint, byte[] payload) throws InetPacketException { - if (dstPoint == null || payload == null) - throw new InetPacketException(INVALID_PARAMETERS_MSG); - if (frwdPoint == null) - EventLogger.logger.warn("Couldn't forward packet. Reason: Forwarding destination is not defined."); - if (frwdPoint != null && (dstPoint.isIPv6Address() || isForwardAll())) { - send(frwdPoint, new InetPacket(dstPoint, payload).getBundle()); - } else { - EventLogger.logger.debug("Using direct send instead of forwarding"); - send(dstPoint, payload); - } - } - - /** - * Forward payload to be sent to dstPoint. Intended clients are Transport or - * Data Sink sending via forwarder or direct - * - * @param dstPoint destination address and port of the final destination - * @param payload data to forward or send - * @param fromForwarder whether the original request came through a forwarder - * @throws InetPacketException - */ - public void forward(InetPoint dstPoint, byte[] payload, boolean fromForwarder) throws InetPacketException { - if (dstPoint == null || payload == null) - throw new InetPacketException(INVALID_PARAMETERS_MSG); - if (frwdPoint != null && (dstPoint.isIPv6Address() || isForwardAll() || fromForwarder)) { - send(frwdPoint, new InetPacket(dstPoint, payload).getBundle()); - } else { - EventLogger.logger.debug("Using direct send instead of forwarding"); - send(dstPoint, payload); - } - } - - /** - * Send payload to the destination specified. Intended clients are Transport or - * Data Sink sending directly to the client - * - * @param dstPoint destination address and port to send to - * @param payload data to send - * @throws InetPacketException - */ - public void send(InetPoint dstPoint, byte[] payload) throws InetPacketException { - if (dstPoint == null || payload == null) - throw new InetPacketException(INVALID_PARAMETERS_MSG); - try (DatagramSocket sock = new DatagramSocket()) { - DatagramPacket packet = new DatagramPacket(payload, payload.length, dstPoint.getInetAddress(), - dstPoint.port); - sock.send(packet); - } catch (SocketException ex) { - throw new InetPacketException("Couldn't send packet because socket closed.", ex); - } catch (IOException ex) { - throw new InetPacketException("Couldn't send packet due to IO exception.", ex); - } - } - - /** - * Reports whether outbound IPv4 messages should be send directly or forwarded. - * - * @return true if IPv4 packets are forwarded in addition to IPv6 packets - */ - public boolean isForwardAll() { - return forwardAll; - } - - /** - * - * @param forwardAll Directs how to handle IPv4 messages. - * Specify true to force forwarding IPv4 messages, and false - * to always send them directly. - */ - public void setForwardAll(boolean forwardAll) { - this.forwardAll = forwardAll; - } + private static final String INVALID_PARAMETERS_MSG = + "Invalid Parameters. Parameters destination point and payload can not be null"; + + /** + * Inet address and port to forward packets to. + */ + private InetPoint frwdPoint; + + /** + * Specifies whether outbound IPv4 messages should be send directly or + * forwarded. Default is send directly. + * To force forwarding IPv4 messages, set this variable to true. + */ + private boolean forwardAll; + + public InetPacketSender() { + } + + /** + * Creates an instance of the forwarder/sender helper class. + * + * @param frwdPoint is the destination to use for forwarding + */ + public InetPacketSender(InetPoint frwdPoint) { + this.frwdPoint = frwdPoint; + } + + /** + * Forward packet. Intended client is the forwarder that received a packet + * + * @param packet UDP packet + * @throws InetPacketException if the packet is null or the destination is not defined + */ + public void forward(DatagramPacket packet) throws InetPacketException { + if (packet == null) { + log.warn("Ignoring forward request for null packet"); + return; + } + if (frwdPoint == null) { + throw new InetPacketException( + "Couldn't forward packet. Reason: Forwarding destination is not defined."); + } + send(frwdPoint, new InetPacket(packet).getBundle()); + } + + /** + * Forward payload to be sent to dstPoint. Intended clients are Transport or + * Data Sink sending via forwarder + * + * @param dstPoint destination address and port for forwarder to forward to + * @param payload data to forward + * @throws InetPacketException if the packet is null or the destination is not defined + */ + public void forward(InetPoint dstPoint, byte[] payload) throws InetPacketException { + if (dstPoint == null || payload == null) { + throw new InetPacketException(INVALID_PARAMETERS_MSG); + } + if (frwdPoint == null) { + log.warn("Couldn't forward packet. Reason: Forwarding destination is not defined."); + } + if (frwdPoint != null && (dstPoint.isIPv6Address() || isForwardAll())) { + send(frwdPoint, new InetPacket(dstPoint, payload).getBundle()); + } else { + log.debug("Using direct send instead of forwarding"); + send(dstPoint, payload); + } + } + + /** + * Forward payload to be sent to dstPoint. Intended clients are Transport or + * Data Sink sending via forwarder or direct + * + * @param dstPoint destination address and port of the final destination + * @param payload data to forward or send + * @param fromForwarder whether the original request came through a forwarder + * @throws InetPacketException if the packet is null or the destination is not defined + */ + public void forward(InetPoint dstPoint, byte[] payload, boolean fromForwarder) + throws InetPacketException { + if (dstPoint == null || payload == null) { + throw new InetPacketException(INVALID_PARAMETERS_MSG); + } + if (frwdPoint != null && (dstPoint.isIPv6Address() || isForwardAll() || fromForwarder)) { + send(frwdPoint, new InetPacket(dstPoint, payload).getBundle()); + } else { + log.debug("Using direct send instead of forwarding"); + send(dstPoint, payload); + } + } + + /** + * Send packet. Intended client is the forwarder that sends outbound packet + * + * @param packet outbound packet that contains destination+payload bundle + * @throws InetPacketException if the packet is null or the destination is not defined + */ + public void send(DatagramPacket packet) throws InetPacketException { + if (packet == null) { + log.warn("Ignoring send request for null packet"); + return; + } + InetPacket p = new InetPacket(packet); + InetPoint point = p.getPoint(); + if (point == null) { + throw new InetPacketException( + "Couldn't send packet. Reason: Destination is not defined in the packet (not a bundle?)"); + } + send(point, p.getPayload()); + } + + /** + * Send payload to the destination specified. Intended clients are Transport or + * Data Sink sending directly to the client + * + * @param dstPoint destination address and port to send to + * @param payload data to send + * @throws InetPacketException if the packet is null or the destination is not defined + */ + public void send(InetPoint dstPoint, byte[] payload) throws InetPacketException { + if (dstPoint == null || payload == null) { + throw new InetPacketException(INVALID_PARAMETERS_MSG); + } + try (DatagramSocket sock = new DatagramSocket()) { + DatagramPacket packet = new DatagramPacket(payload, payload.length, dstPoint.getInetAddress(), + dstPoint.port); + sock.send(packet); + } catch (SocketException ex) { + throw new InetPacketException("Couldn't send packet because socket closed.", ex); + } catch (IOException ex) { + throw new InetPacketException("Couldn't send packet due to IO exception.", ex); + } + } + + /** + * Reports whether outbound IPv4 messages should be sent directly or forwarded. + * + * @return true if IPv4 packets are forwarded in addition to IPv6 packets + */ + public boolean isForwardAll() { + return forwardAll; + } + + /** + * Sets whether outbound IPv4 messages should be sent directly or forwarded. + * + * @param forwardAll Directs how to handle IPv4 messages. + * Specify true to force forwarding IPv4 messages, and false + * to always send them directly. + */ + public void setForwardAll(boolean forwardAll) { + this.forwardAll = forwardAll; + } } diff --git a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/DateTimeUtils.java b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/DateTimeUtils.java index 7dea6140e..7ddaa79c7 100644 --- a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/DateTimeUtils.java +++ b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/DateTimeUtils.java @@ -16,24 +16,27 @@ package us.dot.its.jpo.ode.util; import java.text.ParseException; -import java.time.Instant; -import java.time.ZoneId; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; +import java.time.*; import java.time.format.DateTimeFormatter; import java.util.Date; public class DateTimeUtils { + private static Clock clock = Clock.systemUTC(); + private DateTimeUtils() { } + public static void setClock(Clock clock) { + DateTimeUtils.clock = clock; + } + public static String now() { return nowZDT().format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); } public static ZonedDateTime nowZDT() { - return ZonedDateTime.now(ZoneId.of("UTC")); + return ZonedDateTime.now(clock.withZone(ZoneId.of("UTC"))); } public static String isoDateTime(ZonedDateTime zonedDateTime) { @@ -45,7 +48,7 @@ public static String isoDateTime(ZonedDateTime zonedDateTime) { return ZonedDateTime.of(year, month, dayOfMonth, hourOfDay, minute, second, millisec * 1000000, ZoneOffset.UTC); } - public static ZonedDateTime isoDateTime(String s) throws ParseException { + public static ZonedDateTime isoDateTime(String s) { return ZonedDateTime.parse(s); } @@ -53,8 +56,8 @@ public static ZonedDateTime isoDateTime(Date date) { return ZonedDateTime.from(date.toInstant().atZone(ZoneId.of("UTC"))); } - public static ZonedDateTime isoDateTime(long epockMillis) { - return ZonedDateTime.ofInstant(Instant.ofEpochMilli(epockMillis), ZoneId.of("UTC")); + public static ZonedDateTime isoDateTime(long epochMillis) { + return ZonedDateTime.ofInstant(Instant.ofEpochMilli(epochMillis), ZoneId.of("UTC")); } public static boolean diff --git a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/JsonUtils.java b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/JsonUtils.java index 3798f0e6b..702d10783 100644 --- a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/JsonUtils.java +++ b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/JsonUtils.java @@ -15,19 +15,10 @@ ******************************************************************************/ package us.dot.its.jpo.ode.util; -import java.io.IOException; -import java.math.BigDecimal; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map.Entry; - -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; @@ -37,7 +28,15 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.type.LogicalType; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; +import lombok.extern.slf4j.Slf4j; +import org.json.JSONObject; +@Slf4j public class JsonUtils { public static class JsonUtilsException extends Exception { @@ -50,12 +49,10 @@ public JsonUtilsException(String string, Exception e) { } - private static ObjectMapper mapper; - private static ObjectMapper mapper_noNulls; - private static Logger logger; + private static final ObjectMapper mapper; + private static final ObjectMapper mapper_noNulls; private JsonUtils() { - logger = LoggerFactory.getLogger(JsonUtils.class); } static { @@ -67,6 +64,10 @@ private JsonUtils() { mapper_noNulls = new ObjectMapper(); mapper_noNulls.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); mapper_noNulls.setSerializationInclusion(Include.NON_NULL); + + // Ensure BigDecimals are serialized consistently as numbers not strings + mapper.configOverride(BigDecimal.class).setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.NUMBER)); + mapper_noNulls.configOverride(BigDecimal.class).setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.NUMBER)); } public static String toJson(Object o, boolean verbose) { @@ -75,7 +76,7 @@ public static String toJson(Object o, boolean verbose) { try { return verbose ? mapper.writeValueAsString(o) : mapper_noNulls.writeValueAsString(o); } catch (JsonProcessingException e) { - e.printStackTrace(); + log.error("Error converting object to JSON", e); return ""; } } @@ -84,7 +85,7 @@ public static Object fromJson(String s, Class clazz) { try { return jacksonFromJson(s, clazz); } catch (JsonUtilsException e) { - e.printStackTrace(); + log.error("Error deserializing JSON tree to {}", clazz.getName(), e); return null; } } @@ -113,10 +114,6 @@ public static String newJson(String key, Object value) { return newObjectNode(key, value).toString(); } - public static ObjectNode cloneObjectNode(ObjectNode src) { - return src.deepCopy(); - } - public static ObjectNode newObjectNode(String key, Object value) { ObjectNode json = mapper.createObjectNode(); json.putPOJO(key, value); @@ -135,7 +132,7 @@ public static JsonNode getJsonNode(String tree, String fieldName) { node = jsonNode.get(fieldName); } catch (IOException e) { - logger.error("IOException", e); + log.error("IOException", e); } return node; } diff --git a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/SerializableObjectPool.java b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/SerializableObjectPool.java index 85849305a..50d44685b 100644 --- a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/SerializableObjectPool.java +++ b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/SerializableObjectPool.java @@ -26,10 +26,10 @@ public abstract class SerializableObjectPool implements Serializable { private Hashtable locked, unlocked; - public SerializableObjectPool() { + protected SerializableObjectPool() { expirationTime = 30000; // 30 seconds - locked = new Hashtable(); - unlocked = new Hashtable(); + locked = new Hashtable<>(); + unlocked = new Hashtable<>(); } protected abstract T create(); @@ -41,7 +41,7 @@ public SerializableObjectPool() { public synchronized T checkOut() { long now = System.currentTimeMillis(); T t; - if (unlocked.size() > 0) { + if (!unlocked.isEmpty()) { Enumeration e = unlocked.keys(); while (e.hasMoreElements()) { t = e.nextElement(); diff --git a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/XmlUtils.java b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/XmlUtils.java index ca1a469ac..9d7d746d9 100644 --- a/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/XmlUtils.java +++ b/jpo-ode-common/src/main/java/us/dot/its/jpo/ode/util/XmlUtils.java @@ -1,22 +1,20 @@ /******************************************************************************* * Copyright 2018 572682 * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ -package us.dot.its.jpo.ode.util; -import org.json.JSONObject; -import org.json.XML; +package us.dot.its.jpo.ode.util; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; @@ -24,147 +22,235 @@ import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper.Builder; +import org.json.JSONObject; +import org.json.XML; +/** + * Utility class for XML manipulation. + */ public class XmlUtils { - public static class XmlUtilsException extends Exception { - - private static final long serialVersionUID = 1L; - - public XmlUtilsException(String string) { - super(string); - } - - public XmlUtilsException(String string, Exception e) { - super(string, e); - } - - } - - private XmlMapper xmlMapper = new XmlMapper(); - private static XmlMapper staticXmlMapper = new XmlMapper(); - - static { - var builder = new Builder(staticXmlMapper); - builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - builder.defaultUseWrapper(true); - staticXmlMapper = builder.build(); - } - - public XmlUtils() { - super(); - var builder = new Builder(xmlMapper); - builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - builder.defaultUseWrapper(true); - xmlMapper = builder.build(); - } - - public String toXml(Object o) throws JsonProcessingException { - String xml = xmlMapper.writeValueAsString(o); - return xml; - } - - // public static String toXml(Object o) throws XmlUtilsException { - // try { - // JSONObject root = new JSONObject(); - // JSONObject object = new JSONObject(o); - // root.put(o.getClass().getSimpleName(), object); - // return XML.toString(root); - // } catch (JSONException e) { - // throw new XmlUtilsException("Error encoding object to XML", e); - // } - // } - - public Object fromXml(String xml, Class clazz) throws XmlUtilsException { - try { - return xmlMapper.readValue(xml, clazz); - } catch (Exception e) { - throw new XmlUtilsException("Error decoding " + xml + " to " + clazz.getName(), e); - } - } - - /** - * Embeds the arrayNode into an ObjectNode with the given childKey. By default a - * JSON array such as {"parent":[1, 2, 3,]} will be converted to: - * 123. - * This is not often desired as there is no paren object to encompass the array. - * By calling this method given childKey = "child" and arrayNode = [1, 2, 3,], - * method will return {"parent":{"child":[1, 2, 3,]}} which as a result will be - * encoded to - * 123. - * Which is a more representative of the JSON ObjectNode. - * - * @param childKey: The key to be given to the child array object - * @param arrayNode: The array node to be embedded in a ObjectNode - * @return OBjectNode representation of the given arrayNode redy to be converted - * to XML - */ - public static ObjectNode createEmbeddedJsonArrayForXmlConversion(String childKey, JsonNode arrayNode) { - ObjectNode childNode = staticXmlMapper.createObjectNode(); - childNode.set(childKey, arrayNode); - return childNode; - } - - public static String toXmlStatic(Object o) throws XmlUtilsException { - String xml; - try { - xml = staticXmlMapper.writeValueAsString(o); - } catch (Exception e) { - throw new XmlUtilsException("Error encoding object to XML", e); - } - return xml; - } - - public static Object fromXmlS(String xml, Class clazz) throws XmlUtilsException { - try { - return staticXmlMapper.readValue(xml, clazz); - } catch (Exception e) { - throw new XmlUtilsException("Error decoding " + xml + " to " + clazz.getName(), e); - } - } - - public static ObjectNode toObjectNode(String xml) throws XmlUtilsException { - try { - JSONObject jsonObject = XML.toJSONObject(xml, true); - String jsonString = jsonObject.toString(); - return JsonUtils.toObjectNode(jsonString); - - /* - * Due to issues with XmlMapper converting "xml arrays" to a valid DOM - * collection we could not use it in this context. Hence the above workaround - * was adopted. See: - * https://github.com/FasterXML/jackson-dataformat-xml/issues/187 - * https://github.com/FasterXML/jackson-dataformat-xml/issues/205 - */ - // return (ObjectNode) staticXmlMapper.readTree(xml); - } catch (Exception e) { - throw new XmlUtilsException("Error decoding " + xml + "to ObjectNode", e); - } - } - - public static JSONObject toJSONObject(String xml) throws XmlUtilsException { - try { - return XML.toJSONObject(xml, true); - } catch (Exception e) { - throw new XmlUtilsException("Error decoding " + xml + "to JSONObject", e); - } - } - - public static JsonNode getJsonNode(String tree, String fieldName) throws XmlUtilsException { - JsonNode jsonNode; - try { - jsonNode = staticXmlMapper.readTree(tree); - } catch (Exception e) { - throw new XmlUtilsException("Error getting field name " + fieldName + " from " + tree, e); - } - return jsonNode.get(fieldName); - } - - public XmlMapper getXmlMapper() { - return xmlMapper; - } - - public static XmlMapper getStaticXmlMapper() { - return staticXmlMapper; - } + /** + * Custom XML exception for handling XML parsing errors. + */ + public static class XmlUtilsException extends Exception { + + private static final long serialVersionUID = 1L; + + public XmlUtilsException(String string) { + super(string); + } + + public XmlUtilsException(String string, Exception e) { + super(string, e); + } + + } + + private XmlMapper xmlMapper = new XmlMapper(); + private static XmlMapper staticXmlMapper = new XmlMapper(); + + static { + var builder = new Builder(staticXmlMapper); + builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + builder.defaultUseWrapper(true); + staticXmlMapper = builder.build(); + } + + /** + * Instantiates the XML utility as an object instead of using static methods. + */ + public XmlUtils() { + super(); + var builder = new Builder(xmlMapper); + builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + builder.defaultUseWrapper(true); + xmlMapper = builder.build(); + } + + public String toXml(Object o) throws JsonProcessingException { + String xml = xmlMapper.writeValueAsString(o); + return xml; + } + + // public static String toXml(Object o) throws XmlUtilsException { + // try { + // JSONObject root = new JSONObject(); + // JSONObject object = new JSONObject(o); + // root.put(o.getClass().getSimpleName(), object); + // return XML.toString(root); + // } catch (JSONException e) { + // throw new XmlUtilsException("Error encoding object to XML", e); + // } + // } + + /** + * Attempt to convert an XML String into the specified class type. + * + * @param xml The XML String value + * @param clazz The class type + * @return The deserialized object that is of type clazz + */ + public Object fromXml(String xml, Class clazz) throws XmlUtilsException { + try { + return xmlMapper.readValue(xml, clazz); + } catch (Exception e) { + throw new XmlUtilsException("Error decoding " + xml + " to " + clazz.getName(), e); + } + } + + /** + * Embeds the arrayNode into an ObjectNode with the given childKey. By default a + * JSON array such as {"parent":[1, 2, 3,]} will be converted to: + * 123. + * This is not often desired as there is no paren object to encompass the array. + * By calling this method given childKey = "child" and arrayNode = [1, 2, 3,], + * method will return {"parent":{"child":[1, 2, 3,]}} which as a result will be + * encoded to + * 123. + * Which is a more representative of the JSON ObjectNode. + * + * @param childKey The key to be given to the child array object + * @param arrayNode The array node to be embedded in a ObjectNode + * @return OBjectNode representation of the given arrayNode redy to be converted + * to XML + */ + public static ObjectNode createEmbeddedJsonArrayForXmlConversion(String childKey, + JsonNode arrayNode) { + ObjectNode childNode = staticXmlMapper.createObjectNode(); + childNode.set(childKey, arrayNode); + return childNode; + } + + /** + * Find a component of an XML string by specifying the tag name. + * + * @param xml The XML String to be searched + * @param tagName The tag name to be identified + * @return The XML String only consisting of the tag and its children + */ + public static String findXmlContentString(String xml, String tagName) { + // Construct the start and end tag strings + String startTag = "<" + tagName + ">"; + String endTag = ""; + + // Find the start index of the start tag + int startIndex = xml.indexOf(startTag); + if (startIndex == -1) { + // Tag not found + return null; + } + + // Find the end index of the end tag, after the start tag + int endIndex = xml.indexOf(endTag, startIndex); + if (endIndex == -1) { + // End tag not found + return null; + } + + // Add the length of the end tag to get the complete end index + endIndex += endTag.length(); + + return xml.substring(startIndex, endIndex); + } + + /** + * Static method to attempt to serialize an object into XML. + * + * @param o The object to be serialized + * @return The serialized XML String + * @throws XmlUtilsException Throws an exception when failing to serialize the object + */ + public static String toXmlStatic(Object o) throws XmlUtilsException { + String xml; + try { + xml = staticXmlMapper.writeValueAsString(o); + } catch (Exception e) { + throw new XmlUtilsException("Error encoding object to XML", e); + } + return xml; + } + + /** + * Static method to attempt to deserialize an XML String into a specified object type. + * + * @param xml The xml String to be deserialized + * @param clazz The class type + * @return The deserialized object of class type clazz + * @throws XmlUtilsException Throws an exception when failing to deserialize the XML String + */ + public static Object fromXmlS(String xml, Class clazz) throws XmlUtilsException { + try { + return staticXmlMapper.readValue(xml, clazz); + } catch (Exception e) { + throw new XmlUtilsException("Error decoding " + xml + " to " + clazz.getName(), e); + } + } + + /** + * Static method to attempt to transform an XML String into an ObjectNode. + * + * @param xml The xml String to be transformed + * @return An ObjectNode representing the XML + * @throws XmlUtilsException Throws an exception when failing to transform into an ObjectNode + */ + public static ObjectNode toObjectNode(String xml) throws XmlUtilsException { + try { + JSONObject jsonObject = XML.toJSONObject(xml, true); + String jsonString = jsonObject.toString(); + return JsonUtils.toObjectNode(jsonString); + + /* + * Due to issues with XmlMapper converting "xml arrays" to a valid DOM + * collection we could not use it in this context. Hence the above workaround + * was adopted. See: + * https://github.com/FasterXML/jackson-dataformat-xml/issues/187 + * https://github.com/FasterXML/jackson-dataformat-xml/issues/205 + */ + // return (ObjectNode) staticXmlMapper.readTree(xml); + } catch (Exception e) { + throw new XmlUtilsException("Error decoding " + xml + "to ObjectNode", e); + } + } + + /** + * Static method to attempt to transform an XML String into a JSONObject. + * + * @param xml The xml String to be transformed + * @return A JSONObject representing the XML + * @throws XmlUtilsException Throws an exception when failing to transform into an JSONObject + */ + public static JSONObject toJSONObject(String xml) throws XmlUtilsException { + try { + return XML.toJSONObject(xml, true); + } catch (Exception e) { + throw new XmlUtilsException("Error decoding " + xml + "to JSONObject", e); + } + } + + /** + * Get a specific JSON node from an XML String based on a field name. + * + * @param tree The xml String to be parsed + * @param fieldName The field name to be parsed for + * @return The JsonNode for the specified field name + * @throws XmlUtilsException Throws an exception when failing to parse the XML String + */ + public static JsonNode getJsonNode(String tree, String fieldName) throws XmlUtilsException { + JsonNode jsonNode; + try { + jsonNode = staticXmlMapper.readTree(tree); + } catch (Exception e) { + throw new XmlUtilsException("Error getting field name " + fieldName + " from " + tree, e); + } + return jsonNode.get(fieldName); + } + + public XmlMapper getXmlMapper() { + return xmlMapper; + } + + public static XmlMapper getStaticXmlMapper() { + return staticXmlMapper; + } } diff --git a/jpo-ode-common/src/test/java/us/dot/its/jpo/ode/inet/InetPacketSenderTest.java b/jpo-ode-common/src/test/java/us/dot/its/jpo/ode/inet/InetPacketSenderTest.java index 9150eceff..05b8e331e 100644 --- a/jpo-ode-common/src/test/java/us/dot/its/jpo/ode/inet/InetPacketSenderTest.java +++ b/jpo-ode-common/src/test/java/us/dot/its/jpo/ode/inet/InetPacketSenderTest.java @@ -15,12 +15,11 @@ ******************************************************************************/ package us.dot.its.jpo.ode.inet; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import us.dot.its.jpo.ode.util.CodecUtils; import java.io.IOException; import java.net.DatagramPacket; @@ -31,17 +30,15 @@ import java.net.UnknownHostException; import java.util.Arrays; -import us.dot.its.jpo.ode.eventlog.EventLogger; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import mockit.Capturing; -import us.dot.its.jpo.ode.util.CodecUtils; +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +@Slf4j public class InetPacketSenderTest { - static final private boolean isDebugOutput = false; @@ -191,15 +188,15 @@ public void run() { socket.receive(datagramPacket); validatePacket(datagramPacket); } catch (SocketTimeoutException ex) { - EventLogger.logger.error( + log.error( String.format("Caught socket timeout exception while recieving message on port %d. Max size is %d", listenPort, DEFAULT_MAX_PACKET_SIZE), ex); } catch (SocketException ex) { - EventLogger.logger.error(String.format("Caught socket exception while recieving message on port %d. Max size is %d", + log.error(String.format("Caught socket exception while recieving message on port %d. Max size is %d", listenPort, DEFAULT_MAX_PACKET_SIZE), ex); } catch (IOException ex) { - EventLogger.logger.error( + log.error( String.format("Caught IO exception exception while recieving message on port %d. Max size is %d", listenPort, DEFAULT_MAX_PACKET_SIZE), ex); diff --git a/jpo-ode-core/mvnw b/jpo-ode-core/mvnw old mode 100644 new mode 100755 diff --git a/jpo-ode-core/mvnw.cmd b/jpo-ode-core/mvnw.cmd old mode 100644 new mode 100755 diff --git a/jpo-ode-core/pom.xml b/jpo-ode-core/pom.xml index 638e02106..cf3bf18bd 100644 --- a/jpo-ode-core/pom.xml +++ b/jpo-ode-core/pom.xml @@ -5,7 +5,7 @@ usdot.jpo.ode jpo-ode - 3.0.0-SNAPSHOT + 4.0.0 jpo-ode-core @@ -23,12 +23,12 @@ usdot.jpo.ode jpo-ode-common - 3.0.0-SNAPSHOT + 4.0.0 usdot.jpo.ode jpo-ode-plugins - 3.0.0-SNAPSHOT + 4.0.0 org.apache.httpcomponents diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/context/AppContext.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/context/AppContext.java index d41e3ab19..766b24ff4 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/context/AppContext.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/context/AppContext.java @@ -19,10 +19,13 @@ import java.net.UnknownHostException; import java.util.UUID; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; +import us.dot.its.jpo.ode.eventlog.EventLogger; +@Slf4j @Configuration public class AppContext { // CONSTANTS @@ -90,9 +93,26 @@ private void init() { } public String getHostId() { + if (this.hostId == null || this.hostId.isEmpty()) { + initializeHostId(); + } return hostId; } + private void initializeHostId() { + String hostname; + try { + hostname = InetAddress.getLocalHost().getHostName(); + } catch (UnknownHostException e) { + // Let's just use a random hostname + hostname = UUID.randomUUID().toString(); + log.error("Unknown host error: {}, using random", e); + } + this.hostId = hostname; + log.info("Host ID: {}", hostId); + EventLogger.logger.info("Initializing services on host {}", hostId); + } + public String getParam(String key) { String result = null; if (key != null) { diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeBsmData.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeBsmData.java index ad651c76d..397fd114a 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeBsmData.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeBsmData.java @@ -1,45 +1,55 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.model; -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import static com.fasterxml.jackson.annotation.JsonTypeInfo.*; +import static com.fasterxml.jackson.annotation.JsonTypeInfo.As; +import static com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import lombok.EqualsAndHashCode; + +/** + * Represents a specialized type of data in the Open Data Environment (ODE) system, specifically + * related to Basic Safety Messages (BSM). This class extends OdeData and provides BSM-specific + * metadata and payload handling. + */ +@EqualsAndHashCode(callSuper = false) public class OdeBsmData extends OdeData { - private static final long serialVersionUID = 4944935387116447760L; + private static final long serialVersionUID = 4944935387116447760L; - public OdeBsmData() { - super(); - } + public OdeBsmData() { + super(); + } - public OdeBsmData(OdeMsgMetadata metadata, OdeMsgPayload payload) { - super(metadata, payload); - } + public OdeBsmData(OdeMsgMetadata metadata, OdeMsgPayload payload) { + super(metadata, payload); + } - @Override - @JsonTypeInfo(use = Id.CLASS, include = As.EXISTING_PROPERTY, defaultImpl = OdeBsmMetadata.class) - public void setMetadata(OdeMsgMetadata metadata) { - super.setMetadata(metadata); - } + @Override + @JsonTypeInfo(use = Id.CLASS, include = As.EXISTING_PROPERTY, defaultImpl = OdeBsmMetadata.class) + public void setMetadata(OdeMsgMetadata metadata) { + super.setMetadata(metadata); + } - @Override - @JsonTypeInfo(use = Id.CLASS, include = As.EXISTING_PROPERTY, defaultImpl = OdeBsmPayload.class) - public void setPayload(OdeMsgPayload payload) { - super.setPayload(payload); - } + @Override + @JsonTypeInfo(use = Id.CLASS, include = As.EXISTING_PROPERTY, defaultImpl = OdeBsmPayload.class) + public void setPayload(OdeMsgPayload payload) { + super.setPayload(payload); + } } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMsgMetadata.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMsgMetadata.java index b0df065ad..a49f8a031 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMsgMetadata.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeMsgMetadata.java @@ -1,238 +1,294 @@ /******************************************************************************* * Copyright 2018 572682 * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.model; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - import us.dot.its.jpo.ode.util.DateTimeUtils; import us.dot.its.jpo.ode.util.JsonUtils; +/** + * Base ODE Metadata class. + */ @JsonPropertyOrder({ "logFileName", "recordType", "receivedMessageDetails", "payloadType", "serialId", - "odeReceivedAt", "schemaVersion", "maxDurationTime", "recordGeneratedAt", "recordGeneratedBy", "sanitized", "asn1" }) + "odeReceivedAt", "schemaVersion", "maxDurationTime", "recordGeneratedAt", "recordGeneratedBy", "sanitized", + "asn1" }) public class OdeMsgMetadata extends OdeObject { - public enum GeneratedBy { - TMC, OBU, RSU, TMC_VIA_SAT, TMC_VIA_SNMP, UNKNOWN - } - - private static final long serialVersionUID = 3979762143291085955L; - - private static int staticSchemaVersion; - - private String payloadType; - private SerialId serialId; - private String odeReceivedAt; - private int schemaVersion; - private int maxDurationTime; - private String odePacketID; - private String odeTimStartDateTime; - private String recordGeneratedAt; - private GeneratedBy recordGeneratedBy; - private boolean sanitized = false; - - @JsonInclude(JsonInclude.Include.NON_NULL) - private String asn1 = null; - - public OdeMsgMetadata() { - this(OdeMsgPayload.class.getName(), new SerialId(), DateTimeUtils.now()); - } - - public OdeMsgMetadata(OdeMsgPayload payload) { - this(payload, new SerialId(), DateTimeUtils.now()); - } - - private OdeMsgMetadata(OdeMsgPayload payload, SerialId serialId, String receivedAt) { - this(payload.getClass().getName(), serialId, receivedAt); - setAsn1(payload); - } - - public OdeMsgMetadata(String payloadType, SerialId serialId, String receivedAt) { - super(); - this.schemaVersion = staticSchemaVersion; - this.payloadType = payloadType; - this.serialId = serialId; - this.odeReceivedAt = receivedAt; - } - - public String getPayloadType() { - return payloadType; - } - - public OdeMsgMetadata setPayloadType(OdeDataType payloadType) { - this.payloadType = payloadType.getShortName(); - return this; - } - - public OdeMsgMetadata setPayloadType(String payloadType) { - this.payloadType = payloadType; - return this; - } - - public SerialId getSerialId() { - return serialId; - } - - public void setSerialId(SerialId serialId) { - this.serialId = serialId; - } - - public String getOdeReceivedAt() { - return odeReceivedAt; - } - - public void setOdeReceivedAt(String receivedAt) { - this.odeReceivedAt = receivedAt; - } - - public int getSchemaVersion() { - return schemaVersion; - } - - public void setSchemaVersion(int aSchemaVersion) { - schemaVersion = aSchemaVersion; - } - - public int getMaxDurationTime() { - return maxDurationTime; - } - - public void setMaxDurationTime(int maxDurationTime) { - this.maxDurationTime = maxDurationTime; - } - - public String getOdePacketID() { - return odePacketID; - } - - public void setOdePacketID(String odePacketID) { - this.odePacketID = odePacketID; - } - - public String getOdeTimStartDateTime() { - return odeTimStartDateTime; - } - - public void setOdeTimStartDateTime(String odeTimStartDateTime) { - this.odeTimStartDateTime = odeTimStartDateTime; - } - - public String getRecordGeneratedAt() { - return recordGeneratedAt; - } - - public void setRecordGeneratedAt(String recordGeneratedAt) { - this.recordGeneratedAt = recordGeneratedAt; - } - - public GeneratedBy getRecordGeneratedBy() { - return recordGeneratedBy; - } - - public void setRecordGeneratedBy(GeneratedBy recordGeneratedBy) { - this.recordGeneratedBy = recordGeneratedBy; - } - - public boolean isSanitized() { - return sanitized; - } - - public void setSanitized(boolean sanitized) { - this.sanitized = sanitized; - } - - public static int getStaticSchemaVersion() { - return staticSchemaVersion; - } - - public static void setStaticSchemaVersion(int aSchemaVersion) { - staticSchemaVersion = aSchemaVersion; - } - - public String getAsn1() { - return asn1; - } - - public void setAsn1(String asn1) { - this.asn1 = asn1; - } - - public void setAsn1(OdeMsgPayload payload) { - if (payload != null && payload.getData() != null ) { - if (JsonUtils.getJsonNode(payload.getData().toString(), "bytes") != null) - this.asn1 = JsonUtils.getJsonNode(payload.getData().toString(), "bytes").asText(); + /** + * Enum for conveying where a message was generated from. + */ + public enum GeneratedBy { + TMC, OBU, RSU, TMC_VIA_SAT, TMC_VIA_SNMP, UNKNOWN + } + + private static final long serialVersionUID = 3979762143291085955L; + private static final int staticSchemaVersion = 8; + + private String payloadType; + private SerialId serialId; + private String odeReceivedAt; + private int schemaVersion; + private int maxDurationTime; + private String odePacketID; + private String odeTimStartDateTime; + private String recordGeneratedAt; + private GeneratedBy recordGeneratedBy; + private boolean sanitized = false; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private String asn1 = null; + + public OdeMsgMetadata() { + this(OdeMsgPayload.class.getName(), new SerialId(), DateTimeUtils.now()); + } + + /** + * Constructs an OdeMsgMetadata object with the specified payload. + * + * @param payload the payload to be set + */ + public OdeMsgMetadata(OdeMsgPayload payload) { + this(payload, new SerialId(), DateTimeUtils.now()); + } + + /** + * Constructs an OdeMsgMetadata object with the specified payload, serial ID, + * and received time. + * + * @param payload the payload to be set + * @param serialId the serial ID to be set + * @param receivedAt the time the message was received + */ + private OdeMsgMetadata(OdeMsgPayload payload, SerialId serialId, String receivedAt) { + this(payload.getClass().getName(), serialId, receivedAt); + setAsn1(payload); + } + + /** + * Constructs an OdeMsgMetadata object with the specified payload type, serial + * ID, and received time. + * + * @param payloadType the type of the payload + * @param serialId the serial ID to be set + * @param receivedAt the time the message was received + */ + public OdeMsgMetadata(String payloadType, SerialId serialId, String receivedAt) { + super(); + this.schemaVersion = staticSchemaVersion; + this.payloadType = payloadType; + this.serialId = serialId; + this.odeReceivedAt = receivedAt; + } + + public String getPayloadType() { + return payloadType; + } + + public OdeMsgMetadata setPayloadType(OdeDataType payloadType) { + this.payloadType = payloadType.getShortName(); + return this; + } + + public OdeMsgMetadata setPayloadType(String payloadType) { + this.payloadType = payloadType; + return this; + } + + public SerialId getSerialId() { + return serialId; + } + + public void setSerialId(SerialId serialId) { + this.serialId = serialId; + } + + public String getOdeReceivedAt() { + return odeReceivedAt; + } + + public void setOdeReceivedAt(String receivedAt) { + this.odeReceivedAt = receivedAt; + } + + public int getSchemaVersion() { + return schemaVersion; + } + + public void setSchemaVersion(int schemaVersion) { + this.schemaVersion = schemaVersion; + } + + public int getMaxDurationTime() { + return maxDurationTime; + } + + public void setMaxDurationTime(int maxDurationTime) { + this.maxDurationTime = maxDurationTime; + } + + public String getOdePacketID() { + return odePacketID; + } + + public void setOdePacketID(String odePacketID) { + this.odePacketID = odePacketID; + } + + public String getOdeTimStartDateTime() { + return odeTimStartDateTime; + } + + public void setOdeTimStartDateTime(String odeTimStartDateTime) { + this.odeTimStartDateTime = odeTimStartDateTime; + } + + public String getRecordGeneratedAt() { + return recordGeneratedAt; + } + + public void setRecordGeneratedAt(String recordGeneratedAt) { + this.recordGeneratedAt = recordGeneratedAt; + } + + public GeneratedBy getRecordGeneratedBy() { + return recordGeneratedBy; + } + + public void setRecordGeneratedBy(GeneratedBy recordGeneratedBy) { + this.recordGeneratedBy = recordGeneratedBy; + } + + public boolean isSanitized() { + return sanitized; + } + + public void setSanitized(boolean sanitized) { + this.sanitized = sanitized; + } + + public static int getStaticSchemaVersion() { + return staticSchemaVersion; + } + + public String getAsn1() { + return asn1; + } + + public void setAsn1(String asn1) { + this.asn1 = asn1; + } + + /** + * Sets the ASN1 value for the metadata object. + * + * @param payload the ASN1 payload hex string + */ + public void setAsn1(OdeMsgPayload payload) { + if (payload != null && payload.getData() != null) { + if (JsonUtils.getJsonNode(payload.getData().toString(), "bytes") != null) { + this.asn1 = JsonUtils.getJsonNode(payload.getData().toString(), "bytes").asText(); } + } } - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((odeReceivedAt == null) ? 0 : odeReceivedAt.hashCode()); - result = prime * result + ((payloadType == null) ? 0 : payloadType.hashCode()); - result = prime * result + ((recordGeneratedAt == null) ? 0 : recordGeneratedAt.hashCode()); - result = prime * result + ((recordGeneratedBy == null) ? 0 : recordGeneratedBy.hashCode()); - result = prime * result + (sanitized ? 1231 : 1237); - result = prime * result + schemaVersion; - result = prime * result + ((serialId == null) ? 0 : serialId.hashCode()); - result = prime * result + ((asn1 == null) ? 0 : asn1.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - OdeMsgMetadata other = (OdeMsgMetadata) obj; - if (odeReceivedAt == null) { - if (other.odeReceivedAt != null) - return false; - } else if (!odeReceivedAt.equals(other.odeReceivedAt)) - return false; - if (payloadType == null) { - if (other.payloadType != null) - return false; - } else if (!payloadType.equals(other.payloadType)) - return false; - if (recordGeneratedAt == null) { - if (other.recordGeneratedAt != null) - return false; - } else if (!recordGeneratedAt.equals(other.recordGeneratedAt)) - return false; - if (recordGeneratedBy != other.recordGeneratedBy) - return false; - if (sanitized != other.sanitized) - return false; - if (schemaVersion != other.schemaVersion) - return false; - if (serialId == null) { - if (other.serialId != null) - return false; - } else if (!serialId.equals(other.serialId)) - return false; - if (asn1 == null) { - if (other.asn1 != null) - return false; - } else if (!asn1.equals(other.asn1)) - return false; + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((odeReceivedAt == null) ? 0 : odeReceivedAt.hashCode()); + result = prime * result + ((payloadType == null) ? 0 : payloadType.hashCode()); + result = prime * result + ((recordGeneratedAt == null) ? 0 : recordGeneratedAt.hashCode()); + result = prime * result + ((recordGeneratedBy == null) ? 0 : recordGeneratedBy.hashCode()); + result = prime * result + (sanitized ? 1231 : 1237); + result = prime * result + schemaVersion; + result = prime * result + ((serialId == null) ? 0 : serialId.hashCode()); + result = prime * result + ((asn1 == null) ? 0 : asn1.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { return true; - } + } + + if (obj == null) { + return false; + } + + if (getClass() != obj.getClass()) { + return false; + } + + OdeMsgMetadata other = (OdeMsgMetadata) obj; + if (odeReceivedAt == null) { + if (other.odeReceivedAt != null) { + return false; + } + } else if (!odeReceivedAt.equals(other.odeReceivedAt)) { + return false; + } + + if (payloadType == null) { + if (other.payloadType != null) { + return false; + } + } else if (!payloadType.equals(other.payloadType)) { + return false; + } + + if (recordGeneratedAt == null) { + if (other.recordGeneratedAt != null) { + return false; + } + } else if (!recordGeneratedAt.equals(other.recordGeneratedAt)) { + return false; + } + + if (recordGeneratedBy != other.recordGeneratedBy) { + return false; + } + + if (sanitized != other.sanitized) { + return false; + } + + if (schemaVersion != other.schemaVersion) { + return false; + } + + if (serialId == null) { + if (other.serialId != null) { + return false; + } + } else if (!serialId.equals(other.serialId)) { + return false; + } + + if (asn1 == null) { + if (other.asn1 != null) { + return false; + } + } else if (!asn1.equals(other.asn1)) { + return false; + } + + return true; + } } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimData.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimData.java index 1f1fac5f4..22d99af05 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimData.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimData.java @@ -15,6 +15,9 @@ ******************************************************************************/ package us.dot.its.jpo.ode.model; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import static com.fasterxml.jackson.annotation.JsonTypeInfo.*; + public class OdeTimData extends OdeData { private static final long serialVersionUID = 2057040404896561615L; @@ -29,4 +32,16 @@ public OdeTimData(OdeMsgMetadata metadata, OdeMsgPayload payload) { super(metadata, payload); } + @Override + @JsonTypeInfo(use = Id.CLASS, include = As.EXISTING_PROPERTY, defaultImpl = OdeTimMetadata.class) + public void setMetadata(OdeMsgMetadata metadata) { + super.setMetadata(metadata); + } + + @Override + @JsonTypeInfo(use = Id.CLASS, include = As.EXISTING_PROPERTY, defaultImpl = OdeTimPayload.class) + public void setPayload(OdeMsgPayload payload) { + super.setPayload(payload); + } + } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimPayload.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimPayload.java index b5e9e0e7b..b6d34dfe7 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimPayload.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTimPayload.java @@ -1,32 +1,47 @@ /******************************************************************************* * Copyright 2018 572682 * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + *

http://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.model; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; + import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage; +import us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation; +/** + * ODE TIM payload class for both J2735 TravelerInformation and ODE + * TIM Creator OdeTravelerInformationMessage. + */ public class OdeTimPayload extends OdeMsgPayload { - private static final long serialVersionUID = 7061315628111448390L; + private static final long serialVersionUID = 7061315628111448390L; + + public OdeTimPayload() { + this(new OdeTravelerInformationMessage()); + } - public OdeTimPayload() { - this(new OdeTravelerInformationMessage()); - } + public OdeTimPayload(OdeTravelerInformationMessage tim) { + super(tim); + this.setData(tim); + } - public OdeTimPayload(OdeTravelerInformationMessage tim) { - super(tim); - this.setData(tim); - } + @JsonCreator + public OdeTimPayload(@JsonProperty("data") TravelerInformation tim) { + super(tim); + this.setData(tim); + } } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTravelerInputData.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTravelerInputData.java index 391f840a1..4462dd0f9 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTravelerInputData.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/model/OdeTravelerInputData.java @@ -1,45 +1,30 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.model; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.ServiceRequest; import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage; +@Data +@EqualsAndHashCode(callSuper = false) public class OdeTravelerInputData extends OdeObject { - - private static final long serialVersionUID = 8769107278440796699L; - - private ServiceRequest request; - - private OdeTravelerInformationMessage tim; - - public ServiceRequest getRequest() { - return request; - } - - public void setRequest(ServiceRequest request) { - this.request = request; - } - - public OdeTravelerInformationMessage getTim() { - return tim; - } - - public void setTim(OdeTravelerInformationMessage tim) { - this.tim = tim; - } - + private static final long serialVersionUID = 8769107278440796699L; + private ServiceRequest request; + private OdeTravelerInformationMessage tim; } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/AbstractSubscriberProcessor.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/AbstractSubscriberProcessor.java index 0fda858a1..24db75524 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/AbstractSubscriberProcessor.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/AbstractSubscriberProcessor.java @@ -15,12 +15,11 @@ ******************************************************************************/ package us.dot.its.jpo.ode.wrapper; +import lombok.extern.slf4j.Slf4j; + import java.util.Arrays; import java.util.concurrent.Executors; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - /** * @author 572682 * @@ -33,9 +32,9 @@ * @param * Received Message Value Type */ +@Slf4j public abstract class AbstractSubscriberProcessor extends MessageProcessor { - private Logger logger = LoggerFactory.getLogger(this.getClass()); protected int messagesConsumed = 0; /** @@ -45,14 +44,9 @@ public abstract class AbstractSubscriberProcessor extends MessageProcessor * @param inputTopics */ public void start(MessageConsumer consumer, String... inputTopics) { - logger.info("Subscribing to {}", Arrays.asList(inputTopics).toString()); + log.info("Subscribing to {}", Arrays.asList(inputTopics)); - Executors.newSingleThreadExecutor().submit(new Runnable() { - @Override - public void run() { - consumer.subscribe(inputTopics); - } - }); + Executors.newSingleThreadExecutor().submit(() -> consumer.subscribe(inputTopics)); } @Override diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageConsumer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageConsumer.java index 2e952a269..5ddadd9bd 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageConsumer.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageConsumer.java @@ -120,6 +120,7 @@ public MessageConsumer( } private Properties addConfluentProperties(Properties props) { + logger.info("Adding Confluent properties"); props.put("ssl.endpoint.identification.algorithm", "https"); props.put("security.protocol", "SASL_SSL"); props.put("sasl.mechanism", "PLAIN"); diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageProcessor.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageProcessor.java index abf7be095..07627c4c8 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageProcessor.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageProcessor.java @@ -15,14 +15,14 @@ ******************************************************************************/ package us.dot.its.jpo.ode.wrapper; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.Callable; - import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.common.TopicPartition; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.Callable; + /** * @author 572682 * This abstract class provides the common and basic functionality for processinf messages diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageProducer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageProducer.java index 2b81a2a2e..3e114b728 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageProducer.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/MessageProducer.java @@ -15,23 +15,22 @@ ******************************************************************************/ package us.dot.its.jpo.ode.wrapper; -import java.util.Properties; -import java.util.Set; -import org.apache.kafka.clients.producer.Callback; +import lombok.Getter; +import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord; -import org.apache.kafka.clients.producer.RecordMetadata; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; + +import java.util.Properties; +import java.util.Set; /** - * @author 572682 - * This class encapsulates a message produce function. - * * @param Message Key type * @param Message Value type + * @author 572682 + * This class encapsulates a message produce function. */ +@Slf4j public class MessageProducer { public static final String SERIALIZATION_STRING_SERIALIZER = "org.apache.kafka.common.serialization.StringSerializer"; @@ -41,11 +40,11 @@ public class MessageProducer { public static final int DEFAULT_PRODUCER_BATCH_SIZE_BYTES = 16384; public static final int DEFAULT_PRODUCER_RETRIES = 0; public static final String DEFAULT_PRODUCER_ACKS = "all"; + public static final String COMPRESSION_TYPE = "zstd"; - private static Logger logger = LoggerFactory.getLogger(MessageProducer.class); - - private Producer producer; - private Set disabledTopicsSet; + @Getter + private final Producer producer; + private final Set disabledTopicsSet; public static MessageProducer defaultByteArrayMessageProducer( String brokers, @@ -63,7 +62,7 @@ public static MessageProducer defaultStringMessageProducer( String brokers, String type, Set disabledTopics) { - return new MessageProducer( + return new MessageProducer<>( brokers, type, null, @@ -73,7 +72,7 @@ public static MessageProducer defaultStringMessageProducer( public MessageProducer( String brokers, - String type, + String kafkaType, String partitionerClass, String valueSerializerFQN, Set disabledTopics) { @@ -82,31 +81,37 @@ public MessageProducer( if (brokers != null) { props.put("bootstrap.servers", brokers); } else { - logger.error("Bootstrap servers setting is null"); + log.error("Bootstrap servers setting is null"); } props.put("key.serializer", SERIALIZATION_STRING_SERIALIZER); props.put("value.serializer", valueSerializerFQN); + String lingerMsEnv = System.getenv("KAFKA_LINGER_MS"); + if (lingerMsEnv != null && !lingerMsEnv.isEmpty()) { + + int lingerMs = Integer.parseInt(lingerMsEnv); + props.put("linger.ms", lingerMs); + } + if (partitionerClass != null) { props.put("partitioner.class", partitionerClass); } - String kafkaType = System.getenv("KAFKA_TYPE"); if (kafkaType != null && kafkaType.equals("CONFLUENT")) { addConfluentProperties(props); } - + producer = new KafkaProducer<>(props); this.disabledTopicsSet = disabledTopics; - logger.info("Producer Created with default properties"); + log.info("Producer Created with default properties"); } public MessageProducer( String brokers, - String type, + String kafkaType, String partitionerClass, Properties props, Set enabledTopics) { @@ -115,17 +120,16 @@ public MessageProducer( if (partitionerClass != null) { props.put("partitioner.class", partitionerClass); } - - String kafkaType = System.getenv("KAFKA_TYPE"); + if (kafkaType != null && kafkaType.equals("CONFLUENT")) { addConfluentProperties(props); } - + producer = new KafkaProducer<>(props); this.disabledTopicsSet = enabledTopics; - logger.info("Producer Created"); + log.info("Producer Created"); } private Properties setDefaultProperties() { @@ -143,10 +147,13 @@ private Properties setDefaultProperties() { // available to the producer for // buffering. props.put("buffer.memory", DEFAULT_PRODUCER_BUFFER_MEMORY_BYTES); + + props.put("compression.type", COMPRESSION_TYPE); return props; } - private Properties addConfluentProperties(Properties props) { + private void addConfluentProperties(Properties props) { + log.info("Adding Confluent properties"); props.put("ssl.endpoint.identification.algorithm", "https"); props.put("security.protocol", "SASL_SSL"); props.put("sasl.mechanism", "PLAIN"); @@ -156,15 +163,13 @@ private Properties addConfluentProperties(Properties props) { if (username != null && password != null) { String auth = "org.apache.kafka.common.security.plain.PlainLoginModule required " + - "username=\"" + username + "\" " + - "password=\"" + password + "\";"; + "username=\"" + username + "\" " + + "password=\"" + password + "\";"; props.put("sasl.jaas.config", auth); - } - else { - logger.error("Environment variables CONFLUENT_KEY and CONFLUENT_SECRET are not set. Set these in the .env file to use Confluent Cloud"); + } else { + log.error("Environment variables CONFLUENT_KEY and CONFLUENT_SECRET are not set. Set these in the .env file to use Confluent Cloud"); } - return props; } public void send(String topic, K key, V value) { @@ -177,18 +182,15 @@ public void send(String topic, K key, V value) { producer.send( data, - new Callback() { - @Override - public void onCompletion(RecordMetadata returnMetadata, Exception e) { - if (null != e) { - logger.error("Error sending record.", e); - } else { - logger.debug( - "Completed publish to topic: {}, offset: {}, partition: {}", - returnMetadata.topic(), - returnMetadata.offset(), - returnMetadata.partition()); - } + (returnMetadata, e) -> { + if (null != e) { + log.error("Error sending record.", e); + } else { + log.debug( + "Completed publish to topic: {}, offset: {}, partition: {}", + returnMetadata.topic(), + returnMetadata.offset(), + returnMetadata.partition()); } }); } @@ -196,29 +198,17 @@ public void onCompletion(RecordMetadata returnMetadata, Exception e) { public void close() { producer.close(); - logger.info("Producer Closed"); - } - - public Producer getProducer() { - return producer; - } - - public MessageProducer setProducer(Producer producer) { - this.producer = producer; - return this; + log.info("Producer Closed"); } public void send(ProducerRecord producerRecord) { producer.send( producerRecord, - new Callback() { - @Override - public void onCompletion(RecordMetadata returnMetadata, Exception e) { - if (null != e) { - logger.error("Error sending record.", e); - } else { - logger.debug("Record metadata: {}", returnMetadata); - } + (returnMetadata, e) -> { + if (null != e) { + log.error("Error sending record.", e); + } else { + log.debug("Record metadata: {}", returnMetadata); } }); } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/J2735BsmDeserializer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/J2735BsmDeserializer.java deleted file mode 100644 index 42ffafd04..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/J2735BsmDeserializer.java +++ /dev/null @@ -1,22 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.wrapper.serdes; - -import us.dot.its.jpo.ode.plugin.j2735.J2735Bsm; - -public class J2735BsmDeserializer extends MessagingDeserializer { - -} diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/J2735BsmSerializer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/J2735BsmSerializer.java deleted file mode 100644 index 176b6d36f..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/J2735BsmSerializer.java +++ /dev/null @@ -1,22 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.wrapper.serdes; - -import us.dot.its.jpo.ode.plugin.j2735.J2735Bsm; - -public class J2735BsmSerializer extends MessagingSerializer { - -} diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/MessagingDeserializer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/MessagingDeserializer.java index b9f16e558..4a79a5791 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/MessagingDeserializer.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/MessagingDeserializer.java @@ -1,43 +1,44 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ -package us.dot.its.jpo.ode.wrapper.serdes; -import java.util.Map; +package us.dot.its.jpo.ode.wrapper.serdes; import org.apache.kafka.common.serialization.Deserializer; - import us.dot.its.jpo.ode.util.SerializationUtils; -public class MessagingDeserializer implements Deserializer { - - SerializationUtils deserializer = new SerializationUtils(); - - @Override - public void configure(Map configs, boolean isKey) { - // nothing to do - } - - @Override - public T deserialize(String topic, byte[] data) { - return deserializer.deserialize(data); - } - - @Override - public void close() { - // nothing to do - } - +/** + * MessagingDeserializer is a generic base class implementing the Kafka Deserializer interface to + * provide deserialization of objects for use in Kafka messages. + * + *

This class uses a generic type parameter, allowing it to handle deserialization + * of various types. Internal deserialization is performed using an instance of the + * SerializationUtils class, which leverages Kryo for efficient object deserialization.

+ * + *

The class is declared as sealed, restricting which other classes can directly extend it. It + * will soon be marked as final to prevent incorrect usage through unnecessary subtyping

+ * + * @param the type of data to be deserialized + */ +public sealed class MessagingDeserializer implements Deserializer + permits OdeBsmDeserializer { + + SerializationUtils deserializer = new SerializationUtils<>(); + + @Override + public T deserialize(String topic, byte[] data) { + return deserializer.deserialize(data); + } } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/MessagingSerializer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/MessagingSerializer.java index 335c96cc1..62e607739 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/MessagingSerializer.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/MessagingSerializer.java @@ -1,42 +1,46 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ -package us.dot.its.jpo.ode.wrapper.serdes; -import java.util.Map; +package us.dot.its.jpo.ode.wrapper.serdes; import org.apache.kafka.common.serialization.Serializer; - import us.dot.its.jpo.ode.util.SerializationUtils; -public class MessagingSerializer implements Serializer { - - SerializationUtils serializer = new SerializationUtils(); - - @Override - public void configure(Map configs, boolean isKey) { - } - - @Override - public byte[] serialize(String topic, T data) { - return serializer.serialize(data); - } - - @Override - public void close() { - // nothing to do - } +/** + * MessagingSerializer is a generic base class implementing the Kafka Serializer interface to + * provide serialization of objects for use in Kafka messages. + * + *

This class uses a generic type parameter, allowing it to handle serialization of various types. + * Internal serialization is performed using an instance of the SerializationUtils class, which + * leverages Kryo for efficient object serialization.

+ * + *

The class is declared as sealed, restricting which other classes can directly extend it. The + * class is declared as sealed, restricting which other classes can directly extend it. It will soon + * be marked as final to prevent incorrect usage through unnecessary subtyping

+ * + * @param the type of data to be serialized + */ +public sealed class MessagingSerializer implements Serializer + permits OdeBsmSerializer, OdeTimSerializer { + + SerializationUtils serializer = new SerializationUtils<>(); + + @Override + public byte[] serialize(String topic, T data) { + return serializer.serialize(data); + } } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeBsmDeserializer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeBsmDeserializer.java index 0809ef8e9..24eaa6b61 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeBsmDeserializer.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeBsmDeserializer.java @@ -17,6 +17,10 @@ import us.dot.its.jpo.ode.model.OdeBsmData; -public class OdeBsmDeserializer extends MessagingDeserializer { +/** + * @deprecated Use new MessagingDeserializer() instead where needed + */ +@Deprecated(forRemoval = true) +public non-sealed class OdeBsmDeserializer extends MessagingDeserializer { } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeBsmSerializer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeBsmSerializer.java index 6fc317568..49a9aca22 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeBsmSerializer.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeBsmSerializer.java @@ -1,22 +1,27 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.wrapper.serdes; import us.dot.its.jpo.ode.model.OdeBsmData; -public class OdeBsmSerializer extends MessagingSerializer { +/** + * @deprecated Use new MessagingSerializer() instead where needed + */ +@Deprecated(forRemoval = true) +public non-sealed class OdeBsmSerializer extends MessagingSerializer { } diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeTimDeserializer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeTimDeserializer.java deleted file mode 100644 index 9cdc0df3a..000000000 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeTimDeserializer.java +++ /dev/null @@ -1,22 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.wrapper.serdes; - -import us.dot.its.jpo.ode.model.OdeTimData; - -public class OdeTimDeserializer extends MessagingDeserializer { - -} diff --git a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeTimSerializer.java b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeTimSerializer.java index 59e508f9e..d81f11620 100644 --- a/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeTimSerializer.java +++ b/jpo-ode-core/src/main/java/us/dot/its/jpo/ode/wrapper/serdes/OdeTimSerializer.java @@ -1,22 +1,27 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.wrapper.serdes; import us.dot.its.jpo.ode.model.OdeTimData; -public class OdeTimSerializer extends MessagingSerializer { +/** + * @deprecated Use new MessagingSerializer() instead where needed + */ +@Deprecated(forRemoval = true) +public non-sealed class OdeTimSerializer extends MessagingSerializer { } diff --git a/jpo-ode-core/src/main/resources/application.properties b/jpo-ode-core/src/main/resources/application.properties deleted file mode 100644 index e69de29bb..000000000 diff --git a/jpo-ode-core/src/main/resources/schemas/schema-bsm.json b/jpo-ode-core/src/main/resources/schemas/schema-bsm.json index d4b12e89d..bb4ffdd7a 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-bsm.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-bsm.json @@ -155,7 +155,7 @@ "type": "boolean" }, "schemaVersion": { - "const": 7, + "const": 8, "type": "integer" }, "securityResultCode": { @@ -454,1726 +454,13 @@ "items": { "oneOf": [ { - "properties": { - "id": { - "const": "VehicleSafetyExtensions", - "type": "string" - }, - "value": { - "properties": { - "events": { - "properties": { - "eventABSactivated": { - "type": "boolean" - }, - "eventAirBagDeployment": { - "type": "boolean" - }, - "eventDisabledVehicle": { - "type": "boolean" - }, - "eventFlatTire": { - "type": "boolean" - }, - "eventHardBraking": { - "type": "boolean" - }, - "eventHazardLights": { - "type": "boolean" - }, - "eventHazardousMaterials": { - "type": "boolean" - }, - "eventLightsChanged": { - "type": "boolean" - }, - "eventReserved1": { - "type": "boolean" - }, - "eventStabilityControlactivated": { - "type": "boolean" - }, - "eventStopLineViolation": { - "type": "boolean" - }, - "eventTractionControlLoss": { - "type": "boolean" - }, - "eventWipersChanged": { - "type": "boolean" - } - }, - "required": [ - "eventHazardLights", - "eventStopLineViolation", - "eventABSactivated", - "eventTractionControlLoss", - "eventStabilityControlactivated", - "eventHazardousMaterials", - "eventReserved1", - "eventHardBraking", - "eventLightsChanged", - "eventWipersChanged", - "eventFlatTire", - "eventDisabledVehicle", - "eventAirBagDeployment" - ], - "type": [ - "object", - "null" - ] - }, - "lights": { - "properties": { - "automaticLightControlOn": { - "type": "boolean" - }, - "daytimeRunningLightsOn": { - "type": "boolean" - }, - "fogLightOn": { - "type": "boolean" - }, - "hazardSignalOn": { - "type": "boolean" - }, - "highBeamHeadlightsOn": { - "type": "boolean" - }, - "leftTurnSignalOn": { - "type": "boolean" - }, - "lowBeamHeadlightsOn": { - "type": "boolean" - }, - "parkingLightsOn": { - "type": "boolean" - }, - "rightTurnSignalOn": { - "type": "boolean" - } - }, - "required": [ - "lowBeamHeadlightsOn", - "highBeamHeadlightsOn", - "leftTurnSignalOn", - "rightTurnSignalOn", - "hazardSignalOn", - "automaticLightControlOn", - "daytimeRunningLightsOn", - "fogLightOn", - "parkingLightsOn" - ], - "type": [ - "object", - "null" - ] - }, - "pathHistory": { - "properties": { - "crumbData": { - "items": { - "properties": { - "elevationOffset": { - "type": "number" - }, - "heading": { - "type": [ - "number", - "null" - ] - }, - "latOffset": { - "type": "number" - }, - "lonOffset": { - "type": "number" - }, - "posAccuracy": { - "properties": { - "orientation": { - "type": "number" - }, - "semiMajor": { - "type": "number" - }, - "semiMinor": { - "type": "number" - } - }, - "required": [ - "semiMajor", - "semiMinor", - "orientation" - ], - "type": [ - "object", - "null" - ] - }, - "speed": { - "type": [ - "number", - "null" - ] - }, - "timeOffset": { - "type": "number" - } - }, - "required": [ - "elevationOffset", - "latOffset", - "lonOffset", - "timeOffset" - ], - "type": "object" - }, - "maxItems": 23, - "minItems": 1, - "type": "array" - }, - "currGNSSstatus": { - "properties": { - "aPDOPofUnder5": { - "type": "boolean" - }, - "baseStationType": { - "type": "boolean" - }, - "inViewOfUnder5": { - "type": "boolean" - }, - "isHealthy": { - "type": "boolean" - }, - "isMonitored": { - "type": "boolean" - }, - "localCorrectionsPresent": { - "type": "boolean" - }, - "networkCorrectionsPresent": { - "type": "boolean" - }, - "unavailable": { - "type": "boolean" - } - }, - "required": [ - "unavailable", - "isHealthy", - "isMonitored", - "baseStationType", - "aPDOPofUnder5", - "inViewOfUnder5", - "localCorrectionsPresent", - "networkCorrectionsPresent" - ], - "type": [ - "object", - "null" - ] - }, - "initialPosition": { - "properties": { - "heading": { - "type": [ - "number", - "null" - ] - }, - "posAccuracy": { - "properties": { - "orientation": { - "type": [ - "number", - "null" - ] - }, - "semiMajor": { - "type": [ - "number", - "null" - ] - }, - "semiMinor": { - "type": [ - "number", - "null" - ] - } - }, - "required": [], - "type": "object" - }, - "posConfidence": { - "properties": { - "elevation": { - "enum": [ - "UNAVAILABLE", - "ELEV_500_00", - "ELEV_200_00", - "ELEV_100_00", - "ELEV_050_00", - "ELEV_020_00", - "ELEV_010_00", - "ELEV_005_00", - "ELEV_002_00", - "ELEV_001_00", - "ELEV_000_50", - "ELEV_000_20", - "ELEV_000_10", - "ELEV_000_05", - "ELEV_000_02", - "ELEV_000_01" - ], - "type": "string" - }, - "pos": { - "enum": [ - "UNAVAILABLE", - "A500M", - "A200M", - "A100M", - "A50M", - "A20M", - "A10M", - "A5M", - "A2M", - "A1M", - "A50CM", - "A20CM", - "A10CM", - "A5CM", - "A2CM", - "A1CM" - ], - "type": "string" - } - }, - "required": [ - "pos", - "elevation" - ], - "type": [ - "object", - "null" - ] - }, - "position": { - "properties": { - "elevation": { - "type": [ - "number", - "null" - ] - }, - "latitude": { - "type": "number" - }, - "longitude": { - "type": "number" - } - }, - "required": [ - "latitude", - "longitude" - ], - "type": "object" - }, - "speed": { - "properties": { - "speed": { - "type": "number" - }, - "transmission": { - "enum": [ - "NEUTRAL", - "PARK", - "FORWARDGEARS", - "REVERSEGEARS", - "RESERVED1", - "RESERVED2", - "RESERVED3", - "UNAVAILABLE" - ], - "type": "string" - } - }, - "required": [ - "speed", - "transmission" - ], - "type": [ - "object", - "null" - ] - }, - "speedConfidence": { - "properties": { - "heading": { - "enum": [ - "UNAVAILABLE", - "PREC10DEG", - "PREC05DEG", - "PREC01DEG", - "PREC0_1DEG", - "PREC0_05DEG", - "PREC0_01DEG", - "PREC0_0125DEG" - ], - "type": "string" - }, - "speed": { - "enum": [ - "UNAVAILABLE", - "PREC100MS", - "PREC10MS", - "PREC5MS", - "PREC1MS", - "PREC0_1MS", - "PREC0_05MS", - "PREC0_01MS" - ], - "type": "string" - }, - "throttle": { - "enum": [ - "UNAVAILABLE", - "PREC10PERCENT", - "PREC1PERCENT", - "PREC0_5PERCENT" - ], - "type": "string" - } - }, - "required": [ - "heading", - "speed", - "throttle" - ], - "type": [ - "object", - "null" - ] - }, - "timeConfidence": { - "enum": [ - "UNAVAILABLE", - "TIME_100_000", - "TIME_050_000", - "TIME_020_000", - "TIME_010_000", - "TIME_002_000", - "TIME_001_000", - "TIME_000_500", - "TIME_000_200", - "TIME_000_100", - "TIME_000_050", - "TIME_000_020", - "TIME_000_010", - "TIME_000_005", - "TIME_000_002", - "TIME_000_001", - "TIME_000_000_5", - "TIME_000_000_2", - "TIME_000_000_1", - "TIME_000_000_05", - "TIME_000_000_02", - "TIME_000_000_01", - "TIME_000_000_005", - "TIME_000_000_002", - "TIME_000_000_001", - "TIME_000_000_000_5", - "TIME_000_000_000_2", - "TIME_000_000_000_1", - "TIME_000_000_000_05", - "TIME_000_000_000_02", - "TIME_000_000_000_01", - "TIME_000_000_000_005", - "TIME_000_000_000_002", - "TIME_000_000_000_001", - "TIME_000_000_000_000_5", - "TIME_000_000_000_000_2", - "TIME_000_000_000_000_1", - "TIME_000_000_000_000_05", - "TIME_000_000_000_000_02", - "TIME_000_000_000_000_01", - null - ], - "type": [ - "string", - "null" - ] - }, - "utcTime": { - "properties": { - "day": { - "type": [ - "integer", - "null" - ] - }, - "hour": { - "type": [ - "integer", - "null" - ] - }, - "minute": { - "type": [ - "integer", - "null" - ] - }, - "month": { - "type": [ - "integer", - "null" - ] - }, - "offset": { - "type": [ - "integer", - "null" - ] - }, - "second": { - "type": [ - "integer", - "null" - ] - }, - "year": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [], - "type": [ - "object", - "null" - ] - } - }, - "required": [ - "position" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [ - "crumbData" - ], - "type": [ - "object", - "null" - ] - }, - "pathPrediction": { - "properties": { - "confidence": { - "type": "number" - }, - "radiusOfCurve": { - "type": "number" - } - }, - "required": [ - "confidence", - "radiusOfCurve" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [], - "type": "object" - } - }, - "required": [ - "id", - "value" - ], - "type": "object" + "$ref": "#/definitions/VehicleSafetyExtensions" }, { - "properties": { - "id": { - "const": "SpecialVehicleExtensions", - "type": "string" - }, - "value": { - "properties": { - "description": { - "properties": { - "description": { - "items": { - "type": "integer" - }, - "maxItems": 8, - "minItems": 1, - "type": [ - "array", - "null" - ] - }, - "extent": { - "enum": [ - "USEINSTANTLYONLY", - "USEFOR3METERS", - "USEFOR10METERS", - "USEFOR50METERS", - "USEFOR100METERS", - "USEFOR500METERS", - "USEFOR1000METERS", - "USEFOR5000METERS", - "USEFOR10000METERS", - "USEFOR50000METERS", - "USEFOR100000METERS", - "USEFOR500000METERS", - "USEFOR1000000METERS", - "USEFOR5000000METERS", - "USEFOR10000000METERS", - "FOREVER", - null - ], - "type": [ - "string", - "null" - ] - }, - "heading": { - "properties": { - "FROM000_0TO022_5DEGREES": { - "type": "boolean" - }, - "FROM022_5TO045_0DEGREES": { - "type": "boolean" - }, - "FROM045_0TO067_5DEGREES": { - "type": "boolean" - }, - "FROM067_5TO090_0DEGREES": { - "type": "boolean" - }, - "FROM090_0TO112_5DEGREES": { - "type": "boolean" - }, - "FROM112_5TO135_0DEGREES": { - "type": "boolean" - }, - "FROM135_0TO157_5DEGREES": { - "type": "boolean" - }, - "FROM157_5TO180_0DEGREES": { - "type": "boolean" - }, - "FROM180_0TO202_5DEGREES": { - "type": "boolean" - }, - "FROM202_5TO225_0DEGREES": { - "type": "boolean" - }, - "FROM225_0TO247_5DEGREES": { - "type": "boolean" - }, - "FROM247_5TO270_0DEGREES": { - "type": "boolean" - }, - "FROM270_0TO292_5DEGREES": { - "type": "boolean" - }, - "FROM292_5TO315_0DEGREES": { - "type": "boolean" - }, - "FROM315_0TO337_5DEGREES": { - "type": "boolean" - }, - "FROM337_5TO360_0DEGREES": { - "type": "boolean" - } - }, - "required": [ - "FROM000_0TO022_5DEGREES", - "FROM022_5TO045_0DEGREES", - "FROM045_0TO067_5DEGREES", - "FROM067_5TO090_0DEGREES", - "FROM090_0TO112_5DEGREES", - "FROM112_5TO135_0DEGREES", - "FROM135_0TO157_5DEGREES", - "FROM157_5TO180_0DEGREES", - "FROM180_0TO202_5DEGREES", - "FROM202_5TO225_0DEGREES", - "FROM225_0TO247_5DEGREES", - "FROM247_5TO270_0DEGREES", - "FROM270_0TO292_5DEGREES", - "FROM292_5TO315_0DEGREES", - "FROM315_0TO337_5DEGREES", - "FROM337_5TO360_0DEGREES" - ], - "type": [ - "object", - "null" - ] - }, - "priority": { - "type": [ - "string", - "null" - ] - }, - "regional": { - "items": { - "properties": { - "id": { - "type": "integer" - }, - "value": { - "contentEncoding": "base64", - "type": "string" - } - }, - "required": [ - "id", - "value" - ], - "type": "object" - }, - "maxItems": 4, - "minItems": 1, - "type": [ - "array", - "null" - ] - }, - "typeEvent": { - "type": "integer" - } - }, - "required": [], - "type": [ - "object", - "null" - ] - }, - "trailers": { - "properties": { - "connection": { - "properties": { - "pivotAngle": { - "type": "number" - }, - "pivotOffset": { - "type": "number" - }, - "pivots": { - "type": "boolean" - } - }, - "required": [ - "pivotOffset", - "pivotAngle", - "pivots" - ], - "type": "object" - }, - "sspRights": { - "type": "integer" - }, - "units": { - "items": { - "properties": { - "bumperHeights": { - "properties": { - "front": { - "type": "number" - }, - "rear": { - "type": "number" - } - }, - "required": [ - "front", - "rear" - ], - "type": [ - "object", - "null" - ] - }, - "centerOfGravity": { - "type": [ - "number", - "null" - ] - }, - "crumbData": { - "items": { - "properties": { - "elevationOffset": { - "type": "number" - }, - "heading": { - "type": [ - "number", - "null" - ] - }, - "latOffset": { - "type": "number" - }, - "lonOffset": { - "type": "number" - }, - "posAccuracy": { - "properties": { - "orientation": { - "type": "number" - }, - "semiMajor": { - "type": "number" - }, - "semiMinor": { - "type": "number" - } - }, - "required": [ - "semiMajor", - "semiMinor", - "orientation" - ], - "type": [ - "object", - "null" - ] - }, - "speed": { - "type": [ - "number", - "null" - ] - }, - "timeOffset": { - "type": "number" - } - }, - "required": [ - "elevationOffset", - "latOffset", - "lonOffset", - "timeOffset" - ], - "type": "object" - }, - "maxItems": 23, - "minItems": 1, - "type": [ - "array", - "null" - ] - }, - "elevationOffset": { - "type": [ - "number", - "null" - ] - }, - "frontPivot": { - "properties": { - "pivotAngle": { - "type": "number" - }, - "pivotOffset": { - "type": "number" - }, - "pivots": { - "type": "boolean" - } - }, - "required": [ - "pivotOffset", - "pivotAngle", - "pivots" - ], - "type": "object" - }, - "height": { - "type": [ - "number", - "null" - ] - }, - "isDolly": { - "type": "boolean" - }, - "length": { - "type": [ - "integer", - "null" - ] - }, - "mass": { - "type": [ - "integer", - "null" - ] - }, - "positionOffset": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": "object" - }, - "rearPivot": { - "properties": { - "pivotAngle": { - "type": "number" - }, - "pivotOffset": { - "type": "number" - }, - "pivots": { - "type": "boolean" - } - }, - "required": [ - "pivotOffset", - "pivotAngle", - "pivots" - ], - "type": [ - "object", - "null" - ] - }, - "rearWheelOffset": { - "type": [ - "number", - "null" - ] - }, - "width": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "isDolly", - "frontPivot", - "positionOffset" - ], - "type": "object" - }, - "maxItems": 8, - "minItems": 1, - "type": "array" - } - }, - "required": [ - "connection", - "sspRights", - "units" - ], - "type": [ - "object", - "null" - ] - }, - "vehicleAlerts": { - "properties": { - "events": { - "properties": { - "event": { - "properties": { - "peEmergencyLightsActive": { - "type": "boolean" - }, - "peEmergencyResponse": { - "type": "boolean" - }, - "peEmergencySoundActive": { - "type": "boolean" - }, - "peNonEmergencyLightsActive": { - "type": "boolean" - }, - "peNonEmergencySoundActive": { - "type": "boolean" - }, - "peUnavailable": { - "type": "boolean" - } - }, - "required": [ - "peUnavailable", - "peEmergencyResponse", - "peEmergencyLightsActive", - "peEmergencySoundActive", - "peNonEmergencyLightsActive", - "peNonEmergencySoundActive" - ], - "type": "object" - }, - "sspRights": { - "type": "integer" - } - }, - "required": [ - "event", - "sspRights" - ], - "type": [ - "object", - "null" - ] - }, - "lightsUse": { - "enum": [ - "UNAVAILABLE", - "NOTINUSE", - "INUSE", - "YELLOWCAUTIONLIGHTS", - "SCHOOLBUSLIGHTS", - "ARROWSIGNSACTIVE", - "SLOWMOVINGVEHICLE", - "FREQSTOPS" - ], - "type": "string" - }, - "multi": { - "enum": [ - "UNAVAILABLE", - "SINGLEVEHICLE", - "MULTIVEHICLE", - "RESERVED" - ], - "type": "string" - }, - "responseType": { - "enum": [ - "NOTINUSEORNOTEQUIPPED", - "EMERGENCY", - "NONEMERGENCY", - "PURSUIT", - "STATIONARY", - "SLOWMOVING", - "STOPANDGOMOVEMENT", - null - ], - "type": [ - "string", - "null" - ] - }, - "sirenUse": { - "enum": [ - "UNAVAILABLE", - "NOTINUSE", - "INUSE", - "RESERVED" - ], - "type": "string" - }, - "sspRights": { - "type": "number" - } - }, - "required": [ - "sspRights", - "lightsUse", - "multi", - "sirenUse" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [], - "type": "object" - } - }, - "required": [ - "id", - "value" - ], - "type": "object" + "$ref": "#/definitions/SpecialVehicleExtensions" }, { - "properties": { - "id": { - "const": "SupplementalVehicleExtensions", - "type": "string" - }, - "value": { - "properties": { - "classDetails": { - "properties": { - "fuelType": { - "enum": [ - "unknownFuel", - "gasoline", - "ethanol", - "diesel", - "electric", - "hybrid", - "hydrogen", - "natGasLiquid", - "natGasComp", - "propane", - null - ], - "type": [ - "string", - "null" - ] - }, - "hpmsType": { - "enum": [ - "none", - "unknown", - "special", - "moto", - "car", - "carOther", - "bus", - "axleCnt2", - "axleCnt3", - "axleCnt4", - "axleCnt4Trailer", - "axleCnt5Trailer", - "axleCnt6Trailer", - "axleCnt5MultiTrailer", - "axleCnt6MultiTrailer", - "axleCnt7MultiTrailer", - null - ], - "type": [ - "string", - "null" - ] - }, - "iso3883": { - "type": [ - "integer", - "null" - ] - }, - "keyType": { - "type": [ - "integer", - "null" - ] - }, - "regional": { - "items": { - "contentEncoding": "base64", - "type": "string" - }, - "maxItems": 4, - "minItems": 1, - "type": [ - "array", - "null" - ] - }, - "responderType": { - "enum": [ - "emergency_vehicle_units", - "federal_law_enforcement_units", - "state_police_units", - "county_police_units", - "local_police_units", - "ambulance_units", - "rescue_units", - "fire_units", - "hAZMAT_units", - "light_tow_unit", - "heavy_tow_unit", - "freeway_service_patrols", - "transportation_response_units", - "private_contractor_response_units", - null - ], - "type": [ - "string", - "null" - ] - }, - "responseEquip": { - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "name" - ], - "type": [ - "object", - "null" - ] - }, - "role": { - "enum": [ - "basicVehicle", - "publicTransport", - "specialTransport", - "dangerousGoods", - "roadWork", - "roadRescue", - "emergency", - "safetyCar", - "none_unknown", - "truck", - "motorcycle", - "roadSideSource", - "police", - "fire", - "ambulance", - "dot", - "transit", - "slowMoving", - "stopNgo", - "cyclist", - "pedestrian", - "nonMotorized", - "military", - null - ], - "type": [ - "string", - "null" - ] - }, - "vehicleType": { - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "name" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [], - "type": [ - "object", - "null" - ] - }, - "classification": { - "type": [ - "integer", - "null" - ] - }, - "obstacle": { - "properties": { - "dateTime": { - "properties": { - "day": { - "type": [ - "integer", - "null" - ] - }, - "hour": { - "type": [ - "integer", - "null" - ] - }, - "minute": { - "type": [ - "integer", - "null" - ] - }, - "month": { - "type": [ - "integer", - "null" - ] - }, - "offset": { - "type": [ - "integer", - "null" - ] - }, - "second": { - "type": [ - "integer", - "null" - ] - }, - "year": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [], - "type": [ - "object", - "null" - ] - }, - "description": { - "type": [ - "integer", - "null" - ] - }, - "locationDetails": { - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "name" - ], - "type": [ - "object", - "null" - ] - }, - "obDirect": { - "type": "number" - }, - "obDist": { - "type": "integer" - }, - "vertEvent": { - "properties": { - "leftFront": { - "type": "boolean" - }, - "leftRear": { - "type": "boolean" - }, - "notEquipped": { - "type": "boolean" - }, - "rightFront": { - "type": "boolean" - }, - "rightRear": { - "type": "boolean" - } - }, - "required": [ - "rightRear", - "rightFront", - "leftRear", - "leftFront", - "notEquipped" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [ - "obDirect", - "obDist" - ], - "type": [ - "object", - "null" - ] - }, - "regional": { - "items": { - "contentEncoding": "base64", - "type": "string" - }, - "maxItems": 4, - "minItems": 1, - "type": [ - "array", - "null" - ] - }, - "speedProfile": { - "properties": { - "speedReports": { - "items": { - "type": "integer" - }, - "maxItems": 20, - "minItems": 1, - "type": "array" - } - }, - "required": [], - "type": [ - "object", - "null" - ] - }, - "status": { - "properties": { - "locationDetails": { - "properties": { - "name": { - "type": "string" - }, - "value": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "name" - ], - "type": [ - "object", - "null" - ] - }, - "statusDetails": { - "type": "integer" - } - }, - "required": [ - "statusDetails" - ], - "type": [ - "object", - "null" - ] - }, - "theRTCM": { - "properties": { - "msgs": { - "items": { - "type": "string" - }, - "maxItems": 5, - "minItems": 1, - "type": "array" - }, - "rtcmHeader": { - "properties": { - "offsetSet": { - "properties": { - "antOffsetX": { - "type": "number" - }, - "antOffsetY": { - "type": "number" - }, - "antOffsetZ": { - "type": "number" - } - }, - "required": [ - "antOffsetX", - "antOffsetY", - "antOffsetZ" - ], - "type": "object" - }, - "status": { - "properties": { - "aPDOPofUnder5": { - "type": "boolean" - }, - "baseStationType": { - "type": "boolean" - }, - "inViewOfUnder5": { - "type": "boolean" - }, - "isHealthy": { - "type": "boolean" - }, - "isMonitored": { - "type": "boolean" - }, - "localCorrectionsPresent": { - "type": "boolean" - }, - "networkCorrectionsPresent": { - "type": "boolean" - }, - "unavailable": { - "type": "boolean" - } - }, - "required": [ - "unavailable", - "isHealthy", - "isMonitored", - "baseStationType", - "aPDOPofUnder5", - "inViewOfUnder5", - "localCorrectionsPresent", - "networkCorrectionsPresent" - ], - "type": "object" - } - }, - "required": [ - "status", - "offsetSet" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [ - "msgs" - ], - "type": "object" - }, - "vehicleData": { - "properties": { - "bumpers": { - "properties": { - "front": { - "type": "number" - }, - "rear": { - "type": "number" - } - }, - "required": [ - "front", - "rear" - ], - "type": [ - "object", - "null" - ] - }, - "height": { - "type": [ - "number", - "null" - ] - }, - "mass": { - "type": [ - "integer", - "null" - ] - }, - "trailerWeight": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [], - "type": [ - "object", - "null" - ] - }, - "weatherProbe": { - "properties": { - "airPressure": { - "type": [ - "integer", - "null" - ] - }, - "airTemp": { - "type": [ - "integer", - "null" - ] - }, - "rainRates": { - "properties": { - "rateFront": { - "type": "integer" - }, - "rateRear": { - "type": [ - "integer", - "null" - ] - }, - "statusFront": { - "enum": [ - "UNAVAILABLE", - "OFF", - "INTERMITTENT", - "LOW", - "HIGH", - "WASHERINUSE", - "AUTOMATICPRESENT" - ], - "type": "string" - }, - "statusRear": { - "enum": [ - "UNAVAILABLE", - "OFF", - "INTERMITTENT", - "LOW", - "HIGH", - "WASHERINUSE", - "AUTOMATICPRESENT", - null - ], - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "rateFront", - "statusFront" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [], - "type": [ - "object", - "null" - ] - }, - "weatherReport": { - "properties": { - "friction": { - "type": [ - "integer", - "null" - ] - }, - "isRaining": { - "enum": [ - "NA", - "PRECIP", - "NOPRECIP", - "ERROR" - ], - "type": "string" - }, - "precipSituation": { - "enum": [ - "NA", - "OTHER", - "UNKNOWN", - "NOPRECIPITATION", - "UNIDENTIFIEDSLIGHT", - "UNIDENTIFIEDMODERATE", - "UNIDENTIFIEDHEAVY", - "SNOWSLIGHT", - "SNOWMODERATE", - "SNOWHEAVY", - "RAINSLIGHT", - "RAINMODERATE", - "RAINHEAVY", - "FROZENPRECIPITATIONSLIGHT", - "FROZENPRECIPITATIONMODERATE", - "FROZENPRECIPITATIONHEAVY", - null - ], - "type": [ - "string", - "null" - ] - }, - "rainRate": { - "type": [ - "number", - "null" - ] - }, - "roadFriction": { - "type": [ - "number", - "null" - ] - }, - "solarRadiation": { - "type": [ - "integer", - "null" - ] - } - }, - "required": [ - "isRaining" - ], - "type": [ - "object", - "null" - ] - } - }, - "required": [], - "type": "object" - } - }, - "required": [ - "id", - "value" - ], - "type": "object" + "$ref": "#/definitions/SupplementalVehicleExtensions" } ] }, @@ -2205,5 +492,1732 @@ "metadata", "payload" ], - "type": "object" + "type": "object", + "definitions": { + "VehicleSafetyExtensions": { + "properties": { + "id": { + "const": "VehicleSafetyExtensions", + "type": "string" + }, + "value": { + "properties": { + "events": { + "properties": { + "eventABSactivated": { + "type": "boolean" + }, + "eventAirBagDeployment": { + "type": "boolean" + }, + "eventDisabledVehicle": { + "type": "boolean" + }, + "eventFlatTire": { + "type": "boolean" + }, + "eventHardBraking": { + "type": "boolean" + }, + "eventHazardLights": { + "type": "boolean" + }, + "eventHazardousMaterials": { + "type": "boolean" + }, + "eventLightsChanged": { + "type": "boolean" + }, + "eventReserved1": { + "type": "boolean" + }, + "eventStabilityControlactivated": { + "type": "boolean" + }, + "eventStopLineViolation": { + "type": "boolean" + }, + "eventTractionControlLoss": { + "type": "boolean" + }, + "eventWipersChanged": { + "type": "boolean" + } + }, + "required": [ + "eventHazardLights", + "eventStopLineViolation", + "eventABSactivated", + "eventTractionControlLoss", + "eventStabilityControlactivated", + "eventHazardousMaterials", + "eventReserved1", + "eventHardBraking", + "eventLightsChanged", + "eventWipersChanged", + "eventFlatTire", + "eventDisabledVehicle", + "eventAirBagDeployment" + ], + "type": [ + "object", + "null" + ] + }, + "lights": { + "properties": { + "automaticLightControlOn": { + "type": "boolean" + }, + "daytimeRunningLightsOn": { + "type": "boolean" + }, + "fogLightOn": { + "type": "boolean" + }, + "hazardSignalOn": { + "type": "boolean" + }, + "highBeamHeadlightsOn": { + "type": "boolean" + }, + "leftTurnSignalOn": { + "type": "boolean" + }, + "lowBeamHeadlightsOn": { + "type": "boolean" + }, + "parkingLightsOn": { + "type": "boolean" + }, + "rightTurnSignalOn": { + "type": "boolean" + } + }, + "required": [ + "lowBeamHeadlightsOn", + "highBeamHeadlightsOn", + "leftTurnSignalOn", + "rightTurnSignalOn", + "hazardSignalOn", + "automaticLightControlOn", + "daytimeRunningLightsOn", + "fogLightOn", + "parkingLightsOn" + ], + "type": [ + "object", + "null" + ] + }, + "pathHistory": { + "properties": { + "crumbData": { + "items": { + "properties": { + "elevationOffset": { + "type": "number" + }, + "heading": { + "type": [ + "number", + "null" + ] + }, + "latOffset": { + "type": "number" + }, + "lonOffset": { + "type": "number" + }, + "posAccuracy": { + "properties": { + "orientation": { + "type": "number" + }, + "semiMajor": { + "type": "number" + }, + "semiMinor": { + "type": "number" + } + }, + "required": [ + "semiMajor", + "semiMinor", + "orientation" + ], + "type": [ + "object", + "null" + ] + }, + "speed": { + "type": [ + "number", + "null" + ] + }, + "timeOffset": { + "type": "number" + } + }, + "required": [ + "elevationOffset", + "latOffset", + "lonOffset", + "timeOffset" + ], + "type": "object" + }, + "maxItems": 23, + "minItems": 1, + "type": "array" + }, + "currGNSSstatus": { + "properties": { + "aPDOPofUnder5": { + "type": "boolean" + }, + "baseStationType": { + "type": "boolean" + }, + "inViewOfUnder5": { + "type": "boolean" + }, + "isHealthy": { + "type": "boolean" + }, + "isMonitored": { + "type": "boolean" + }, + "localCorrectionsPresent": { + "type": "boolean" + }, + "networkCorrectionsPresent": { + "type": "boolean" + }, + "unavailable": { + "type": "boolean" + } + }, + "required": [ + "unavailable", + "isHealthy", + "isMonitored", + "baseStationType", + "aPDOPofUnder5", + "inViewOfUnder5", + "localCorrectionsPresent", + "networkCorrectionsPresent" + ], + "type": [ + "object", + "null" + ] + }, + "initialPosition": { + "properties": { + "heading": { + "type": [ + "number", + "null" + ] + }, + "posAccuracy": { + "properties": { + "orientation": { + "type": [ + "number", + "null" + ] + }, + "semiMajor": { + "type": [ + "number", + "null" + ] + }, + "semiMinor": { + "type": [ + "number", + "null" + ] + } + }, + "required": [], + "type": "object" + }, + "posConfidence": { + "properties": { + "elevation": { + "enum": [ + "UNAVAILABLE", + "ELEV_500_00", + "ELEV_200_00", + "ELEV_100_00", + "ELEV_050_00", + "ELEV_020_00", + "ELEV_010_00", + "ELEV_005_00", + "ELEV_002_00", + "ELEV_001_00", + "ELEV_000_50", + "ELEV_000_20", + "ELEV_000_10", + "ELEV_000_05", + "ELEV_000_02", + "ELEV_000_01" + ], + "type": "string" + }, + "pos": { + "enum": [ + "UNAVAILABLE", + "A500M", + "A200M", + "A100M", + "A50M", + "A20M", + "A10M", + "A5M", + "A2M", + "A1M", + "A50CM", + "A20CM", + "A10CM", + "A5CM", + "A2CM", + "A1CM" + ], + "type": "string" + } + }, + "required": [ + "pos", + "elevation" + ], + "type": [ + "object", + "null" + ] + }, + "position": { + "properties": { + "elevation": { + "type": [ + "number", + "null" + ] + }, + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object" + }, + "speed": { + "properties": { + "speed": { + "type": "number" + }, + "transmission": { + "enum": [ + "NEUTRAL", + "PARK", + "FORWARDGEARS", + "REVERSEGEARS", + "RESERVED1", + "RESERVED2", + "RESERVED3", + "UNAVAILABLE" + ], + "type": "string" + } + }, + "required": [ + "speed", + "transmission" + ], + "type": [ + "object", + "null" + ] + }, + "speedConfidence": { + "properties": { + "heading": { + "enum": [ + "UNAVAILABLE", + "PREC10DEG", + "PREC05DEG", + "PREC01DEG", + "PREC0_1DEG", + "PREC0_05DEG", + "PREC0_01DEG", + "PREC0_0125DEG" + ], + "type": "string" + }, + "speed": { + "enum": [ + "UNAVAILABLE", + "PREC100MS", + "PREC10MS", + "PREC5MS", + "PREC1MS", + "PREC0_1MS", + "PREC0_05MS", + "PREC0_01MS" + ], + "type": "string" + }, + "throttle": { + "enum": [ + "UNAVAILABLE", + "PREC10PERCENT", + "PREC1PERCENT", + "PREC0_5PERCENT" + ], + "type": "string" + } + }, + "required": [ + "heading", + "speed", + "throttle" + ], + "type": [ + "object", + "null" + ] + }, + "timeConfidence": { + "enum": [ + "UNAVAILABLE", + "TIME_100_000", + "TIME_050_000", + "TIME_020_000", + "TIME_010_000", + "TIME_002_000", + "TIME_001_000", + "TIME_000_500", + "TIME_000_200", + "TIME_000_100", + "TIME_000_050", + "TIME_000_020", + "TIME_000_010", + "TIME_000_005", + "TIME_000_002", + "TIME_000_001", + "TIME_000_000_5", + "TIME_000_000_2", + "TIME_000_000_1", + "TIME_000_000_05", + "TIME_000_000_02", + "TIME_000_000_01", + "TIME_000_000_005", + "TIME_000_000_002", + "TIME_000_000_001", + "TIME_000_000_000_5", + "TIME_000_000_000_2", + "TIME_000_000_000_1", + "TIME_000_000_000_05", + "TIME_000_000_000_02", + "TIME_000_000_000_01", + "TIME_000_000_000_005", + "TIME_000_000_000_002", + "TIME_000_000_000_001", + "TIME_000_000_000_000_5", + "TIME_000_000_000_000_2", + "TIME_000_000_000_000_1", + "TIME_000_000_000_000_05", + "TIME_000_000_000_000_02", + "TIME_000_000_000_000_01", + null + ], + "type": [ + "string", + "null" + ] + }, + "utcTime": { + "properties": { + "day": { + "type": [ + "integer", + "null" + ] + }, + "hour": { + "type": [ + "integer", + "null" + ] + }, + "minute": { + "type": [ + "integer", + "null" + ] + }, + "month": { + "type": [ + "integer", + "null" + ] + }, + "offset": { + "type": [ + "integer", + "null" + ] + }, + "second": { + "type": [ + "integer", + "null" + ] + }, + "year": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "position" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "crumbData" + ], + "type": [ + "object", + "null" + ] + }, + "pathPrediction": { + "properties": { + "confidence": { + "type": "number" + }, + "radiusOfCurve": { + "type": "number" + } + }, + "required": [ + "confidence", + "radiusOfCurve" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [], + "type": "object" + } + }, + "required": [ + "id", + "value" + ], + "type": "object" + }, + "SpecialVehicleExtensions": { + "properties": { + "id": { + "const": "SpecialVehicleExtensions", + "type": "string" + }, + "value": { + "properties": { + "description": { + "properties": { + "description": { + "items": { + "type": "integer" + }, + "maxItems": 8, + "minItems": 1, + "type": [ + "array", + "null" + ] + }, + "extent": { + "enum": [ + "USEINSTANTLYONLY", + "USEFOR3METERS", + "USEFOR10METERS", + "USEFOR50METERS", + "USEFOR100METERS", + "USEFOR500METERS", + "USEFOR1000METERS", + "USEFOR5000METERS", + "USEFOR10000METERS", + "USEFOR50000METERS", + "USEFOR100000METERS", + "USEFOR500000METERS", + "USEFOR1000000METERS", + "USEFOR5000000METERS", + "USEFOR10000000METERS", + "FOREVER", + null + ], + "type": [ + "string", + "null" + ] + }, + "heading": { + "properties": { + "FROM000_0TO022_5DEGREES": { + "type": "boolean" + }, + "FROM022_5TO045_0DEGREES": { + "type": "boolean" + }, + "FROM045_0TO067_5DEGREES": { + "type": "boolean" + }, + "FROM067_5TO090_0DEGREES": { + "type": "boolean" + }, + "FROM090_0TO112_5DEGREES": { + "type": "boolean" + }, + "FROM112_5TO135_0DEGREES": { + "type": "boolean" + }, + "FROM135_0TO157_5DEGREES": { + "type": "boolean" + }, + "FROM157_5TO180_0DEGREES": { + "type": "boolean" + }, + "FROM180_0TO202_5DEGREES": { + "type": "boolean" + }, + "FROM202_5TO225_0DEGREES": { + "type": "boolean" + }, + "FROM225_0TO247_5DEGREES": { + "type": "boolean" + }, + "FROM247_5TO270_0DEGREES": { + "type": "boolean" + }, + "FROM270_0TO292_5DEGREES": { + "type": "boolean" + }, + "FROM292_5TO315_0DEGREES": { + "type": "boolean" + }, + "FROM315_0TO337_5DEGREES": { + "type": "boolean" + }, + "FROM337_5TO360_0DEGREES": { + "type": "boolean" + } + }, + "required": [ + "FROM000_0TO022_5DEGREES", + "FROM022_5TO045_0DEGREES", + "FROM045_0TO067_5DEGREES", + "FROM067_5TO090_0DEGREES", + "FROM090_0TO112_5DEGREES", + "FROM112_5TO135_0DEGREES", + "FROM135_0TO157_5DEGREES", + "FROM157_5TO180_0DEGREES", + "FROM180_0TO202_5DEGREES", + "FROM202_5TO225_0DEGREES", + "FROM225_0TO247_5DEGREES", + "FROM247_5TO270_0DEGREES", + "FROM270_0TO292_5DEGREES", + "FROM292_5TO315_0DEGREES", + "FROM315_0TO337_5DEGREES", + "FROM337_5TO360_0DEGREES" + ], + "type": [ + "object", + "null" + ] + }, + "priority": { + "type": [ + "string", + "null" + ] + }, + "regional": { + "items": { + "properties": { + "id": { + "type": "integer" + }, + "value": { + "contentEncoding": "base64", + "type": "string" + } + }, + "required": [ + "id", + "value" + ], + "type": "object" + }, + "maxItems": 4, + "minItems": 1, + "type": [ + "array", + "null" + ] + }, + "typeEvent": { + "type": "integer" + } + }, + "required": [], + "type": [ + "object", + "null" + ] + }, + "doNotUse": { + "properties": { + "connection": { + "properties": { + "pivotAngle": { + "type": "number" + }, + "pivotOffset": { + "type": "number" + }, + "pivots": { + "type": "boolean" + } + }, + "required": [ + "pivotOffset", + "pivotAngle", + "pivots" + ], + "type": "object" + }, + "doNotUse": { + "type": "integer" + }, + "units": { + "items": { + "properties": { + "bumperHeights": { + "properties": { + "front": { + "type": "number" + }, + "rear": { + "type": "number" + } + }, + "required": [ + "front", + "rear" + ], + "type": [ + "object", + "null" + ] + }, + "centerOfGravity": { + "type": [ + "number", + "null" + ] + }, + "crumbData": { + "items": { + "properties": { + "elevationOffset": { + "type": "number" + }, + "heading": { + "type": [ + "number", + "null" + ] + }, + "latOffset": { + "type": "number" + }, + "lonOffset": { + "type": "number" + }, + "posAccuracy": { + "properties": { + "orientation": { + "type": "number" + }, + "semiMajor": { + "type": "number" + }, + "semiMinor": { + "type": "number" + } + }, + "required": [ + "semiMajor", + "semiMinor", + "orientation" + ], + "type": [ + "object", + "null" + ] + }, + "speed": { + "type": [ + "number", + "null" + ] + }, + "timeOffset": { + "type": "number" + } + }, + "required": [ + "elevationOffset", + "latOffset", + "lonOffset", + "timeOffset" + ], + "type": "object" + }, + "maxItems": 23, + "minItems": 1, + "type": [ + "array", + "null" + ] + }, + "elevationOffset": { + "type": [ + "number", + "null" + ] + }, + "frontPivot": { + "properties": { + "pivotAngle": { + "type": "number" + }, + "pivotOffset": { + "type": "number" + }, + "pivots": { + "type": "boolean" + } + }, + "required": [ + "pivotOffset", + "pivotAngle", + "pivots" + ], + "type": "object" + }, + "height": { + "type": [ + "number", + "null" + ] + }, + "isDolly": { + "type": "boolean" + }, + "length": { + "type": [ + "integer", + "null" + ] + }, + "mass": { + "type": [ + "integer", + "null" + ] + }, + "positionOffset": { + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": "object" + }, + "rearPivot": { + "properties": { + "pivotAngle": { + "type": "number" + }, + "pivotOffset": { + "type": "number" + }, + "pivots": { + "type": "boolean" + } + }, + "required": [ + "pivotOffset", + "pivotAngle", + "pivots" + ], + "type": [ + "object", + "null" + ] + }, + "rearWheelOffset": { + "type": [ + "number", + "null" + ] + }, + "width": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "isDolly", + "frontPivot", + "positionOffset" + ], + "type": "object" + }, + "maxItems": 8, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "connection", + "doNotUse", + "units" + ], + "type": [ + "object", + "null" + ] + }, + "vehicleAlerts": { + "properties": { + "events": { + "properties": { + "event": { + "properties": { + "peEmergencyLightsActive": { + "type": "boolean" + }, + "peEmergencyResponse": { + "type": "boolean" + }, + "peEmergencySoundActive": { + "type": "boolean" + }, + "peNonEmergencyLightsActive": { + "type": "boolean" + }, + "peNonEmergencySoundActive": { + "type": "boolean" + }, + "peUnavailable": { + "type": "boolean" + } + }, + "required": [ + "peUnavailable", + "peEmergencyResponse", + "peEmergencyLightsActive", + "peEmergencySoundActive", + "peNonEmergencyLightsActive", + "peNonEmergencySoundActive" + ], + "type": "object" + }, + "doNotUse": { + "type": "integer" + } + }, + "required": [ + "event", + "doNotUse" + ], + "type": [ + "object", + "null" + ] + }, + "lightsUse": { + "enum": [ + "UNAVAILABLE", + "NOTINUSE", + "INUSE", + "YELLOWCAUTIONLIGHTS", + "SCHOOLBUSLIGHTS", + "ARROWSIGNSACTIVE", + "SLOWMOVINGVEHICLE", + "FREQSTOPS" + ], + "type": "string" + }, + "multi": { + "enum": [ + "UNAVAILABLE", + "SINGLEVEHICLE", + "MULTIVEHICLE", + "RESERVED" + ], + "type": "string" + }, + "responseType": { + "enum": [ + "NOTINUSEORNOTEQUIPPED", + "EMERGENCY", + "NONEMERGENCY", + "PURSUIT", + "STATIONARY", + "SLOWMOVING", + "STOPANDGOMOVEMENT", + null + ], + "type": [ + "string", + "null" + ] + }, + "sirenUse": { + "enum": [ + "UNAVAILABLE", + "NOTINUSE", + "INUSE", + "RESERVED" + ], + "type": "string" + }, + "doNotUse": { + "type": "number" + } + }, + "required": [ + "doNotUse", + "lightsUse", + "multi", + "sirenUse" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [], + "type": "object" + } + }, + "required": [ + "id", + "value" + ], + "type": "object" + }, + "SupplementalVehicleExtensions": { + "properties": { + "id": { + "const": "SupplementalVehicleExtensions", + "type": "string" + }, + "value": { + "properties": { + "classDetails": { + "properties": { + "fuelType": { + "enum": [ + "unknownFuel", + "gasoline", + "ethanol", + "diesel", + "electric", + "hybrid", + "hydrogen", + "natGasLiquid", + "natGasComp", + "propane", + null + ], + "type": [ + "string", + "null" + ] + }, + "hpmsType": { + "enum": [ + "none", + "unknown", + "special", + "moto", + "car", + "carOther", + "bus", + "axleCnt2", + "axleCnt3", + "axleCnt4", + "axleCnt4Trailer", + "axleCnt5Trailer", + "axleCnt6Trailer", + "axleCnt5MultiTrailer", + "axleCnt6MultiTrailer", + "axleCnt7MultiTrailer", + null + ], + "type": [ + "string", + "null" + ] + }, + "iso3883": { + "type": [ + "integer", + "null" + ] + }, + "keyType": { + "type": [ + "integer", + "null" + ] + }, + "regional": { + "items": { + "contentEncoding": "base64", + "type": "string" + }, + "maxItems": 4, + "minItems": 1, + "type": [ + "array", + "null" + ] + }, + "responderType": { + "enum": [ + "emergency_vehicle_units", + "federal_law_enforcement_units", + "state_police_units", + "county_police_units", + "local_police_units", + "ambulance_units", + "rescue_units", + "fire_units", + "hAZMAT_units", + "light_tow_unit", + "heavy_tow_unit", + "freeway_service_patrols", + "transportation_response_units", + "private_contractor_response_units", + null + ], + "type": [ + "string", + "null" + ] + }, + "responseEquip": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "name" + ], + "type": [ + "object", + "null" + ] + }, + "role": { + "enum": [ + "basicVehicle", + "publicTransport", + "specialTransport", + "dangerousGoods", + "roadWork", + "roadRescue", + "emergency", + "safetyCar", + "none_unknown", + "truck", + "motorcycle", + "roadSideSource", + "police", + "fire", + "ambulance", + "dot", + "transit", + "slowMoving", + "stopNgo", + "cyclist", + "pedestrian", + "nonMotorized", + "military", + null + ], + "type": [ + "string", + "null" + ] + }, + "vehicleType": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "name" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [], + "type": [ + "object", + "null" + ] + }, + "classification": { + "type": [ + "integer", + "null" + ] + }, + "doNotUse3": { + "properties": { + "dateTime": { + "properties": { + "day": { + "type": [ + "integer", + "null" + ] + }, + "hour": { + "type": [ + "integer", + "null" + ] + }, + "minute": { + "type": [ + "integer", + "null" + ] + }, + "month": { + "type": [ + "integer", + "null" + ] + }, + "offset": { + "type": [ + "integer", + "null" + ] + }, + "second": { + "type": [ + "integer", + "null" + ] + }, + "year": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [], + "type": [ + "object", + "null" + ] + }, + "description": { + "type": [ + "integer", + "null" + ] + }, + "locationDetails": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "name" + ], + "type": [ + "object", + "null" + ] + }, + "obDirect": { + "type": "number" + }, + "obDist": { + "type": "integer" + }, + "vertEvent": { + "properties": { + "leftFront": { + "type": "boolean" + }, + "leftRear": { + "type": "boolean" + }, + "notEquipped": { + "type": "boolean" + }, + "rightFront": { + "type": "boolean" + }, + "rightRear": { + "type": "boolean" + } + }, + "required": [ + "rightRear", + "rightFront", + "leftRear", + "leftFront", + "notEquipped" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "obDirect", + "obDist" + ], + "type": [ + "object", + "null" + ] + }, + "regional": { + "items": { + "contentEncoding": "base64", + "type": "string" + }, + "maxItems": 4, + "minItems": 1, + "type": [ + "array", + "null" + ] + }, + "doNotUse4": { + "properties": { + "speedReports": { + "items": { + "type": "integer" + }, + "maxItems": 20, + "minItems": 1, + "type": "array" + } + }, + "required": [], + "type": [ + "object", + "null" + ] + }, + "status": { + "properties": { + "locationDetails": { + "properties": { + "name": { + "type": "string" + }, + "value": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "name" + ], + "type": [ + "object", + "null" + ] + }, + "statusDetails": { + "type": "integer" + } + }, + "required": [ + "statusDetails" + ], + "type": [ + "object", + "null" + ] + }, + "doNotUse5": { + "properties": { + "msgs": { + "items": { + "type": "string" + }, + "maxItems": 5, + "minItems": 1, + "type": "array" + }, + "rtcmHeader": { + "properties": { + "offsetSet": { + "properties": { + "antOffsetX": { + "type": "number" + }, + "antOffsetY": { + "type": "number" + }, + "antOffsetZ": { + "type": "number" + } + }, + "required": [ + "antOffsetX", + "antOffsetY", + "antOffsetZ" + ], + "type": "object" + }, + "status": { + "properties": { + "aPDOPofUnder5": { + "type": "boolean" + }, + "baseStationType": { + "type": "boolean" + }, + "inViewOfUnder5": { + "type": "boolean" + }, + "isHealthy": { + "type": "boolean" + }, + "isMonitored": { + "type": "boolean" + }, + "localCorrectionsPresent": { + "type": "boolean" + }, + "networkCorrectionsPresent": { + "type": "boolean" + }, + "unavailable": { + "type": "boolean" + } + }, + "required": [ + "unavailable", + "isHealthy", + "isMonitored", + "baseStationType", + "aPDOPofUnder5", + "inViewOfUnder5", + "localCorrectionsPresent", + "networkCorrectionsPresent" + ], + "type": "object" + } + }, + "required": [ + "status", + "offsetSet" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [ + "msgs" + ], + "type": [ + "object", + "null" + ] + }, + "vehicleData": { + "properties": { + "bumpers": { + "properties": { + "front": { + "type": "number" + }, + "rear": { + "type": "number" + } + }, + "required": [ + "front", + "rear" + ], + "type": [ + "object", + "null" + ] + }, + "height": { + "type": [ + "number", + "null" + ] + }, + "mass": { + "type": [ + "integer", + "null" + ] + }, + "doNotUse": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [], + "type": [ + "object", + "null" + ] + }, + "doNotUse2": { + "properties": { + "airPressure": { + "type": [ + "integer", + "null" + ] + }, + "airTemp": { + "type": [ + "integer", + "null" + ] + }, + "rainRates": { + "properties": { + "rateFront": { + "type": "integer" + }, + "rateRear": { + "type": [ + "integer", + "null" + ] + }, + "statusFront": { + "enum": [ + "UNAVAILABLE", + "OFF", + "INTERMITTENT", + "LOW", + "HIGH", + "WASHERINUSE", + "AUTOMATICPRESENT" + ], + "type": "string" + }, + "statusRear": { + "enum": [ + "UNAVAILABLE", + "OFF", + "INTERMITTENT", + "LOW", + "HIGH", + "WASHERINUSE", + "AUTOMATICPRESENT", + null + ], + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "rateFront", + "statusFront" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [], + "type": [ + "object", + "null" + ] + }, + "doNotUse1": { + "properties": { + "friction": { + "type": [ + "integer", + "null" + ] + }, + "isRaining": { + "enum": [ + "NA", + "PRECIP", + "NOPRECIP", + "ERROR" + ], + "type": "string" + }, + "precipSituation": { + "enum": [ + "NA", + "OTHER", + "UNKNOWN", + "NOPRECIPITATION", + "UNIDENTIFIEDSLIGHT", + "UNIDENTIFIEDMODERATE", + "UNIDENTIFIEDHEAVY", + "SNOWSLIGHT", + "SNOWMODERATE", + "SNOWHEAVY", + "RAINSLIGHT", + "RAINMODERATE", + "RAINHEAVY", + "FROZENPRECIPITATIONSLIGHT", + "FROZENPRECIPITATIONMODERATE", + "FROZENPRECIPITATIONHEAVY", + null + ], + "type": [ + "string", + "null" + ] + }, + "rainRate": { + "type": [ + "number", + "null" + ] + }, + "roadFriction": { + "type": [ + "number", + "null" + ] + }, + "solarRadiation": { + "type": [ + "integer", + "null" + ] + } + }, + "required": [ + "isRaining" + ], + "type": [ + "object", + "null" + ] + } + }, + "required": [], + "type": "object" + } + }, + "required": [ + "id", + "value" + ], + "type": "object" + } + } } \ No newline at end of file diff --git a/jpo-ode-core/src/main/resources/schemas/schema-map.json b/jpo-ode-core/src/main/resources/schemas/schema-map.json index 85495546a..4b1098f74 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-map.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-map.json @@ -1,4 +1,4 @@ -{ +{ "$schema": "http://json-schema.org/draft-04/schema#", "properties": { "metadata": { @@ -72,7 +72,7 @@ "type": "boolean" }, "schemaVersion": { - "const": 7, + "const": 8, "type": "integer" }, "securityResultCode": { @@ -791,185 +791,177 @@ "nodeList": { "properties": { "nodes": { - "properties": { - "NodeXY": { - "items": [ - { + "type": "array", + "items": [ + { + "properties": { + "attributes": { + "properties": { + "dElevation": { + "type": "number" + }, + "dWidth": { + "type": "null" + }, + "data": { + "type": "null" + }, + "disabled": { + "type": "null" + }, + "enabled": { + "type": "null" + }, + "localNode": { + "type": "null" + } + }, + "required": [ + "dElevation" + ], + "type": [ + "object", + "null" + ] + }, + "delta": { "properties": { - "attributes": { + "nodeLatLon": { "properties": { - "dElevation": { + "lat": { "type": "number" }, - "dWidth": { - "type": "null" - }, - "data": { - "type": "null" - }, - "disabled": { - "type": "null" - }, - "enabled": { - "type": "null" - }, - "localNode": { - "type": "null" + "lon": { + "type": "number" } }, "required": [ - "dElevation" + "lon", + "lat" ], "type": [ "object", "null" ] }, - "delta": { + "nodeXY1": { "properties": { - "nodeLatLon": { - "properties": { - "lat": { - "type": "number" - }, - "lon": { - "type": "number" - } - }, - "required": [ - "lon", - "lat" - ], - "type": [ - "object", - "null" - ] + "x": { + "type": "number" }, - "nodeXY1": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY2": { + "properties": { + "x": { + "type": "number" }, - "nodeXY2": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY3": { + "properties": { + "x": { + "type": "number" }, - "nodeXY3": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY4": { + "properties": { + "x": { + "type": "number" }, - "nodeXY4": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY5": { + "properties": { + "x": { + "type": "number" }, - "nodeXY5": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY6": { + "properties": { + "x": { + "type": "number" }, - "nodeXY6": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" } }, - "type": "object" + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] } }, - "required": [ - "delta" - ], "type": "object" } + }, + "required": [ + "delta" ], - "type": "array" + "type": "object" } - }, - "required": [ - "NodeXY" - ], - "type": "object" + ] } }, "required": [ @@ -1029,8 +1021,7 @@ "properties": { "elevation": { "type": [ - "number", - "null" + "number" ] }, "latitude": { @@ -1207,8 +1198,7 @@ "properties": { "elevation": { "type": [ - "number", - "null" + "string" ] }, "latitude": { @@ -1821,185 +1811,177 @@ "nodeList": { "properties": { "nodes": { - "properties": { - "NodeXY": { - "items": [ - { + "type": "array", + "items": [ + { + "properties": { + "attributes": { + "properties": { + "dElevation": { + "type": "number" + }, + "dWidth": { + "type": "null" + }, + "data": { + "type": "null" + }, + "disabled": { + "type": "null" + }, + "enabled": { + "type": "null" + }, + "localNode": { + "type": "null" + } + }, + "required": [ + "dElevation" + ], + "type": [ + "object", + "null" + ] + }, + "delta": { "properties": { - "attributes": { + "nodeLatLon": { "properties": { - "dElevation": { + "lat": { "type": "number" }, - "dWidth": { - "type": "null" - }, - "data": { - "type": "null" - }, - "disabled": { - "type": "null" - }, - "enabled": { - "type": "null" - }, - "localNode": { - "type": "null" + "lon": { + "type": "number" } }, "required": [ - "dElevation" + "lon", + "lat" ], "type": [ "object", "null" ] }, - "delta": { + "nodeXY1": { "properties": { - "nodeLatLon": { - "properties": { - "lat": { - "type": "number" - }, - "lon": { - "type": "number" - } - }, - "required": [ - "lon", - "lat" - ], - "type": [ - "object", - "null" - ] + "x": { + "type": "number" }, - "nodeXY1": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY2": { + "properties": { + "x": { + "type": "number" }, - "nodeXY2": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY3": { + "properties": { + "x": { + "type": "number" }, - "nodeXY3": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY4": { + "properties": { + "x": { + "type": "number" }, - "nodeXY4": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY5": { + "properties": { + "x": { + "type": "number" }, - "nodeXY5": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] + }, + "nodeXY6": { + "properties": { + "x": { + "type": "number" }, - "nodeXY6": { - "properties": { - "x": { - "type": "number" - }, - "y": { - "type": "number" - } - }, - "required": [ - "x", - "y" - ], - "type": [ - "object", - "null" - ] + "y": { + "type": "number" } }, - "type": "object" + "required": [ + "x", + "y" + ], + "type": [ + "object", + "null" + ] } }, - "required": [ - "delta" - ], "type": "object" } + }, + "required": [ + "delta" ], - "type": "array" + "type": "object" } - }, - "required": [ - "NodeXY" - ], - "type": "object" + ] } }, "required": [ diff --git a/jpo-ode-core/src/main/resources/schemas/schema-psm.json b/jpo-ode-core/src/main/resources/schemas/schema-psm.json index 6b336cf5d..3cfe8ce95 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-psm.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-psm.json @@ -85,7 +85,7 @@ "type": "string" }, "schemaVersion": { - "const": 7, + "const": 8, "type": "integer" }, "maxDurationTime": { @@ -101,7 +101,19 @@ "type": "string" }, "recordGeneratedBy": { - "type": "null" + "type": [ + "string", + "null" + ], + "enum": [ + "TMC", + "OBU", + "RSU", + "TMC_VIA_SAT", + "TMC_VIA_SNMP", + "UNKNOWN", + null + ] }, "sanitized": { "type": "boolean" diff --git a/jpo-ode-core/src/main/resources/schemas/schema-spat.json b/jpo-ode-core/src/main/resources/schemas/schema-spat.json index 13d5e62a1..70b0bbdd3 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-spat.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-spat.json @@ -214,7 +214,7 @@ }, "schemaVersion": { "type": "integer", - "const": 7 + "const": 8 }, "maxDurationTime": { "type": [ diff --git a/jpo-ode-core/src/main/resources/schemas/schema-srm.json b/jpo-ode-core/src/main/resources/schemas/schema-srm.json index 8ea7ec55c..bfe9b38fd 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-srm.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-srm.json @@ -71,7 +71,7 @@ "type": "string" }, "schemaVersion": { - "const": 7, + "const": 8, "type": "integer" }, "maxDurationTime": { diff --git a/jpo-ode-core/src/main/resources/schemas/schema-ssm.json b/jpo-ode-core/src/main/resources/schemas/schema-ssm.json index c3e030551..710234c76 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-ssm.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-ssm.json @@ -77,7 +77,7 @@ "type": "string" }, "schemaVersion": { - "const": 7, + "const": 8, "type": "integer" }, "maxDurationTime": { diff --git a/jpo-ode-core/src/main/resources/schemas/schema-tim.json b/jpo-ode-core/src/main/resources/schemas/schema-tim.json index e9343d1d7..966c57159 100644 --- a/jpo-ode-core/src/main/resources/schemas/schema-tim.json +++ b/jpo-ode-core/src/main/resources/schemas/schema-tim.json @@ -1,13 +1,28 @@ { - "$schema": "http://json-schema.org/draft-04/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object", "properties": { "metadata": { + "$ref": "#/$defs/OdeTimMetadata" + }, + "payload": { + "$ref": "#/$defs/OdeTimPayload" + } + }, + "additionalProperties": false, + "required": [ + "metadata", + "payload" + ], + "$defs": { + "OdeTimMetadata": { + "type": "object", "properties": { "logFileName": { "type": "string" }, "maxDurationTime": { - "type": "string" + "type": "number" }, "odePacketID": { "type": "string" @@ -25,513 +40,1455 @@ "type": "string" }, "receivedMessageDetails": { - "type": "string" + "type": "object", + "properties": { + "rxSource": { + "type": "string" + } + } }, "recordGeneratedAt": { "type": "string" }, "recordGeneratedBy": { - "enum": [ - "TMC", - "OBU", - "RSU", - "TMC_VIA_SAT", - "TMC_VIA_SNMP", - "UNKNOWN", - null - ], - "type": [ - "string", - "null" - ] + "$ref": "#/$defs/OdeRecordGeneratedBy" }, "recordType": { "type": "string" }, "sanitized": { - "type": "string" + "type": "boolean" }, "schemaVersion": { - "const": 7, - "type": "string" + "const": 8, + "type": "integer" }, "securityResultCode": { "type": "string" }, "serialId": { - "properties": { - "bundleId": { - "type": "string" - }, - "bundleSize": { - "type": "string" - }, - "recordId": { - "type": "string" - }, - "serialNumber": { - "type": "string" - }, - "streamId": { - "type": "string" - } - }, - "required": [ - "recordId", - "serialNumber", - "streamId", - "bundleSize", - "bundleId" - ], - "type": "object" + "$ref": "#/$defs/OdeSerialId" }, "asn1": { - "type": [ - "string", - "null" - ] + "type": "string" + }, + "request": { + "$ref": "#/$defs/MetadataRequest" } }, "required": [ - "securityResultCode", - "recordGeneratedBy", "schemaVersion", + "recordGeneratedBy", + "payloadType", "odePacketID", + "serialId", "sanitized", "recordGeneratedAt", - "recordType", "maxDurationTime", - "odeTimStartDateTime", - "receivedMessageDetails", - "payloadType", - "serialId", - "logFileName", - "odeReceivedAt", - "originIp", - "asn1" + "odeReceivedAt" + ] + }, + "MetadataRequest": { + "type": "object", + "properties": { + "ode": { + "$ref": "#/$defs/RequestOde" + }, + "sdw": { + "$ref": "#/$defs/RequestSdw" + }, + "rsus": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/RequestRsus" + } + ] + }, + "snmp": { + "$ref": "#/$defs/RequestSnmp" + } + } + }, + "RequestOde": { + "type": "object", + "properties": { + "verb": { + "type": "string" + }, + "version": { + "type": "integer" + } + }, + "required": [ + "verb", + "version" + ] + }, + "RequestSdw": { + "type": "object", + "properties": { + "serviceRegion": { + "$ref": "#/$defs/OdeGeoRegion" + }, + "ttl": { + "type": "string", + "enum": [ + "oneminute", + "thirtyminutes", + "oneday", + "oneweek", + "onemonth", + "oneyear" + ] + }, + "groupID": { + "type": "string" + }, + "deliverystart": { + "type": "string" + }, + "deliverystop": { + "type": "string" + }, + "recordId": { + "type": "string" + }, + "estimatedRemovalDate": { + "type": "string" + } + }, + "required": [ + "recordId", + "ttl", + "serviceRegion" + ] + }, + "RequestRsus": { + "type": "object", + "properties": { + "rsuTarget": { + "type": "string" + }, + "rsuUsername": { + "type": "string" + }, + "rsuPassword": { + "type": "string" + }, + "snmpProtocol": { + "type": "string" + }, + "rsuRetries": { + "type": "integer" + }, + "rsuTimeout": { + "type": "integer" + }, + "rsuIndex": { + "type": "integer" + } + }, + "required": [ + "rsuTarget", + "rsuUsername", + "rsuPassword", + "snmpProtocol", + "rsuRetries", + "rsuTimeout", + "rsuIndex" + ] + }, + "RequestSnmp": { + "type": "object", + "properties": { + "mode": { + "type": "integer" + }, + "deliverystop": { + "type": "string" + }, + "rsuid": { + "type": "string" + }, + "deliverystart": { + "type": "string" + }, + "enable": { + "type": "integer" + }, + "channel": { + "type": "integer" + }, + "msgid": { + "type": "integer" + }, + "interval": { + "type": "integer" + }, + "status": { + "type": "integer" + } + }, + "required": [ + "mode", + "deliverystart", + "deliverystop", + "rsuid", + "enable", + "channel", + "msgid", + "interval", + "status" + ] + }, + "OdeGeoRegion": { + "type": "object", + "properties": { + "nwCorner": { + "$ref": "#/$defs/OdePosition3D" + }, + "seCorner": { + "$ref": "#/$defs/OdePosition3D" + } + }, + "required": [ + "nwCorner", + "seCorner" + ] + }, + "OdeRecordGeneratedBy": { + "type": [ + "string", + "null" ], - "type": "object" + "enum": [ + "TMC", + "OBU", + "RSU", + "TMC_VIA_SAT", + "TMC_VIA_SNMP", + "UNKNOWN", + null + ] }, - "payload": { + "OdeSerialId": { + "type": "object", + "properties": { + "bundleId": { + "type": "number" + }, + "bundleSize": { + "type": "number" + }, + "recordId": { + "type": "number" + }, + "serialNumber": { + "type": "number" + }, + "streamId": { + "type": "string" + } + }, + "required": [ + "recordId", + "serialNumber", + "streamId", + "bundleSize", + "bundleId" + ] + }, + "OdeTimPayload": { + "type": "object", "properties": { "data": { - "properties": { - "MessageFrame": { + "$ref": "#/$defs/TravelerInformation" + }, + "dataType": { + "type": "string" + } + }, + "required": [ + "data", + "dataType" + ] + }, + "TravelerInformation": { + "type": "object", + "properties": { + "timeStamp": { + "type": "number" + }, + "packetID": { + "type": "string" + }, + "urlB": { + "type": "string" + }, + "dataFrames": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/TravelerDataFrame" + } + ] + }, + "msgCnt": { + "type": "number" + } + }, + "required": [ + "dataFrames", + "msgCnt" + ] + }, + "TravelerDataFrame": { + "type": "object", + "properties": { + "doNotUse1": { + "type": "number" + }, + "frameType": { + "enum": [ + "unknown", + "advisory", + "roadSignage", + "commercialSignage" + ] + }, + "msgId": { + "oneOf": [ + { + "type": "object", "properties": { - "messageId": { + "furtherInfoID": { "type": "string" - }, - "value": { - "properties": { - "TravelerInformation": { - "properties": { - "dataFrames": { - "properties": { - "TravelerDataFrame": { - "properties": { - "content": { - "properties": { - "advisory": { - "anyOf": [ - { - "properties": { - "SEQUENCE": { - "items": [ - { - "properties": { - "item": { - "properties": { - "itis": { - "type": "string" - } - }, - "required": [ - "itis" - ], - "type": "object" - } - }, - "required": [ - "item" - ], - "type": "object" - } - ], - "type": "array" - } - }, - "required": [ - "SEQUENCE" - ], - "type": "object" - }, - { - "properties": { - "SEQUENCE": { - "properties": { - "item": { - "properties": { - "itis": { - "type": "string" - } - }, - "required": [ - "itis" - ], - "type": "object" - } - }, - "required": [ - "item" - ], - "type": "object" - } - }, - "required": [ - "SEQUENCE" - ], - "type": "object" - } - ] - } - }, - "required": [ - "advisory" - ], - "type": "object" - }, - "durationTime": { - "type": "string" - }, - "frameType": { - "properties": { - "advisory": { - "type": "string" - } - }, - "required": [ - "advisory" - ], - "type": "object" - }, - "msgId": { - "properties": { - "roadSignID": { - "properties": { - "mutcdCode": { - "properties": { - "warning": { - "type": "string" - } - }, - "required": [ - "warning" - ], - "type": "object" - }, - "position": { - "properties": { - "lat": { - "type": "string" - }, - "long": { - "type": "string" - }, - "elevation": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "lat", - "long" - ], - "type": "object" - }, - "viewAngle": { - "type": "string" - } - }, - "required": [ - "viewAngle", - "mutcdCode", - "position" - ], - "type": "object" - } - }, - "required": [ - "roadSignID" - ], - "type": "object" - }, - "priority": { - "type": "string" - }, - "regions": { - "properties": { - "GeographicalPath": { - "properties": { - "anchor": { - "properties": { - "lat": { - "type": "string" - }, - "long": { - "type": "string" - }, - "elevation": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "lat", - "long" - ], - "type": [ - "object", - "null" - ] - }, - "closedPath": { - "properties": { - "true": { - "type": [ - "string", - "null" - ] - }, - "false": { - "type": [ - "string", - "null" - ] - } - }, - "type": [ - "object", - "null" - ] - }, - "description": { - "properties": { - "path": { - "properties": { - "offset": { - "properties": { - "xy": { - "properties": { - "nodes": { - "properties": { - "NodeXY": { - "items": [ - { - "properties": { - "delta": { - "properties": { - "node-LatLon": { - "properties": { - "lat": { - "type": "string" - }, - "lon": { - "type": "string" - }, - "elevation": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "lon", - "lat" - ], - "type": "object" - } - }, - "required": [ - "node-LatLon" - ], - "type": "object" - } - }, - "required": [ - "delta" - ], - "type": "object" - } - ], - "type": "array" - } - }, - "required": [ - "NodeXY" - ], - "type": "object" - } - }, - "required": [ - "nodes" - ], - "type": "object" - } - }, - "required": [ - "xy" - ], - "type": "object" - } - }, - "required": [ - "offset" - ], - "type": "object" - } - }, - "required": [ - "path" - ], - "type": [ - "object", - "null" - ] - }, - "direction": { - "type": "string" - }, - "directionality": { - "properties": { - "unavailable": { - "type": "string" - }, - "forward": { - "type": "string" - }, - "reverse": { - "type": "string" - }, - "both": { - "type": "string" - } - }, - "type": [ - "object", - "null" - ] - }, - "laneWidth": { - "type": [ - "string", - "null" - ] - } - }, - "required": [ - "direction" - ], - "type": "object" - } - }, - "required": [ - "GeographicalPath" - ], - "type": "object" - }, - "notUsed1": { - "type": "string" - }, - "notUsed2": { - "type": "string" - }, - "notUsed3": { - "type": "string" - }, - "notUsed": { - "type": "string" - }, - "startTime": { - "type": "string" - }, - "startYear": { - "type": "string" - } - }, - "required": [ - "regions", - "durationTime", - "notUsed2", - "notUsed3", - "notUsed", - "startYear", - "notUsed1", - "frameType", - "msgId", - "startTime", - "priority", - "content" - ], - "type": "object" - } - }, - "required": [ - "TravelerDataFrame" - ], - "type": "object" - }, - "msgCnt": { - "type": "string" - }, - "packetID": { - "type": "string" - } - }, - "required": [ - "packetID", - "dataFrames", - "msgCnt" - ], - "type": "object" - } - }, - "required": [ - "TravelerInformation" - ], - "type": "object" } }, "required": [ - "messageId", - "value" - ], - "type": "object" + "furtherInfoID" + ] + }, + { + "type": "object", + "properties": { + "roadSignID": { + "$ref": "#/$defs/RoadSignID" + } + }, + "required": [ + "roadSignID" + ] + } + ] + }, + "startYear": { + "type": "number" + }, + "startTime": { + "type": "number" + }, + "durationTime": { + "type": "number" + }, + "priority": { + "type": "number" + }, + "doNotUse2": { + "type": "number" + }, + "regions": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/GeographicalPath" + } + ] + }, + "doNotUse3": { + "type": "number" + }, + "doNotUse4": { + "type": "number" + }, + "content": { + "$ref": "#/$defs/ContentChoice" + }, + "url": { + "type": "string" + } + }, + "required": [ + "doNotUse1", + "frameType", + "msgId", + "startTime", + "durationTime", + "priority", + "doNotUse2", + "regions", + "doNotUse3", + "doNotUse4", + "content" + ] + }, + "RoadSignID": { + "type": "object", + "properties": { + "position": { + "$ref": "#/$defs/Position3D" + }, + "viewAngle": { + "$ref": "#/$defs/HeadingSlice" + }, + "mutcdCode": { + "enum": [ + "none", + "regulatory", + "warning", + "maintenance", + "motoristService", + "guide", + "rec" + ] + }, + "crc": { + "type": "string" + } + }, + "required": [ + "position", + "viewAngle" + ] + }, + "HeadingSlice": { + "type": "object", + "properties": { + "from000-0to022-5degrees": { + "type": "boolean" + }, + "from022-5to045-0degrees": { + "type": "boolean" + }, + "from045-0to067-5degrees": { + "type": "boolean" + }, + "from067-5to090-0degrees": { + "type": "boolean" + }, + "from090-0to112-5degrees": { + "type": "boolean" + }, + "from112-5to135-0degrees": { + "type": "boolean" + }, + "from135-0to157-5degrees": { + "type": "boolean" + }, + "from157-5to180-0degrees": { + "type": "boolean" + }, + "from180-0to202-5degrees": { + "type": "boolean" + }, + "from202-5to225-0degrees": { + "type": "boolean" + }, + "from225-0to247-5degrees": { + "type": "boolean" + }, + "from247-5to270-0degrees": { + "type": "boolean" + }, + "from270-0to292-5degrees": { + "type": "boolean" + }, + "from292-5to315-0degrees": { + "type": "boolean" + }, + "from315-0to337-5degrees": { + "type": "boolean" + }, + "from337-5to360-0degrees": { + "type": "boolean" + } + }, + "required": [ + "from000-0to022-5degrees", + "from022-5to045-0degrees", + "from045-0to067-5degrees", + "from067-5to090-0degrees", + "from090-0to112-5degrees", + "from112-5to135-0degrees", + "from135-0to157-5degrees", + "from157-5to180-0degrees", + "from180-0to202-5degrees", + "from202-5to225-0degrees", + "from225-0to247-5degrees", + "from247-5to270-0degrees", + "from270-0to292-5degrees", + "from292-5to315-0degrees", + "from315-0to337-5degrees", + "from337-5to360-0degrees" + ] + }, + "GeographicalPath": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "id": { + "$ref": "#/$defs/RoadSegmentReferenceID" + }, + "anchor": { + "$ref": "#/$defs/Position3D" + }, + "laneWidth": { + "type": "number" + }, + "directionality": { + "$ref": "#/$defs/DirectionOfUse" + }, + "closedPath": { + "type": "boolean" + }, + "direction": { + "$ref": "#/$defs/HeadingSlice" + }, + "description": { + "$ref": "#/$defs/DescriptionChoice" + } + }, + "required": [ + "description" + ] + }, + "DirectionOfUse": { + "enum": [ + "unavailable", + "forward", + "reverse", + "both" + ] + }, + "DescriptionChoice": { + "oneOf": [ + { + "type": "object", + "properties": { + "path": { + "$ref": "#/$defs/OffsetSystem" } }, "required": [ - "MessageFrame" - ], - "type": "object" + "path" + ] }, - "dataType": { - "type": "string" + { + "type": "object", + "properties": { + "geometry": { + "$ref": "#/$defs/GeometricProjection" + } + }, + "required": [ + "geometry" + ] + }, + { + "type": "object", + "properties": { + "oldRegion": { + "$ref": "#/$defs/ValidRegion" + } + }, + "required": [ + "oldRegion" + ] + } + ] + }, + "OffsetSystem": { + "type": "object", + "properties": { + "scale": { + "type": "number" + }, + "offset": { + "$ref": "#/$defs/OffsetChoice" } }, "required": [ - "data", - "dataType" - ], - "type": "object" - } - }, - "required": [ - "metadata", - "payload" - ], - "type": "object" -} \ No newline at end of file + "offset" + ] + }, + "OffsetChoice": { + "oneOf": [ + { + "type": "object", + "properties": { + "xy": { + "$ref": "#/$defs/NodeListXY" + } + }, + "required": [ + "xy" + ] + }, + { + "type": "object", + "properties": { + "ll": { + "$ref": "#/$defs/NodeListLL" + } + }, + "required": [ + "ll" + ] + } + ] + }, + "NodeListXY": { + "oneOf": [ + { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/NodeXY" + } + ] + } + }, + "required": [ + "nodes" + ] + }, + { + "type": "object", + "properties": { + "computed": { + "$ref": "#/$defs/ComputedLane" + } + }, + "required": [ + "computed" + ] + } + ] + }, + "NodeListLL": { + "type": "object", + "properties": { + "nodes": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/NodeLL" + } + ] + } + }, + "required": [ + "nodes" + ] + }, + "NodeXY": { + "type": "object", + "properties": { + "delta": { + "$ref": "#/$defs/NodeOffsetPointXY" + }, + "attributes": { + "$ref": "#/$defs/NodeAttributeSet" + } + }, + "required": [ + "delta" + ] + }, + "NodeOffsetPointXY": { + "oneOf": [ + { + "type": "object", + "properties": { + "node-XY1": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "node-XY1" + ] + }, + { + "type": "object", + "properties": { + "node-XY2": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "node-XY2" + ] + }, + { + "type": "object", + "properties": { + "node-XY3": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "node-XY3" + ] + }, + { + "type": "object", + "properties": { + "node-XY4": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "node-XY4" + ] + }, + { + "type": "object", + "properties": { + "node-XY5": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "node-XY5" + ] + }, + { + "type": "object", + "properties": { + "node-XY6": { + "$ref": "#/$defs/NodeXYPoint" + } + }, + "required": [ + "node-XY6" + ] + }, + { + "type": "object", + "properties": { + "node-LatLon": { + "$ref": "#/$defs/NodeLLmD" + } + }, + "required": [ + "node-LatLon" + ] + } + ] + }, + "NodeAttributeSet": { + "type": "object", + "properties": { + "localNode": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/NodeAttributeXY" + } + ] + }, + "disabled": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/SegmentAttributeXY" + } + ] + }, + "enabled": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/SegmentAttributeXY" + } + ] + }, + "data": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/LaneDataAttribute" + } + ] + }, + "dWidth": { + "type": "number" + }, + "dElevation": { + "type": "number" + } + } + }, + "NodeAttributeXY": { + "enum": [ + "reserved", + "stopLine", + "roundedCapStyleA", + "roundedCapStyleB", + "mergePoint", + "divergePoint", + "downstreamStopLine", + "downstreamStartNode", + "closedToTraffic", + "safeIsland", + "curbPresentAtStepOff", + "hydrantPresent" + ] + }, + "SegmentAttributeXY": { + "enum": [ + "reserved", + "doNotBlock", + "whiteLine", + "mergingLaneLeft", + "mergingLaneRight", + "curbOnLeft", + "curbOnRight", + "loadingzoneOnLeft", + "loadingzoneOnRight", + "turnOutPointOnLeft", + "turnOutPointOnRight", + "adjacentParkingOnLeft", + "adjacentParkingOnRight", + "adjacentBikeLaneOnLeft", + "adjacentBikeLaneOnRight", + "sharedBikeLane", + "bikeBoxInFront", + "transitStopOnLeft", + "transitStopOnRight", + "transitStopInLane", + "sharedWithTrackedVehicle", + "safeIsland", + "lowCurbsPresent", + "rumbleStripPresent", + "audibleSignalingPresent", + "adaptiveTimingPresent", + "rfSignalRequestPresent", + "partialCurbIntrusion", + "taperToLeft", + "taperToRight", + "taperToCenterLine", + "parallelParking", + "headInParking", + "freeParking", + "timeRestrictionsOnParking", + "costToPark", + "midBlockCurbPresent", + "unEvenPavementPresent" + ] + }, + "LaneDataAttribute": { + "type": "object", + "properties": { + "pathEndPointAngle": { + "type": "number" + }, + "laneCrownPointCenter": { + "type": "number" + }, + "laneCrownPointLeft": { + "type": "number" + }, + "laneCrownPointRight": { + "type": "number" + }, + "laneAngle": { + "type": "number" + }, + "speedLimits": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/RegulatorySpeedLimit" + } + ] + } + }, + "required": [ + "pathEndPointAngle", + "laneCrownPointCenter", + "laneCrownPointLeft", + "laneCrownPointRight", + "laneAngle", + "speedLimits" + ] + }, + "RegulatorySpeedLimit": { + "type": "object", + "properties": { + "type": { + "enum": [ + "unknown", + "maxSpeedInSchoolZone", + "maxSpeedInSchoolZoneWhenChildrenArePresent", + "maxSpeedInConstructionZone", + "vehicleMinSpeed", + "vehicleMaxSpeed", + "vehicleNightMaxSpeed", + "truckMinSpeed", + "truckMaxSpeed", + "truckNightMaxSpeed", + "vehiclesWithTrailersMinSpeed", + "vehiclesWithTrailersMaxSpeed", + "vehiclesWithTrailersNightMaxSpeed" + ] + }, + "speed": { + "type": "number" + } + }, + "required": [ + "type", + "speed" + ] + }, + "NodeLL": { + "type": "object", + "properties": { + "delta": { + "$ref": "#/$defs/NodeOffsetPointLL" + }, + "attributes": { + "$ref": "#/$defs/NodeAttributeSet" + } + }, + "required": [ + "delta" + ] + }, + "NodeOffsetPointLL": { + "oneOf": [ + { + "type": "object", + "properties": { + "node-LL1": { + "$ref": "#/$defs/NodeLLmD" + } + }, + "required": [ + "node-LL1" + ] + }, + { + "type": "object", + "properties": { + "node-LL2": { + "$ref": "#/$defs/NodeLLmD" + } + }, + "required": [ + "node-LL2" + ] + }, + { + "type": "object", + "properties": { + "node-LL3": { + "$ref": "#/$defs/NodeLLmD" + } + }, + "required": [ + "node-LL3" + ] + }, + { + "type": "object", + "properties": { + "node-LL4": { + "$ref": "#/$defs/NodeLLmD" + } + }, + "required": [ + "node-LL4" + ] + }, + { + "type": "object", + "properties": { + "node-LL5": { + "$ref": "#/$defs/NodeLLmD" + } + }, + "required": [ + "node-LL5" + ] + }, + { + "type": "object", + "properties": { + "node-LL6": { + "$ref": "#/$defs/NodeLLmD" + } + }, + "required": [ + "node-LL6" + ] + }, + { + "type": "object", + "properties": { + "node-LatLon": { + "$ref": "#/$defs/NodeLLmD" + } + }, + "required": [ + "node-LatLon" + ] + } + ] + }, + "NodeXYPoint": { + "type": "object", + "properties": { + "x": { + "type": "number" + }, + "y": { + "type": "number" + } + }, + "required": [ + "x", + "y" + ] + }, + "NodeLLmD": { + "type": "object", + "properties": { + "lat": { + "type": "number" + }, + "lon": { + "type": "number" + } + }, + "required": [ + "lon", + "lat" + ] + }, + "ComputedLane": { + "type": "object", + "properties": { + "referenceLaneId": { + "type": "number" + }, + "offsetXaxis": { + "$ref": "#/$defs/OffsetXaxisChoice" + }, + "offsetYaxis": { + "$ref": "#/$defs/OffsetYaxisChoice" + }, + "rotateXY": { + "type": "number" + }, + "scaleXaxis": { + "type": "number" + }, + "scaleYaxis": { + "type": "number" + } + }, + "required": [ + "referenceLaneId", + "offsetXaxis", + "offsetYaxis" + ] + }, + "OffsetXaxisChoice": { + "oneOf": [ + { + "type": "object", + "properties": { + "small": { + "type": "number" + } + }, + "required": [ + "small" + ] + }, + { + "type": "object", + "properties": { + "large": { + "type": "number" + } + }, + "required": [ + "large" + ] + } + ] + }, + "OffsetYaxisChoice": { + "oneOf": [ + { + "type": "object", + "properties": { + "small": { + "type": "number" + } + }, + "required": [ + "small" + ] + }, + { + "type": "object", + "properties": { + "large": { + "type": "number" + } + }, + "required": [ + "large" + ] + } + ] + }, + "GeometricProjection": { + "type": "object", + "properties": { + "direction": { + "$ref": "#/$defs/HeadingSlice" + }, + "extent": { + "$ref": "#/$defs/Extent" + }, + "laneWidth": { + "type": "number" + }, + "circle": { + "$ref": "#/$defs/Circle" + } + }, + "required": [ + "direction", + "circle" + ] + }, + "Circle": { + "type": "object", + "properties": { + "center": { + "$ref": "#/$defs/Position3D" + }, + "radius": { + "type": "number" + }, + "units": { + "$ref": "#/$defs/DistanceUnits" + } + }, + "required": [ + "center", + "radius", + "units" + ] + }, + "ValidRegion": { + "type": "object", + "properties": { + "direction": { + "$ref": "#/$defs/HeadingSlice" + }, + "extent": { + "$ref": "#/$defs/Extent" + }, + "area": { + "$ref": "#/$defs/AreaChoice" + } + }, + "required": [ + "direction", + "extent", + "area" + ] + }, + "Extent": { + "enum": [ + "useInstantlyOnly", + "useFor3meters", + "useFor10meters", + "useFor50meters", + "useFor100meters", + "useFor500meters", + "useFor1000meters", + "useFor5000meters", + "useFor10000meters", + "useFor50000meters", + "useFor100000meters", + "useFor500000meters", + "useFor1000000meters", + "useFor5000000meters", + "useFor10000000meters", + "forever" + ] + }, + "AreaChoice": { + "oneOf": [ + { + "type": "object", + "properties": { + "shapePointSet": { + "$ref": "#/$defs/ShapePointSet" + } + }, + "required": [ + "shapePointSet" + ] + }, + { + "type": "object", + "properties": { + "circle": { + "$ref": "#/$defs/Circle" + } + }, + "required": [ + "circle" + ] + }, + { + "type": "object", + "properties": { + "regionPointSet": { + "$ref": "#/$defs/RegionPointSet" + } + }, + "required": [ + "regionPointSet" + ] + } + ] + }, + "ShapePointSet": { + "type": "object", + "properties": { + "anchor": { + "$ref": "#/$defs/Position3D" + }, + "laneWidth": { + "type": "number" + }, + "directionality": { + "$ref": "#/$defs/DirectionOfUse" + }, + "nodeList": { + "$ref": "#/$defs/NodeListXY" + } + }, + "required": [ + "nodeList" + ] + }, + "RegionPointSet": { + "type": "object", + "properties": { + "anchor": { + "$ref": "#/$defs/Position3D" + }, + "scale": { + "type": "number" + }, + "nodeList": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/RegionList" + } + ] + } + }, + "required": [ + "nodeList" + ] + }, + "RegionList": { + "type": "object", + "properties": { + "xOffset": { + "type": "number" + }, + "yOffset": { + "type": "number" + }, + "zOffset": { + "type": "number" + } + }, + "required": [ + "xOffset", + "yOffset" + ] + }, + "ContentChoice": { + "oneOf": [ + { + "type": "object", + "properties": { + "advisory": { + "$ref": "#/$defs/ContentSequence" + } + }, + "required": [ + "advisory" + ] + }, + { + "type": "object", + "properties": { + "workZone": { + "$ref": "#/$defs/ContentSequence" + } + }, + "required": [ + "workZone" + ] + }, + { + "type": "object", + "properties": { + "genericSign": { + "$ref": "#/$defs/ContentSequence" + } + }, + "required": [ + "genericSign" + ] + }, + { + "type": "object", + "properties": { + "speedLimit": { + "$ref": "#/$defs/ContentSequence" + } + }, + "required": [ + "speedLimit" + ] + }, + { + "type": "object", + "properties": { + "exitService": { + "$ref": "#/$defs/ContentSequence" + } + }, + "required": [ + "exitService" + ] + } + ] + }, + "ContentSequence": { + "type": "array", + "prefixItems": [ + { + "$ref": "#/$defs/ContentSequenceItem" + } + ] + }, + "ContentSequenceItem": { + "type": "object", + "properties": { + "item": { + "type": "object", + "properties": { + "itis": { + "type": [ + "string", + "number" + ] + } + }, + "required": [ + "itis" + ] + } + }, + "required": [ + "item" + ] + }, + "Position3D": { + "type": "object", + "properties": { + "lat": { + "type": "number" + }, + "long": { + "type": "number" + }, + "elevation": { + "type": "number" + } + }, + "required": [ + "lat", + "long" + ] + }, + "OdePosition3D": { + "type": "object", + "properties": { + "latitude": { + "type": "number" + }, + "longitude": { + "type": "number" + }, + "elevation": { + "type": "number" + } + }, + "required": [ + "latitude", + "longitude" + ] + }, + "RoadSegmentReferenceID": { + "type": "object", + "properties": { + "id": { + "type": "number" + }, + "region": { + "type": "number" + } + }, + "required": [ + "id" + ] + }, + "DistanceUnits": { + "enum": [ + "centimeter", + "cm2-5", + "decimeter", + "meter", + "kilometer", + "foot", + "yard", + "mile" + ] + } + } +} diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/context/AppContextTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/context/AppContextTest.java new file mode 100644 index 000000000..666acde6f --- /dev/null +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/context/AppContextTest.java @@ -0,0 +1,22 @@ +package us.dot.its.jpo.ode.context; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class AppContextTest { + + @Test + void getInstance() { + assertNotNull(AppContext.getInstance()); + } + + @Test + void getHostId() { + // The hostID is specific to the machine running the test, so it will be different for each machine. + // Therefore, we can only consistently check that it is not null and not an empty string. + String hostID = AppContext.getInstance().getHostId(); + assertNotNull(hostID); + assertNotEquals("", hostID); + } +} \ No newline at end of file diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java index 1f586581b..6bff0e2ff 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeBsmDataTest.java @@ -17,7 +17,7 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdeBsmDataTest { - private static final String SCHEMA_VERSION = "7"; + private static final String SCHEMA_VERSION = "8"; private static final String ASN1_STRING = "0022e12d18466c65c1493800000e00e4616183e85a8f0100c000038081bc001480b8494c4c950cd8cde6e9651116579f22a424dd78fffff00761e4fd7eb7d07f7fff80005f11d1020214c1c0ffc7c016aff4017a0ff65403b0fd204c20ffccc04f8fe40c420ffe6404cefe60e9a10133408fcfde1438103ab4138f00e1eec1048ec160103e237410445c171104e26bc103dc4154305c2c84103b1c1c8f0a82f42103f34262d1123198103dac25fb12034ce10381c259f12038ca103574251b10e3b2210324c23ad0f23d8efffe0000209340d10000004264bf00"; private static final String bsmTxJson = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"\",\"longitude\":\"\",\"elevation\":\"\",\"speed\":\"\",\"heading\":\"\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeBsmPayload\",\"serialId\":{\"streamId\":\"504becf3-8e20-49cb-a2d7-25b646c34d0f\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-06-17T19:14:21.223956Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"10.11.81.12\",\"asn1\":\"%s\"},\"payload\":{\"data\":{\"coreData\":{\"msgCnt\":46,\"id\":\"E6A99808\",\"secMark\":21061,\"position\":{\"latitude\":39.5881304,\"longitude\":-105.0910403,\"elevation\":1692.0},\"accelSet\":{\"accelLong\":-0.07,\"accelYaw\":-0.09},\"accuracy\":{\"semiMajor\":2.0,\"semiMinor\":2.0,\"orientation\":44.49530799},\"transmission\":\"UNAVAILABLE\",\"speed\":22.62,\"heading\":169.3,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"off\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":180,\"length\":480}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.8,\"latOffset\":-0.0001802,\"lonOffset\":0.0000434,\"timeOffset\":0.89},{\"elevationOffset\":4.5,\"latOffset\":-0.0011801,\"lonOffset\":0.0002357,\"timeOffset\":5.7},{\"elevationOffset\":9.3,\"latOffset\":-0.0023623,\"lonOffset\":0.0003881,\"timeOffset\":11.1}]},\"pathPrediction\":{\"confidence\":70.0,\"radiusOfCurve\":0.0}}}]},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735Bsm\"}}", SCHEMA_VERSION, ASN1_STRING); diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeMapDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeMapDataTest.java index eda1eabf9..f9155580a 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeMapDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeMapDataTest.java @@ -13,7 +13,7 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdeMapDataTest { - private static final String SCHEMA_VERSION = "7"; + private static final String SCHEMA_VERSION = "8"; private static final String ASN1_STRING = "001283c138003000205e9c014d3eab092ca624b5518202dc3658042800000400023622c60ca009f66d48abfaf81388d8ad18070027d9b2ffcfe9804f13667b1ffd009ec2c76e3ffc82c4e0001004b00c5000000800066c4574101813ecd8b757fae027d9b30e6ff5604ec363561fe7809ec6cd69bfec813c4d8a617fc9027d9b2147008604fb163666000016250000802580228000001000096229e1309b51a6fe4204dd361cf1fe5009f6018e1000096020a00000080004d88a57f84027d9b3827002804ec36087600a009f62c289407282c310001c0440188800000006c46dbe02813ec5816d800710052200000001b11b6fad404fb16054a0000401c8800000006c47b3d24813ec5816d801b100c4200000000af890f12c580007e87100d4200000008af4c0f12c580077e7a2c0004000160002001cb028d000000800052c160bc40b5fffd8a9409d86bfebb5b40141457fef53b76c008b467014145800080002bffcbffc82c6a0001804b024d000000800036c2213c3b013ecd80096d64027d9affd8cdfc04f635ff7983bc09f66c0082aa2014280b1b80006012c0b3400000100004b02bcf0f6d7fe065d602788b0138eb900b1240001012c083400000080009b0c2af0b804fb15fe6de171afff6c63e04ec15fe1de670060e40002581ea8000004000135da6df0180a0a6adc2c00d0143cd51897fda028c8abb25001a0b0680008012c105400000200009aedbefae005053540ee003c0a326a9cf3fed8143c5667780010582c0004009608aa00000080004d76de7ee402829aba88ffdc050f354525fff80a322bcf23fa602c690000c04b0395000000200016bb4fbd4e01414d3215800802940ab108fff2030d2000110126200000001aee5103be050a15f6f1ffc8404d8800000006bb97c18e0142857dfa800010146200000001aee89099a050a15f8720000b05dd000000800046be3743b781428d80e1b00002879b00514b4404f63600827d8c09e22c000400015ffe6007016190000402582ce8000004000135ecee1de80a146c02e54758143cd8059ad3e027b1b00613dd004f102c360000804b055d000000200046bcc7c3c781428d80108c6e02829b002b2ece050a16019a4b29b00ab5c3604f136004e410409ec018a10000960c3a00000080004d7de9878602851b003923cc05053601623b440a0a6bfb8c3a5014140b0640005012c197400000100005afe570ef2050a36003a47c80a0a6bfd2c45f014140b054000501101a8200000001b05a90edc050535ffe605800a0a101b8200000001b08a30ec0050535ffe605300a0a101c8200000005b0c6f0ea4050515ffca0568b0001000e"; final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"mapTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMapPayload\",\"serialId\":{\"streamId\":\"18d7c2e0-9158-4456-916d-5cd4b080d290\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-06-17T19:02:13.083984Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"mapSource\":\"RSU\",\"originIp\":\"10.11.81.25\",\"asn1\":\"%s\"},\"payload\":{\"data\":{\"timeStamp\":null,\"msgIssueRevision\":2,\"layerType\":\"intersectionData\",\"layerID\":0,\"intersections\":null,\"roadSegments\":null,\"dataParameters\":null,\"restrictionList\":null},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735MAP\"}}",SCHEMA_VERSION,ASN1_STRING); diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdePsmDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdePsmDataTest.java index 6dd122d4d..d7662c7d9 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdePsmDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdePsmDataTest.java @@ -1,49 +1,59 @@ package us.dot.its.jpo.ode.model; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import com.fasterxml.jackson.databind.JsonNode; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; import com.networknt.schema.SpecVersion; import com.networknt.schema.ValidationMessage; +import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.util.Set; - import org.junit.Test; -import static org.junit.Assert.*; - import us.dot.its.jpo.ode.util.JsonUtils; +/** + * Unit test class for OdePsmData. + */ public class OdePsmDataTest { - private static final String SCHEMA_VERSION = "7"; - private static final String ASN1_STRING = "011d0000201a0000021bd86891de75f84da101c13f042e2214141fff00022c2000270000000163b2cc7986010000"; - - final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"maxDurationTime\":0,\"odePacketID\":\"\",\"odeReceivedAt\":\"2023-09-21T15:30:14.926500Z\",\"odeTimStartDateTime\":\"\",\"originIp\":\"192.168.16.1\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdePsmPayload\",\"psmSource\":\"RSU\",\"receivedMessageDetails\":{\"rxSource\":\"NA\"},\"recordGeneratedAt\":\"\",\"recordType\":\"psmTx\",\"sanitized\":false,\"schemaVersion\":%s,\"securityResultCode\":\"success\",\"serialId\":{\"bundleId\":0,\"bundleSize\":1,\"recordId\":0,\"serialNumber\":0,\"streamId\":\"06cc1c17-e331-4806-a8ee-456b98c6517b\"},\"asn1\":\"%s\"},\"payload\":{\"data\":{\"accuracy\":{\"orientation\":44.9951935489,\"semiMajor\":1.0,\"semiMinor\":1.0},\"basicType\":\"aPEDESTRIAN\",\"heading\":8898,\"id\":\"24779D7E\",\"msgCnt\":26,\"position\":{\"latitude\":40.2397377,\"longitude\":-74.2761437},\"secMark\":3564,\"speed\":0},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735PSM\"}}", SCHEMA_VERSION, ASN1_STRING); - - @Test - public void shouldDeserializeJson() { - final var deserialized = (OdePsmData)JsonUtils.fromJson(json, OdePsmData.class); - assertNotNull(deserialized); - assertTrue(deserialized.getMetadata() instanceof OdePsmMetadata); - assertTrue(deserialized.getPayload() instanceof OdePsmPayload); - - } - - @Test - public void serializationShouldNotAddClassProperty() { - final var deserialized = (OdePsmData)JsonUtils.fromJson(json, OdePsmData.class); - final String serialized = deserialized.toJson(false); - assertFalse(serialized.contains("@class")); - } - - @Test - public void shouldValidateJson() throws Exception { - final var deserialized = (OdePsmData)JsonUtils.fromJson(json, OdePsmData.class); - final String serialized = deserialized.toJson(false); - - // Load json schema from resource - JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4); - final JsonSchema schema = factory.getSchema(getClass().getClassLoader().getResource("schemas/schema-psm.json").toURI()); - final JsonNode node = (JsonNode)JsonUtils.fromJson(serialized, JsonNode.class); - Set validationMessages = schema.validate(node); - assertEquals(String.format("Json validation errors: %s", validationMessages), 0, validationMessages.size()); - } + private String loadTestJson() throws IOException { + return new String(getClass().getClassLoader() + .getResourceAsStream("json/sample-psm.json") + .readAllBytes(), StandardCharsets.UTF_8); + } + + @Test + public void shouldDeserializeJson() throws IOException { + final var deserialized = (OdePsmData) JsonUtils.fromJson(loadTestJson(), OdePsmData.class); + assertNotNull(deserialized); + assertTrue(deserialized.getMetadata() instanceof OdePsmMetadata); + assertTrue(deserialized.getPayload() instanceof OdePsmPayload); + + } + + @Test + public void serializationShouldNotAddClassProperty() throws IOException { + final var deserialized = (OdePsmData) JsonUtils.fromJson(loadTestJson(), OdePsmData.class); + final String serialized = deserialized.toJson(false); + assertFalse(serialized.contains("@class")); + } + + @Test + public void shouldValidateJson() throws Exception { + final var deserialized = (OdePsmData) JsonUtils.fromJson(loadTestJson(), OdePsmData.class); + final String serialized = deserialized.toJson(false); + + // Load json schema from resource + JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4); + final JsonSchema schema = + factory.getSchema(getClass().getClassLoader().getResource("schemas/schema-psm.json").toURI()); + final JsonNode node = (JsonNode) JsonUtils.fromJson(serialized, JsonNode.class); + Set validationMessages = schema.validate(node); + assertEquals(String.format("Json validation errors: %s", validationMessages), 0, validationMessages.size()); + } + } diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSpatDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSpatDataTest.java index 23e8bdff3..0de3c7881 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSpatDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSpatDataTest.java @@ -13,7 +13,7 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdeSpatDataTest { - private static final String SCHEMA_VERSION = "7"; + private static final String SCHEMA_VERSION = "8"; private static final String ASN1_STRING = "001338000817a780000089680500204642b342b34802021a15a955a940181190acd0acd20100868555c555c00104342aae2aae002821a155715570"; final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"spatTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSpatPayload\",\"serialId\":{\"streamId\":\"ed008249-0a8d-47f2-a526-ffd8c30b9810\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-12-24T01:49:54.160478Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"spatSource\":\"V2X\",\"originIp\":\"172.18.0.1\",\"isCertPresent\":false,\"asn1\":\"%s\"},\"payload\":{\"data\":{\"intersectionStateList\":{\"intersectionStatelist\":[{\"id\":{\"id\":12111},\"revision\":0,\"status\":{\"failureFlash\":false,\"noValidSPATisAvailableAtThisTime\":false,\"fixedTimeOperation\":false,\"standbyOperation\":false,\"trafficDependentOperation\":false,\"manualControlIsEnabled\":false,\"off\":false,\"stopTimeIsActivated\":false,\"recentChangeInMAPassignedLanesIDsUsed\":false,\"recentMAPmessageUpdate\":false,\"failureMode\":false,\"noValidMAPisAvailableAtThisTime\":false,\"signalPriorityIsActive\":false,\"preemptIsActive\":false},\"timeStamp\":35176,\"states\":{\"movementList\":[{\"signalGroup\":2,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"PROTECTED_MOVEMENT_ALLOWED\",\"timing\":{\"minEndTime\":22120,\"maxEndTime\":22121}}]}},{\"signalGroup\":4,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":22181,\"maxEndTime\":22181}}]}},{\"signalGroup\":6,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"PROTECTED_MOVEMENT_ALLOWED\",\"timing\":{\"minEndTime\":22120,\"maxEndTime\":22121}}]}},{\"signalGroup\":8,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":21852,\"maxEndTime\":21852}}]}},{\"signalGroup\":1,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":21852,\"maxEndTime\":21852}}]}},{\"signalGroup\":5,\"state_time_speed\":{\"movementEventList\":[{\"eventState\":\"STOP_AND_REMAIN\",\"timing\":{\"minEndTime\":21852,\"maxEndTime\":21852}}]}}]}}]}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SPAT\"}}", SCHEMA_VERSION, ASN1_STRING); diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSrmDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSrmDataTest.java index f86706f81..704d9c3e6 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSrmDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSrmDataTest.java @@ -13,7 +13,7 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdeSrmDataTest { - private static final String SCHEMA_VERSION = "7"; + private static final String SCHEMA_VERSION = "8"; private static final String ASN1_STRING = "001d2130000010090bd341080d00855c6c0c6899853000a534f7c24cb29897694759b7c0"; final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"srmTx\",\"securityResultCode\":null,\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSrmPayload\",\"serialId\":{\"streamId\":\"c3ff825f-ed1f-4411-a12e-1ba889f56483\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-12-13T18:58:53.541816Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"172.21.0.1\",\"srmSource\":\"RSU\",\"asn1\":\"%s\"},\"payload\":{\"data\":{\"timeStamp\":null,\"second\":0,\"sequenceNumber\":1,\"requests\":{\"signalRequestPackage\":[{\"request\":{\"id\":{\"region\":null,\"id\":12109},\"requestID\":4,\"requestType\":\"priorityRequest\",\"inBoundLane\":{\"lane\":13,\"approach\":null,\"connection\":null},\"outBoundLane\":{\"lane\":4,\"approach\":null,\"connection\":null}},\"minute\":null,\"second\":null,\"duration\":10979}]},\"requestor\":{\"id\":{\"entityID\":null,\"stationID\":2366845094},\"type\":{\"role\":\"publicTransport\",\"subrole\":null,\"request\":null,\"iso3883\":null,\"hpmsType\":null},\"position\":{\"position\":{\"latitude\":39.5904915,\"longitude\":-105.0913829,\"elevation\":1685.4},\"heading\":175.9000,\"speed\":null},\"name\":null,\"routeName\":null,\"transitStatus\":null,\"transitOccupancy\":null,\"transitSchedule\":null}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SRM\"}}", SCHEMA_VERSION, ASN1_STRING); diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSsmDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSsmDataTest.java index cd163307e..04417ce15 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSsmDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeSsmDataTest.java @@ -13,7 +13,7 @@ import us.dot.its.jpo.ode.util.JsonUtils; public class OdeSsmDataTest { - private static final String SCHEMA_VERSION = "7"; + private static final String SCHEMA_VERSION = "8"; private static final String ASN1_STRING = "001e120000000005e9c04071a26614c06000040ba0"; final String json = String.format("{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"ssmTx\",\"securityResultCode\":null,\"receivedMessageDetails\":{\"locationData\":null,\"rxSource\":\"NA\"},\"encodings\":null,\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSsmPayload\",\"serialId\":{\"streamId\":\"b9801eb3-66fb-4d36-ae08-3e8f2bcb2026\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2022-12-13T19:00:42.326229Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":null,\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"originIp\":\"172.21.0.1\",\"ssmSource\":\"RSU\",\"asn1\":\"%s\"},\"payload\":{\"data\":{\"timeStamp\":null,\"second\":0,\"sequenceNumber\":null,\"status\":{\"signalStatus\":[{\"sequenceNumber\":0,\"id\":{\"region\":null,\"id\":12110},\"sigStatus\":{\"signalStatusPackage\":[{\"requester\":{\"id\":{\"entityID\":null,\"stationID\":2366845094},\"request\":3,\"sequenceNumber\":0,\"role\":null,\"typeData\":{\"role\":\"publicTransport\",\"subrole\":null,\"request\":null,\"iso3883\":null,\"hpmsType\":null}},\"inboundOn\":{\"lane\":23,\"approach\":null,\"connection\":null},\"outboundOn\":null,\"minute\":null,\"second\":null,\"duration\":null,\"status\":\"granted\"}]}}]}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SSM\"}}", SCHEMA_VERSION, ASN1_STRING); diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java index 73832b293..176d93f89 100644 --- a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTimDataTest.java @@ -1,36 +1,40 @@ package us.dot.its.jpo.ode.model; +import static org.junit.Assert.assertEquals; + import com.fasterxml.jackson.databind.JsonNode; import com.networknt.schema.JsonSchema; import com.networknt.schema.JsonSchemaFactory; import com.networknt.schema.SpecVersion; import com.networknt.schema.ValidationMessage; - -import us.dot.its.jpo.ode.util.JsonUtils; - +import java.io.File; +import java.nio.file.Files; import java.util.Set; - import org.junit.jupiter.api.Test; +import us.dot.its.jpo.ode.util.JsonUtils; -import static org.junit.Assert.*; - +/** + * Tests for verifying the TIM schema is functional with the TIM JSON output. + */ public class OdeTimDataTest { - private static final String SCHEMA_VERSION = "7"; - private static final String ASN1_STRING = "005f498718cca69ec1a04600000100105d9b46ec5be401003a0103810040038081d4001f80d07016da410000000000000bbc2b0f775d9b0309c271431fa166ee0a27fff93f136b8205a0a107fb2ef979f4c5bfaeec97e4ad70c2fb36cd9730becdb355cc2fd2a7556b160b98b46ab98ae62c185fa55efb468d5b4000000004e2863f42cddc144ff7980040401262cdd7b809c509f5c62cdd35519c507b9062cdcee129c505cf262cdca5ff9c50432c62cdc5d3d9c502e3e62cdc13e79c501e9262cdbca2d9c5013ee62cdb80359c500e6a62cdb36299c500bc862cdaec1d9c50093c62cdaa2109c5006ea1080203091a859eeebb36006001830001aad27f4ff7580001aad355e39b5880a30029d6585009ef808332d8d9f80c3855151b38c772f765007967ec1170bcb7937f5cb880a25a52863493bcb87570dbcb5abc6bfb2faec606cfa34eb95a24790b2017366d3aabe7729e"; - - private static final String json = String.format("{\"metadata\":{\"securityResultCode\":\"\",\"recordGeneratedBy\":\"RSU\",\"schemaVersion\":\"%s\",\"odePacketID\":\"\",\"sanitized\":\"false\",\"asn1\":\"%s\",\"recordType\":\"timMsg\",\"recordGeneratedAt\":\"\",\"maxDurationTime\":\"0\",\"odeTimStartDateTime\":\"\",\"receivedMessageDetails\":\"\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"serialId\":{\"recordId\":\"0\",\"serialNumber\":\"0\",\"streamId\":\"11ad5323-ec81-4694-8cd0-eb88ca08728e\",\"bundleSize\":\"1\",\"bundleId\":\"0\"},\"logFileName\":\"\",\"odeReceivedAt\":\"2022-12-24T02:24:38.248417Z\",\"originIp\":\"172.18.0.1\"},\"payload\":{\"data\":{\"MessageFrame\":{\"messageId\":\"31\",\"value\":{\"TravelerInformation\":{\"timeStamp\":\"449089\",\"packetID\":\"0000000000000BBC2B\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":{\"regions\":{\"GeographicalPath\":{\"closedPath\":{\"false\":\"\"},\"anchor\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"},\"name\":\"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456\",\"laneWidth\":\"32700\",\"directionality\":{\"both\":\"\"},\"description\":{\"path\":{\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047287423\",\"lat\":\"411264686\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047305390\",\"lat\":\"411260104\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047323629\",\"lat\":\"411256185\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047342080\",\"lat\":\"411252886\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047360706\",\"lat\":\"411250207\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047379480\",\"lat\":\"411248201\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047398354\",\"lat\":\"411246839\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047417290\",\"lat\":\"411246133\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047436246\",\"lat\":\"411245796\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047455202\",\"lat\":\"411245470\"}}},{\"delta\":{\"node-LatLon\":{\"lon\":\"-1047474159\",\"lat\":\"411245173\"}}}]}}},\"scale\":\"0\"}},\"id\":{\"id\":\"0\",\"region\":\"0\"},\"direction\":\"0000000000010000\"}},\"durationTime\":\"1440\",\"notUsed2\":\"0\",\"notUsed3\":\"0\",\"startYear\":\"2018\",\"msgId\":{\"roadSignID\":{\"viewAngle\":\"1111111111111111\",\"mutcdCode\":{\"warning\":\"\"},\"position\":{\"lat\":\"411269876\",\"long\":\"-1047269563\"}}},\"priority\":\"5\",\"content\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":\"777\"}},{\"item\":{\"itis\":\"13579\"}}]}},\"url\":\"null\",\"notUsed\":\"0\",\"notUsed1\":\"0\",\"frameType\":{\"advisory\":\"\"},\"startTime\":\"448260\"}},\"msgCnt\":\"1\"}}}},\"dataType\":\"TravelerInformation\"}}", SCHEMA_VERSION, ASN1_STRING); - - // - // Note that OdeTimData does not have annotations to support deserialization, so serialization/deserialization is not tested here. - // - - @Test - public void shouldValidateJson() throws Exception { - // Load json schema from resource - JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V4); - final JsonSchema schema = factory.getSchema(getClass().getClassLoader().getResource("schemas/schema-tim.json").toURI()); - final JsonNode node = (JsonNode)JsonUtils.fromJson(json, JsonNode.class); - Set validationMessages = schema.validate(node); - assertEquals(String.format("Json validation errors: %s", validationMessages), 0, validationMessages.size()); - } + @Test + public void shouldValidateJson() throws Exception { + // Load test JSON + String jsonFilePath = + "src/test/resources/CVMessages/TIM_test.json"; + File jsonFile = new File(jsonFilePath); + byte[] jsonData = Files.readAllBytes(jsonFile.toPath()); + String json = new String(jsonData); + + // Load JSON schema from resource + JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V202012); + final JsonSchema schema = factory + .getSchema(getClass().getClassLoader().getResource("schemas/schema-tim.json").toURI()); + final JsonNode node = (JsonNode) JsonUtils.fromJson(json, JsonNode.class); + Set validationMessages = schema.validate(node); + assertEquals( + String.format("Json validation errors: %s", validationMessages), + 0, + validationMessages.size()); + } } diff --git a/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTravelerInputDataTest.java b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTravelerInputDataTest.java new file mode 100644 index 000000000..d386cd004 --- /dev/null +++ b/jpo-ode-core/src/test/java/us/dot/its/jpo/ode/model/OdeTravelerInputDataTest.java @@ -0,0 +1,227 @@ +package us.dot.its.jpo.ode.model; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.math.BigDecimal; +import lombok.val; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import us.dot.its.jpo.ode.plugin.RoadSideUnit; +import us.dot.its.jpo.ode.plugin.SNMP; +import us.dot.its.jpo.ode.plugin.ServiceRequest; +import us.dot.its.jpo.ode.plugin.SnmpProtocol; +import us.dot.its.jpo.ode.plugin.j2735.OdePosition3D; +import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage; +import us.dot.its.jpo.ode.plugin.j2735.timstorage.FrameType; +import us.dot.its.jpo.ode.plugin.j2735.timstorage.MutcdCode; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +class OdeTravelerInputDataTest { + + /** + * Test method for converting pre-J2735-2016 ASN.1 to J2735-2024 ASN.1 + * Prior to J2735 2016, the following fields had different names: + * - 'doNotUse1' was 'sspTimRights' + * - 'doNotUse2' was 'sspLocationRights' + * - 'doNotUse3' was 'sspMsgContent' + * - 'doNotUse4' was 'sspMsgTypes' + * - 'durationTime' was 'duratonTime' + */ + @Test + void testConvertPreJ2735_2016ToJ2735_2024() throws IOException { + // prepare + String timRequestPreJ2735_2016 = new String(Files.readAllBytes( + Paths.get("src/test/resources/us/dot/its/jpo/ode/model/timRequest_pre-J2735-2016.json"))); + ObjectMapper mapper = new ObjectMapper(); + OdeTravelerInputData expectedTID = getExpectedDeserializedObject(); + + // execute + val deserializedTID = mapper.readValue(timRequestPreJ2735_2016, OdeTravelerInputData.class); + + // verify (compare inputTID to an expected OdeTravelerInputData object) + Assertions.assertEquals(expectedTID, deserializedTID); + } + + /** + * Test method for converting J2735-2016 ASN.1 to J2735-2024 ASN.1 + * In J2735 2016, the following fields had different names: + * - 'doNotUse1' was 'sspTimRights' + * - 'doNotUse2' was 'sspLocationRights' + * - 'doNotUse3' was 'sspMsgRights1' + * - 'doNotUse4' was 'sspMsgRights2' + * - 'durationTime' was 'duratonTime' + */ + @Test + void testConvertJ2735_2016ToJ2735_2024() throws IOException { + // prepare + String timRequestJ2735_2016 = new String(Files.readAllBytes( + Paths.get("src/test/resources/us/dot/its/jpo/ode/model/timRequest_J2735-2016.json"))); + ObjectMapper mapper = new ObjectMapper(); + OdeTravelerInputData expectedTID = getExpectedDeserializedObject(); + + // execute + val deserializedTID = mapper.readValue(timRequestJ2735_2016, OdeTravelerInputData.class); + + // verify (compare inputTID to an expected OdeTravelerInputData object) + Assertions.assertEquals(expectedTID, deserializedTID); + } + + /** + * Test method for converting J2735-2020 ASN.1 to J2735-2024 ASN.1 + * In J2735 2020, the following fields had different names: + * - 'doNotUse1' was 'notUsed' + * - 'doNotUse2' was 'notUsed1' + * - 'doNotUse3' was 'notUsed2' + * - 'doNotUse4' was 'notUsed3' + */ + @Test + void testConvertJ2735_2020ToJ2735_2024() throws IOException { + // prepare + String timRequestJ2735_2020 = new String(Files.readAllBytes( + Paths.get("src/test/resources/us/dot/its/jpo/ode/model/timRequest_J2735-2020.json"))); + ObjectMapper mapper = new ObjectMapper(); + OdeTravelerInputData expectedTID = getExpectedDeserializedObject(); + + // execute + val deserializedTID = mapper.readValue(timRequestJ2735_2020, OdeTravelerInputData.class); + + // verify (compare inputTID to an expected OdeTravelerInputData object) + Assertions.assertEquals(expectedTID, deserializedTID); + } + + private static OdeTravelerInputData getExpectedDeserializedObject() { + OdeTravelerInputData expected = new OdeTravelerInputData(); + var req = new ServiceRequest(); + var rsu = new RoadSideUnit.RSU(); + rsu.setRsuTarget("127.0.0.2"); + rsu.setRsuUsername("v3user"); + rsu.setRsuPassword("password"); + rsu.setRsuRetries(1); + rsu.setRsuTimeout(1000); + rsu.setRsuIndex(10); + rsu.setSnmpProtocol(SnmpProtocol.valueOf("NTCIP1218")); + req.setRsus(new RoadSideUnit.RSU[] {rsu}); + var snmp = new SNMP(); + snmp.setRsuid("00000083"); + snmp.setMsgid(31); + snmp.setMode(1); + snmp.setChannel(178); + snmp.setInterval(2); + snmp.setDeliverystart("2017-06-01T17:47:11-05:00"); + snmp.setDeliverystop("2018-01-01T17:47:11-05:15"); + snmp.setEnable(1); + snmp.setStatus(4); + req.setSnmp(snmp); + expected.setRequest(req); + var tim = new OdeTravelerInformationMessage(); + tim.setMsgCnt(1); + tim.setTimeStamp("2017-08-03T22:25:36.297Z"); + tim.setPacketID("EC9C236B0000000000"); + tim.setUrlB("null"); + var dataframes = new OdeTravelerInformationMessage.DataFrame[1]; + var df = new OdeTravelerInformationMessage.DataFrame(); + df.setDoNotUse1((short) 0); + df.setFrameType(FrameType.TravelerInfoType.valueOf("advisory")); + var msgId = new OdeTravelerInformationMessage.DataFrame.MsgId(); + var roadSignID = new OdeTravelerInformationMessage.DataFrame.RoadSignID(); + var position = new OdePosition3D(); + position.setLatitude(new BigDecimal("41.678473")); + position.setLongitude(new BigDecimal("-108.782775")); + position.setElevation(new BigDecimal("917.1432")); + roadSignID.setPosition(position); + roadSignID.setViewAngle("1010101010101010"); + roadSignID.setMutcdCode(MutcdCode.MutcdCodeEnum.valueOf("warning")); + roadSignID.setCrc("0000"); + msgId.setRoadSignID(roadSignID); + df.setMsgId(msgId); + df.setStartDateTime("2017-08-02T22:25:00.000Z"); + df.setDurationTime(1); + df.setPriority(0); + df.setDoNotUse2((short) 0); + var region = new OdeTravelerInformationMessage.DataFrame.Region(); + region.setName("Testing TIM"); + region.setRegulatorID(0); + region.setSegmentID(33); + var anchorPosition = new OdePosition3D(); + anchorPosition.setLatitude(new BigDecimal("41.2500807")); + anchorPosition.setLongitude(new BigDecimal("-111.0093847")); + anchorPosition.setElevation(new BigDecimal("2020.6969900289998")); + region.setAnchorPosition(anchorPosition); + region.setLaneWidth(BigDecimal.valueOf(7)); + region.setDirectionality("3"); + region.setClosedPath(false); + region.setDirection("0000000000001010"); + region.setDescription("path"); + var path = new OdeTravelerInformationMessage.DataFrame.Region.Path(); + path.setScale(0); + path.setType("ll"); + var nodes = new OdeTravelerInformationMessage.NodeXY[13]; + nodes[0] = new OdeTravelerInformationMessage.NodeXY(); + nodes[0].setDelta("node-LL"); + nodes[0].setNodeLat(BigDecimal.valueOf(-0.0002048)); + nodes[0].setNodeLong(BigDecimal.valueOf(0.0002047)); + nodes[1] = new OdeTravelerInformationMessage.NodeXY(); + nodes[1].setDelta("node-LL"); + nodes[1].setNodeLat(BigDecimal.valueOf(-0.0008192)); + nodes[1].setNodeLong(BigDecimal.valueOf(0.0008191)); + nodes[2] = new OdeTravelerInformationMessage.NodeXY(); + nodes[2].setDelta("node-LL"); + nodes[2].setNodeLat(BigDecimal.valueOf(-0.0032768)); + nodes[2].setNodeLong(BigDecimal.valueOf(0.0032767)); + nodes[3] = new OdeTravelerInformationMessage.NodeXY(); + nodes[3].setDelta("node-LL"); + nodes[3].setNodeLat(BigDecimal.valueOf(-0.0131072)); + nodes[3].setNodeLong(BigDecimal.valueOf(0.0131071)); + nodes[4] = new OdeTravelerInformationMessage.NodeXY(); + nodes[4].setDelta("node-LL"); + nodes[4].setNodeLat(BigDecimal.valueOf(-0.2097152)); + nodes[4].setNodeLong(BigDecimal.valueOf(0.2097151)); + nodes[5] = new OdeTravelerInformationMessage.NodeXY(); + nodes[5].setDelta("node-LL"); + nodes[5].setNodeLat(BigDecimal.valueOf(-0.8388608)); + nodes[5].setNodeLong(BigDecimal.valueOf(0.8388607)); + nodes[6] = new OdeTravelerInformationMessage.NodeXY(); + nodes[6].setDelta("node-LL1"); + nodes[6].setNodeLat(BigDecimal.valueOf(-0.0002048)); + nodes[6].setNodeLong(BigDecimal.valueOf(0.0002047)); + nodes[7] = new OdeTravelerInformationMessage.NodeXY(); + nodes[7].setDelta("node-LL2"); + nodes[7].setNodeLat(BigDecimal.valueOf(-0.0008192)); + nodes[7].setNodeLong(BigDecimal.valueOf(0.0008191)); + nodes[8] = new OdeTravelerInformationMessage.NodeXY(); + nodes[8].setDelta("node-LL3"); + nodes[8].setNodeLat(BigDecimal.valueOf(-0.0032768)); + nodes[8].setNodeLong(BigDecimal.valueOf(0.0032767)); + nodes[9] = new OdeTravelerInformationMessage.NodeXY(); + nodes[9].setDelta("node-LL4"); + nodes[9].setNodeLat(BigDecimal.valueOf(-0.0131072)); + nodes[9].setNodeLong(BigDecimal.valueOf(0.0131071)); + nodes[10] = new OdeTravelerInformationMessage.NodeXY(); + nodes[10].setDelta("node-LL5"); + nodes[10].setNodeLat(BigDecimal.valueOf(-0.2097152)); + nodes[10].setNodeLong(BigDecimal.valueOf(0.2097151)); + nodes[11] = new OdeTravelerInformationMessage.NodeXY(); + nodes[11].setDelta("node-LL6"); + nodes[11].setNodeLat(BigDecimal.valueOf(-0.8388608)); + nodes[11].setNodeLong(BigDecimal.valueOf(0.8388607)); + nodes[12] = new OdeTravelerInformationMessage.NodeXY(); + nodes[12].setDelta("node-LatLon"); + nodes[12].setNodeLat(BigDecimal.valueOf(41.2500807)); + nodes[12].setNodeLong(BigDecimal.valueOf(-111.0093847)); + path.setNodes(nodes); + region.setPath(path); + df.setRegions(new OdeTravelerInformationMessage.DataFrame.Region[] {region}); + df.setDoNotUse3((short) 3); + df.setDoNotUse4((short) 2); + df.setContent("Advisory"); + df.setItems(new String[] {"125", "some text", "250", "'98765"}); + df.setUrl("null"); + dataframes[0] = df; + tim.setDataframes(dataframes); + expected.setTim(tim); + return expected; + } + +} \ No newline at end of file diff --git a/jpo-ode-core/src/test/resources/CVMessages/TIM_test.json b/jpo-ode-core/src/test/resources/CVMessages/TIM_test.json new file mode 100644 index 000000000..f284918f4 --- /dev/null +++ b/jpo-ode-core/src/test/resources/CVMessages/TIM_test.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"timMsg","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"streamId":"8af76b08-89bf-422e-b674-0f0ee065666f","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-06T10:39:42.806Z","schemaVersion":8,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"RSU","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A600","originIp":"172.18.0.1"},"payload":{"dataType":"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation","data":{"msgCnt":82,"timeStamp":345337,"packetID":"4F4354455420535452","urlB":"IA5St","dataFrames":[{"doNotUse1":0,"frameType":"commercialSignage","msgId":{"furtherInfoID":"4F43"},"startYear":425,"startTime":306216,"durationTime":31001,"priority":2,"doNotUse2":0,"regions":[{"name":"IA5","id":{"region":38149,"id":48118},"anchor":{"lat":-567387419,"elevation":53848,"long":-1717691068},"laneWidth":15175,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":true,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"oldRegion":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor50000meters","area":{"circle":{"center":{"lat":-686654332,"elevation":38736,"long":1616508908},"radius":3832,"units":"centimeter"}}}}},{"name":"I","id":{"region":64573,"id":33281},"anchor":{"lat":-714161321,"elevation":48475,"long":-1285139143},"laneWidth":26805,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"path":{"scale":1,"offset":{"ll":{"nodes":[{"delta":{"node-LL4":{"lon":-127947,"lat":-120550}},"attributes":{"localNode":["downstreamStopLine","closedToTraffic"],"disabled":["adjacentParkingOnLeft","transitStopOnLeft","parallelParking","mergingLaneLeft","curbOnLeft"],"enabled":["midBlockCurbPresent","transitStopInLane","taperToCenterLine","lowCurbsPresent"],"data":[{"pathEndPointAngle":-8,"laneCrownPointLeft":35,"laneAngle":62,"speedLimits":[{"type":"truckMaxSpeed","speed":5822},{"type":"truckNightMaxSpeed","speed":3017}]}],"dWidth":162,"dElevation":424}},{"delta":{"node-LatLon":{"lon":-998896073,"lat":735850714}},"attributes":{"localNode":["hydrantPresent","safeIsland","closedToTraffic","stopLine","reserved"],"disabled":["loadingzoneOnRight","adjacentParkingOnRight","headInParking"],"enabled":["costToPark","mergingLaneLeft","midBlockCurbPresent","unEvenPavementPresent","curbOnLeft"],"data":[{"laneAngle":-82,"speedLimits":[{"type":"truckMinSpeed","speed":2097}]}],"dWidth":264,"dElevation":-269}},{"delta":{"node-LL4":{"lon":86161,"lat":20207}},"attributes":{"localNode":["roundedCapStyleA","divergePoint","roundedCapStyleB","reserved"],"disabled":["adjacentParkingOnLeft","adjacentBikeLaneOnRight"],"enabled":["headInParking","timeRestrictionsOnParking"],"data":[{"laneCrownPointCenter":-68}],"dWidth":245,"dElevation":247}},{"delta":{"node-LL1":{"lon":-172,"lat":525}},"attributes":{"localNode":["closedToTraffic","roundedCapStyleA"],"disabled":["partialCurbIntrusion"],"enabled":["adaptiveTimingPresent"],"dWidth":206,"dElevation":144}},{"delta":{"node-LL5":{"lon":-873243,"lat":1464496}},"attributes":{"localNode":["stopLine","downstreamStartNode"],"disabled":["taperToRight","doNotBlock"],"enabled":["bikeBoxInFront"],"data":[{"pathEndPointAngle":25,"laneAngle":137}],"dWidth":414,"dElevation":181}}]}}}}},{"name":"IA5","id":{"region":7296,"id":1154},"anchor":{"lat":29950376,"elevation":16367,"long":270580409},"laneWidth":4926,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor10000meters","laneWidth":26482,"circle":{"center":{"lat":598135630,"elevation":32186,"long":664850545},"radius":3930,"units":"mile"}}}},{"name":"IA5S","id":{"region":1582,"id":46417},"anchor":{"lat":-283655839,"elevation":57976,"long":-685153664},"laneWidth":7235,"directionality":"forward","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":true,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"oldRegion":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor1000meters","area":{"shapePointSet":{"anchor":{"lat":581272185,"elevation":9059,"long":1108489970},"laneWidth":20085,"directionality":"forward","nodeList":{"nodes":[{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["mergePoint","reserved"],"disabled":["turnOutPointOnRight","adjacentParkingOnLeft","freeParking","costToPark"],"enabled":["costToPark","adjacentParkingOnRight"],"data":[{"laneCrownPointRight":4,"laneAngle":-167}],"dWidth":144,"dElevation":239}},{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["hydrantPresent","divergePoint"],"disabled":["freeParking","unEvenPavementPresent"],"enabled":["freeParking","adaptiveTimingPresent","taperToLeft"],"data":[{"speedLimits":[{"type":"vehiclesWithTrailersMaxSpeed","speed":3517}]}],"dWidth":-36,"dElevation":-453}},{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["roundedCapStyleA","downstreamStopLine","mergePoint","hydrantPresent"],"disabled":["doNotBlock","whiteLine","bikeBoxInFront","sharedBikeLane"],"enabled":["bikeBoxInFront","transitStopInLane","unEvenPavementPresent","adjacentBikeLaneOnRight"],"data":[{"pathEndPointAngle":-95,"laneAngle":60}],"dWidth":463,"dElevation":57}}]}}}}}},{"name":"IA5","id":{"region":11251,"id":41890},"anchor":{"lat":385181606,"elevation":46812,"long":1670812734},"laneWidth":16153,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useInstantlyOnly","laneWidth":6004,"circle":{"center":{"lat":-509239964,"elevation":9413,"long":772185922},"radius":1224,"units":"cm2-5"}}}}],"doNotUse3":0,"doNotUse4":0,"content":{"exitService":[{"item":{"itis":599}}]},"url":"IA5S"},{"doNotUse1":0,"frameType":"commercialSignage","msgId":{"roadSignID":{"position":{"lat":634998835,"elevation":50308,"long":313588249},"viewAngle":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"mutcdCode":"maintenance","crc":"4F43"}},"startYear":3481,"startTime":305174,"durationTime":24752,"priority":5,"doNotUse2":0,"regions":[{"name":"I","id":{"region":44107,"id":63537},"anchor":{"lat":-419185997,"elevation":51107,"long":-533287210},"laneWidth":25278,"directionality":"reverse","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":true,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"path":{"scale":8,"offset":{"ll":{"nodes":[{"delta":{"node-LatLon":{"lon":900792217,"lat":448269129}},"attributes":{"localNode":["roundedCapStyleA","roundedCapStyleB","downstreamStartNode","divergePoint"],"disabled":["timeRestrictionsOnParking","sharedWithTrackedVehicle"],"enabled":["taperToCenterLine"],"data":[{"pathEndPointAngle":24,"laneCrownPointCenter":9}],"dWidth":225,"dElevation":-213}},{"delta":{"node-LatLon":{"lon":900792217,"lat":448269129}},"attributes":{"localNode":["stopLine","mergePoint"],"disabled":["rfSignalRequestPresent"],"enabled":["turnOutPointOnLeft","loadingzoneOnLeft","headInParking","adjacentParkingOnRight","safeIsland"],"data":[{"pathEndPointAngle":-109,"laneCrownPointRight":83}],"dWidth":-31,"dElevation":-482}},{"delta":{"node-LL1":{"lon":-1370,"lat":-1581}},"attributes":{"localNode":["mergePoint","divergePoint","downstreamStartNode","safeIsland"],"disabled":["adaptiveTimingPresent","partialCurbIntrusion","parallelParking","curbOnLeft","doNotBlock"],"enabled":["curbOnRight","sharedBikeLane"],"data":[{"laneCrownPointLeft":-121}],"dWidth":505,"dElevation":348}}]}}}}},{"name":"IA","id":{"region":30031,"id":322},"anchor":{"lat":-454547095,"elevation":59458,"long":353479827},"laneWidth":23566,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":true,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":true,"from337-5to360-0degrees":false},"extent":"useFor10meters","laneWidth":24321,"circle":{"center":{"lat":-539150408,"elevation":45059,"long":-814772254},"radius":1157,"units":"mile"}}}},{"name":"IA5St","id":{"region":46088,"id":60227},"anchor":{"lat":-476956537,"elevation":4505,"long":759386724},"laneWidth":28846,"directionality":"forward","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":true,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":true,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor100meters","laneWidth":8084,"circle":{"center":{"lat":-405703383,"elevation":9512,"long":-508985739},"radius":2519,"units":"mile"}}}}],"doNotUse3":0,"doNotUse4":0,"content":{"exitService":[{"item":{"text":"I"}},{"item":{"text":"IA5St"}},{"item":{"text":"IA5"}}]},"url":"IA5St"},{"doNotUse1":0,"frameType":"unknown","msgId":{"furtherInfoID":"4F43"},"startYear":2776,"startTime":408571,"durationTime":15957,"priority":5,"doNotUse2":0,"regions":[{"name":"IA","id":{"region":62756,"id":63693},"anchor":{"lat":424936826,"elevation":35858,"long":-1208779998},"laneWidth":18563,"directionality":"both","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":true,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":true,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor5000meters","laneWidth":17158,"circle":{"center":{"lat":442482548,"elevation":43319,"long":-804103995},"radius":1951,"units":"meter"}}}},{"name":"IA5S","id":{"region":51032,"id":30319},"anchor":{"lat":-559743245,"elevation":46636,"long":1697199162},"laneWidth":5901,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":true,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor500meters","laneWidth":28716,"circle":{"center":{"lat":707126893,"elevation":35728,"long":-77527193},"radius":3343,"units":"meter"}}}},{"name":"IA","id":{"region":23939,"id":26592},"anchor":{"lat":-328004279,"elevation":45419,"long":88284632},"laneWidth":15118,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":true,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"oldRegion":{"direction":{"from000-0to022-5degrees":true,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor50000meters","area":{"circle":{"center":{"lat":171361070,"elevation":57912,"long":1462406911},"radius":3502,"units":"kilometer"}}}}}],"doNotUse3":0,"doNotUse4":0,"content":{"speedLimit":[{"item":{"itis":40721}},{"item":{"itis":36784}},{"item":{"text":"IA5S"}},{"item":{"text":"IA5"}},{"item":{"itis":49435}}]},"url":"IA5S"}]}}} \ No newline at end of file diff --git a/jpo-ode-core/src/test/resources/json/sample-psm.json b/jpo-ode-core/src/test/resources/json/sample-psm.json new file mode 100644 index 000000000..c49303d90 --- /dev/null +++ b/jpo-ode-core/src/test/resources/json/sample-psm.json @@ -0,0 +1,49 @@ +{ + "metadata": { + "logFileName": "", + "maxDurationTime": 0, + "odePacketID": "", + "odeReceivedAt": "2023-09-21T15:30:14.926500Z", + "odeTimStartDateTime": "", + "originIp": "192.168.16.1", + "payloadType": "us.dot.its.jpo.ode.model.OdePsmPayload", + "psmSource": "RSU", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "recordGeneratedAt": "", + "recordGeneratedBy": "UNKNOWN", + "recordType": "psmTx", + "sanitized": false, + "schemaVersion": 8, + "securityResultCode": "success", + "serialId": { + "bundleId": 0, + "bundleSize": 1, + "recordId": 0, + "serialNumber": 0, + "streamId": "06cc1c17-e331-4806-a8ee-456b98c6517b" + }, + "asn1": "011d0000201a0000021bd86891de75f84da101c13f042e2214141fff00022c2000270000000163b2cc7986010000" + }, + "payload": { + "data": { + "accuracy": { + "orientation": 44.9951935489, + "semiMajor": 1.0, + "semiMinor": 1.0 + }, + "basicType": "aPEDESTRIAN", + "heading": 8898, + "id": "24779D7E", + "msgCnt": 26, + "position": { + "latitude": 40.2397377, + "longitude": -74.2761437 + }, + "secMark": 3564, + "speed": 0 + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735PSM" + } +} \ No newline at end of file diff --git a/jpo-ode-core/src/test/resources/us/dot/its/jpo/ode/model/timRequest_J2735-2016.json b/jpo-ode-core/src/test/resources/us/dot/its/jpo/ode/model/timRequest_J2735-2016.json new file mode 100644 index 000000000..ddba9e28e --- /dev/null +++ b/jpo-ode-core/src/test/resources/us/dot/its/jpo/ode/model/timRequest_J2735-2016.json @@ -0,0 +1,146 @@ +{ + "request": { + "rsus": [ + { + "rsuIndex": "10", + "rsuTarget": "127.0.0.2", + "rsuUsername": "v3user", + "rsuPassword": "password", + "rsuRetries": "1", + "rsuTimeout": "1000" + } + ], + "snmp": { + "rsuid": "00000083", + "msgid": "31", + "mode": "1", + "channel": "178", + "interval": "2", + "deliverystart": "2017-06-01T17:47:11-05:00", + "deliverystop": "2018-01-01T17:47:11-05:15", + "enable": "1", + "status": "4" + } + }, + "tim": { + "msgCnt": "1", + "timeStamp": "2017-08-03T22:25:36.297Z", + "urlB": "null", + "packetID": "EC9C236B0000000000", + "dataframes": [ + { + "startDateTime": "2017-08-02T22:25:00.000Z", + "duratonTime": 1, + "sspTimRights": "0", + "frameType": "advisory", + "msgId": { + "roadSignID": { + "position": { + "latitude": "41.678473", + "longitude": "-108.782775", + "elevation": "917.1432" + }, + "viewAngle": "1010101010101010", + "mutcdCode": "warning", + "crc": "0000" + } + }, + "priority": "0", + "sspLocationRights": "0", + "regions": [ + { + "name": "Testing TIM", + "regulatorID": "0", + "segmentID": "33", + "anchorPosition": { + "latitude": "41.2500807", + "longitude": "-111.0093847", + "elevation": "2020.6969900289998" + }, + "laneWidth": "7", + "directionality": "3", + "closedPath": "false", + "description": "path", + "path": { + "scale": "0", + "type": "ll", + "nodes": [ + { + "nodeLong": "0.0002047", + "nodeLat": "-0.0002048", + "delta": "node-LL" + }, + { + "nodeLong": "0.0008191", + "nodeLat": "-0.0008192", + "delta": "node-LL" + }, + { + "nodeLong": "0.0032767", + "nodeLat": "-0.0032768", + "delta": "node-LL" + }, + { + "nodeLong": "0.0131071", + "nodeLat": "-0.0131072", + "delta": "node-LL" + }, + { + "nodeLong": "0.2097151", + "nodeLat": "-0.2097152", + "delta": "node-LL" + }, + { + "nodeLong": "0.8388607", + "nodeLat": "-0.8388608", + "delta": "node-LL" + }, + { + "nodeLong": "0.0002047", + "nodeLat": "-0.0002048", + "delta": "node-LL1" + }, + { + "nodeLong": "0.0008191", + "nodeLat": "-0.0008192", + "delta": "node-LL2" + }, + { + "nodeLong": "0.0032767", + "nodeLat": "-0.0032768", + "delta": "node-LL3" + }, + { + "nodeLong": "0.0131071", + "nodeLat": "-0.0131072", + "delta": "node-LL4" + }, + { + "nodeLong": "0.2097151", + "nodeLat": "-0.2097152", + "delta": "node-LL5" + }, + { + "nodeLong": "0.8388607", + "nodeLat": "-0.8388608", + "delta": "node-LL6" + }, + { + "nodeLong": "-111.0093847", + "nodeLat": "41.2500807", + "delta": "node-LatLon" + } + ] + }, + "direction": "0000000000001010" + } + ], + "sspMsgRights2": "2", + "sspMsgRights1": "3", + "content": "Advisory", + "items": ["125","some text", "250", "'98765"], + "url": "null" + } + ] + } +} \ No newline at end of file diff --git a/jpo-ode-core/src/test/resources/us/dot/its/jpo/ode/model/timRequest_J2735-2020.json b/jpo-ode-core/src/test/resources/us/dot/its/jpo/ode/model/timRequest_J2735-2020.json new file mode 100644 index 000000000..928d68f3a --- /dev/null +++ b/jpo-ode-core/src/test/resources/us/dot/its/jpo/ode/model/timRequest_J2735-2020.json @@ -0,0 +1,146 @@ +{ + "request": { + "rsus": [ + { + "rsuIndex": "10", + "rsuTarget": "127.0.0.2", + "rsuUsername": "v3user", + "rsuPassword": "password", + "rsuRetries": "1", + "rsuTimeout": "1000" + } + ], + "snmp": { + "rsuid": "00000083", + "msgid": "31", + "mode": "1", + "channel": "178", + "interval": "2", + "deliverystart": "2017-06-01T17:47:11-05:00", + "deliverystop": "2018-01-01T17:47:11-05:15", + "enable": "1", + "status": "4" + } + }, + "tim": { + "msgCnt": "1", + "timeStamp": "2017-08-03T22:25:36.297Z", + "urlB": "null", + "packetID": "EC9C236B0000000000", + "dataframes": [ + { + "startDateTime": "2017-08-02T22:25:00.000Z", + "durationTime": 1, + "notUsed": "0", + "frameType": "advisory", + "msgId": { + "roadSignID": { + "position": { + "latitude": "41.678473", + "longitude": "-108.782775", + "elevation": "917.1432" + }, + "viewAngle": "1010101010101010", + "mutcdCode": "warning", + "crc": "0000" + } + }, + "priority": "0", + "notUsed1": "0", + "regions": [ + { + "name": "Testing TIM", + "regulatorID": "0", + "segmentID": "33", + "anchorPosition": { + "latitude": "41.2500807", + "longitude": "-111.0093847", + "elevation": "2020.6969900289998" + }, + "laneWidth": "7", + "directionality": "3", + "closedPath": "false", + "description": "path", + "path": { + "scale": "0", + "type": "ll", + "nodes": [ + { + "nodeLong": "0.0002047", + "nodeLat": "-0.0002048", + "delta": "node-LL" + }, + { + "nodeLong": "0.0008191", + "nodeLat": "-0.0008192", + "delta": "node-LL" + }, + { + "nodeLong": "0.0032767", + "nodeLat": "-0.0032768", + "delta": "node-LL" + }, + { + "nodeLong": "0.0131071", + "nodeLat": "-0.0131072", + "delta": "node-LL" + }, + { + "nodeLong": "0.2097151", + "nodeLat": "-0.2097152", + "delta": "node-LL" + }, + { + "nodeLong": "0.8388607", + "nodeLat": "-0.8388608", + "delta": "node-LL" + }, + { + "nodeLong": "0.0002047", + "nodeLat": "-0.0002048", + "delta": "node-LL1" + }, + { + "nodeLong": "0.0008191", + "nodeLat": "-0.0008192", + "delta": "node-LL2" + }, + { + "nodeLong": "0.0032767", + "nodeLat": "-0.0032768", + "delta": "node-LL3" + }, + { + "nodeLong": "0.0131071", + "nodeLat": "-0.0131072", + "delta": "node-LL4" + }, + { + "nodeLong": "0.2097151", + "nodeLat": "-0.2097152", + "delta": "node-LL5" + }, + { + "nodeLong": "0.8388607", + "nodeLat": "-0.8388608", + "delta": "node-LL6" + }, + { + "nodeLong": "-111.0093847", + "nodeLat": "41.2500807", + "delta": "node-LatLon" + } + ] + }, + "direction": "0000000000001010" + } + ], + "notUsed3": "2", + "notUsed2": "3", + "content": "Advisory", + "items": ["125","some text", "250", "'98765"], + "url": "null" + } + ] + } +} \ No newline at end of file diff --git a/jpo-ode-core/src/test/resources/us/dot/its/jpo/ode/model/timRequest_pre-J2735-2016.json b/jpo-ode-core/src/test/resources/us/dot/its/jpo/ode/model/timRequest_pre-J2735-2016.json new file mode 100644 index 000000000..dffa502de --- /dev/null +++ b/jpo-ode-core/src/test/resources/us/dot/its/jpo/ode/model/timRequest_pre-J2735-2016.json @@ -0,0 +1,146 @@ +{ + "request": { + "rsus": [ + { + "rsuIndex": "10", + "rsuTarget": "127.0.0.2", + "rsuUsername": "v3user", + "rsuPassword": "password", + "rsuRetries": "1", + "rsuTimeout": "1000" + } + ], + "snmp": { + "rsuid": "00000083", + "msgid": "31", + "mode": "1", + "channel": "178", + "interval": "2", + "deliverystart": "2017-06-01T17:47:11-05:00", + "deliverystop": "2018-01-01T17:47:11-05:15", + "enable": "1", + "status": "4" + } + }, + "tim": { + "msgCnt": "1", + "timeStamp": "2017-08-03T22:25:36.297Z", + "urlB": "null", + "packetID": "EC9C236B0000000000", + "dataframes": [ + { + "startDateTime": "2017-08-02T22:25:00.000Z", + "duratonTime": 1, + "sspTimRights": "0", + "frameType": "advisory", + "msgId": { + "roadSignID": { + "position": { + "latitude": "41.678473", + "longitude": "-108.782775", + "elevation": "917.1432" + }, + "viewAngle": "1010101010101010", + "mutcdCode": "warning", + "crc": "0000" + } + }, + "priority": "0", + "sspLocationRights": "0", + "regions": [ + { + "name": "Testing TIM", + "regulatorID": "0", + "segmentID": "33", + "anchorPosition": { + "latitude": "41.2500807", + "longitude": "-111.0093847", + "elevation": "2020.6969900289998" + }, + "laneWidth": "7", + "directionality": "3", + "closedPath": "false", + "description": "path", + "path": { + "scale": "0", + "type": "ll", + "nodes": [ + { + "nodeLong": "0.0002047", + "nodeLat": "-0.0002048", + "delta": "node-LL" + }, + { + "nodeLong": "0.0008191", + "nodeLat": "-0.0008192", + "delta": "node-LL" + }, + { + "nodeLong": "0.0032767", + "nodeLat": "-0.0032768", + "delta": "node-LL" + }, + { + "nodeLong": "0.0131071", + "nodeLat": "-0.0131072", + "delta": "node-LL" + }, + { + "nodeLong": "0.2097151", + "nodeLat": "-0.2097152", + "delta": "node-LL" + }, + { + "nodeLong": "0.8388607", + "nodeLat": "-0.8388608", + "delta": "node-LL" + }, + { + "nodeLong": "0.0002047", + "nodeLat": "-0.0002048", + "delta": "node-LL1" + }, + { + "nodeLong": "0.0008191", + "nodeLat": "-0.0008192", + "delta": "node-LL2" + }, + { + "nodeLong": "0.0032767", + "nodeLat": "-0.0032768", + "delta": "node-LL3" + }, + { + "nodeLong": "0.0131071", + "nodeLat": "-0.0131072", + "delta": "node-LL4" + }, + { + "nodeLong": "0.2097151", + "nodeLat": "-0.2097152", + "delta": "node-LL5" + }, + { + "nodeLong": "0.8388607", + "nodeLat": "-0.8388608", + "delta": "node-LL6" + }, + { + "nodeLong": "-111.0093847", + "nodeLat": "41.2500807", + "delta": "node-LatLon" + } + ] + }, + "direction": "0000000000001010" + } + ], + "sspMsgTypes": "2", + "sspMsgContent": "3", + "content": "Advisory", + "items": ["125","some text", "250", "'98765"], + "url": "null" + } + ] + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/pom.xml b/jpo-ode-plugins/pom.xml index d2c568367..fe9ab0b77 100644 --- a/jpo-ode-plugins/pom.xml +++ b/jpo-ode-plugins/pom.xml @@ -11,7 +11,7 @@ usdot.jpo.ode jpo-ode - 3.0.0-SNAPSHOT + 4.0.0 @@ -27,7 +27,7 @@ usdot.jpo.ode jpo-ode-common - 3.0.0-SNAPSHOT + 4.0.0 anchor (optional) - JsonNode anchorPos = region.get(ANCHOR_POSITION); - if (anchorPos != null) { - region.set(ANCHOR, JsonUtils.toObjectNode(Position3DBuilder - .dsrcPosition3D(Position3DBuilder.odePosition3D(region.get(ANCHOR_POSITION))).toJson())); - region.remove(ANCHOR_POSITION); - } - - // lane width (optional) - JsonNode laneWidth = region.get(LANE_WIDTH); - if (laneWidth != null) { - region.put(LANE_WIDTH, LaneWidthBuilder.laneWidth(JsonUtils.decimalValue(laneWidth))); - } - - // directionality (optional) - if (region.has(DIRECTIONALITY)) { - JsonNode directionality = region.get(DIRECTIONALITY); - String enumString = CommonUtils.enumToString(DirectionOfUseEnum.class, directionality.asText()); - if (enumString != null) { - region.set(DIRECTIONALITY, JsonUtils.newNode().put(enumString, EMPTY_FIELD_FLAG)); - } - } - - // closed path (optional) - JsonNode closedPath = region.get(CLOSED_PATH); - if (closedPath != null) { - region.put(CLOSED_PATH, (closedPath.asBoolean() ? BOOLEAN_OBJECT_TRUE : BOOLEAN_OBJECT_FALSE)); - } - - // description (optional) - JsonNode descriptionNode = region.get(DESCRIPTION); - if (descriptionNode != null) { - String descriptionType = descriptionNode.asText(); - if (PATH.equals(descriptionType)) { - ObjectNode pathNode = (ObjectNode) region.get(PATH); - replacePath(pathNode); - region.set(DESCRIPTION, JsonUtils.newNode().set(PATH, pathNode)); - } else if (GEOMETRY.equals(descriptionType)) { - ObjectNode newGeometry = (ObjectNode) region.get(GEOMETRY); - replaceGeometry(newGeometry); - region.set(DESCRIPTION, JsonUtils.newNode().set(GEOMETRY, newGeometry)); - } else if (OLD_REGION.equals(descriptionType)) { - ObjectNode newOldRegion = (ObjectNode) region.get(OLD_REGION); - replaceOldRegion(newOldRegion); - region.set(DESCRIPTION, JsonUtils.newNode().set(OLD_REGION, newOldRegion)); - } - region.remove(descriptionType); - } - } - - private static void replacePath(ObjectNode pathNode) { - - //// EXPECTED INPUT: - // "path": - // "scale": "0", - // "type": "ll", - // "nodes": [] - // - - //// EXPECTED OUTPUT: - // - // .0 - // . - // .. - // ... - // ... - // .. - // . - // - - // zoom does not need to be replaced - String nodeType = pathNode.get(TYPE).asText(); - JsonNode nodes = pathNode.get(NODES); - JsonNode nodeList; - if (LL.equals(nodeType)) { - nodeList = JsonUtils.newNode().set("NodeLL", transformNodeSetLL(nodes)); - pathNode.set(OFFSET, JsonUtils.newNode().set(LL, JsonUtils.newNode().set(NODES, nodeList))); - } else if (XY.equals(nodeType)) { - nodeList = JsonUtils.newNode().set(NODE_XY2, transformNodeSetXY(nodes)); - pathNode.set(OFFSET, JsonUtils.newNode().set(XY, JsonUtils.newNode().set(NODES, nodeList))); - } - pathNode.remove(NODES); - pathNode.remove(TYPE); - - } - - private static ArrayNode transformNodeSetLL(JsonNode nodes) { - - //// EXPECTED INPUT: - // "nodes": [] - - // EXPECTED OUTPUT: - // - // . - // . - // . - // . - // - - ArrayNode outputNodeList = JsonUtils.newNode().arrayNode(); - - if (nodes.isArray()) { - Iterator nodeListIter = nodes.elements(); - - while (nodeListIter.hasNext()) { - JsonNode inputNode = nodeListIter.next(); - outputNodeList.add(transformNodeLL(inputNode)); - } - } - - return outputNodeList; - } - - private static ObjectNode transformNodeLL(JsonNode oldNode) { - - //// EXPECTED INPUT: - // - // "nodeLong": "0.0031024", - // "nodeLat": "0.0014506", - // "delta": "node-LL3" - // - - //// EXPECTED OUTPUT: - // - // . - // .. - // ...14506 - // ...31024 - // .. - // . - // - - BigDecimal latOffset = JsonUtils.decimalValue(oldNode.get(NODE_LAT)); - BigDecimal longOffset = JsonUtils.decimalValue(oldNode.get(NODE_LONG)); - JsonNode delta = oldNode.get(DELTA); - Long transformedLat = null; - Long transformedLong = null; - - ObjectNode innerNode = JsonUtils.newNode(); - ObjectNode deltaNode = (ObjectNode) JsonUtils.newNode().set(DELTA, innerNode); - ObjectNode latLong = JsonUtils.newNode(); - String deltaText = delta.asText(); - if (deltaText.startsWith("node-LL")) { - transformedLat = OffsetLLBuilder.offsetLL(latOffset); - transformedLong = OffsetLLBuilder.offsetLL(longOffset); - if (deltaText.equals("node-LL")) { - deltaText = nodeOffsetPointLL(transformedLat, transformedLong); - } - } else if (NODE_LAT_LON.equals(deltaText)) { - transformedLat = LatitudeBuilder.j2735Latitude(latOffset); - transformedLong = LongitudeBuilder.j2735Longitude(longOffset); - } - - innerNode.set(deltaText, latLong); - latLong.put(LAT, transformedLat).put(LON, transformedLong); - - return deltaNode; - } - - // -- Nodes with LL content Span at the equator when using a zoom of one: - // node-LL1 Node-LL-24B, -- within +- 22.634554 meters of last node - // node-LL2 Node-LL-28B, -- within +- 90.571389 meters of last node - // node-LL3 Node-LL-32B, -- within +- 362.31873 meters of last node - // node-LL4 Node-LL-36B, -- within +- 01.449308 Kmeters of last node - // node-LL5 Node-LL-44B, -- within +- 23.189096 Kmeters of last node - // node-LL6 Node-LL-48B, -- within +- 92.756481 Kmeters of last node - // node-LatLon Node-LLmD-64b, -- node is a full 32b Lat/Lon range - private static String nodeOffsetPointLL(long transformedLat, long transformedLon) { - long transformedLatabs = Math.abs(transformedLat); - long transformedLonabs = Math.abs(transformedLon); - if (((transformedLatabs & (-1 << 11)) == 0 || (transformedLat < 0 && (transformedLatabs ^ (1 << 11)) == 0)) - && (transformedLonabs & (-1 << 11)) == 0 - || (transformedLon < 0 && ((transformedLonabs ^ (1 << 11)) == 0))) { - // 11 bit value - return "node-LL1"; - } else if (((transformedLatabs & (-1 << 13)) == 0 || (transformedLat < 0 && (transformedLatabs ^ (1 << 13)) == 0)) - && (transformedLonabs & (-1 << 13)) == 0 - || (transformedLon < 0 && ((transformedLonabs ^ (1 << 13)) == 0))) { - // 13 bit value - return "node-LL2"; - } else if (((transformedLatabs & (-1 << 15)) == 0 || (transformedLat < 0 && (transformedLatabs ^ (1 << 15)) == 0)) - && (transformedLonabs & (-1 << 15)) == 0 - || (transformedLon < 0 && ((transformedLonabs ^ (1 << 15)) == 0))) { - // 15 bit value - return "node-LL3"; - } else if (((transformedLatabs & (-1 << 17)) == 0 || (transformedLat < 0 && (transformedLatabs ^ (1 << 17)) == 0)) - && (transformedLonabs & (-1 << 17)) == 0 - || (transformedLon < 0 && ((transformedLonabs ^ (1 << 17)) == 0))) { - // 17 bit value - return "node-LL4"; - } else if (((transformedLatabs & (-1 << 21)) == 0 || (transformedLat < 0 && (transformedLatabs ^ (1 << 21)) == 0)) - && (transformedLonabs & (-1 << 21)) == 0 - || (transformedLon < 0 && ((transformedLonabs ^ (1 << 21)) == 0))) { - // 21 bit value - return "node-LL5"; - } else if (((transformedLatabs & (-1 << 23)) == 0 || (transformedLat < 0 && (transformedLatabs ^ (1 << 23)) == 0)) - && (transformedLonabs & (-1 << 23)) == 0 - || (transformedLon < 0 && ((transformedLonabs ^ (1 << 23)) == 0))) { - // 23 bit value - return "node-LL6"; + } + + JsonNode sequence = JsonUtils.newNode().set(SEQUENCE_STRING, newItems); + + dataFrame.remove("items"); + + // step 2, set the content CHOICE + String replacedContentName = dataFrame.get("content").asText(); + if (replacedContentName.equals("Advisory")) { + replacedContentName = "advisory"; + } + + // The following field is called "content" but this results in a + // failed conversion to XML + // see @us.dot.its.jpo.ode.traveler.TimController.publish + dataFrame.set(TCONTENT_STRING, JsonUtils.newNode().set(replacedContentName, sequence)); + dataFrame.remove("content"); + } + + /** + * Builds an item. + * + * @param itemStr String representing the item + * @return JsonNode representing the item + */ + public static JsonNode buildItem(String itemStr) { + JsonNode item = null; + // check to see if it is an itis code or text + try { + item = JsonUtils.newNode().set(ITEM, JsonUtils.newNode().put(ITIS, Integer.valueOf(itemStr))); + // it's a number, so create "itis" code + } catch (NumberFormatException e) { + // it's not a number, so create "text" + if (itemStr.startsWith("'")) { + item = JsonUtils.newNode().set(ITEM, JsonUtils.newNode().put(TEXT, itemStr.substring(1))); } else { - throw new IllegalArgumentException("Invalid node lat/long offset: " + transformedLat + "/" + transformedLon - + ". Values must be between a range of -0.8388608/+0.8388607 degrees."); + item = JsonUtils.newNode().set(ITEM, JsonUtils.newNode().put(TEXT, itemStr)); } - - } - - public static void replaceGeometry(ObjectNode geometry) { - - // direction HeadingSlice - // extent Extent OPTIONAL - // laneWidth LaneWidth OPTIONAL - // circle Circle - - // direction does not need to be replaced - - // extent does not need to be replaced (optional) - - // replace lane width - JsonNode laneWidth = geometry.get(LANE_WIDTH); - if (laneWidth != null) { - geometry.put(LANE_WIDTH, LaneWidthBuilder.laneWidth(JsonUtils.decimalValue(laneWidth))); + } + + return item; + } + + /** + * Replaces msg id. + * + * @param dataFrame ObjectNode representing the data frame + */ + public static void replaceMsgId(ObjectNode dataFrame) { + + // + // + // + // 416784730 + // -1087827750 + // 9171 + // + // 0101010101010100 + // + // + // + // 0000 + // + // + + JsonNode msgId = dataFrame.get("msgId"); + if (msgId != null) { + ObjectNode roadSignID = (ObjectNode) msgId.get("roadSignID"); + if (roadSignID != null) { + + DsrcPosition3D position = Position3DBuilder + .dsrcPosition3D(Position3DBuilder.odePosition3D(roadSignID.get(POSITION))); + + roadSignID.putPOJO(POSITION, position); + + // mutcdCode is optional + JsonNode mutcdNode = roadSignID.get("mutcdCode"); + if (mutcdNode != null) { + roadSignID.set("mutcdCode", + JsonUtils.newNode().put(mutcdNode.asText(), EMPTY_FIELD_FLAG)); + } } - - // replace circle - replaceCircle(geometry.get(CIRCLE)); - } - - public static void replaceOldRegion(ObjectNode oldRegion) { - - // old region == ValidRegion - // elements: - // direction - no changes - - // extent - no changes - JsonNode extentNode = oldRegion.get(EXTENT); - String extent = CommonUtils.enumToString(Extent.ExtentEnum.class, extentNode.asText()); - oldRegion.set(EXTENT, JsonUtils.newNode().put(extent, EMPTY_FIELD_FLAG)); - - // area - needs changes - replaceArea(oldRegion.get("area")); - } - - public static void replaceArea(JsonNode area) { - - // area contains one of: - // shapePointSet - // circle - // regionPointSet - - ObjectNode updatedNode = (ObjectNode) area; - - if (updatedNode.has(SHAPE_POINT_SET)) { - JsonNode shapePointSet = updatedNode.get(SHAPE_POINT_SET); - replaceShapePointSet(shapePointSet); - updatedNode.set(SHAPE_POINT_SET, shapePointSet); - } else if (updatedNode.has(CIRCLE)) { - replaceCircle(updatedNode.get(CIRCLE)); - } else if (updatedNode.has(REGION_POINT_SET)) { - replaceRegionPointSet(updatedNode.get(REGION_POINT_SET)); + } + } + + /** + * Transforms regions. + * + * @param regions JsonNode representing the regions + * @return ObjectNode representing the transformed regions + * @throws JsonUtilsException if there is an issue converting the JsonNode + */ + public static ObjectNode transformRegions(JsonNode regions) throws JsonUtilsException { + ArrayNode replacedRegions = JsonUtils.newNode().arrayNode(); + + if (regions.isArray()) { + Iterator regionsIter = regions.elements(); + + while (regionsIter.hasNext()) { + JsonNode curRegion = regionsIter.next(); + replaceRegion((ObjectNode) curRegion); + replacedRegions.add(curRegion); } - } - - private static void replaceRegionPointSet(JsonNode regionPointSet) { - // regionPointSet contains: - // anchor - // zoom - // nodeList (regionList) - ObjectNode updatedNode = (ObjectNode) regionPointSet; - - // replace anchor (optional) - if (updatedNode.get(ANCHOR_POSITION) != null) { - JsonUtils.addNode(updatedNode, ANCHOR, - Position3DBuilder.dsrcPosition3D(Position3DBuilder.odePosition3D(updatedNode.get(ANCHOR_POSITION)))); - updatedNode.remove(ANCHOR_POSITION); + } + + return JsonUtils.newObjectNode(GEOGRAPHICAL_PATH_STRING, replacedRegions); + } + + /** + * Replaces a region. + * + * @param region ObjectNode representing the region + * @throws JsonUtilsException if there is an issue converting the JsonNode + */ + public static void replaceRegion(ObjectNode region) throws JsonUtilsException { + + //// EXPECTED INPUT: + // "name": "Testing TIM", + // "regulatorID": "0", + // "segmentID": "33", + // "anchorPosition": + // "latitude": "41.2500807", + // "longitude": "-111.0093847", + // "elevation": "2020.6969900289998" + // , + // "laneWidth": "7", + // "directionality": "3", + // "closedPath": "false", + // "description": "path", + // "path": {}, + // "direction": "0000000000001010" + + //// EXPECTED OUTPUT: + // + // .Testing TIM + // . + // ..0 + // ..33 + // . + // . + // ..412500807 + // ..-1110093847 + // ..20206 + // . + // .700 + // . + // .. + // . + // . + // .. + // . + // .0000000000010100 + // . + // . + // + + // name does not need to be replaced + + // id optional, consists of segmentID (required) + // and regulatorID (optional) + JsonNode segmentID = region.get(SEGMENT_ID); + if (segmentID != null) { + ObjectNode id = JsonUtils.newNode().put(ID, segmentID.asInt()); + JsonNode regulatorID = region.get(REGULATOR_ID); + if (regulatorID != null) { + id.put(REGION, regulatorID.asInt()); } - - // zoom doesn't need replacement (also optional) - - // regionList is good as is and does not need replacement (required) - } - - public static void replaceCircle(JsonNode circle) { - - // Circle ::= SEQUENCE - // center Position3D, - // radius Radius-B12, - // units DistanceUnits - // - - ObjectNode updatedNode = (ObjectNode) circle; - - JsonNode centerPosition = null; - if (updatedNode.has(POSITION)) { - centerPosition = updatedNode.get(POSITION); - updatedNode.remove(POSITION); - } else { - centerPosition = updatedNode.get(CENTER); + region.set(ID, id); + } + // replace regulatorID and segmentID with id + ObjectNode id = JsonUtils.newNode().put(REGION, region.get(REGULATOR_ID).asInt()).put(ID, + region.get(SEGMENT_ID).asInt()); + + region.set(ID, id); + region.remove(REGULATOR_ID); + region.remove(SEGMENT_ID); + + // anchorPosition --> anchor (optional) + JsonNode anchorPos = region.get(ANCHOR_POSITION); + if (anchorPos != null) { + region.set(ANCHOR, JsonUtils.toObjectNode(Position3DBuilder + .dsrcPosition3D(Position3DBuilder.odePosition3D(region.get(ANCHOR_POSITION))).toJson())); + region.remove(ANCHOR_POSITION); + } + + // lane width (optional) + JsonNode laneWidth = region.get(LANE_WIDTH); + if (laneWidth != null) { + region.put(LANE_WIDTH, LaneWidthBuilder.laneWidth(JsonUtils.decimalValue(laneWidth))); + } + + // directionality (optional) + if (region.has(DIRECTIONALITY)) { + JsonNode directionality = region.get(DIRECTIONALITY); + String enumString = + CommonUtils.enumToString(DirectionOfUseEnum.class, directionality.asText()); + if (enumString != null) { + region.set(DIRECTIONALITY, JsonUtils.newNode().put(enumString, EMPTY_FIELD_FLAG)); } - - // replace center - JsonUtils.addNode(updatedNode, CENTER, - Position3DBuilder.dsrcPosition3D(Position3DBuilder.odePosition3D(centerPosition))); - - // radius does not need replacement - - // replace units - if (updatedNode.has(UNITS)) { - JsonNode units = updatedNode.get(UNITS); - String enumString = CommonUtils.enumToString(DistanceUnitsEnum.class, units.asText()); - if (enumString != null) { - updatedNode.set(UNITS, JsonUtils.newNode().put(enumString, EMPTY_FIELD_FLAG)); - } + } + + // closed path (optional) + JsonNode closedPath = region.get(CLOSED_PATH); + if (closedPath != null) { + region.put(CLOSED_PATH, + (closedPath.asBoolean() ? BOOLEAN_OBJECT_TRUE : BOOLEAN_OBJECT_FALSE)); + } + + // description (optional) + JsonNode descriptionNode = region.get(DESCRIPTION); + if (descriptionNode != null) { + String descriptionType = descriptionNode.asText(); + if (PATH.equals(descriptionType)) { + ObjectNode pathNode = (ObjectNode) region.get(PATH); + replacePath(pathNode); + region.set(DESCRIPTION, JsonUtils.newNode().set(PATH, pathNode)); + } else if (GEOMETRY.equals(descriptionType)) { + ObjectNode newGeometry = (ObjectNode) region.get(GEOMETRY); + replaceGeometry(newGeometry); + region.set(DESCRIPTION, JsonUtils.newNode().set(GEOMETRY, newGeometry)); + } else if (OLD_REGION.equals(descriptionType)) { + ObjectNode newOldRegion = (ObjectNode) region.get(OLD_REGION); + replaceOldRegion(newOldRegion); + region.set(DESCRIPTION, JsonUtils.newNode().set(OLD_REGION, newOldRegion)); } - } - - public static void replaceShapePointSet(JsonNode shapePointSet) { - // shape point set contains: - // anchor - // lane width - // directionality - // node list - - ObjectNode updatedNode = (ObjectNode) shapePointSet; - - // replace anchor - if (updatedNode.has(ANCHOR)) { - JsonUtils.addNode(updatedNode, ANCHOR, - Position3DBuilder.dsrcPosition3D(Position3DBuilder.odePosition3D(updatedNode.get(ANCHOR)))); + region.remove(descriptionType); + } + } + + private static void replacePath(ObjectNode pathNode) { + + //// EXPECTED INPUT: + // "path": + // "scale": "0", + // "type": "ll", + // "nodes": [] + + //// EXPECTED OUTPUT: + // + // .0 + // . + // .. + // ... + // ... + // .. + // . + // + + // zoom does not need to be replaced + String nodeType = pathNode.get(TYPE).asText(); + JsonNode nodes = pathNode.get(NODES); + JsonNode nodeList; + if (LL.equals(nodeType)) { + nodeList = JsonUtils.newNode().set("NodeLL", transformNodeSetLL(nodes)); + pathNode.set(OFFSET, JsonUtils.newNode().set(LL, JsonUtils.newNode().set(NODES, nodeList))); + } else if (XY.equals(nodeType)) { + nodeList = JsonUtils.newNode().set(NODE_XY2, transformNodeSetXY(nodes)); + pathNode.set(OFFSET, JsonUtils.newNode().set(XY, JsonUtils.newNode().set(NODES, nodeList))); + } + pathNode.remove(NODES); + pathNode.remove(TYPE); + + } + + private static ArrayNode transformNodeSetLL(JsonNode nodes) { + + //// EXPECTED INPUT: + // "nodes": [] + + // EXPECTED OUTPUT: + // + // . + // . + // . + // . + // + + ArrayNode outputNodeList = JsonUtils.newNode().arrayNode(); + + if (nodes.isArray()) { + Iterator nodeListIter = nodes.elements(); + + while (nodeListIter.hasNext()) { + JsonNode inputNode = nodeListIter.next(); + outputNodeList.add(transformNodeLL(inputNode)); } - - // replace lane width - if (updatedNode.has(LANE_WIDTH)) { - updatedNode.put(LANE_WIDTH, LaneWidthBuilder.laneWidth(JsonUtils.decimalValue(updatedNode.get(LANE_WIDTH)))); + } + + return outputNodeList; + } + + private static ObjectNode transformNodeLL(JsonNode oldNode) { + + //// EXPECTED INPUT: + + // "nodeLong": "0.0031024", + // "nodeLat": "0.0014506", + // "delta": "node-LL3" + + //// EXPECTED OUTPUT: + // + // . + // .. + // ...14506 + // ...31024 + // .. + // . + // + + BigDecimal latOffset = JsonUtils.decimalValue(oldNode.get(NODE_LAT)); + BigDecimal longOffset = JsonUtils.decimalValue(oldNode.get(NODE_LONG)); + JsonNode delta = oldNode.get(DELTA); + Long transformedLat = null; + Long transformedLong = null; + + ObjectNode innerNode = JsonUtils.newNode(); + ObjectNode latLong = JsonUtils.newNode(); + String deltaText = delta.asText(); + if (deltaText.startsWith("node-LL")) { + transformedLat = OffsetLLBuilder.offsetLL(latOffset); + transformedLong = OffsetLLBuilder.offsetLL(longOffset); + if (deltaText.equals("node-LL")) { + deltaText = nodeOffsetPointLL(transformedLat, transformedLong); } - - // replace directionality - if (updatedNode.has(DIRECTIONALITY)) { - JsonNode directionality = updatedNode.get(DIRECTIONALITY); - String enumString = CommonUtils.enumToString(DirectionOfUseEnum.class, directionality.asText()); - if (enumString != null) { - updatedNode.set(DIRECTIONALITY, JsonUtils.newNode().put(enumString, EMPTY_FIELD_FLAG)); - } + } else if (NODE_LAT_LON.equals(deltaText)) { + transformedLat = LatitudeBuilder.j2735Latitude(latOffset); + transformedLong = LongitudeBuilder.j2735Longitude(longOffset); + } + + innerNode.set(deltaText, latLong); + latLong.put(LAT, transformedLat).put(LON, transformedLong); + ObjectNode deltaNode = JsonUtils.newNode().set(DELTA, innerNode); + return deltaNode; + } + + // -- Nodes with LL content Span at the equator when using a zoom of one: + // node-LL1 Node-LL-24B, -- within +- 22.634554 meters of last node + // node-LL2 Node-LL-28B, -- within +- 90.571389 meters of last node + // node-LL3 Node-LL-32B, -- within +- 362.31873 meters of last node + // node-LL4 Node-LL-36B, -- within +- 01.449308 Kmeters of last node + // node-LL5 Node-LL-44B, -- within +- 23.189096 Kmeters of last node + // node-LL6 Node-LL-48B, -- within +- 92.756481 Kmeters of last node + // node-LatLon Node-LLmD-64b, -- node is a full 32b Lat/Lon range + private static String nodeOffsetPointLL(long transformedLat, long transformedLon) { + long transformedLatabs = Math.abs(transformedLat); + long transformedLonabs = Math.abs(transformedLon); + if (((transformedLatabs & (-1 << 11)) == 0 + || (transformedLat < 0 && (transformedLatabs ^ (1 << 11)) == 0)) + && (transformedLonabs & (-1 << 11)) == 0 + || (transformedLon < 0 && ((transformedLonabs ^ (1 << 11)) == 0))) { + // 11 bit value + return "node-LL1"; + } else if (((transformedLatabs & (-1 << 13)) == 0 + || (transformedLat < 0 && (transformedLatabs ^ (1 << 13)) == 0)) + && (transformedLonabs & (-1 << 13)) == 0 + || (transformedLon < 0 && ((transformedLonabs ^ (1 << 13)) == 0))) { + // 13 bit value + return "node-LL2"; + } else if (((transformedLatabs & (-1 << 15)) == 0 + || (transformedLat < 0 && (transformedLatabs ^ (1 << 15)) == 0)) + && (transformedLonabs & (-1 << 15)) == 0 + || (transformedLon < 0 && ((transformedLonabs ^ (1 << 15)) == 0))) { + // 15 bit value + return "node-LL3"; + } else if (((transformedLatabs & (-1 << 17)) == 0 + || (transformedLat < 0 && (transformedLatabs ^ (1 << 17)) == 0)) + && (transformedLonabs & (-1 << 17)) == 0 + || (transformedLon < 0 && ((transformedLonabs ^ (1 << 17)) == 0))) { + // 17 bit value + return "node-LL4"; + } else if (((transformedLatabs & (-1 << 21)) == 0 + || (transformedLat < 0 && (transformedLatabs ^ (1 << 21)) == 0)) + && (transformedLonabs & (-1 << 21)) == 0 + || (transformedLon < 0 && ((transformedLonabs ^ (1 << 21)) == 0))) { + // 21 bit value + return "node-LL5"; + } else if (((transformedLatabs & (-1 << 23)) == 0 + || (transformedLat < 0 && (transformedLatabs ^ (1 << 23)) == 0)) + && (transformedLonabs & (-1 << 23)) == 0 + || (transformedLon < 0 && ((transformedLonabs ^ (1 << 23)) == 0))) { + // 23 bit value + return "node-LL6"; + } else { + throw new IllegalArgumentException( + "Invalid node lat/long offset: " + transformedLat + "/" + transformedLon + + ". Values must be between a range of -0.8388608/+0.8388607 degrees."); + } + + } + + /** + * Replaces geometry. + * + * @param geometry ObjectNode representing the geometry + */ + public static void replaceGeometry(ObjectNode geometry) { + + // direction HeadingSlice + // extent Extent OPTIONAL + // laneWidth LaneWidth OPTIONAL + // circle Circle + + // direction does not need to be replaced + + // extent does not need to be replaced (optional) + + // replace lane width + JsonNode laneWidth = geometry.get(LANE_WIDTH); + if (laneWidth != null) { + geometry.put(LANE_WIDTH, LaneWidthBuilder.laneWidth(JsonUtils.decimalValue(laneWidth))); + } + + // replace circle + replaceCircle(geometry.get(CIRCLE)); + } + + /** + * Replaces old region. + * + * @param oldRegion ObjectNode representing the old region + */ + public static void replaceOldRegion(ObjectNode oldRegion) { + + // old region == ValidRegion + // elements: + // direction - no changes + + // extent - no changes + JsonNode extentNode = oldRegion.get(EXTENT); + String extent = CommonUtils.enumToString(Extent.ExtentEnum.class, extentNode.asText()); + oldRegion.set(EXTENT, JsonUtils.newNode().put(extent, EMPTY_FIELD_FLAG)); + + // area - needs changes + replaceArea(oldRegion.get("area")); + } + + /** + * Replaces area. + * + * @param area JsonNode representing the area + */ + public static void replaceArea(JsonNode area) { + + // area contains one of: + // shapePointSet + // circle + // regionPointSet + + ObjectNode updatedNode = (ObjectNode) area; + + if (updatedNode.has(SHAPE_POINT_SET)) { + JsonNode shapePointSet = updatedNode.get(SHAPE_POINT_SET); + replaceShapePointSet(shapePointSet); + updatedNode.set(SHAPE_POINT_SET, shapePointSet); + } else if (updatedNode.has(CIRCLE)) { + replaceCircle(updatedNode.get(CIRCLE)); + } else if (updatedNode.has(REGION_POINT_SET)) { + replaceRegionPointSet(updatedNode.get(REGION_POINT_SET)); + } + } + + private static void replaceRegionPointSet(JsonNode regionPointSet) { + // regionPointSet contains: + // anchor + // zoom + // nodeList (regionList) + ObjectNode updatedNode = (ObjectNode) regionPointSet; + + // replace anchor (optional) + if (updatedNode.get(ANCHOR_POSITION) != null) { + JsonUtils.addNode(updatedNode, ANCHOR, + Position3DBuilder.dsrcPosition3D( + Position3DBuilder.odePosition3D(updatedNode.get(ANCHOR_POSITION)))); + updatedNode.remove(ANCHOR_POSITION); + } + + // zoom doesn't need replacement (also optional) + + // regionList is good as is and does not need replacement (required) + } + + /** + * Replaces circle. + * + * @param circle JsonNode representing the circle + */ + public static void replaceCircle(JsonNode circle) { + + // Circle ::= SEQUENCE + // center Position3D, + // radius Radius-B12, + // units DistanceUnits + + ObjectNode updatedNode = (ObjectNode) circle; + + JsonNode centerPosition = null; + if (updatedNode.has(POSITION)) { + centerPosition = updatedNode.get(POSITION); + updatedNode.remove(POSITION); + } else { + centerPosition = updatedNode.get(CENTER); + } + + // replace center + JsonUtils.addNode(updatedNode, CENTER, + Position3DBuilder.dsrcPosition3D(Position3DBuilder.odePosition3D(centerPosition))); + + // radius does not need replacement + + // replace units + if (updatedNode.has(UNITS)) { + JsonNode units = updatedNode.get(UNITS); + String enumString = CommonUtils.enumToString(DistanceUnitsEnum.class, units.asText()); + if (enumString != null) { + updatedNode.set(UNITS, JsonUtils.newNode().put(enumString, EMPTY_FIELD_FLAG)); } - - // replace node list - if (updatedNode.has(NODE_LIST)) { - ObjectNode nodeList = (ObjectNode) updatedNode.get(NODE_LIST); - if (nodeList.has(NODES)) { - ArrayNode nodes = transformNodeSetXY(nodeList.get(NODES)); - nodeList.set(NODES, nodes); - } else if (nodeList.has(COMPUTED)) { - JsonNode computedLane = nodeList.get(COMPUTED); - replaceComputedLane(computedLane); - } + } + } + + /** + * Replaces shape point set. + * + * @param shapePointSet JsonNode representing the shape point set + */ + public static void replaceShapePointSet(JsonNode shapePointSet) { + // shape point set contains: + // anchor + // lane width + // directionality + // node list + + ObjectNode updatedNode = (ObjectNode) shapePointSet; + + // replace anchor + if (updatedNode.has(ANCHOR)) { + JsonUtils.addNode(updatedNode, ANCHOR, + Position3DBuilder.dsrcPosition3D( + Position3DBuilder.odePosition3D(updatedNode.get(ANCHOR)))); + } + + // replace lane width + if (updatedNode.has(LANE_WIDTH)) { + updatedNode.put(LANE_WIDTH, + LaneWidthBuilder.laneWidth(JsonUtils.decimalValue(updatedNode.get(LANE_WIDTH)))); + } + + // replace directionality + if (updatedNode.has(DIRECTIONALITY)) { + JsonNode directionality = updatedNode.get(DIRECTIONALITY); + String enumString = + CommonUtils.enumToString(DirectionOfUseEnum.class, directionality.asText()); + if (enumString != null) { + updatedNode.set(DIRECTIONALITY, JsonUtils.newNode().put(enumString, EMPTY_FIELD_FLAG)); } - } - - public static void replaceComputedLane(JsonNode jsonNode) { - ObjectNode updatedNode = (ObjectNode) jsonNode; - - // Nothing to do for referenceLaneId LaneID - - // offsetXaxis CHOICE - // small DrivenLineOffsetSm, - // large DrivenLineOffsetLg - // - replaceScale(updatedNode, OFFSET_X_AXIS); - - // offsetYaxis CHOICE - // small DrivenLineOffsetSm, - // large DrivenLineOffsetLg - // - replaceScale(updatedNode, OFFSET_Y_AXIS); - - // rotateXY Angle OPTIONAL - if (updatedNode.has(ROTATE_XY)) { - updatedNode.put(ROTATE_XY, AngleBuilder.angle(JsonUtils.decimalValue(updatedNode.get(ROTATE_XY)))); + } + + // replace node list + if (updatedNode.has(NODE_LIST)) { + ObjectNode nodeList = (ObjectNode) updatedNode.get(NODE_LIST); + if (nodeList.has(NODES)) { + ArrayNode nodes = transformNodeSetXY(nodeList.get(NODES)); + nodeList.set(NODES, nodes); + } else if (nodeList.has(COMPUTED)) { + JsonNode computedLane = nodeList.get(COMPUTED); + replaceComputedLane(computedLane); } - - // scaleXaxis Scale-B12 OPTIONAL - if (updatedNode.has(SCALE_X_AXIS)) { - updatedNode.put(SCALE_X_AXIS, ScaleB12Builder.scaleB12(JsonUtils.decimalValue(updatedNode.get(SCALE_X_AXIS)))); + } + } + + /** + * Replaces computed lane. + * + * @param jsonNode JsonNode representing the computed lane + */ + public static void replaceComputedLane(JsonNode jsonNode) { + ObjectNode updatedNode = (ObjectNode) jsonNode; + + // Nothing to do for referenceLaneId LaneID + + // offsetXaxis CHOICE + // small DrivenLineOffsetSm, + // large DrivenLineOffsetLg + + replaceScale(updatedNode, OFFSET_X_AXIS); + + // offsetYaxis CHOICE + // small DrivenLineOffsetSm, + // large DrivenLineOffsetLg + + replaceScale(updatedNode, OFFSET_Y_AXIS); + + // rotateXY Angle OPTIONAL + if (updatedNode.has(ROTATE_XY)) { + updatedNode.put(ROTATE_XY, + AngleBuilder.angle(JsonUtils.decimalValue(updatedNode.get(ROTATE_XY)))); + } + + // scaleXaxis Scale-B12 OPTIONAL + if (updatedNode.has(SCALE_X_AXIS)) { + updatedNode.put(SCALE_X_AXIS, + ScaleB12Builder.scaleB12(JsonUtils.decimalValue(updatedNode.get(SCALE_X_AXIS)))); + } + + // scaleYaxis Scale-B12 OPTIONAL + if (updatedNode.has(SCALE_Y_AXIS)) { + updatedNode.put(SCALE_Y_AXIS, + ScaleB12Builder.scaleB12(JsonUtils.decimalValue(updatedNode.get(SCALE_Y_AXIS)))); + } + } + + /** + * Replaces scale. + * + * @param updatedNode ObjectNode representing the updated node + * @param scale String representing the scale + */ + public static void replaceScale(ObjectNode updatedNode, String scale) { + if (updatedNode.has(scale)) { + int scaleX = updatedNode.get(scale).asInt(); + String key = "large"; + if (-2048 <= scaleX && scaleX <= 2047) { + key = "small"; } - // scaleYaxis Scale-B12 OPTIONAL - if (updatedNode.has(SCALE_Y_AXIS)) { - updatedNode.put(SCALE_Y_AXIS, ScaleB12Builder.scaleB12(JsonUtils.decimalValue(updatedNode.get(SCALE_Y_AXIS)))); + ObjectNode node = JsonUtils.newObjectNode(key, scaleX); + updatedNode.set(scale, node); + } + } + + /** + * Transforms node set XY. + * + * @param inputNodeList JsonNode representing the input node list + * @return ArrayNode representing the transformed node list + */ + public static ArrayNode transformNodeSetXY(JsonNode inputNodeList) { + + //// EXPECTED INPUT: + // "nodes": [] + + // EXPECTED OUTPUT: + // + // . + // . + // . + // . + // + + ArrayNode outputNodeList = JsonUtils.newNode().arrayNode(); + + if (inputNodeList.isArray()) { + Iterator nodeListIter = inputNodeList.elements(); + + while (nodeListIter.hasNext()) { + JsonNode inputNode = nodeListIter.next(); + outputNodeList.add(transformNodeXY(inputNode)); } - } - - public static void replaceScale(ObjectNode updatedNode, String scale) { - if (updatedNode.has(scale)) { - int scaleX = updatedNode.get(scale).asInt(); - String key = "large"; - if (-2048 <= scaleX && scaleX <= 2047) { - key = "small"; - } - - ObjectNode node = JsonUtils.newObjectNode(key, scaleX); - updatedNode.set(scale, node); - } - } - - public static ArrayNode transformNodeSetXY(JsonNode inputNodeList) { + } - //// EXPECTED INPUT: - // "nodes": [] + return outputNodeList; + } - // EXPECTED OUTPUT: - // - // . - // . - // . - // . - // + /** + * Transformed a NodeXY. + * + * @param oldNode JsonNode representing the old node + * @return ObjectNode representing the transformed node + */ + public static JsonNode transformNodeXY(JsonNode oldNode) { - ArrayNode outputNodeList = JsonUtils.newNode().arrayNode(); + // nodexy contains: + // delta NodeOffsetPointXY + // attributes NodeAttributeSetXY (optional) - if (inputNodeList.isArray()) { - Iterator nodeListIter = inputNodeList.elements(); + ObjectNode nodexy = transformNodeOffsetPointXY(oldNode); - while (nodeListIter.hasNext()) { - JsonNode inputNode = nodeListIter.next(); - outputNodeList.add(transformNodeXY(inputNode)); - } - } + if (oldNode.has(ATTRIBUTES)) { + nodexy.set(ATTRIBUTES, transformNodeAttributeSetXY(oldNode.get(ATTRIBUTES))); + } - return outputNodeList; - } + return nodexy; + } - public static JsonNode transformNodeXY(JsonNode oldNode) { + private static ObjectNode transformNodeAttributeSetXY(JsonNode jsonNode) { + // localNode NodeAttributeXYList OPTIONAL, + // disabled SegmentAttributeXYList OPTIONAL, + // enabled SegmentAttributeXYList OPTIONAL, + // data LaneDataAttributeList OPTIONAL, + // dWidth Offset-B10 OPTIONAL, + // dElevation Offset-B10 OPTIONAL, - // nodexy contains: - // delta NodeOffsetPointXY - // attributes NodeAttributeSetXY (optional) + ObjectNode updatedNode = JsonUtils.newNode(); - ObjectNode nodexy = transformNodeOffsetPointXY(oldNode); + // localNode NodeAttributeXYList does not need to be replaced - if (oldNode.has(ATTRIBUTES)) { - nodexy.set(ATTRIBUTES, transformNodeAttributeSetXY(oldNode.get(ATTRIBUTES))); - } + // disabled SegmentAttributeXYList does not need to be replaced + // enabled SegmentAttributeXYList does not need to be replaced - return nodexy; - } + if (jsonNode.has(DATA)) { + updatedNode.set(DATA, transformLaneDataAttributeList(jsonNode.get(DATA))); + } + if (jsonNode.has(D_WIDTH)) { + updatedNode.put(D_WIDTH, + OffsetXyBuilder.offsetXy(JsonUtils.decimalValue(jsonNode.get(D_WIDTH)))); + } - private static ObjectNode transformNodeAttributeSetXY(JsonNode jsonNode) { - // localNode NodeAttributeXYList OPTIONAL, - // disabled SegmentAttributeXYList OPTIONAL, - // enabled SegmentAttributeXYList OPTIONAL, - // data LaneDataAttributeList OPTIONAL, - // dWidth Offset-B10 OPTIONAL, - // dElevation Offset-B10 OPTIONAL, + if (jsonNode.has(D_ELEVATION)) { + updatedNode.put(D_ELEVATION, + OffsetXyBuilder.offsetXy(JsonUtils.decimalValue(jsonNode.get(D_ELEVATION)))); + } + return updatedNode; + } - ObjectNode updatedNode = JsonUtils.newNode(); + private static ArrayNode transformLaneDataAttributeList(JsonNode laneDataAttribute) { - // localNode NodeAttributeXYList does not need to be replaced + ArrayNode updatedLaneDataAttributeList = JsonUtils.newNode().arrayNode(); - // disabled SegmentAttributeXYList does not need to be replaced - // enabled SegmentAttributeXYList does not need to be replaced + if (laneDataAttribute.isArray()) { + Iterator laneDataAttributeListIter = laneDataAttribute.elements(); - if (jsonNode.has(DATA)) { - updatedNode.set(DATA, transformLaneDataAttributeList(jsonNode.get(DATA))); + while (laneDataAttributeListIter.hasNext()) { + JsonNode oldNode = laneDataAttributeListIter.next(); + replaceLaneDataAttribute(oldNode); + updatedLaneDataAttributeList.add(oldNode); } - if (jsonNode.has(D_WIDTH)) { - updatedNode.put(D_WIDTH, OffsetXyBuilder.offsetXy(JsonUtils.decimalValue(jsonNode.get(D_WIDTH)))); - } - - if (jsonNode.has(D_ELEVATION)) { - updatedNode.put(D_ELEVATION, OffsetXyBuilder.offsetXy(JsonUtils.decimalValue(jsonNode.get(D_ELEVATION)))); + } + return updatedLaneDataAttributeList; + } + + /** + * Replaces lane data attribute. + * + * @param oldNode JsonNode representing the old node + */ + public static void replaceLaneDataAttribute(JsonNode oldNode) { + // choice between 1 of the following: + // pathEndPointAngle DeltaAngle + // laneCrownPointCenter RoadwayCrownAngle + // laneCrownPointLeft RoadwayCrownAngle + // laneCrownPointRight RoadwayCrownAngle + // laneAngle MergeDivergeNodeAngle + // speedLimits SpeedLimitList + + ObjectNode updatedNode = (ObjectNode) oldNode; + + // pathEndPointAngle DeltaAngle does not need to be replaced + if (oldNode.has("pathEndPointAngle")) { + // do nothing + } else if (oldNode.has(LANE_CROWN_POINT_CENTER)) { + updatedNode.put(LANE_CROWN_POINT_CENTER, RoadwayCrownAngleBuilder + .roadwayCrownAngle(JsonUtils.decimalValue(updatedNode.get(LANE_CROWN_POINT_CENTER)))); + } else if (oldNode.has(LANE_CROWN_POINT_LEFT)) { + updatedNode.put(LANE_CROWN_POINT_LEFT, RoadwayCrownAngleBuilder + .roadwayCrownAngle(JsonUtils.decimalValue(updatedNode.get(LANE_CROWN_POINT_LEFT)))); + } else if (oldNode.has(LANE_CROWN_POINT_RIGHT)) { + updatedNode.put(LANE_CROWN_POINT_RIGHT, RoadwayCrownAngleBuilder + .roadwayCrownAngle(JsonUtils.decimalValue(updatedNode.get(LANE_CROWN_POINT_RIGHT)))); + } else if (oldNode.has(LANE_ANGLE)) { + updatedNode.put(LANE_ANGLE, + MergeDivergeNodeAngleBuilder.mergeDivergeNodeAngle( + JsonUtils.decimalValue(updatedNode.get(LANE_ANGLE)))); + } else if (oldNode.has(SPEED_LIMITS)) { + replaceSpeedLimitList(updatedNode.get(SPEED_LIMITS)); + } + } + + private static void replaceSpeedLimitList(JsonNode speedLimitList) { + + if (speedLimitList.isArray()) { + Iterator speedLimitListIter = speedLimitList.elements(); + + while (speedLimitListIter.hasNext()) { + JsonNode oldNode = speedLimitListIter.next(); + replaceRegulatorySpeedLimit(oldNode); } - return updatedNode; - } - - private static ArrayNode transformLaneDataAttributeList(JsonNode laneDataAttribute) { - - ArrayNode updatedLaneDataAttributeList = JsonUtils.newNode().arrayNode(); - - if (laneDataAttribute.isArray()) { - Iterator laneDataAttributeListIter = laneDataAttribute.elements(); - - while (laneDataAttributeListIter.hasNext()) { - JsonNode oldNode = laneDataAttributeListIter.next(); - replaceLaneDataAttribute(oldNode); - updatedLaneDataAttributeList.add(oldNode); - } - } - return updatedLaneDataAttributeList; - } - - public static void replaceLaneDataAttribute(JsonNode oldNode) { - // choice between 1 of the following: - // pathEndPointAngle DeltaAngle - // laneCrownPointCenter RoadwayCrownAngle - // laneCrownPointLeft RoadwayCrownAngle - // laneCrownPointRight RoadwayCrownAngle - // laneAngle MergeDivergeNodeAngle - // speedLimits SpeedLimitList - - ObjectNode updatedNode = (ObjectNode) oldNode; - - // pathEndPointAngle DeltaAngle does not need to be replaced - if (oldNode.has("pathEndPointAngle")) { - // do nothing - } else if (oldNode.has(LANE_CROWN_POINT_CENTER)) { - updatedNode.put(LANE_CROWN_POINT_CENTER, RoadwayCrownAngleBuilder - .roadwayCrownAngle(JsonUtils.decimalValue(updatedNode.get(LANE_CROWN_POINT_CENTER)))); - } else if (oldNode.has(LANE_CROWN_POINT_LEFT)) { - updatedNode.put(LANE_CROWN_POINT_LEFT, RoadwayCrownAngleBuilder - .roadwayCrownAngle(JsonUtils.decimalValue(updatedNode.get(LANE_CROWN_POINT_LEFT)))); - } else if (oldNode.has(LANE_CROWN_POINT_RIGHT)) { - updatedNode.put(LANE_CROWN_POINT_RIGHT, RoadwayCrownAngleBuilder - .roadwayCrownAngle(JsonUtils.decimalValue(updatedNode.get(LANE_CROWN_POINT_RIGHT)))); - } else if (oldNode.has(LANE_ANGLE)) { - updatedNode.put(LANE_ANGLE, - MergeDivergeNodeAngleBuilder.mergeDivergeNodeAngle(JsonUtils.decimalValue(updatedNode.get(LANE_ANGLE)))); - } else if (oldNode.has(SPEED_LIMITS)) { - replaceSpeedLimitList(updatedNode.get(SPEED_LIMITS)); - } - } - - private static void replaceSpeedLimitList(JsonNode speedLimitList) { - - if (speedLimitList.isArray()) { - Iterator speedLimitListIter = speedLimitList.elements(); - - while (speedLimitListIter.hasNext()) { - JsonNode oldNode = speedLimitListIter.next(); - replaceRegulatorySpeedLimit(oldNode); - } - } - } - - private static void replaceRegulatorySpeedLimit(JsonNode regulatorySpeedLimitNode) { - // contains: - // type SpeedLimitType - // speed Velocity - - ObjectNode updatedNode = (ObjectNode) regulatorySpeedLimitNode; - - // type - JsonNode typeNode = regulatorySpeedLimitNode.get(TYPE); - String type = CommonUtils.enumToString(SpeedLimitTypeEnum.class, typeNode.asText()); - if (type != null) { - updatedNode.set(TYPE, JsonUtils.newNode().put(type, EMPTY_FIELD_FLAG)); - } - - // replace velocity - updatedNode.put(SPEED, VelocityBuilder.velocity(JsonUtils.decimalValue(updatedNode.get(SPEED)))); - - } - - public static ObjectNode transformNodeOffsetPointXY(JsonNode oldNode) { - //// EXPECTED INPUT: - // - // "nodeLong": "0.0031024", - // "nodeLat": "0.0014506", - // "delta": "node-LL3" - // - - //// EXPECTED OUTPUT: - // - // . - // .. - // ...14506 - // ...31024 - // .. - // . - // - - JsonNode delta = oldNode.get(DELTA); - - ObjectNode innerNode = JsonUtils.newNode(); - ObjectNode deltaNode = JsonUtils.newNode(); - String deltaText = delta.asText(); - if (deltaText.startsWith(NODE_XY)) { - BigDecimal xOffset = JsonUtils.decimalValue(oldNode.get(X)); - BigDecimal yOffset = JsonUtils.decimalValue(oldNode.get(Y)); - Long transformedX = OffsetXyBuilder.offsetXy(xOffset); - Long transformedY = OffsetXyBuilder.offsetXy(yOffset); - ObjectNode xy = JsonUtils.newNode().put(X, transformedX).put(Y, transformedY); - if (deltaText.equals(NODE_XY)) { - innerNode.set(nodeOffsetPointXY(transformedX, transformedY), xy); - } else { - innerNode.set(deltaText, xy); - } - } else if (deltaText.startsWith(NODE_LAT_LON)) { - BigDecimal lonOffset = JsonUtils.decimalValue(oldNode.get(NODE_LONG)); - BigDecimal latOffset = JsonUtils.decimalValue(oldNode.get(NODE_LAT)); - Long transformedLon = LatitudeBuilder.j2735Latitude(lonOffset); - Long transformedLat = LongitudeBuilder.j2735Longitude(latOffset); - ObjectNode latLong = JsonUtils.newNode().put(LON, transformedLon).put(LAT, transformedLat); - if (deltaText.equals(NODE_XY)) { - innerNode.set(nodeOffsetPointLL(transformedLat, transformedLon), latLong); - } else { - innerNode.set(deltaText, latLong); - } + } + } + + private static void replaceRegulatorySpeedLimit(JsonNode regulatorySpeedLimitNode) { + // contains: + // type SpeedLimitType + // speed Velocity + + ObjectNode updatedNode = (ObjectNode) regulatorySpeedLimitNode; + + // type + JsonNode typeNode = regulatorySpeedLimitNode.get(TYPE); + String type = CommonUtils.enumToString(SpeedLimitTypeEnum.class, typeNode.asText()); + if (type != null) { + updatedNode.set(TYPE, JsonUtils.newNode().put(type, EMPTY_FIELD_FLAG)); + } + + // replace velocity + updatedNode.put(SPEED, + VelocityBuilder.velocity(JsonUtils.decimalValue(updatedNode.get(SPEED)))); + + } + + /** + * Transformed node offset point XY. + * + * @param oldNode JsonNode representing the old node + * @return ObjectNode representing the transformed node + */ + public static ObjectNode transformNodeOffsetPointXY(JsonNode oldNode) { + //// EXPECTED INPUT: + + // "nodeLong": "0.0031024", + // "nodeLat": "0.0014506", + // "delta": "node-LL3" + + //// EXPECTED OUTPUT: + // + // . + // .. + // ...14506 + // ...31024 + // .. + // . + // + + JsonNode delta = oldNode.get(DELTA); + + ObjectNode innerNode = JsonUtils.newNode(); + ObjectNode deltaNode = JsonUtils.newNode(); + String deltaText = delta.asText(); + if (deltaText.startsWith(NODE_XY)) { + BigDecimal offsetX = JsonUtils.decimalValue(oldNode.get(X)); + BigDecimal offsetY = JsonUtils.decimalValue(oldNode.get(Y)); + Long transformedX = OffsetXyBuilder.offsetXy(offsetX); + Long transformedY = OffsetXyBuilder.offsetXy(offsetY); + ObjectNode xy = JsonUtils.newNode().put(X, transformedX).put(Y, transformedY); + if (deltaText.equals(NODE_XY)) { + innerNode.set(nodeOffsetPointXY(transformedX, transformedY), xy); + } else { + innerNode.set(deltaText, xy); } - - deltaNode.set(DELTA, innerNode); - - return deltaNode; - - } - - // NodeOffsetPointXY contains one of: - // node-XY1 Node-XY-20b, -- node is within 5.11m of last node - // node-XY2 Node-XY-22b, -- node is within 10.23m of last node - // node-XY3 Node-XY-24b, -- node is within 20.47m of last node - // node-XY4 Node-XY-26b, -- node is within 40.96m of last node - // node-XY5 Node-XY-28b, -- node is within 81.91m of last node - // node-XY6 Node-XY-32b, -- node is within 327.67m of last node - // node-LatLon Node-LLmD-64b, -- node is a full 32b Lat/Lon range - private static String nodeOffsetPointXY(long transformedX, long transformedY) { - long transformed = Math.abs(transformedX) | Math.abs(transformedY); - if ((transformed & (-1 << 10)) == 0) { - return "node-XY1"; - } else if ((transformed & (-1 << 11)) == 0) { - return "node-XY2"; - } else if ((transformed & (-1 << 12)) == 0) { - return "node-XY3"; - } else if ((transformed & (-1 << 13)) == 0) { - return "node-XY4"; - } else if ((transformed & (-1 << 14)) == 0) { - return "node-XY5"; - } else if ((transformed & (-1 << 16)) == 0) { - return "node-XY6"; + } else if (deltaText.startsWith(NODE_LAT_LON)) { + BigDecimal lonOffset = JsonUtils.decimalValue(oldNode.get(NODE_LONG)); + BigDecimal latOffset = JsonUtils.decimalValue(oldNode.get(NODE_LAT)); + Long transformedLon = LatitudeBuilder.j2735Latitude(lonOffset); + Long transformedLat = LongitudeBuilder.j2735Longitude(latOffset); + ObjectNode latLong = JsonUtils.newNode().put(LON, transformedLon).put(LAT, transformedLat); + if (deltaText.equals(NODE_XY)) { + innerNode.set(nodeOffsetPointLL(transformedLat, transformedLon), latLong); } else { - throw new IllegalArgumentException("Invalid node X/Y offset: " + transformedX + "/" + transformedY - + ". Values must be between a range of -327.68/+327.67 meters."); + innerNode.set(deltaText, latLong); + } + } + + deltaNode.set(DELTA, innerNode); + + return deltaNode; + + } + + // NodeOffsetPointXY contains one of: + // node-XY1 Node-XY-20b, -- node is within 5.11m of last node + // node-XY2 Node-XY-22b, -- node is within 10.23m of last node + // node-XY3 Node-XY-24b, -- node is within 20.47m of last node + // node-XY4 Node-XY-26b, -- node is within 40.96m of last node + // node-XY5 Node-XY-28b, -- node is within 81.91m of last node + // node-XY6 Node-XY-32b, -- node is within 327.67m of last node + // node-LatLon Node-LLmD-64b, -- node is a full 32b Lat/Lon range + private static String nodeOffsetPointXY(long transformedX, long transformedY) { + long transformed = Math.abs(transformedX) | Math.abs(transformedY); + if ((transformed & (-1 << 10)) == 0) { + return "node-XY1"; + } else if ((transformed & (-1 << 11)) == 0) { + return "node-XY2"; + } else if ((transformed & (-1 << 12)) == 0) { + return "node-XY3"; + } else if ((transformed & (-1 << 13)) == 0) { + return "node-XY4"; + } else if ((transformed & (-1 << 14)) == 0) { + return "node-XY5"; + } else if ((transformed & (-1 << 16)) == 0) { + return "node-XY6"; + } else { + throw new IllegalArgumentException( + "Invalid node X/Y offset: " + transformedX + "/" + transformedY + + ". Values must be between a range of -327.68/+327.67 meters."); + } + } + + /** + * Ensures compliance with the J2735 2024 standard by checking + * for old fields in the given data frame. + * + * @param dataFrame the JSON object representing the data frame to be checked + * @throws NoncompliantFieldsException if any old fields are found + */ + public static void ensureComplianceWithJ2735Revision2024(ObjectNode dataFrame) + throws NoncompliantFieldsException { + // Check and throw exception if old fields are found + Set nonCompliantFields = Set.of( + SSP_MSG_CONTENT, + SSP_MSG_TYPES, + SSP_LOCATION_RIGHTS, + SSP_TIM_RIGHTS, + SSP_MSG_RIGHTS_1, + SSP_MSG_RIGHTS_2, + NOT_USED, + NOT_USED_1, + NOT_USED_2, + NOT_USED_3, + DURATON_TIME_MISSPELLED + ); + ArrayList violations = new ArrayList<>(); + for (String violationName : nonCompliantFields) { + if (dataFrame.has(violationName)) { + violations.add(violationName); } - } + } + if (!violations.isEmpty()) { + throw new NoncompliantFieldsException( + String.format( + "Data frame contains the following old fields that are not compliant with " + + "J2735 2024: [%s]. Deserialization should prevent this.", + violations)); + } + } + + /** + * Exception thrown when noncompliant fields are found in the data frame. + */ + public static class NoncompliantFieldsException extends Exception { + public NoncompliantFieldsException(String message) { + super(message); + } + } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/VehicleDataBuilder.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/VehicleDataBuilder.java index 0915a7a97..cc0692a12 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/VehicleDataBuilder.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/builders/VehicleDataBuilder.java @@ -16,7 +16,6 @@ package us.dot.its.jpo.ode.plugin.j2735.builders; import com.fasterxml.jackson.databind.JsonNode; - import us.dot.its.jpo.ode.plugin.j2735.J2735VehicleData; public class VehicleDataBuilder { @@ -37,8 +36,8 @@ public static J2735VehicleData genericVehicleData(JsonNode vehicleData) { if (vehicleData.get("mass") != null) { vd.setMass(MassOrWeightBuilder.genericVehicleMass(vehicleData.get("mass"))); } - if (vehicleData.get("trailerWeight") != null) { - vd.setTrailerWeight(MassOrWeightBuilder.genericTrailerWeight(vehicleData.get("trailerWeight"))); + if (vehicleData.get("doNotUse") != null) { + vd.setDoNotUse(MassOrWeightBuilder.genericTrailerWeight(vehicleData.get("doNotUse"))); } return vd; diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Angle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Angle.java new file mode 100644 index 000000000..86182260b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Angle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Angle.AngleDeserializer.class) +public class Angle extends Asn1Integer { + + public Angle() { + super(0L, 28800L); + } + + @JsonCreator + public Angle(long value) { + this(); + this.value = value; + } + + public static class AngleDeserializer extends IntegerDeserializer { + public AngleDeserializer() { + super(Angle.class); + } + + @Override + protected Angle construct() { + return new Angle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ComputedLane.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ComputedLane.java new file mode 100644 index 000000000..b93094c46 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ComputedLane.java @@ -0,0 +1,107 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_ComputedLane; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ComputedLane extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "referenceLaneId") + @JsonProperty("referenceLaneId") + private LaneID referenceLaneId; + @Asn1Property(tag = 1, name = "offsetXaxis") + @JsonProperty("offsetXaxis") + private OffsetXaxisChoice offsetXaxis; + @Asn1Property(tag = 2, name = "offsetYaxis") + @JsonProperty("offsetYaxis") + private OffsetYaxisChoice offsetYaxis; + @Asn1Property(tag = 3, name = "rotateXY", optional = true) + @JsonProperty("rotateXY") + private Angle rotateXY; + @Asn1Property(tag = 4, name = "scaleXaxis", optional = true) + @JsonProperty("scaleXaxis") + private Scale_B12 scaleXaxis; + @Asn1Property(tag = 5, name = "scaleYaxis", optional = true) + @JsonProperty("scaleYaxis") + private Scale_B12 scaleYaxis; + @Asn1Property(tag = 6, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class OffsetXaxisChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "small") + @JsonProperty("small") + private DrivenLineOffsetSm small; + @Asn1Property(tag = 1, name = "large") + @JsonProperty("large") + private DrivenLineOffsetLg large; + + OffsetXaxisChoice() { + super(false); + } + } + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class OffsetYaxisChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "small") + @JsonProperty("small") + private DrivenLineOffsetSm small; + @Asn1Property(tag = 1, name = "large") + @JsonProperty("large") + private DrivenLineOffsetLg large; + + OffsetYaxisChoice() { + super(false); + } + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_ComputedLane.class, 1L, 4L); + } + } + + ComputedLane() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DYear.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DYear.java new file mode 100644 index 000000000..bf4ce23f5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DYear.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DYear.DYearDeserializer.class) +public class DYear extends Asn1Integer { + + public DYear() { + super(0L, 4095L); + } + + @JsonCreator + public DYear(long value) { + this(); + this.value = value; + } + + public static class DYearDeserializer extends IntegerDeserializer { + public DYearDeserializer() { + super(DYear.class); + } + + @Override + protected DYear construct() { + return new DYear(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DeltaAngle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DeltaAngle.java new file mode 100644 index 000000000..e28d2e173 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DeltaAngle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DeltaAngle.DeltaAngleDeserializer.class) +public class DeltaAngle extends Asn1Integer { + + public DeltaAngle() { + super(-150L, 150L); + } + + @JsonCreator + public DeltaAngle(long value) { + this(); + this.value = value; + } + + public static class DeltaAngleDeserializer extends IntegerDeserializer { + public DeltaAngleDeserializer() { + super(DeltaAngle.class); + } + + @Override + protected DeltaAngle construct() { + return new DeltaAngle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DescriptiveName.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DescriptiveName.java new file mode 100644 index 000000000..a292428b2 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DescriptiveName.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class DescriptiveName extends IA5String { + + public DescriptiveName() { + super(1, 63); + } + + @JsonCreator + public DescriptiveName(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetLg.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetLg.java new file mode 100644 index 000000000..046a5b74b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetLg.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DrivenLineOffsetLg.DrivenLineOffsetLgDeserializer.class) +public class DrivenLineOffsetLg extends Asn1Integer { + + public DrivenLineOffsetLg() { + super(-32767L, 32767L); + } + + @JsonCreator + public DrivenLineOffsetLg(long value) { + this(); + this.value = value; + } + + public static class DrivenLineOffsetLgDeserializer extends IntegerDeserializer { + public DrivenLineOffsetLgDeserializer() { + super(DrivenLineOffsetLg.class); + } + + @Override + protected DrivenLineOffsetLg construct() { + return new DrivenLineOffsetLg(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetSm.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetSm.java new file mode 100644 index 000000000..af6fd6530 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/DrivenLineOffsetSm.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = DrivenLineOffsetSm.DrivenLineOffsetSmDeserializer.class) +public class DrivenLineOffsetSm extends Asn1Integer { + + public DrivenLineOffsetSm() { + super(-2047L, 2047L); + } + + @JsonCreator + public DrivenLineOffsetSm(long value) { + this(); + this.value = value; + } + + public static class DrivenLineOffsetSmDeserializer extends IntegerDeserializer { + public DrivenLineOffsetSmDeserializer() { + super(DrivenLineOffsetSm.class); + } + + @Override + protected DrivenLineOffsetSm construct() { + return new DrivenLineOffsetSm(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Elevation.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Elevation.java new file mode 100644 index 000000000..8cc6ad4d3 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Elevation.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Elevation.ElevationDeserializer.class) +public class Elevation extends Asn1Integer { + + public Elevation() { + super(-4096L, 61439L); + } + + @JsonCreator + public Elevation(long value) { + this(); + this.value = value; + } + + public static class ElevationDeserializer extends IntegerDeserializer { + public ElevationDeserializer() { + super(Elevation.class); + } + + @Override + protected Elevation construct() { + return new Elevation(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Extent.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Extent.java new file mode 100644 index 000000000..4cac2a61e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Extent.java @@ -0,0 +1,61 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = ExtentSerializer.class) +@JsonDeserialize(using = ExtentDeserializer.class) +public enum Extent implements Asn1Enumerated { + USEINSTANTLYONLY(0, "useInstantlyOnly"), USEFOR3METERS(1, "useFor3meters"), USEFOR10METERS(2, + "useFor10meters"), USEFOR50METERS(3, "useFor50meters"), USEFOR100METERS(4, + "useFor100meters"), USEFOR500METERS(5, "useFor500meters"), USEFOR1000METERS(6, + "useFor1000meters"), USEFOR5000METERS(7, "useFor5000meters"), USEFOR10000METERS(8, + "useFor10000meters"), USEFOR50000METERS(9, "useFor50000meters"), USEFOR100000METERS( + 10, "useFor100000meters"), USEFOR500000METERS(11, + "useFor500000meters"), USEFOR1000000METERS(12, + "useFor1000000meters"), USEFOR5000000METERS(13, + "useFor5000000meters"), USEFOR10000000METERS(14, + "useFor10000000meters"), FOREVER(15, + "forever"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private Extent(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 15; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentDeserializer.java new file mode 100644 index 000000000..e976def33 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class ExtentDeserializer extends EnumeratedDeserializer { + + ExtentDeserializer() { + super(Extent.class); + } + + @Override + protected Extent[] listEnumValues() { + return Extent.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentSerializer.java new file mode 100644 index 000000000..b527d6de2 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/ExtentSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class ExtentSerializer extends EnumeratedSerializer { + + ExtentSerializer() { + super(Extent.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/FurtherInfoID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/FurtherInfoID.java new file mode 100644 index 000000000..8e77ca552 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/FurtherInfoID.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import us.dot.its.jpo.ode.plugin.types.Asn1OctetString; + +public class FurtherInfoID extends Asn1OctetString { + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return value; + } + + public FurtherInfoID() { + super(2, 2); + } + + @JsonCreator + public FurtherInfoID(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSlice.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSlice.java new file mode 100644 index 000000000..11c739dc5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSlice.java @@ -0,0 +1,168 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.types.Asn1Bitstring; + +@JsonDeserialize(using = HeadingSliceDeserializer.class) +public class HeadingSlice extends Asn1Bitstring { + + public boolean isFrom000_0to022_5degrees() { + return get(0); + } + + public void setFrom000_0to022_5degrees(boolean from000_0to022_5degrees) { + set(0, from000_0to022_5degrees); + } + + public boolean isFrom022_5to045_0degrees() { + return get(1); + } + + public void setFrom022_5to045_0degrees(boolean from022_5to045_0degrees) { + set(1, from022_5to045_0degrees); + } + + public boolean isFrom045_0to067_5degrees() { + return get(2); + } + + public void setFrom045_0to067_5degrees(boolean from045_0to067_5degrees) { + set(2, from045_0to067_5degrees); + } + + public boolean isFrom067_5to090_0degrees() { + return get(3); + } + + public void setFrom067_5to090_0degrees(boolean from067_5to090_0degrees) { + set(3, from067_5to090_0degrees); + } + + public boolean isFrom090_0to112_5degrees() { + return get(4); + } + + public void setFrom090_0to112_5degrees(boolean from090_0to112_5degrees) { + set(4, from090_0to112_5degrees); + } + + public boolean isFrom112_5to135_0degrees() { + return get(5); + } + + public void setFrom112_5to135_0degrees(boolean from112_5to135_0degrees) { + set(5, from112_5to135_0degrees); + } + + public boolean isFrom135_0to157_5degrees() { + return get(6); + } + + public void setFrom135_0to157_5degrees(boolean from135_0to157_5degrees) { + set(6, from135_0to157_5degrees); + } + + public boolean isFrom157_5to180_0degrees() { + return get(7); + } + + public void setFrom157_5to180_0degrees(boolean from157_5to180_0degrees) { + set(7, from157_5to180_0degrees); + } + + public boolean isFrom180_0to202_5degrees() { + return get(8); + } + + public void setFrom180_0to202_5degrees(boolean from180_0to202_5degrees) { + set(8, from180_0to202_5degrees); + } + + public boolean isFrom202_5to225_0degrees() { + return get(9); + } + + public void setFrom202_5to225_0degrees(boolean from202_5to225_0degrees) { + set(9, from202_5to225_0degrees); + } + + public boolean isFrom225_0to247_5degrees() { + return get(10); + } + + public void setFrom225_0to247_5degrees(boolean from225_0to247_5degrees) { + set(10, from225_0to247_5degrees); + } + + public boolean isFrom247_5to270_0degrees() { + return get(11); + } + + public void setFrom247_5to270_0degrees(boolean from247_5to270_0degrees) { + set(11, from247_5to270_0degrees); + } + + public boolean isFrom270_0to292_5degrees() { + return get(12); + } + + public void setFrom270_0to292_5degrees(boolean from270_0to292_5degrees) { + set(12, from270_0to292_5degrees); + } + + public boolean isFrom292_5to315_0degrees() { + return get(13); + } + + public void setFrom292_5to315_0degrees(boolean from292_5to315_0degrees) { + set(13, from292_5to315_0degrees); + } + + public boolean isFrom315_0to337_5degrees() { + return get(14); + } + + public void setFrom315_0to337_5degrees(boolean from315_0to337_5degrees) { + set(14, from315_0to337_5degrees); + } + + public boolean isFrom337_5to360_0degrees() { + return get(15); + } + + public void setFrom337_5to360_0degrees(boolean from337_5to360_0degrees) { + set(15, from337_5to360_0degrees); + } + + public HeadingSlice() { + super(16, false, + new String[]{"from000-0to022-5degrees", "from022-5to045-0degrees", "from045-0to067-5degrees", + "from067-5to090-0degrees", "from090-0to112-5degrees", "from112-5to135-0degrees", + "from135-0to157-5degrees", "from157-5to180-0degrees", "from180-0to202-5degrees", + "from202-5to225-0degrees", "from225-0to247-5degrees", "from247-5to270-0degrees", + "from270-0to292-5degrees", "from292-5to315-0degrees", "from315-0to337-5degrees", + "from337-5to360-0degrees"}); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceDeserializer.java new file mode 100644 index 000000000..9cff89dcb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.BitStringDeserializer; + +public class HeadingSliceDeserializer extends BitStringDeserializer { + + HeadingSliceDeserializer() { + super(HeadingSlice.class); + } + + @Override + protected HeadingSlice construct() { + return new HeadingSlice(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttribute.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttribute.java new file mode 100644 index 000000000..338070217 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttribute.java @@ -0,0 +1,76 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_LaneDataAttribute; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class LaneDataAttribute extends Asn1Choice { + + @Asn1Property(tag = 0, name = "pathEndPointAngle") + @JsonProperty("pathEndPointAngle") + private DeltaAngle pathEndPointAngle; + @Asn1Property(tag = 1, name = "laneCrownPointCenter") + @JsonProperty("laneCrownPointCenter") + private RoadwayCrownAngle laneCrownPointCenter; + @Asn1Property(tag = 2, name = "laneCrownPointLeft") + @JsonProperty("laneCrownPointLeft") + private RoadwayCrownAngle laneCrownPointLeft; + @Asn1Property(tag = 3, name = "laneCrownPointRight") + @JsonProperty("laneCrownPointRight") + private RoadwayCrownAngle laneCrownPointRight; + @Asn1Property(tag = 4, name = "laneAngle") + @JsonProperty("laneAngle") + private MergeDivergeNodeAngle laneAngle; + @Asn1Property(tag = 5, name = "speedLimits") + @JsonProperty("speedLimits") + @JacksonXmlElementWrapper(localName = "speedLimits") + @JacksonXmlProperty(localName = "RegulatorySpeedLimit") + private SpeedLimitList speedLimits; + @Asn1Property(tag = 6, name = "regional") + @JsonProperty("regional") + private SequenceOfRegional regional; + + LaneDataAttribute() { + super(true); + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_LaneDataAttribute.class, 1L, 4L); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttributeList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttributeList.java new file mode 100644 index 000000000..f36ecf60b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneDataAttributeList.java @@ -0,0 +1,58 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfChoiceDeserializer; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfChoiceSerializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class LaneDataAttributeList extends Asn1SequenceOf { + + LaneDataAttributeList() { + super(LaneDataAttribute.class, 1L, 8L); + } + + public static class LaneDataAttributeListSerializer + extends + SequenceOfChoiceSerializer { + public LaneDataAttributeListSerializer() { + super(LaneDataAttribute.class, LaneDataAttributeList.class); + } + } + + public static class LaneDataAttributeListDeserializer + extends + SequenceOfChoiceDeserializer { + public LaneDataAttributeListDeserializer() { + super(LaneDataAttribute.class, LaneDataAttributeList.class); + } + + @Override + protected LaneDataAttributeList construct() { + return new LaneDataAttributeList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneID.java new file mode 100644 index 000000000..2cdc7d309 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneID.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = LaneID.LaneIDDeserializer.class) +public class LaneID extends Asn1Integer { + + public LaneID() { + super(0L, 255L); + } + + @JsonCreator + public LaneID(long value) { + this(); + this.value = value; + } + + public static class LaneIDDeserializer extends IntegerDeserializer { + public LaneIDDeserializer() { + super(LaneID.class); + } + + @Override + protected LaneID construct() { + return new LaneID(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneWidth.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneWidth.java new file mode 100644 index 000000000..1f9ab714b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/LaneWidth.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = LaneWidth.LaneWidthDeserializer.class) +public class LaneWidth extends Asn1Integer { + + public LaneWidth() { + super(0L, 32767L); + } + + @JsonCreator + public LaneWidth(long value) { + this(); + this.value = value; + } + + public static class LaneWidthDeserializer extends IntegerDeserializer { + public LaneWidthDeserializer() { + super(LaneWidth.class); + } + + @Override + protected LaneWidth construct() { + return new LaneWidth(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Latitude.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Latitude.java new file mode 100644 index 000000000..bfe2934cc --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Latitude.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Latitude.LatitudeDeserializer.class) +public class Latitude extends Asn1Integer { + + public Latitude() { + super(-900000000L, 900000001L); + } + + @JsonCreator + public Latitude(long value) { + this(); + this.value = value; + } + + public static class LatitudeDeserializer extends IntegerDeserializer { + public LatitudeDeserializer() { + super(Latitude.class); + } + + @Override + protected Latitude construct() { + return new Latitude(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Longitude.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Longitude.java new file mode 100644 index 000000000..cced10041 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Longitude.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Longitude.LongitudeDeserializer.class) +public class Longitude extends Asn1Integer { + + public Longitude() { + super(-1799999999L, 1800000001L); + } + + @JsonCreator + public Longitude(long value) { + this(); + this.value = value; + } + + public static class LongitudeDeserializer extends IntegerDeserializer { + public LongitudeDeserializer() { + super(Longitude.class); + } + + @Override + protected Longitude construct() { + return new Longitude(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MergeDivergeNodeAngle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MergeDivergeNodeAngle.java new file mode 100644 index 000000000..745000a76 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MergeDivergeNodeAngle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = MergeDivergeNodeAngle.MergeDivergeNodeAngleDeserializer.class) +public class MergeDivergeNodeAngle extends Asn1Integer { + + public MergeDivergeNodeAngle() { + super(-180L, 180L); + } + + @JsonCreator + public MergeDivergeNodeAngle(long value) { + this(); + this.value = value; + } + + public static class MergeDivergeNodeAngleDeserializer extends IntegerDeserializer { + public MergeDivergeNodeAngleDeserializer() { + super(MergeDivergeNodeAngle.class); + } + + @Override + protected MergeDivergeNodeAngle construct() { + return new MergeDivergeNodeAngle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MinuteOfTheYear.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MinuteOfTheYear.java new file mode 100644 index 000000000..9fafa1ee4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MinuteOfTheYear.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = MinuteOfTheYear.MinuteOfTheYearDeserializer.class) +public class MinuteOfTheYear extends Asn1Integer { + + public MinuteOfTheYear() { + super(0L, 527040L); + } + + @JsonCreator + public MinuteOfTheYear(long value) { + this(); + this.value = value; + } + + public static class MinuteOfTheYearDeserializer extends IntegerDeserializer { + public MinuteOfTheYearDeserializer() { + super(MinuteOfTheYear.class); + } + + @Override + protected MinuteOfTheYear construct() { + return new MinuteOfTheYear(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MsgCount.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MsgCount.java new file mode 100644 index 000000000..db6e65709 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/MsgCount.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = MsgCount.MsgCountDeserializer.class) +public class MsgCount extends Asn1Integer { + + public MsgCount() { + super(0L, 127L); + } + + @JsonCreator + public MsgCount(long value) { + this(); + this.value = value; + } + + public static class MsgCountDeserializer extends IntegerDeserializer { + public MsgCountDeserializer() { + super(MsgCount.class); + } + + @Override + protected MsgCount construct() { + return new MsgCount(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeSetXY.java new file mode 100644 index 000000000..bf41d4a69 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeSetXY.java @@ -0,0 +1,81 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_NodeAttributeSetXY; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class NodeAttributeSetXY extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "localNode", optional = true) + @JsonProperty("localNode") + @JsonDeserialize(using = NodeAttributeXYList.NodeAttributeXYListDeserializer.class) + private NodeAttributeXYList localNode; + @Asn1Property(tag = 1, name = "disabled", optional = true) + @JsonProperty("disabled") + @JsonDeserialize(using = SegmentAttributeXYList.SegmentAttributeXYListDeserializer.class) + private SegmentAttributeXYList disabled; + @Asn1Property(tag = 2, name = "enabled", optional = true) + @JsonProperty("enabled") + @JsonDeserialize(using = SegmentAttributeXYList.SegmentAttributeXYListDeserializer.class) + private SegmentAttributeXYList enabled; + @Asn1Property(tag = 3, name = "data", optional = true) + @JsonProperty("data") + @JsonSerialize(using = LaneDataAttributeList.LaneDataAttributeListSerializer.class) + @JsonDeserialize(using = LaneDataAttributeList.LaneDataAttributeListDeserializer.class) + private LaneDataAttributeList data; + @Asn1Property(tag = 4, name = "dWidth", optional = true) + @JsonProperty("dWidth") + private Offset_B10 dWidth; + @Asn1Property(tag = 5, name = "dElevation", optional = true) + @JsonProperty("dElevation") + private Offset_B10 dElevation; + @Asn1Property(tag = 6, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_NodeAttributeSetXY.class, 1L, 4L); + } + } + + NodeAttributeSetXY() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXY.java new file mode 100644 index 000000000..b6a1fa214 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXY.java @@ -0,0 +1,55 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = NodeAttributeXYSerializer.class) +@JsonDeserialize(using = NodeAttributeXYDeserializer.class) +public enum NodeAttributeXY implements Asn1Enumerated { + RESERVED(0, "reserved"), STOPLINE(1, "stopLine"), ROUNDEDCAPSTYLEA(2, "roundedCapStyleA"), ROUNDEDCAPSTYLEB(3, + "roundedCapStyleB"), MERGEPOINT(4, "mergePoint"), DIVERGEPOINT(5, "divergePoint"), DOWNSTREAMSTOPLINE(6, + "downstreamStopLine"), DOWNSTREAMSTARTNODE(7, "downstreamStartNode"), CLOSEDTOTRAFFIC(8, + "closedToTraffic"), SAFEISLAND(9, "safeIsland"), CURBPRESENTATSTEPOFF(10, + "curbPresentAtStepOff"), HYDRANTPRESENT(11, "hydrantPresent"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private NodeAttributeXY(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 11; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYDeserializer.java new file mode 100644 index 000000000..fc9c89a7d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class NodeAttributeXYDeserializer extends EnumeratedDeserializer { + + NodeAttributeXYDeserializer() { + super(NodeAttributeXY.class); + } + + @Override + protected NodeAttributeXY[] listEnumValues() { + return NodeAttributeXY.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYList.java new file mode 100644 index 000000000..268bcbce9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYList.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfEnumeratedDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class NodeAttributeXYList extends Asn1SequenceOf { + + NodeAttributeXYList() { + super(NodeAttributeXY.class, 1L, 8L); + } + + public static class NodeAttributeXYListDeserializer + extends + SequenceOfEnumeratedDeserializer { + public NodeAttributeXYListDeserializer() { + super(NodeAttributeXYList.class, NodeAttributeXY.class); + } + + @Override + protected NodeAttributeXY[] listEnumValues() { + return NodeAttributeXY.values(); + } + + @Override + protected NodeAttributeXYList construct() { + return new NodeAttributeXYList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYSerializer.java new file mode 100644 index 000000000..a7136a038 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeAttributeXYSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class NodeAttributeXYSerializer extends EnumeratedSerializer { + + NodeAttributeXYSerializer() { + super(NodeAttributeXY.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeListXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeListXY.java new file mode 100644 index 000000000..f282ae0dd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeListXY.java @@ -0,0 +1,52 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class NodeListXY extends Asn1Choice { + + @Asn1Property(tag = 0, name = "nodes") + @JsonProperty("nodes") + @JacksonXmlElementWrapper(localName = "nodes") + @JacksonXmlProperty(localName = "NodeXY") + private NodeSetXY nodes; + @Asn1Property(tag = 1, name = "computed") + @JsonProperty("computed") + private ComputedLane computed; + + NodeListXY() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeOffsetPointXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeOffsetPointXY.java new file mode 100644 index 000000000..15e9580f8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeOffsetPointXY.java @@ -0,0 +1,67 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_NodeOffsetPointXY; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class NodeOffsetPointXY extends Asn1Choice { + + @Asn1Property(tag = 0, name = "node-XY1") + @JsonProperty("node-XY1") + private Node_XY_20b node_XY1; + @Asn1Property(tag = 1, name = "node-XY2") + @JsonProperty("node-XY2") + private Node_XY_22b node_XY2; + @Asn1Property(tag = 2, name = "node-XY3") + @JsonProperty("node-XY3") + private Node_XY_24b node_XY3; + @Asn1Property(tag = 3, name = "node-XY4") + @JsonProperty("node-XY4") + private Node_XY_26b node_XY4; + @Asn1Property(tag = 4, name = "node-XY5") + @JsonProperty("node-XY5") + private Node_XY_28b node_XY5; + @Asn1Property(tag = 5, name = "node-XY6") + @JsonProperty("node-XY6") + private Node_XY_32b node_XY6; + @Asn1Property(tag = 6, name = "node-LatLon") + @JsonProperty("node-LatLon") + private Node_LLmD_64b node_LatLon; + @Asn1Property(tag = 7, name = "regional") + @JsonProperty("regional") + private Reg_NodeOffsetPointXY regional; + + NodeOffsetPointXY() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeSetXY.java new file mode 100644 index 000000000..84aee9819 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeSetXY.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class NodeSetXY extends Asn1SequenceOf { + + NodeSetXY() { + super(NodeXY.class, 2L, 63L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeXY.java new file mode 100644 index 000000000..7f03d2dd8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/NodeXY.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class NodeXY extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "delta") + @JsonProperty("delta") + private NodeOffsetPointXY delta; + @Asn1Property(tag = 1, name = "attributes", optional = true) + @JsonProperty("attributes") + private NodeAttributeSetXY attributes; + + NodeXY() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_LLmD_64b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_LLmD_64b.java new file mode 100644 index 000000000..c2821a4be --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_LLmD_64b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LLmD_64b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private Longitude lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private Latitude lat; + + Node_LLmD_64b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_20b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_20b.java new file mode 100644 index 000000000..e3f6e6839 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_20b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_20b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B10 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B10 y; + + Node_XY_20b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_22b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_22b.java new file mode 100644 index 000000000..a3db0c627 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_22b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_22b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B11 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B11 y; + + Node_XY_22b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_24b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_24b.java new file mode 100644 index 000000000..031a838d9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_24b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_24b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B12 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B12 y; + + Node_XY_24b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_26b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_26b.java new file mode 100644 index 000000000..5673f4500 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_26b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_26b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B13 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B13 y; + + Node_XY_26b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_28b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_28b.java new file mode 100644 index 000000000..4e564c216 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_28b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_28b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B14 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B14 y; + + Node_XY_28b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_32b.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_32b.java new file mode 100644 index 000000000..a5daac524 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Node_XY_32b.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_XY_32b extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "x") + @JsonProperty("x") + private Offset_B16 x; + @Asn1Property(tag = 1, name = "y") + @JsonProperty("y") + private Offset_B16 y; + + Node_XY_32b() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B12.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B12.java new file mode 100644 index 000000000..136a05af4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B12.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B12.OffsetLL_B12Deserializer.class) +public class OffsetLL_B12 extends Asn1Integer { + + public OffsetLL_B12() { + super(-2048L, 2047L); + } + + @JsonCreator + public OffsetLL_B12(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B12Deserializer extends IntegerDeserializer { + public OffsetLL_B12Deserializer() { + super(OffsetLL_B12.class); + } + + @Override + protected OffsetLL_B12 construct() { + return new OffsetLL_B12(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B14.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B14.java new file mode 100644 index 000000000..82a886edc --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B14.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B14.OffsetLL_B14Deserializer.class) +public class OffsetLL_B14 extends Asn1Integer { + + public OffsetLL_B14() { + super(-8192L, 8191L); + } + + @JsonCreator + public OffsetLL_B14(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B14Deserializer extends IntegerDeserializer { + public OffsetLL_B14Deserializer() { + super(OffsetLL_B14.class); + } + + @Override + protected OffsetLL_B14 construct() { + return new OffsetLL_B14(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B16.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B16.java new file mode 100644 index 000000000..3a3bd1626 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B16.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B16.OffsetLL_B16Deserializer.class) +public class OffsetLL_B16 extends Asn1Integer { + + public OffsetLL_B16() { + super(-32768L, 32767L); + } + + @JsonCreator + public OffsetLL_B16(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B16Deserializer extends IntegerDeserializer { + public OffsetLL_B16Deserializer() { + super(OffsetLL_B16.class); + } + + @Override + protected OffsetLL_B16 construct() { + return new OffsetLL_B16(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B18.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B18.java new file mode 100644 index 000000000..962e8d970 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B18.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B18.OffsetLL_B18Deserializer.class) +public class OffsetLL_B18 extends Asn1Integer { + + public OffsetLL_B18() { + super(-131072L, 131071L); + } + + @JsonCreator + public OffsetLL_B18(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B18Deserializer extends IntegerDeserializer { + public OffsetLL_B18Deserializer() { + super(OffsetLL_B18.class); + } + + @Override + protected OffsetLL_B18 construct() { + return new OffsetLL_B18(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B22.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B22.java new file mode 100644 index 000000000..07e064f6d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B22.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B22.OffsetLL_B22Deserializer.class) +public class OffsetLL_B22 extends Asn1Integer { + + public OffsetLL_B22() { + super(-2097152L, 2097151L); + } + + @JsonCreator + public OffsetLL_B22(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B22Deserializer extends IntegerDeserializer { + public OffsetLL_B22Deserializer() { + super(OffsetLL_B22.class); + } + + @Override + protected OffsetLL_B22 construct() { + return new OffsetLL_B22(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B24.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B24.java new file mode 100644 index 000000000..c37701e28 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/OffsetLL_B24.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = OffsetLL_B24.OffsetLL_B24Deserializer.class) +public class OffsetLL_B24 extends Asn1Integer { + + public OffsetLL_B24() { + super(-8388608L, 8388607L); + } + + @JsonCreator + public OffsetLL_B24(long value) { + this(); + this.value = value; + } + + public static class OffsetLL_B24Deserializer extends IntegerDeserializer { + public OffsetLL_B24Deserializer() { + super(OffsetLL_B24.class); + } + + @Override + protected OffsetLL_B24 construct() { + return new OffsetLL_B24(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B10.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B10.java new file mode 100644 index 000000000..2ab269382 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B10.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B10.Offset_B10Deserializer.class) +public class Offset_B10 extends Asn1Integer { + + public Offset_B10() { + super(-512L, 511L); + } + + @JsonCreator + public Offset_B10(long value) { + this(); + this.value = value; + } + + public static class Offset_B10Deserializer extends IntegerDeserializer { + public Offset_B10Deserializer() { + super(Offset_B10.class); + } + + @Override + protected Offset_B10 construct() { + return new Offset_B10(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B11.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B11.java new file mode 100644 index 000000000..0d3c7f4a6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B11.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B11.Offset_B11Deserializer.class) +public class Offset_B11 extends Asn1Integer { + + public Offset_B11() { + super(-1024L, 1023L); + } + + @JsonCreator + public Offset_B11(long value) { + this(); + this.value = value; + } + + public static class Offset_B11Deserializer extends IntegerDeserializer { + public Offset_B11Deserializer() { + super(Offset_B11.class); + } + + @Override + protected Offset_B11 construct() { + return new Offset_B11(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B12.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B12.java new file mode 100644 index 000000000..a2762e17a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B12.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B12.Offset_B12Deserializer.class) +public class Offset_B12 extends Asn1Integer { + + public Offset_B12() { + super(-2048L, 2047L); + } + + @JsonCreator + public Offset_B12(long value) { + this(); + this.value = value; + } + + public static class Offset_B12Deserializer extends IntegerDeserializer { + public Offset_B12Deserializer() { + super(Offset_B12.class); + } + + @Override + protected Offset_B12 construct() { + return new Offset_B12(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B13.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B13.java new file mode 100644 index 000000000..c022692d7 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B13.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B13.Offset_B13Deserializer.class) +public class Offset_B13 extends Asn1Integer { + + public Offset_B13() { + super(-4096L, 4095L); + } + + @JsonCreator + public Offset_B13(long value) { + this(); + this.value = value; + } + + public static class Offset_B13Deserializer extends IntegerDeserializer { + public Offset_B13Deserializer() { + super(Offset_B13.class); + } + + @Override + protected Offset_B13 construct() { + return new Offset_B13(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B14.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B14.java new file mode 100644 index 000000000..c11562014 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B14.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B14.Offset_B14Deserializer.class) +public class Offset_B14 extends Asn1Integer { + + public Offset_B14() { + super(-8192L, 8191L); + } + + @JsonCreator + public Offset_B14(long value) { + this(); + this.value = value; + } + + public static class Offset_B14Deserializer extends IntegerDeserializer { + public Offset_B14Deserializer() { + super(Offset_B14.class); + } + + @Override + protected Offset_B14 construct() { + return new Offset_B14(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B16.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B16.java new file mode 100644 index 000000000..a43cb611d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Offset_B16.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Offset_B16.Offset_B16Deserializer.class) +public class Offset_B16 extends Asn1Integer { + + public Offset_B16() { + super(-32768L, 32767L); + } + + @JsonCreator + public Offset_B16(long value) { + this(); + this.value = value; + } + + public static class Offset_B16Deserializer extends IntegerDeserializer { + public Offset_B16Deserializer() { + super(Offset_B16.class); + } + + @Override + protected Offset_B16 construct() { + return new Offset_B16(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Position3D.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Position3D.java new file mode 100644 index 000000000..fa2e7d007 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Position3D.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Position3D extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lat") + @JsonProperty("lat") + private Latitude lat; + @Asn1Property(tag = 1, name = "long") + @JsonProperty("long") + private Longitude long_; + @Asn1Property(tag = 2, name = "elevation", optional = true) + @JsonProperty("elevation") + private Elevation elevation; + @Asn1Property(tag = 3, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_Position3D.class, 1L, 4L); + } + } + + Position3D() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionId.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionId.java new file mode 100644 index 000000000..2a7f9ee57 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionId.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = RegionId.RegionIdDeserializer.class) +public class RegionId extends Asn1Integer { + + public RegionId() { + super(0L, 255L); + } + + @JsonCreator + public RegionId(long value) { + this(); + this.value = value; + } + + public static class RegionIdDeserializer extends IntegerDeserializer { + public RegionIdDeserializer() { + super(RegionId.class); + } + + @Override + protected RegionId construct() { + return new RegionId(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionalExtension.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionalExtension.java new file mode 100644 index 000000000..46ddec790 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegionalExtension.java @@ -0,0 +1,66 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +abstract public class RegionalExtension extends Asn1Sequence { + + @JsonIgnore + final protected RegionId regionId; + @JsonIgnore + final protected String name; + private TValue regExtValue; + public final static String INFORMATION_OBJECT_CLASS = "REG_EXT_ID_AND_TYPE"; + + public RegionId getRegionId() { + return regionId; + } + + public String getName() { + return name; + } + + @JsonProperty("regionId") + public String getIdString() { + return regionId.toString(); + } + + public TValue getRegExtValue() { + return regExtValue; + } + + public void setRegExtValue(TValue regExtValue) { + this.regExtValue = regExtValue; + } + + public RegionalExtension(int id, String name) { + super(true); + var theId = new RegionId(); + theId.setValue(id); + this.regionId = theId; + this.name = name; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegulatorySpeedLimit.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegulatorySpeedLimit.java new file mode 100644 index 000000000..a1420bfa3 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RegulatorySpeedLimit.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RegulatorySpeedLimit extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "type") + @JsonProperty("type") + private SpeedLimitType type; + @Asn1Property(tag = 1, name = "speed") + @JsonProperty("speed") + private Velocity speed; + + RegulatorySpeedLimit() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadRegulatorID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadRegulatorID.java new file mode 100644 index 000000000..aaa28cee9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadRegulatorID.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = RoadRegulatorID.RoadRegulatorIDDeserializer.class) +public class RoadRegulatorID extends Asn1Integer { + + public RoadRegulatorID() { + super(0L, 65535L); + } + + @JsonCreator + public RoadRegulatorID(long value) { + this(); + this.value = value; + } + + public static class RoadRegulatorIDDeserializer extends IntegerDeserializer { + public RoadRegulatorIDDeserializer() { + super(RoadRegulatorID.class); + } + + @Override + protected RoadRegulatorID construct() { + return new RoadRegulatorID(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentID.java new file mode 100644 index 000000000..b0b71f2fe --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentID.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = RoadSegmentID.RoadSegmentIDDeserializer.class) +public class RoadSegmentID extends Asn1Integer { + + public RoadSegmentID() { + super(0L, 65535L); + } + + @JsonCreator + public RoadSegmentID(long value) { + this(); + this.value = value; + } + + public static class RoadSegmentIDDeserializer extends IntegerDeserializer { + public RoadSegmentIDDeserializer() { + super(RoadSegmentID.class); + } + + @Override + protected RoadSegmentID construct() { + return new RoadSegmentID(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentReferenceID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentReferenceID.java new file mode 100644 index 000000000..67240b99e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadSegmentReferenceID.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RoadSegmentReferenceID extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "region", optional = true) + @JsonProperty("region") + private RoadRegulatorID region; + @Asn1Property(tag = 1, name = "id") + @JsonProperty("id") + private RoadSegmentID id; + + RoadSegmentReferenceID() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadwayCrownAngle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadwayCrownAngle.java new file mode 100644 index 000000000..7e8499597 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/RoadwayCrownAngle.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = RoadwayCrownAngle.RoadwayCrownAngleDeserializer.class) +public class RoadwayCrownAngle extends Asn1Integer { + + public RoadwayCrownAngle() { + super(-128L, 127L); + } + + @JsonCreator + public RoadwayCrownAngle(long value) { + this(); + this.value = value; + } + + public static class RoadwayCrownAngleDeserializer extends IntegerDeserializer { + public RoadwayCrownAngleDeserializer() { + super(RoadwayCrownAngle.class); + } + + @Override + protected RoadwayCrownAngle construct() { + return new RoadwayCrownAngle(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SSPindex.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SSPindex.java new file mode 100644 index 000000000..44bf449eb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SSPindex.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) +public class SSPindex extends Asn1Integer { + + public SSPindex() { + super(0L, 31L); + } + + @JsonCreator + public SSPindex(long value) { + this(); + this.value = value; + } + + public static class SSPindexDeserializer extends IntegerDeserializer { + public SSPindexDeserializer() { + super(SSPindex.class); + } + + @Override + protected SSPindex construct() { + return new SSPindex(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Scale_B12.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Scale_B12.java new file mode 100644 index 000000000..3aae74343 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Scale_B12.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Scale_B12.Scale_B12Deserializer.class) +public class Scale_B12 extends Asn1Integer { + + public Scale_B12() { + super(-2048L, 2047L); + } + + @JsonCreator + public Scale_B12(long value) { + this(); + this.value = value; + } + + public static class Scale_B12Deserializer extends IntegerDeserializer { + public Scale_B12Deserializer() { + super(Scale_B12.class); + } + + @Override + protected Scale_B12 construct() { + return new Scale_B12(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXY.java new file mode 100644 index 000000000..763cb2586 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXY.java @@ -0,0 +1,103 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = SegmentAttributeXYSerializer.class) +@JsonDeserialize(using = SegmentAttributeXYDeserializer.class) +public enum SegmentAttributeXY implements Asn1Enumerated { + RESERVED(0, "reserved"), DONOTBLOCK(1, "doNotBlock"), WHITELINE(2, "whiteLine"), MERGINGLANELEFT(3, + "mergingLaneLeft"), MERGINGLANERIGHT(4, "mergingLaneRight"), CURBONLEFT(5, "curbOnLeft"), CURBONRIGHT(6, + "curbOnRight"), LOADINGZONEONLEFT(7, "loadingzoneOnLeft"), LOADINGZONEONRIGHT(8, + "loadingzoneOnRight"), TURNOUTPOINTONLEFT(9, "turnOutPointOnLeft"), TURNOUTPOINTONRIGHT(10, + "turnOutPointOnRight"), ADJACENTPARKINGONLEFT(11, + "adjacentParkingOnLeft"), ADJACENTPARKINGONRIGHT(12, + "adjacentParkingOnRight"), ADJACENTBIKELANEONLEFT(13, + "adjacentBikeLaneOnLeft"), ADJACENTBIKELANEONRIGHT(14, + "adjacentBikeLaneOnRight"), SHAREDBIKELANE(15, + "sharedBikeLane"), BIKEBOXINFRONT(16, + "bikeBoxInFront"), TRANSITSTOPONLEFT( + 17, + "transitStopOnLeft"), TRANSITSTOPONRIGHT( + 18, + "transitStopOnRight"), TRANSITSTOPINLANE( + 19, + "transitStopInLane"), SHAREDWITHTRACKEDVEHICLE( + 20, + "sharedWithTrackedVehicle"), SAFEISLAND( + 21, + "safeIsland"), LOWCURBSPRESENT( + 22, + "lowCurbsPresent"), RUMBLESTRIPPRESENT( + 23, + "rumbleStripPresent"), AUDIBLESIGNALINGPRESENT( + 24, + "audibleSignalingPresent"), ADAPTIVETIMINGPRESENT( + 25, + "adaptiveTimingPresent"), RFSIGNALREQUESTPRESENT( + 26, + "rfSignalRequestPresent"), PARTIALCURBINTRUSION( + 27, + "partialCurbIntrusion"), TAPERTOLEFT( + 28, + "taperToLeft"), TAPERTORIGHT( + 29, + "taperToRight"), TAPERTOCENTERLINE( + 30, + "taperToCenterLine"), PARALLELPARKING( + 31, + "parallelParking"), HEADINPARKING( + 32, + "headInParking"), FREEPARKING( + 33, + "freeParking"), TIMERESTRICTIONSONPARKING( + 34, + "timeRestrictionsOnParking"), COSTTOPARK( + 35, + "costToPark"), MIDBLOCKCURBPRESENT( + 36, + "midBlockCurbPresent"), UNEVENPAVEMENTPRESENT( + 37, + "unEvenPavementPresent"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private SegmentAttributeXY(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 37; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYDeserializer.java new file mode 100644 index 000000000..685cb5c21 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class SegmentAttributeXYDeserializer extends EnumeratedDeserializer { + + SegmentAttributeXYDeserializer() { + super(SegmentAttributeXY.class); + } + + @Override + protected SegmentAttributeXY[] listEnumValues() { + return SegmentAttributeXY.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYList.java new file mode 100644 index 000000000..59ba04c61 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYList.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfEnumeratedDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class SegmentAttributeXYList extends Asn1SequenceOf { + + SegmentAttributeXYList() { + super(SegmentAttributeXY.class, 1L, 8L); + } + + public static class SegmentAttributeXYListDeserializer + extends + SequenceOfEnumeratedDeserializer { + public SegmentAttributeXYListDeserializer() { + super(SegmentAttributeXYList.class, SegmentAttributeXY.class); + } + + @Override + protected SegmentAttributeXY[] listEnumValues() { + return SegmentAttributeXY.values(); + } + + @Override + protected SegmentAttributeXYList construct() { + return new SegmentAttributeXYList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYSerializer.java new file mode 100644 index 000000000..44a56038e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SegmentAttributeXYSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class SegmentAttributeXYSerializer extends EnumeratedSerializer { + + SegmentAttributeXYSerializer() { + super(SegmentAttributeXY.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitList.java new file mode 100644 index 000000000..26a3907d9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitList.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class SpeedLimitList extends Asn1SequenceOf { + + SpeedLimitList() { + super(RegulatorySpeedLimit.class, 1L, 9L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitType.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitType.java new file mode 100644 index 000000000..2d78ff819 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitType.java @@ -0,0 +1,59 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = SpeedLimitTypeSerializer.class) +@JsonDeserialize(using = SpeedLimitTypeDeserializer.class) +public enum SpeedLimitType implements Asn1Enumerated { + UNKNOWN(0, "unknown"), MAXSPEEDINSCHOOLZONE(1, "maxSpeedInSchoolZone"), MAXSPEEDINSCHOOLZONEWHENCHILDRENAREPRESENT( + 2, "maxSpeedInSchoolZoneWhenChildrenArePresent"), MAXSPEEDINCONSTRUCTIONZONE(3, + "maxSpeedInConstructionZone"), VEHICLEMINSPEED(4, "vehicleMinSpeed"), VEHICLEMAXSPEED(5, + "vehicleMaxSpeed"), VEHICLENIGHTMAXSPEED(6, "vehicleNightMaxSpeed"), TRUCKMINSPEED(7, + "truckMinSpeed"), TRUCKMAXSPEED(8, "truckMaxSpeed"), TRUCKNIGHTMAXSPEED(9, + "truckNightMaxSpeed"), VEHICLESWITHTRAILERSMINSPEED(10, + "vehiclesWithTrailersMinSpeed"), VEHICLESWITHTRAILERSMAXSPEED(11, + "vehiclesWithTrailersMaxSpeed"), VEHICLESWITHTRAILERSNIGHTMAXSPEED( + 12, "vehiclesWithTrailersNightMaxSpeed"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private SpeedLimitType(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 12; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeDeserializer.java new file mode 100644 index 000000000..f7bcb8f59 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class SpeedLimitTypeDeserializer extends EnumeratedDeserializer { + + SpeedLimitTypeDeserializer() { + super(SpeedLimitType.class); + } + + @Override + protected SpeedLimitType[] listEnumValues() { + return SpeedLimitType.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeSerializer.java new file mode 100644 index 000000000..902011806 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/SpeedLimitTypeSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class SpeedLimitTypeSerializer extends EnumeratedSerializer { + + SpeedLimitTypeSerializer() { + super(SpeedLimitType.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Velocity.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Velocity.java new file mode 100644 index 000000000..bf1cb2bcf --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/common/Velocity.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.common; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Velocity.VelocityDeserializer.class) +public class Velocity extends Asn1Integer { + + public Velocity() { + super(0L, 8191L); + } + + @JsonCreator + public Velocity(long value) { + this(); + this.value = value; + } + + public static class VelocityDeserializer extends IntegerDeserializer { + public VelocityDeserializer() { + super(Velocity.class); + } + + @Override + protected Velocity construct() { + return new Velocity(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodes.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodes.java new file mode 100644 index 000000000..0c2aee157 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodes.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.itis; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = ITIScodes.ITIScodesDeserializer.class) +public class ITIScodes extends Asn1Integer { + + public ITIScodes() { + super(0L, 65535L); + } + + @JsonCreator + public ITIScodes(long value) { + this(); + this.value = value; + } + + public static class ITIScodesDeserializer extends IntegerDeserializer { + public ITIScodesDeserializer() { + super(ITIScodes.class); + } + + @Override + protected ITIScodes construct() { + return new ITIScodes(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndText.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndText.java new file mode 100644 index 000000000..49932c026 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndText.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.itis; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class ITIScodesAndText extends Asn1SequenceOf { + + ITIScodesAndText() { + super(ITIScodesAndTextSequence.class, 1L, 100L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndTextSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndTextSequence.java new file mode 100644 index 000000000..ff7f8459e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIScodesAndTextSequence.java @@ -0,0 +1,64 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.itis; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ITIScodesAndTextSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStext text; + + ItemChoice() { + super(false); + } + } + + ITIScodesAndTextSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIStext.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIStext.java new file mode 100644 index 000000000..c5fa99f4f --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/itis/ITIStext.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.itis; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class ITIStext extends IA5String { + + public ITIStext() { + super(1, 500); + } + + @JsonCreator + public ITIStext(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_ComputedLane.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_ComputedLane.java new file mode 100644 index 000000000..8c3920fb7 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_ComputedLane.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_ComputedLane extends RegionalExtension { + + public Reg_ComputedLane(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeographicalPath.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeographicalPath.java new file mode 100644 index 000000000..98d8ab03c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeographicalPath.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_GeographicalPath extends RegionalExtension { + + public Reg_GeographicalPath(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeometricProjection.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeometricProjection.java new file mode 100644 index 000000000..b6697ef74 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_GeometricProjection.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_GeometricProjection extends RegionalExtension { + + public Reg_GeometricProjection(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_LaneDataAttribute.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_LaneDataAttribute.java new file mode 100644 index 000000000..f40f2063c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_LaneDataAttribute.java @@ -0,0 +1,47 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.As; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes.IdType; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; +import us.dot.its.jpo.ode.plugin.j2735.addgrpb.LaneDataAttribute_addGrpBReg_LaneDataAttribute; + +@JsonInclude(Include.NON_NULL) +@JsonTypeInfo(use = Id.NAME, include = As.EXISTING_PROPERTY, property = "regionId") +@JsonSubTypes({ + @JsonSubTypes.Type(value = LaneDataAttribute_addGrpBReg_LaneDataAttribute.class, name = "2")}) +@Asn1ParameterizedTypes(idProperty = "regionId", idType = IdType.INTEGER, valueProperty = "regExtValue", value = { + @Asn1ParameterizedTypes.Type(value = LaneDataAttribute_addGrpBReg_LaneDataAttribute.class, intId = 2)}) +abstract public class Reg_LaneDataAttribute extends RegionalExtension { + + public Reg_LaneDataAttribute(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetLL.java new file mode 100644 index 000000000..c15b304da --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetLL.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_NodeAttributeSetLL extends RegionalExtension { + + public Reg_NodeAttributeSetLL(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetXY.java new file mode 100644 index 000000000..0b32ef5b8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeAttributeSetXY.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_NodeAttributeSetXY extends RegionalExtension { + + public Reg_NodeAttributeSetXY(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointLL.java new file mode 100644 index 000000000..278223d23 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointLL.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_NodeOffsetPointLL extends RegionalExtension { + + public Reg_NodeOffsetPointLL(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointXY.java new file mode 100644 index 000000000..727bc3433 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_NodeOffsetPointXY.java @@ -0,0 +1,47 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.As; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes.IdType; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; +import us.dot.its.jpo.ode.plugin.j2735.addgrpb.NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY; + +@JsonInclude(Include.NON_NULL) +@JsonTypeInfo(use = Id.NAME, include = As.EXISTING_PROPERTY, property = "regionId") +@JsonSubTypes({ + @JsonSubTypes.Type(value = NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY.class, name = "2")}) +@Asn1ParameterizedTypes(idProperty = "regionId", idType = IdType.INTEGER, valueProperty = "regExtValue", value = { + @Asn1ParameterizedTypes.Type(value = NodeOffsetPointXY_addGrpBReg_NodeOffsetPointXY.class, intId = 2)}) +abstract public class Reg_NodeOffsetPointXY extends RegionalExtension { + + public Reg_NodeOffsetPointXY(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_Position3D.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_Position3D.java new file mode 100644 index 000000000..b585b9da1 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_Position3D.java @@ -0,0 +1,49 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonSubTypes; +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.As; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes.IdType; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; +import us.dot.its.jpo.ode.plugin.j2735.addgrpb.Position3D_addGrpBReg_Position3D; +import us.dot.its.jpo.ode.plugin.j2735.addgrpc.Position3D_addGrpCReg_Position3D; + +@JsonInclude(Include.NON_NULL) +@JsonTypeInfo(use = Id.NAME, include = As.EXISTING_PROPERTY, property = "regionId") +@JsonSubTypes({@JsonSubTypes.Type(value = Position3D_addGrpBReg_Position3D.class, name = "2"), + @JsonSubTypes.Type(value = Position3D_addGrpCReg_Position3D.class, name = "3")}) +@Asn1ParameterizedTypes(idProperty = "regionId", idType = IdType.INTEGER, valueProperty = "regExtValue", value = { + @Asn1ParameterizedTypes.Type(value = Position3D_addGrpBReg_Position3D.class, intId = 2), + @Asn1ParameterizedTypes.Type(value = Position3D_addGrpCReg_Position3D.class, intId = 3)}) +abstract public class Reg_Position3D extends RegionalExtension { + + public Reg_Position3D(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_TravelerInformation.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_TravelerInformation.java new file mode 100644 index 000000000..6921451e9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/region/Reg_TravelerInformation.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.region; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.j2735.common.RegionalExtension; + +@JsonInclude(Include.NON_NULL) +abstract public class Reg_TravelerInformation extends RegionalExtension { + + public Reg_TravelerInformation(int id, String name) { + super(id, name); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Anchor.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Anchor.java index e2f56d73c..e74868821 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Anchor.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Anchor.java @@ -1,57 +1,39 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; -@JsonPropertyOrder({ "lat", "long", "elevation" }) +/** + * Anchor point for a path. + */ +@JsonPropertyOrder({"lat", "long", "elevation"}) +@EqualsAndHashCode(callSuper = false) +@Data public class Anchor extends Asn1Object { - private static final long serialVersionUID = 1L; - private String lat; - private String llong; - private String elevation; - - @JsonProperty("lat") - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } - - @JsonProperty("long") - public String getLlong() { - return llong; - } - - public void setLlong(String llong) { - this.llong = llong; - } - - @JsonProperty("elevation") - public String getElevation() { - return elevation; - } - - public void setElevation(String elevation) { - this.elevation = elevation; - } - + private static final long serialVersionUID = 1L; + @JsonProperty("lat") + private String lat; + @JsonProperty("long") + private String llong; + @JsonProperty("elevation") + private String elevation; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Area.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Area.java index 7670b0391..10779820d 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Area.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Area.java @@ -1,31 +1,18 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * A geographic area. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class Area extends Asn1Object { private static final long serialVersionUID = 1L; - + private ShapePointSet shapepoint; private Circle circle; private RegionPointSet regionPoint; - - public ShapePointSet getShapepoint() { - return shapepoint; - } - public void setShapepoint(ShapePointSet shapepoint) { - this.shapepoint = shapepoint; - } - public Circle getCircle() { - return circle; - } - public void setCircle(Circle circle) { - this.circle = circle; - } - public RegionPointSet getRegionPoint() { - return regionPoint; - } - public void setRegionPoint(RegionPointSet regionPoint) { - this.regionPoint = regionPoint; - } - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Circle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Circle.java index c30c3133e..d26e7ea8f 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Circle.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Circle.java @@ -1,69 +1,42 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; -@JsonPropertyOrder({ "center", "radius", "units" }) +/** + * Circle. + */ +@JsonPropertyOrder({"center", "radius", "units"}) +@EqualsAndHashCode(callSuper = false) +@Data public class Circle extends Asn1Object { - private static final long serialVersionUID = 1L; - - private Position center; - - @JsonProperty("radius") - private String radius; - - @JsonProperty("units") - private DistanceUnits units; - - @JsonProperty("position") - public Position getPosition() { - return center; - } - - @JsonProperty("center") - public void setPosition(Position position) { - this.center = position; - } - - public String getRadius() { - return radius; - } - - public void setRadius(String radius) { - this.radius = radius; - } - - public Position getCenter() { - return center; - } - - public void setCenter(Position center) { - this.center = center; - } + private static final long serialVersionUID = 1L; - public DistanceUnits getUnits() { - return units; - } + @JsonProperty("center") + private Position center; - public void setUnits(DistanceUnits units) { - this.units = units; - } + @JsonProperty("radius") + private String radius; + @JsonProperty("units") + private DistanceUnits units; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ComputedLane.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ComputedLane.java index 078964e9c..8ab9256f0 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ComputedLane.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ComputedLane.java @@ -1,56 +1,22 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * A computed lane is a lane that is derived from a reference lane by applying + * transformations to the reference lane. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class ComputedLane extends Asn1Object { - - /** - * - */ private static final long serialVersionUID = 1L; - + private int referenceLaneId; private OffsetAxis offsetXaxis; private OffsetAxis offsetYaxis; private int rotateXY; private int scaleXaxis; private int scaleYaxis; - public int getReferenceLaneId() { - return referenceLaneId; - } - public void setReferenceLaneId(int referenceLaneId) { - this.referenceLaneId = referenceLaneId; - } - public OffsetAxis getOffsetXaxis() { - return offsetXaxis; - } - public void setOffsetXaxis(OffsetAxis offsetXaxis) { - this.offsetXaxis = offsetXaxis; - } - public OffsetAxis getOffsetYaxis() { - return offsetYaxis; - } - public void setOffsetYaxis(OffsetAxis offsetYaxis) { - this.offsetYaxis = offsetYaxis; - } - public int getRotateXY() { - return rotateXY; - } - public void setRotateXY(int rotateXY) { - this.rotateXY = rotateXY; - } - public int getScaleXaxis() { - return scaleXaxis; - } - public void setScaleXaxis(int scaleXaxis) { - this.scaleXaxis = scaleXaxis; - } - public int getScaleYaxis() { - return scaleYaxis; - } - public void setScaleYaxis(int scaleYaxis) { - this.scaleYaxis = scaleYaxis; - } - - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Content.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Content.java index 58d199c2d..9b4821832 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Content.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Content.java @@ -1,59 +1,35 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * Content. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class Content extends Asn1Object { - private static final long serialVersionUID = 1L; - private ITIS_CodesAndText advisory; - private ITIS_CodesAndText workZone; - private ITIS_CodesAndText genericSign; - private ITIS_CodesAndText speedLimit; - private ITIS_CodesAndText exitService; - - public ITIS_CodesAndText getAdvisory() { - return advisory; - } - public void setAdvisory(ITIS_CodesAndText advisory) { - this.advisory = advisory; - } - public ITIS_CodesAndText getWorkZone() { - return workZone; - } - public void setWorkZone(ITIS_CodesAndText workZone) { - this.workZone = workZone; - } - public ITIS_CodesAndText getGenericSign() { - return genericSign; - } - public void setGenericSign(ITIS_CodesAndText genericSign) { - this.genericSign = genericSign; - } - public ITIS_CodesAndText getSpeedLimit() { - return speedLimit; - } - public void setSpeedLimit(ITIS_CodesAndText speedLimit) { - this.speedLimit = speedLimit; - } - public ITIS_CodesAndText getExitService() { - return exitService; - } - public void setExitService(ITIS_CodesAndText exitService) { - this.exitService = exitService; - } - + private static final long serialVersionUID = 1L; + private ITIS_CodesAndText advisory; + private ITIS_CodesAndText workZone; + private ITIS_CodesAndText genericSign; + private ITIS_CodesAndText speedLimit; + private ITIS_CodesAndText exitService; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DataFrames.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DataFrames.java index 834e55608..ca3b9701a 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DataFrames.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DataFrames.java @@ -1,61 +1,32 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735.timstorage; -import java.util.Arrays; +package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.model.OdeObject; +@EqualsAndHashCode(callSuper = false) +@Data public class DataFrames extends OdeObject { private static final long serialVersionUID = 1L; - private TravelerDataFrame[] TravelerDataFrame; - @JsonProperty("TravelerDataFrame") - public TravelerDataFrame[] getTravelerDataFrame() { - return TravelerDataFrame; - } - - public void setTravelerDataFrame(TravelerDataFrame[] travelerDataFrame) { - this.TravelerDataFrame = travelerDataFrame; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + Arrays.hashCode(TravelerDataFrame); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - DataFrames other = (DataFrames) obj; - if (!Arrays.equals(TravelerDataFrame, other.TravelerDataFrame)) - return false; - return true; - } - + private TravelerDataFrame[] TravelerDataFrame; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Description.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Description.java index b19b0160b..e732f6db2 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Description.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Description.java @@ -1,53 +1,36 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * Description. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class Description extends Asn1Object { - private static final long serialVersionUID = 1L; - - private OffsetSystem path; - - private GeometricProjection geometry; - - private ValidRegion oldRegion; - - public OffsetSystem getPath() { - return path; - } - - public void setPath(OffsetSystem path) { - this.path = path; - } - - public GeometricProjection getGeometry() { - return geometry; - } - - public void setGeometry(GeometricProjection geometry) { - this.geometry = geometry; - } + private static final long serialVersionUID = 1L; - public ValidRegion getOldRegion() { - return oldRegion; - } + private OffsetSystem path; - public void setOldRegion(ValidRegion oldRegion) { - this.oldRegion = oldRegion; - } + private GeometricProjection geometry; + private ValidRegion oldRegion; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DirectionOfUse.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DirectionOfUse.java index ef640201c..9f645cb08 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DirectionOfUse.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DirectionOfUse.java @@ -1,25 +1,36 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * The direction of use for a given section of roadway. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class DirectionOfUse extends Asn1Object { private static final long serialVersionUID = 1L; - + + /** + * Enumeration of direction of use values. + */ public enum DirectionOfUseEnum { unavailable, // (0), -- unknown or NA, not typically used in valid expressions forward, // (1), -- direction of travel follows node ordering @@ -32,29 +43,4 @@ public enum DirectionOfUseEnum { private String forward; // (1), -- direction of travel follows node ordering private String reverse; // (2), -- direction of travel is the reverse of node ordering private String both; // (3) -- direction of travel allowed in both directions - - public String getUnavailable() { - return unavailable; - } - public void setUnavailable(String unavailable) { - this.unavailable = unavailable; - } - public String getForward() { - return forward; - } - public void setForward(String forward) { - this.forward = forward; - } - public String getReverse() { - return reverse; - } - public void setReverse(String reverse) { - this.reverse = reverse; - } - public String getBoth() { - return both; - } - public void setBoth(String both) { - this.both = both; - } } \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DistanceUnits.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DistanceUnits.java index 954673236..c4acb4099 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DistanceUnits.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/DistanceUnits.java @@ -1,12 +1,21 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * The units of distance used in the message. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class DistanceUnits extends Asn1Object { private static final long serialVersionUID = 1L; - + + /** + * Enumeration of distance units. + */ public enum DistanceUnitsEnum { centimeter, // (0), cm2_5, // (1), -- Steps of 2.5 centimeters @@ -17,61 +26,14 @@ public enum DistanceUnitsEnum { yard, // (6), -- three US feet mile // (7) -- US mile (5280 US feet) } - + private String centimeter; // (0), - @JsonProperty("cm2-5")private String cm2_5; // (1), -- Steps of 2.5 centimeters + @JsonProperty("cm2-5") + private String cm2dot5; // (1), -- Steps of 2.5 centimeters private String decimeter; // (2), private String meter; // (3), private String kilometer; // (4), private String foot; // (5), -- US foot, 0.3048 meters exactly private String yard; // (6), -- three US feet private String mile; // (7) -- US mile (5280 US feet) - public String getCentimeter() { - return centimeter; - } - public void setCentimeter(String centimeter) { - this.centimeter = centimeter; - } - public String getCm2_5() { - return cm2_5; - } - public void setCm2_5(String cm2_5) { - this.cm2_5 = cm2_5; - } - public String getDecimeter() { - return decimeter; - } - public void setDecimeter(String decimeter) { - this.decimeter = decimeter; - } - public String getMeter() { - return meter; - } - public void setMeter(String meter) { - this.meter = meter; - } - public String getKilometer() { - return kilometer; - } - public void setKilometer(String kilometer) { - this.kilometer = kilometer; - } - public String getFoot() { - return foot; - } - public void setFoot(String foot) { - this.foot = foot; - } - public String getYard() { - return yard; - } - public void setYard(String yard) { - this.yard = yard; - } - public String getMile() { - return mile; - } - public void setMile(String mile) { - this.mile = mile; - } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Extent.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Extent.java index 866baff20..b9ea64871 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Extent.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Extent.java @@ -1,10 +1,20 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * Extent. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class Extent extends Asn1Object { private static final long serialVersionUID = 1L; + /** + * Enumerated values for Extent. + */ public enum ExtentEnum { useInstantlyOnly, // (0), useFor3meters, // (1), @@ -40,101 +50,4 @@ public enum ExtentEnum { private String useFor5000000meters; // (13), private String useFor10000000meters; // (14), private String forever; // (15) -- very wide area - - public String getUseInstantlyOnly() { - return useInstantlyOnly; - } - public void setUseInstantlyOnly(String useInstantlyOnly) { - this.useInstantlyOnly = useInstantlyOnly; - } - public String getUseFor3meters() { - return useFor3meters; - } - public void setUseFor3meters(String useFor3meters) { - this.useFor3meters = useFor3meters; - } - public String getUseFor10meters() { - return useFor10meters; - } - public void setUseFor10meters(String useFor10meters) { - this.useFor10meters = useFor10meters; - } - public String getUseFor50meters() { - return useFor50meters; - } - public void setUseFor50meters(String useFor50meters) { - this.useFor50meters = useFor50meters; - } - public String getUseFor100meters() { - return useFor100meters; - } - public void setUseFor100meters(String useFor100meters) { - this.useFor100meters = useFor100meters; - } - public String getUseFor500meters() { - return useFor500meters; - } - public void setUseFor500meters(String useFor500meters) { - this.useFor500meters = useFor500meters; - } - public String getUseFor1000meters() { - return useFor1000meters; - } - public void setUseFor1000meters(String useFor1000meters) { - this.useFor1000meters = useFor1000meters; - } - public String getUseFor5000meters() { - return useFor5000meters; - } - public void setUseFor5000meters(String useFor5000meters) { - this.useFor5000meters = useFor5000meters; - } - public String getUseFor10000meters() { - return useFor10000meters; - } - public void setUseFor10000meters(String useFor10000meters) { - this.useFor10000meters = useFor10000meters; - } - public String getUseFor50000meters() { - return useFor50000meters; - } - public void setUseFor50000meters(String useFor50000meters) { - this.useFor50000meters = useFor50000meters; - } - public String getUseFor100000meters() { - return useFor100000meters; - } - public void setUseFor100000meters(String useFor100000meters) { - this.useFor100000meters = useFor100000meters; - } - public String getUseFor500000meters() { - return useFor500000meters; - } - public void setUseFor500000meters(String useFor500000meters) { - this.useFor500000meters = useFor500000meters; - } - public String getUseFor1000000meters() { - return useFor1000000meters; - } - public void setUseFor1000000meters(String useFor1000000meters) { - this.useFor1000000meters = useFor1000000meters; - } - public String getUseFor5000000meters() { - return useFor5000000meters; - } - public void setUseFor5000000meters(String useFor5000000meters) { - this.useFor5000000meters = useFor5000000meters; - } - public String getUseFor10000000meters() { - return useFor10000000meters; - } - public void setUseFor10000000meters(String useFor10000000meters) { - this.useFor10000000meters = useFor10000000meters; - } - public String getForever() { - return forever; - } - public void setForever(String forever) { - this.forever = forever; - } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/FrameType.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/FrameType.java index 408af840b..32ed092bf 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/FrameType.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/FrameType.java @@ -1,70 +1,49 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * FrameType. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class FrameType extends Asn1Object { - private static final long serialVersionUID = 1L; - - public enum TravelerInfoType { - unknown, - advisory, - roadSignage, - commercialSignage - } - - private String advisory; - - private String commercialSignage; - - private String roadSignage; - - private String unknown; - - public String getAdvisory() { - return advisory; - } - - public void setAdvisory(String advisory) { - this.advisory = advisory; - } - - public String getUnknown() { - return unknown; - } + private static final long serialVersionUID = 1L; - public void setUnknown(String unknown) { - this.unknown = unknown; - } + /** + * Enumeration of TravelerInfoType. + */ + public enum TravelerInfoType { + unknown, + advisory, + roadSignage, + commercialSignage + } - public String getRoadSignage() { - return roadSignage; - } + private String advisory; - public void setRoadSignage(String roadSignage) { - this.roadSignage = roadSignage; - } + private String commercialSignage; - public String getCommercialSignage() { - return commercialSignage; - } + private String roadSignage; - public void setCommercialSignage(String commercialSignage) { - this.commercialSignage = commercialSignage; - } + private String unknown; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/GeographicalPath.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/GeographicalPath.java index fe0c7e783..64361fa0d 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/GeographicalPath.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/GeographicalPath.java @@ -1,182 +1,58 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; -@JsonPropertyOrder({ "name", "id", "anchor", "laneWidth", "directionality", "closedPath", "direction", "description" }) +/** + * GeographicalPath. + */ +@JsonPropertyOrder({"name", "id", "anchor", "laneWidth", "directionality", "closedPath", + "direction", "description"}) +@EqualsAndHashCode(callSuper = false) +@Data public class GeographicalPath extends Asn1Object { - private static final long serialVersionUID = 1L; - - @JsonProperty("name") - private String name; - - @JsonProperty("id") - private Id id; - - @JsonProperty("anchor") - private Anchor anchor; - - @JsonProperty("laneWidth") - private String laneWidth; - - @JsonProperty("directionality") - private DirectionOfUse directionality; - - @JsonProperty("closedPath") - private String closedPath; - - @JsonProperty("direction") - private String direction; - - @JsonProperty("description") - private Description description; - - public Id getId() { - return id; - } - - public void setId(Id id) { - this.id = id; - } - - public String getClosedPath() { - return closedPath; - } - - public void setClosedPath(String closedPath) { - this.closedPath = closedPath; - } - - - public DirectionOfUse getDirectionality() { - return directionality; - } - - public void setDirectionality(DirectionOfUse directionality) { - this.directionality = directionality; - } - - public String getDirection() { - return direction; - } - - public void setDirection(String direction) { - this.direction = direction; - } - - public Description getDescription() { - return description; - } - - public void setDescription(Description description) { - this.description = description; - } + private static final long serialVersionUID = 1L; - public String getName() { - return name; - } + @JsonProperty("name") + private String name; - public void setName(String name) { - this.name = name; - } + @JsonProperty("id") + private Id id; - public String getLaneWidth() { - return laneWidth; - } + @JsonProperty("anchor") + private Anchor anchor; - public void setLaneWidth(String laneWidth) { - this.laneWidth = laneWidth; - } + @JsonProperty("laneWidth") + private String laneWidth; - public Anchor getAnchor() { - return anchor; - } + @JsonProperty("directionality") + private DirectionOfUse directionality; - public void setAnchor(Anchor anchor) { - this.anchor = anchor; - } + @JsonProperty("closedPath") + private String closedPath; - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((anchor == null) ? 0 : anchor.hashCode()); - result = prime * result + ((closedPath == null) ? 0 : closedPath.hashCode()); - result = prime * result + ((description == null) ? 0 : description.hashCode()); - result = prime * result + ((direction == null) ? 0 : direction.hashCode()); - result = prime * result + ((directionality == null) ? 0 : directionality.hashCode()); - result = prime * result + ((id == null) ? 0 : id.hashCode()); - result = prime * result + ((laneWidth == null) ? 0 : laneWidth.hashCode()); - result = prime * result + ((name == null) ? 0 : name.hashCode()); - return result; - } + @JsonProperty("direction") + private String direction; - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - GeographicalPath other = (GeographicalPath) obj; - if (anchor == null) { - if (other.anchor != null) - return false; - } else if (!anchor.equals(other.anchor)) - return false; - if (closedPath == null) { - if (other.closedPath != null) - return false; - } else if (!closedPath.equals(other.closedPath)) - return false; - if (description == null) { - if (other.description != null) - return false; - } else if (!description.equals(other.description)) - return false; - if (direction == null) { - if (other.direction != null) - return false; - } else if (!direction.equals(other.direction)) - return false; - if (directionality == null) { - if (other.directionality != null) - return false; - } else if (!directionality.equals(other.directionality)) - return false; - if (id == null) { - if (other.id != null) - return false; - } else if (!id.equals(other.id)) - return false; - if (laneWidth == null) { - if (other.laneWidth != null) - return false; - } else if (!laneWidth.equals(other.laneWidth)) - return false; - if (name == null) { - if (other.name != null) - return false; - } else if (!name.equals(other.name)) - return false; - return true; - } + @JsonProperty("description") + private Description description; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/GeometricProjection.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/GeometricProjection.java index fcedada6b..c39459288 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/GeometricProjection.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/GeometricProjection.java @@ -1,70 +1,45 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; -@JsonPropertyOrder({ "direction", "extent", "laneWidth", "circle" }) +/** + * GeometricProjection. + */ +@JsonPropertyOrder({"direction", "extent", "laneWidth", "circle"}) +@EqualsAndHashCode(callSuper = false) +@Data public class GeometricProjection extends Asn1Object { - private static final long serialVersionUID = 1L; - - @JsonProperty("direction") - private String direction; - - @JsonProperty("extent") - private String extent; - - @JsonProperty("laneWidth") - private String laneWidth; - - @JsonProperty("circle") - private Circle circle; - - public String getExtent() { - return extent; - } - - public void setExtent(String extent) { - this.extent = extent; - } - - public String getDirection() { - return direction; - } - - public void setDirection(String direction) { - this.direction = direction; - } + private static final long serialVersionUID = 1L; - public Circle getCircle() { - return circle; - } + @JsonProperty("direction") + private String direction; - public void setCircle(Circle circle) { - this.circle = circle; - } + @JsonProperty("extent") + private String extent; - public String getLaneWidth() { - return laneWidth; - } + @JsonProperty("laneWidth") + private String laneWidth; - public void setLaneWidth(String laneWidth) { - this.laneWidth = laneWidth; - } + @JsonProperty("circle") + private Circle circle; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ITIS_CodesAndText.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ITIS_CodesAndText.java index 86fabc71e..81e21e014 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ITIS_CodesAndText.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ITIS_CodesAndText.java @@ -16,18 +16,14 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +@EqualsAndHashCode(callSuper = false) +@Data public class ITIS_CodesAndText extends Asn1Object { private static final long serialVersionUID = 1L; - private Items[] SEQUENCE; - @JsonProperty("SEQUENCE") - public Items[] getSEQUENCE() { - return SEQUENCE; - } - public void setSEQUENCE(Items[] sEQUENCE) { - SEQUENCE = sEQUENCE; - } + private Items[] SEQUENCE; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Id.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Id.java index 03671bd51..4ce20b2a7 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Id.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Id.java @@ -1,42 +1,34 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * Id. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class Id extends Asn1Object { - private static final long serialVersionUID = 1L; - - private String region; - - private String id; - - public String getRegion() { - return region; - } - - public void setRegion(String region) { - this.region = region; - } + private static final long serialVersionUID = 1L; - public String getId() { - return id; - } + private String region; - public void setId(String id) { - this.id = id; - } + private String id; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Item.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Item.java index 8d0854007..8660e8359 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Item.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Item.java @@ -15,60 +15,15 @@ ******************************************************************************/ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +@EqualsAndHashCode(callSuper = false) +@Data public class Item extends Asn1Object { private static final long serialVersionUID = 1L; private String itis; private String text; - - public String getItis () - { - return itis; - } - - public void setItis (String itis) - { - this.itis = itis; - } - - public String getText() { - return text; - } - - public void setText(String text) { - this.text = text; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((itis == null) ? 0 : itis.hashCode()); - result = prime * result + ((text == null) ? 0 : text.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Item other = (Item) obj; - if (itis == null) { - if (other.itis != null) - return false; - } else if (!itis.equals(other.itis)) - return false; - if (text == null) { - if (other.text != null) - return false; - } else if (!text.equals(other.text)) - return false; - return true; - } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Items.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Items.java index 6856bbbdf..3932a94c3 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Items.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Items.java @@ -16,47 +16,16 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +@EqualsAndHashCode(callSuper = false) +@Data public class Items extends Asn1Object { private static final long serialVersionUID = 1L; @JsonProperty("item") private Item item; - - public Item getItem() { - return item; - } - - public void setItem(Item item) { - this.item = item; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((item == null) ? 0 : item.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - Items other = (Items) obj; - if (item == null) { - if (other.item != null) - return false; - } else if (!item.equals(other.item)) - return false; - return true; - } - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/LaneDataAttribute.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/LaneDataAttribute.java index 18ffbd306..2f4cc2e6d 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/LaneDataAttribute.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/LaneDataAttribute.java @@ -1,12 +1,15 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * LaneDataAttribute. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class LaneDataAttribute extends Asn1Object { - - /** - * - */ private static final long serialVersionUID = 1L; //-- adjusts final point/width slant @@ -28,52 +31,4 @@ public class LaneDataAttribute extends Asn1Object { // -- Reference regulatory speed limits // -- used by all segments private SpeedLimitList speedLimits; - - public int getPathEndPointAngle() { - return pathEndPointAngle; - } - - public void setPathEndPointAngle(int pathEndPointAngle) { - this.pathEndPointAngle = pathEndPointAngle; - } - - public int getLaneCrownPointCenter() { - return laneCrownPointCenter; - } - - public void setLaneCrownPointCenter(int laneCrownPointCenter) { - this.laneCrownPointCenter = laneCrownPointCenter; - } - - public int getLaneCrownPointLeft() { - return laneCrownPointLeft; - } - - public void setLaneCrownPointLeft(int laneCrownPointLeft) { - this.laneCrownPointLeft = laneCrownPointLeft; - } - - public int getLaneCrownPointRight() { - return laneCrownPointRight; - } - - public void setLaneCrownPointRight(int laneCrownPointRight) { - this.laneCrownPointRight = laneCrownPointRight; - } - - public int getLaneAngle() { - return laneAngle; - } - - public void setLaneAngle(int laneAngle) { - this.laneAngle = laneAngle; - } - - public SpeedLimitList getSpeedLimits() { - return speedLimits; - } - - public void setSpeedLimits(SpeedLimitList speedLimits) { - this.speedLimits = speedLimits; - } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/LaneDataAttributeList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/LaneDataAttributeList.java index 2cff56126..18ffc0cc8 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/LaneDataAttributeList.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/LaneDataAttributeList.java @@ -1,24 +1,19 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * A list of lane data attributes. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class LaneDataAttributeList extends Asn1Object { - /** - * - */ private static final long serialVersionUID = 1L; - - @JsonProperty ("LaneDataAttribute") - private LaneDataAttribute LaneDataAttribute; - - public LaneDataAttribute getLaneDataAttribute() { - return LaneDataAttribute; - } - public void setLaneDataAttribute(LaneDataAttribute laneDataAttribute) { - LaneDataAttribute = laneDataAttribute; - } + @JsonProperty("LaneDataAttribute") + private LaneDataAttribute laneDataAttribute; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MessageFrame.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MessageFrame.java index a0e18ec03..b4ac66c91 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MessageFrame.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MessageFrame.java @@ -16,23 +16,17 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; import us.dot.its.jpo.ode.plugin.j2735.J2735MessageFrame; +@EqualsAndHashCode(callSuper = false) +@Data public class MessageFrame extends Asn1Object { private static final long serialVersionUID = 3450586016818874906L; - private J2735MessageFrame MessageFrame; - @JsonProperty("MessageFrame") - public J2735MessageFrame getMessageFrame() { - return MessageFrame; - } - - public void setMessageFrame(J2735MessageFrame messageFrame) { - MessageFrame = messageFrame; - } - + private J2735MessageFrame MessageFrame; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MsgId.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MsgId.java index 0f043c2b7..1c54b7189 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MsgId.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MsgId.java @@ -1,40 +1,32 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * MsgId. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class MsgId extends Asn1Object { - private static final long serialVersionUID = 1L; - private RoadSignID roadSignID; - private String furtherInfoID; - - public RoadSignID getRoadSignID() { - return roadSignID; - } - - public void setRoadSignID(RoadSignID roadSignID) { - this.roadSignID = roadSignID; - } - - public String getFurtherInfoID() { - return furtherInfoID; - } - - public void setFurtherInfoID(String furtherInfoID) { - this.furtherInfoID = furtherInfoID; - } + private static final long serialVersionUID = 1L; + private RoadSignID roadSignID; + private String furtherInfoID; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MutcdCode.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MutcdCode.java index 48b7b17a9..9ed1694dd 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MutcdCode.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/MutcdCode.java @@ -15,8 +15,12 @@ ******************************************************************************/ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +@EqualsAndHashCode(callSuper = false) +@Data public class MutcdCode extends Asn1Object { private static final long serialVersionUID = 1L; @@ -37,60 +41,4 @@ public enum MutcdCodeEnum { private String motoristService; // (4), -- Motorist Services private String guide; // (5), -- "G" Guide signs private String rec; // 6 - - public String getGuide() { - return guide; - } - - public void setGuide(String guide) { - this.guide = guide; - } - - public String getNone() { - return none; - } - - public void setNone(String none) { - this.none = none; - } - - public String getRegulatory() { - return regulatory; - } - - public void setRegulatory(String regulatory) { - this.regulatory = regulatory; - } - - public String getWarning() { - return warning; - } - - public void setWarning(String warning) { - this.warning = warning; - } - - public String getMaintenance() { - return maintenance; - } - - public void setMaintenance(String maintenance) { - this.maintenance = maintenance; - } - - public String getMotoristService() { - return motoristService; - } - - public void setMotoristService(String motoristService) { - this.motoristService = motoristService; - } - - public String getRec() { - return rec; - } - - public void setRec(String rec) { - this.rec = rec; - } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeAttributeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeAttributeSetXY.java index 683c72ea0..5ec84dd22 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeAttributeSetXY.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeAttributeSetXY.java @@ -1,46 +1,39 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * NodeAttributeSetXY. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class NodeAttributeSetXY extends Asn1Object { - - /** - * - */ private static final long serialVersionUID = 1L; - -// localNode NodeAttributeXYList OPTIONAL, -// -- Attribute states which pertain to this node point -// disabled SegmentAttributeXYList OPTIONAL, -// -- Attribute states which are disabled at this node point -// enabled SegmentAttributeXYList OPTIONAL, -// -- Attribute states which are enabled at this node point -// -- and which remain enabled until disabled or the lane ends -// data LaneDataAttributeList OPTIONAL, -// -- Attributes which require an additional data values -// -- some of these are local to the node point, while others -// -- persist with the provided values until changed -// -- and this is indicated in each entry -// dWidth Offset-B10 OPTIONAL, -// -- A value added to the current lane width -// -- at this node and from this node onwards, in 1cm steps -// -- lane width between nodes are a linear taper between pts -// -- the value of zero shall not be sent here -// dElevation Offset-B10 OPTIONAL, -// -- A value added to the current Elevation -// -- at this node from this node onwards, in 10cm steps -// -- elevations between nodes are a linear taper between pts -// -- the value of zero shall not be sent here - - private LaneDataAttributeList data; - public LaneDataAttributeList getData() { - return data; - } + // localNode NodeAttributeXYList OPTIONAL, + // -- Attribute states which pertain to this node point + // disabled SegmentAttributeXYList OPTIONAL, + // -- Attribute states which are disabled at this node point + // enabled SegmentAttributeXYList OPTIONAL, + // -- Attribute states which are enabled at this node point + // -- and which remain enabled until disabled or the lane ends + // data LaneDataAttributeList OPTIONAL, + // -- Attributes which require an additional data values + // -- some of these are local to the node point, while others + // -- persist with the provided values until changed + // -- and this is indicated in each entry + // dWidth Offset-B10 OPTIONAL, + // -- A value added to the current lane width + // -- at this node and from this node onwards, in 1cm steps + // -- lane width between nodes are a linear taper between pts + // -- the value of zero shall not be sent here + // dElevation Offset-B10 OPTIONAL, + // -- A value added to the current Elevation + // -- at this node from this node onwards, in 10cm steps + // -- elevations between nodes are a linear taper between pts + // -- the value of zero shall not be sent here - public void setData(LaneDataAttributeList data) { - this.data = data; - } - - + private LaneDataAttributeList data; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeLL.java index 0ea3c80e6..aef474cf4 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeLL.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeLL.java @@ -1,34 +1,31 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; -public class NodeLL extends Asn1Object -{ - private static final long serialVersionUID = 1L; - private NodeOffsetPointXY delta; - - public NodeOffsetPointXY getDelta () - { - return delta; - } - - public void setDelta (NodeOffsetPointXY delta) - { - this.delta = delta; - } +/** + * NodeLL. + */ +@EqualsAndHashCode(callSuper = false) +@Data +public class NodeLL extends Asn1Object { + private static final long serialVersionUID = 1L; + private NodeOffsetPointXY delta; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeListLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeListLL.java index e341cf260..ff2c89126 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeListLL.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeListLL.java @@ -1,35 +1,31 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; -public class NodeListLL extends Asn1Object -{ - private static final long serialVersionUID = 1L; - private Nodes nodes; - - public Nodes getNodes () - { - return nodes; - } - - public void setNodes (Nodes nodes) - { - this.nodes = nodes; - } - +/** + * NodeListLL. + */ +@EqualsAndHashCode(callSuper = false) +@Data +public class NodeListLL extends Asn1Object { + private static final long serialVersionUID = 1L; + private Nodes nodes; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeListXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeListXY.java index 1310da0ad..a117e1038 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeListXY.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeListXY.java @@ -1,25 +1,17 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * A list of nodes in the XY plane. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class NodeListXY extends Asn1Object { private static final long serialVersionUID = 1L; private NodeSetXY nodes; private ComputedLane computed; - - public NodeSetXY getNodes() { - return nodes; - } - public void setNodes(NodeSetXY nodes) { - this.nodes = nodes; - } - public ComputedLane getComputed() { - return computed; - } - public void setComputed(ComputedLane computed) { - this.computed = computed; - } - - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeOffsetPointXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeOffsetPointXY.java index dc380935b..9410410f7 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeOffsetPointXY.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeOffsetPointXY.java @@ -1,180 +1,74 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * Node offset point in XY plane. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class NodeOffsetPointXY extends Asn1Object { - private static final long serialVersionUID = 1L; - - @JsonProperty("node-XY") - private Node_XY node_XY; - - @JsonProperty("node-XY1") - private Node_XY node_XY1; - - @JsonProperty("node-XY2") - private Node_XY node_XY2; - - @JsonProperty("node-XY3") - private Node_XY node_XY3; - - @JsonProperty("node-XY4") - private Node_XY node_XY4; - - @JsonProperty("node-XY5") - private Node_XY node_XY5; - - @JsonProperty("node-XY6") - private Node_XY node_XY6; - - @JsonProperty("node-LL1") - private Node_LatLon node_LL1; - - @JsonProperty("node-LL2") - private Node_LatLon node_LL2; - - @JsonProperty("node-LL3") - private Node_LatLon node_LL3; - - @JsonProperty("node-LL4") - private Node_LatLon node_LL4; - - @JsonProperty("node-LL5") - private Node_LatLon node_LL5; - - @JsonProperty("node-LL6") - private Node_LatLon node_LL6; - - @JsonProperty("node-LatLon") - private Node_LatLon node_LatLon; - - public Node_XY getNode_XY() { - return node_XY; - } - - public void setNode_XY(Node_XY node_XY) { - this.node_XY = node_XY; - } - - public Node_XY getNode_XY1() { - return node_XY1; - } - - public void setNode_XY1(Node_XY node_XY1) { - this.node_XY1 = node_XY1; - } - - public Node_XY getNode_XY2() { - return node_XY2; - } - - public void setNode_XY2(Node_XY node_XY2) { - this.node_XY2 = node_XY2; - } - - public Node_XY getNode_XY3() { - return node_XY3; - } - - public void setNode_XY3(Node_XY node_XY3) { - this.node_XY3 = node_XY3; - } - - public Node_XY getNode_XY4() { - return node_XY4; - } - - public void setNode_XY4(Node_XY node_XY4) { - this.node_XY4 = node_XY4; - } - - public Node_XY getNode_XY5() { - return node_XY5; - } - - public void setNode_XY5(Node_XY node_XY5) { - this.node_XY5 = node_XY5; - } - - public Node_XY getNode_XY6() { - return node_XY6; - } - - public void setNode_XY6(Node_XY node_XY6) { - this.node_XY6 = node_XY6; - } - - public Node_LatLon getNode_LL1() { - return node_LL1; - } + private static final long serialVersionUID = 1L; - public void setNode_LL1(Node_LatLon node_LL1) { - this.node_LL1 = node_LL1; - } + @JsonProperty("node-XY") + private NodeXYAsn1Object nodeXY; - public Node_LatLon getNode_LL2() { - return node_LL2; - } + @JsonProperty("node-XY1") + private NodeXYAsn1Object nodeXY1; - public void setNode_LL2(Node_LatLon node_LL2) { - this.node_LL2 = node_LL2; - } + @JsonProperty("node-XY2") + private NodeXYAsn1Object nodeXY2; - public Node_LatLon getNode_LL3() { - return node_LL3; - } + @JsonProperty("node-XY3") + private NodeXYAsn1Object nodeXY3; - public void setNode_LL3(Node_LatLon node_LL3) { - this.node_LL3 = node_LL3; - } + @JsonProperty("node-XY4") + private NodeXYAsn1Object nodeXY4; - public Node_LatLon getNode_LL4() { - return node_LL4; - } + @JsonProperty("node-XY5") + private NodeXYAsn1Object nodeXY5; - public void setNode_LL4(Node_LatLon node_LL4) { - this.node_LL4 = node_LL4; - } + @JsonProperty("node-XY6") + private NodeXYAsn1Object nodeXY6; - public Node_LatLon getNode_LL5() { - return node_LL5; - } + @JsonProperty("node-LL1") + private Node_LatLon nodeLL1; - public void setNode_LL5(Node_LatLon node_LL5) { - this.node_LL5 = node_LL5; - } + @JsonProperty("node-LL2") + private Node_LatLon nodeLL2; - public Node_LatLon getNode_LL6() { - return node_LL6; - } + @JsonProperty("node-LL3") + private Node_LatLon nodeLL3; - public void setNode_LL6(Node_LatLon node_LL6) { - this.node_LL6 = node_LL6; - } + @JsonProperty("node-LL4") + private Node_LatLon nodeLL4; - public Node_LatLon getNode_LatLon() { - return node_LatLon; - } + @JsonProperty("node-LL5") + private Node_LatLon nodeLL5; - public void setNode_LatLon(Node_LatLon node_LatLon) { - this.node_LatLon = node_LatLon; - } + @JsonProperty("node-LL6") + private Node_LatLon nodeLL6; + @JsonProperty("node-LatLon") + private Node_LatLon nodeLatLon; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeSetXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeSetXY.java index 4980d6304..814a1f9b4 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeSetXY.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeSetXY.java @@ -1,22 +1,17 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * A set of one or more nodes in the XY plane. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class NodeSetXY extends Asn1Object { private static final long serialVersionUID = 1L; - - private NodeXY[] NodeXY; - @JsonProperty("NodeXY") - public NodeXY[] getNodeXY() { - return NodeXY; - } - - public void setNodeXY(NodeXY[] nodeXY) { - this.NodeXY = nodeXY; - } - - + private NodeXY[] nodeXY; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeXY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeXY.java index 1b8a3f238..0f416ea3f 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeXY.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeXY.java @@ -1,41 +1,32 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * NodeXY. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class NodeXY extends Asn1Object { private static final long serialVersionUID = 1L; private NodeOffsetPointXY delta; private NodeAttributeSetXY attributes; - - public NodeOffsetPointXY getDelta() { - return delta; - } - - public void setDelta(NodeOffsetPointXY delta) { - this.delta = delta; - } - - public NodeAttributeSetXY getAttributes() { - return attributes; - } - - public void setAttributes(NodeAttributeSetXY attributes) { - this.attributes = attributes; - } - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeXYAsn1Object.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeXYAsn1Object.java new file mode 100644 index 000000000..2db6a761b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/NodeXYAsn1Object.java @@ -0,0 +1,37 @@ +/******************************************************************************* + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License.

+ ******************************************************************************/ + +package us.dot.its.jpo.ode.plugin.j2735.timstorage; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; + +/** + * Node_XY. + */ +@EqualsAndHashCode(callSuper = false) +@Data +public class NodeXYAsn1Object extends Asn1Object { + private static final long serialVersionUID = 1L; + + @JsonProperty("x") + private String xpos; + + @JsonProperty("y") + private String ypos; +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Node_LatLon.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Node_LatLon.java index 96839d4b5..cddc3a5ca 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Node_LatLon.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Node_LatLon.java @@ -15,8 +15,12 @@ ******************************************************************************/ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +@EqualsAndHashCode(callSuper = false) +@Data public class Node_LatLon extends Asn1Object { private static final long serialVersionUID = 1L; @@ -24,20 +28,4 @@ public class Node_LatLon extends Asn1Object { private String lon; private String lat; - - public String getLon() { - return lon; - } - - public void setLon(String lon) { - this.lon = lon; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Node_XY.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Node_XY.java deleted file mode 100644 index 6c0163d46..000000000 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Node_XY.java +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735.timstorage; - -import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; - -public class Node_XY extends Asn1Object { - private static final long serialVersionUID = 1L; - - private String x; - - private String y; - - public String getX() { - return x; - } - - public void setX(String x) { - this.x = x; - } - - public String getY() { - return y; - } - - public void setY(String y) { - this.y = y; - } - -} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Nodes.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Nodes.java index 5a86763fa..f729fd7bf 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Nodes.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Nodes.java @@ -1,43 +1,42 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * Nodes. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class Nodes extends Asn1Object { - private static final long serialVersionUID = 1L; - private NodeLL[] nodeLL; - - @JsonProperty("NodeXY") - private NodeXY[] nodeXY; - - @JsonProperty("NodeLL") - public NodeLL[] getNodeLL() { - return nodeLL; - } + private static final long serialVersionUID = 1L; + @JsonProperty("NodeLL") + private NodeLL[] nodeLL; - public void setNodeLL(NodeLL[] NodeLL) { - this.nodeLL = NodeLL; - } + @JsonProperty("NodeXY") + private NodeXY[] nodeXY; - @Override - public String toString() { - return "ClassPojo [NodeLL = " + nodeLL + "]"; - } + @Override + public String toString() { + return "ClassPojo [NodeLL = " + nodeLL + "]"; + } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Offset.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Offset.java index e17a6a3b0..c0b008e1c 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Offset.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Offset.java @@ -1,41 +1,32 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * Offset. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class Offset extends Asn1Object { private static final long serialVersionUID = 1L; private NodeListLL ll; private NodeListXY xy; - - public NodeListLL getLl() { - return ll; - } - - public void setLl(NodeListLL ll) { - this.ll = ll; - } - - public NodeListXY getXy() { - return xy; - } - - public void setXy(NodeListXY xy) { - this.xy = xy; - } - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/OffsetAxis.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/OffsetAxis.java index dadd10331..02f2a9db9 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/OffsetAxis.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/OffsetAxis.java @@ -1,43 +1,34 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * OffsetAxis. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class OffsetAxis extends Asn1Object { - private static final long serialVersionUID = 7703530986729802700L; - - private Integer small; - - private Integer large; - - public Integer getSmall() { - return small; - } - - public void setSmall(Integer small) { - this.small = small; - } - - public Integer getLarge() { - return large; - } + private static final long serialVersionUID = 7703530986729802700L; - public void setLarge(Integer large) { - this.large = large; - } + private Integer small; + private Integer large; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/OffsetSystem.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/OffsetSystem.java index 2c6a3dd0f..a0ef1b64d 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/OffsetSystem.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/OffsetSystem.java @@ -1,42 +1,34 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * OffsetSystem. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class OffsetSystem extends Asn1Object { - private static final long serialVersionUID = 1L; - - private String scale; - - private Offset offset; - - public String getScale() { - return scale; - } - - public void setScale(String scale) { - this.scale = scale; - } + private static final long serialVersionUID = 1L; - public Offset getOffset() { - return offset; - } + private String scale; - public void setOffset(Offset offset) { - this.offset = offset; - } + private Offset offset; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Position.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Position.java index d38a61d4b..17b43663e 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Position.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Position.java @@ -1,59 +1,42 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * Position given by latitude, longitude, and elevation. + */ @JsonIgnoreProperties(ignoreUnknown = true) -@JsonPropertyOrder({ "lat", "llong", "elevation" }) +@JsonPropertyOrder({"lat", "llong", "elevation"}) +@EqualsAndHashCode(callSuper = false) +@Data public class Position extends Asn1Object { - private static final long serialVersionUID = 1L; - - @JsonProperty("lat") - private String lat; - @JsonProperty("long") - private String llong; - @JsonProperty("elevation") - private String elevation; - - public String getElevation() { - return elevation; - } - - public void setElevation(String elevation) { - this.elevation = elevation; - } - - public String getLlong() { - return llong; - } - - public void setLlong(String lon) { - this.llong = lon; - } - - public String getLat() { - return lat; - } - - public void setLat(String lat) { - this.lat = lat; - } + private static final long serialVersionUID = 1L; + + @JsonProperty("lat") + private String lat; + @JsonProperty("long") + private String llong; + @JsonProperty("elevation") + private String elevation; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionList.java index f7c0c84bd..362d78934 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionList.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionList.java @@ -1,19 +1,16 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * A list of regions. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class RegionList extends Asn1Object { private static final long serialVersionUID = 1L; - - private RegionOffsets[] nodeList; - - public RegionOffsets[] getNodeList() { - return nodeList; - } - public void setNodeList(RegionOffsets[] nodeList) { - this.nodeList = nodeList; - } - - + private RegionOffsets[] nodeList; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionOffsets.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionOffsets.java index 1e7da580e..45731565e 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionOffsets.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionOffsets.java @@ -1,31 +1,22 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * The offsets of a region. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class RegionOffsets extends Asn1Object { private static final long serialVersionUID = 1L; - - private int xOffset; - private int yOffset; - private int zOffset; - public int getxOffset() { - return xOffset; - } - public void setxOffset(int xOffset) { - this.xOffset = xOffset; - } - public int getyOffset() { - return yOffset; - } - public void setyOffset(int yOffset) { - this.yOffset = yOffset; - } - public int getzOffset() { - return zOffset; - } - public void setzOffset(int zOffset) { - this.zOffset = zOffset; - } - - + + @JsonProperty("xOffset") + private int offsetX; + @JsonProperty("yOffset") + private int offsetY; + @JsonProperty("zOffset") + private int offsetZ; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionPointSet.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionPointSet.java index 3e6febdfb..d6cf620e2 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionPointSet.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegionPointSet.java @@ -1,32 +1,18 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * A set of one or more regions. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class RegionPointSet extends Asn1Object { private static final long serialVersionUID = 1L; - + private Position anchor; private int scale; private RegionList regionList; - - public Position getAnchor() { - return anchor; - } - public void setAnchor(Position anchor) { - this.anchor = anchor; - } - public int getScale() { - return scale; - } - public void setScale(int scale) { - this.scale = scale; - } - public RegionList getRegionList() { - return regionList; - } - public void setRegionList(RegionList regionList) { - this.regionList = regionList; - } - - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Regions.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Regions.java index 54cf8cdbd..7f8271fa0 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Regions.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/Regions.java @@ -1,34 +1,33 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * Regions. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class Regions extends Asn1Object { private static final long serialVersionUID = 1L; - private GeographicalPath[] GeographicalPath; - @JsonProperty("GeographicalPath") - public GeographicalPath[] getGeographicalPath() { - return GeographicalPath; - } - - public void setGeographicalPath(GeographicalPath[] geographicalPath) { - this.GeographicalPath = geographicalPath; - } + private GeographicalPath[] geographicalPath; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegulatorySpeedLimit.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegulatorySpeedLimit.java index aa2b2ee7d..bda6aa59c 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegulatorySpeedLimit.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RegulatorySpeedLimit.java @@ -1,27 +1,18 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * The speed limit for a given section of roadway. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class RegulatorySpeedLimit extends Asn1Object { - /** - * - */ private static final long serialVersionUID = 1L; - + private SpeedLimitType type; private int speed; - - public SpeedLimitType getType() { - return type; - } - public void setType(SpeedLimitType type) { - this.type = type; - } - public int getSpeed() { - return speed; - } - public void setSpeed(int speed) { - this.speed = speed; - } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RoadSignID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RoadSignID.java index 5859109a1..459e309b6 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RoadSignID.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/RoadSignID.java @@ -17,10 +17,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; @JsonPropertyOrder({ "position", "viewAngle", "mutcdCode", "crc" }) +@EqualsAndHashCode(callSuper = false) +@Data public class RoadSignID extends Asn1Object { private static final long serialVersionUID = 1L; @@ -35,36 +38,4 @@ public class RoadSignID extends Asn1Object { @JsonProperty("crc") private String crc; - - public Position getPosition() { - return position; - } - - public void setPosition(Position position) { - this.position = position; - } - - public String getCrc() { - return crc; - } - - public void setCrc(String crc) { - this.crc = crc; - } - - public MutcdCode getMutcdCode() { - return mutcdCode; - } - - public void setMutcdCode(MutcdCode mutcdCode) { - this.mutcdCode = mutcdCode; - } - - public String getViewAngle() { - return viewAngle; - } - - public void setViewAngle(String viewAngle) { - this.viewAngle = viewAngle; - } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ShapePointSet.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ShapePointSet.java index 7e364c73a..9a4838f10 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ShapePointSet.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ShapePointSet.java @@ -1,38 +1,19 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * A set of points in the XY plane that define a shape. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class ShapePointSet extends Asn1Object { private static final long serialVersionUID = 1L; - + private Position anchor; private int laneWidth; private DirectionOfUse directionality; private NodeListXY nodeList; - - public Position getAnchor() { - return anchor; - } - public void setAnchor(Position anchor) { - this.anchor = anchor; - } - public int getLaneWidth() { - return laneWidth; - } - public void setLaneWidth(int laneWidth) { - this.laneWidth = laneWidth; - } - public DirectionOfUse getDirectionality() { - return directionality; - } - public void setDirectionality(DirectionOfUse directionality) { - this.directionality = directionality; - } - public NodeListXY getNodeList() { - return nodeList; - } - public void setNodeList(NodeListXY nodeList) { - this.nodeList = nodeList; - } - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/SpeedLimitList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/SpeedLimitList.java index f1d4046ab..800fdb802 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/SpeedLimitList.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/SpeedLimitList.java @@ -1,25 +1,18 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; import com.fasterxml.jackson.annotation.JsonProperty; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * A list of speed limits. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class SpeedLimitList extends Asn1Object { - - /** - * - */ private static final long serialVersionUID = 1L; - - @JsonProperty("RegulatorySpeedLimit") - private RegulatorySpeedLimit[] RegulatorySpeedLimit; - - public RegulatorySpeedLimit[] getRegulatorySpeedLimit() { - return RegulatorySpeedLimit; - } - - public void setRegulatorySpeedLimit(RegulatorySpeedLimit[] regulatorySpeedLimit) { - RegulatorySpeedLimit = regulatorySpeedLimit; - } + @JsonProperty("RegulatorySpeedLimit") + private RegulatorySpeedLimit[] regulatorySpeedLimit; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/SpeedLimitType.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/SpeedLimitType.java index 23ffc939c..965624c68 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/SpeedLimitType.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/SpeedLimitType.java @@ -1,20 +1,26 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * The type of speed limit. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class SpeedLimitType extends Asn1Object { + private static final long serialVersionUID = 1L; /** - * + * Enumerated type for speed limit types. */ - private static final long serialVersionUID = 1L; - public enum SpeedLimitTypeEnum { unknown, //-- Speed limit type not available maxSpeedInSchoolZone, //-- Only sent when the limit is active maxSpeedInSchoolZoneWhenChildrenArePresent, //-- Sent at any time maxSpeedInConstructionZone, //-- Used for work zones, incident zones, etc. - //-- where a reduced speed is present + //-- where a reduced speed is present vehicleMinSpeed, vehicleMaxSpeed, //-- Regulatory speed limit for general traffic vehicleNightMaxSpeed, @@ -39,82 +45,4 @@ public enum SpeedLimitTypeEnum { private String vehiclesWithTrailersMinSpeed; private String vehiclesWithTrailersMaxSpeed; private String vehiclesWithTrailersNightMaxSpeed; - public String getUnknown() { - return unknown; - } - public void setUnknown(String unknown) { - this.unknown = unknown; - } - public String getMaxSpeedInSchoolZone() { - return maxSpeedInSchoolZone; - } - public void setMaxSpeedInSchoolZone(String maxSpeedInSchoolZone) { - this.maxSpeedInSchoolZone = maxSpeedInSchoolZone; - } - public String getMaxSpeedInSchoolZoneWhenChildrenArePresent() { - return maxSpeedInSchoolZoneWhenChildrenArePresent; - } - public void setMaxSpeedInSchoolZoneWhenChildrenArePresent(String maxSpeedInSchoolZoneWhenChildrenArePresent) { - this.maxSpeedInSchoolZoneWhenChildrenArePresent = maxSpeedInSchoolZoneWhenChildrenArePresent; - } - public String getMaxSpeedInConstructionZone() { - return maxSpeedInConstructionZone; - } - public void setMaxSpeedInConstructionZone(String maxSpeedInConstructionZone) { - this.maxSpeedInConstructionZone = maxSpeedInConstructionZone; - } - public String getVehicleMinSpeed() { - return vehicleMinSpeed; - } - public void setVehicleMinSpeed(String vehicleMinSpeed) { - this.vehicleMinSpeed = vehicleMinSpeed; - } - public String getVehicleMaxSpeed() { - return vehicleMaxSpeed; - } - public void setVehicleMaxSpeed(String vehicleMaxSpeed) { - this.vehicleMaxSpeed = vehicleMaxSpeed; - } - public String getVehicleNightMaxSpeed() { - return vehicleNightMaxSpeed; - } - public void setVehicleNightMaxSpeed(String vehicleNightMaxSpeed) { - this.vehicleNightMaxSpeed = vehicleNightMaxSpeed; - } - public String getTruckMinSpeed() { - return truckMinSpeed; - } - public void setTruckMinSpeed(String truckMinSpeed) { - this.truckMinSpeed = truckMinSpeed; - } - public String getTruckMaxSpeed() { - return truckMaxSpeed; - } - public void setTruckMaxSpeed(String truckMaxSpeed) { - this.truckMaxSpeed = truckMaxSpeed; - } - public String getTruckNightMaxSpeed() { - return truckNightMaxSpeed; - } - public void setTruckNightMaxSpeed(String truckNightMaxSpeed) { - this.truckNightMaxSpeed = truckNightMaxSpeed; - } - public String getVehiclesWithTrailersMinSpeed() { - return vehiclesWithTrailersMinSpeed; - } - public void setVehiclesWithTrailersMinSpeed(String vehiclesWithTrailersMinSpeed) { - this.vehiclesWithTrailersMinSpeed = vehiclesWithTrailersMinSpeed; - } - public String getVehiclesWithTrailersMaxSpeed() { - return vehiclesWithTrailersMaxSpeed; - } - public void setVehiclesWithTrailersMaxSpeed(String vehiclesWithTrailersMaxSpeed) { - this.vehiclesWithTrailersMaxSpeed = vehiclesWithTrailersMaxSpeed; - } - public String getVehiclesWithTrailersNightMaxSpeed() { - return vehiclesWithTrailersNightMaxSpeed; - } - public void setVehiclesWithTrailersNightMaxSpeed(String vehiclesWithTrailersNightMaxSpeed) { - this.vehiclesWithTrailersNightMaxSpeed = vehiclesWithTrailersNightMaxSpeed; - } } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerDataFrame.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerDataFrame.java index 381c89ce1..511bc426d 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerDataFrame.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerDataFrame.java @@ -1,169 +1,55 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.timstorage; -import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonAlias; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; -@JsonPropertyOrder({ "notUsed", "frameType", "msgId", "startYear", "startTime", "durationTime", "priority", - "notUsed1", "regions", "notUsed2", "notUsed3", "tcontent", "url" }) +/** + * Traveler data frame. + */ +@JsonPropertyOrder({"doNotUse1", "frameType", "msgId", "startYear", "startTime", "durationTime", + "priority", + "doNotUse2", "regions", "doNotUse3", "doNotUse4", "tcontent", "url"}) +@EqualsAndHashCode(callSuper = false) +@Data public class TravelerDataFrame extends Asn1Object { - private static final long serialVersionUID = 1L; - - private String notUsed; - - private FrameType frameType; - - private MsgId msgId; - - private String startYear; - - private String startTime; - - private String durationTime; - - private String priority; - - private String notUsed1; - - private Regions regions; - - private String notUsed2; - - private String notUsed3; - - @JsonProperty("tcontent") - private Content tcontent; - - private String url; - - public String getNotUsed1() { - return notUsed1; - } - - public void setNotUsed1(String sspLocationRights) { - this.notUsed1 = sspLocationRights; - } - - - public Regions getRegions() { - return regions; - } - - public void setRegions(Regions regions) { - this.regions = regions; - } - - public String getUrl() { - return url; - } - - public void setUrl(String url) { - this.url = url; - } - - public FrameType getFrameType() { - return frameType; - } - - public void setFrameType(FrameType frameType) { - this.frameType = frameType; - } - - public String getDurationTime() { - return durationTime; - } - - public void setDurationTime(String duratonTime) { - this.durationTime = duratonTime; - } - - @JsonIgnore - public Content getContent() { - return tcontent; - } - - public Content getTcontent() { - return tcontent; - } - - public void setTcontent(Content tcontent) { - this.tcontent = tcontent; - } - - public void setContent(Content content) { - this.tcontent = content; - } - - public String getStartTime() { - return startTime; - } - - public void setStartTime(String startTime) { - this.startTime = startTime; - } - - public String getStartYear() { - return startYear; - } - - public void setStartYear(String startYear) { - this.startYear = startYear; - } - - public String getPriority() { - return priority; - } - - public void setPriority(String priority) { - this.priority = priority; - } - - public MsgId getMsgId() { - return msgId; - } - - public void setMsgId(MsgId msgId) { - this.msgId = msgId; - } - - public String getNotUsed3() { - return notUsed3; - } - - public void setNotUsed3(String sspMsgRights2) { - this.notUsed3 = sspMsgRights2; - } - - public String getNotUsed() { - return notUsed; - } - - public void setNotUsed(String sspTimRights) { - this.notUsed = sspTimRights; - } - - public String getNotUsed2() { - return notUsed2; - } - - public void setNotUsed2(String sspMsgRights1) { - this.notUsed2 = sspMsgRights1; - } + private static final long serialVersionUID = 1L; + @JsonAlias({"sspTimRights", "notUsed"}) + private String doNotUse1; + private FrameType frameType; + private MsgId msgId; + private String startYear; + private String startTime; + @JsonAlias("duratonTime") + private String durationTime; + private String priority; + @JsonAlias({"sspLocationRights", "notUsed1"}) + private String doNotUse2; + private Regions regions; + @JsonAlias({"sspMsgContent", "sspMsgRights1", "notUsed2"}) + private String doNotUse3; + @JsonAlias({"sspMsgTypes", "sspMsgRights2", "notUsed3"}) + private String doNotUse4; + @JsonProperty("tcontent") + private Content tcontent; + private String url; } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerInformation.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerInformation.java index 91364bd6f..776a1fb9c 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerInformation.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerInformation.java @@ -17,10 +17,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; - +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; @JsonPropertyOrder({ "msgCnt", "timeStamp", "packetID", "urlB", "dataFrames" }) +@EqualsAndHashCode(callSuper = false) +@Data public class TravelerInformation extends Asn1Object { private static final long serialVersionUID = 1L; @@ -38,92 +41,4 @@ public class TravelerInformation extends Asn1Object { @JsonProperty("dataFrames") private DataFrames dataFrames; - - public int getTimeStamp() { - return timeStamp; - } - - public void setTimeStamp(int timeStamp) { - this.timeStamp = timeStamp; - } - - public String getUrlB() { - return urlB; - } - - public void setUrlB(String urlB) { - this.urlB = urlB; - } - - public String getPacketID() { - return packetID; - } - - public void setPacketID(String packetID) { - this.packetID = packetID; - } - - - public DataFrames getDataFrames() { - return dataFrames; - } - - public void setDataFrames(DataFrames dataFrames) { - this.dataFrames = dataFrames; - } - - public String getMsgCnt() { - return msgCnt; - } - - public void setMsgCnt(String msgCnt) { - this.msgCnt = msgCnt; - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((dataFrames == null) ? 0 : dataFrames.hashCode()); - result = prime * result + ((msgCnt == null) ? 0 : msgCnt.hashCode()); - result = prime * result + ((packetID == null) ? 0 : packetID.hashCode()); - result = prime * result + timeStamp; - result = prime * result + ((urlB == null) ? 0 : urlB.hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - TravelerInformation other = (TravelerInformation) obj; - if (dataFrames == null) { - if (other.dataFrames != null) - return false; - } else if (!dataFrames.equals(other.dataFrames)) - return false; - if (msgCnt == null) { - if (other.msgCnt != null) - return false; - } else if (!msgCnt.equals(other.msgCnt)) - return false; - if (packetID == null) { - if (other.packetID != null) - return false; - } else if (!packetID.equals(other.packetID)) - return false; - if (timeStamp != other.timeStamp) - return false; - if (urlB == null) { - if (other.urlB != null) - return false; - } else if (!urlB.equals(other.urlB)) - return false; - return true; - } - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerInputData.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerInputData.java index 103ee168a..0ef4f4d97 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerInputData.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerInputData.java @@ -15,30 +15,17 @@ ******************************************************************************/ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.model.OdeObject; import us.dot.its.jpo.ode.plugin.ServiceRequest; +@EqualsAndHashCode(callSuper = false) +@Data public class TravelerInputData extends OdeObject { private static final long serialVersionUID = 1L; private ServiceRequest request; private TravelerInformation tim; - - public ServiceRequest getRequest() { - return request; - } - - public void setRequest(ServiceRequest request) { - this.request = request; - } - - public TravelerInformation getTim() { - return tim; - } - - public void setTim(TravelerInformation tim) { - this.tim = tim; - } - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ValidRegion.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ValidRegion.java index 1add35ac1..d2382488c 100644 --- a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ValidRegion.java +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/ValidRegion.java @@ -1,31 +1,18 @@ package us.dot.its.jpo.ode.plugin.j2735.timstorage; +import lombok.Data; +import lombok.EqualsAndHashCode; import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +/** + * ValidRegion. + */ +@EqualsAndHashCode(callSuper = false) +@Data public class ValidRegion extends Asn1Object { private static final long serialVersionUID = 1L; private String direction; private Extent extent; private Area area; - - public String getDirection() { - return direction; - } - public void setDirection(String direction) { - this.direction = direction; - } - public Extent getExtent() { - return extent; - } - public void setExtent(Extent extent) { - this.extent = extent; - } - public Area getArea() { - return area; - } - public void setArea(Area area) { - this.area = area; - } - } diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Circle.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Circle.java new file mode 100644 index 000000000..44835164e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Circle.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Circle extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "center") + @JsonProperty("center") + private Position3D center; + @Asn1Property(tag = 1, name = "radius") + @JsonProperty("radius") + private Radius_B12 radius; + @Asn1Property(tag = 2, name = "units") + @JsonProperty("units") + private DistanceUnits units; + + Circle() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUse.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUse.java new file mode 100644 index 000000000..902b5e200 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUse.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = DirectionOfUseSerializer.class) +@JsonDeserialize(using = DirectionOfUseDeserializer.class) +public enum DirectionOfUse implements Asn1Enumerated { + UNAVAILABLE(0, "unavailable"), FORWARD(1, "forward"), REVERSE(2, "reverse"), BOTH(3, "both"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private DirectionOfUse(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 3; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseDeserializer.java new file mode 100644 index 000000000..f4c534505 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class DirectionOfUseDeserializer extends EnumeratedDeserializer { + + DirectionOfUseDeserializer() { + super(DirectionOfUse.class); + } + + @Override + protected DirectionOfUse[] listEnumValues() { + return DirectionOfUse.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseSerializer.java new file mode 100644 index 000000000..2dfb054c4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DirectionOfUseSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class DirectionOfUseSerializer extends EnumeratedSerializer { + + DirectionOfUseSerializer() { + super(DirectionOfUse.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnits.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnits.java new file mode 100644 index 000000000..e68c69632 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnits.java @@ -0,0 +1,52 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = DistanceUnitsSerializer.class) +@JsonDeserialize(using = DistanceUnitsDeserializer.class) +public enum DistanceUnits implements Asn1Enumerated { + CENTIMETER(0, "centimeter"), CM2_5(1, "cm2-5"), DECIMETER(2, "decimeter"), METER(3, "meter"), KILOMETER(4, + "kilometer"), FOOT(5, "foot"), YARD(6, "yard"), MILE(7, "mile"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private DistanceUnits(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 7; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsDeserializer.java new file mode 100644 index 000000000..d516cef3a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class DistanceUnitsDeserializer extends EnumeratedDeserializer { + + DistanceUnitsDeserializer() { + super(DistanceUnits.class); + } + + @Override + protected DistanceUnits[] listEnumValues() { + return DistanceUnits.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsSerializer.java new file mode 100644 index 000000000..7fdcc3f1e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/DistanceUnitsSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class DistanceUnitsSerializer extends EnumeratedSerializer { + + DistanceUnitsSerializer() { + super(DistanceUnits.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitService.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitService.java new file mode 100644 index 000000000..3077251ad --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitService.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class ExitService extends Asn1SequenceOf { + + ExitService() { + super(ExitServiceSequence.class, 1L, 16L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitServiceSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitServiceSequence.java new file mode 100644 index 000000000..ee43415f2 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ExitServiceSequence.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodes; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ExitServiceSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStextPhrase text; + + ItemChoice() { + super(false); + } + } + + ExitServiceSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignage.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignage.java new file mode 100644 index 000000000..f4138128b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignage.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class GenericSignage extends Asn1SequenceOf { + + GenericSignage() { + super(GenericSignageSequence.class, 1L, 16L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignageSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignageSequence.java new file mode 100644 index 000000000..d795ed5fd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GenericSignageSequence.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodes; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class GenericSignageSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStextPhrase text; + + ItemChoice() { + super(false); + } + } + + GenericSignageSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeographicalPath.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeographicalPath.java new file mode 100644 index 000000000..3c0e9ebeb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeographicalPath.java @@ -0,0 +1,102 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.*; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_GeographicalPath; +import us.dot.its.jpo.ode.plugin.types.Asn1Boolean; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class GeographicalPath extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "name", optional = true) + @JsonProperty("name") + private DescriptiveName name; + @Asn1Property(tag = 1, name = "id", optional = true) + @JsonProperty("id") + private RoadSegmentReferenceID id; + @Asn1Property(tag = 2, name = "anchor", optional = true) + @JsonProperty("anchor") + private Position3D anchor; + @Asn1Property(tag = 3, name = "laneWidth", optional = true) + @JsonProperty("laneWidth") + private LaneWidth laneWidth; + @Asn1Property(tag = 4, name = "directionality", optional = true) + @JsonProperty("directionality") + private DirectionOfUse directionality; + @Asn1Property(tag = 5, name = "closedPath", optional = true) + @JsonProperty("closedPath") + private Asn1Boolean closedPath; + @Asn1Property(tag = 6, name = "direction", optional = true) + @JsonProperty("direction") + private HeadingSlice direction; + @Asn1Property(tag = 7, name = "description", optional = true) + @JsonProperty("description") + private DescriptionChoice description; + @Asn1Property(tag = 8, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class DescriptionChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "path") + @JsonProperty("path") + private OffsetSystem path; + @Asn1Property(tag = 1, name = "geometry") + @JsonProperty("geometry") + private GeometricProjection geometry; + @Asn1Property(tag = 2, name = "oldRegion") + @JsonProperty("oldRegion") + private ValidRegion oldRegion; + + DescriptionChoice() { + super(true); + } + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_GeographicalPath.class, 1L, 4L); + } + } + + GeographicalPath() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeometricProjection.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeometricProjection.java new file mode 100644 index 000000000..4b7aae252 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/GeometricProjection.java @@ -0,0 +1,71 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Extent; +import us.dot.its.jpo.ode.plugin.j2735.common.HeadingSlice; +import us.dot.its.jpo.ode.plugin.j2735.common.LaneWidth; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_GeometricProjection; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class GeometricProjection extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "direction") + @JsonProperty("direction") + private HeadingSlice direction; + @Asn1Property(tag = 1, name = "extent", optional = true) + @JsonProperty("extent") + private Extent extent; + @Asn1Property(tag = 2, name = "laneWidth", optional = true) + @JsonProperty("laneWidth") + private LaneWidth laneWidth; + @Asn1Property(tag = 3, name = "circle") + @JsonProperty("circle") + private Circle circle; + @Asn1Property(tag = 4, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_GeometricProjection.class, 1L, 4L); + } + } + + GeometricProjection() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ITIStextPhrase.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ITIStextPhrase.java new file mode 100644 index 000000000..db066f0c9 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ITIStextPhrase.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class ITIStextPhrase extends IA5String { + + public ITIStextPhrase() { + super(1, 16); + } + + @JsonCreator + public ITIStextPhrase(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCode.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCode.java new file mode 100644 index 000000000..f14d62179 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCode.java @@ -0,0 +1,52 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = MUTCDCodeSerializer.class) +@JsonDeserialize(using = MUTCDCodeDeserializer.class) +public enum MUTCDCode implements Asn1Enumerated { + NONE(0, "none"), REGULATORY(1, "regulatory"), WARNING(2, "warning"), MAINTENANCE(3, + "maintenance"), MOTORISTSERVICE(4, "motoristService"), GUIDE(5, "guide"), REC(6, "rec"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private MUTCDCode(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 6; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeDeserializer.java new file mode 100644 index 000000000..31f24e527 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class MUTCDCodeDeserializer extends EnumeratedDeserializer { + + MUTCDCodeDeserializer() { + super(MUTCDCode.class); + } + + @Override + protected MUTCDCode[] listEnumValues() { + return MUTCDCode.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeSerializer.java new file mode 100644 index 000000000..d9418e9ad --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MUTCDCodeSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class MUTCDCodeSerializer extends EnumeratedSerializer { + + MUTCDCodeSerializer() { + super(MUTCDCode.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MinutesDuration.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MinutesDuration.java new file mode 100644 index 000000000..ea4e0e390 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MinutesDuration.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = MinutesDuration.MinutesDurationDeserializer.class) +public class MinutesDuration extends Asn1Integer { + + public MinutesDuration() { + super(0L, 32000L); + } + + @JsonCreator + public MinutesDuration(long value) { + this(); + this.value = value; + } + + public static class MinutesDurationDeserializer extends IntegerDeserializer { + public MinutesDurationDeserializer() { + super(MinutesDuration.class); + } + + @Override + protected MinutesDuration construct() { + return new MinutesDuration(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MsgCRC.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MsgCRC.java new file mode 100644 index 000000000..54d976060 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/MsgCRC.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import us.dot.its.jpo.ode.plugin.types.Asn1OctetString; + +public class MsgCRC extends Asn1OctetString { + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return value; + } + + public MsgCRC() { + super(2, 2); + } + + @JsonCreator + public MsgCRC(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLL.java new file mode 100644 index 000000000..02f729046 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLL.java @@ -0,0 +1,55 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = NodeAttributeLLSerializer.class) +@JsonDeserialize(using = NodeAttributeLLDeserializer.class) +public enum NodeAttributeLL implements Asn1Enumerated { + RESERVED(0, "reserved"), STOPLINE(1, "stopLine"), ROUNDEDCAPSTYLEA(2, "roundedCapStyleA"), ROUNDEDCAPSTYLEB(3, + "roundedCapStyleB"), MERGEPOINT(4, "mergePoint"), DIVERGEPOINT(5, "divergePoint"), DOWNSTREAMSTOPLINE(6, + "downstreamStopLine"), DOWNSTREAMSTARTNODE(7, "downstreamStartNode"), CLOSEDTOTRAFFIC(8, + "closedToTraffic"), SAFEISLAND(9, "safeIsland"), CURBPRESENTATSTEPOFF(10, + "curbPresentAtStepOff"), HYDRANTPRESENT(11, "hydrantPresent"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private NodeAttributeLL(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 11; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLDeserializer.java new file mode 100644 index 000000000..7621e8150 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class NodeAttributeLLDeserializer extends EnumeratedDeserializer { + + NodeAttributeLLDeserializer() { + super(NodeAttributeLL.class); + } + + @Override + protected NodeAttributeLL[] listEnumValues() { + return NodeAttributeLL.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLList.java new file mode 100644 index 000000000..f8a63b584 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLList.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfEnumeratedDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class NodeAttributeLLList extends Asn1SequenceOf { + + NodeAttributeLLList() { + super(NodeAttributeLL.class, 1L, 8L); + } + + public static class NodeAttributeLLListDeserializer + extends + SequenceOfEnumeratedDeserializer { + public NodeAttributeLLListDeserializer() { + super(NodeAttributeLLList.class, NodeAttributeLL.class); + } + + @Override + protected NodeAttributeLL[] listEnumValues() { + return NodeAttributeLL.values(); + } + + @Override + protected NodeAttributeLLList construct() { + return new NodeAttributeLLList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLSerializer.java new file mode 100644 index 000000000..508fcb134 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeLLSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class NodeAttributeLLSerializer extends EnumeratedSerializer { + + NodeAttributeLLSerializer() { + super(NodeAttributeLL.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLL.java new file mode 100644 index 000000000..405183c27 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLL.java @@ -0,0 +1,83 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.LaneDataAttributeList; +import us.dot.its.jpo.ode.plugin.j2735.common.Offset_B10; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_NodeAttributeSetLL; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class NodeAttributeSetLL extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "localNode", optional = true) + @JsonProperty("localNode") + @JsonDeserialize(using = NodeAttributeLLList.NodeAttributeLLListDeserializer.class) + private NodeAttributeLLList localNode; + @Asn1Property(tag = 1, name = "disabled", optional = true) + @JsonProperty("disabled") + @JsonDeserialize(using = SegmentAttributeLLList.SegmentAttributeLLListDeserializer.class) + private SegmentAttributeLLList disabled; + @Asn1Property(tag = 2, name = "enabled", optional = true) + @JsonProperty("enabled") + @JsonDeserialize(using = SegmentAttributeLLList.SegmentAttributeLLListDeserializer.class) + private SegmentAttributeLLList enabled; + @Asn1Property(tag = 3, name = "data", optional = true) + @JsonProperty("data") + @JsonSerialize(using = LaneDataAttributeList.LaneDataAttributeListSerializer.class) + @JsonDeserialize(using = LaneDataAttributeList.LaneDataAttributeListDeserializer.class) + private LaneDataAttributeList data; + @Asn1Property(tag = 4, name = "dWidth", optional = true) + @JsonProperty("dWidth") + private Offset_B10 dWidth; + @Asn1Property(tag = 5, name = "dElevation", optional = true) + @JsonProperty("dElevation") + private Offset_B10 dElevation; + @Asn1Property(tag = 6, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_NodeAttributeSetLL.class, 1L, 4L); + } + } + + NodeAttributeSetLL() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeLL.java new file mode 100644 index 000000000..7247ae614 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeLL.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class NodeLL extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "delta") + @JsonProperty("delta") + private NodeOffsetPointLL delta; + @Asn1Property(tag = 1, name = "attributes", optional = true) + @JsonProperty("attributes") + private NodeAttributeSetLL attributes; + + NodeLL() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeListLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeListLL.java new file mode 100644 index 000000000..c5f98d200 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeListLL.java @@ -0,0 +1,49 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class NodeListLL extends Asn1Choice { + + @Asn1Property(tag = 0, name = "nodes") + @JsonProperty("nodes") + @JacksonXmlElementWrapper(localName = "nodes") + @JacksonXmlProperty(localName = "NodeLL") + private NodeSetLL nodes; + + NodeListLL() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeOffsetPointLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeOffsetPointLL.java new file mode 100644 index 000000000..c3f131082 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeOffsetPointLL.java @@ -0,0 +1,68 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Node_LLmD_64b; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_NodeOffsetPointLL; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; + +@Getter +@Setter +@JsonInclude(Include.NON_NULL) +public class NodeOffsetPointLL extends Asn1Choice { + + @Asn1Property(tag = 0, name = "node-LL1") + @JsonProperty("node-LL1") + private Node_LL_24B node_LL1; + @Asn1Property(tag = 1, name = "node-LL2") + @JsonProperty("node-LL2") + private Node_LL_28B node_LL2; + @Asn1Property(tag = 2, name = "node-LL3") + @JsonProperty("node-LL3") + private Node_LL_32B node_LL3; + @Asn1Property(tag = 3, name = "node-LL4") + @JsonProperty("node-LL4") + private Node_LL_36B node_LL4; + @Asn1Property(tag = 4, name = "node-LL5") + @JsonProperty("node-LL5") + private Node_LL_44B node_LL5; + @Asn1Property(tag = 5, name = "node-LL6") + @JsonProperty("node-LL6") + private Node_LL_48B node_LL6; + @Asn1Property(tag = 6, name = "node-LatLon") + @JsonProperty("node-LatLon") + private Node_LLmD_64b node_LatLon; + @Asn1Property(tag = 7, name = "regional") + @JsonProperty("regional") + private Reg_NodeOffsetPointLL regional; + + NodeOffsetPointLL() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeSetLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeSetLL.java new file mode 100644 index 000000000..beb77e1fc --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeSetLL.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class NodeSetLL extends Asn1SequenceOf { + + NodeSetLL() { + super(NodeLL.class, 2L, 63L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_24B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_24B.java new file mode 100644 index 000000000..d18ddfbce --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_24B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B12; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_24B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B12 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B12 lat; + + Node_LL_24B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_28B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_28B.java new file mode 100644 index 000000000..eb8294ef1 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_28B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B14; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_28B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B14 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B14 lat; + + Node_LL_28B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_32B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_32B.java new file mode 100644 index 000000000..8d128491a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_32B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B16; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_32B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B16 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B16 lat; + + Node_LL_32B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_36B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_36B.java new file mode 100644 index 000000000..439cf372f --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_36B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B18; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_36B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B18 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B18 lat; + + Node_LL_36B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_44B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_44B.java new file mode 100644 index 000000000..571ca2a98 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_44B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B22; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_44B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B22 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B22 lat; + + Node_LL_44B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_48B.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_48B.java new file mode 100644 index 000000000..b93dec8cd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Node_LL_48B.java @@ -0,0 +1,51 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B24; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class Node_LL_48B extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "lon") + @JsonProperty("lon") + private OffsetLL_B24 lon; + @Asn1Property(tag = 1, name = "lat") + @JsonProperty("lat") + private OffsetLL_B24 lat; + + Node_LL_48B() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/OffsetSystem.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/OffsetSystem.java new file mode 100644 index 000000000..ded65d7f4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/OffsetSystem.java @@ -0,0 +1,68 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.NodeListXY; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class OffsetSystem extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "scale", optional = true) + @JsonProperty("scale") + private Zoom scale; + @Asn1Property(tag = 1, name = "offset") + @JsonProperty("offset") + private OffsetChoice offset; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class OffsetChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "xy") + @JsonProperty("xy") + private NodeListXY xy; + @Asn1Property(tag = 1, name = "ll") + @JsonProperty("ll") + private NodeListLL ll; + + OffsetChoice() { + super(false); + } + } + + OffsetSystem() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Radius_B12.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Radius_B12.java new file mode 100644 index 000000000..5d75071dd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Radius_B12.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Radius_B12.Radius_B12Deserializer.class) +public class Radius_B12 extends Asn1Integer { + + public Radius_B12() { + super(0L, 4095L); + } + + @JsonCreator + public Radius_B12(long value) { + this(); + this.value = value; + } + + public static class Radius_B12Deserializer extends IntegerDeserializer { + public Radius_B12Deserializer() { + super(Radius_B12.class); + } + + @Override + protected Radius_B12 construct() { + return new Radius_B12(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionList.java new file mode 100644 index 000000000..d74e70b05 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionList.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class RegionList extends Asn1SequenceOf { + + RegionList() { + super(RegionOffsets.class, 1L, 64L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionOffsets.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionOffsets.java new file mode 100644 index 000000000..f4f392fd6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionOffsets.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.OffsetLL_B16; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RegionOffsets extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "xOffset") + @JsonProperty("xOffset") + private OffsetLL_B16 xOffset; + @Asn1Property(tag = 1, name = "yOffset") + @JsonProperty("yOffset") + private OffsetLL_B16 yOffset; + @Asn1Property(tag = 2, name = "zOffset", optional = true) + @JsonProperty("zOffset") + private OffsetLL_B16 zOffset; + + RegionOffsets() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionPointSet.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionPointSet.java new file mode 100644 index 000000000..ad261e6bb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RegionPointSet.java @@ -0,0 +1,58 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RegionPointSet extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "anchor", optional = true) + @JsonProperty("anchor") + private Position3D anchor; + @Asn1Property(tag = 1, name = "scale", optional = true) + @JsonProperty("scale") + private Zoom scale; + @Asn1Property(tag = 2, name = "nodeList") + @JsonProperty("nodeList") + @JacksonXmlElementWrapper(localName = "nodeList") + @JacksonXmlProperty(localName = "RegionOffsets") + private RegionList nodeList; + + RegionPointSet() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RoadSignID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RoadSignID.java new file mode 100644 index 000000000..bf8582829 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/RoadSignID.java @@ -0,0 +1,58 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.HeadingSlice; +import us.dot.its.jpo.ode.plugin.j2735.common.Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class RoadSignID extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "position") + @JsonProperty("position") + private Position3D position; + @Asn1Property(tag = 1, name = "viewAngle") + @JsonProperty("viewAngle") + private HeadingSlice viewAngle; + @Asn1Property(tag = 2, name = "mutcdCode", optional = true) + @JsonProperty("mutcdCode") + private MUTCDCode mutcdCode; + @Asn1Property(tag = 3, name = "crc", optional = true) + @JsonProperty("crc") + private MsgCRC crc; + + RoadSignID() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLL.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLL.java new file mode 100644 index 000000000..cd1cb6fbd --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLL.java @@ -0,0 +1,103 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = SegmentAttributeLLSerializer.class) +@JsonDeserialize(using = SegmentAttributeLLDeserializer.class) +public enum SegmentAttributeLL implements Asn1Enumerated { + RESERVED(0, "reserved"), DONOTBLOCK(1, "doNotBlock"), WHITELINE(2, "whiteLine"), MERGINGLANELEFT(3, + "mergingLaneLeft"), MERGINGLANERIGHT(4, "mergingLaneRight"), CURBONLEFT(5, "curbOnLeft"), CURBONRIGHT(6, + "curbOnRight"), LOADINGZONEONLEFT(7, "loadingzoneOnLeft"), LOADINGZONEONRIGHT(8, + "loadingzoneOnRight"), TURNOUTPOINTONLEFT(9, "turnOutPointOnLeft"), TURNOUTPOINTONRIGHT(10, + "turnOutPointOnRight"), ADJACENTPARKINGONLEFT(11, + "adjacentParkingOnLeft"), ADJACENTPARKINGONRIGHT(12, + "adjacentParkingOnRight"), ADJACENTBIKELANEONLEFT(13, + "adjacentBikeLaneOnLeft"), ADJACENTBIKELANEONRIGHT(14, + "adjacentBikeLaneOnRight"), SHAREDBIKELANE(15, + "sharedBikeLane"), BIKEBOXINFRONT(16, + "bikeBoxInFront"), TRANSITSTOPONLEFT( + 17, + "transitStopOnLeft"), TRANSITSTOPONRIGHT( + 18, + "transitStopOnRight"), TRANSITSTOPINLANE( + 19, + "transitStopInLane"), SHAREDWITHTRACKEDVEHICLE( + 20, + "sharedWithTrackedVehicle"), SAFEISLAND( + 21, + "safeIsland"), LOWCURBSPRESENT( + 22, + "lowCurbsPresent"), RUMBLESTRIPPRESENT( + 23, + "rumbleStripPresent"), AUDIBLESIGNALINGPRESENT( + 24, + "audibleSignalingPresent"), ADAPTIVETIMINGPRESENT( + 25, + "adaptiveTimingPresent"), RFSIGNALREQUESTPRESENT( + 26, + "rfSignalRequestPresent"), PARTIALCURBINTRUSION( + 27, + "partialCurbIntrusion"), TAPERTOLEFT( + 28, + "taperToLeft"), TAPERTORIGHT( + 29, + "taperToRight"), TAPERTOCENTERLINE( + 30, + "taperToCenterLine"), PARALLELPARKING( + 31, + "parallelParking"), HEADINPARKING( + 32, + "headInParking"), FREEPARKING( + 33, + "freeParking"), TIMERESTRICTIONSONPARKING( + 34, + "timeRestrictionsOnParking"), COSTTOPARK( + 35, + "costToPark"), MIDBLOCKCURBPRESENT( + 36, + "midBlockCurbPresent"), UNEVENPAVEMENTPRESENT( + 37, + "unEvenPavementPresent"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private SegmentAttributeLL(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 37; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLDeserializer.java new file mode 100644 index 000000000..e301cda4a --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class SegmentAttributeLLDeserializer extends EnumeratedDeserializer { + + SegmentAttributeLLDeserializer() { + super(SegmentAttributeLL.class); + } + + @Override + protected SegmentAttributeLL[] listEnumValues() { + return SegmentAttributeLL.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLList.java new file mode 100644 index 000000000..9736b4f0d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLList.java @@ -0,0 +1,54 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.serialization.SequenceOfEnumeratedDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class SegmentAttributeLLList extends Asn1SequenceOf { + + SegmentAttributeLLList() { + super(SegmentAttributeLL.class, 1L, 8L); + } + + public static class SegmentAttributeLLListDeserializer + extends + SequenceOfEnumeratedDeserializer { + public SegmentAttributeLLListDeserializer() { + super(SegmentAttributeLLList.class, SegmentAttributeLL.class); + } + + @Override + protected SegmentAttributeLL[] listEnumValues() { + return SegmentAttributeLL.values(); + } + + @Override + protected SegmentAttributeLLList construct() { + return new SegmentAttributeLLList(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLSerializer.java new file mode 100644 index 000000000..8c933cc0c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SegmentAttributeLLSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class SegmentAttributeLLSerializer extends EnumeratedSerializer { + + SegmentAttributeLLSerializer() { + super(SegmentAttributeLL.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ShapePointSet.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ShapePointSet.java new file mode 100644 index 000000000..f0852af82 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ShapePointSet.java @@ -0,0 +1,59 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.LaneWidth; +import us.dot.its.jpo.ode.plugin.j2735.common.NodeListXY; +import us.dot.its.jpo.ode.plugin.j2735.common.Position3D; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ShapePointSet extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "anchor", optional = true) + @JsonProperty("anchor") + private Position3D anchor; + @Asn1Property(tag = 1, name = "laneWidth", optional = true) + @JsonProperty("laneWidth") + private LaneWidth laneWidth; + @Asn1Property(tag = 2, name = "directionality", optional = true) + @JsonProperty("directionality") + private DirectionOfUse directionality; + @Asn1Property(tag = 3, name = "nodeList") + @JsonProperty("nodeList") + private NodeListXY nodeList; + + ShapePointSet() { + super(true); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SignPrority.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SignPrority.java new file mode 100644 index 000000000..69fdf27c8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SignPrority.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = SignPrority.SignProrityDeserializer.class) +public class SignPrority extends Asn1Integer { + + public SignPrority() { + super(0L, 7L); + } + + @JsonCreator + public SignPrority(long value) { + this(); + this.value = value; + } + + public static class SignProrityDeserializer extends IntegerDeserializer { + public SignProrityDeserializer() { + super(SignPrority.class); + } + + @Override + protected SignPrority construct() { + return new SignPrority(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimit.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimit.java new file mode 100644 index 000000000..b7d83248c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimit.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class SpeedLimit extends Asn1SequenceOf { + + SpeedLimit() { + super(SpeedLimitSequence.class, 1L, 16L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimitSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimitSequence.java new file mode 100644 index 000000000..427028322 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/SpeedLimitSequence.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodes; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class SpeedLimitSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStextPhrase text; + + ItemChoice() { + super(false); + } + } + + SpeedLimitSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java new file mode 100644 index 000000000..601b13f2b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java @@ -0,0 +1,222 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonAlias; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.DYear; +import us.dot.its.jpo.ode.plugin.j2735.common.FurtherInfoID; +import us.dot.its.jpo.ode.plugin.j2735.common.MinuteOfTheYear; +import us.dot.its.jpo.ode.plugin.j2735.common.SSPindex; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodesAndText; +import us.dot.its.jpo.ode.plugin.serialization.NestedSequenceOfDeserializer; +import us.dot.its.jpo.ode.plugin.serialization.NestedSequenceOfSerializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/* + * EDITED -> doNotUse1, doNotUse2, doNotUse3, doNotUse4, durationTime fields. + */ + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class TravelerDataFrame extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "doNotUse1") + @JsonProperty("doNotUse1") + @JsonAlias({"sspTimRights", "notUsed"}) + private SSPindex doNotUse1; + @Asn1Property(tag = 1, name = "frameType") + @JsonProperty("frameType") + private TravelerInfoType frameType; + @Asn1Property(tag = 2, name = "msgId") + @JsonProperty("msgId") + private MsgIdChoice msgId; + @Asn1Property(tag = 3, name = "startYear", optional = true) + @JsonProperty("startYear") + private DYear startYear; + @Asn1Property(tag = 4, name = "startTime") + @JsonProperty("startTime") + private MinuteOfTheYear startTime; + @Asn1Property(tag = 5, name = "durationTime") + @JsonProperty("durationTime") + @JsonAlias("duratonTime") + private MinutesDuration durationTime; + @Asn1Property(tag = 6, name = "priority") + @JsonProperty("priority") + private SignPrority priority; + @Asn1Property(tag = 7, name = "doNotUse2") + @JsonProperty("doNotUse2") + @JsonAlias({"sspLocationRights", "notUsed1"}) + private SSPindex doNotUse2; + @Asn1Property(tag = 8, name = "regions") + @JsonProperty("regions") + private SequenceOfRegions regions; + @Asn1Property(tag = 9, name = "doNotUse3") + @JsonProperty("doNotUse3") + @JsonAlias({"sspMsgContent", "sspMsgRights1", "notUsed2"}) + private SSPindex doNotUse3; + @Asn1Property(tag = 10, name = "doNotUse4") + @JsonProperty("doNotUse4") + @JsonAlias({"sspMsgTypes", "sspMsgRights2", "notUsed3"}) + private SSPindex doNotUse4; + @Asn1Property(tag = 11, name = "content") + @JsonProperty("content") + private ContentChoice content; + @Asn1Property(tag = 12, name = "url", optional = true) + @JsonProperty("url") + private URL_Short url; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class MsgIdChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "furtherInfoID") + @JsonProperty("furtherInfoID") + private FurtherInfoID furtherInfoID; + @Asn1Property(tag = 1, name = "roadSignID") + @JsonProperty("roadSignID") + private RoadSignID roadSignID; + + MsgIdChoice() { + super(false); + } + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegions extends Asn1SequenceOf { + SequenceOfRegions() { + super(GeographicalPath.class, 1L, 16L); + } + } + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ContentChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "advisory") + @JsonProperty("advisory") + @JsonDeserialize(using = AdvisoryDeserializer.class) + @JsonSerialize(using = AdvisorySerializer.class) + private ITIScodesAndText advisory; + @Asn1Property(tag = 1, name = "workZone") + @JsonProperty("workZone") + @JsonDeserialize(using = WorkZoneDeserializer.class) + @JsonSerialize(using = WorkZoneSerializer.class) + private WorkZone workZone; + @Asn1Property(tag = 2, name = "genericSign") + @JsonProperty("genericSign") + @JsonDeserialize(using = GenericSignDeserializer.class) + @JsonSerialize(using = GenericSignSerializer.class) + private GenericSignage genericSign; + @Asn1Property(tag = 3, name = "speedLimit") + @JsonProperty("speedLimit") + @JsonDeserialize(using = SpeedLimitDeserializer.class) + @JsonSerialize(using = SpeedLimitSerializer.class) + private SpeedLimit speedLimit; + @Asn1Property(tag = 4, name = "exitService") + @JsonProperty("exitService") + @JsonDeserialize(using = ExitServiceDeserializer.class) + @JsonSerialize(using = ExitServiceSerializer.class) + private ExitService exitService; + + ContentChoice() { + super(false); + } + } + + TravelerDataFrame() { + super(true); + } + + public static class AdvisoryDeserializer extends NestedSequenceOfDeserializer { + public AdvisoryDeserializer() { + super(ITIScodesAndText.class, "SEQUENCE"); + } + } + + public static class AdvisorySerializer extends NestedSequenceOfSerializer { + public AdvisorySerializer() { + super(ITIScodesAndText.class, "SEQUENCE"); + } + } + + public static class WorkZoneDeserializer extends NestedSequenceOfDeserializer { + public WorkZoneDeserializer() { + super(WorkZone.class, "SEQUENCE"); + } + } + + public static class WorkZoneSerializer extends NestedSequenceOfSerializer { + public WorkZoneSerializer() { + super(WorkZone.class, "SEQUENCE"); + } + } + + public static class GenericSignDeserializer extends NestedSequenceOfDeserializer { + public GenericSignDeserializer() { + super(GenericSignage.class, "SEQUENCE"); + } + } + + public static class GenericSignSerializer extends NestedSequenceOfSerializer { + public GenericSignSerializer() { + super(GenericSignage.class, "SEQUENCE"); + } + } + + public static class SpeedLimitDeserializer extends NestedSequenceOfDeserializer { + public SpeedLimitDeserializer() { + super(SpeedLimit.class, "SEQUENCE"); + } + } + + public static class SpeedLimitSerializer extends NestedSequenceOfSerializer { + public SpeedLimitSerializer() { + super(SpeedLimit.class, "SEQUENCE"); + } + } + + public static class ExitServiceDeserializer extends NestedSequenceOfDeserializer { + public ExitServiceDeserializer() { + super(ExitService.class, "SEQUENCE"); + } + } + + public static class ExitServiceSerializer extends NestedSequenceOfSerializer { + public ExitServiceSerializer() { + super(ExitService.class, "SEQUENCE"); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java.bak b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java.bak new file mode 100644 index 000000000..b109ee671 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrame.java.bak @@ -0,0 +1,218 @@ +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.j2735.common.DYear; +import us.dot.its.jpo.ode.plugin.j2735.common.FurtherInfoID; +import us.dot.its.jpo.ode.plugin.j2735.common.MinuteOfTheYear; +import us.dot.its.jpo.ode.plugin.j2735.common.SSPindex; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import java.util.List; +import java.util.Optional; +import us.dot.its.jpo.ode.plugin.types.Asn1Type; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodesAndText; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.NestedSequenceOfDeserializer; +import us.dot.its.jpo.ode.plugin.serialization.NestedSequenceOfSerializer; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; + +/* + * EDITED -> notUsed, notUsed1, notUsed2, notUsed3, durationTime fields. + */ + +/** + * + ******************************************************************************* + * + * This source file was generated by a tool. Beware manual edits might be + * overwritten in future releases. asn1jvm v1.0-SNAPSHOT + * + ******************************************************************************* + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + ****************************************************************************** + * + */ +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class TravelerDataFrame extends Asn1Sequence { + + @Asn1Property(tag = 0) + @JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) + private SSPindex notUsed; + @Asn1Property(tag = 1) + private TravelerInfoType frameType; + @Asn1Property(tag = 2) + private MsgIdChoice msgId; + @Asn1Property(tag = 3, optional = true) + @JsonDeserialize(using = DYear.DYearDeserializer.class) + private DYear startYear; + @Asn1Property(tag = 4) + @JsonDeserialize(using = MinuteOfTheYear.MinuteOfTheYearDeserializer.class) + private MinuteOfTheYear startTime; + @Asn1Property(tag = 5) + @JsonDeserialize(using = MinutesDuration.MinutesDurationDeserializer.class) + private MinutesDuration durationTime; + @Asn1Property(tag = 6) + @JsonDeserialize(using = SignPrority.SignProrityDeserializer.class) + private SignPrority priority; + @Asn1Property(tag = 7) + @JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) + private SSPindex notUsed1; + @Asn1Property(tag = 8) + private SequenceOfRegions regions; + @Asn1Property(tag = 9) + @JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) + private SSPindex notUsed2; + @Asn1Property(tag = 10) + @JsonDeserialize(using = SSPindex.SSPindexDeserializer.class) + private SSPindex notUsed3; + @Asn1Property(tag = 11) + private ContentChoice content; + @Asn1Property(tag = 12, optional = true) + private URL_Short url; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class MsgIdChoice extends Asn1Choice { + @Asn1Property(tag = 0) + private FurtherInfoID furtherInfoID; + @Asn1Property(tag = 1) + private RoadSignID roadSignID; + + MsgIdChoice() { + super(false); + } + + @Override + protected List> listTypes() { + return null; + } + } + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegions extends Asn1SequenceOf { + SequenceOfRegions() { + super(GeographicalPath.class, 1L, 16L); + } + } + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ContentChoice extends Asn1Choice { + @Asn1Property(tag = 0) + @JsonDeserialize(using = AdvisoryDeserializer.class) + @JsonSerialize(using = AdvisorySerializer.class) + private ITIScodesAndText advisory; + @Asn1Property(tag = 1) + @JsonDeserialize(using = WorkZoneDeserializer.class) + @JsonSerialize(using = WorkZoneSerializer.class) + private WorkZone workZone; + @Asn1Property(tag = 2) + @JsonDeserialize(using = GenericSignDeserializer.class) + @JsonSerialize(using = GenericSignSerializer.class) + private GenericSignage genericSign; + @Asn1Property(tag = 3) + @JsonDeserialize(using = SpeedLimitDeserializer.class) + @JsonSerialize(using = SpeedLimitSerializer.class) + private SpeedLimit speedLimit; + @Asn1Property(tag = 4) + @JsonDeserialize(using = ExitServiceDeserializer.class) + @JsonSerialize(using = ExitServiceSerializer.class) + private ExitService exitService; + + ContentChoice() { + super(false); + } + + @Override + protected List> listTypes() { + return null; + } + } + + TravelerDataFrame() { + super(true); + } + + public static class AdvisoryDeserializer extends NestedSequenceOfDeserializer { + public AdvisoryDeserializer() { + super(ITIScodesAndText.class, "SEQUENCE"); + } + } + + public static class AdvisorySerializer extends NestedSequenceOfSerializer { + public AdvisorySerializer() { + super(ITIScodesAndText.class, "SEQUENCE"); + } + } + + public static class WorkZoneDeserializer extends NestedSequenceOfDeserializer { + public WorkZoneDeserializer() { + super(WorkZone.class, "SEQUENCE"); + } + } + + public static class WorkZoneSerializer extends NestedSequenceOfSerializer { + public WorkZoneSerializer() { + super(WorkZone.class, "SEQUENCE"); + } + } + + public static class GenericSignDeserializer extends NestedSequenceOfDeserializer { + public GenericSignDeserializer() { + super(GenericSignage.class, "SEQUENCE"); + } + } + + public static class GenericSignSerializer extends NestedSequenceOfSerializer { + public GenericSignSerializer() { + super(GenericSignage.class, "SEQUENCE"); + } + } + + public static class SpeedLimitDeserializer extends NestedSequenceOfDeserializer { + public SpeedLimitDeserializer() { + super(SpeedLimit.class, "SEQUENCE"); + } + } + + public static class SpeedLimitSerializer extends NestedSequenceOfSerializer { + public SpeedLimitSerializer() { + super(SpeedLimit.class, "SEQUENCE"); + } + } + + public static class ExitServiceDeserializer extends NestedSequenceOfDeserializer { + public ExitServiceDeserializer() { + super(ExitService.class, "SEQUENCE"); + } + } + + public static class ExitServiceSerializer extends NestedSequenceOfSerializer { + public ExitServiceSerializer() { + super(ExitService.class, "SEQUENCE"); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrameList.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrameList.java new file mode 100644 index 000000000..c2e61d33e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerDataFrameList.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class TravelerDataFrameList extends Asn1SequenceOf { + + TravelerDataFrameList() { + super(TravelerDataFrame.class, 1L, 8L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoType.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoType.java new file mode 100644 index 000000000..98b67f24e --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoType.java @@ -0,0 +1,52 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import lombok.Getter; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +@Getter +@JsonSerialize(using = TravelerInfoTypeSerializer.class) +@JsonDeserialize(using = TravelerInfoTypeDeserializer.class) +public enum TravelerInfoType implements Asn1Enumerated { + UNKNOWN(0, "unknown"), ADVISORY(1, "advisory"), ROADSIGNAGE(2, "roadSignage"), COMMERCIALSIGNAGE(3, + "commercialSignage"); + + private final int index; + private final String name; + + public boolean hasExtensionMarker() { + return false; + } + + private TravelerInfoType(int index, String name) { + this.index = index; + this.name = name; + } + + public int maxIndex() { + return 3; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeDeserializer.java new file mode 100644 index 000000000..a3ee44c96 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeDeserializer.java @@ -0,0 +1,37 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedDeserializer; + +public class TravelerInfoTypeDeserializer extends EnumeratedDeserializer { + + TravelerInfoTypeDeserializer() { + super(TravelerInfoType.class); + } + + @Override + protected TravelerInfoType[] listEnumValues() { + return TravelerInfoType.values(); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeSerializer.java new file mode 100644 index 000000000..f12fca3eb --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInfoTypeSerializer.java @@ -0,0 +1,32 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.serialization.EnumeratedSerializer; + +public class TravelerInfoTypeSerializer extends EnumeratedSerializer { + + TravelerInfoTypeSerializer() { + super(TravelerInfoType.class); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java new file mode 100644 index 000000000..3c87e3e17 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java @@ -0,0 +1,79 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +import us.dot.its.jpo.ode.plugin.j2735.common.MinuteOfTheYear; +import us.dot.its.jpo.ode.plugin.j2735.common.MsgCount; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_TravelerInformation; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/* + * EDITED - Changed base class to Asn1Object, removed call to super constructor. + */ + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class TravelerInformation extends Asn1Object { + + @Asn1Property(tag = 0, name = "msgCnt") + @JsonProperty("msgCnt") + private MsgCount msgCnt; + @Asn1Property(tag = 1, name = "timeStamp", optional = true) + @JsonProperty("timeStamp") + private MinuteOfTheYear timeStamp; + @Asn1Property(tag = 2, name = "packetID", optional = true) + @JsonProperty("packetID") + private UniqueMSGID packetID; + @Asn1Property(tag = 3, name = "urlB", optional = true) + @JsonProperty("urlB") + private URL_Base urlB; + @Asn1Property(tag = 4, name = "dataFrames") + @JsonProperty("dataFrames") + @JacksonXmlElementWrapper(localName = "dataFrames") + @JacksonXmlProperty(localName = "TravelerDataFrame") + private TravelerDataFrameList dataFrames; + @Asn1Property(tag = 5, name = "regional", optional = true) + @JsonProperty("regional") + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_TravelerInformation.class, 1L, 4L); + } + } + + +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java.bak b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java.bak new file mode 100644 index 000000000..acc409ab7 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/TravelerInformation.java.bak @@ -0,0 +1,79 @@ +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import us.dot.its.jpo.ode.plugin.asn1.Asn1Object; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.region.Reg_TravelerInformation; +import us.dot.its.jpo.ode.plugin.j2735.common.MinuteOfTheYear; +import us.dot.its.jpo.ode.plugin.j2735.common.MsgCount; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper; +import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty; + +/* + * EDITED - Changed base class to Asn1Object + */ + +/** + * EDITED - Change base class to Asn1Object + ******************************************************************************* + * + * This source file was generated by a tool. Beware manual edits might be + * overwritten in future releases. asn1jvm v1.0-SNAPSHOT + * + ******************************************************************************* + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + ****************************************************************************** + * + */ +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class TravelerInformation extends Asn1Object { + + @Asn1Property(tag = 0) + @JsonDeserialize(using = MsgCount.MsgCountDeserializer.class) + private MsgCount msgCnt; + @Asn1Property(tag = 1, optional = true) + @JsonDeserialize(using = MinuteOfTheYear.MinuteOfTheYearDeserializer.class) + private MinuteOfTheYear timeStamp; + @Asn1Property(tag = 2, optional = true) + private UniqueMSGID packetID; + @Asn1Property(tag = 3, optional = true) + private URL_Base urlB; + @Asn1Property(tag = 4) + @JacksonXmlElementWrapper(localName = "dataFrames") + @JacksonXmlProperty(localName = "TravelerDataFrame") + private TravelerDataFrameList dataFrames; + @Asn1Property(tag = 5, optional = true) + private SequenceOfRegional regional; + + @JsonInclude(Include.NON_NULL) + public static class SequenceOfRegional extends Asn1SequenceOf { + SequenceOfRegional() { + super(Reg_TravelerInformation.class, 1L, 4L); + } + } + +// TravelerInformation() { +// super(true); +// } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Base.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Base.java new file mode 100644 index 000000000..f04bade78 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Base.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class URL_Base extends IA5String { + + public URL_Base() { + super(1, 45); + } + + @JsonCreator + public URL_Base(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Short.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Short.java new file mode 100644 index 000000000..05c0d6ce3 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/URL_Short.java @@ -0,0 +1,39 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import us.dot.its.jpo.ode.plugin.types.IA5String; + +public class URL_Short extends IA5String { + + public URL_Short() { + super(1, 15); + } + + @JsonCreator + public URL_Short(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/UniqueMSGID.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/UniqueMSGID.java new file mode 100644 index 000000000..c894f2f21 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/UniqueMSGID.java @@ -0,0 +1,50 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import us.dot.its.jpo.ode.plugin.types.Asn1OctetString; + +public class UniqueMSGID extends Asn1OctetString { + + @JsonValue + public String getValue() { + return value; + } + + @Override + public String toString() { + return value; + } + + public UniqueMSGID() { + super(9, 9); + } + + @JsonCreator + public UniqueMSGID(String value) { + this(); + this.value = value; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ValidRegion.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ValidRegion.java new file mode 100644 index 000000000..477b4c4c0 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/ValidRegion.java @@ -0,0 +1,75 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.common.Extent; +import us.dot.its.jpo.ode.plugin.j2735.common.HeadingSlice; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class ValidRegion extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "direction") + @JsonProperty("direction") + private HeadingSlice direction; + @Asn1Property(tag = 1, name = "extent", optional = true) + @JsonProperty("extent") + private Extent extent; + @Asn1Property(tag = 2, name = "area") + @JsonProperty("area") + private AreaChoice area; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class AreaChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "shapePointSet") + @JsonProperty("shapePointSet") + private ShapePointSet shapePointSet; + @Asn1Property(tag = 1, name = "circle") + @JsonProperty("circle") + private Circle circle; + @Asn1Property(tag = 2, name = "regionPointSet") + @JsonProperty("regionPointSet") + private RegionPointSet regionPointSet; + + AreaChoice() { + super(false); + } + } + + ValidRegion() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZone.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZone.java new file mode 100644 index 000000000..8feaeda66 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZone.java @@ -0,0 +1,35 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +@JsonInclude(Include.NON_NULL) +public class WorkZone extends Asn1SequenceOf { + + WorkZone() { + super(WorkZoneSequence.class, 1L, 16L); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZoneSequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZoneSequence.java new file mode 100644 index 000000000..9bbf80a9b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/WorkZoneSequence.java @@ -0,0 +1,65 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Getter; +import lombok.Setter; +import us.dot.its.jpo.ode.plugin.annotations.Asn1Property; +import us.dot.its.jpo.ode.plugin.j2735.itis.ITIScodes; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +@JsonInclude(Include.NON_NULL) +@JsonIgnoreProperties(ignoreUnknown = true) +@Getter +@Setter +public class WorkZoneSequence extends Asn1Sequence { + + @Asn1Property(tag = 0, name = "item") + @JsonProperty("item") + private ItemChoice item; + + @Getter + @Setter + @JsonInclude(Include.NON_NULL) + public static class ItemChoice extends Asn1Choice { + @Asn1Property(tag = 0, name = "itis") + @JsonProperty("itis") + private ITIScodes itis; + @Asn1Property(tag = 1, name = "text") + @JsonProperty("text") + private ITIStextPhrase text; + + ItemChoice() { + super(false); + } + } + + WorkZoneSequence() { + super(false); + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Zoom.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Zoom.java new file mode 100644 index 000000000..60c53f968 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/Zoom.java @@ -0,0 +1,53 @@ +/*============================================================================== + * + * This source file was generated by a tool. + * Beware manual edits might be overwritten in future releases. + * asn1jvm v1.0-SNAPSHOT + * + *------------------------------------------------------------------------------ + * Copyright 2024 USDOT + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + *============================================================================*/ + +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import us.dot.its.jpo.ode.plugin.serialization.IntegerDeserializer; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +@JsonDeserialize(using = Zoom.ZoomDeserializer.class) +public class Zoom extends Asn1Integer { + + public Zoom() { + super(0L, 15L); + } + + @JsonCreator + public Zoom(long value) { + this(); + this.value = value; + } + + public static class ZoomDeserializer extends IntegerDeserializer { + public ZoomDeserializer() { + super(Zoom.class); + } + + @Override + protected Zoom construct() { + return new Zoom(); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitStringDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitStringDeserializer.java new file mode 100644 index 000000000..21b3a13ae --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitStringDeserializer.java @@ -0,0 +1,49 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import java.io.IOException; +import java.util.Map; +import us.dot.its.jpo.ode.plugin.types.Asn1Bitstring; + +/** + * Deserialize an ASN.1 Bitstring from XER or JER. + * + *

Note that this deserializer expects ODE JSON, not standard JER. + * + * @param The bitstring type. + * @author Ivan Yourshaw + */ +public abstract class BitStringDeserializer extends StdDeserializer { + + protected abstract T construct(); + + protected BitStringDeserializer(Class valueClass) { + super(valueClass); + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + T bitstring = construct(); + if (jsonParser.getCodec() instanceof XmlMapper) { + // XML: binary + String str = jsonParser.getText(); + bitstring.fromBinaryString(str); + } else { + // ODE JSON dialect: read verbose map + TypeReference> boolMapType = new TypeReference<>() { + }; + Map map = jsonParser.readValueAs(boolMapType); + for (var keyValue : map.entrySet()) { + bitstring.set(keyValue.getKey(), keyValue.getValue()); + } + } + return bitstring; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitstringSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitstringSerializer.java new file mode 100644 index 000000000..b86c73dc4 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BitstringSerializer.java @@ -0,0 +1,40 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Bitstring; + +/** + * Serializer for ASN.1 Bitstring types to XER or JER + * + *

Note that this serializer writes ODE JSON, not standard JER. + * + * @author Ivan Yourshaw + */ +public class BitstringSerializer extends StdSerializer { + + protected BitstringSerializer() { + super(Asn1Bitstring.class); + } + + @Override + public void serialize(Asn1Bitstring asn1Bitstring, JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + // XER serializes bitstrings as binary strings + jsonGenerator.writeString(asn1Bitstring.binaryString()); + } else { + // ODE JSON dialect serializes bitstrings as verbose maps + jsonGenerator.writeStartObject(); + for (int i = 0; i < asn1Bitstring.size(); i++) { + String name = asn1Bitstring.name(i); + boolean isSet = asn1Bitstring.get(i); + jsonGenerator.writeBooleanField(name, isSet); + } + jsonGenerator.writeEndObject(); + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanDeserializer.java new file mode 100644 index 000000000..a8ad54e6d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanDeserializer.java @@ -0,0 +1,50 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Boolean; + +/** + * Deserializer for ASN.1 Boolean types to XER or JER + * + * @author Ivan Yourshaw + */ +@SuppressWarnings({ "unchecked" }) +public class BooleanDeserializer extends StdDeserializer { + + protected Asn1Boolean construct() { + return new Asn1Boolean(); + } + + public BooleanDeserializer() { + super(Asn1Boolean.class); + } + + protected BooleanDeserializer(Class valueType) { + super(Asn1Boolean.class); + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + Asn1Boolean result = construct(); + if (jsonParser.getCodec() instanceof XmlMapper) { + // XML: unwrap empty element + TreeNode node = jsonParser.getCodec().readTree(jsonParser); + var iterator = node.fieldNames(); + if (iterator.hasNext()) { + String str = node.fieldNames().next(); + result.setValue(Boolean.parseBoolean(str)); + } + } else { + // JSON + result.setValue(jsonParser.getBooleanValue()); + } + return (T) result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanSerializer.java new file mode 100644 index 000000000..a4e3b9100 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/BooleanSerializer.java @@ -0,0 +1,35 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Boolean; + +/** + * Serializer for ASN.1 Boolean types to XER or JER + * + * @author Ivan Yourshaw + */ +public class BooleanSerializer extends StdSerializer { + + protected BooleanSerializer() { + super(Asn1Boolean.class); + } + + @Override + public void serialize(Asn1Boolean asn1Boolean, JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) + throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + // XER uses and for booleans + jsonGenerator.writeStartObject(); + jsonGenerator.writeRaw(String.format("<%s/>", asn1Boolean.getValue())); + jsonGenerator.writeEndObject(); + } else { + // JER + jsonGenerator.writeBoolean(asn1Boolean.getValue()); + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/CharacterStringSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/CharacterStringSerializer.java new file mode 100644 index 000000000..532aa387c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/CharacterStringSerializer.java @@ -0,0 +1,25 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1CharacterString; + +/** + * Serializer for ASN.1 character string types to XER or JER + * + * @author Ivan Yourshaw + */ +public class CharacterStringSerializer extends StdSerializer { + + protected CharacterStringSerializer() { + super(Asn1CharacterString.class); + } + + @Override + public void serialize(Asn1CharacterString asn1CharacterString, JsonGenerator jsonGenerator, + SerializerProvider serializerProvider) throws IOException { + jsonGenerator.writeString(asn1CharacterString.getValue()); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedDeserializer.java new file mode 100644 index 000000000..bcb07ac83 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedDeserializer.java @@ -0,0 +1,55 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import java.io.IOException; +import java.util.Objects; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +/** + * Base class for ENUMERATED value deserializers to produce both XER and JER. + * + * @param The ENUMERATED type + * @author Ivan Yourshaw + */ +public abstract class EnumeratedDeserializer & Asn1Enumerated> + extends StdDeserializer { + + protected abstract T[] listEnumValues(); + + protected EnumeratedDeserializer(Class valueClass) { + super(valueClass); + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + String name = null; + if (jsonParser.getCodec() instanceof XmlMapper) { + // XML + // The enum in BASIC-XER is an empty element, so Jackson thinks it's an object + // with a key + // of that name with no value + TreeNode node = jsonParser.getCodec().readTree(jsonParser); + var iterator = node.fieldNames(); + if (iterator.hasNext()) { + name = node.fieldNames().next(); + } + } else { + // JSON + // Behaves normally: The enum name is the text + name = jsonParser.getText(); + } + for (T enumValue : listEnumValues()) { + if (Objects.equals(enumValue.getName(), name)) { + return enumValue; + } + } + + return null; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedSerializer.java new file mode 100644 index 000000000..dd314cff1 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/EnumeratedSerializer.java @@ -0,0 +1,53 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; + +/** + * Base class for ENUMERATED value serializers to produce both XER and JER. + * + * @param The ENUMERATED type + * @author Ivan Yourshaw + */ +@SuppressWarnings({ "rawtypes" }) +public class EnumeratedSerializer extends StdSerializer { + + protected EnumeratedSerializer(Class t) { + super(t); + } + + @Override + public void serialize(T t, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + jsonGenerator.writeStartObject(); + + // + // BASIC-XER's weird way of writing enums. + // + // Ref. ITU-T X.693 (02/2021) Sec. 8.3.7 which says: + // + // The "XMLEnumeratedValue" specified in Rec. ITU-T X.680 | ISO/IEC 8824-1, + // 20.8, shall only be + // "EmptyElementEnumerated" + // + // and ITU-T X.680 (02/2021) Sec. 20.8 which says: + // + // EmptyElementEnumerated ::= "<" & identifier "/>" + // + jsonGenerator.writeRaw(String.format("<%s/>", t.getName())); + + jsonGenerator.writeEndObject(); + } else { + // + // JER: Just write the enum value as a string like a normal person. + // Does not handle TEXT encoding instructions per X.697 sec 22.2 + // + jsonGenerator.writeString(t.getName()); + } + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/IntegerDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/IntegerDeserializer.java new file mode 100644 index 000000000..1f1c2afb6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/IntegerDeserializer.java @@ -0,0 +1,49 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.NumericNode; +import com.fasterxml.jackson.databind.node.TextNode; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Integer; + +/** + * Base class for INTEGER value deserializers to produce both XER and JER. + * + * @param The INTEGER type + * @author Ivan Yourshaw + */ +public abstract class IntegerDeserializer extends StdDeserializer { + + protected final Class thisClass; + + protected abstract T construct(); + + protected IntegerDeserializer(Class vc) { + super(vc); + this.thisClass = vc; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JacksonException { + T result = construct(); + if (jsonParser instanceof FromXmlParser xmlParser) { + TreeNode node = xmlParser.getCodec().readTree(xmlParser); + if (node instanceof NumericNode numNode) { + result.setValue(numNode.longValue()); + } else if (node instanceof TextNode textNode) { + // Sometimes happens, since XML values are ambiguous between text and numbers + String textValue = textNode.textValue(); + long value = Long.parseLong(textValue); + result.setValue(value); + } + } else { + result.setValue(jsonParser.readValueAs(Long.class)); + } + return result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfDeserializer.java new file mode 100644 index 000000000..267ffd5f5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfDeserializer.java @@ -0,0 +1,63 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Deserializer for nested, anonymous SEQUENCE-OF types. Handles XER's way of + * wrapping these. + * + * @param The Sequence Of type + * @author Ivan Yourshaw + */ +public class NestedSequenceOfDeserializer> extends StdDeserializer { + + protected final Class thisClass; + protected final String wrapped; + + protected NestedSequenceOfDeserializer(Class vc, String wrapped) { + super(vc); + this.thisClass = vc; + this.wrapped = wrapped; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + T result = null; + if (jsonParser instanceof FromXmlParser xmlParser) { + // For XML, we need to remove the wrapper and distinguish between single items + // and arrays + XmlMapper xmlMapper = (XmlMapper) xmlParser.getCodec(); + TreeNode node = xmlParser.getCodec().readTree(xmlParser); + + if (node instanceof ObjectNode objectNode) { + JsonNode unwrapped = objectNode.findValue(wrapped); + if (unwrapped instanceof ObjectNode unwrappedObject) { + + // Single item not identified as array, so put it in an array + ArrayNode arrayNode = xmlMapper.createArrayNode(); + arrayNode.add(unwrappedObject); + result = xmlMapper.convertValue(arrayNode, thisClass); + + } else if (unwrapped instanceof ArrayNode arrayNode) { + + result = xmlMapper.convertValue(arrayNode, thisClass); + } + } + } else { + result = jsonParser.getCodec().readValue(jsonParser, thisClass); + } + return result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfSerializer.java new file mode 100644 index 000000000..154aafc73 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/NestedSequenceOfSerializer.java @@ -0,0 +1,57 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import javax.xml.namespace.QName; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Serializer for nested, anonymous SEQUENCT-OF types. + * + * @param The Sequence-of type + * @author Ivan Yourshaw + */ +public class NestedSequenceOfSerializer> extends StdSerializer { + + protected final QName wrapped; + + protected NestedSequenceOfSerializer(Class t, String wrapped) { + super(t); + this.wrapped = new QName(wrapped); + } + + @Override + public void serialize(T t, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + // Wrapped XER + var xmlGen = (ToXmlGenerator) jsonGenerator; + for (var item : t) { + + xmlGen.writeRaw(String.format("<%s>", wrapped)); + var mapper = SerializationUtil.xmlMapper(); + String itemXml = mapper.writeValueAsString(item); + + // Horrible hack to write the item value without being wrapped by the class + // name. + // Probably a better way exists, but this works. + String itemClassName = item.getClass().getSimpleName(); + String startElement = String.format("<%s>", itemClassName); + String endElement = String.format("", itemClassName); + String strippedXml = itemXml.replace(startElement, "").replace(endElement, ""); + + xmlGen.writeRaw(strippedXml); + + xmlGen.writeRaw(String.format("", wrapped)); + } + + } else { + // Pass through JER + jsonGenerator.writeObject(t); + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeDeserializer.java new file mode 100644 index 000000000..0b1858a27 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeDeserializer.java @@ -0,0 +1,50 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.types.Asn1Type; + +import static us.dot.its.jpo.ode.plugin.utils.XmlUtils.*; + +/** + * See description in {@link OpenTypeSerializer}. + * + * @author Ivan Yourshaw + */ +public abstract class OpenTypeDeserializer extends StdDeserializer { + + protected final Class thisClass; + protected final String wrapped; + + protected OpenTypeDeserializer(Class vc, String wrapped) { + super(vc); + thisClass = vc; + this.wrapped = wrapped; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JacksonException { + T result = null; + if (jsonParser instanceof FromXmlParser xmlParser) { + // XML: Unwrap + XmlMapper xmlMapper = (XmlMapper)xmlParser.getCodec(); + TreeNode node = xmlParser.getCodec().readTree(xmlParser); + String xml = xmlMapper.writeValueAsString(node); + var tokens = tokenize(xml); + var unwrapped = unwrap(tokens); + result = xmlMapper.readValue(stringifyTokens(unwrapped), thisClass); + } else { + // JSON: pass through + result = jsonParser.getCodec().readValue(jsonParser, thisClass); + } + return result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeSerializer.java new file mode 100644 index 000000000..a672b47fc --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/OpenTypeSerializer.java @@ -0,0 +1,81 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import javax.xml.namespace.QName; +import us.dot.its.jpo.ode.plugin.types.Asn1Type; + +/** + * Serializer for ASN.1 "open types" which are fields without a specific type, + * for dealing with parameterized fields with value sets of different types that + * can be plugged in. In this Java implementation these are represented by type + * parameters + * in abstract types. + * + *

For example, the contents of the "value" field in a J2735 MessageFrame. + * + *

XER wraps open types with the type name like: + * + *

{@code
+ *
+ *     
+ *         19
+ *         
+ *             
+ *                 ...
+ *             
+ *         
+ *     
+ *
+ *  }
+ * + *

See XMLOpenTypeFieldValue: ITU-T Rec. X.681 (02/2021) Section 14.6. + * + *

JER does not wrap them: + * + *

{@code
+ *
+ *     {
+ *         "messageId": 19,
+ *         "value": {
+ *             ...
+ *         }
+ *     }
+ *
+ * }
+ * + *

See "Encoding of open type values", ITU-T Rec X.697 (02/2021), Sec 41. + * + * @author Ivan Yourshaw + */ +public abstract class OpenTypeSerializer extends StdSerializer { + + protected final QName wrapper; + protected final QName wrapped; + + protected OpenTypeSerializer(Class t, String wrapper, String wrapped) { + super(t); + this.wrapper = new QName(wrapper); + this.wrapped = new QName(wrapped); + } + + @Override + public void serialize(T t, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException { + if (serializerProvider instanceof XmlSerializerProvider) { + // Wrapped XER + var xmlGen = (ToXmlGenerator) jsonGenerator; + xmlGen.startWrappedValue(wrapper, wrapped); + xmlGen.writeObject(t); + xmlGen.finishWrappedValue(wrapper, wrapped); + } else { + // Pass through JER + jsonGenerator.writeObject(t); + } + + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/ParameterizedTypeDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/ParameterizedTypeDeserializer.java new file mode 100644 index 000000000..fe9a57e63 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/ParameterizedTypeDeserializer.java @@ -0,0 +1,71 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import static us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes.IdType.INTEGER; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.databind.node.ObjectNode; +import java.io.IOException; +import us.dot.its.jpo.ode.plugin.annotations.Asn1ParameterizedTypes; +import us.dot.its.jpo.ode.plugin.types.Asn1Sequence; + +/** + * Deserialize a parameterized SEQUENCE type. + * Determines the subtype to deserialize to using the + * {@link Asn1ParameterizedTypes} annotation that + * must be present. + * + * @param The Sequence Type + * + * @author Ivan Yourshaw + */ +@SuppressWarnings({ "unchecked" }) +public abstract class ParameterizedTypeDeserializer + extends StdDeserializer { + + protected final Class thisClass; + + protected ParameterizedTypeDeserializer(Class vc) { + super(vc); + thisClass = vc; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + final var typeAnnot = thisClass.getAnnotation(Asn1ParameterizedTypes.class); + if (typeAnnot == null) { + throw new RuntimeException("Missing Asn1ParameterizedTypes annotation."); + } + final String idPropName = typeAnnot.idProperty(); + final Asn1ParameterizedTypes.IdType idType = typeAnnot.idType(); + final Asn1ParameterizedTypes.Type[] types = typeAnnot.value(); + if (types == null || types.length == 0) { + throw new RuntimeException("No Types are defined in the Asn1ParameterizedTypes annotation."); + } + TreeNode node = jsonParser.getCodec().readTree(jsonParser); + if (node instanceof ObjectNode objectNode) { + JsonNode idPropNode = objectNode.findValue(idPropName); + final Object id = (idType == INTEGER) ? idPropNode.asInt() : idPropNode.asText(); + Class subType = getSubtypeForId(id, idType, types); + return (T) jsonParser.getCodec().readValue(jsonParser, subType); + } else { + throw new RuntimeException("Not instance of object"); + } + } + + private Class getSubtypeForId(final Object id, Asn1ParameterizedTypes.IdType idType, + Asn1ParameterizedTypes.Type[] types) { + for (var theType : types) { + Object idValue = (idType == INTEGER) ? theType.intId() : theType.stringId(); + if (id.equals(idValue)) { + return theType.value(); + } + } + throw new RuntimeException(String.format("Id %s not found in list of types", id)); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceDeserializer.java new file mode 100644 index 000000000..cb3a1b618 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceDeserializer.java @@ -0,0 +1,64 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import static us.dot.its.jpo.ode.plugin.utils.XmlUtils.*; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import lombok.SneakyThrows; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Deserializer for SEQUENCE-OF CHOICE types. + * These are unwrapped in XER, but wrapped in JER. + * @param The Asn1Choice type + * @param The Asn1SequenceOf type + */ +public abstract class SequenceOfChoiceDeserializer> + extends StdDeserializer { + + protected final Class choiceClass; + protected final Class sequenceOfClass; + + protected abstract T construct(); + + protected SequenceOfChoiceDeserializer(Class choiceClass, Class sequenceOfClass) { + super(sequenceOfClass); + this.choiceClass = choiceClass; + this.sequenceOfClass = sequenceOfClass; + } + + @SneakyThrows + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + T result = construct(); + if (jsonParser instanceof FromXmlParser xmlParser) { + // XML: expects unwrapped choice items + // unwrap and deserialize each choice item + XmlMapper xmlMapper = (XmlMapper)xmlParser.getCodec(); + TreeNode node = xmlMapper.readTree(xmlParser); + String xml = xmlMapper.writeValueAsString(node); + var tokens = tokenize(xml); + var unwrapped = unwrap(tokens); + var grouped = groupTopLevelTokens(unwrapped); + for (var group : grouped) { + var wrappedGroup = wrap(group, choiceClass.getSimpleName()); + S choice = xmlMapper.readValue(stringifyTokens(wrappedGroup), choiceClass); + result.add(choice); + } + } else { + // JSON: expects wrapped choice items, pass through as normal + result = jsonParser.getCodec().readValue(jsonParser, sequenceOfClass); + } + return result; + } + + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceSerializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceSerializer.java new file mode 100644 index 000000000..29c6077a5 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfChoiceSerializer.java @@ -0,0 +1,54 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import static us.dot.its.jpo.ode.plugin.utils.XmlUtils.*; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; +import com.fasterxml.jackson.dataformat.xml.ser.ToXmlGenerator; +import com.fasterxml.jackson.dataformat.xml.ser.XmlSerializerProvider; +import java.io.IOException; +import lombok.SneakyThrows; +import us.dot.its.jpo.ode.plugin.types.Asn1Choice; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Serializer for SEQUENCE-OF CHOICE types. + * These are unwrapped in XER, but wrapped in JER. + * @param The Asn1Choice type + * @param The Asn1SequenceOf type + */ +public class SequenceOfChoiceSerializer> + extends StdSerializer { + + protected final Class choiceClass; + protected final Class sequenceOfClass; + + protected SequenceOfChoiceSerializer(Class choiceClass, Class sequenceOfClass) { + super(sequenceOfClass); + this.choiceClass = choiceClass; + this.sequenceOfClass = sequenceOfClass; + } + + @SneakyThrows + @Override + public void serialize(T sequenceOf, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { + if (serializerProvider instanceof XmlSerializerProvider xmlProvider) { + // XER: Choice items not wrapped + var xmlGen = (ToXmlGenerator)jsonGenerator; + var mapper = SerializationUtil.xmlMapper(); + + for (var choiceItem : sequenceOf) { + String choiceXml = mapper.writeValueAsString(choiceItem); + String unwrappedXml = stringifyTokens(unwrap(tokenize(choiceXml))); + xmlGen.writeRaw(unwrappedXml); + } + + } else { + // JER: Normal, choice items are wrapped + jsonGenerator.writeObject(sequenceOf); + } + } + + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfEnumeratedDeserializer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfEnumeratedDeserializer.java new file mode 100644 index 000000000..c798fc5e8 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SequenceOfEnumeratedDeserializer.java @@ -0,0 +1,60 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.core.TreeNode; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.deser.std.StdDeserializer; +import com.fasterxml.jackson.dataformat.xml.deser.FromXmlParser; +import java.io.IOException; +import java.util.Objects; +import us.dot.its.jpo.ode.plugin.types.Asn1Enumerated; +import us.dot.its.jpo.ode.plugin.types.Asn1SequenceOf; + +/** + * Base class for deserializers for SEQUENCE-OF ENUMERATED types. + * + * @param The Sequence Of ENUMERATED type. + * @author Ivan Yourshaw + */ +public abstract class SequenceOfEnumeratedDeserializer & Asn1Enumerated, + T extends Asn1SequenceOf> extends StdDeserializer { + + protected final Class thisClass; + protected final Class enumClass; + + protected abstract S[] listEnumValues(); + + protected abstract T construct(); + + protected SequenceOfEnumeratedDeserializer(Class sequenceOfEnumType, Class enumType) { + super(sequenceOfEnumType); + this.thisClass = sequenceOfEnumType; + this.enumClass = enumType; + } + + @Override + public T deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) + throws IOException, JacksonException { + T result = null; + if (jsonParser instanceof FromXmlParser xmlParser) { + // Unwrapped enum items + result = construct(); + TreeNode node = xmlParser.getCodec().readTree(xmlParser); + + var fieldNameIterator = node.fieldNames(); + while (fieldNameIterator.hasNext()) { + String name = fieldNameIterator.next(); + + for (S enumValue : listEnumValues()) { + if (Objects.equals(enumValue.getName(), name)) { + result.add(enumValue); + } + } + } + } else { + result = jsonParser.getCodec().readValue(jsonParser, thisClass); + } + return result; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SerializationUtil.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SerializationUtil.java new file mode 100644 index 000000000..bad8dd867 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/SerializationUtil.java @@ -0,0 +1,23 @@ +package us.dot.its.jpo.ode.plugin.serialization; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; + +/** + * Utility class to perform serialization and deserialization with static JSON and XML mappers. + * + * @author Ivan Yourshaw + */ +public class SerializationUtil { + + private static final ObjectMapper jsonMapper = new ObjectMapper(); + private static final XmlMapper xmlMapper = new XmlMapper(); + + public static ObjectMapper jsonMapper() { + return jsonMapper; + } + + public static XmlMapper xmlMapper() { + return xmlMapper; + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/package-info.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/package-info.java new file mode 100644 index 000000000..ba7a7c48b --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/serialization/package-info.java @@ -0,0 +1,4 @@ +/** + * Jackson serializers and deserializers for XER and JER. + */ +package us.dot.its.jpo.ode.plugin.serialization; \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Bitstring.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Bitstring.java new file mode 100644 index 000000000..e14381551 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Bitstring.java @@ -0,0 +1,167 @@ +package us.dot.its.jpo.ode.plugin.types; + +import static us.dot.its.jpo.ode.plugin.utils.BitUtils.reverseBits; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.BitSet; +import java.util.HexFormat; +import us.dot.its.jpo.ode.plugin.serialization.BitstringSerializer; + +/** + * Base class for an ASN.1 bitstring. + */ +@JsonSerialize(using = BitstringSerializer.class) +public abstract class Asn1Bitstring implements Asn1Type { + + @JsonIgnore + final BitSet bits; + + @JsonIgnore + final int size; + + @JsonIgnore + final boolean hasExtensionMarker; + + @JsonIgnore + final String[] names; + + /** + * Creates a Asn1Bitstring with the specified number of items and name values. + * + * @param size The length of the bitstring. + * @param hasExtensionMarker Presence of any ASN.1 bitstring extension values. + * @param names The String name values corresponding to each bit in the bitstring. + */ + public Asn1Bitstring(int size, boolean hasExtensionMarker, String[] names) { + this.size = size; + this.hasExtensionMarker = hasExtensionMarker; + this.bits = new BitSet(size); + this.names = names; + } + + public int size() { + return size; + } + + public boolean hasExtensionMarker() { + return hasExtensionMarker; + } + + public boolean get(int bitIndex) { + return bits.get(bitIndex); + } + + public void set(int bitIndex, boolean value) { + bits.set(bitIndex, value); + } + + /** + * Set the corresponding bit from the bitstring based on the name value. + * + * @param name The name String value for the corresponding bit in the bitstring. + * @param value The value for the bit to be set. + */ + public void set(String name, boolean value) { + for (int i = 0; i < size; i++) { + if (name(i).equals(name)) { + set(i, value); + return; + } + } + throw new IllegalArgumentException("Unknown name " + name); + } + + /** + * Gets the String value of the bitstring represented in binary. + */ + public String binaryString() { + char[] chars = new char[size]; + for (int i = 0; i < size; i++) { + chars[i] = get(i) ? '1' : '0'; + } + return new String(chars); + } + + public String hexString() { + HexFormat hex = HexFormat.of(); + return hex.formatHex(reverseBits(bits.toByteArray())); + } + + /** + * Sets the Asn1Bitstring values from a String binary representation of a bitstring. + * + * @param str The bitstring represented in binary. + */ + public void fromBinaryString(String str) { + if (str == null) { + bits.clear(); + return; + } + char[] chars = str.toCharArray(); + if (chars.length < size) { + throw new IllegalArgumentException("Not enough characters in string " + str); + } + for (int i = 0; i < size; i++) { + char c = chars[i]; + set(i, c == '1'); + } + } + + /** + * Sets the Asn1Bitstring values from a String hex representation of a bitstring. + * + * @param str The bitstring represented in hex. + */ + public void fromHexString(String str) { + System.out.println(str); + if (str == null) { + bits.clear(); + return; + } + HexFormat hex = HexFormat.of(); + byte[] bytes = reverseBits(hex.parseHex(str)); + System.out.println(bytes.length); + BitSet newBits = BitSet.valueOf(bytes); + System.out.println(newBits); + + bits.clear(); + bits.or(newBits); + System.out.println(binaryString()); + } + + /** + * Get the name representing the requested index. + * + * @param index The index value of the bitstring being requested. + */ + public String name(int index) { + if (index < 0 || index >= size()) { + throw new IllegalArgumentException( + String.format("Index %s out of range %s-%s", index, 0, size())); + } + return names[index]; + } + + @Override + public int hashCode() { + return bits.hashCode(); + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (obj instanceof Asn1Bitstring bitstring) { + return bits.equals(bitstring.bits); + } else { + return false; + } + } + + @Override + public String toString() { + return binaryString(); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Boolean.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Boolean.java new file mode 100644 index 000000000..371845a5c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Boolean.java @@ -0,0 +1,59 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import java.util.Objects; +import us.dot.its.jpo.ode.plugin.serialization.BooleanDeserializer; +import us.dot.its.jpo.ode.plugin.serialization.BooleanSerializer; + +/** + * Class representing an ASN.1 boolean. + */ +@JsonSerialize(using = BooleanSerializer.class) +@JsonDeserialize(using = BooleanDeserializer.class) +public class Asn1Boolean implements Asn1Type { + + public Asn1Boolean() { + } + + @JsonCreator + public Asn1Boolean(boolean value) { + this.value = value; + } + + private boolean value; + + @JsonValue + public boolean getValue() { + return value; + } + + public void setValue(boolean value) { + this.value = value; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Asn1Boolean that = (Asn1Boolean) o; + return value == that.value; + } + + @Override + public int hashCode() { + return Objects.hashCode(value); + } + + @Override + public String toString() { + return Boolean.toString(value); + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1CharacterString.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1CharacterString.java new file mode 100644 index 000000000..7249096ac --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1CharacterString.java @@ -0,0 +1,50 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Base class for an ASN.1 character string. + */ +public abstract class Asn1CharacterString implements Asn1Type { + + protected final int minLength; + protected final int maxLength; + protected String value; + + public Asn1CharacterString(int minLength, int maxLength) { + this.minLength = minLength; + this.maxLength = maxLength; + } + + @JsonValue + public String getValue() { + return value; + } + + /** + * Sets the character string to value. + * + * @param value The String value that the Asn1CharacterString will be set to. + */ + public void setValue(String value) { + if (!validate(value)) { + throw new IllegalArgumentException( + String.format("String '%s' has invalid length. Must be between %d and %s", + value, minLength, maxLength)); + } + this.value = value; + } + + protected boolean validate(String valueA) { + if (valueA == null) { + return true; + } + return valueA.length() >= minLength && valueA.length() <= maxLength; + } + + @Override + public String toString() { + return value; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Choice.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Choice.java new file mode 100644 index 000000000..531d6380d --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Choice.java @@ -0,0 +1,30 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import us.dot.its.jpo.ode.plugin.serialization.SerializationUtil; + +/** + * Base class for an ASN.1 choice. + */ +public abstract class Asn1Choice implements Asn1Type { + + @JsonIgnore + final boolean hasExtensionMarker; + + public Asn1Choice(boolean hasExtensionMarker) { + this.hasExtensionMarker = hasExtensionMarker; + } + + @Override + public String toString() { + ObjectMapper mapper = SerializationUtil.jsonMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + System.err.println(e.getMessage()); + return ""; + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Enumerated.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Enumerated.java new file mode 100644 index 000000000..0728eecb6 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Enumerated.java @@ -0,0 +1,15 @@ +package us.dot.its.jpo.ode.plugin.types; + +/** + * Class for an ASN.1 enumerated object. + */ +public interface Asn1Enumerated extends Asn1Type { + int getIndex(); + + String getName(); + + boolean hasExtensionMarker(); + + int maxIndex(); + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Integer.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Integer.java new file mode 100644 index 000000000..b27348b93 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Integer.java @@ -0,0 +1,77 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonValue; +import java.util.Objects; + +/** + * A constrained integer type with lower bound and upper bound. + * Unconstrained integer types and extensibility markers in integer constraints + * are not supported. + */ +public class Asn1Integer implements Asn1Type, Comparable { + + protected long value; + + @JsonIgnore + final long lowerBound; + + @JsonIgnore + final long upperBound; + + public Asn1Integer(long lowerBound, long upperBound) { + this.lowerBound = lowerBound; + this.upperBound = upperBound; + } + + @JsonValue + public long getValue() { + return value; + } + + public void setValue(long value) { + this.value = value; + } + + public int intValue() { + return (int) value; + } + + @Override + public int compareTo(Asn1Integer other) { + if (other == null) { + return -1; + } + return Long.compare(value, other.value); + } + + public long getLowerBound() { + return lowerBound; + } + + public long getUpperBound() { + return upperBound; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + Asn1Integer that = (Asn1Integer) o; + return value == that.value; + } + + @Override + public int hashCode() { + return Objects.hashCode(value); + } + + @Override + public String toString() { + return Long.toString(value); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1OctetString.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1OctetString.java new file mode 100644 index 000000000..e2f21e537 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1OctetString.java @@ -0,0 +1,31 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonValue; + +/** + * Class for an ASN.1 octet string. + */ +public class Asn1OctetString implements Asn1Type { + + protected final int minLength; + protected final int maxLength; + protected String value; + + @JsonValue + public String getValue() { + return value; + } + + public Asn1OctetString(int minLength, int maxLength) { + this.minLength = minLength; + this.maxLength = maxLength; + } + + public boolean validate(String aValue) { + if (aValue == null) return true; + // Size of hex format string can be 2 * byte size + // TODO validate valid hex string digit are + return aValue.length() >= 2 * minLength && aValue.length() <= 2 * maxLength; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Sequence.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Sequence.java new file mode 100644 index 000000000..ce18cfcfa --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Sequence.java @@ -0,0 +1,35 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import us.dot.its.jpo.ode.plugin.serialization.SerializationUtil; + +/** + * Base class for an ASN.1 sequence. + */ +public abstract class Asn1Sequence implements Asn1Type { + + @JsonIgnore + final boolean extensionMarker; + + public Asn1Sequence(boolean hasExtensionMarker) { + this.extensionMarker = hasExtensionMarker; + } + + @JsonIgnore + public boolean hasExtensionMarker() { + return extensionMarker; + } + + @Override + public String toString() { + ObjectMapper mapper = SerializationUtil.jsonMapper(); + try { + return mapper.writeValueAsString(this); + } catch (JsonProcessingException e) { + System.err.println(e.getMessage()); + return ""; + } + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1SequenceOf.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1SequenceOf.java new file mode 100644 index 000000000..96d6f1d13 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1SequenceOf.java @@ -0,0 +1,50 @@ +package us.dot.its.jpo.ode.plugin.types; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import java.util.ArrayList; + +/** + * Base class for an ASN.1 sequence-of. + */ +public abstract class Asn1SequenceOf + extends ArrayList + implements Asn1Type { + + final Class itemClass; + final long sizeLowerBound; + final long sizeUpperBound; + + /** + * Creates a Asn1SequenceOf with the specified generic object type along with + * an upper and lower number of items in the sequence-of array. + * + * @param itemClass The type of object the SequenceOf consists of. + * @param sizeLowerBound The lowest allowed number of items inside the Asn1SequenceOf array. + * @param sizeUpperBound The highest allowed number of items inside the Asn1SequenceOf array. + */ + public Asn1SequenceOf(Class itemClass, long sizeLowerBound, long sizeUpperBound) { + this.itemClass = itemClass; + this.sizeLowerBound = sizeLowerBound; + this.sizeUpperBound = sizeUpperBound; + } + + @JsonIgnore + public Class getItemClass() { + return itemClass; + } + + @JsonIgnore + public long getSizeLowerBound() { + return sizeLowerBound; + } + + @JsonIgnore + public long getSizeUpperBound() { + return sizeUpperBound; + } + + @SuppressWarnings("unchecked") + public boolean add(Asn1Type item) { + return super.add((T) item); + } +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Type.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Type.java new file mode 100644 index 000000000..55009634c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/Asn1Type.java @@ -0,0 +1,8 @@ +package us.dot.its.jpo.ode.plugin.types; + +/** + * Interface implemented by all ASN.1 type classes. + */ +public interface Asn1Type { + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/IA5String.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/IA5String.java new file mode 100644 index 000000000..11f549558 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/IA5String.java @@ -0,0 +1,13 @@ +package us.dot.its.jpo.ode.plugin.types; + +/** + * Character range = 0..127, UPER encoded with 7 bits per character + * Ref: ITU-T X.691 (02/2021) Section 30 + */ +public class IA5String extends Asn1CharacterString { + + public IA5String(int minLength, int maxLength) { + super(minLength, maxLength); + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/UnknownType.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/UnknownType.java new file mode 100644 index 000000000..3152fc04c --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/UnknownType.java @@ -0,0 +1,10 @@ +package us.dot.its.jpo.ode.plugin.types; + +/** + * Placeholder for unknown types in the generated source. + * If classes of this type exist, it means the ASN.1 specification has an unsupported feature. + * + * @author Ivan Yourshaw + */ +public class UnknownType implements Asn1Type { +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/package-info.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/package-info.java new file mode 100644 index 000000000..098180aaa --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/types/package-info.java @@ -0,0 +1,4 @@ +/** + * Base classes and interfaces for ASN.1 types. + */ +package us.dot.its.jpo.ode.plugin.types; \ No newline at end of file diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/BitUtils.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/BitUtils.java new file mode 100644 index 000000000..69d7f4761 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/BitUtils.java @@ -0,0 +1,31 @@ +package us.dot.its.jpo.ode.plugin.utils; + +/** + * Utility class containing static methods for bit manipulation. + */ +public class BitUtils { + + /** + * Reverse bits in a single byte. + * + * @return The reversed byte. + */ + public static byte reverseBits(final byte b) { + var reversedInt = Integer.reverse((int) b << 24) & 0xff; + return (byte) reversedInt; + } + + /** + * Reverse bits in a byte array. + * + * @return The reversed byte array. + */ + public static byte[] reverseBits(final byte[] bytes) { + byte[] reversed = new byte[bytes.length]; + for (int i = 0; i < bytes.length; i++) { + reversed[i] = reverseBits(bytes[i]); + } + return reversed; + } + +} diff --git a/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/XmlUtils.java b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/XmlUtils.java new file mode 100644 index 000000000..b668107d3 --- /dev/null +++ b/jpo-ode-plugins/src/main/java/us/dot/its/jpo/ode/plugin/utils/XmlUtils.java @@ -0,0 +1,169 @@ +package us.dot.its.jpo.ode.plugin.utils; + +import java.io.StringReader; +import java.util.ArrayList; +import java.util.Formatter; +import java.util.List; +import javax.xml.namespace.QName; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.SneakyThrows; + +/** + * XMl Utilities + */ +public class XmlUtils { + + @SneakyThrows + public static List tokenize(String xml) { + var factory = XMLInputFactory.newInstance(); + XMLStreamReader reader = factory.createXMLStreamReader(new StringReader(xml)); + return readTokens(reader); + } + + public static List readTokens(XMLStreamReader xmlReader) throws XMLStreamException { + var tokens = new ArrayList(); + var firstToken = addToken(xmlReader, tokens); + while (xmlReader.hasNext()) { + xmlReader.next(); + var thisToken = addToken(xmlReader, tokens); + if (firstToken == null) { + firstToken = thisToken; + } + if (thisToken != null && thisToken.isLast && thisToken.text.equals(firstToken.text)){ + break; + } + } + return mergeEmptyElements(tokens); + } + + @SneakyThrows + public static List readTokens(XMLStreamReader xmlReader, String endElement) { + var tokens = new ArrayList(); + addToken(xmlReader, tokens); + + while (xmlReader.hasNext()) { + xmlReader.next(); + XmlToken token = addToken(xmlReader, tokens); + if (token != null && token.isLast && token.text.equals(endElement)) { + tokens.removeLast(); + break; + } + } + return mergeEmptyElements(tokens); + } + + private static XmlToken addToken(XMLStreamReader xmlReader, List tokens) { + XmlToken token = null; + if (xmlReader.hasName()) { + QName name = xmlReader.getName(); + if (xmlReader.isStartElement()) { + token = new XmlToken(name.getLocalPart(), true, false); + tokens.add(token); + } else if (xmlReader.isEndElement()) { + token = new XmlToken(name.getLocalPart(), false, true); + tokens.add(token); + } + } else if (xmlReader.hasText() && !xmlReader.isWhiteSpace()) { + token = new XmlToken(xmlReader.getText(), false, false); + tokens.add(token); + } + return token; + } + + // Merge adjacent elements with no text between into empty elements to + // match the asn.1 style for enumerations and booleans. + private static List mergeEmptyElements(final List xmlTokens) { + final var mergedList = new ArrayList(); + int i = 0; + while (i < xmlTokens.size()) { + XmlToken token1 = xmlTokens.get(i); + if (i == xmlTokens.size() - 1) { + mergedList.add(token1); + break; + } + XmlToken token2 = xmlTokens.get(i + 1); + if (token1.isFirst && token2.isLast && token1.text.equals(token2.text)) { + // Combine into empty element and skip 2 + mergedList.add(new XmlToken(token1.text, true, true)); + i += 2; + } else { + // Don't change + mergedList.add(token1); + i++; + } + } + return mergedList; + } + + public static String stringifyTokens(List tokens) { + var f = new Formatter(); + for (XmlToken token : tokens) { + final String text = token.text; + if (token.isFirst && token.isLast) { + // Empty element + f.format("<%s/>", text); + } else if (token.isFirst) { + // Start element + f.format("<%s>", text); + } else if (token.isLast) { + // End element + f.format("", text); + } else { + // Text value + f.format(text); + } + } + return f.toString(); + } + + public static List> groupTopLevelTokens(final List tokens) { + XmlToken topLevel = null; + var tokenLists = new ArrayList>(); + List tokenList = null; + for (XmlToken token : tokens) { + if (topLevel == null && token.isFirst) { + // Start list + topLevel = token; + tokenList = new ArrayList(); + tokenList.add(token); + } else if (topLevel != null && token.isLast && token.text.equals(topLevel.text)) { + // complete list + tokenList.add(token); + topLevel = null; + tokenLists.add(tokenList); + } else if (tokenList != null) { + tokenList.add(token); + } + } + return tokenLists; + } + + public static List unwrap(final List tokens) { + // Remove first and last + if (tokens.size() > 2) { + return tokens.subList(1, tokens.size() - 1); + } else { + return tokens; + } + } + + public static List wrap(final List tokens, String wrapper) { + var wrapped = new ArrayList(); + wrapped.add(new XmlToken(wrapper, true, false)); + wrapped.addAll(tokens); + wrapped.add(new XmlToken(wrapper, false, true)); + return wrapped; + } + + @AllArgsConstructor + @Data + public static class XmlToken { + String text; + boolean isFirst; + boolean isLast; + } +} diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735BsmPart2ContentTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735BsmPart2ContentTest.java index 498155365..9e563ccff 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735BsmPart2ContentTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735BsmPart2ContentTest.java @@ -1,52 +1,65 @@ package us.dot.its.jpo.ode.plugin.j2735; +import static us.dot.its.jpo.ode.plugin.j2735.J2735BsmPart2Content.J2735BsmPart2Id.SpecialVehicleExtensions; +import static us.dot.its.jpo.ode.plugin.j2735.J2735BsmPart2Content.J2735BsmPart2Id.SupplementalVehicleExtensions; +import static us.dot.its.jpo.ode.plugin.j2735.J2735BsmPart2Content.J2735BsmPart2Id.VehicleSafetyExtensions; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; - -import static org.junit.Assert.*; - - -import static us.dot.its.jpo.ode.plugin.j2735.J2735BsmPart2Content.J2735BsmPart2Id.*; - import us.dot.its.jpo.ode.util.JsonUtils; -public class J2735BsmPart2ContentTest { +class J2735BsmPart2ContentTest { + + @Test + void shouldDeserializeBsmPart2Content_VehicleSafetyExtensions() throws IOException { + final String bsmJson = loadResourceAsString( + "src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_VehicleSafetyExtensions.json"); - - @Test - public void shouldDeserializeBsmPart2Content_VehicleSafetyExtensions() { + var deserialized = + (J2735BsmPart2Content) JsonUtils.fromJson(bsmJson, J2735BsmPart2Content.class); - final String bsmJson = "{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":0.0,\"latOffset\":-0.0000491,\"lonOffset\":-0.0000043,\"timeOffset\":0.39},{\"elevationOffset\":-1.1,\"latOffset\":-0.0007303,\"lonOffset\":-0.0001015,\"timeOffset\":6.79},{\"elevationOffset\":-1.1,\"latOffset\":-0.0012664,\"lonOffset\":-0.0002581,\"timeOffset\":10.9},{\"elevationOffset\":-0.7,\"latOffset\":-0.0018413,\"lonOffset\":-0.0005267,\"timeOffset\":14.39}]},\"pathPrediction\":{\"confidence\":70.0,\"radiusOfCurve\":-3139.0}}}"; + Assertions.assertNotNull(deserialized); + Assertions.assertEquals(VehicleSafetyExtensions, deserialized.getId()); + Assertions.assertInstanceOf(J2735VehicleSafetyExtensions.class, deserialized.getValue()); + var extensions = (J2735VehicleSafetyExtensions) deserialized.getValue(); + Assertions.assertNotNull(extensions.getPathHistory()); + Assertions.assertNotNull(extensions.getPathPrediction()); + } - var deserialized = (J2735BsmPart2Content)JsonUtils.fromJson(bsmJson, J2735BsmPart2Content.class); + @Test + void shouldDeserializeBsmPart2Content_SupplementalVehicleExtensions() throws IOException { + final String bsmJson = loadResourceAsString( + "src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_SupplementalVehicleExtensions.json"); - assertNotNull(deserialized); - assertEquals(deserialized.getId(), VehicleSafetyExtensions); - assertTrue(deserialized.getValue() instanceof J2735VehicleSafetyExtensions); - var extensions = (J2735VehicleSafetyExtensions)deserialized.getValue(); - assertNotNull(extensions.getPathHistory()); - assertNotNull(extensions.getPathPrediction()); - } + var deserialized = + (J2735BsmPart2Content) JsonUtils.fromJson(bsmJson, J2735BsmPart2Content.class); - @Test - public void shouldDeserializeBsmPart2Content_SupplementalVehicleExtensions() { - final String bsmJson = "{\"id\":\"SupplementalVehicleExtensions\",\"value\":{\"classification\":null,\"classDetails\":null,\"vehicleData\":null,\"weatherReport\":null,\"weatherProbe\":null,\"obstacle\":null,\"status\":null,\"speedProfile\":null,\"theRTCM\":null}}"; + Assertions.assertNotNull(deserialized); + Assertions.assertEquals(SupplementalVehicleExtensions, deserialized.getId()); + Assertions.assertInstanceOf(J2735SupplementalVehicleExtensions.class, deserialized.getValue()); + } - var deserialized = (J2735BsmPart2Content)JsonUtils.fromJson(bsmJson, J2735BsmPart2Content.class); + @Test + void shouldDeserializeBsmPart2Content_SpecialVehicleExtensions() throws IOException { - assertNotNull(deserialized); - assertEquals(deserialized.getId(), SupplementalVehicleExtensions); - assertTrue(deserialized.getValue() instanceof J2735SupplementalVehicleExtensions); - } + final String bsmJson = loadResourceAsString( + "src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_SpecialVehicleExtensions.json"); - @Test - public void shouldDeserializeBsmPart2Content_SpecialVehicleExtensions() { - final String bsmJson = "{\"id\":\"SpecialVehicleExtensions\",\"value\":{\"vehicleAlerts\":null,\"description\":null,\"trailers\":null}}"; + var deserialized = + (J2735BsmPart2Content) JsonUtils.fromJson(bsmJson, J2735BsmPart2Content.class); - var deserialized = (J2735BsmPart2Content)JsonUtils.fromJson(bsmJson, J2735BsmPart2Content.class); + Assertions.assertNotNull(deserialized); + Assertions.assertEquals(SpecialVehicleExtensions, deserialized.getId()); + Assertions.assertInstanceOf(J2735SpecialVehicleExtensions.class, deserialized.getValue()); + } - assertNotNull(deserialized); - assertEquals(deserialized.getId(), SpecialVehicleExtensions); - assertTrue(deserialized.getValue() instanceof J2735SpecialVehicleExtensions); - } + static String loadResourceAsString(String resourcePath) throws IOException { + File file = new File(resourcePath); + byte[] data = Files.readAllBytes(file.toPath()); + return new String(data); + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735DirectionOfUseTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735DirectionOfUseTest.java deleted file mode 100644 index e9d81dfa3..000000000 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735DirectionOfUseTest.java +++ /dev/null @@ -1,37 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735; - -import static org.junit.Assert.assertNotNull; - -import org.junit.jupiter.api.Test; - -public class J2735DirectionOfUseTest { - @Test - public void checkForward() { - assertNotNull(J2735DirectionOfUse.FORWARD); - } - - @Test - public void checkReverse() { - assertNotNull(J2735DirectionOfUse.REVERSE); - } - - @Test - public void checkBoth() { - assertNotNull(J2735DirectionOfUse.BOTH); - } -} diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735EmergencyDetailsTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735EmergencyDetailsTest.java index f52a4fd94..7fdf4db23 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735EmergencyDetailsTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735EmergencyDetailsTest.java @@ -1,53 +1,49 @@ -/******************************************************************************* +/*============================================================================== * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735; - -import static org.junit.Assert.assertEquals; -import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; +package us.dot.its.jpo.ode.plugin.j2735; import mockit.Tested; -//import mockit.integration.junit4.JMockit; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; -//@RunWith(JMockit.class) -public class J2735EmergencyDetailsTest { +class J2735EmergencyDetailsTest { - @Tested - J2735EmergencyDetails ed; + @Tested + J2735EmergencyDetails ed; - @Test - public void testGettersAndSetters() { - Integer sspRights = 1; - ed.setSspRights(sspRights); - assertEquals(sspRights,ed.getSspRights()); - J2735PrivilegedEvents events = new J2735PrivilegedEvents(); - ed.setEvents(events); - assertEquals(events, ed.getEvents()); - J2735LightbarInUse lightsUse = null; - ed.setLightsUse(lightsUse); - assertEquals(lightsUse,ed.getLightsUse()); - J2735MultiVehicleResponse multi = null; - ed.setMulti(multi); - assertEquals(multi,ed.getMulti()); - J2735ResponseType responseType = null; - ed.setResponseType(responseType); - assertEquals(responseType,ed.getResponseType()); - J2735SirenInUse sirenUse = null; - ed.setSirenUse(sirenUse); - assertEquals(sirenUse,ed.getSirenUse()); - } + @Test + void testGettersAndSetters() { + Integer sspRights = 1; + ed.setDoNotUse(sspRights); + Assertions.assertEquals(sspRights, ed.getDoNotUse()); + J2735PrivilegedEvents events = new J2735PrivilegedEvents(); + ed.setEvents(events); + Assertions.assertEquals(events, ed.getEvents()); + J2735LightbarInUse lightsUse = null; + ed.setLightsUse(lightsUse); + Assertions.assertEquals(lightsUse, ed.getLightsUse()); + J2735MultiVehicleResponse multi = null; + ed.setMulti(multi); + Assertions.assertEquals(multi, ed.getMulti()); + J2735ResponseType responseType = null; + ed.setResponseType(responseType); + Assertions.assertEquals(responseType, ed.getResponseType()); + J2735SirenInUse sirenUse = null; + ed.setSirenUse(sirenUse); + Assertions.assertEquals(sirenUse, ed.getSirenUse()); + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735SpecialVehicleExtensionTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735SpecialVehicleExtensionTest.java index 77b20c5f1..753b9a03c 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735SpecialVehicleExtensionTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735SpecialVehicleExtensionTest.java @@ -1,42 +1,41 @@ -/******************************************************************************* +/*============================================================================== * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735; -import static org.junit.Assert.assertEquals; +package us.dot.its.jpo.ode.plugin.j2735; +import mockit.Tested; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import mockit.Tested; +class J2735SpecialVehicleExtensionTest { + @Tested + J2735SpecialVehicleExtensions sve; + + @Test + void testGettersAndSetters() { + J2735TrailerData trailers = new J2735TrailerData(); + sve.setDoNotUse(trailers); + Assertions.assertEquals(trailers, sve.getDoNotUse()); + + J2735EmergencyDetails vehicleAlerts = new J2735EmergencyDetails(); + sve.setVehicleAlerts(vehicleAlerts); + Assertions.assertEquals(vehicleAlerts, sve.getVehicleAlerts()); -public class J2735SpecialVehicleExtensionTest { - @Tested - J2735SpecialVehicleExtensions sve; - - @Test - public void testGettersAndSetters() { - J2735TrailerData trailers = new J2735TrailerData(); - sve.setTrailers(trailers); - assertEquals(trailers,sve.getTrailers()); - - J2735EmergencyDetails vehicleAlerts = new J2735EmergencyDetails(); - sve.setVehicleAlerts(vehicleAlerts); - assertEquals(vehicleAlerts,sve.getVehicleAlerts()); - - J2735EventDescription description = new J2735EventDescription(); - sve.setDescription(description); - assertEquals(description,sve.getDescription()); - } + J2735EventDescription description = new J2735EventDescription(); + sve.setDescription(description); + Assertions.assertEquals(description, sve.getDescription()); + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735SupplementalVehicleExtensionsTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735SupplementalVehicleExtensionsTest.java index 7219e5e81..f2606ba30 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735SupplementalVehicleExtensionsTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735SupplementalVehicleExtensionsTest.java @@ -1,40 +1,36 @@ -/******************************************************************************* +/*============================================================================== * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735; -import static org.junit.Assert.assertEquals; +package us.dot.its.jpo.ode.plugin.j2735; +import mockit.Tested; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; -import mockit.Tested; -//import mockit.integration.junit4.JMockit; +class J2735SupplementalVehicleExtensionsTest { + @Tested + J2735SupplementalVehicleExtensions sve; -//@RunWith(JMockit.class) -public class J2735SupplementalVehicleExtensionsTest { - @Tested - J2735SupplementalVehicleExtensions sve; - - @Test - public void testGettersAndSetters() { - J2735SpeedProfile speedProfile = new J2735SpeedProfile(); - sve.setSpeedProfile(speedProfile); - assertEquals(speedProfile,sve.getSpeedProfile()); - J2735RTCMPackage theRTCM = new J2735RTCMPackage(); - sve.setTheRTCM(theRTCM); - assertEquals(theRTCM,sve.getTheRTCM()); - } + @Test + void testGettersAndSetters() { + J2735SpeedProfile speedProfile = new J2735SpeedProfile(); + sve.setDoNotUse4(speedProfile); + Assertions.assertEquals(speedProfile, sve.getDoNotUse4()); + J2735RTCMPackage theRTCM = new J2735RTCMPackage(); + sve.setDoNotUse5(theRTCM); + Assertions.assertEquals(theRTCM, sve.getDoNotUse5()); + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735TrailerDataTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735TrailerDataTest.java index a60196439..97730a0c5 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735TrailerDataTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/J2735TrailerDataTest.java @@ -1,46 +1,41 @@ -/******************************************************************************* +/*============================================================================== * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735; -import static org.junit.Assert.assertEquals; +package us.dot.its.jpo.ode.plugin.j2735; import java.util.ArrayList; import java.util.List; - +import mockit.Tested; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; -import mockit.Tested; -//import mockit.integration.junit4.JMockit; +class J2735TrailerDataTest { + @Tested + J2735TrailerData td; -//@RunWith(JMockit.class) -public class J2735TrailerDataTest { - @Tested - J2735TrailerData td; - - @Test - public void testGettersAndSetters() { - J2735PivotPointDescription connection = new J2735PivotPointDescription(); - td.setConnection(connection); - assertEquals(connection,td.getConnection()); - Integer sspRights = 1; - td.setSspRights(sspRights); - assertEquals(sspRights,td.getSspRights()); - List units = new ArrayList<>(); - td.setUnits(units); - assertEquals(units,td.getUnits()); - } + @Test + void testGettersAndSetters() { + J2735PivotPointDescription connection = new J2735PivotPointDescription(); + td.setConnection(connection); + Assertions.assertEquals(connection, td.getConnection()); + Integer sspRights = 1; + td.setDoNotUse(sspRights); + Assertions.assertEquals(sspRights, td.getDoNotUse()); + List units = new ArrayList<>(); + td.setUnits(units); + Assertions.assertEquals(units, td.getUnits()); + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/BsmBuilderTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/BsmBuilderTest.java index 90896989f..d76a36ce3 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/BsmBuilderTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/BsmBuilderTest.java @@ -1,50 +1,58 @@ -/******************************************************************************* +/*============================================================================== * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735.builders; - -import static org.junit.Assert.*; -import org.junit.jupiter.api.Test; +package us.dot.its.jpo.ode.plugin.j2735.builders; import com.fasterxml.jackson.databind.JsonNode; - +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; import us.dot.its.jpo.ode.plugin.j2735.J2735Bsm; -import us.dot.its.jpo.ode.plugin.j2735.builders.BsmPart2ContentBuilder.BsmPart2ContentBuilderException; import us.dot.its.jpo.ode.util.XmlUtils; import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; -public class BsmBuilderTest { +class BsmBuilderTest { + + @Test + void shouldTranslateBsm() throws IOException { - @Test - public void shouldTranslateBsm() throws BsmPart2ContentBuilderException { + JsonNode jsonBsm = null; + try { + jsonBsm = XmlUtils.toObjectNode(loadResourceAsString( + "src/test/resources/us/dot/its/jpo/ode/plugin/j2735/builders/BSM_XML_J2735_2024_ToTranslate.xml")); + } catch (XmlUtilsException e) { + Assertions.fail("XML parsing error:" + e); + } - JsonNode jsonBsm = null; - try { - jsonBsm = XmlUtils.toObjectNode( - "us.dot.its.jpo.ode.model.OdeAsn1Payload538ffb5c-ce7d-438d-8727-8100c11f08b214202018-05-03T18:36:41.38Z[UTC]42018-05-03T17:54:14.206Z[UTC]OBUfalsebsmLogDuringEvent.csvbsmLogDuringEventsuccess40.4740068-104.96920331492.50.24246.3125rootIeee1609Dot2DataCOERunsecuredDataMessageFrameUPEREVMessageFrame20414B3AD21814206404740068-10496920331492519525465535121970512723000100002005700-14165-3670-294297433571-32917075150-130-142-38071129-634-7510170173-588-621156077-645-661257029-500-4213750-45-123-4315710-103-20-4316680-54198-3619130-193-2941922209-382-4672823300-390-3641824320-178-120-32624032767010100288002006004012810000020038191"); - } catch (XmlUtilsException e) { - fail("XML parsing error:" + e); - } + J2735Bsm actualBsm = BsmBuilder.genericBsm(jsonBsm.findValue("BasicSafetyMessage")); - J2735Bsm actualBsm = BsmBuilder.genericBsm(jsonBsm.findValue("BasicSafetyMessage")); + Assertions.assertNotNull(actualBsm); + String expected = loadResourceAsString( + "src/test/resources/us/dot/its/jpo/ode/plugin/j2735/builders/BSM_JSON_J2735_2024_ExpectedTranslation.json"); + Assertions.assertEquals(expected, actualBsm.toString()); - //assertEquals("string", actualBsm.toJson()); - assertNotNull(actualBsm); - String expected = "{\"coreData\":{\"msgCnt\":41,\"id\":\"4B3AD218\",\"secMark\":14206,\"position\":{\"latitude\":40.4740068,\"longitude\":-104.9692033,\"elevation\":1492.5},\"accelSet\":{\"accelLat\":0.00,\"accelLong\":0.23,\"accelVert\":0.00,\"accelYaw\":0.00},\"accuracy\":{\"semiMajor\":9.75,\"semiMinor\":12.70},\"transmission\":\"UNAVAILABLE\",\"speed\":0.24,\"heading\":246.3125,\"brakes\":{\"wheelBrakes\":{\"leftFront\":false,\"rightFront\":false,\"unavailable\":true,\"leftRear\":false,\"rightRear\":false},\"traction\":\"unavailable\",\"abs\":\"unavailable\",\"scs\":\"unavailable\",\"brakeBoost\":\"unavailable\",\"auxBrakes\":\"unavailable\"},\"size\":{\"width\":200,\"length\":570}},\"partII\":[{\"id\":\"VehicleSafetyExtensions\",\"value\":{\"pathHistory\":{\"crumbData\":[{\"elevationOffset\":-0.3,\"latOffset\":-0.0000141,\"lonOffset\":0.0000065,\"timeOffset\":6.70},{\"elevationOffset\":4.3,\"latOffset\":-0.0000294,\"lonOffset\":0.0000297,\"timeOffset\":35.71},{\"elevationOffset\":0.7,\"latOffset\":-0.0000329,\"lonOffset\":0.0000170,\"timeOffset\":51.50},{\"elevationOffset\":-0.3,\"latOffset\":-0.0000130,\"lonOffset\":-0.0000142,\"timeOffset\":80.71},{\"elevationOffset\":-7.5,\"latOffset\":0.0000129,\"lonOffset\":-0.0000634,\"timeOffset\":101.70},{\"elevationOffset\":-6.2,\"latOffset\":0.0000173,\"lonOffset\":-0.0000588,\"timeOffset\":115.60},{\"elevationOffset\":-6.6,\"latOffset\":0.0000077,\"lonOffset\":-0.0000645,\"timeOffset\":125.70},{\"elevationOffset\":-4.2,\"latOffset\":0.0000029,\"lonOffset\":-0.0000500,\"timeOffset\":137.50},{\"elevationOffset\":-4.3,\"latOffset\":-0.0000045,\"lonOffset\":-0.0000123,\"timeOffset\":157.10},{\"elevationOffset\":-4.3,\"latOffset\":-0.0000103,\"lonOffset\":-0.0000020,\"timeOffset\":166.80},{\"elevationOffset\":-3.6,\"latOffset\":-0.0000054,\"lonOffset\":0.0000198,\"timeOffset\":191.30},{\"elevationOffset\":1.9,\"latOffset\":-0.0000193,\"lonOffset\":-0.0000294,\"timeOffset\":222.09},{\"elevationOffset\":2.8,\"latOffset\":-0.0000382,\"lonOffset\":-0.0000467,\"timeOffset\":233.00},{\"elevationOffset\":1.8,\"latOffset\":-0.0000390,\"lonOffset\":-0.0000364,\"timeOffset\":243.20},{\"elevationOffset\":-0.3,\"latOffset\":-0.0000178,\"lonOffset\":-0.0000120,\"timeOffset\":262.40}]},\"pathPrediction\":{\"confidence\":0.0,\"radiusOfCurve\":0.0}}},{\"id\":\"SpecialVehicleExtensions\",\"value\":{\"trailers\":{\"connection\":{\"pivotOffset\":1.00,\"pivots\":false},\"sspRights\":0,\"units\":[{\"isDolly\":false,\"width\":200,\"length\":600,\"height\":2.00,\"mass\":64000,\"frontPivot\":{\"pivotOffset\":1.00,\"pivotAngle\":0.0000,\"pivots\":false},\"positionOffset\":{\"x\":0.00,\"y\":0.00},\"crumbData\":[]}]}}},{\"id\":\"SupplementalVehicleExtensions\",\"value\":{\"classDetails\":{\"fuelType\":\"unknownFuel\",\"hpmsType\":\"none\",\"keyType\":0,\"role\":\"basicVehicle\"},\"vehicleData\":{\"height\":1.90},\"weatherProbe\":{}}}]}"; - assertEquals(expected , actualBsm.toString()); - } + // assert partII list is not empty + Assertions.assertFalse(actualBsm.getPartII().isEmpty()); + } + static String loadResourceAsString(String resourcePath) throws IOException { + File file = new File(resourcePath); + byte[] data = Files.readAllBytes(file.toPath()); + return new String(data); + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/EmergencyDetailsBuilderTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/EmergencyDetailsBuilderTest.java index 8ecce1da1..d1e85cbf9 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/EmergencyDetailsBuilderTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/EmergencyDetailsBuilderTest.java @@ -1,34 +1,29 @@ -/******************************************************************************* +/*============================================================================== * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.builders; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import com.fasterxml.jackson.databind.node.ObjectNode; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Modifier; - +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.node.ObjectNode; - import us.dot.its.jpo.ode.plugin.j2735.J2735EmergencyDetails; import us.dot.its.jpo.ode.plugin.j2735.J2735LightbarInUse; import us.dot.its.jpo.ode.plugin.j2735.J2735MultiVehicleResponse; @@ -36,99 +31,103 @@ import us.dot.its.jpo.ode.plugin.j2735.J2735SirenInUse; import us.dot.its.jpo.ode.util.JsonUtils; -public class EmergencyDetailsBuilderTest { +class EmergencyDetailsBuilderTest { - @Test - public void testRequiredFields() { - - Integer expectedSspRights = 5; - J2735SirenInUse expectedSirenUse = J2735SirenInUse.NOTINUSE; - J2735LightbarInUse expectedLightsUse = J2735LightbarInUse.ARROWSIGNSACTIVE; - J2735MultiVehicleResponse expectedMulti = J2735MultiVehicleResponse.SINGLEVEHICLE; + @Test + void testRequiredFields() { - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("sspRights", expectedSspRights); - testInput.set("sirenUse", JsonUtils.newNode().put("notInUse", true)); - testInput.set("lightsUse", JsonUtils.newNode().put("arrowSignsActive", true)); - testInput.set("multi", JsonUtils.newNode().put("singleVehicle", true)); + Integer expectedSspRights = 5; + J2735SirenInUse expectedSirenUse = J2735SirenInUse.NOTINUSE; + J2735LightbarInUse expectedLightsUse = J2735LightbarInUse.ARROWSIGNSACTIVE; + J2735MultiVehicleResponse expectedMulti = J2735MultiVehicleResponse.SINGLEVEHICLE; + + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("doNotUse", expectedSspRights); + testInput.set("sirenUse", JsonUtils.newNode().put("notInUse", true)); + testInput.set("lightsUse", JsonUtils.newNode().put("arrowSignsActive", true)); + testInput.set("multi", JsonUtils.newNode().put("singleVehicle", true)); + + J2735EmergencyDetails actualValue = EmergencyDetailsBuilder.genericEmergencyDetails(testInput); + + Assertions.assertEquals(expectedSspRights, actualValue.getDoNotUse()); + Assertions.assertEquals(expectedSirenUse, actualValue.getSirenUse()); + Assertions.assertEquals(expectedLightsUse, actualValue.getLightsUse()); + Assertions.assertEquals(expectedMulti, actualValue.getMulti()); + } + + @Test + void testOptionalFields() { - J2735EmergencyDetails actualValue = EmergencyDetailsBuilder.genericEmergencyDetails(testInput); + Integer expectedSspRights = 5; - assertEquals(expectedSspRights, actualValue.getSspRights()); - assertEquals(expectedSirenUse, actualValue.getSirenUse()); - assertEquals(expectedLightsUse, actualValue.getLightsUse()); - assertEquals(expectedMulti, actualValue.getMulti()); - } - - @Test - public void testOptionalFields() { - - Integer expectedSspRights = 5; + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("doNotUse", 8); + testInput.set("sirenUse", JsonUtils.newNode().put("notInUse", true)); + testInput.set("lightsUse", JsonUtils.newNode().put("arrowSignsActive", true)); + testInput.set("multi", JsonUtils.newNode().put("singleVehicle", true)); + // optional fields + testInput.set("events", JsonUtils.newNode().put("doNotUse", 5).put("event", "001000")); + testInput.set("responseType", JsonUtils.newNode().put("slowMoving", true)); + + J2735EmergencyDetails actualValue = EmergencyDetailsBuilder.genericEmergencyDetails(testInput); + + Assertions.assertEquals(expectedSspRights, actualValue.getEvents().getDoNotUse()); + Assertions.assertFalse(actualValue.getEvents().getEvent().get("peUnavailable")); + Assertions.assertFalse(actualValue.getEvents().getEvent().get("peEmergencyResponse")); + Assertions.assertTrue(actualValue.getEvents().getEvent().get("peEmergencyLightsActive")); + Assertions.assertFalse(actualValue.getEvents().getEvent().get("peEmergencySoundActive")); + Assertions.assertFalse(actualValue.getEvents().getEvent().get("peNonEmergencyLightsActive")); + Assertions.assertFalse(actualValue.getEvents().getEvent().get("peNonEmergencySoundActive")); + Assertions.assertEquals(J2735ResponseType.SLOWMOVING, actualValue.getResponseType()); + } + + @Test + void testOptionalFieldsWithInvalidSSPRights() { + assertThrows(IllegalArgumentException.class, () -> { ObjectNode testInput = JsonUtils.newNode(); - testInput.put("sspRights", 8); + testInput.put("doNotUse", 8); testInput.set("sirenUse", JsonUtils.newNode().put("notInUse", true)); testInput.set("lightsUse", JsonUtils.newNode().put("arrowSignsActive", true)); testInput.set("multi", JsonUtils.newNode().put("singleVehicle", true)); - + // optional fields - testInput.set("events", JsonUtils.newNode().put("sspRights", 5).put("event", "001000")); + testInput.set("events", JsonUtils.newNode().put("doNotUse", 32).put("event", "001000")); testInput.set("responseType", JsonUtils.newNode().put("slowMoving", true)); - J2735EmergencyDetails actualValue = EmergencyDetailsBuilder.genericEmergencyDetails(testInput); - - assertEquals(expectedSspRights, actualValue.getEvents().getSspRights()); - assertFalse(actualValue.getEvents().getEvent().get("peUnavailable")); - assertFalse(actualValue.getEvents().getEvent().get("peEmergencyResponse")); - assertTrue(actualValue.getEvents().getEvent().get("peEmergencyLightsActive")); - assertFalse(actualValue.getEvents().getEvent().get("peEmergencySoundActive")); - assertFalse(actualValue.getEvents().getEvent().get("peNonEmergencyLightsActive")); - assertFalse(actualValue.getEvents().getEvent().get("peNonEmergencySoundActive")); - assertEquals(J2735ResponseType.SLOWMOVING, actualValue.getResponseType()); - } - - @Test - public void testOptionalFieldsWithInvalidSSPRights() { - assertThrows(IllegalArgumentException.class, () -> { - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("sspRights", 8); - testInput.set("sirenUse", JsonUtils.newNode().put("notInUse", true)); - testInput.set("lightsUse", JsonUtils.newNode().put("arrowSignsActive", true)); - testInput.set("multi", JsonUtils.newNode().put("singleVehicle", true)); - - // optional fields - testInput.set("events", JsonUtils.newNode().put("sspRights", 32).put("event", "001000")); - testInput.set("responseType", JsonUtils.newNode().put("slowMoving", true)); - - EmergencyDetailsBuilder.genericEmergencyDetails(testInput); - }); - } - - @Test - public void testConstructorIsPrivate() - throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { - Constructor constructor = EmergencyDetailsBuilder.class.getDeclaredConstructor(); - assertTrue(Modifier.isPrivate(constructor.getModifiers())); - constructor.setAccessible(true); - try { - constructor.newInstance(); - fail("Expected IllegalAccessException.class"); - } catch (Exception e) { - assertEquals(InvocationTargetException.class, e.getClass()); - } - } - - @Test - public void testPrivilegedEventsBuilderConstructorIsPrivate() - throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { - Constructor constructor = PrivilegedEventsBuilder.class.getDeclaredConstructor(); - assertTrue(Modifier.isPrivate(constructor.getModifiers())); - constructor.setAccessible(true); - try { - constructor.newInstance(); - fail("Expected IllegalAccessException.class"); - } catch (Exception e) { - assertEquals(InvocationTargetException.class, e.getClass()); - } - } + EmergencyDetailsBuilder.genericEmergencyDetails(testInput); + }); + } + + @Test + void testConstructorIsPrivate() + throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, + InstantiationException { + Constructor constructor = + EmergencyDetailsBuilder.class.getDeclaredConstructor(); + Assertions.assertTrue(Modifier.isPrivate(constructor.getModifiers())); + constructor.setAccessible(true); + try { + constructor.newInstance(); + Assertions.fail("Expected IllegalAccessException.class"); + } catch (Exception e) { + Assertions.assertEquals(InvocationTargetException.class, e.getClass()); + } + } + + @Test + void testPrivilegedEventsBuilderConstructorIsPrivate() + throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, + InstantiationException { + Constructor constructor = + PrivilegedEventsBuilder.class.getDeclaredConstructor(); + Assertions.assertTrue(Modifier.isPrivate(constructor.getModifiers())); + constructor.setAccessible(true); + try { + constructor.newInstance(); + Assertions.fail("Expected IllegalAccessException.class"); + } catch (Exception e) { + Assertions.assertEquals(InvocationTargetException.class, e.getClass()); + } + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/MAPBuilderTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/MAPBuilderTest.java index fd48970dc..b1a45becb 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/MAPBuilderTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/MAPBuilderTest.java @@ -3,28 +3,50 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; -import org.junit.jupiter.api.Test; - import com.fasterxml.jackson.databind.JsonNode; - +import org.junit.jupiter.api.Test; import us.dot.its.jpo.ode.plugin.j2735.J2735MAP; import us.dot.its.jpo.ode.util.XmlUtils; import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; +/** + * Testing the Map POJO builder classes. + */ public class MAPBuilderTest { - @Test - public void shouldTranslateMap() { + @Test + public void shouldTranslateMap() { + String mapXml = """ + us.dot.its.jpo.ode.model.OdeAsn1Payload + d07badec-84f0-48d8-8d4c-898fceaf4ecc1 + 000 + 2020-11-30T23:45:24.913657Z6 + 0 + false + mapTxsuccess + unsecuredData + MessageFrameUPER + V2XMessageFrame + 18 + 412 + 1561 + 389284111-772410713 + 100 + 000000000000000000 + 4324 + 4324 + + + """; - JsonNode jsonMap = null; - try { - jsonMap = XmlUtils.toObjectNode( - "us.dot.its.jpo.ode.model.OdeAsn1Payloadd07badec-84f0-48d8-8d4c-898fceaf4ecc10002020-11-30T23:45:24.913657Z60falsemapTxsuccessunsecuredDataMessageFrameUPERV2XMessageFrame184121561389284111-77241071310000000000000000000043244324"); - } catch (XmlUtilsException e) { - fail("XML parsing error:" + e); - } - J2735MAP actualMap = MAPBuilder.genericMAP(jsonMap.findValue("MapData")); - String expected = "{\"msgIssueRevision\":4,\"layerType\":\"mixedContent\",\"layerID\":12,\"intersections\":{\"intersectionGeometry\":[{\"id\":{\"id\":156},\"revision\":1,\"refPoint\":{\"latitude\":38.9284111,\"longitude\":-77.2410713},\"laneSet\":{\"GenericLane\":[{\"laneID\":1,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}}},\"nodeList\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"nodeXY2\":{\"x\":43,\"y\":24}}},{\"delta\":{\"nodeXY2\":{\"x\":43,\"y\":24}}}]}}}]}}]}}"; - System.out.println(actualMap.toJson()); - assertEquals(expected, actualMap.toJson()); - } + JsonNode jsonMap = null; + try { + jsonMap = XmlUtils.toObjectNode(mapXml); + } catch (XmlUtilsException e) { + fail("XML parsing error:" + e); + } + J2735MAP actualMap = MAPBuilder.genericMAP(jsonMap.findValue("MapData")); + String expected = """ + {\"msgIssueRevision\":4,\"layerType\":\"mixedContent\",\"layerID\":12,\"intersections\":{\"intersectionGeometry\":[{\"id\":{\"id\":156},\"revision\":1,\"refPoint\":{\"latitude\":38.9284111,\"longitude\":-77.2410713},\"laneSet\":{\"GenericLane\":[{\"laneID\":1,\"laneAttributes\":{\"directionalUse\":{\"ingressPath\":false,\"egressPath\":false},\"shareWith\":{\"busVehicleTraffic\":false,\"trackedVehicleTraffic\":false,\"individualMotorizedVehicleTraffic\":false,\"taxiVehicleTraffic\":false,\"overlappingLaneDescriptionProvided\":false,\"cyclistVehicleTraffic\":false,\"otherNonMotorizedTrafficTypes\":false,\"multipleLanesTreatedAsOneLane\":false,\"pedestrianTraffic\":false,\"pedestriansTraffic\":false},\"laneType\":{\"vehicle\":{\"isVehicleRevocableLane\":false,\"isVehicleFlyOverLane\":false,\"permissionOnRequest\":false,\"hasIRbeaconCoverage\":false,\"restrictedToBusUse\":false,\"restrictedToTaxiUse\":false,\"restrictedFromPublicUse\":false,\"hovLaneUseOnly\":false}}},\"nodeList\":{\"nodes\":[{\"delta\":{\"nodeXY2\":{\"x\":43,\"y\":24}}},{\"delta\":{\"nodeXY2\":{\"x\":43,\"y\":24}}}]}}]}}]}}"""; + assertEquals(expected, actualMap.toJson()); + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/SupplementalVehicleExtensionsBuilderTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/SupplementalVehicleExtensionsBuilderTest.java index 6ff061faa..f5b79b2c1 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/SupplementalVehicleExtensionsBuilderTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/SupplementalVehicleExtensionsBuilderTest.java @@ -1,36 +1,30 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ -package us.dot.its.jpo.ode.plugin.j2735.builders; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +package us.dot.its.jpo.ode.plugin.j2735.builders; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Modifier; - -import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - import mockit.Capturing; import mockit.Expectations; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; import us.dot.its.jpo.ode.plugin.j2735.J2735BsmPart2Content; import us.dot.its.jpo.ode.plugin.j2735.J2735DisabledVehicle; import us.dot.its.jpo.ode.plugin.j2735.J2735ObstacleDetection; @@ -43,189 +37,200 @@ import us.dot.its.jpo.ode.plugin.j2735.J2735WeatherReport; import us.dot.its.jpo.ode.util.JsonUtils; -public class SupplementalVehicleExtensionsBuilderTest { +class SupplementalVehicleExtensionsBuilderTest { - @Test - public void testClassification() { + @Test + void testClassification() { - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("classification", 1); - - J2735BsmPart2Content outputContent = new J2735BsmPart2Content(); + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("classification", 1); - J2735SupplementalVehicleExtensions result = SupplementalVehicleExtensionsBuilder - .evaluateSupplementalVehicleExtensions(outputContent, testInput); + J2735BsmPart2Content outputContent = new J2735BsmPart2Content(); - assertEquals(Integer.valueOf(1), result.getClassification()); - } + J2735SupplementalVehicleExtensions result = + SupplementalVehicleExtensionsBuilder.evaluateSupplementalVehicleExtensions(outputContent, + testInput); - @Test - public void testVehicleClass(@Capturing VehicleClassificationBuilder capturingVehicleClassificationBuilder) { + Assertions.assertEquals(Integer.valueOf(1), result.getClassification()); + } - new Expectations() { - { - VehicleClassificationBuilder.genericVehicleClassification((JsonNode) any); - result = new J2735VehicleClassification(); - } - }; + @Test + void testVehicleClass( + @Capturing VehicleClassificationBuilder capturingVehicleClassificationBuilder) { - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("classDetails", "something"); - - J2735BsmPart2Content outputContent = new J2735BsmPart2Content(); + new Expectations() { + { + VehicleClassificationBuilder.genericVehicleClassification((JsonNode) any); + result = new J2735VehicleClassification(); + } + }; - J2735SupplementalVehicleExtensions result = SupplementalVehicleExtensionsBuilder - .evaluateSupplementalVehicleExtensions(outputContent, testInput); + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("classDetails", "something"); - assertNotNull(result.getClassDetails()); - } + J2735BsmPart2Content outputContent = new J2735BsmPart2Content(); - @Test - public void testVehicleData(@Capturing VehicleDataBuilder capturingVehicleDataBuilder) { + J2735SupplementalVehicleExtensions result = + SupplementalVehicleExtensionsBuilder.evaluateSupplementalVehicleExtensions(outputContent, + testInput); - new Expectations() { - { - VehicleDataBuilder.genericVehicleData((JsonNode) any); - result = new J2735VehicleData(); - } - }; + Assertions.assertNotNull(result.getClassDetails()); + } - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("vehicleData", "something"); + @Test + void testVehicleData(@Capturing VehicleDataBuilder capturingVehicleDataBuilder) { - J2735SupplementalVehicleExtensions result = SupplementalVehicleExtensionsBuilder - .evaluateSupplementalVehicleExtensions(new J2735BsmPart2Content(), testInput); + new Expectations() { + { + VehicleDataBuilder.genericVehicleData((JsonNode) any); + result = new J2735VehicleData(); + } + }; - assertNotNull(result.getVehicleData()); - } + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("vehicleData", "something"); - @Test - public void testWeatherReport(@Capturing WeatherReportBuilder capturingWeatherReportBuilder) { + J2735SupplementalVehicleExtensions result = + SupplementalVehicleExtensionsBuilder.evaluateSupplementalVehicleExtensions( + new J2735BsmPart2Content(), testInput); - new Expectations() { - { - WeatherReportBuilder.genericWeatherReport((JsonNode) any); - result = new J2735WeatherReport(); - } - }; + Assertions.assertNotNull(result.getVehicleData()); + } - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("weatherReport", "something"); + @Test + void testWeatherReport(@Capturing WeatherReportBuilder capturingWeatherReportBuilder) { - J2735SupplementalVehicleExtensions result = SupplementalVehicleExtensionsBuilder - .evaluateSupplementalVehicleExtensions(new J2735BsmPart2Content(), testInput); + new Expectations() { + { + WeatherReportBuilder.genericWeatherReport((JsonNode) any); + result = new J2735WeatherReport(); + } + }; + + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("doNotUse1", "something"); + + J2735SupplementalVehicleExtensions result = + SupplementalVehicleExtensionsBuilder.evaluateSupplementalVehicleExtensions( + new J2735BsmPart2Content(), testInput); + + Assertions.assertNotNull(result.getDoNotUse1()); + } + + @Test + void testWeatherProbe(@Capturing WeatherProbeBuilder capturingWeatherProbeBuilder) { + + new Expectations() { + { + WeatherProbeBuilder.genericWeatherProbe((JsonNode) any); + result = new J2735WeatherProbe(); + } + }; + + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("doNotUse2", "something"); + + J2735SupplementalVehicleExtensions result = + SupplementalVehicleExtensionsBuilder.evaluateSupplementalVehicleExtensions( + new J2735BsmPart2Content(), testInput); - assertNotNull(result.getWeatherReport()); - } + Assertions.assertNotNull(result.getDoNotUse2()); + } - @Test - public void testWeatherProbe(@Capturing WeatherProbeBuilder capturingWeatherProbeBuilder) { + @Test + void testObstacle(@Capturing ObstacleDetectionBuilder capturingObstacleDetectionBuilder) { - new Expectations() { - { - WeatherProbeBuilder.genericWeatherProbe((JsonNode) any); - result = new J2735WeatherProbe(); - } - }; + new Expectations() { + { + ObstacleDetectionBuilder.genericObstacleDetection((JsonNode) any); + result = new J2735ObstacleDetection(); + } + }; - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("weatherProbe", "something"); + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("doNotUse3", "something"); - J2735SupplementalVehicleExtensions result = SupplementalVehicleExtensionsBuilder - .evaluateSupplementalVehicleExtensions(new J2735BsmPart2Content(), testInput); + J2735SupplementalVehicleExtensions result = + SupplementalVehicleExtensionsBuilder.evaluateSupplementalVehicleExtensions( + new J2735BsmPart2Content(), testInput); - assertNotNull(result.getWeatherProbe()); - } + Assertions.assertNotNull(result.getDoNotUse3()); + } - @Test - public void testObstacle(@Capturing ObstacleDetectionBuilder capturingObstacleDetectionBuilder) { + @Test + void testStatus(@Capturing DisabledVehicleBuilder capturingDisabledVehicleBuilder) { - new Expectations() { - { - ObstacleDetectionBuilder.genericObstacleDetection((JsonNode) any); - result = new J2735ObstacleDetection(); - } - }; + new Expectations() { + { + DisabledVehicleBuilder.genericDisabledVehicle((JsonNode) any); + result = new J2735DisabledVehicle(); + } + }; - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("obstacle", "something"); - - J2735SupplementalVehicleExtensions result = SupplementalVehicleExtensionsBuilder - .evaluateSupplementalVehicleExtensions(new J2735BsmPart2Content(), testInput); + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("status", "something"); - assertNotNull(result.getObstacle()); - } + J2735SupplementalVehicleExtensions result = + SupplementalVehicleExtensionsBuilder.evaluateSupplementalVehicleExtensions( + new J2735BsmPart2Content(), testInput); - @Test - public void testStatus(@Capturing DisabledVehicleBuilder capturingDisabledVehicleBuilder) { + Assertions.assertNotNull(result.getStatus()); + } - new Expectations() { - { - DisabledVehicleBuilder.genericDisabledVehicle((JsonNode) any); - result = new J2735DisabledVehicle(); - } - }; - - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("status", "something"); + @Test + void testSpeedProfile(@Capturing SpeedProfileBuilder capturingSpeedProfileBuilder) { - J2735SupplementalVehicleExtensions result = SupplementalVehicleExtensionsBuilder - .evaluateSupplementalVehicleExtensions(new J2735BsmPart2Content(), testInput); + new Expectations() { + { + SpeedProfileBuilder.genericSpeedProfile((JsonNode) any); + result = new J2735SpeedProfile(); + } + }; - assertNotNull(result.getStatus()); - } + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("doNotUse4", "something"); - @Test - public void testSpeedProfile(@Capturing SpeedProfileBuilder capturingSpeedProfileBuilder) { - - new Expectations() { - { - SpeedProfileBuilder.genericSpeedProfile((JsonNode) any); - result = new J2735SpeedProfile(); - } - }; - - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("speedProfile", "something"); + J2735SupplementalVehicleExtensions result = + SupplementalVehicleExtensionsBuilder.evaluateSupplementalVehicleExtensions( + new J2735BsmPart2Content(), testInput); - J2735SupplementalVehicleExtensions result = SupplementalVehicleExtensionsBuilder - .evaluateSupplementalVehicleExtensions(new J2735BsmPart2Content(), testInput); + Assertions.assertNotNull(result.getDoNotUse4()); + } - assertNotNull(result.getSpeedProfile()); - } - - @Test - public void testRtcmPackage(@Capturing RTCMPackageBuilder capturingRTCMPackageBuilder) { - - new Expectations() { - { - RTCMPackageBuilder.genericRTCMPackage((JsonNode) any); - result = new J2735RTCMPackage(); - } - }; - - ObjectNode testInput = JsonUtils.newNode(); - testInput.put("theRTCM", "something"); + @Test + void testRtcmPackage(@Capturing RTCMPackageBuilder capturingRTCMPackageBuilder) { - J2735SupplementalVehicleExtensions result = SupplementalVehicleExtensionsBuilder - .evaluateSupplementalVehicleExtensions(new J2735BsmPart2Content(), testInput); - - assertNotNull(result.getTheRTCM()); - } - - @Test - public void testConstructorIsPrivate() - throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { - Constructor constructor = SupplementalVehicleExtensionsBuilder.class - .getDeclaredConstructor(); - assertTrue(Modifier.isPrivate(constructor.getModifiers())); - constructor.setAccessible(true); - try { - constructor.newInstance(); - fail("Expected IllegalAccessException.class"); - } catch (Exception e) { - assertEquals(InvocationTargetException.class, e.getClass()); + new Expectations() { + { + RTCMPackageBuilder.genericRTCMPackage((JsonNode) any); + result = new J2735RTCMPackage(); } - } + }; + + ObjectNode testInput = JsonUtils.newNode(); + testInput.put("doNotUse5", "something"); + + J2735SupplementalVehicleExtensions result = + SupplementalVehicleExtensionsBuilder.evaluateSupplementalVehicleExtensions( + new J2735BsmPart2Content(), testInput); + + Assertions.assertNotNull(result.getDoNotUse5()); + } + + @Test + void testConstructorIsPrivate() + throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, + InstantiationException { + Constructor constructor = + SupplementalVehicleExtensionsBuilder.class.getDeclaredConstructor(); + Assertions.assertTrue(Modifier.isPrivate(constructor.getModifiers())); + constructor.setAccessible(true); + try { + constructor.newInstance(); + Assertions.fail("Expected IllegalAccessException.class"); + } catch (Exception e) { + Assertions.assertEquals(InvocationTargetException.class, e.getClass()); + } + } } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/TravelerMessageFromHumanToAsnConverterTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/TravelerMessageFromHumanToAsnConverterTest.java index 90d3dd515..caea580a1 100644 --- a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/TravelerMessageFromHumanToAsnConverterTest.java +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/builders/TravelerMessageFromHumanToAsnConverterTest.java @@ -1,29 +1,29 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.plugin.j2735.builders; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; import java.io.IOException; -import org.json.JSONException; import org.json.JSONObject; import org.json.XML; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.slf4j.Logger; @@ -39,313 +39,212 @@ import us.dot.its.jpo.ode.util.JsonUtils; import us.dot.its.jpo.ode.util.JsonUtils.JsonUtilsException; -public class TravelerMessageFromHumanToAsnConverterTest { +class TravelerMessageFromHumanToAsnConverterTest { @Mocked - private Logger logger; + Logger logger; @BeforeEach - public void setup() { + void setup() { new MockUp() { @Mock - public Logger getLogger(String value) { + Logger getLogger(String value) { return logger; } }; } @Test - public void testAdvisoryNodeLL() throws JsonProcessingException, IOException, JsonUtilsException { + void testAdvisoryNodeLL() throws JsonProcessingException, IOException, JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":\"2017-08-03T22:25:36.297Z\",\"urlB\":\"null\",\"packetID\":\"EC9C236B0000000000\",\"dataframes\":[{\"startDateTime\":\"2017-08-02T22:25:00.000Z\",\"durationTime\":1,\"sspTimRights\":\"0\",\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"priority\":\"0\",\"sspLocationRights\":\"3\",\"regions\":[{\"name\":\"Testing TIM\",\"regulatorID\":\"0\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.2500807\",\"longitude\":\"-111.0093847\",\"elevation\":\"2020.6969900289998\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"description\":\"path\",\"path\":{\"scale\":\"0\",\"type\":\"ll\",\"nodes\":[{\"nodeLong\":\"0.0002047\",\"nodeLat\":\"-0.0002048\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.0008191\",\"nodeLat\":\"-0.0008192\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.0032767\",\"nodeLat\":\"-0.0032768\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.0131071\",\"nodeLat\":\"-0.0131072\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.2097151\",\"nodeLat\":\"-0.2097152\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.8388607\",\"nodeLat\":\"-0.8388608\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.0002047\",\"nodeLat\":\"-0.0002048\",\"delta\":\"node-LL1\"},{\"nodeLong\":\"0.0008191\",\"nodeLat\":\"-0.0008192\",\"delta\":\"node-LL2\"},{\"nodeLong\":\"0.0032767\",\"nodeLat\":\"-0.0032768\",\"delta\":\"node-LL3\"},{\"nodeLong\":\"0.0131071\",\"nodeLat\":\"-0.0131072\",\"delta\":\"node-LL4\"},{\"nodeLong\":\"0.2097151\",\"nodeLat\":\"-0.2097152\",\"delta\":\"node-LL5\"},{\"nodeLong\":\"0.8388607\",\"nodeLat\":\"-0.8388608\",\"delta\":\"node-LL6\"},{\"nodeLong\":\"-111.0093847\",\"nodeLat\":\"41.2500807\",\"delta\":\"node-LatLon\"}]},\"direction\":\"0000000000001010\"}],\"sspMsgTypes\":\"2\",\"sspMsgContent\":\"3\",\"content\":\"advisory\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":\"2017-08-03T22:25:36.297Z\",\"urlB\":\"null\",\"packetID\":\"EC9C236B0000000000\",\"dataframes\":[{\"startDateTime\":\"2017-08-02T22:25:00.000Z\",\"durationTime\":1,\"doNotUse1\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"priority\":\"0\",\"doNotUse2\":0,\"regions\":[{\"name\":\"Testing TIM\",\"regulatorID\":\"0\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.2500807\",\"longitude\":\"-111.0093847\",\"elevation\":\"2020.6969900289998\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"description\":\"path\",\"path\":{\"scale\":\"0\",\"type\":\"ll\",\"nodes\":[{\"nodeLong\":\"0.0002047\",\"nodeLat\":\"-0.0002048\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.0008191\",\"nodeLat\":\"-0.0008192\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.0032767\",\"nodeLat\":\"-0.0032768\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.0131071\",\"nodeLat\":\"-0.0131072\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.2097151\",\"nodeLat\":\"-0.2097152\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.8388607\",\"nodeLat\":\"-0.8388608\",\"delta\":\"node-LL\"},{\"nodeLong\":\"0.0002047\",\"nodeLat\":\"-0.0002048\",\"delta\":\"node-LL1\"},{\"nodeLong\":\"0.0008191\",\"nodeLat\":\"-0.0008192\",\"delta\":\"node-LL2\"},{\"nodeLong\":\"0.0032767\",\"nodeLat\":\"-0.0032768\",\"delta\":\"node-LL3\"},{\"nodeLong\":\"0.0131071\",\"nodeLat\":\"-0.0131072\",\"delta\":\"node-LL4\"},{\"nodeLong\":\"0.2097151\",\"nodeLat\":\"-0.2097152\",\"delta\":\"node-LL5\"},{\"nodeLong\":\"0.8388607\",\"nodeLat\":\"-0.8388608\",\"delta\":\"node-LL6\"},{\"nodeLong\":\"-111.0093847\",\"nodeLat\":\"41.2500807\",\"delta\":\"node-LatLon\"}]},\"direction\":\"0000000000001010\"}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"advisory\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":309505,\"urlB\":\"null\",\"packetID\":\"EC9C236B0000000000\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":1,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL1\":{\"lat\":-2048,\"lon\":2047}}},{\"delta\":{\"node-LL2\":{\"lat\":-8192,\"lon\":8191}}},{\"delta\":{\"node-LL3\":{\"lat\":-32768,\"lon\":32767}}},{\"delta\":{\"node-LL4\":{\"lat\":-131072,\"lon\":131071}}},{\"delta\":{\"node-LL5\":{\"lat\":-2097152,\"lon\":2097151}}},{\"delta\":{\"node-LL6\":{\"lat\":-8388608,\"lon\":8388607}}},{\"delta\":{\"node-LL1\":{\"lat\":-2048,\"lon\":2047}}},{\"delta\":{\"node-LL2\":{\"lat\":-8192,\"lon\":8191}}},{\"delta\":{\"node-LL3\":{\"lat\":-32768,\"lon\":32767}}},{\"delta\":{\"node-LL4\":{\"lat\":-131072,\"lon\":131071}}},{\"delta\":{\"node-LL5\":{\"lat\":-2097152,\"lon\":2097151}}},{\"delta\":{\"node-LL6\":{\"lat\":-8388608,\"lon\":8388607}}},{\"delta\":{\"node-LatLon\":{\"lat\":412500807,\"lon\":-1110093847}}}]}}}}},\"direction\":\"0000000000001010\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":412500807,\"long\":-1110093847,\"elevation\":20207}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":308065,\"tcontent\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":309505,\"urlB\":\"null\",\"packetID\":\"EC9C236B0000000000\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":1,\"doNotUse1\":0,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL1\":{\"lat\":-2048,\"lon\":2047}}},{\"delta\":{\"node-LL2\":{\"lat\":-8192,\"lon\":8191}}},{\"delta\":{\"node-LL3\":{\"lat\":-32768,\"lon\":32767}}},{\"delta\":{\"node-LL4\":{\"lat\":-131072,\"lon\":131071}}},{\"delta\":{\"node-LL5\":{\"lat\":-2097152,\"lon\":2097151}}},{\"delta\":{\"node-LL6\":{\"lat\":-8388608,\"lon\":8388607}}},{\"delta\":{\"node-LL1\":{\"lat\":-2048,\"lon\":2047}}},{\"delta\":{\"node-LL2\":{\"lat\":-8192,\"lon\":8191}}},{\"delta\":{\"node-LL3\":{\"lat\":-32768,\"lon\":32767}}},{\"delta\":{\"node-LL4\":{\"lat\":-131072,\"lon\":131071}}},{\"delta\":{\"node-LL5\":{\"lat\":-2097152,\"lon\":2097151}}},{\"delta\":{\"node-LL6\":{\"lat\":-8388608,\"lon\":8388607}}},{\"delta\":{\"node-LatLon\":{\"lat\":412500807,\"lon\":-1110093847}}}]}}}}},\"direction\":\"0000000000001010\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":412500807,\"long\":-1110093847,\"elevation\":20207}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":308065,\"tcontent\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e1) { - e1.printStackTrace(); - } catch (JsonUtilsException e1) { - e1.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - e.printStackTrace(); - } + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testWorkzoneNodeXYWithStringLatLon() throws JsonUtilsException { + void testWorkzoneNodeXYWithStringLatLon() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":\"2017-10-27T18:04:43.045Z\",\"packetID\":\"3\",\"urlB\":\"null\",\"dataframes\":[{\"startDateTime\":\"2017-10-20T05:22:33.985Z\",\"durationTime\":100,\"frameType\":\"1\",\"sspTimRights\":\"1\",\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"40.573068\",\"longitude\":\"-105.049016\",\"elevation\":\"1500.8999999999999\"},\"viewAngle\":\"1111111111111111\",\"mutcd\":\"2\",\"crc\":\"0000\",\"priority\":\"5\",\"sspLocationRights\":\"1\",\"regions\":[{\"name\":\"Testing TIM\",\"regulatorID\":\"0\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"40.573068\",\"longitude\":\"-105.049016\",\"elevation\":\"1500.8999999999999\"},\"laneWidth\":\"327\",\"directionality\":\"3\",\"closedPath\":\"false\",\"description\":\"path\",\"path\":{\"scale\":\"0\",\"type\":\"xy\",\"nodes\":[{\"nodeLong\":\"-105.047355\",\"nodeLat\":\"40.572429\",\"delta\":\"node-LatLon\",\"attributes\":{\"localNode\":[\"stopLine\",\"roundedCapStyleA\",\"roundedCapStyleB\",\"mergePoint\",\"divergePoint\",\"downstreamStopLine\",\"downstreamStartNode\",\"closedToTraffic\",\"safeIsland\",\"curbPresentAtStepOff\",\"hydrantPresent\",\"reserved\"],\"disabled\":[\"reserved\",\"doNotBlock\",\"whiteLine\",\"mergingLaneLeft\",\"mergingLaneRight\",\"curbOnLeft\",\"curbOnRight\",\"loadingzoneOnLeft\",\"loadingzoneOnRight\",\"turnOutPointOnLeft\",\"turnOutPointOnRight\"],\"enabled\":[\"adjacentParkingOnLeft\",\"adjacentParkingOnRight\",\"adjacentBikeLaneOnLeft\"],\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":12.3},{\"laneCrownPointLeft\":\"23.4\"},{\"laneCrownPointRight\":34.5},{\"laneAngle\":\"1.23\"},{\"speedLimits\":[{\"type\":\"2\",\"speed\":\"12.3\"},{\"type\":\"maxSpeedInSchoolZone\",\"speed\":\"23.4\"},{\"type\":3,\"speed\":12.3},{\"type\":\"vehicleMinSpeed\",\"speed\":23.4}]}],\"dWidth\":\"1.23\",\"dElevation\":\"2.34\"}},{\"nodeLong\":\"-105.046844\",\"nodeLat\":\"40.572228\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.04659\",\"nodeLat\":\"40.572113\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.046243\",\"nodeLat\":\"40.57191\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045936\",\"nodeLat\":\"40.571675\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045674\",\"nodeLat\":\"40.571422\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.04545\",\"nodeLat\":\"40.571131\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045235\",\"nodeLat\":\"40.570724\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045113\",\"nodeLat\":\"40.570293\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045087\",\"nodeLat\":\"40.569848\",\"delta\":\"node-LatLon\"}]},\"direction\":\"1111111111111111\"}],\"sspMsgTypes\":\"1\",\"sspMsgContent\":\"1\",\"content\":\"workZone\",\"items\":[\"7425\"],\"url\":\"null\"}]}}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":\"2017-10-27T18:04:43.045Z\",\"packetID\":\"3\",\"urlB\":\"null\",\"dataframes\":[{\"startDateTime\":\"2017-10-20T05:22:33.985Z\",\"durationTime\":100,\"frameType\":\"1\",\"doNotUse1\":0,\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"40.573068\",\"longitude\":\"-105.049016\",\"elevation\":\"1500.8999999999999\"},\"viewAngle\":\"1111111111111111\",\"mutcd\":\"2\",\"crc\":\"0000\",\"priority\":\"5\",\"doNotUse2\":0,\"regions\":[{\"name\":\"Testing TIM\",\"regulatorID\":\"0\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"40.573068\",\"longitude\":\"-105.049016\",\"elevation\":\"1500.8999999999999\"},\"laneWidth\":\"327\",\"directionality\":\"3\",\"closedPath\":\"false\",\"description\":\"path\",\"path\":{\"scale\":\"0\",\"type\":\"xy\",\"nodes\":[{\"nodeLong\":\"-105.047355\",\"nodeLat\":\"40.572429\",\"delta\":\"node-LatLon\",\"attributes\":{\"localNode\":[\"stopLine\",\"roundedCapStyleA\",\"roundedCapStyleB\",\"mergePoint\",\"divergePoint\",\"downstreamStopLine\",\"downstreamStartNode\",\"closedToTraffic\",\"safeIsland\",\"curbPresentAtStepOff\",\"hydrantPresent\",\"reserved\"],\"disabled\":[\"reserved\",\"doNotBlock\",\"whiteLine\",\"mergingLaneLeft\",\"mergingLaneRight\",\"curbOnLeft\",\"curbOnRight\",\"loadingzoneOnLeft\",\"loadingzoneOnRight\",\"turnOutPointOnLeft\",\"turnOutPointOnRight\"],\"enabled\":[\"adjacentParkingOnLeft\",\"adjacentParkingOnRight\",\"adjacentBikeLaneOnLeft\"],\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":12.3},{\"laneCrownPointLeft\":\"23.4\"},{\"laneCrownPointRight\":34.5},{\"laneAngle\":\"1.23\"},{\"speedLimits\":[{\"type\":\"2\",\"speed\":\"12.3\"},{\"type\":\"maxSpeedInSchoolZone\",\"speed\":\"23.4\"},{\"type\":3,\"speed\":12.3},{\"type\":\"vehicleMinSpeed\",\"speed\":23.4}]}],\"dWidth\":\"1.23\",\"dElevation\":\"2.34\"}},{\"nodeLong\":\"-105.046844\",\"nodeLat\":\"40.572228\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.04659\",\"nodeLat\":\"40.572113\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.046243\",\"nodeLat\":\"40.57191\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045936\",\"nodeLat\":\"40.571675\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045674\",\"nodeLat\":\"40.571422\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.04545\",\"nodeLat\":\"40.571131\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045235\",\"nodeLat\":\"40.570724\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045113\",\"nodeLat\":\"40.570293\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045087\",\"nodeLat\":\"40.569848\",\"delta\":\"node-LatLon\"}]},\"direction\":\"1111111111111111\"}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"workZone\",\"items\":[\"7425\"],\"url\":\"null\"}]}}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":431644,\"packetID\":\"3\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":100,\"frameType\":{\"1\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"40.573068\",\"longitude\":\"-105.049016\",\"elevation\":\"1500.8999999999999\"},\"viewAngle\":\"1111111111111111\",\"mutcd\":\"2\",\"crc\":\"0000\",\"priority\":\"5\",\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":32700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":-1050473550,\"lat\":405724290}},\"attributes\":{\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":41},{\"laneCrownPointLeft\":78},{\"laneCrownPointRight\":115},{\"laneAngle\":1},{\"speedLimits\":[{\"type\":{\"maxSpeedInSchoolZoneWhenChildrenArePresent\":\"EMPTY_TAG\"},\"speed\":615},{\"type\":{\"maxSpeedInSchoolZone\":\"EMPTY_TAG\"},\"speed\":1170},{\"type\":{\"maxSpeedInConstructionZone\":\"EMPTY_TAG\"},\"speed\":615},{\"type\":{\"vehicleMinSpeed\":\"EMPTY_TAG\"},\"speed\":1170}]}],\"dWidth\":123,\"dElevation\":234}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050468440,\"lat\":405722280}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050465900,\"lat\":405721130}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050462430,\"lat\":405719100}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050459360,\"lat\":405716750}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050456740,\"lat\":405714220}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050454500,\"lat\":405711310}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050452350,\"lat\":405707240}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050451130,\"lat\":405702930}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050450870,\"lat\":405698480}}}]}}}}},\"direction\":\"1111111111111111\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":405730680,\"long\":-1050490160,\"elevation\":15009}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":420802,\"tcontent\":{\"workZone\":{\"SEQUENCE\":[{\"item\":{\"itis\":7425}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":431644,\"packetID\":\"3\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":100,\"frameType\":{\"1\":\"EMPTY_TAG\"},\"doNotUse1\":0,\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"40.573068\",\"longitude\":\"-105.049016\",\"elevation\":\"1500.8999999999999\"},\"viewAngle\":\"1111111111111111\",\"mutcd\":\"2\",\"crc\":\"0000\",\"priority\":\"5\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":32700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":-1050473550,\"lat\":405724290}},\"attributes\":{\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":41},{\"laneCrownPointLeft\":78},{\"laneCrownPointRight\":115},{\"laneAngle\":1},{\"speedLimits\":[{\"type\":{\"maxSpeedInSchoolZoneWhenChildrenArePresent\":\"EMPTY_TAG\"},\"speed\":615},{\"type\":{\"maxSpeedInSchoolZone\":\"EMPTY_TAG\"},\"speed\":1170},{\"type\":{\"maxSpeedInConstructionZone\":\"EMPTY_TAG\"},\"speed\":615},{\"type\":{\"vehicleMinSpeed\":\"EMPTY_TAG\"},\"speed\":1170}]}],\"dWidth\":123,\"dElevation\":234}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050468440,\"lat\":405722280}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050465900,\"lat\":405721130}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050462430,\"lat\":405719100}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050459360,\"lat\":405716750}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050456740,\"lat\":405714220}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050454500,\"lat\":405711310}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050452350,\"lat\":405707240}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050451130,\"lat\":405702930}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050450870,\"lat\":405698480}}}]}}}}},\"direction\":\"1111111111111111\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":405730680,\"long\":-1050490160,\"elevation\":15009}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":420802,\"tcontent\":{\"workZone\":{\"SEQUENCE\":[{\"item\":{\"itis\":7425}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - e.printStackTrace(); - } catch (JsonUtilsException e) { - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - e.printStackTrace(); - } + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testGenericSignNodeXYWithNumericLatLon() throws JsonUtilsException { + void testGenericSignNodeXYWithNumericLatLon() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":44.998459,\"longitude\":-111.040817},\"seCorner\":{\"latitude\":41.104674,\"longitude\":-104.111312}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":\"2017-10-27T18:04:43.045Z\",\"packetID\":\"3\",\"urlB\":\"null\",\"dataframes\":[{\"startDateTime\":\"2017-10-20T05:22:33.985Z\",\"durationTime\":100,\"frameType\":\"advisory\",\"sspTimRights\":\"1\",\"msgId\":\"roadSignID\",\"position\":{\"latitude\":40.573068,\"longitude\":-105.049016,\"elevation\":1500.8999999999999},\"viewAngle\":\"1111111111111111\",\"mutcd\":\"2\",\"crc\":\"0000\",\"priority\":\"5\",\"sspLocationRights\":\"1\",\"regions\":[{\"name\":\"Testing TIM\",\"regulatorID\":\"0\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":40.573068,\"longitude\":-105.049016,\"elevation\":1500.8999999999999},\"laneWidth\":\"327\",\"directionality\":\"3\",\"closedPath\":\"false\",\"description\":\"path\",\"path\":{\"scale\":\"0\",\"type\":\"xy\",\"nodes\":[{\"nodeLong\":-105.047355,\"nodeLat\":40.572429,\"delta\":\"node-LatLon\",\"attributes\":{\"localNode\":[\"stopLine\",\"roundedCapStyleA\",\"roundedCapStyleB\",\"mergePoint\",\"divergePoint\",\"downstreamStopLine\",\"downstreamStartNode\",\"closedToTraffic\",\"safeIsland\",\"curbPresentAtStepOff\",\"hydrantPresent\",\"reserved\"],\"disabled\":[\"reserved\",\"doNotBlock\",\"whiteLine\",\"mergingLaneLeft\",\"mergingLaneRight\",\"curbOnLeft\",\"curbOnRight\",\"loadingzoneOnLeft\",\"loadingzoneOnRight\",\"turnOutPointOnLeft\",\"turnOutPointOnRight\"],\"enabled\":[\"adjacentParkingOnLeft\",\"adjacentParkingOnRight\",\"adjacentBikeLaneOnLeft\"],\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":12.3},{\"laneCrownPointLeft\":\"23.4\"},{\"laneCrownPointRight\":34.5},{\"laneAngle\":\"1.23\"},{\"speedLimits\":[{\"type\":\"2\",\"speed\":\"12.3\"},{\"type\":\"maxSpeedInSchoolZone\",\"speed\":\"23.4\"},{\"type\":3,\"speed\":12.3},{\"type\":\"vehicleMinSpeed\",\"speed\":23.4}]}],\"dWidth\":\"1.23\",\"dElevation\":\"2.34\"}},{\"nodeLong\":\"-105.046844\",\"nodeLat\":\"40.572228\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.04659\",\"nodeLat\":\"40.572113\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.046243\",\"nodeLat\":\"40.57191\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045936\",\"nodeLat\":\"40.571675\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045674\",\"nodeLat\":\"40.571422\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.04545\",\"nodeLat\":\"40.571131\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045235\",\"nodeLat\":\"40.570724\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045113\",\"nodeLat\":\"40.570293\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045087\",\"nodeLat\":\"40.569848\",\"delta\":\"node-LatLon\"}]},\"direction\":\"1111111111111111\"}],\"sspMsgTypes\":\"1\",\"sspMsgContent\":\"1\",\"content\":\"genericSign\",\"items\":[\"7425\"],\"url\":\"null\"}]}}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":44.998459,\"longitude\":-111.040817},\"seCorner\":{\"latitude\":41.104674,\"longitude\":-104.111312}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":\"2017-10-27T18:04:43.045Z\",\"packetID\":\"3\",\"urlB\":\"null\",\"dataframes\":[{\"startDateTime\":\"2017-10-20T05:22:33.985Z\",\"durationTime\":100,\"frameType\":\"advisory\",\"doNotUse1\":0,\"msgId\":\"roadSignID\",\"position\":{\"latitude\":40.573068,\"longitude\":-105.049016,\"elevation\":1500.8999999999999},\"viewAngle\":\"1111111111111111\",\"mutcd\":\"2\",\"crc\":\"0000\",\"priority\":\"5\",\"doNotUse2\":0,\"regions\":[{\"name\":\"Testing TIM\",\"regulatorID\":\"0\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":40.573068,\"longitude\":-105.049016,\"elevation\":1500.8999999999999},\"laneWidth\":\"327\",\"directionality\":\"3\",\"closedPath\":\"false\",\"description\":\"path\",\"path\":{\"scale\":\"0\",\"type\":\"xy\",\"nodes\":[{\"nodeLong\":-105.047355,\"nodeLat\":40.572429,\"delta\":\"node-LatLon\",\"attributes\":{\"localNode\":[\"stopLine\",\"roundedCapStyleA\",\"roundedCapStyleB\",\"mergePoint\",\"divergePoint\",\"downstreamStopLine\",\"downstreamStartNode\",\"closedToTraffic\",\"safeIsland\",\"curbPresentAtStepOff\",\"hydrantPresent\",\"reserved\"],\"disabled\":[\"reserved\",\"doNotBlock\",\"whiteLine\",\"mergingLaneLeft\",\"mergingLaneRight\",\"curbOnLeft\",\"curbOnRight\",\"loadingzoneOnLeft\",\"loadingzoneOnRight\",\"turnOutPointOnLeft\",\"turnOutPointOnRight\"],\"enabled\":[\"adjacentParkingOnLeft\",\"adjacentParkingOnRight\",\"adjacentBikeLaneOnLeft\"],\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":12.3},{\"laneCrownPointLeft\":\"23.4\"},{\"laneCrownPointRight\":34.5},{\"laneAngle\":\"1.23\"},{\"speedLimits\":[{\"type\":\"2\",\"speed\":\"12.3\"},{\"type\":\"maxSpeedInSchoolZone\",\"speed\":\"23.4\"},{\"type\":3,\"speed\":12.3},{\"type\":\"vehicleMinSpeed\",\"speed\":23.4}]}],\"dWidth\":\"1.23\",\"dElevation\":\"2.34\"}},{\"nodeLong\":\"-105.046844\",\"nodeLat\":\"40.572228\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.04659\",\"nodeLat\":\"40.572113\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.046243\",\"nodeLat\":\"40.57191\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045936\",\"nodeLat\":\"40.571675\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045674\",\"nodeLat\":\"40.571422\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.04545\",\"nodeLat\":\"40.571131\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045235\",\"nodeLat\":\"40.570724\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045113\",\"nodeLat\":\"40.570293\",\"delta\":\"node-LatLon\"},{\"nodeLong\":\"-105.045087\",\"nodeLat\":\"40.569848\",\"delta\":\"node-LatLon\"}]},\"direction\":\"1111111111111111\"}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"genericSign\",\"items\":[\"7425\"],\"url\":\"null\"}]}}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":44.998459,\"longitude\":-111.040817},\"seCorner\":{\"latitude\":41.104674,\"longitude\":-104.111312}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":431644,\"packetID\":\"3\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":100,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":40.573068,\"longitude\":-105.049016,\"elevation\":1500.8999999999999},\"viewAngle\":\"1111111111111111\",\"mutcd\":\"2\",\"crc\":\"0000\",\"priority\":\"5\",\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":32700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":-1050473550,\"lat\":405724290}},\"attributes\":{\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":41},{\"laneCrownPointLeft\":78},{\"laneCrownPointRight\":115},{\"laneAngle\":1},{\"speedLimits\":[{\"type\":{\"maxSpeedInSchoolZoneWhenChildrenArePresent\":\"EMPTY_TAG\"},\"speed\":615},{\"type\":{\"maxSpeedInSchoolZone\":\"EMPTY_TAG\"},\"speed\":1170},{\"type\":{\"maxSpeedInConstructionZone\":\"EMPTY_TAG\"},\"speed\":615},{\"type\":{\"vehicleMinSpeed\":\"EMPTY_TAG\"},\"speed\":1170}]}],\"dWidth\":123,\"dElevation\":234}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050468440,\"lat\":405722280}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050465900,\"lat\":405721130}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050462430,\"lat\":405719100}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050459360,\"lat\":405716750}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050456740,\"lat\":405714220}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050454500,\"lat\":405711310}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050452350,\"lat\":405707240}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050451130,\"lat\":405702930}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050450870,\"lat\":405698480}}}]}}}}},\"direction\":\"1111111111111111\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":405730680,\"long\":-1050490160,\"elevation\":15009}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":420802,\"tcontent\":{\"genericSign\":{\"SEQUENCE\":[{\"item\":{\"itis\":7425}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":44.998459,\"longitude\":-111.040817},\"seCorner\":{\"latitude\":41.104674,\"longitude\":-104.111312}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":431644,\"packetID\":\"3\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":100,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"doNotUse1\":0,\"msgId\":\"roadSignID\",\"position\":{\"latitude\":40.573068,\"longitude\":-105.049016,\"elevation\":1500.8999999999999},\"viewAngle\":\"1111111111111111\",\"mutcd\":\"2\",\"crc\":\"0000\",\"priority\":\"5\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":32700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"xy\":{\"nodes\":{\"NodeXY\":[{\"delta\":{\"node-LatLon\":{\"lon\":-1050473550,\"lat\":405724290}},\"attributes\":{\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":41},{\"laneCrownPointLeft\":78},{\"laneCrownPointRight\":115},{\"laneAngle\":1},{\"speedLimits\":[{\"type\":{\"maxSpeedInSchoolZoneWhenChildrenArePresent\":\"EMPTY_TAG\"},\"speed\":615},{\"type\":{\"maxSpeedInSchoolZone\":\"EMPTY_TAG\"},\"speed\":1170},{\"type\":{\"maxSpeedInConstructionZone\":\"EMPTY_TAG\"},\"speed\":615},{\"type\":{\"vehicleMinSpeed\":\"EMPTY_TAG\"},\"speed\":1170}]}],\"dWidth\":123,\"dElevation\":234}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050468440,\"lat\":405722280}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050465900,\"lat\":405721130}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050462430,\"lat\":405719100}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050459360,\"lat\":405716750}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050456740,\"lat\":405714220}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050454500,\"lat\":405711310}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050452350,\"lat\":405707240}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050451130,\"lat\":405702930}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050450870,\"lat\":405698480}}}]}}}}},\"direction\":\"1111111111111111\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":405730680,\"long\":-1050490160,\"elevation\":15009}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":420802,\"tcontent\":{\"genericSign\":{\"SEQUENCE\":[{\"item\":{\"itis\":7425}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - e.printStackTrace(); - } catch (JsonUtilsException e) { - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - - e.printStackTrace(); - } + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testGeometryUnavailable() throws JsonUtilsException { + void testGeometryUnavailable() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}}, \"tim\": { \"msgCnt\": \"13\", \"timeStamp\": \"2017-03-13T01:07:11-05:00\", \"packetID\": \"1\", \"urlB\": \"null\", \"dataframes\": [ { \"sspTimRights\": \"0\", \"frameType\": \"unknown\", \"msgId\": \"roadSignID\", \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcd\": \"5\", \"crc\": \"0000\", \"startDateTime\": \"2017-12-01T17:47:11-05:00\", \"durationTime\": \"22\", \"priority\": \"0\", \"sspLocationRights\": \"3\", \"regions\": [ { \"name\": \"bob\", \"regulatorID\": \"23\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"laneWidth\": \"7\", \"directionality\": \"0\", \"closedPath\": \"false\", \"direction\": \"1010101010101010\", \"description\": \"geometry\", \"geometry\": { \"direction\": \"1010101010101010\", \"extent\": \"1\", \"laneWidth\": \"33\", \"circle\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"radius\": \"15\", \"units\": \"7\" } } } ], \"sspMsgTypes\": \"2\", \"sspMsgContent\": \"3\", \"content\": \"speedLimit\", \"items\": [ \"250\" ], \"url\": \"null\" } ] }}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}}, \"tim\": { \"msgCnt\": \"13\", \"timeStamp\": \"2017-03-13T01:07:11-05:00\", \"packetID\": \"1\", \"urlB\": \"null\", \"dataframes\": [ { \"doNotUse1\": 0, \"frameType\": \"unknown\", \"msgId\": \"roadSignID\", \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcd\": \"5\", \"crc\": \"0000\", \"startDateTime\": \"2017-12-01T17:47:11-05:00\", \"durationTime\": \"22\", \"priority\": \"0\", \"doNotUse2\": 0, \"regions\": [ { \"name\": \"bob\", \"regulatorID\": \"23\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"laneWidth\": \"7\", \"directionality\": \"0\", \"closedPath\": \"false\", \"direction\": \"1010101010101010\", \"description\": \"geometry\", \"geometry\": { \"direction\": \"1010101010101010\", \"extent\": \"1\", \"laneWidth\": \"33\", \"circle\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"radius\": \"15\", \"units\": \"7\" } } } ], \"doNotUse4\": 0, \"doNotUse3\": 0, \"content\": \"speedLimit\", \"items\": [ \"250\" ], \"url\": \"null\" } ] }}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"1\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"frameType\":{\"unknown\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcd\":\"5\",\"crc\":\"0000\",\"durationTime\":\"22\",\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"unavailable\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"laneWidth\":3300,\"circle\":{\"radius\":\"15\",\"units\":{\"mile\":\"EMPTY_TAG\"},\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"speedLimit\":{\"SEQUENCE\":[{\"item\":{\"itis\":250}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"1\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"doNotUse1\":0,\"frameType\":{\"unknown\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcd\":\"5\",\"crc\":\"0000\",\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"unavailable\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"laneWidth\":3300,\"circle\":{\"radius\":\"15\",\"units\":{\"mile\":\"EMPTY_TAG\"},\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"speedLimit\":{\"SEQUENCE\":[{\"item\":{\"itis\":250}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - - e.printStackTrace(); - } catch (JsonUtilsException e) { - - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - - e.printStackTrace(); - } - + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testGeometryExitServiceForward() throws JsonUtilsException { + void testGeometryExitServiceForward() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}}, \"tim\": { \"msgCnt\": \"13\", \"timeStamp\": \"2017-03-13T01:07:11-05:00\", \"packetID\": \"1\", \"urlB\": \"null\", \"dataframes\": [ { \"sspTimRights\": \"0\", \"frameType\": \"0\", \"msgId\": \"roadSignID\", \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcd\": \"5\", \"crc\": \"0000\", \"startDateTime\": \"2017-12-01T17:47:11-05:00\", \"durationTime\": \"22\", \"priority\": \"0\", \"sspLocationRights\": \"3\", \"regions\": [ { \"name\": \"bob\", \"regulatorID\": \"23\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"laneWidth\": \"7\", \"directionality\": \"1\", \"closedPath\": \"false\", \"direction\": \"1010101010101010\", \"description\": \"geometry\", \"geometry\": { \"direction\": \"1010101010101010\", \"extent\": \"1\", \"laneWidth\": \"33\", \"circle\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"radius\": \"15\", \"units\": \"7\" } } } ], \"sspMsgTypes\": \"2\", \"sspMsgContent\": \"3\", \"content\": \"exitService\", \"items\": [ \"250\" ], \"url\": \"null\" } ] }}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}}, \"tim\": { \"msgCnt\": \"13\", \"timeStamp\": \"2017-03-13T01:07:11-05:00\", \"packetID\": \"1\", \"urlB\": \"null\", \"dataframes\": [ { \"doNotUse1\": 0, \"frameType\": \"0\", \"msgId\": \"roadSignID\", \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcd\": \"5\", \"crc\": \"0000\", \"startDateTime\": \"2017-12-01T17:47:11-05:00\", \"durationTime\": \"22\", \"priority\": \"0\", \"doNotUse2\": 0, \"regions\": [ { \"name\": \"bob\", \"regulatorID\": \"23\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"laneWidth\": \"7\", \"directionality\": \"1\", \"closedPath\": \"false\", \"direction\": \"1010101010101010\", \"description\": \"geometry\", \"geometry\": { \"direction\": \"1010101010101010\", \"extent\": \"1\", \"laneWidth\": \"33\", \"circle\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"radius\": \"15\", \"units\": \"7\" } } } ], \"doNotUse4\": 0, \"doNotUse3\": 0, \"content\": \"exitService\", \"items\": [ \"250\" ], \"url\": \"null\" } ] }}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"1\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"frameType\":{\"0\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcd\":\"5\",\"crc\":\"0000\",\"durationTime\":\"22\",\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"forward\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"laneWidth\":3300,\"circle\":{\"radius\":\"15\",\"units\":{\"mile\":\"EMPTY_TAG\"},\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"exitService\":{\"SEQUENCE\":[{\"item\":{\"itis\":250}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"1\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"doNotUse1\":0,\"frameType\":{\"0\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcd\":\"5\",\"crc\":\"0000\",\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"forward\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"laneWidth\":3300,\"circle\":{\"radius\":\"15\",\"units\":{\"mile\":\"EMPTY_TAG\"},\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"exitService\":{\"SEQUENCE\":[{\"item\":{\"itis\":250}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - - e.printStackTrace(); - } catch (JsonUtilsException e) { - - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - - e.printStackTrace(); - } - + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testGeometryAdvisoryReverse() throws JsonUtilsException { + void testGeometryAdvisoryReverse() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}}, \"tim\": { \"msgCnt\": \"13\", \"timeStamp\": \"2017-03-13T01:07:11-05:00\", \"packetID\": \"1\", \"urlB\": \"null\", \"dataframes\": [ { \"sspTimRights\": \"0\", \"frameType\": \"roadSignage\", \"msgId\": \"roadSignID\", \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcd\": \"5\", \"crc\": \"0000\", \"startDateTime\": \"2017-12-01T17:47:11-05:00\", \"durationTime\": \"22\", \"priority\": \"0\", \"sspLocationRights\": \"3\", \"regions\": [ { \"name\": \"bob\", \"regulatorID\": \"23\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"laneWidth\": \"7\", \"directionality\": \"2\", \"closedPath\": \"false\", \"direction\": \"1010101010101010\", \"description\": \"geometry\", \"geometry\": { \"direction\": \"1010101010101010\", \"extent\": \"1\", \"laneWidth\": \"33\", \"circle\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"radius\": \"15\", \"units\": \"7\" } } } ], \"sspMsgTypes\": \"2\", \"sspMsgContent\": \"3\", \"content\": \"advisory\", \"items\": [ \"250\" ], \"url\": \"null\" } ] }}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}}, \"tim\": { \"msgCnt\": \"13\", \"timeStamp\": \"2017-03-13T01:07:11-05:00\", \"packetID\": \"1\", \"urlB\": \"null\", \"dataframes\": [ { \"doNotUse1\": 0, \"frameType\": \"roadSignage\", \"msgId\": \"roadSignID\", \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcd\": \"5\", \"crc\": \"0000\", \"startDateTime\": \"2017-12-01T17:47:11-05:00\", \"durationTime\": \"22\", \"priority\": \"0\", \"doNotUse2\": 0, \"regions\": [ { \"name\": \"bob\", \"regulatorID\": \"23\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"laneWidth\": \"7\", \"directionality\": \"2\", \"closedPath\": \"false\", \"direction\": \"1010101010101010\", \"description\": \"geometry\", \"geometry\": { \"direction\": \"1010101010101010\", \"extent\": \"1\", \"laneWidth\": \"33\", \"circle\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"radius\": \"15\", \"units\": \"7\" } } } ], \"doNotUse4\": 0, \"doNotUse3\": 0, \"content\": \"advisory\", \"items\": [ \"250\" ], \"url\": \"null\" } ] }}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"1\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"frameType\":{\"roadSignage\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcd\":\"5\",\"crc\":\"0000\",\"durationTime\":\"22\",\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"reverse\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"laneWidth\":3300,\"circle\":{\"radius\":\"15\",\"units\":{\"mile\":\"EMPTY_TAG\"},\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":250}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"1\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"doNotUse1\":0,\"frameType\":{\"roadSignage\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcd\":\"5\",\"crc\":\"0000\",\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"reverse\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"laneWidth\":3300,\"circle\":{\"radius\":\"15\",\"units\":{\"mile\":\"EMPTY_TAG\"},\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":250}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - - e.printStackTrace(); - } catch (JsonUtilsException e) { - - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - - e.printStackTrace(); - } - + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testRoadSignIDWorkzone() throws JsonUtilsException { + void testRoadSignIDWorkzone() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\": \"2\", \"timeStamp\": \"2017-08-03T22:25:36.297Z\", \"urlB\": \"null\", \"packetID\": \"EC9C236B0000000000\", \"dataframes\": [ { \"startDateTime\": \"2017-08-02T22:25:00.000Z\", \"durationTime\": 1, \"sspTimRights\": \"0\", \"frameType\": \"commercialSignage\", \"msgId\": { \"roadSignID\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcdCode\": \"warning\", \"crc\": \"0000\" } }, \"priority\": \"0\", \"sspLocationRights\": \"3\", \"regions\": [ { \"name\": \"Testing TIM\", \"regulatorID\": \"0\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.2500807\", \"longitude\": \"-111.0093847\", \"elevation\": \"2020.6969900289998\" }, \"laneWidth\": \"7\", \"directionality\": \"3\", \"closedPath\": \"false\", \"description\": \"path\", \"path\": { \"scale\": \"0\", \"type\": \"ll\", \"nodes\": [ {\"nodeLong\":\"0.0002047\",\"nodeLat\":\"-0.0002048\",\"delta\":\"node-LL\",\"attributes\":{\"localNode\":[\"stopLine\",\"roundedCapStyleA\",\"roundedCapStyleB\",\"mergePoint\",\"divergePoint\",\"downstreamStopLine\",\"downstreamStartNode\",\"closedToTraffic\",\"safeIsland\",\"curbPresentAtStepOff\",\"hydrantPresent\",\"reserved\"],\"disabled\":[\"reserved\",\"doNotBlock\",\"whiteLine\",\"mergingLaneLeft\",\"mergingLaneRight\",\"curbOnLeft\",\"curbOnRight\",\"loadingzoneOnLeft\",\"loadingzoneOnRight\",\"turnOutPointOnLeft\",\"turnOutPointOnRight\"],\"enabled\":[\"adjacentParkingOnLeft\",\"adjacentParkingOnRight\",\"adjacentBikeLaneOnLeft\"],\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":12.3},{\"laneCrownPointLeft\":\"23.4\"},{\"laneCrownPointRight\":34.5},{\"laneAngle\":\"1.23\"},{\"speedLimits\":[{\"type\":\"2\",\"speed\":\"12.3\"},{\"type\":\"maxSpeedInSchoolZone\",\"speed\":\"23.4\"},{\"type\":3,\"speed\":12.3},{\"type\":\"vehicleMinSpeed\",\"speed\":23.4}]}],\"dWidth\":\"1.23\",\"dElevation\":\"2.34\"}}, { \"nodeLong\": \"0.0030974\", \"nodeLat\": \"0.0014568\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030983\", \"nodeLat\": \"0.0014559\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030980\", \"nodeLat\": \"0.0014563\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030982\", \"nodeLat\": \"0.0014562\", \"delta\": \"node-LL3\" } ] }, \"direction\": \"0000000000001010\" } ], \"sspMsgTypes\": \"2\", \"sspMsgContent\": \"3\", \"content\": \"workZone\", \"items\": [ \"513\" ], \"url\": \"null\" } ] }}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\": \"2\", \"timeStamp\": \"2017-08-03T22:25:36.297Z\", \"urlB\": \"null\", \"packetID\": \"EC9C236B0000000000\", \"dataframes\": [ { \"startDateTime\": \"2017-08-02T22:25:00.000Z\", \"durationTime\": 1, \"doNotUse1\": 0, \"frameType\": \"commercialSignage\", \"msgId\": { \"roadSignID\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcdCode\": \"warning\", \"crc\": \"0000\" } }, \"priority\": \"0\", \"doNotUse2\": 0, \"regions\": [ { \"name\": \"Testing TIM\", \"regulatorID\": \"0\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.2500807\", \"longitude\": \"-111.0093847\", \"elevation\": \"2020.6969900289998\" }, \"laneWidth\": \"7\", \"directionality\": \"3\", \"closedPath\": \"false\", \"description\": \"path\", \"path\": { \"scale\": \"0\", \"type\": \"ll\", \"nodes\": [ {\"nodeLong\":\"0.0002047\",\"nodeLat\":\"-0.0002048\",\"delta\":\"node-LL\",\"attributes\":{\"localNode\":[\"stopLine\",\"roundedCapStyleA\",\"roundedCapStyleB\",\"mergePoint\",\"divergePoint\",\"downstreamStopLine\",\"downstreamStartNode\",\"closedToTraffic\",\"safeIsland\",\"curbPresentAtStepOff\",\"hydrantPresent\",\"reserved\"],\"disabled\":[\"reserved\",\"doNotBlock\",\"whiteLine\",\"mergingLaneLeft\",\"mergingLaneRight\",\"curbOnLeft\",\"curbOnRight\",\"loadingzoneOnLeft\",\"loadingzoneOnRight\",\"turnOutPointOnLeft\",\"turnOutPointOnRight\"],\"enabled\":[\"adjacentParkingOnLeft\",\"adjacentParkingOnRight\",\"adjacentBikeLaneOnLeft\"],\"data\":[{\"pathEndPointAngle\":123},{\"laneCrownPointCenter\":12.3},{\"laneCrownPointLeft\":\"23.4\"},{\"laneCrownPointRight\":34.5},{\"laneAngle\":\"1.23\"},{\"speedLimits\":[{\"type\":\"2\",\"speed\":\"12.3\"},{\"type\":\"maxSpeedInSchoolZone\",\"speed\":\"23.4\"},{\"type\":3,\"speed\":12.3},{\"type\":\"vehicleMinSpeed\",\"speed\":23.4}]}],\"dWidth\":\"1.23\",\"dElevation\":\"2.34\"}}, { \"nodeLong\": \"0.0030974\", \"nodeLat\": \"0.0014568\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030983\", \"nodeLat\": \"0.0014559\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030980\", \"nodeLat\": \"0.0014563\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030982\", \"nodeLat\": \"0.0014562\", \"delta\": \"node-LL3\" } ] }, \"direction\": \"0000000000001010\" } ], \"doNotUse4\": 0, \"doNotUse3\": 0, \"content\": \"workZone\", \"items\": [ \"513\" ], \"url\": \"null\" } ] }}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"2\",\"timeStamp\":309505,\"urlB\":\"null\",\"packetID\":\"EC9C236B0000000000\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":1,\"frameType\":{\"commercialSignage\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL1\":{\"lat\":-2048,\"lon\":2047}}},{\"delta\":{\"node-LL3\":{\"lat\":14568,\"lon\":30974}}},{\"delta\":{\"node-LL3\":{\"lat\":14559,\"lon\":30983}}},{\"delta\":{\"node-LL3\":{\"lat\":14563,\"lon\":30980}}},{\"delta\":{\"node-LL3\":{\"lat\":14562,\"lon\":30982}}}]}}}}},\"direction\":\"0000000000001010\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":412500807,\"long\":-1110093847,\"elevation\":20207}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":308065,\"tcontent\":{\"workZone\":{\"SEQUENCE\":[{\"item\":{\"itis\":513}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"2\",\"timeStamp\":309505,\"urlB\":\"null\",\"packetID\":\"EC9C236B0000000000\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":1,\"doNotUse1\":0,\"frameType\":{\"commercialSignage\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL1\":{\"lat\":-2048,\"lon\":2047}}},{\"delta\":{\"node-LL3\":{\"lat\":14568,\"lon\":30974}}},{\"delta\":{\"node-LL3\":{\"lat\":14559,\"lon\":30983}}},{\"delta\":{\"node-LL3\":{\"lat\":14563,\"lon\":30980}}},{\"delta\":{\"node-LL3\":{\"lat\":14562,\"lon\":30982}}}]}}}}},\"direction\":\"0000000000001010\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":412500807,\"long\":-1110093847,\"elevation\":20207}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":308065,\"tcontent\":{\"workZone\":{\"SEQUENCE\":[{\"item\":{\"itis\":513}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - - e.printStackTrace(); - } catch (JsonUtilsException e) { - - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - - e.printStackTrace(); - } + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testGeometryBothGenericSign() throws JsonUtilsException { + void testGeometryBothGenericSign() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}}, \"tim\": { \"msgCnt\": \"13\", \"timeStamp\": \"2017-03-13T01:07:11-05:00\", \"packetID\": \"1\", \"urlB\": \"null\", \"dataframes\": [ { \"sspTimRights\": \"0\", \"frameType\": \"0\", \"msgId\": \"roadSignID\", \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcd\": \"5\", \"crc\": \"0000\", \"startDateTime\": \"2017-12-01T17:47:11-05:00\", \"durationTime\": \"22\", \"priority\": \"0\", \"sspLocationRights\": \"3\", \"regions\": [ { \"name\": \"bob\", \"regulatorID\": \"23\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"laneWidth\": \"7\", \"directionality\": \"3\", \"closedPath\": \"false\", \"direction\": \"1010101010101010\", \"description\": \"geometry\", \"geometry\": { \"direction\": \"1010101010101010\", \"extent\": \"1\", \"laneWidth\": \"33\", \"circle\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"radius\": \"15\", \"units\": \"7\" } } } ], \"sspMsgTypes\": \"2\", \"sspMsgContent\": \"3\", \"content\": \"genericSign\", \"items\": [ \"250\" ], \"url\": \"null\" } ] }}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}}, \"tim\": { \"msgCnt\": \"13\", \"timeStamp\": \"2017-03-13T01:07:11-05:00\", \"packetID\": \"1\", \"urlB\": \"null\", \"dataframes\": [ { \"doNotUse1\": 0, \"frameType\": \"0\", \"msgId\": \"roadSignID\", \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcd\": \"5\", \"crc\": \"0000\", \"startDateTime\": \"2017-12-01T17:47:11-05:00\", \"durationTime\": \"22\", \"priority\": \"0\", \"doNotUse2\": 0, \"regions\": [ { \"name\": \"bob\", \"regulatorID\": \"23\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"laneWidth\": \"7\", \"directionality\": \"3\", \"closedPath\": \"false\", \"direction\": \"1010101010101010\", \"description\": \"geometry\", \"geometry\": { \"direction\": \"1010101010101010\", \"extent\": \"1\", \"laneWidth\": \"33\", \"circle\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"radius\": \"15\", \"units\": \"7\" } } } ], \"doNotUse4\": 0, \"doNotUse3\": 0, \"content\": \"genericSign\", \"items\": [ \"250\" ], \"url\": \"null\" } ] }}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"1\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"frameType\":{\"0\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcd\":\"5\",\"crc\":\"0000\",\"durationTime\":\"22\",\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"laneWidth\":3300,\"circle\":{\"radius\":\"15\",\"units\":{\"mile\":\"EMPTY_TAG\"},\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"genericSign\":{\"SEQUENCE\":[{\"item\":{\"itis\":250}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"1\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"doNotUse1\":0,\"frameType\":{\"0\":\"EMPTY_TAG\"},\"msgId\":\"roadSignID\",\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcd\":\"5\",\"crc\":\"0000\",\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"laneWidth\":3300,\"circle\":{\"radius\":\"15\",\"units\":{\"mile\":\"EMPTY_TAG\"},\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"genericSign\":{\"SEQUENCE\":[{\"item\":{\"itis\":250}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - - e.printStackTrace(); - } catch (JsonUtilsException e) { - - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - - e.printStackTrace(); - } - + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testPathSpeedLimit() throws JsonUtilsException { + void testPathSpeedLimit() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\": \"1\", \"timeStamp\": \"2017-08-03T22:25:36.297Z\", \"urlB\": \"null\", \"packetID\": \"EC9C236B0000000000\", \"dataframes\": [ { \"startDateTime\": \"2017-08-02T22:25:00.000Z\", \"durationTime\": 1, \"sspTimRights\": \"0\", \"frameType\": \"advisory\", \"msgId\": { \"roadSignID\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcdCode\": \"warning\", \"crc\": \"0000\" } }, \"priority\": \"0\", \"sspLocationRights\": \"3\", \"regions\": [ { \"name\": \"Testing TIM\", \"regulatorID\": \"0\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.2500807\", \"longitude\": \"-111.0093847\", \"elevation\": \"2020.6969900289998\" }, \"laneWidth\": \"7\", \"directionality\": \"3\", \"closedPath\": \"false\", \"description\": \"path\", \"path\": { \"scale\": \"0\", \"type\": \"ll\", \"nodes\": [ { \"nodeLong\": \"0.0031024\", \"nodeLat\": \"0.0014506\", \"delta\": \"node-LL3\",\"attributes\":{\"localNode\":[\"stopLine\",\"roundedCapStyleA\",\"roundedCapStyleB\",\"mergePoint\",\"divergePoint\",\"downstreamStopLine\",\"downstreamStartNode\",\"closedToTraffic\",\"safeIsland\",\"curbPresentAtStepOff\",\"hydrantPresent\",\"reserved\"],\"disabled\":[\"reserved\",\"doNotBlock\",\"whiteLine\",\"mergingLaneLeft\",\"mergingLaneRight\",\"curbOnLeft\",\"curbOnRight\",\"loadingzoneOnLeft\",\"loadingzoneOnRight\",\"turnOutPointOnLeft\",\"turnOutPointOnRight\"],\"enabled\":[\"adjacentParkingOnLeft\",\"adjacentParkingOnRight\",\"adjacentBikeLaneOnLeft\"],\"data\":[{\"pathEndPointAngle\":\"123\"},{\"laneCrownPointCenter\":\"111\"},{\"laneCrownPointLeft\":\"5.5\"}],\"dWidth\":\"33\",\"dElevation\":\"500\"} }, { \"nodeLong\": \"0.0030974\", \"nodeLat\": \"0.0014568\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030983\", \"nodeLat\": \"0.0014559\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030980\", \"nodeLat\": \"0.0014563\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030982\", \"nodeLat\": \"0.0014562\", \"delta\": \"node-LL3\" } ] }, \"direction\": \"0000000000001010\" } ], \"sspMsgTypes\": \"2\", \"sspMsgContent\": \"3\", \"content\": \"speedLimit\", \"items\": [ \"513\" ], \"url\": \"null\" } ] }}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\": \"1\", \"timeStamp\": \"2017-08-03T22:25:36.297Z\", \"urlB\": \"null\", \"packetID\": \"EC9C236B0000000000\", \"dataframes\": [ { \"startDateTime\": \"2017-08-02T22:25:00.000Z\", \"durationTime\": 1, \"doNotUse1\": 0, \"frameType\": \"advisory\", \"msgId\": { \"roadSignID\": { \"position\": { \"latitude\": \"41.678473\", \"longitude\": \"-108.782775\", \"elevation\": \"917.1432\" }, \"viewAngle\": \"1010101010101010\", \"mutcdCode\": \"warning\", \"crc\": \"0000\" } }, \"priority\": \"0\", \"doNotUse2\": 0, \"regions\": [ { \"name\": \"Testing TIM\", \"regulatorID\": \"0\", \"segmentID\": \"33\", \"anchorPosition\": { \"latitude\": \"41.2500807\", \"longitude\": \"-111.0093847\", \"elevation\": \"2020.6969900289998\" }, \"laneWidth\": \"7\", \"directionality\": \"3\", \"closedPath\": \"false\", \"description\": \"path\", \"path\": { \"scale\": \"0\", \"type\": \"ll\", \"nodes\": [ { \"nodeLong\": \"0.0031024\", \"nodeLat\": \"0.0014506\", \"delta\": \"node-LL3\",\"attributes\":{\"localNode\":[\"stopLine\",\"roundedCapStyleA\",\"roundedCapStyleB\",\"mergePoint\",\"divergePoint\",\"downstreamStopLine\",\"downstreamStartNode\",\"closedToTraffic\",\"safeIsland\",\"curbPresentAtStepOff\",\"hydrantPresent\",\"reserved\"],\"disabled\":[\"reserved\",\"doNotBlock\",\"whiteLine\",\"mergingLaneLeft\",\"mergingLaneRight\",\"curbOnLeft\",\"curbOnRight\",\"loadingzoneOnLeft\",\"loadingzoneOnRight\",\"turnOutPointOnLeft\",\"turnOutPointOnRight\"],\"enabled\":[\"adjacentParkingOnLeft\",\"adjacentParkingOnRight\",\"adjacentBikeLaneOnLeft\"],\"data\":[{\"pathEndPointAngle\":\"123\"},{\"laneCrownPointCenter\":\"111\"},{\"laneCrownPointLeft\":\"5.5\"}],\"dWidth\":\"33\",\"dElevation\":\"500\"} }, { \"nodeLong\": \"0.0030974\", \"nodeLat\": \"0.0014568\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030983\", \"nodeLat\": \"0.0014559\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030980\", \"nodeLat\": \"0.0014563\", \"delta\": \"node-LL3\" }, { \"nodeLong\": \"0.0030982\", \"nodeLat\": \"0.0014562\", \"delta\": \"node-LL3\" } ] }, \"direction\": \"0000000000001010\" } ], \"doNotUse4\": 0, \"doNotUse3\": 0, \"content\": \"speedLimit\", \"items\": [ \"513\" ], \"url\": \"null\" } ] }}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":309505,\"urlB\":\"null\",\"packetID\":\"EC9C236B0000000000\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":1,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL3\":{\"lat\":14506,\"lon\":31024}}},{\"delta\":{\"node-LL3\":{\"lat\":14568,\"lon\":30974}}},{\"delta\":{\"node-LL3\":{\"lat\":14559,\"lon\":30983}}},{\"delta\":{\"node-LL3\":{\"lat\":14563,\"lon\":30980}}},{\"delta\":{\"node-LL3\":{\"lat\":14562,\"lon\":30982}}}]}}}}},\"direction\":\"0000000000001010\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":412500807,\"long\":-1110093847,\"elevation\":20207}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":308065,\"tcontent\":{\"speedLimit\":{\"SEQUENCE\":[{\"item\":{\"itis\":513}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"1\",\"timeStamp\":309505,\"urlB\":\"null\",\"packetID\":\"EC9C236B0000000000\",\"dataFrames\":{\"TravelerDataFrame\":[{\"durationTime\":1,\"doNotUse1\":0,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"Testing TIM\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"description\":{\"path\":{\"scale\":\"0\",\"offset\":{\"ll\":{\"nodes\":{\"NodeLL\":[{\"delta\":{\"node-LL3\":{\"lat\":14506,\"lon\":31024}}},{\"delta\":{\"node-LL3\":{\"lat\":14568,\"lon\":30974}}},{\"delta\":{\"node-LL3\":{\"lat\":14559,\"lon\":30983}}},{\"delta\":{\"node-LL3\":{\"lat\":14563,\"lon\":30980}}},{\"delta\":{\"node-LL3\":{\"lat\":14562,\"lon\":30982}}}]}}}}},\"direction\":\"0000000000001010\",\"id\":{\"region\":0,\"id\":33},\"anchor\":{\"lat\":412500807,\"long\":-1110093847,\"elevation\":20207}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":308065,\"tcontent\":{\"speedLimit\":{\"SEQUENCE\":[{\"item\":{\"itis\":513}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - - e.printStackTrace(); - } catch (JsonUtilsException e) { - - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - - e.printStackTrace(); - } + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testTranslateISOTimeStampToMinuteOfYear() { - assertEquals(232800, - TravelerMessageFromHumanToAsnConverter.translateISOTimeStampToMinuteOfYear("2018-06-11T16:00:00.000Z")); + void testTranslateISOTimeStampToMinuteOfYear() { + Assertions.assertEquals(232800, + TravelerMessageFromHumanToAsnConverter.translateISOTimeStampToMinuteOfYear( + "2018-06-11T16:00:00.000Z")); - assertEquals(232800, - TravelerMessageFromHumanToAsnConverter.translateISOTimeStampToMinuteOfYear("2018-06-11T10:00-06:00")); + Assertions.assertEquals(232800, + TravelerMessageFromHumanToAsnConverter.translateISOTimeStampToMinuteOfYear( + "2018-06-11T10:00-06:00")); // Test for invalid timestamp - assertEquals(527040, - TravelerMessageFromHumanToAsnConverter.translateISOTimeStampToMinuteOfYear("2018-15-44T25:66:77.999Z")); + Assertions.assertEquals(527040, + TravelerMessageFromHumanToAsnConverter.translateISOTimeStampToMinuteOfYear( + "2018-15-44T25:66:77.999Z")); } @Test - public void testReplaceDataFrameTimestamp() { + void testReplaceDataFrameTimestamp() { String fieldName = "startDateTime"; ObjectNode startDateTime = JsonUtils.newNode().put(fieldName, "2018-06-11T16:00:00.000Z"); TravelerMessageFromHumanToAsnConverter.replaceDataFrameTimestamp(startDateTime); - assertNull(startDateTime.get("startDateTime")); - assertEquals(2018, startDateTime.get("startYear").asInt()); - assertEquals(232800, startDateTime.get("startTime").asLong()); + Assertions.assertNull(startDateTime.get("startDateTime")); + Assertions.assertEquals(2018, startDateTime.get("startYear").asInt()); + Assertions.assertEquals(232800, startDateTime.get("startTime").asLong()); startDateTime = JsonUtils.newNode().put(fieldName, "2018-06-11T10:00-06:00"); TravelerMessageFromHumanToAsnConverter.replaceDataFrameTimestamp(startDateTime); - assertNull(startDateTime.get("startDateTime")); - assertEquals(2018, startDateTime.get("startYear").asInt()); - assertEquals(232800, startDateTime.get("startTime").asLong()); + Assertions.assertNull(startDateTime.get("startDateTime")); + Assertions.assertEquals(2018, startDateTime.get("startYear").asInt()); + Assertions.assertEquals(232800, startDateTime.get("startTime").asLong()); // Test for invalid timestamp startDateTime = JsonUtils.newNode().put(fieldName, "2018-15-44T25:66:77.999Z"); TravelerMessageFromHumanToAsnConverter.replaceDataFrameTimestamp(startDateTime); - assertNull(startDateTime.get("startDateTime")); - assertEquals(0, startDateTime.get("startYear").asInt()); - assertEquals(527040, startDateTime.get("startTime").asLong()); + Assertions.assertNull(startDateTime.get("startDateTime")); + Assertions.assertEquals(0, startDateTime.get("startYear").asInt()); + Assertions.assertEquals(527040, startDateTime.get("startTime").asLong()); } @Test - public void testBuildItem() { + void testBuildItem() { String itisCode = "123"; String itis = "itis"; @@ -354,168 +253,233 @@ public void testBuildItem() { // build ITIS code JsonNode actualItem = TravelerMessageFromHumanToAsnConverter.buildItem(itisCode); - assertEquals(expecteditem, actualItem); + Assertions.assertEquals(expecteditem, actualItem); // build number text expectedItisNode.remove(itis); expectedItisNode.put("text", itisCode); actualItem = TravelerMessageFromHumanToAsnConverter.buildItem("'123"); - assertEquals(expecteditem, actualItem); + Assertions.assertEquals(expecteditem, actualItem); // build alphanumeric text String test123 = "test 123"; expectedItisNode.put("text", test123); actualItem = TravelerMessageFromHumanToAsnConverter.buildItem(test123); - assertEquals(expecteditem, actualItem); + Assertions.assertEquals(expecteditem, actualItem); } @Test - public void testOldRegionWithShapePointSetWithNodeList() throws JsonUtilsException { + void testOldRegionWithShapePointSetWithNodeList() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"sspTimRights\":\"0\",\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"sspLocationRights\":\"3\",\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"shapePointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"33\",\"directionality\":\"3\",\"nodeList\":{\"nodes\":[{\"x\":\"-5.12\",\"y\":\"5.11\",\"delta\":\"node-XY\"},{\"x\":\"-10.24\",\"y\":\"10.23\",\"delta\":\"node-XY\"},{\"x\":\"-20.48\",\"y\":\"20.47\",\"delta\":\"node-XY\"},{\"x\":\"-40.96\",\"y\":\"40.95\",\"delta\":\"node-XY\"},{\"x\":\"-81.92\",\"y\":\"81.91\",\"delta\":\"node-XY\"},{\"x\":\"-327.68\",\"y\":\"327.67\",\"delta\":\"node-XY\"},{\"nodeLong\":\"-105.045087\",\"nodeLat\":\"40.569848\",\"delta\":\"node-LatLon\"}]}}}}}],\"sspMsgTypes\":\"2\",\"sspMsgContent\":\"3\",\"content\":\"exitService\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"doNotUse1\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"shapePointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"33\",\"directionality\":\"3\",\"nodeList\":{\"nodes\":[{\"x\":\"-5.12\",\"y\":\"5.11\",\"delta\":\"node-XY\"},{\"x\":\"-10.24\",\"y\":\"10.23\",\"delta\":\"node-XY\"},{\"x\":\"-20.48\",\"y\":\"20.47\",\"delta\":\"node-XY\"},{\"x\":\"-40.96\",\"y\":\"40.95\",\"delta\":\"node-XY\"},{\"x\":\"-81.92\",\"y\":\"81.91\",\"delta\":\"node-XY\"},{\"x\":\"-327.68\",\"y\":\"327.67\",\"delta\":\"node-XY\"},{\"nodeLong\":\"-105.045087\",\"nodeLat\":\"40.569848\",\"delta\":\"node-LatLon\"}]}}}}}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"exitService\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"shapePointSet\":{\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"laneWidth\":3300,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"nodeList\":{\"nodes\":[{\"delta\":{\"node-XY1\":{\"x\":-512,\"y\":511}}},{\"delta\":{\"node-XY2\":{\"x\":-1024,\"y\":1023}}},{\"delta\":{\"node-XY3\":{\"x\":-2048,\"y\":2047}}},{\"delta\":{\"node-XY4\":{\"x\":-4096,\"y\":4095}}},{\"delta\":{\"node-XY5\":{\"x\":-8192,\"y\":8191}}},{\"delta\":{\"node-XY6\":{\"x\":-32768,\"y\":32767}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050450870,\"lat\":405698480}}}]}}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"exitService\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"doNotUse1\":0,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"shapePointSet\":{\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"laneWidth\":3300,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"nodeList\":{\"nodes\":[{\"delta\":{\"node-XY1\":{\"x\":-512,\"y\":511}}},{\"delta\":{\"node-XY2\":{\"x\":-1024,\"y\":1023}}},{\"delta\":{\"node-XY3\":{\"x\":-2048,\"y\":2047}}},{\"delta\":{\"node-XY4\":{\"x\":-4096,\"y\":4095}}},{\"delta\":{\"node-XY5\":{\"x\":-8192,\"y\":8191}}},{\"delta\":{\"node-XY6\":{\"x\":-32768,\"y\":32767}}},{\"delta\":{\"node-LatLon\":{\"lon\":-1050450870,\"lat\":405698480}}}]}}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"exitService\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - - e.printStackTrace(); - } catch (JsonUtilsException e) { - - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - - e.printStackTrace(); - } - + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testOldRegionWithShapePointSetWithComputedLanesSmall() throws JsonUtilsException { + void testOldRegionWithShapePointSetWithComputedLanesSmall() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"sspTimRights\":\"0\",\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"sspLocationRights\":\"3\",\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"shapePointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"33\",\"directionality\":\"3\",\"nodeList\":{\"computed\":{\"referenceLaneId\":\"123\",\"offsetXaxis\":\"111\",\"offsetYaxis\":\"111\",\"rotateXY\":\"123.45\",\"scaleXaxis\":\"123.45\",\"scaleYaxis\":\"123.45\"}}}}}}],\"sspMsgTypes\":\"2\",\"sspMsgContent\":\"3\",\"content\":\"exitService\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"doNotUse1\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"shapePointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"33\",\"directionality\":\"3\",\"nodeList\":{\"computed\":{\"referenceLaneId\":\"123\",\"offsetXaxis\":\"111\",\"offsetYaxis\":\"111\",\"rotateXY\":\"123.45\",\"scaleXaxis\":\"123.45\",\"scaleYaxis\":\"123.45\"}}}}}}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"exitService\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"shapePointSet\":{\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"laneWidth\":3300,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"nodeList\":{\"computed\":{\"referenceLaneId\":\"123\",\"offsetXaxis\":{\"small\":111},\"offsetYaxis\":{\"small\":111},\"rotateXY\":9876,\"scaleXaxis\":469,\"scaleYaxis\":469}}}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"exitService\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"doNotUse1\":0,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"shapePointSet\":{\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"laneWidth\":3300,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"nodeList\":{\"computed\":{\"referenceLaneId\":\"123\",\"offsetXaxis\":{\"small\":111},\"offsetYaxis\":{\"small\":111},\"rotateXY\":9876,\"scaleXaxis\":469,\"scaleYaxis\":469}}}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"exitService\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - - e.printStackTrace(); - } catch (JsonUtilsException e) { - - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { - - e.printStackTrace(); - } - + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testOldRegionWithShapePointSetWithComputedLanesLarge() throws JsonUtilsException { + void testOldRegionWithShapePointSetWithComputedLanesLarge() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"sspTimRights\":\"0\",\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"sspLocationRights\":\"3\",\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"shapePointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"33\",\"directionality\":\"3\",\"nodeList\":{\"computed\":{\"referenceLaneId\":\"123\",\"offsetXaxis\":\"11111\",\"offsetYaxis\":\"11111\",\"rotateXY\":\"123.45\",\"scaleXaxis\":\"123.45\",\"scaleYaxis\":\"123.45\"}}}}}}],\"sspMsgTypes\":\"2\",\"sspMsgContent\":\"3\",\"content\":\"exitService\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"doNotUse1\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"shapePointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"33\",\"directionality\":\"3\",\"nodeList\":{\"computed\":{\"referenceLaneId\":\"123\",\"offsetXaxis\":\"11111\",\"offsetYaxis\":\"11111\",\"rotateXY\":\"123.45\",\"scaleXaxis\":\"123.45\",\"scaleYaxis\":\"123.45\"}}}}}}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"exitService\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"shapePointSet\":{\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"laneWidth\":3300,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"nodeList\":{\"computed\":{\"referenceLaneId\":\"123\",\"offsetXaxis\":{\"large\":11111},\"offsetYaxis\":{\"large\":11111},\"rotateXY\":9876,\"scaleXaxis\":469,\"scaleYaxis\":469}}}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"exitService\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"doNotUse1\":0,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"shapePointSet\":{\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"laneWidth\":3300,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"nodeList\":{\"computed\":{\"referenceLaneId\":\"123\",\"offsetXaxis\":{\"large\":11111},\"offsetYaxis\":{\"large\":11111},\"rotateXY\":9876,\"scaleXaxis\":469,\"scaleYaxis\":469}}}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"exitService\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { - - e.printStackTrace(); - } catch (JsonUtilsException e) { + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); + } - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { + @Test + void testOldRegionWithCircle() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { + ObjectNode inputTID = JsonUtils.toObjectNode( + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"doNotUse1\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"circle\":{\"center\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"radius\":\"2048\",\"units\":\"centimeter\"}}}}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"advisory\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); + TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); - e.printStackTrace(); - } + ObjectNode expectedTID = JsonUtils.toObjectNode( + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"doNotUse1\":0,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"circle\":{\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"radius\":\"2048\",\"units\":{\"centimeter\":\"EMPTY_TAG\"}}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); + JSONObject timObject = new JSONObject(); + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); } @Test - public void testOldRegionWithCircle() throws JsonUtilsException { + void testOldRegionWithRegionPointSet() throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"sspTimRights\":\"0\",\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"sspLocationRights\":\"3\",\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"circle\":{\"center\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"radius\":\"2048\",\"units\":\"centimeter\"}}}}],\"sspMsgTypes\":\"2\",\"sspMsgContent\":\"3\",\"content\":\"advisory\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"doNotUse1\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"regionPointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"scale\":\"0\",\"nodeList\":[{\"xOffset\":\"-0.003\",\"yOffset\":\"0.003\",\"zOffset\":\"0\"},{\"xOffset\":\"-0.002\",\"yOffset\":\"0.002\",\"zOffset\":\"0\"},{\"xOffset\":\"-0.001\",\"yOffset\":\"0.001\",\"zOffset\":\"0\"}]}}}}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"advisory\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"circle\":{\"center\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"radius\":\"2048\",\"units\":{\"centimeter\":\"EMPTY_TAG\"}}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"doNotUse1\":0,\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"doNotUse2\":0,\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"regionPointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"scale\":\"0\",\"nodeList\":[{\"xOffset\":\"-0.003\",\"yOffset\":\"0.003\",\"zOffset\":\"0\"},{\"xOffset\":\"-0.002\",\"yOffset\":\"0.002\",\"zOffset\":\"0\"},{\"xOffset\":\"-0.001\",\"yOffset\":\"0.001\",\"zOffset\":\"0\"}]}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"doNotUse4\":0,\"doNotUse3\":0,\"url\":\"null\",\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); + Assertions.assertEquals(expectedTID.toString(), inputTID.toString()); JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { + timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, + JsonUtils.toJSONObject(inputTID.toString())); + Assertions.assertNotNull(XML.toString(timObject)); + } - e.printStackTrace(); - } catch (JsonUtilsException e) { + @Test + void ensureComplianceWithJ2735Revision2024_noOldFields() + throws TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("doNotUse1", 0); + dataFrame.put("doNotUse2", 0); + dataFrame.put("doNotUse3", 0); + dataFrame.put("doNotUse4", 0); + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + } - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_sspMsgContent() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("sspMsgContent", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } - e.printStackTrace(); - } + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_sspMsgTypes() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("sspMsgTypes", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_sspTimRights() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("sspTimRights", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); } @Test - public void testOldRegionWithRegionPointSet() throws JsonUtilsException { - ObjectNode inputTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"sspTimRights\":\"0\",\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000\"}},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":\"22\",\"priority\":\"0\",\"sspLocationRights\":\"3\",\"regions\":[{\"name\":\"bob\",\"regulatorID\":\"23\",\"segmentID\":\"33\",\"anchorPosition\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"laneWidth\":\"7\",\"directionality\":\"3\",\"closedPath\":\"false\",\"direction\":\"1010101010101010\",\"description\":\"oldRegion\",\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":\"1\",\"area\":{\"regionPointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"scale\":\"0\",\"nodeList\":[{\"xOffset\":\"-0.003\",\"yOffset\":\"0.003\",\"zOffset\":\"0\"},{\"xOffset\":\"-0.002\",\"yOffset\":\"0.002\",\"zOffset\":\"0\"},{\"xOffset\":\"-0.001\",\"yOffset\":\"0.001\",\"zOffset\":\"0\"}]}}}}],\"sspMsgTypes\":\"2\",\"sspMsgContent\":\"3\",\"content\":\"advisory\",\"items\":[\"125\",\"some text\",\"250\",\"'98765\"],\"url\":\"null\"}]}}"); - TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(inputTID); + void ensureComplianceWithJ2735Revision2024_containsOldField_sspLocationRights() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("sspLocationRights", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } - ObjectNode expectedTID = JsonUtils.toObjectNode( - "{\"request\":{\"rsus\":[{\"rsuIndex\":\"10\",\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":\"1\",\"rsuTimeout\":\"1000\"}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":\"31\",\"mode\":\"1\",\"channel\":\"178\",\"interval\":\"2\",\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":\"1\",\"status\":\"4\"},\"sdw\":{\"ttl\":\"oneweek\",\"serviceRegion\":{\"nwCorner\":{\"latitude\":\"44.998459\",\"longitude\":\"-111.040817\"},\"seCorner\":{\"latitude\":\"41.104674\",\"longitude\":\"-104.111312\"}}}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":102607,\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataFrames\":{\"TravelerDataFrame\":[{\"frameType\":{\"advisory\":\"EMPTY_TAG\"},\"msgId\":{\"roadSignID\":{\"position\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":{\"warning\":\"EMPTY_TAG\"},\"crc\":\"0000\"}},\"durationTime\":\"22\",\"priority\":\"0\",\"regions\":{\"GeographicalPath\":[{\"name\":\"bob\",\"laneWidth\":700,\"directionality\":{\"both\":\"EMPTY_TAG\"},\"closedPath\":\"BOOLEAN_OBJECT_FALSE\",\"direction\":\"1010101010101010\",\"description\":{\"oldRegion\":{\"direction\":\"1010101010101010\",\"extent\":{\"useFor3meters\":\"EMPTY_TAG\"},\"area\":{\"regionPointSet\":{\"anchor\":{\"latitude\":\"41.678473\",\"longitude\":\"-108.782775\",\"elevation\":\"917.1432\"},\"scale\":\"0\",\"nodeList\":[{\"xOffset\":\"-0.003\",\"yOffset\":\"0.003\",\"zOffset\":\"0\"},{\"xOffset\":\"-0.002\",\"yOffset\":\"0.002\",\"zOffset\":\"0\"},{\"xOffset\":\"-0.001\",\"yOffset\":\"0.001\",\"zOffset\":\"0\"}]}}}},\"id\":{\"region\":23,\"id\":33},\"anchor\":{\"lat\":416784730,\"long\":-1087827750,\"elevation\":9171}}]},\"url\":\"null\",\"notUsed\":0,\"notUsed1\":0,\"notUsed2\":0,\"notUsed3\":0,\"startYear\":2017,\"startTime\":482327,\"tcontent\":{\"advisory\":{\"SEQUENCE\":[{\"item\":{\"itis\":125}},{\"item\":{\"text\":\"some text\"}},{\"item\":{\"itis\":250}},{\"item\":{\"text\":\"98765\"}}]}}}]}}}"); - assertEquals(expectedTID.toString(), inputTID.toString()); + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_sspMsgRights1() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("sspMsgRights1", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } - JSONObject timObject = new JSONObject(); - try { - timObject.put(TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION, - JsonUtils.toJSONObject(inputTID.toString())); - } catch (JSONException e) { + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_sspMsgRights2() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("sspMsgRights2", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } - e.printStackTrace(); - } catch (JsonUtilsException e) { + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_notUsed() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("notUsed", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } - e.printStackTrace(); - } - try { - assertNotNull(XML.toString(timObject)); - } catch (JSONException e) { + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_notUsed1() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("notUsed1", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } - e.printStackTrace(); - } + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_notUsed2() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("notUsed2", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_notUsed3() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("notUsed3", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); } + + @Test + void ensureComplianceWithJ2735Revision2024_containsOldField_duratonTime() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("duratonTime", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } + + @Test + void ensureComplianceWithJ2735Revision2024_containsMultipleOldFields() { + ObjectNode dataFrame = JsonNodeFactory.instance.objectNode(); + dataFrame.put("sspMsgContent", 1); + dataFrame.put("sspMsgTypes", 1); + dataFrame.put("sspTimRights", 1); + dataFrame.put("sspLocationRights", 1); + dataFrame.put("sspMsgRights1", 1); + dataFrame.put("sspMsgRights2", 1); + dataFrame.put("notUsed", 1); + dataFrame.put("notUsed1", 1); + dataFrame.put("notUsed2", 1); + dataFrame.put("notUsed3", 1); + dataFrame.put("duratonTime", 1); + assertThrows(TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException.class, () -> { + TravelerMessageFromHumanToAsnConverter.ensureComplianceWithJ2735Revision2024(dataFrame); + }); + } + } diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceTest.java new file mode 100644 index 000000000..eb4a1a966 --- /dev/null +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/common/HeadingSliceTest.java @@ -0,0 +1,39 @@ +package us.dot.its.jpo.ode.plugin.j2735.common; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; + +/** + * Test serializing and deserializing a HeadingSlice bitstring to ODE JSON. + */ +public class HeadingSliceTest { + + private static final ObjectMapper mapper = new ObjectMapper(); + + @Test + public void testDeserializeJson() throws JsonProcessingException { + HeadingSlice hs = mapper.readValue(EXPECTED_JSON, HeadingSlice.class); + assertNotNull(hs); + for (int i = 0; i < hs.size(); i++) { + assertTrue(hs.get(i)); + } + } + + @Test + public void testSerializeJson() throws JsonProcessingException { + var hs = new HeadingSlice(); + for (int i = 0; i < hs.size(); i++) { + hs.set(i, true); + } + String json = mapper.writeValueAsString(hs); + assertEquals(EXPECTED_JSON, json); + } + + private static final String EXPECTED_JSON = """ + {"from000-0to022-5degrees":true,"from022-5to045-0degrees":true,"from045-0to067-5degrees":true,"from067-5to090-0degrees":true,"from090-0to112-5degrees":true,"from112-5to135-0degrees":true,"from135-0to157-5degrees":true,"from157-5to180-0degrees":true,"from180-0to202-5degrees":true,"from202-5to225-0degrees":true,"from225-0to247-5degrees":true,"from247-5to270-0degrees":true,"from270-0to292-5degrees":true,"from292-5to315-0degrees":true,"from315-0to337-5degrees":true,"from337-5to360-0degrees":true}"""; +} diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerDataFrameTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerDataFrameTest.java new file mode 100644 index 000000000..ea30d3ef5 --- /dev/null +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/timstorage/TravelerDataFrameTest.java @@ -0,0 +1,64 @@ +package us.dot.its.jpo.ode.plugin.j2735.timstorage; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; + +class TravelerDataFrameTest { + ObjectMapper mapper = new ObjectMapper(); + + @Test + void deserializePreJ2735_2016() throws IOException { + String json = new String(Files.readAllBytes(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_pre-J2735-2016.json"))); + TravelerDataFrame expectedFrame = getExpectedTravelerDataFrame(); + + TravelerDataFrame deserializedFrame = mapper.readValue(json, TravelerDataFrame.class); + + Assertions.assertEquals(expectedFrame, deserializedFrame); + } + + @Test + void deserializeJ2735_2016() throws IOException { + String json = new String(Files.readAllBytes(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_J2735-2016.json"))); + TravelerDataFrame expectedFrame = getExpectedTravelerDataFrame(); + + TravelerDataFrame deserializedFrame = mapper.readValue(json, TravelerDataFrame.class); + + Assertions.assertEquals(expectedFrame, deserializedFrame); + } + + @Test + void deserializeJ2735_2020() throws IOException { + String json = new String(Files.readAllBytes(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_J2735-2020.json"))); + TravelerDataFrame expectedFrame = getExpectedTravelerDataFrame(); + + TravelerDataFrame deserializedFrame = mapper.readValue(json, TravelerDataFrame.class); + + Assertions.assertEquals(expectedFrame, deserializedFrame); + } + + private TravelerDataFrame getExpectedTravelerDataFrame() { + TravelerDataFrame frame = new TravelerDataFrame(); + frame.setDoNotUse1("value1"); + frame.setFrameType(new FrameType()); + frame.setMsgId(new MsgId()); + frame.setStartYear("2024"); + frame.setStartTime("12:00"); + frame.setDurationTime("30"); + frame.setPriority("high"); + frame.setDoNotUse2("value2"); + frame.setRegions(new Regions()); + frame.setDoNotUse3("value3"); + frame.setDoNotUse4("value4"); + frame.setTcontent(new Content()); + frame.setUrl("http://example.com"); + return frame; + } +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLLTest.java b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLLTest.java new file mode 100644 index 000000000..c3af40e40 --- /dev/null +++ b/jpo-ode-plugins/src/test/java/us/dot/its/jpo/ode/plugin/j2735/travelerinformation/NodeAttributeSetLLTest.java @@ -0,0 +1,41 @@ +package us.dot.its.jpo.ode.plugin.j2735.travelerinformation; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.junit.jupiter.api.Test; +import us.dot.its.jpo.ode.plugin.j2735.common.Offset_B10; + +/** + * Test serializing and deserializing a NodeAttributeSetLL to and from ODE JSON. + */ +public class NodeAttributeSetLLTest { + + private static final ObjectMapper mapper = new ObjectMapper(); + + @Test + public void testDeserializeJson_dWidth_dElevation() throws JsonProcessingException { + final NodeAttributeSetLL nasll = mapper.readValue( + DWITDH_DELEVATION_ONLY_JSON, NodeAttributeSetLL.class); + assertNotNull(nasll); + final long dElevation = nasll.getDElevation().getValue(); + assertEquals(424, dElevation); + final long dWidth = nasll.getDWidth().getValue(); + assertEquals(162, dWidth); + } + + @Test + public void testSerializeJson_dWidth_dElevation() throws JsonProcessingException { + final var nasll = new NodeAttributeSetLL(); + nasll.setDElevation(new Offset_B10(424L)); + nasll.setDWidth(new Offset_B10(162L)); + final String jsonResult = mapper.writeValueAsString(nasll); + assertEquals(DWITDH_DELEVATION_ONLY_JSON, jsonResult); + } + + private static final String DWITDH_DELEVATION_ONLY_JSON = """ + {"dWidth":162,"dElevation":424}"""; + +} diff --git a/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_SpecialVehicleExtensions.json b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_SpecialVehicleExtensions.json new file mode 100644 index 000000000..f6fc157cb --- /dev/null +++ b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_SpecialVehicleExtensions.json @@ -0,0 +1 @@ +{"id":"SpecialVehicleExtensions","value":{"vehicleAlerts":null,"description":null,"doNotUse":null}} \ No newline at end of file diff --git a/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_SupplementalVehicleExtensions.json b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_SupplementalVehicleExtensions.json new file mode 100644 index 000000000..8baddbc27 --- /dev/null +++ b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_SupplementalVehicleExtensions.json @@ -0,0 +1 @@ +{"id":"SupplementalVehicleExtensions","value":{"classification":null,"classDetails":null,"vehicleData":null,"doNotUse1":null,"doNotUse2":null,"doNotUse3":null,"status":null,"doNotUse4":null,"doNotUse5":null}} \ No newline at end of file diff --git a/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_VehicleSafetyExtensions.json b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_VehicleSafetyExtensions.json new file mode 100644 index 000000000..6e89cbf03 --- /dev/null +++ b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/BSM_PartIIContent_VehicleSafetyExtensions.json @@ -0,0 +1 @@ +{"id":"VehicleSafetyExtensions","value":{"pathHistory":{"crumbData":[{"elevationOffset":0.0,"latOffset":-0.0000491,"lonOffset":-0.0000043,"timeOffset":0.39},{"elevationOffset":-1.1,"latOffset":-0.0007303,"lonOffset":-0.0001015,"timeOffset":6.79},{"elevationOffset":-1.1,"latOffset":-0.0012664,"lonOffset":-0.0002581,"timeOffset":10.9},{"elevationOffset":-0.7,"latOffset":-0.0018413,"lonOffset":-0.0005267,"timeOffset":14.39}]},"pathPrediction":{"confidence":70.0,"radiusOfCurve":-3139.0}}} \ No newline at end of file diff --git a/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/builders/BSM_JSON_J2735_2024_ExpectedTranslation.json b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/builders/BSM_JSON_J2735_2024_ExpectedTranslation.json new file mode 100644 index 000000000..62cb2d485 --- /dev/null +++ b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/builders/BSM_JSON_J2735_2024_ExpectedTranslation.json @@ -0,0 +1 @@ +{"coreData":{"msgCnt":41,"id":"4B3AD218","secMark":14206,"position":{"latitude":40.4740068,"longitude":-104.9692033,"elevation":1492.5},"accelSet":{"accelLat":0.00,"accelLong":0.23,"accelVert":0.00,"accelYaw":0.00},"accuracy":{"semiMajor":9.75,"semiMinor":12.70},"transmission":"UNAVAILABLE","speed":0.24,"heading":246.3125,"brakes":{"wheelBrakes":{"leftFront":false,"rightFront":false,"unavailable":true,"leftRear":false,"rightRear":false},"traction":"unavailable","abs":"unavailable","scs":"unavailable","brakeBoost":"unavailable","auxBrakes":"unavailable"},"size":{"width":200,"length":570}},"partII":[{"id":"VehicleSafetyExtensions","value":{"pathHistory":{"crumbData":[{"elevationOffset":-0.3,"latOffset":-0.0000141,"lonOffset":0.0000065,"timeOffset":6.70},{"elevationOffset":4.3,"latOffset":-0.0000294,"lonOffset":0.0000297,"timeOffset":35.71},{"elevationOffset":0.7,"latOffset":-0.0000329,"lonOffset":0.0000170,"timeOffset":51.50},{"elevationOffset":-0.3,"latOffset":-0.0000130,"lonOffset":-0.0000142,"timeOffset":80.71},{"elevationOffset":-7.5,"latOffset":0.0000129,"lonOffset":-0.0000634,"timeOffset":101.70},{"elevationOffset":-6.2,"latOffset":0.0000173,"lonOffset":-0.0000588,"timeOffset":115.60},{"elevationOffset":-6.6,"latOffset":0.0000077,"lonOffset":-0.0000645,"timeOffset":125.70},{"elevationOffset":-4.2,"latOffset":0.0000029,"lonOffset":-0.0000500,"timeOffset":137.50},{"elevationOffset":-4.3,"latOffset":-0.0000045,"lonOffset":-0.0000123,"timeOffset":157.10},{"elevationOffset":-4.3,"latOffset":-0.0000103,"lonOffset":-0.0000020,"timeOffset":166.80},{"elevationOffset":-3.6,"latOffset":-0.0000054,"lonOffset":0.0000198,"timeOffset":191.30},{"elevationOffset":1.9,"latOffset":-0.0000193,"lonOffset":-0.0000294,"timeOffset":222.09},{"elevationOffset":2.8,"latOffset":-0.0000382,"lonOffset":-0.0000467,"timeOffset":233.00},{"elevationOffset":1.8,"latOffset":-0.0000390,"lonOffset":-0.0000364,"timeOffset":243.20},{"elevationOffset":-0.3,"latOffset":-0.0000178,"lonOffset":-0.0000120,"timeOffset":262.40}]},"pathPrediction":{"confidence":0.0,"radiusOfCurve":0.0}}},{"id":"SpecialVehicleExtensions","value":{"doNotUse":{"connection":{"pivotOffset":1.00,"pivots":false},"doNotUse":0,"units":[{"isDolly":false,"width":200,"length":600,"height":2.00,"mass":64000,"frontPivot":{"pivotOffset":1.00,"pivotAngle":0.0000,"pivots":false},"positionOffset":{"x":0.00,"y":0.00},"crumbData":[]}]}}},{"id":"SupplementalVehicleExtensions","value":{"classDetails":{"fuelType":"unknownFuel","hpmsType":"none","keyType":0,"role":"basicVehicle"},"vehicleData":{"height":1.90},"doNotUse2":{}}}]} \ No newline at end of file diff --git a/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/builders/BSM_XML_J2735_2024_ToTranslate.xml b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/builders/BSM_XML_J2735_2024_ToTranslate.xml new file mode 100644 index 000000000..f612e92aa --- /dev/null +++ b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/builders/BSM_XML_J2735_2024_ToTranslate.xml @@ -0,0 +1 @@ +us.dot.its.jpo.ode.model.OdeAsn1Payload538ffb5c-ce7d-438d-8727-8100c11f08b214202018-05-03T18:36:41.38Z[UTC]42018-05-03T17:54:14.206Z[UTC]OBUfalsebsmLogDuringEvent.csvbsmLogDuringEventsuccess40.4740068-104.96920331492.50.24246.3125rootIeee1609Dot2DataCOERunsecuredDataMessageFrameUPEREVMessageFrame20414B3AD21814206404740068-10496920331492519525465535121970512723000100002005700-14165-3670-294297433571-32917075150-130-142-38071129-634-7510170173-588-621156077-645-661257029-500-4213750-45-123-4315710-103-20-4316680-54198-3619130-193-2941922209-382-4672823300-390-3641824320-178-120-32624032767010100288002006004012810000020038191 \ No newline at end of file diff --git a/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_J2735-2016.json b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_J2735-2016.json new file mode 100644 index 000000000..de5fe041a --- /dev/null +++ b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_J2735-2016.json @@ -0,0 +1,15 @@ +{ + "startYear": "2024", + "startTime": "12:00", + "duratonTime": "30", + "sspTimRights": "value1", + "frameType": {}, + "msgId": {}, + "priority": "high", + "sspLocationRights": "value2", + "regions": {}, + "sspMsgContent": "value3", + "sspMsgTypes": "value4", + "tcontent": {}, + "url": "http://example.com" +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_J2735-2020.json b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_J2735-2020.json new file mode 100644 index 000000000..de5fe041a --- /dev/null +++ b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_J2735-2020.json @@ -0,0 +1,15 @@ +{ + "startYear": "2024", + "startTime": "12:00", + "duratonTime": "30", + "sspTimRights": "value1", + "frameType": {}, + "msgId": {}, + "priority": "high", + "sspLocationRights": "value2", + "regions": {}, + "sspMsgContent": "value3", + "sspMsgTypes": "value4", + "tcontent": {}, + "url": "http://example.com" +} \ No newline at end of file diff --git a/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_pre-J2735-2016.json b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_pre-J2735-2016.json new file mode 100644 index 000000000..de5fe041a --- /dev/null +++ b/jpo-ode-plugins/src/test/resources/us/dot/its/jpo/ode/plugin/j2735/timstorage/travelerDataFrame_pre-J2735-2016.json @@ -0,0 +1,15 @@ +{ + "startYear": "2024", + "startTime": "12:00", + "duratonTime": "30", + "sspTimRights": "value1", + "frameType": {}, + "msgId": {}, + "priority": "high", + "sspLocationRights": "value2", + "regions": {}, + "sspMsgContent": "value3", + "sspMsgTypes": "value4", + "tcontent": {}, + "url": "http://example.com" +} \ No newline at end of file diff --git a/jpo-ode-svcs/mvnw b/jpo-ode-svcs/mvnw old mode 100644 new mode 100755 diff --git a/jpo-ode-svcs/mvnw.cmd b/jpo-ode-svcs/mvnw.cmd old mode 100644 new mode 100755 diff --git a/jpo-ode-svcs/pom.xml b/jpo-ode-svcs/pom.xml index 9a10b40bd..898f799a1 100644 --- a/jpo-ode-svcs/pom.xml +++ b/jpo-ode-svcs/pom.xml @@ -4,7 +4,7 @@ usdot.jpo.ode jpo-ode - 3.0.0-SNAPSHOT + 4.0.0 jpo-ode-svcs jar @@ -41,20 +41,15 @@ org.springframework.boot spring-boot-starter-thymeleaf - - org.springframework.boot - spring-boot-devtools - runtime - org.springframework.boot spring-boot-starter-data-rest - + jakarta.xml.bind jakarta.xml.bind-api 4.0.0 - + org.springframework.boot spring-boot-starter-web @@ -73,6 +68,21 @@ org.springframework.boot spring-boot-starter-websocket + + org.springframework.kafka + spring-kafka + + + org.springframework.kafka + spring-kafka-test + test + + + org.awaitility + awaitility + 3.0.0 + test + org.webjars @@ -102,12 +112,12 @@ usdot.jpo.ode jpo-ode-core - 3.0.0-SNAPSHOT + 4.0.0 usdot.jpo.ode jpo-ode-plugins - 3.0.0-SNAPSHOT + 4.0.0 org.springframework @@ -117,7 +127,7 @@ org.snmp4j snmp4j 3.7.7 - + jakarta.annotation jakarta.annotation-api @@ -128,8 +138,12 @@ javax.annotation-api 1.3.2 - - + + com.networknt + json-schema-validator + 1.0.76 + test + ${project.artifactId} diff --git a/jpo-ode-svcs/run.bat b/jpo-ode-svcs/run.bat old mode 100644 new mode 100755 index 1f84da22c..7d64f5944 --- a/jpo-ode-svcs/run.bat +++ b/jpo-ode-svcs/run.bat @@ -1 +1 @@ -java -jar target\jpo-ode-svcs-3.0.0-SNAPSHOT.jar +java -jar target\jpo-ode-svcs-4.0.0.jar diff --git a/jpo-ode-svcs/run.sh b/jpo-ode-svcs/run.sh old mode 100644 new mode 100755 index 6c664e832..e5410310b --- a/jpo-ode-svcs/run.sh +++ b/jpo-ode-svcs/run.sh @@ -1,2 +1,2 @@ #!/bin/bash -java -jar target/jpo-ode-svcs-3.0.0-SNAPSHOT.jar +java -jar target/jpo-ode-svcs-4.0.0.jar diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java index 061b30700..2876498cf 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeProperties.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,927 +15,36 @@ ******************************************************************************/ package us.dot.its.jpo.ode; -import java.net.InetAddress; -import java.net.UnknownHostException; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.UUID; - import jakarta.annotation.PostConstruct; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.context.properties.ConfigurationProperties; +import lombok.Data; +import lombok.extern.slf4j.Slf4j; import org.springframework.boot.info.BuildProperties; -import org.springframework.context.EnvironmentAware; -import org.springframework.context.annotation.PropertySource; -import org.springframework.core.env.Environment; -import org.thymeleaf.util.StringUtils; - -import us.dot.its.jpo.ode.context.AppContext; -import us.dot.its.jpo.ode.eventlog.EventLogger; -import us.dot.its.jpo.ode.model.OdeMsgMetadata; -import us.dot.its.jpo.ode.plugin.OdePlugin; -import us.dot.its.jpo.ode.util.CommonUtils; - -@ConfigurationProperties("ode") -@PropertySource("classpath:application.properties") -public class OdeProperties implements EnvironmentAware { - - private static final Logger logger = LoggerFactory.getLogger(OdeProperties.class); - - @Autowired - private Environment env; - - /* - * General Properties - */ - private String version; - public static final int OUTPUT_SCHEMA_VERSION = 7; - private String pluginsLocations = "plugins"; - private String kafkaBrokers = null; - private static final String DEFAULT_KAFKA_PORT = "9092"; - private String kafkaProducerType = AppContext.DEFAULT_KAFKA_PRODUCER_TYPE; - private Boolean verboseJson = false; - private int importProcessorBufferSize = OdePlugin.INPUT_STREAM_BUFFER_SIZE; - private String hostId; - private List uploadLocations = new ArrayList<>(); - - /* - * RSU Properties - */ - private int rsuSrmSlots = 100; // number of "store and repeat message" indicies for RSU TIMs - private String rsuUsername = ""; - private String rsuPassword = ""; - - /* - * Security Services Module Properties - */ - private String securitySvcsSignatureUri; - private int securitySvcsPort = 8090; - private String securitySvcsSignatureEndpoint = "sign"; - - // File import properties - private String uploadLocationRoot = "uploads"; - private String uploadLocationObuLogLog = "bsmlog"; - private Integer fileWatcherPeriod = 5; // time to wait between processing inbox directory for new files - - /* - * UDP Properties - */ - private int trustRetries = 2; // if trust handshake fails, how many times to retry - private int messagesUntilTrustReestablished = 10; // renew trust session every x messages - - /* - * Kafka Topics - * - */ - private String[] kafkaTopicsDisabled = { - // disable all POJO topics by default except "topic.OdeBsmPojo". Never - // "topic.OdeBsmPojo because that's the only way to get data into - // "topic.OdeBsmJson - "topic.OdeBsmRxPojo", "topic.OdeBsmTxPojo", "topic.OdeBsmDuringEventPojo", "topic.OdeTimBroadcastPojo" }; - private Set kafkaTopicsDisabledSet = new HashSet<>(); - - // BSM - private String kafkaTopicOdeBsmPojo = "topic.OdeBsmPojo"; - private String kafkaTopicOdeBsmJson = "topic.OdeBsmJson"; - private String kafkaTopicOdeBsmRxPojo = "topic.OdeBsmRxPojo"; - private String kafkaTopicOdeBsmTxPojo = "topic.OdeBsmTxPojo"; - private String kafkaTopicOdeBsmDuringEventPojo = "topic.OdeBsmDuringEventPojo"; - private String kafkaTopicFilteredOdeBsmJson = "topic.FilteredOdeBsmJson"; - private String kafkaTopicOdeRawEncodedBSMJson = "topic.OdeRawEncodedBSMJson"; - private int bsmReceiverPort = 46800; - private int bsmBufferSize = 500; - - // TIM - private String kafkaTopicOdeTimJson = "topic.OdeTimJson"; - private String kafkaTopicOdeDNMsgJson = "topic.OdeDNMsgJson"; - private String kafkaTopicOdeTimRxJson = "topic.OdeTimRxJson"; - private String kafkaTopicOdeTimBroadcastPojo = "topic.OdeTimBroadcastPojo"; - private String kafkaTopicOdeTimBroadcastJson = "topic.OdeTimBroadcastJson"; - private String kafkaTopicJ2735TimBroadcastJson = "topic.J2735TimBroadcastJson"; - private String kafkaTopicFilteredOdeTimJson = "topic.FilteredOdeTimJson"; - private String kafkaTopicOdeRawEncodedTIMJson = "topic.OdeRawEncodedTIMJson"; - private int timReceiverPort = 47900; - private int timBufferSize = 500; - - //SPAT - private String kafkaTopicOdeSpatTxPojo = "topic.OdeSpatTxPojo"; - private String kafkaTopicOdeSpatPojo = "topic.OdeSpatPojo"; - private String kafkaTopicOdeSpatJson = "topic.OdeSpatJson"; - private String kafkaTopicOdeSpatRxPojo = "topic.OdeSpatRxPojo"; - private String kafkaTopicOdeSpatRxJson = "topic.OdeSpatRxJson"; - private String kafkaTopicFilteredOdeSpatJson = "topic.FilteredOdeSpatJson"; - private String kafkaTopicOdeRawEncodedSPATJson = "topic.OdeRawEncodedSPATJson"; - private int spatReceiverPort = 44910; - private int spatBufferSize = 500; - - //SSM - private String kafkaTopicOdeSsmPojo = "topic.OdeSsmPojo"; - private String kafkaTopicOdeSsmJson = "topic.OdeSsmJson"; - private String kafkaTopicOdeRawEncodedSSMJson = "topic.OdeRawEncodedSSMJson"; - private int ssmReceiverPort = 44900; - private int ssmBufferSize = 500; - - //SRM - private String kafkaTopicOdeSrmTxPojo = "topic.OdeSrmTxPojo"; - private String kafkaTopicOdeSrmJson = "topic.OdeSrmJson"; - private String kafkaTopicOdeRawEncodedSRMJson = "topic.OdeRawEncodedSRMJson"; - private int srmReceiverPort = 44930; - private int srmBufferSize = 500; - - //MAP - private String kafkaTopicOdeRawEncodedMAPJson = "topic.OdeRawEncodedMAPJson"; - private String kafkaTopicOdeMapTxPojo = "topic.OdeMapTxPojo"; - private String kafkaTopicOdeMapJson = "topic.OdeMapJson"; - private int mapReceiverPort = 44920; - private int mapBufferSize = 2048; - - // PSM - private String kafkaTopicOdeRawEncodedPSMJson = "topic.OdeRawEncodedPSMJson"; - private String kafkaTopicOdePsmTxPojo = "topic.OdePsmTxPojo"; - private String kafkaTopicOdePsmJson = "topic.OdePsmJson"; - private int psmReceiverPort = 44940; - private int psmBufferSize = 500; - - // Generic Receiver - private int genericReceiverPort = 44990; - private int genericBufferSize = 2000; - -// DriverAlerts - private String kafkaTopicDriverAlertJson = "topic.OdeDriverAlertJson"; - - // ASN.1 CODEC - private String kafkaTopicAsn1DecoderInput = "topic.Asn1DecoderInput"; - private String kafkaTopicAsn1DecoderOutput = "topic.Asn1DecoderOutput"; - private String kafkaTopicAsn1EncoderInput = "topic.Asn1EncoderInput"; - private String kafkaTopicAsn1EncoderOutput = "topic.Asn1EncoderOutput"; - - // SDX Depositor Module - private String kafkaTopicSdwDepositorInput = "topic.SDWDepositorInput"; - - //Signed Tim with expiration - private String kafkaTopicSignedOdeTimJsonExpiration = "topic.OdeTIMCertExpirationTimeJson"; - /* - * Security Properties - */ - private String caCertPath; - private String selfCertPath; - private String selfPrivateKeyReconstructionFilePath; - private String selfSigningPrivateKeyFilePath; - - private static final byte[] JPO_ODE_GROUP_ID = "jode".getBytes(); - - @Autowired - BuildProperties buildProperties; - - @PostConstruct - void initialize() { - setVersion(buildProperties.getVersion()); - logger.info("groupId: {}", buildProperties.getGroup()); - logger.info("artifactId: {}", buildProperties.getArtifact()); - logger.info("version: {}", version); - OdeMsgMetadata.setStaticSchemaVersion(OUTPUT_SCHEMA_VERSION); - - uploadLocations.add(Paths.get(uploadLocationRoot)); - - String hostname; - try { - hostname = InetAddress.getLocalHost().getHostName(); - } catch (UnknownHostException e) { - // Let's just use a random hostname - hostname = UUID.randomUUID().toString(); - logger.error("Unknown host error: {}, using random", e); - } - hostId = hostname; - logger.info("Host ID: {}", hostId); - EventLogger.logger.info("Initializing services on host {}", hostId); - - if (kafkaBrokers == null) { - - logger.warn("ode.kafkaBrokers property not defined. Will try DOCKER_HOST_IP => {}", kafkaBrokers); - - String dockerIp = CommonUtils.getEnvironmentVariable("DOCKER_HOST_IP"); - - if (dockerIp == null) { - logger.warn( - "Neither ode.kafkaBrokers ode property nor DOCKER_HOST_IP environment variable are defined. Defaulting to localhost."); - dockerIp = "localhost"; - } - kafkaBrokers = dockerIp + ":" + DEFAULT_KAFKA_PORT; - - // URI for the security services /sign endpoint - if (securitySvcsSignatureUri == null) { - securitySvcsSignatureUri = "http://" + dockerIp + ":" + securitySvcsPort + "/" - + securitySvcsSignatureEndpoint; - } - } - - List asList = Arrays.asList(this.getKafkaTopicsDisabled()); - logger.info("Disabled Topics: {}", asList); - kafkaTopicsDisabledSet.addAll(asList); - } - - - public String getVersion() { - return version; - } - - public void setVersion(String version) { - this.version = version; - } - - public List getUploadLocations() { - return this.uploadLocations; - } - - public String getProperty(String key) { - return env.getProperty(key); - } - - public String getProperty(String key, String defaultValue) { - return env.getProperty(key, defaultValue); - } - - public Object getProperty(String key, int i) { - return env.getProperty(key, Integer.class, i); - } - - public String getHostId() { - return hostId; - } - - public String getPluginsLocations() { - return pluginsLocations; - } - - public void setPluginsLocations(String pluginsLocations) { - this.pluginsLocations = pluginsLocations; - } - - public String getKafkaBrokers() { - return kafkaBrokers; - } - - public void setKafkaBrokers(String kafkaBrokers) { - this.kafkaBrokers = kafkaBrokers; - } - - public String getKafkaProducerType() { - return kafkaProducerType; - } - - public void setKafkaProducerType(String kafkaProducerType) { - this.kafkaProducerType = kafkaProducerType; - } - - public Environment getEnv() { - return env; - } - - public void setEnv(Environment env) { - this.env = env; - } - - @Override - public void setEnvironment(Environment environment) { - env = environment; - } - - public String getUploadLocationRoot() { - return uploadLocationRoot; - } - - public int getMessagesUntilTrustReestablished() { - return messagesUntilTrustReestablished; - } - - public void setMessagesUntilTrustReestablished(int messagesUntilTrustReestablished) { - this.messagesUntilTrustReestablished = messagesUntilTrustReestablished; - } - - public String getCaCertPath() { - return caCertPath; - } - - public void setCaCertPath(String caCertPath) { - this.caCertPath = caCertPath; - } - - public String getSelfCertPath() { - return selfCertPath; - } - - public void setSelfCertPath(String selfCertPath) { - this.selfCertPath = selfCertPath; - } - - public String getSelfPrivateKeyReconstructionFilePath() { - return selfPrivateKeyReconstructionFilePath; - } - - public void setSelfPrivateKeyReconstructionFilePath(String selfPrivateKeyReconstructionFilePath) { - this.selfPrivateKeyReconstructionFilePath = selfPrivateKeyReconstructionFilePath; - } - - public String getSelfSigningPrivateKeyFilePath() { - return selfSigningPrivateKeyFilePath; - } - - public void setSelfSigningPrivateKeyFilePath(String selfSigningPrivateKeyFilePath) { - this.selfSigningPrivateKeyFilePath = selfSigningPrivateKeyFilePath; - } - - public Boolean getVerboseJson() { - return verboseJson; - } - - public void setVerboseJson(Boolean verboseJson) { - this.verboseJson = verboseJson; - } - - public int getBsmReceiverPort() { - return bsmReceiverPort; - } - - public void setBsmReceiverPort(int bsmReceiverPort) { - this.bsmReceiverPort = bsmReceiverPort; - } - - public int getBsmBufferSize() { - return bsmBufferSize; - } - - public void setBsmBufferSize(int bsmBufferSize) { - this.bsmBufferSize = bsmBufferSize; - } - - public int getTimReceiverPort() { - return timReceiverPort; - } - - public void setTimReceiverPort(int timReceiverPort) { - this.timReceiverPort = timReceiverPort; - } - - public int getTimBufferSize() { - return timBufferSize; - } - - public void setTimBufferSize(int timBufferSize) { - this.timBufferSize = timBufferSize; - } - - public int getSsmReceiverPort() { - return ssmReceiverPort; - } - - public void setSsmReceiverPort(int ssmReceiverPort) { - this.ssmReceiverPort = ssmReceiverPort; - } - - public int getSsmBufferSize() { - return ssmBufferSize; - } - - public void setSsmBufferSize(int ssmBufferSize) { - this.ssmBufferSize = ssmBufferSize; - } - - public int getSrmReceiverPort() { - return srmReceiverPort; - } - - public void setSrmReceiverPort(int srmReceiverPort) { - this.srmReceiverPort = srmReceiverPort; - } - - public int getSrmBufferSize() { - return srmBufferSize; - } - - public void setSrmBufferSize(int srmBufferSize) { - this.srmBufferSize = srmBufferSize; - } - - public int getSpatReceiverPort() { - return spatReceiverPort; - } - - public void setSpatReceiverPort(int spatReceiverPort) { - this.spatReceiverPort = spatReceiverPort; - } - - public int getSpatBufferSize() { - return spatBufferSize; - } - - public void setSpatBufferSize(int spatBufferSize) { - this.spatBufferSize = spatBufferSize; - } - - public int getMapReceiverPort() { - return mapReceiverPort; - } - - public void setMapReceiverPort(int mapReceiverPort) { - this.mapReceiverPort = mapReceiverPort; - } - - public int getMapBufferSize() { - return mapBufferSize; - } - - public void setMapBufferSize(int mapBufferSize) { - this.mapBufferSize = mapBufferSize; - } - - public int getPsmReceiverPort() { - return psmReceiverPort; - } - - public void setPsmReceiverPort(int psmReceiverPort) { - this.psmReceiverPort = psmReceiverPort; - } - - public int getPsmBufferSize() { - return psmBufferSize; - } - - public void setPsmBufferSize(int psmBufferSize) { - this.psmBufferSize = psmBufferSize; - } - - public int getGenericReceiverPort() { - return genericReceiverPort; - } - - public void setGenericReceiverPort(int genericReceiverPort) { - this.genericReceiverPort = genericReceiverPort; - } - - public int getGenericBufferSize() { - return genericBufferSize; - } - - public void setGenericBufferSize(int psmBufferSize) { - this.genericBufferSize = genericBufferSize; - } - - public void setUploadLocationRoot(String uploadLocationRoot) { - this.uploadLocationRoot = uploadLocationRoot; - } - - public int getRsuSrmSlots() { - return rsuSrmSlots; - } - - public void setRsuSrmSlots(int rsuSrmSlots) { - this.rsuSrmSlots = rsuSrmSlots; - } - - public int getTrustRetries() { - return trustRetries; - } - - public void setTrustRetries(int trustRetries) { - this.trustRetries = trustRetries; - } - - public static byte[] getJpoOdeGroupId() { - return JPO_ODE_GROUP_ID; - } - - public int getImportProcessorBufferSize() { - return importProcessorBufferSize; - } - - public void setImportProcessorBufferSize(int importProcessorBufferSize) { - this.importProcessorBufferSize = importProcessorBufferSize; - } - - public String[] getKafkaTopicsDisabled() { - return kafkaTopicsDisabled; - } - - public void setKafkaTopicsDisabled(String[] kafkaTopicsDisabled) { - this.kafkaTopicsDisabled = kafkaTopicsDisabled; - } - - public Set getKafkaTopicsDisabledSet() { - return kafkaTopicsDisabledSet; - } - - public void setKafkaTopicsDisabledSet(Set kafkaTopicsDisabledSet) { - this.kafkaTopicsDisabledSet = kafkaTopicsDisabledSet; - } - - public String getKafkaTopicFilteredOdeBsmJson() { - return kafkaTopicFilteredOdeBsmJson; - } - - public void setKafkaTopicFilteredOdeBsmJson(String kafkaTopicFilteredOdeBsmJson) { - this.kafkaTopicFilteredOdeBsmJson = kafkaTopicFilteredOdeBsmJson; - } - - public String getKafkaTopicOdeBsmPojo() { - return kafkaTopicOdeBsmPojo; - } - - public void setKafkaTopicOdeBsmPojo(String kafkaTopicOdeBsmPojo) { - this.kafkaTopicOdeBsmPojo = kafkaTopicOdeBsmPojo; - } - - public String getKafkaTopicOdeBsmJson() { - return kafkaTopicOdeBsmJson; - } - - public void setKafkaTopicOdeBsmJson(String kafkaTopicOdeBsmJson) { - this.kafkaTopicOdeBsmJson = kafkaTopicOdeBsmJson; - } - - public String getKafkaTopicAsn1DecoderInput() { - return kafkaTopicAsn1DecoderInput; - } - - public void setKafkaTopicAsn1DecoderInput(String kafkaTopicAsn1DecoderInput) { - this.kafkaTopicAsn1DecoderInput = kafkaTopicAsn1DecoderInput; - } - - public String getKafkaTopicAsn1DecoderOutput() { - return kafkaTopicAsn1DecoderOutput; - } - - public void setKafkaTopicAsn1DecoderOutput(String kafkaTopicAsn1DecoderOutput) { - this.kafkaTopicAsn1DecoderOutput = kafkaTopicAsn1DecoderOutput; - } - - public String getKafkaTopicAsn1EncoderInput() { - return kafkaTopicAsn1EncoderInput; - } - - public void setKafkaTopicAsn1EncoderInput(String kafkaTopicAsn1EncoderInput) { - this.kafkaTopicAsn1EncoderInput = kafkaTopicAsn1EncoderInput; - } - - public String getKafkaTopicAsn1EncoderOutput() { - return kafkaTopicAsn1EncoderOutput; - } - - public void setKafkaTopicAsn1EncoderOutput(String kafkaTopicAsn1EncoderOutput) { - this.kafkaTopicAsn1EncoderOutput = kafkaTopicAsn1EncoderOutput; - } - - public String getKafkaTopicOdeDNMsgJson() { - return kafkaTopicOdeDNMsgJson; - } - - public void setKafkaTopicOdeDNMsgJson(String kafkaTopicOdeDNMsgJson) { - this.kafkaTopicOdeDNMsgJson = kafkaTopicOdeDNMsgJson; - } - - public String getKafkaTopicOdeTimJson() { - return kafkaTopicOdeTimJson; - } - - public void setKafkaTopicOdeTimJson(String kafkaTopicOdeTimJson) { - this.kafkaTopicOdeTimJson = kafkaTopicOdeTimJson; - } - - public String getUploadLocationObuLog() { - return uploadLocationObuLogLog; - } - - public void setUploadLocationObuLog(String uploadLocationObuLog) { - this.uploadLocationObuLogLog = uploadLocationObuLog; - } - - public String getKafkaTopicOdeBsmDuringEventPojo() { - return kafkaTopicOdeBsmDuringEventPojo; - } - - public void setKafkaTopicOdeBsmDuringEventPojo(String kafkaTopicOdeBsmDuringEventPojo) { - this.kafkaTopicOdeBsmDuringEventPojo = kafkaTopicOdeBsmDuringEventPojo; - } - - public String getKafkaTopicOdeBsmRxPojo() { - return kafkaTopicOdeBsmRxPojo; - } - - public void setKafkaTopicOdeBsmRxPojo(String kafkaTopicOdeBsmRxPojo) { - this.kafkaTopicOdeBsmRxPojo = kafkaTopicOdeBsmRxPojo; - } - - public String getKafkaTopicOdeBsmTxPojo() { - return kafkaTopicOdeBsmTxPojo; - } - - public void setKafkaTopicOdeBsmTxPojo(String kafkaTopicOdeBsmTxPojo) { - this.kafkaTopicOdeBsmTxPojo = kafkaTopicOdeBsmTxPojo; - } - - public String getKafkaTopicOdeTimRxJson() { - return kafkaTopicOdeTimRxJson; - } - - public void setKafkaTopicOdeTimRxJson(String kafkaTopicOdeTimRxJson) { - this.kafkaTopicOdeTimRxJson = kafkaTopicOdeTimRxJson; - } - - public String getKafkaTopicOdeTimBroadcastPojo() { - return kafkaTopicOdeTimBroadcastPojo; - } - - public void setKafkaTopicOdeTimBroadcastPojo(String kafkaTopicOdeTimBroadcastPojo) { - this.kafkaTopicOdeTimBroadcastPojo = kafkaTopicOdeTimBroadcastPojo; - } - - public String getKafkaTopicOdeTimBroadcastJson() { - return kafkaTopicOdeTimBroadcastJson; - } - - public void setKafkaTopicOdeTimBroadcastJson(String kafkaTopicOdeTimBroadcastJson) { - this.kafkaTopicOdeTimBroadcastJson = kafkaTopicOdeTimBroadcastJson; - } - - public String getKafkaTopicJ2735TimBroadcastJson() { - return kafkaTopicJ2735TimBroadcastJson; - } - - public void setKafkaTopicJ2735TimBroadcastJson(String kafkaTopicJ2735TimBroadcastJson) { - this.kafkaTopicJ2735TimBroadcastJson = kafkaTopicJ2735TimBroadcastJson; - } - - public String getKafkaTopicFilteredOdeTimJson() { - return kafkaTopicFilteredOdeTimJson; - } - - public void setKafkaTopicFilteredOdeTimJson(String kafkaTopicFilteredOdeTimJson) { - this.kafkaTopicFilteredOdeTimJson = kafkaTopicFilteredOdeTimJson; - } - - public String getKafkaTopicDriverAlertJson() { - return kafkaTopicDriverAlertJson; - } - - public void setKafkaTopicDriverAlertJson(String kafkaTopicDriverAlertJson) { - this.kafkaTopicDriverAlertJson = kafkaTopicDriverAlertJson; - } - - public Integer getFileWatcherPeriod() { - return fileWatcherPeriod; - } - - public void setFileWatcherPeriod(Integer fileWatcherPeriod) { - this.fileWatcherPeriod = fileWatcherPeriod; - } - - public String getSecuritySvcsSignatureUri() { - return securitySvcsSignatureUri; - } - - public void setSecuritySvcsSignatureUri(String securitySvcsSignatureUri) { - this.securitySvcsSignatureUri = securitySvcsSignatureUri; - } - - public String getRsuUsername() { - return rsuUsername; - } - - public void setRsuUsername(String rsuUsername) { - this.rsuUsername = rsuUsername; - } - - public String getRsuPassword() { - return rsuPassword; - } - - public void setRsuPassword(String rsuPassword) { - this.rsuPassword = rsuPassword; - } - - public String getKafkaTopicSdwDepositorInput() { - return kafkaTopicSdwDepositorInput; - } - - public void setKafkaTopicSdwDepositorInput(String kafkaTopicSdwDepositorInput) { - this.kafkaTopicSdwDepositorInput = kafkaTopicSdwDepositorInput; - } - - public String getKafkaTopicSignedOdeTimJsonExpiration() { - return kafkaTopicSignedOdeTimJsonExpiration; - } - public void setKafkaTopicSignedOdeTimJsonExpiration(String kafkaTopicSignedOdeTimJsonExpiration) { - this.kafkaTopicSignedOdeTimJsonExpiration = kafkaTopicSignedOdeTimJsonExpiration; - } - - public String getKafkaTopicOdeSpatTxPojo() { - return kafkaTopicOdeSpatTxPojo; - } - - - public void setKafkaTopicOdeSpatTxPojo(String kafkaTopicOdeSpatTxPojo) { - this.kafkaTopicOdeSpatTxPojo = kafkaTopicOdeSpatTxPojo; - } - - - public String getKafkaTopicOdeSpatPojo() { - return kafkaTopicOdeSpatPojo; - } - - - public void setKafkaTopicOdeSpatPojo(String kafkaTopicOdeSpatPojo) { - this.kafkaTopicOdeSpatPojo = kafkaTopicOdeSpatPojo; - } - - - public String getKafkaTopicOdeSpatJson() { - return kafkaTopicOdeSpatJson; - } - - - public void setKafkaTopicOdeSpatJson(String kafkaTopicOdeSpatJson) { - this.kafkaTopicOdeSpatJson = kafkaTopicOdeSpatJson; - } - - - public String getKafkaTopicOdeSpatRxPojo() { - return kafkaTopicOdeSpatRxPojo; - } - - - public void setKafkaTopicOdeSpatRxPojo(String kafkaTopicOdeSpatRxPojo) { - this.kafkaTopicOdeSpatRxPojo = kafkaTopicOdeSpatRxPojo; - } - - - public String getKafkaTopicOdeSpatRxJson() { - return kafkaTopicOdeSpatRxJson; - } - - - public void setKafkaTopicOdeSpatRxJson(String kafkaTopicOdeSpatRxJson) { - this.kafkaTopicOdeSpatRxJson = kafkaTopicOdeSpatRxJson; - } - - - public String getKafkaTopicFilteredOdeSpatJson() { - return kafkaTopicFilteredOdeSpatJson; - } - - - public void setKafkaTopicFilteredOdeSpatJson(String kafkaTopicFilteredOdeSpatJson) { - this.kafkaTopicFilteredOdeSpatJson = kafkaTopicFilteredOdeSpatJson; - } - - - public String getKafkaTopicOdeRawEncodedBSMJson() { - return kafkaTopicOdeRawEncodedBSMJson; - } - - - public void setKafkaTopicOdeRawEncodedBSMJson(String kafkaTopicOdeRawEncodedBSMJson) { - this.kafkaTopicOdeRawEncodedBSMJson = kafkaTopicOdeRawEncodedBSMJson; - } - - - public String getKafkaTopicOdeRawEncodedTIMJson() { - return kafkaTopicOdeRawEncodedTIMJson; - } - - - public void setKafkaTopicOdeRawEncodedTIMJson(String kafkaTopicOdeRawEncodedTIMJson) { - this.kafkaTopicOdeRawEncodedTIMJson = kafkaTopicOdeRawEncodedTIMJson; - } - - - public String getKafkaTopicOdeRawEncodedSPATJson() { - return kafkaTopicOdeRawEncodedSPATJson; - } - - - public void setKafkaTopicOdeRawEncodedSPATJson(String kafkaTopicOdeRawEncodedSPATJson) { - this.kafkaTopicOdeRawEncodedSPATJson = kafkaTopicOdeRawEncodedSPATJson; - } - - public String getKafkaTopicOdeRawEncodedMAPJson() { - return kafkaTopicOdeRawEncodedMAPJson; - } - - public void setKafkaTopicOdeRawEncodedMAPJson(String kafkaTopicOdeRawEncodedMAPJson) { - this.kafkaTopicOdeRawEncodedMAPJson = kafkaTopicOdeRawEncodedMAPJson; - } - - - public String getKafkaTopicOdeMapTxPojo() { - return kafkaTopicOdeMapTxPojo; - } - - - public void setKafkaTopicOdeMapTxPojo(String kafkaTopicOdeMapTxPojo) { - this.kafkaTopicOdeMapTxPojo = kafkaTopicOdeMapTxPojo; - } - - - public String getKafkaTopicOdeMapJson() { - return kafkaTopicOdeMapJson; - } - - - public void setKafkaTopicOdeMapJson(String kafkaTopicOdeMapJson) { - this.kafkaTopicOdeMapJson = kafkaTopicOdeMapJson; - } - - public String getKafkaTopicOdeRawEncodedPSMJson() { - return kafkaTopicOdeRawEncodedPSMJson; - } - - public void setKafkaTopicOdeRawEncodedPSMJson(String kafkaTopicOdeRawEncodedPSMJson) { - this.kafkaTopicOdeRawEncodedPSMJson = kafkaTopicOdeRawEncodedPSMJson; - } - - - public String getKafkaTopicOdePsmTxPojo() { - return kafkaTopicOdePsmTxPojo; - } - - - public void setKafkaTopicOdePsmTxPojo(String kafkaTopicOdePsmTxPojo) { - this.kafkaTopicOdePsmTxPojo = kafkaTopicOdePsmTxPojo; - } - - - public String getKafkaTopicOdePsmJson() { - return kafkaTopicOdePsmJson; - } - - - public void setKafkaTopicOdePsmJson(String kafkaTopicOdePsmJson) { - this.kafkaTopicOdePsmJson = kafkaTopicOdePsmJson; - } - - public String getKafkaTopicOdeRawEncodedSSMJson() { - return kafkaTopicOdeRawEncodedSSMJson; - } - - public void setKafkaTopicOdeRawEncodedSSMJson(String kafkaTopicOdeRawEncodedSSMJson) { - this.kafkaTopicOdeRawEncodedSSMJson = kafkaTopicOdeRawEncodedSSMJson; - } - - - public String getKafkaTopicOdeSsmPojo() { - return kafkaTopicOdeSsmPojo; - } - - - public void setKafkaTopicOdeSsmPojo(String kafkaTopicOdeSsmPojo) { - this.kafkaTopicOdeSsmPojo = kafkaTopicOdeSsmPojo; - } - - - public String getKafkaTopicOdeSsmJson() { - return kafkaTopicOdeSsmJson; - } - - - public void setKafkaTopicOdeSsmJson(String kafkaTopicOdeSsmJson) { - this.kafkaTopicOdeSsmJson = kafkaTopicOdeSsmJson; - } - - public String getKafkaTopicOdeRawEncodedSRMJson() { - return kafkaTopicOdeRawEncodedSRMJson; - } - - public void setKafkaTopicOdeRawEncodedSRMJson(String kafkaTopicOdeRawEncodedSRMJson) { - this.kafkaTopicOdeRawEncodedSRMJson = kafkaTopicOdeRawEncodedSRMJson; - } - +import org.springframework.context.annotation.Import; +import org.springframework.stereotype.Component; - public String getKafkaTopicOdeSrmTxPojo() { - return kafkaTopicOdeSrmTxPojo; - } +@Component +@Data +@Slf4j +@Import(BuildProperties.class) +public class OdeProperties { - public void setKafkaTopicOdeSrmTxPojo(String kafkaTopicOdeSrmTxPojo) { - this.kafkaTopicOdeSrmTxPojo = kafkaTopicOdeSrmTxPojo; - } + private static final byte[] JPO_ODE_GROUP_ID = "jode".getBytes(); + final BuildProperties buildProperties; - public String getKafkaTopicOdeSrmJson() { - return kafkaTopicOdeSrmJson; - } + public OdeProperties(BuildProperties buildProperties) { + this.buildProperties = buildProperties; + } + @PostConstruct + void initialize() { + log.info("groupId: {}", buildProperties.getGroup()); + log.info("artifactId: {}", buildProperties.getArtifact()); + log.info("version: {}", buildProperties.getVersion()); + } - public void setKafkaTopicOdeSrmJson(String kafkaTopicOdeSrmJson) { - this.kafkaTopicOdeSrmJson = kafkaTopicOdeSrmJson; - } - + public String getVersion() { + return buildProperties.getVersion(); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeSvcsApplication.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeSvcsApplication.java index a6c45ad5f..f16003ae2 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeSvcsApplication.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeSvcsApplication.java @@ -41,7 +41,7 @@ import org.springframework.context.annotation.Bean; @SpringBootApplication -@EnableConfigurationProperties(OdeProperties.class) +@EnableConfigurationProperties public class OdeSvcsApplication { static final int DEFAULT_NO_THREADS = 10; diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeTimJsonTopology.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeTimJsonTopology.java new file mode 100644 index 000000000..6c6e2b1c0 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/OdeTimJsonTopology.java @@ -0,0 +1,88 @@ +package us.dot.its.jpo.ode; + +import java.util.Properties; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.common.serialization.Serdes; +import org.apache.kafka.streams.KafkaStreams; +import org.apache.kafka.streams.StoreQueryParameters; +import org.apache.kafka.streams.StreamsBuilder; +import org.apache.kafka.streams.StreamsConfig; +import org.apache.kafka.streams.Topology; +import org.apache.kafka.streams.kstream.Materialized; +import org.apache.kafka.streams.state.QueryableStoreTypes; +import org.apache.kafka.streams.state.Stores; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; + + +/** + * The OdeTimJsonTopology class sets up and manages a Kafka Streams topology + * for processing TIM (Traveler Information Message) JSON data from the + * OdeTimJson Kafka topic. + * This class creates a K-Table that houses TMC-generated TIMs which can be + * queried by UUID. + **/ +@Slf4j +public class OdeTimJsonTopology { + + private final KafkaStreams streams; + + /** + * Constructs an instance of OdeTimJsonTopology to set up and manage a Kafka Streams + * topology for processing TIM JSON data. + * + * @param odeKafkaProps the properties containing Kafka configuration, including brokers + * and optional Confluent-specific configuration for authentication. + * @param topic the Kafka topic from which TIM JSON data is consumed to build the topology. + */ + public OdeTimJsonTopology(OdeKafkaProperties odeKafkaProps, String topic) { + + Properties streamsProperties = new Properties(); + streamsProperties.put(StreamsConfig.APPLICATION_ID_CONFIG, "KeyedOdeTimJson"); + streamsProperties.put(StreamsConfig.BOOTSTRAP_SERVERS_CONFIG, odeKafkaProps.getBrokers()); + streamsProperties.put(StreamsConfig.DEFAULT_KEY_SERDE_CLASS_CONFIG, Serdes.StringSerde.class); + streamsProperties.put(StreamsConfig.DEFAULT_VALUE_SERDE_CLASS_CONFIG, Serdes.StringSerde.class); + + if ("CONFLUENT".equals(odeKafkaProps.getKafkaType())) { + streamsProperties.putAll(odeKafkaProps.getConfluent().buildConfluentProperties()); + } + streams = new KafkaStreams(buildTopology(topic), streamsProperties); + streams.setStateListener((newState, oldState) -> + log.info("Transitioning from {} to {}", oldState, newState) + ); + streams.start(); + } + + public void stop() { + log.info("Stopping Ode Tim Json Topology"); + streams.close(); + } + + public boolean isRunning() { + return streams.state().isRunningOrRebalancing(); + } + + /** + * Builds a Kafka Streams topology for processing TIM JSON data. + * + * @param topic the Kafka topic from which TIM JSON data is consumed and used + * to build the topology. + * @return the constructed Kafka Streams topology. + */ + public Topology buildTopology(String topic) { + StreamsBuilder builder = new StreamsBuilder(); + builder.table(topic, + Materialized.as(Stores.inMemoryKeyValueStore("timjson-store"))); + return builder.build(); + } + + /** + * Query the K-Table by a specified UUID. + * + * @param uuid The specified UUID to query for. + **/ + public String query(String uuid) { + return (String) streams.store( + StoreQueryParameters.fromNameAndType("timjson-store", QueryableStoreTypes.keyValueStore())) + .get(uuid); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/SerializableMessageProducerPool.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/SerializableMessageProducerPool.java index 12692de23..980c29fbc 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/SerializableMessageProducerPool.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/SerializableMessageProducerPool.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,108 +15,64 @@ ******************************************************************************/ package us.dot.its.jpo.ode; -import java.util.Properties; - +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.util.SerializableObjectPool; import us.dot.its.jpo.ode.wrapper.MessageProducer; -public class SerializableMessageProducerPool extends SerializableObjectPool> { - - private static final long serialVersionUID = -2293786403623236678L; - - transient OdeProperties odeProperties; - - private String brokers; - private String type; - private String partitionerClass; - - private Properties props; - - public SerializableMessageProducerPool(OdeProperties odeProperties) { - super(); - this.odeProperties = odeProperties; - this.brokers = odeProperties.getKafkaBrokers(); - this.type = odeProperties.getKafkaProducerType(); - this.partitionerClass = odeProperties.getProperty("kafka.partitionerClass"); - init(); - } - - public SerializableMessageProducerPool init() { - props = new Properties(); - props.put("acks", odeProperties.getProperty("kafka.producer.ack", MessageProducer.DEFAULT_PRODUCER_ACKS)); // Set - // acknowledgments - // for - // producer - // requests. - props.put("retries", - odeProperties.getProperty("kafka.producer.retries", MessageProducer.DEFAULT_PRODUCER_RETRIES)); // If - // the - // request - // fails, - // the - // producer - // can - // automatically retry - props.put("batch.size", - odeProperties.getProperty("kafka.producer.batch.size", MessageProducer.DEFAULT_PRODUCER_BATCH_SIZE_BYTES)); - props.put("linger.ms", - odeProperties.getProperty("kafka.producer.linger.ms", MessageProducer.DEFAULT_PRODUCER_LINGER_MS)); - props.put("buffer.memory", odeProperties.getProperty("kafka.producer.buffer.memory", - MessageProducer.DEFAULT_PRODUCER_BUFFER_MEMORY_BYTES)); - props.put("key.serializer", - odeProperties.getProperty("kafka.key.serializer", MessageProducer.SERIALIZATION_STRING_SERIALIZER)); - props.put("value.serializer", - odeProperties.getProperty("kafka.value.serializer", MessageProducer.SERIALIZATION_BYTE_ARRAY_SERIALIZER)); - - return this; - } - - @Override - protected MessageProducer create() { - return new MessageProducer<>(brokers, type, partitionerClass, props, - odeProperties.getKafkaTopicsDisabledSet()); - } - - @Override - public boolean validate(MessageProducer o) { - return o.getProducer() != null; - } - - @Override - public void expire(MessageProducer o) { - o.close(); - } - - public String getBrokers() { - return brokers; - } - - public void setBrokers(String brokers) { - this.brokers = brokers; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public Properties getProps() { - return props; - } - - public void setProps(Properties props) { - this.props = props; - } - - public String getPartitionerClass() { - return partitionerClass; - } +import java.io.Serial; +import java.util.Properties; - public void setPartitionerClass(String partitionerClass) { - this.partitionerClass = partitionerClass; - } +public class SerializableMessageProducerPool extends SerializableObjectPool> { + @Serial + private static final long serialVersionUID = -2293786403623236678L; + + transient OdeKafkaProperties odeKafkaProperties; + + private final String brokers; + private final String type; + private final String partitionerClass; + + private Properties props; + + public SerializableMessageProducerPool(OdeKafkaProperties odeKafkaProperties) { + super(); + this.odeKafkaProperties = odeKafkaProperties; + this.brokers = odeKafkaProperties.getBrokers(); + this.type = odeKafkaProperties.getKafkaType(); + this.partitionerClass = odeKafkaProperties.getProducer().getPartitionerClass(); + init(); + } + + protected SerializableMessageProducerPool init() { + props = new Properties(); + // Set acknowledgments for producer requests. + props.put("acks", odeKafkaProperties.getProducer().getAcks()); + // If the request fails, the producer can automatically retry + props.put("retries", odeKafkaProperties.getProducer().getRetries()); + props.put("batch.size", odeKafkaProperties.getProducer().getBatchSize()); + props.put("linger.ms", odeKafkaProperties.getProducer().getLingerMs()); + props.put("buffer.memory", odeKafkaProperties.getProducer().getBufferMemory()); + props.put("key.serializer", odeKafkaProperties.getProducer().getKeySerializer()); + props.put("value.serializer", odeKafkaProperties.getProducer().getValueSerializer()); + props.put("kafka.producer.compression_type", odeKafkaProperties.getProducer().getCompressionType()); + + return this; + } + + @Override + protected MessageProducer create() { + return new MessageProducer<>(brokers, type, partitionerClass, props, + odeKafkaProperties.getDisabledTopics()); + } + + @Override + public boolean validate(MessageProducer o) { + return o.getProducer() != null; + } + + @Override + public void expire(MessageProducer o) { + o.close(); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/ByteArrayPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/ByteArrayPublisher.java index 29dd242e5..c2e0f8cb0 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/ByteArrayPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/ByteArrayPublisher.java @@ -15,27 +15,24 @@ ******************************************************************************/ package us.dot.its.jpo.ode.coder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.OdeProperties; +import lombok.extern.slf4j.Slf4j; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.wrapper.MessageProducer; -public class ByteArrayPublisher extends MessagePublisher { +@Slf4j +public class ByteArrayPublisher implements MessagePublisher { - private static final Logger logger = LoggerFactory.getLogger(ByteArrayPublisher.class); protected MessageProducer bytesProducer; - public ByteArrayPublisher(OdeProperties odeProps) { - super(odeProps); + public ByteArrayPublisher(OdeKafkaProperties odeKafkaProperties) { this.bytesProducer = MessageProducer.defaultByteArrayMessageProducer( - odeProperties.getKafkaBrokers(), odeProperties.getKafkaProducerType(), - odeProperties.getKafkaTopicsDisabledSet()); + odeKafkaProperties.getBrokers(), odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); } - public void publish(byte[] msg, String topic) { - logger.debug("Publishing binary data to {}", topic); + public void publish(String topic, byte[] msg) { + log.debug("Publishing binary data to {}", topic); bytesProducer.send(topic, null, msg); } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/FileAsn1CodecPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/FileAsn1CodecPublisher.java index dcd3da77d..3823c6047 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/FileAsn1CodecPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/FileAsn1CodecPublisher.java @@ -15,20 +15,20 @@ ******************************************************************************/ package us.dot.its.jpo.ode.coder; -import java.io.BufferedInputStream; -import java.nio.file.Path; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.OdeProperties; +import lombok.extern.slf4j.Slf4j; import us.dot.its.jpo.ode.coder.stream.LogFileToAsn1CodecPublisher; import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher.ImporterFileType; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import java.io.BufferedInputStream; +import java.nio.file.Path; + +@Slf4j public class FileAsn1CodecPublisher { - public class FileAsn1CodecPublisherException extends Exception { + public static class FileAsn1CodecPublisherException extends Exception { private static final long serialVersionUID = 1L; @@ -38,26 +38,24 @@ public FileAsn1CodecPublisherException(String string, Exception e) { } - private static final Logger logger = LoggerFactory.getLogger(FileAsn1CodecPublisher.class); - - private LogFileToAsn1CodecPublisher codecPublisher; - - @Autowired - public FileAsn1CodecPublisher(OdeProperties odeProperties) { + private final LogFileToAsn1CodecPublisher codecPublisher; - StringPublisher messagePub = new StringPublisher(odeProperties); + public FileAsn1CodecPublisher(OdeKafkaProperties odeKafkaProperties, JsonTopics jsonTopics, RawEncodedJsonTopics rawEncodedJsonTopics) { + StringPublisher messagePub = new StringPublisher(odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); - this.codecPublisher = new LogFileToAsn1CodecPublisher(messagePub); + this.codecPublisher = new LogFileToAsn1CodecPublisher(messagePub, jsonTopics, rawEncodedJsonTopics); } public void publishFile(Path filePath, BufferedInputStream fileInputStream, ImporterFileType fileType) throws FileAsn1CodecPublisherException { String fileName = filePath.toFile().getName(); - logger.info("Publishing file {}", fileName); + log.info("Publishing file {}", fileName); try { - logger.info("Publishing data from {} to asn1_codec.", filePath); + log.info("Publishing data from {} to asn1_codec.", filePath); codecPublisher.publish(fileInputStream, fileName, fileType); } catch (Exception e) { throw new FileAsn1CodecPublisherException("Failed to publish file.", e); diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/MessagePublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/MessagePublisher.java index 2dbee2afd..b49d96485 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/MessagePublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/MessagePublisher.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,23 +15,6 @@ ******************************************************************************/ package us.dot.its.jpo.ode.coder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.OdeProperties; - -public abstract class MessagePublisher { - - private final Logger logger = LoggerFactory.getLogger(this.getClass()); - - protected OdeProperties odeProperties; - - public MessagePublisher(OdeProperties odeProps) { - this.odeProperties = odeProps; - logger.info("Using Brokers: {} of Type: {}", odeProperties.getKafkaBrokers(), odeProperties.getKafkaProducerType()); - } - - public OdeProperties getOdeProperties() { - return odeProperties; - } +public interface MessagePublisher { + void publish(String topic, T message); } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeDataPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeDataPublisher.java index 1cea2e251..8e5687075 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeDataPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeDataPublisher.java @@ -15,29 +15,28 @@ ******************************************************************************/ package us.dot.its.jpo.ode.coder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.model.OdeData; import us.dot.its.jpo.ode.model.OdeObject; import us.dot.its.jpo.ode.wrapper.MessageProducer; -public class OdeDataPublisher extends MessagePublisher { +import java.util.Set; + +@Slf4j +public class OdeDataPublisher implements MessagePublisher { - private static final Logger logger = LoggerFactory.getLogger(OdeDataPublisher.class); protected MessageProducer objectProducer; - public OdeDataPublisher(OdeProperties odeProps, String serializer) { - super(odeProps); - this.objectProducer = new MessageProducer<>(odeProperties.getKafkaBrokers(), - odeProperties.getKafkaProducerType(), + public OdeDataPublisher(String producerType, String brokers, Set disabledTopics, String serializer) { + this.objectProducer = new MessageProducer<>(brokers, + producerType, null, serializer, - odeProperties.getKafkaTopicsDisabledSet()); + disabledTopics); } - public void publish(OdeData msg, String topic) { - logger.debug("Publishing to {}: {}", topic, msg); + public void publish(String topic, OdeData msg) { + log.debug("Publishing to {}: {}", topic, msg); objectProducer.send(topic, null, msg); } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeStringPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeStringPublisher.java index 612c8f3a5..c11e2446a 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeStringPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeStringPublisher.java @@ -15,29 +15,28 @@ ******************************************************************************/ package us.dot.its.jpo.ode.coder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.model.OdeData; import us.dot.its.jpo.ode.wrapper.MessageProducer; -public class OdeStringPublisher extends MessagePublisher { +import java.util.Set; + +@Slf4j +public class OdeStringPublisher implements MessagePublisher { - private static final Logger logger = LoggerFactory.getLogger(OdeDataPublisher.class); protected MessageProducer stringProducer; - public OdeStringPublisher(OdeProperties odeProps) { - super(odeProps); + public OdeStringPublisher(String brokers, String producerType, Set disabledTopics) { this.stringProducer = MessageProducer.defaultStringMessageProducer( - odeProperties.getKafkaBrokers(), - odeProperties.getKafkaProducerType(), - odeProperties.getKafkaTopicsDisabledSet()); + brokers, + producerType, + disabledTopics); } - public void publish(OdeData msg, String topic) { - logger.debug("Publishing to {}: {}", topic, msg); + public void publish(String topic, OdeData msg) { + log.debug("Publishing to {}: {}", topic, msg); stringProducer.send(topic, null, msg.toJson()); } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelper.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelper.java new file mode 100644 index 000000000..0eddd3a73 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelper.java @@ -0,0 +1,85 @@ +package us.dot.its.jpo.ode.coder; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ObjectNode; + +import lombok.extern.slf4j.Slf4j; + +import us.dot.its.jpo.ode.context.AppContext; +import us.dot.its.jpo.ode.model.OdeMsgMetadata; +import us.dot.its.jpo.ode.model.OdeTimData; +import us.dot.its.jpo.ode.model.OdeTimMetadata; +import us.dot.its.jpo.ode.model.OdeTimPayload; +import us.dot.its.jpo.ode.model.ReceivedMessageDetails; +import us.dot.its.jpo.ode.model.RxSource; +import us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation; +import us.dot.its.jpo.ode.util.JsonUtils; +import us.dot.its.jpo.ode.util.XmlUtils; +import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; + +/** + * Helper class for deserializing TIM messages in XML/XER format into POJOs. + */ +@Slf4j +public class OdeTimDataCreatorHelper { + + /** + * Deserializes XML/XER from the UDP decoded pipeline. + * + * @param consumedData The XML/XER as a String. + */ + public static OdeTimData createOdeTimDataFromDecoded(String consumedData) + throws XmlUtilsException { + ObjectNode consumed = XmlUtils.toObjectNode(consumedData); + + JsonNode metadataNode = consumed.findValue(AppContext.METADATA_STRING); + if (metadataNode instanceof ObjectNode) { + ObjectNode object = (ObjectNode) metadataNode; + object.remove(AppContext.ENCODINGS_STRING); + + // Map header file does not have a location and use predefined set required + // RxSource + ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); + receivedMessageDetails.setRxSource(RxSource.NA); + ObjectMapper objectMapper = new ObjectMapper(); + JsonNode jsonNode; + try { + jsonNode = objectMapper.readTree(receivedMessageDetails.toJson()); + object.set(AppContext.RECEIVEDMSGDETAILS_STRING, jsonNode); + } catch (Exception e) { + log.error("Failed to read JSON node: {}", e.getMessage()); + } + } + + OdeTimMetadata metadata = (OdeTimMetadata) JsonUtils.fromJson(metadataNode.toString(), + OdeTimMetadata.class); + + if (metadata != null && metadata.getSchemaVersion() <= 4) { + metadata.setReceivedMessageDetails(null); + } + + String travelerInformationXml = XmlUtils.findXmlContentString(consumedData, + "TravelerInformation"); + TravelerInformation timObject = (TravelerInformation) XmlUtils.fromXmlS(travelerInformationXml, + TravelerInformation.class); + OdeTimPayload payload = new OdeTimPayload(timObject); + return new OdeTimData(metadata, payload); + } + + /** + * Deserializes XML/XER from the TIM creator endpoint. + * + * @param consumedData The XML/XER as a String. + * @param metadata The pre-built ODE metadata object with unique TIM creator data. + */ + public static OdeTimData createOdeTimDataFromCreator(String consumedData, OdeMsgMetadata metadata) + throws XmlUtilsException { + String travelerInformationXml = XmlUtils.findXmlContentString(consumedData, + "TravelerInformation"); + TravelerInformation timObject = (TravelerInformation) XmlUtils.fromXmlS(travelerInformationXml, + TravelerInformation.class); + OdeTimPayload payload = new OdeTimPayload(timObject); + return new OdeTimData(metadata, payload); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/StringPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/StringPublisher.java index d91142775..57cc8d50c 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/StringPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/StringPublisher.java @@ -15,28 +15,26 @@ ******************************************************************************/ package us.dot.its.jpo.ode.coder; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.OdeProperties; +import lombok.extern.slf4j.Slf4j; import us.dot.its.jpo.ode.wrapper.MessageProducer; -public class StringPublisher extends MessagePublisher { - - private static final Logger logger = LoggerFactory.getLogger(StringPublisher.class); - protected MessageProducer stringProducer; +import java.util.Set; - public StringPublisher(OdeProperties odeProps) { - super(odeProps); - this.stringProducer = MessageProducer.defaultStringMessageProducer( - odeProperties.getKafkaBrokers(), odeProperties.getKafkaProducerType(), - odeProperties.getKafkaTopicsDisabledSet()); +@Slf4j +public class StringPublisher implements MessagePublisher { - } + protected MessageProducer stringProducer; - public void publish(String msg, String topic) { - logger.debug("Publishing String data to {}", topic); - stringProducer.send(topic, null, msg); - } + public StringPublisher(String broker, String producerType, Set disabledTopics) { + this.stringProducer = MessageProducer.defaultStringMessageProducer( + broker, + producerType, + disabledTopics + ); + } + public void publish(String topic, String msg) { + log.debug("Publishing String data to {}", topic); + stringProducer.send(topic, null, msg); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/FileImporterProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/FileImporterProperties.java new file mode 100644 index 000000000..03855ebae --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/FileImporterProperties.java @@ -0,0 +1,17 @@ +package us.dot.its.jpo.ode.coder.stream; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "ode.file-importer") +@Data +public class FileImporterProperties { + private int bufferSize; + private String backupDir; + private String failedDir; + private int timePeriod; + private String uploadLocationRoot; + private String obuLogUploadLocation; +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisher.java index 9420748f2..0e570ef62 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisher.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,195 +15,160 @@ ******************************************************************************/ package us.dot.its.jpo.ode.coder.stream; -import java.io.BufferedInputStream; -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.core.JsonProcessingException; - +import lombok.extern.slf4j.Slf4j; import us.dot.its.jpo.ode.coder.StringPublisher; import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher.ImporterFileType; -import us.dot.its.jpo.ode.importer.parser.BsmLogFileParser; -import us.dot.its.jpo.ode.importer.parser.DriverAlertFileParser; +import us.dot.its.jpo.ode.importer.parser.*; import us.dot.its.jpo.ode.importer.parser.FileParser.ParserStatus; -import us.dot.its.jpo.ode.importer.parser.LogFileParser; -import us.dot.its.jpo.ode.importer.parser.RxMsgFileParser; -import us.dot.its.jpo.ode.importer.parser.SpatLogFileParser; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeBsmMetadata; -import us.dot.its.jpo.ode.model.OdeData; -import us.dot.its.jpo.ode.model.OdeDriverAlertData; -import us.dot.its.jpo.ode.model.OdeDriverAlertPayload; -import us.dot.its.jpo.ode.model.OdeLogMetadata; -import us.dot.its.jpo.ode.model.OdeMsgPayload; -import us.dot.its.jpo.ode.model.OdeSpatMetadata; -import us.dot.its.jpo.ode.model.RxSource; -import us.dot.its.jpo.ode.model.SerialId; -import us.dot.its.jpo.ode.util.JsonUtils; -import us.dot.its.jpo.ode.util.XmlUtils; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.model.*; import us.dot.its.jpo.ode.uper.UperUtil; +import us.dot.its.jpo.ode.util.JsonUtils; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +@Slf4j public class LogFileToAsn1CodecPublisher implements Asn1CodecPublisher { - public static class LogFileToAsn1CodecPublisherException extends Exception { - - private static final long serialVersionUID = 1L; - - public LogFileToAsn1CodecPublisherException(String string, Exception e) { - super(string, e); - } - - } - - protected static final Logger logger = LoggerFactory.getLogger(LogFileToAsn1CodecPublisher.class); - - protected StringPublisher publisher; - protected LogFileParser fileParser; - protected SerialId serialId; - - public LogFileToAsn1CodecPublisher(StringPublisher dataPub) { - this.publisher = dataPub; - this.serialId = new SerialId(); - } - - public List publish(BufferedInputStream bis, String fileName, ImporterFileType fileType) - throws LogFileToAsn1CodecPublisherException { - XmlUtils xmlUtils = new XmlUtils(); - ParserStatus status; - - List dataList = new ArrayList<>(); - if (fileType == ImporterFileType.LOG_FILE) { - fileParser = LogFileParser.factory(fileName); - - do { - try { - status = fileParser.parseFile(bis, fileName); - if (status == ParserStatus.COMPLETE) { - addDataToList(dataList); - } else if (status == ParserStatus.EOF) { - publishList(xmlUtils, dataList); - } else if (status == ParserStatus.INIT) { - logger.error("Failed to parse the header bytes."); - } else { - logger.error("Failed to decode ASN.1 data"); - } - bis = removeNextNewLineCharacter(bis); - } catch (Exception e) { - throw new LogFileToAsn1CodecPublisherException("Error parsing or publishing data.", e); - } - } while (status == ParserStatus.COMPLETE); - } - - return dataList; - } - - private void addDataToList(List dataList) { - - OdeData odeData; - - OdeMsgPayload payload; - OdeLogMetadata metadata; - if (isDriverAlertRecord()) { - payload = new OdeDriverAlertPayload(((DriverAlertFileParser) fileParser).getAlert()); - metadata = new OdeLogMetadata(payload); - odeData = new OdeDriverAlertData(metadata, payload); - } else if (isBsmRecord()) { - payload = new OdeAsn1Payload(fileParser.getPayloadParser().getPayload()); - metadata = new OdeBsmMetadata(payload); - odeData = new OdeAsn1Data(metadata, payload); - } else if (isSpatRecord()) { - payload = new OdeAsn1Payload(fileParser.getPayloadParser().getPayload()); - metadata = new OdeSpatMetadata(payload); - odeData = new OdeAsn1Data(metadata, payload); - } else { - payload = new OdeAsn1Payload(fileParser.getPayloadParser().getPayload()); - metadata = new OdeLogMetadata(payload); - odeData = new OdeAsn1Data(metadata, payload); - } - fileParser.updateMetadata(metadata); - - dataList.add(odeData); - } - - public boolean isDriverAlertRecord() { - return fileParser instanceof DriverAlertFileParser; - } - - public boolean isBsmRecord() { - return fileParser instanceof BsmLogFileParser || (fileParser instanceof RxMsgFileParser - && ((RxMsgFileParser) fileParser).getRxSource() == RxSource.RV); - } - - public boolean isSpatRecord() { - return fileParser instanceof SpatLogFileParser; - } - - private void publishList(XmlUtils xmlUtils, List dataList) throws JsonProcessingException { - serialId.setBundleSize(dataList.size()); - - for (OdeData odeData : dataList) { - OdeLogMetadata msgMetadata = (OdeLogMetadata) odeData.getMetadata(); - OdeMsgPayload msgPayload = (OdeMsgPayload) odeData.getPayload(); - msgMetadata.setSerialId(serialId); - - if (isDriverAlertRecord()) { - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicDriverAlertJson()); - } else if (isBsmRecord()) { - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicOdeRawEncodedBSMJson()); - } else if (isSpatRecord()) { - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); - } else { - // Determine the message type (MAP, TIM, SSM, SRM, or PSM) - String messageType = UperUtil.determineMessageType(msgPayload); - if (messageType.equals("MAP")) { - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); - } else if(messageType.equals("SPAT")){ - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); - } else if (messageType.equals("TIM")) { - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); - } else if (messageType.equals("BSM")) { - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicOdeRawEncodedBSMJson()); - } else if (messageType.equals("SSM")) { - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSSMJson()); - } else if (messageType.equals("SRM")) { - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSRMJson()); - } else if (messageType.equals("PSM")) { - publisher.publish(JsonUtils.toJson(odeData, false), - publisher.getOdeProperties().getKafkaTopicOdeRawEncodedPSMJson()); - } - } - - serialId.increment(); - } - } - - // This method will check if the next character is a newline character (0x0A in hex or 10 in converted decimal) - // or if the next character does not contain a newline character it will put that character back into the buffered input stream - public BufferedInputStream removeNextNewLineCharacter(BufferedInputStream bis) { - try { - bis.mark(1); - int nextByte = bis.read(); - if (nextByte != 10) { // If the next byte is not a newline - bis.reset(); // Reset the stream back to the most recent mark - } - } catch (IOException e) { - e.printStackTrace(); - } - return bis; - } + public static class LogFileToAsn1CodecPublisherException extends Exception { + + private static final long serialVersionUID = 1L; + + public LogFileToAsn1CodecPublisherException(String string, Exception e) { + super(string, e); + } + + } + + private final RawEncodedJsonTopics rawEncodedJsonTopics; + private final JsonTopics jsonTopics; + protected StringPublisher publisher; + protected LogFileParser fileParser; + protected SerialId serialId; + + public LogFileToAsn1CodecPublisher(StringPublisher stringPublisher, JsonTopics jsonTopics, RawEncodedJsonTopics rawEncodedJsonTopics) { + this.jsonTopics = jsonTopics; + this.rawEncodedJsonTopics = rawEncodedJsonTopics; + this.publisher = stringPublisher; + this.serialId = new SerialId(); + } + + public List publish(BufferedInputStream inputStream, String fileName, ImporterFileType fileType) + throws LogFileToAsn1CodecPublisherException { + ParserStatus status; + + List dataList = new ArrayList<>(); + if (fileType == ImporterFileType.LOG_FILE) { + fileParser = LogFileParser.factory(fileName); + + do { + try { + status = fileParser.parseFile(inputStream, fileName); + switch (status) { + case ParserStatus.COMPLETE -> addDataToList(dataList); + case ParserStatus.EOF -> publishList(dataList); + case ParserStatus.INIT -> log.error("Failed to parse the header bytes."); + default -> log.error("Failed to decode ASN.1 data"); + } + inputStream = removeNextNewLineCharacter(inputStream); + } catch (Exception e) { + throw new LogFileToAsn1CodecPublisherException("Error parsing or publishing data.", e); + } + } while (status == ParserStatus.COMPLETE); + } + + return dataList; + } + + private void addDataToList(List dataList) { + + OdeData odeData; + + OdeMsgPayload payload; + OdeLogMetadata metadata; + if (isDriverAlertRecord()) { + payload = new OdeDriverAlertPayload(((DriverAlertFileParser) fileParser).getAlert()); + metadata = new OdeLogMetadata(payload); + odeData = new OdeDriverAlertData(metadata, payload); + } else if (isBsmRecord()) { + payload = new OdeAsn1Payload(fileParser.getPayloadParser().getPayload()); + metadata = new OdeBsmMetadata(payload); + odeData = new OdeAsn1Data(metadata, payload); + } else if (isSpatRecord()) { + payload = new OdeAsn1Payload(fileParser.getPayloadParser().getPayload()); + metadata = new OdeSpatMetadata(payload); + odeData = new OdeAsn1Data(metadata, payload); + } else { + payload = new OdeAsn1Payload(fileParser.getPayloadParser().getPayload()); + metadata = new OdeLogMetadata(payload); + odeData = new OdeAsn1Data(metadata, payload); + } + fileParser.updateMetadata(metadata); + + dataList.add(odeData); + } + + public boolean isDriverAlertRecord() { + return fileParser instanceof DriverAlertFileParser; + } + + public boolean isBsmRecord() { + return fileParser instanceof BsmLogFileParser || (fileParser instanceof RxMsgFileParser + && ((RxMsgFileParser) fileParser).getRxSource() == RxSource.RV); + } + + public boolean isSpatRecord() { + return fileParser instanceof SpatLogFileParser; + } + + private void publishList(List dataList) { + serialId.setBundleSize(dataList.size()); + + for (OdeData odeData : dataList) { + OdeLogMetadata msgMetadata = (OdeLogMetadata) odeData.getMetadata(); + OdeMsgPayload msgPayload = odeData.getPayload(); + msgMetadata.setSerialId(serialId); + + if (isDriverAlertRecord()) { + publisher.publish(jsonTopics.getDriverAlert(), JsonUtils.toJson(odeData, false)); + } else if (isBsmRecord()) { + publisher.publish(rawEncodedJsonTopics.getBsm(), JsonUtils.toJson(odeData, false)); + } else if (isSpatRecord()) { + publisher.publish(rawEncodedJsonTopics.getSpat(), JsonUtils.toJson(odeData, false)); + } else { + String messageType = UperUtil.determineMessageType(msgPayload); + switch (messageType) { + case "MAP" -> publisher.publish(rawEncodedJsonTopics.getMap(), JsonUtils.toJson(odeData, false)); + case "SPAT" -> publisher.publish(rawEncodedJsonTopics.getSpat(), JsonUtils.toJson(odeData, false)); + case "TIM" -> publisher.publish(rawEncodedJsonTopics.getTim(), JsonUtils.toJson(odeData, false)); + case "BSM" -> publisher.publish(rawEncodedJsonTopics.getBsm(), JsonUtils.toJson(odeData, false)); + case "SSM" -> publisher.publish(rawEncodedJsonTopics.getSsm(), JsonUtils.toJson(odeData, false)); + case "SRM" -> publisher.publish(rawEncodedJsonTopics.getSrm(), JsonUtils.toJson(odeData, false)); + case "PSM" -> publisher.publish(rawEncodedJsonTopics.getPsm(), JsonUtils.toJson(odeData, false)); + default -> log.warn("Unknown message type: {}", messageType); + } + } + + serialId.increment(); + } + } + + // This method will check if the next character is a newline character (0x0A in hex or 10 in converted decimal) + // or if the next character does not contain a newline character it will put that character back into the buffered input stream + public BufferedInputStream removeNextNewLineCharacter(BufferedInputStream bis) { + try { + bis.mark(1); + int nextByte = bis.read(); + if (nextByte != 10) { // If the next byte is not a newline + bis.reset(); // Reset the stream back to the most recent mark + } + } catch (IOException e) { + log.error("Error removing next newline character: ", e); + } + return bis; + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/CustomConversionServiceConfig.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/CustomConversionServiceConfig.java new file mode 100644 index 000000000..b929cb243 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/CustomConversionServiceConfig.java @@ -0,0 +1,24 @@ +package us.dot.its.jpo.ode.config; + +import org.springframework.boot.context.properties.ConfigurationPropertiesBinding; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.convert.converter.Converter; +import org.springframework.core.convert.support.DefaultConversionService; + +@Configuration +public class CustomConversionServiceConfig { + + @Bean + @ConfigurationPropertiesBinding + public Converter stringToIntegerConverter() { + return new StringToIntegerConverter(); + } + + @Bean + public DefaultConversionService conversionService() { + DefaultConversionService conversionService = new DefaultConversionService(); + conversionService.addConverter(stringToIntegerConverter()); + return conversionService; + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/SerializationConfig.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/SerializationConfig.java new file mode 100644 index 000000000..563a1fa38 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/SerializationConfig.java @@ -0,0 +1,58 @@ +package us.dot.its.jpo.ode.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.cfg.CoercionAction; +import com.fasterxml.jackson.databind.cfg.CoercionInputShape; +import com.fasterxml.jackson.databind.type.LogicalType; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import com.fasterxml.jackson.dataformat.xml.XmlMapper.Builder; +import java.math.BigDecimal; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +/** + * Configuration class for customizing serialization settings using JSON and XML serialization. + */ +@Configuration +public class SerializationConfig { + + /** + * Configures and returns an {@link ObjectMapper} instance customized for specific serialization + * and deserialization behavior. + * + * @return a customized {@link ObjectMapper} instance supporting specific serialization and + * deserialization configurations. + */ + @Bean + @Primary + public ObjectMapper objectMapper() { + ObjectMapper mapper = new ObjectMapper(); + mapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY); + mapper.coercionConfigFor(LogicalType.Enum) + .setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsNull); + // Ensure BigDecimals are serialized consistently as numbers not strings + mapper.configOverride(BigDecimal.class).setFormat(JsonFormat.Value.forShape(JsonFormat.Shape.NUMBER)); + return mapper; + } + + /** + * Configures and returns an {@link XmlMapper} instance with customized serialization + * and deserialization behavior for XML processing. + * + * @return a customized {@link XmlMapper} instance with specific configurations, + * including disabled failure on unknown properties and default use of wrappers. + */ + @Bean + public XmlMapper xmlMapper() { + XmlMapper xmlMapper = new XmlMapper(); + var builder = new Builder(xmlMapper); + builder.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + builder.defaultUseWrapper(true); + return builder.build(); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/StringToIntegerConverter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/StringToIntegerConverter.java new file mode 100644 index 000000000..5452902c5 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/config/StringToIntegerConverter.java @@ -0,0 +1,18 @@ +package us.dot.its.jpo.ode.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.convert.converter.Converter; + +@Slf4j +public class StringToIntegerConverter implements Converter { + @Override + public Integer convert(String source) { + try { + return Integer.valueOf(source); + } catch (NumberFormatException e) { + // Handle the case where the source is not a valid integer + log.warn("Invalid integer value: {}. The default value will be used instead.", source); + return null; + } + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/exporter/StompStringExporter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/exporter/StompStringExporter.java index 0269fe2ec..ba4eb04bd 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/exporter/StompStringExporter.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/exporter/StompStringExporter.java @@ -16,7 +16,7 @@ package us.dot.its.jpo.ode.exporter; import org.springframework.messaging.simp.SimpMessagingTemplate; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.context.AppContext; import us.dot.its.jpo.ode.wrapper.MessageConsumer; /** @@ -24,25 +24,25 @@ */ public class StompStringExporter extends Exporter{ - private OdeProperties odeProperties; - private SimpMessagingTemplate template; - private String odeTopic; + private final SimpMessagingTemplate template; + private final String odeTopic; + private final String brokers; public StompStringExporter( - OdeProperties odeProperties, String stompTopic, SimpMessagingTemplate template, - String odeTopic) { + String odeTopic, + String brokers) { super(stompTopic); - this.odeProperties = odeProperties; + this.brokers = brokers; this.template = template; this.odeTopic = odeTopic; } @Override protected void subscribe() { - setConsumer(MessageConsumer.defaultStringMessageConsumer(odeProperties.getKafkaBrokers(), - odeProperties.getHostId() + this.getClass().getSimpleName(), + setConsumer(MessageConsumer.defaultStringMessageConsumer(this.brokers, + AppContext.getInstance().getHostId() + this.getClass().getSimpleName(), new StompStringMessageDistributor(template, getTopic()))); getConsumer().setName(this.getClass().getSimpleName()); diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcher.java index 40194c430..bb68152ed 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcher.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,87 +15,96 @@ ******************************************************************************/ package us.dot.its.jpo.ode.importer; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import us.dot.its.jpo.ode.coder.FileAsn1CodecPublisher; +import us.dot.its.jpo.ode.coder.stream.FileImporterProperties; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; + import java.io.IOException; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.OdeProperties; - +@Slf4j public class ImporterDirectoryWatcher implements Runnable { - - public enum ImporterFileType { - LOG_FILE, JSON_FILE - } - - private static final Logger logger = LoggerFactory.getLogger(ImporterDirectoryWatcher.class); - - private boolean watching; - - private ImporterProcessor importerProcessor; - - private Path inbox; - private Path backup; - private Path failed; - - private ScheduledExecutorService executor; - - private Integer timePeriod; - - public ImporterDirectoryWatcher(OdeProperties odeProperties, Path dir, Path backupDir, Path failureDir, ImporterFileType fileType, Integer timePeriod) { - this.inbox = dir; - this.backup = backupDir; - this.failed = failureDir; - this.watching = true; - this.timePeriod = timePeriod; - - try { - OdeFileUtils.createDirectoryRecursively(inbox); - String msg = "Created directory {}"; - logger.debug(msg, inbox); - OdeFileUtils.createDirectoryRecursively(failed); - logger.debug(msg, failed); - OdeFileUtils.createDirectoryRecursively(backup); - logger.debug(msg, backup); - } catch (IOException e) { - logger.error("Error creating directory: " + inbox, e); - } - - this.importerProcessor = new ImporterProcessor(odeProperties, fileType); - - executor = Executors.newScheduledThreadPool(1); - } - - @Override - public void run() { - - logger.info("Processing inbox directory {} every {} seconds.", inbox, timePeriod); - - // ODE-646: the old method of watching the directory used file - // event notifications and was unreliable for large quantities of files - // Watch directory for file events - executor.scheduleWithFixedDelay(() -> importerProcessor.processDirectory(inbox, backup, failed), - 0, timePeriod, TimeUnit.SECONDS); - - try { - // This line will only execute in the event that .scheduleWithFixedDelay() throws an error - executor.awaitTermination(timePeriod, TimeUnit.SECONDS); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - logger.error("Directory watcher polling loop interrupted!", e); - } - } - - public boolean isWatching() { - return watching; - } - - public void setWatching(boolean watching) { - this.watching = watching; - } + public enum ImporterFileType { + LOG_FILE, JSON_FILE + } + + @Setter + @Getter + private boolean watching; + + private final ImporterProcessor importerProcessor; + private final FileImporterProperties props; + private final ScheduledExecutorService executor; + private final Path inboxPath; + private final Path backupPath; + private final Path failuresPath; + + public ImporterDirectoryWatcher(FileImporterProperties fileImporterProperties, + OdeKafkaProperties odeKafkaProperties, + JsonTopics jsonTopics, + ImporterFileType fileType, + RawEncodedJsonTopics rawEncodedJsonTopics) { + this.props = fileImporterProperties; + this.watching = true; + + this.inboxPath = Paths.get(fileImporterProperties.getUploadLocationRoot(), fileImporterProperties.getObuLogUploadLocation()); + log.debug("UPLOADER - BSM log file upload directory: {}", inboxPath); + + this.failuresPath = Paths.get(fileImporterProperties.getUploadLocationRoot(), fileImporterProperties.getFailedDir()); + log.debug("UPLOADER - Failure directory: {}", failuresPath); + + this.backupPath = Paths.get(fileImporterProperties.getUploadLocationRoot(), fileImporterProperties.getBackupDir()); + log.debug("UPLOADER - Backup directory: {}", backupPath); + + try { + String msg = "Created directory {}"; + + OdeFileUtils.createDirectoryRecursively(inboxPath); + log.debug(msg, inboxPath); + + OdeFileUtils.createDirectoryRecursively(failuresPath); + log.debug(msg, failuresPath); + + OdeFileUtils.createDirectoryRecursively(backupPath); + log.debug(msg, backupPath); + } catch (IOException e) { + log.error("Error creating directory", e); + } + + this.importerProcessor = new ImporterProcessor(new FileAsn1CodecPublisher(odeKafkaProperties, jsonTopics, rawEncodedJsonTopics), + fileType, + fileImporterProperties.getBufferSize()); + + executor = Executors.newScheduledThreadPool(1); + } + + @Override + public void run() { + + log.info("Processing inbox directory {} every {} seconds.", inboxPath, props.getTimePeriod()); + + // ODE-646: the old method of watching the directory used file + // event notifications and was unreliable for large quantities of files + // Watch directory for file events + executor.scheduleWithFixedDelay(() -> importerProcessor.processDirectory(inboxPath, backupPath, failuresPath), + 0, props.getTimePeriod(), TimeUnit.SECONDS); + + try { + // This line will only execute in the event that .scheduleWithFixedDelay() throws an error + executor.awaitTermination(props.getTimePeriod(), TimeUnit.SECONDS); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + log.error("Directory watcher polling loop interrupted!", e); + } + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/ImporterProcessor.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/ImporterProcessor.java index 647bc326e..dcdd79a07 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/ImporterProcessor.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/importer/ImporterProcessor.java @@ -26,27 +26,25 @@ import java.util.zip.GZIPInputStream; import java.util.zip.ZipInputStream; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.coder.FileAsn1CodecPublisher; import us.dot.its.jpo.ode.coder.FileAsn1CodecPublisher.FileAsn1CodecPublisherException; import us.dot.its.jpo.ode.eventlog.EventLogger; import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher.ImporterFileType; +@Slf4j public class ImporterProcessor { - private static final Logger logger = LoggerFactory.getLogger(ImporterProcessor.class); - private FileAsn1CodecPublisher codecPublisher; - private OdeProperties odeProperties; - private ImporterFileType fileType; - private Pattern gZipPattern = Pattern.compile("application/.*gzip"); - private Pattern zipPattern = Pattern.compile("application/.*zip.*"); + private final int bufferSize; + private final FileAsn1CodecPublisher codecPublisher; + private final ImporterFileType fileType; + private final Pattern gZipPattern = Pattern.compile("application/.*gzip"); + private final Pattern zipPattern = Pattern.compile("application/.*zip.*"); - public ImporterProcessor(OdeProperties odeProperties, ImporterFileType fileType) { - this.codecPublisher = new FileAsn1CodecPublisher(odeProperties); - this.odeProperties = odeProperties; + public ImporterProcessor(FileAsn1CodecPublisher publisher, ImporterFileType fileType, int bufferSize) { + this.codecPublisher = publisher; + this.bufferSize = bufferSize; this.fileType = fileType; } @@ -59,14 +57,14 @@ public int processDirectory(Path dir, Path backupDir, Path failureDir) { if (entry.toFile().isDirectory()) { processDirectory(entry, backupDir, failureDir); } else { - logger.debug("Found a file to process: {}", entry.getFileName()); + log.debug("Found a file to process: {}", entry.getFileName()); processAndBackupFile(entry, backupDir, failureDir); count++; } } } catch (Exception e) { - logger.error("Error processing files.", e); + log.error("Error processing files.", e); } return count; } @@ -82,24 +80,24 @@ public void processAndBackupFile(Path filePath, Path backupDir, Path failureDir) inputStream = new FileInputStream(filePath.toFile()); String probeContentType = Files.probeContentType(filePath); if ((probeContentType != null && gZipPattern.matcher(probeContentType).matches()) || filePath.toString().toLowerCase().endsWith("gz")) { - logger.info("Treating as gzip file"); + log.info("Treating as gzip file"); inputStream = new GZIPInputStream(inputStream); bis = publishFile(filePath, inputStream); } else if ((probeContentType != null && zipPattern.matcher(probeContentType).matches()) || filePath.toString().endsWith("zip")) { - logger.info("Treating as zip file"); + log.info("Treating as zip file"); inputStream = new ZipInputStream(inputStream); ZipInputStream zis = (ZipInputStream)inputStream; while (zis.getNextEntry() != null) { bis = publishFile(filePath, inputStream); } } else { - logger.info("Treating as unknown file"); + log.info("Treating as unknown file"); bis = publishFile(filePath, inputStream); } } catch (Exception e) { success = false; - logger.error("Failed to open or process file: " + filePath, e); - EventLogger.logger.error("Failed to open or process file: " + filePath, e); + log.error("Failed to open or process file: {}", filePath, e); + EventLogger.logger.error("Failed to open or process file: {}", filePath, e); } finally { try { if (bis != null) { @@ -109,29 +107,29 @@ public void processAndBackupFile(Path filePath, Path backupDir, Path failureDir) inputStream.close(); } } catch (IOException e) { - logger.error("Failed to close file stream: {}", e); + log.error("Failed to close file stream:", e); } } try { if (success) { OdeFileUtils.backupFile(filePath, backupDir); - logger.info("File moved to backup: {}", backupDir); + log.info("File moved to backup: {}", backupDir); EventLogger.logger.info("File moved to backup: {}", backupDir); } else { OdeFileUtils.moveFile(filePath, failureDir); - logger.info("File moved to failure directory: {}", failureDir); + log.info("File moved to failure directory: {}", failureDir); EventLogger.logger.info("File moved to failure directory: {}", failureDir); } } catch (IOException e) { - logger.error("Unable to backup file: " + filePath, e); + log.error("Unable to backup file: {}", filePath, e); } } private BufferedInputStream publishFile(Path filePath, InputStream inputStream) throws FileAsn1CodecPublisherException { BufferedInputStream bis; - bis = new BufferedInputStream(inputStream, odeProperties.getImportProcessorBufferSize()); + bis = new BufferedInputStream(inputStream, this.bufferSize); codecPublisher.publishFile(filePath, bis, fileType); return bis; } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/ConfluentProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/ConfluentProperties.java new file mode 100644 index 000000000..2ab451934 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/ConfluentProperties.java @@ -0,0 +1,43 @@ +package us.dot.its.jpo.ode.kafka; + +import java.util.HashMap; +import java.util.Map; +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +/** + * A configuration properties class that holds configuration settings for Confluent Kafka + * integration. This class is designed to be used with Spring Boot's configuration properties + * mechanism, allowing for easy externalization and injection of property values. + * + *

This class provides a method to build a map of Confluent-specific Kafka properties, which + * includes authentication settings necessary for connecting to a Confluent-managed Kafka cluster. + */ +@Configuration +@ConfigurationProperties(prefix = "ode.kafka.confluent") +@Data +public class ConfluentProperties { + + private String username; + private String password; + + /** + * Builds and returns a map of configuration properties specific to Confluent Kafka integration. + * These properties include security configurations necessary for authentication with a + * Confluent-managed Kafka cluster using SASL_SSL and PLAIN mechanisms. + * + * @return a map containing Confluent Kafka properties with security protocol and SASL + * configurations including username and password. + */ + public Map buildConfluentProperties() { + Map props = new HashMap<>(); + props.put("ssl.endpoint.identification.algorithm", "https"); + props.put("security.protocol", "SASL_SSL"); + props.put("sasl.mechanism", "PLAIN"); + props.put("sasl.jaas.config", + "org.apache.kafka.common.security.plain.PlainLoginModule required " + "username=\"" + + username + "\" " + "password=\"" + password + "\";"); + return props; + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/KafkaConsumerConfig.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/KafkaConsumerConfig.java new file mode 100644 index 000000000..66d81bb9e --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/KafkaConsumerConfig.java @@ -0,0 +1,115 @@ +package us.dot.its.jpo.ode.kafka; + +import java.util.HashMap; +import java.util.Map; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; +import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory; +import org.springframework.kafka.core.ConsumerFactory; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.support.serializer.JsonDeserializer; +import us.dot.its.jpo.ode.model.OdeMapData; + +/** + * Configures Kafka consumer settings and provides various consumer factories and listener container + * factories for handling different types of data in a Kafka messaging system. This class sets up + * the consumer properties, including any security configurations for Confluent deployments, and + * provides mechanisms to filter messages based on specific criteria. + */ +@EnableKafka +@Configuration +@Slf4j +public class KafkaConsumerConfig { + + private final KafkaProperties kafkaProperties; + private final OdeKafkaProperties odeKafkaProperties; + + /** + * Constructs a new instance of KafkaConsumerConfig with the specified Kafka properties. + * + * @param kafkaProperties The general Kafka properties used for configuring consumer settings. + * @param odeKafkaProperties The specific Ode Kafka properties which may include custom + * configurations relevant to the Ode system, possibly including + * brokers and other kafka-specific settings. + */ + public KafkaConsumerConfig(KafkaProperties kafkaProperties, + OdeKafkaProperties odeKafkaProperties) { + this.kafkaProperties = kafkaProperties; + this.odeKafkaProperties = odeKafkaProperties; + } + + /** + * Creates and configures a {@link ConsumerFactory} for Kafka consumers with String key and + * value deserialization. The factory is configured using Kafka consumer properties defined + * in the application configuration. + * + * @return a {@link ConsumerFactory} instance configured to produce Kafka consumers with + * String key and value serialization. + */ + @Bean + public ConsumerFactory consumerFactory() { + return new DefaultKafkaConsumerFactory<>(getKafkaConsumerProperties()); + } + + /** + * Creates and configures a ConcurrentKafkaListenerContainerFactory for Kafka listeners. This + * factory is responsible for creating listener containers, which are used to receive messages + * from Kafka topics. + * + * @return a ConcurrentKafkaListenerContainerFactory setup with a defined consumer factory that + * determines how Kafka consumers are created and configured. + */ + @Bean + public ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory() { + ConcurrentKafkaListenerContainerFactory factory = + new ConcurrentKafkaListenerContainerFactory<>(); + factory.setConsumerFactory(consumerFactory()); + return factory; + } + + /** + * Creates a Kafka {@link ConsumerFactory} for consuming messages with keys of type {@link String} + * and values of type {@link OdeMapData}. This method utilizes a {@link StringDeserializer} for + * deserializing the key and a {@link JsonDeserializer} for deserializing values of type + * {@link OdeMapData}. + * + *

The consumer factory is configured using Kafka properties, which are retrieved from the + * application's configuration settings. + * + * @return a configured {@link ConsumerFactory} for {@link String} keys and {@link OdeMapData} + * values. + */ + @Bean + public ConsumerFactory odeMapDataConsumerFactory() { + return new DefaultKafkaConsumerFactory<>(getKafkaConsumerProperties(), new StringDeserializer(), + new JsonDeserializer<>(OdeMapData.class)); + } + + /** + * Creates and configures a ConcurrentKafkaListenerContainerFactory for consuming Kafka messages + * with keys of type String and values of type OdeMapData. The factory is configured with a + * consumer factory provided by the odeMapDataConsumerFactory method. + * + * @return a configured ConcurrentKafkaListenerContainerFactory instance for processing Kafka + * messages with keys of type String and values of type OdeMapData. + */ + @Bean + public ConcurrentKafkaListenerContainerFactory odeMapDataConsumerListenerContainerFactory() { + ConcurrentKafkaListenerContainerFactory factory = + new ConcurrentKafkaListenerContainerFactory<>(); + factory.setConsumerFactory(odeMapDataConsumerFactory()); + return factory; + } + + private Map getKafkaConsumerProperties() { + Map props = new HashMap<>(kafkaProperties.buildConsumerProperties()); + if ("CONFLUENT".equals(this.odeKafkaProperties.getKafkaType())) { + props.putAll(this.odeKafkaProperties.getConfluent().buildConfluentProperties()); + } + return props; + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/OdeKafkaProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/OdeKafkaProperties.java new file mode 100644 index 000000000..0e7225d83 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/OdeKafkaProperties.java @@ -0,0 +1,35 @@ +package us.dot.its.jpo.ode.kafka; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.validation.annotation.Validated; +import us.dot.its.jpo.ode.wrapper.MessageProducer; + +import java.util.Set; + +@Configuration +@ConfigurationProperties(prefix = "ode.kafka") +@Data +@Validated(value = OdeKafkaPropertiesValidator.class) +public class OdeKafkaProperties { + private String brokers; + private Set disabledTopics; + private Producer producer; + private String kafkaType = ""; + private ConfluentProperties confluent; + + @Data + public static class Producer { + private Integer batchSize = MessageProducer.DEFAULT_PRODUCER_BATCH_SIZE_BYTES; + private Integer bufferMemory = MessageProducer.DEFAULT_PRODUCER_BUFFER_MEMORY_BYTES; + private Integer lingerMs = MessageProducer.DEFAULT_PRODUCER_LINGER_MS; + private Integer retries = MessageProducer.DEFAULT_PRODUCER_RETRIES; + private String acks = MessageProducer.DEFAULT_PRODUCER_ACKS; + private String keySerializer = MessageProducer.SERIALIZATION_STRING_SERIALIZER; + private String valueSerializer = MessageProducer.SERIALIZATION_BYTE_ARRAY_SERIALIZER; + private String compressionType = MessageProducer.COMPRESSION_TYPE; + private String partitionerClass = "org.apache.kafka.clients.producer.internals.DefaultPartitioner"; + private String type = "sync"; + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/OdeKafkaPropertiesValidator.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/OdeKafkaPropertiesValidator.java new file mode 100644 index 000000000..01bbcb866 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/OdeKafkaPropertiesValidator.java @@ -0,0 +1,47 @@ +package us.dot.its.jpo.ode.kafka; + +import org.springframework.validation.Validator; + +import java.util.List; + +public class OdeKafkaPropertiesValidator implements Validator { + + private static final List VALID_ACKS = List.of("all", "0", "1", "-1"); + private static final List VALID_KAFKA_TYPES = List.of("", "CONFLUENT"); + + @Override + public boolean supports(Class clazz) { + return OdeKafkaProperties.class.equals(clazz); + } + + @Override + public void validate(Object target, org.springframework.validation.Errors errors) { + OdeKafkaProperties properties = (OdeKafkaProperties) target; + + if (!VALID_ACKS.contains(properties.getProducer().getAcks())) { + errors.rejectValue("producer.acks", "acks value must be one of: " + VALID_ACKS); + } + + if (properties.getBrokers() == null || properties.getBrokers().isEmpty()) { + errors.rejectValue("brokers", "brokers must be set"); + } else { + if (!properties.getBrokers().contains(":")) { + errors.rejectValue("brokers", "broker must be in the format host:port"); + } + } + + if (!VALID_KAFKA_TYPES.contains(properties.getKafkaType())) { + errors.rejectValue("kafkaType", "type value must be one of: " + VALID_KAFKA_TYPES); + } + + if ("CONFLUENT".equals(properties.getKafkaType())) { + ConfluentProperties confluent = properties.getConfluent(); + if (confluent.getPassword() == null) { + errors.rejectValue("confluent.password", "when kafka-type is set to CONFLUENT the password must be set"); + } + if (confluent.getUsername() == null) { + errors.rejectValue("confluent.username", "when kafka-type is set to CONFLUENT the username must be set"); + } + } + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/XMLOdeObjectSerializer.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/XMLOdeObjectSerializer.java new file mode 100644 index 000000000..573c9981a --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/XMLOdeObjectSerializer.java @@ -0,0 +1,34 @@ +package us.dot.its.jpo.ode.kafka; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import org.apache.kafka.common.errors.SerializationException; +import org.apache.kafka.common.serialization.Serializer; +import us.dot.its.jpo.ode.model.OdeObject; + +/** + * A serializer implementation that converts {@link OdeObject} instances into XML byte arrays using + * the Jackson XmlMapper. This class is intended for use in scenarios where objects need to be + * serialized into XML format for transmission or storage. + */ +public class XMLOdeObjectSerializer implements Serializer { + + private final XmlMapper xmlMapper; + + public XMLOdeObjectSerializer(XmlMapper xmlMapper) { + this.xmlMapper = xmlMapper; + } + + @Override + public byte[] serialize(String s, OdeObject data) { + try { + if (data == null) { + return new byte[0]; + } else { + return xmlMapper.writeValueAsBytes(data); + } + } catch (JsonProcessingException e) { + throw new SerializationException("Error when serializing object to XML byte[]", e); + } + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java new file mode 100644 index 000000000..72fa6d839 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/Asn1DecodedDataRouter.java @@ -0,0 +1,189 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.json.JSONObject; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import us.dot.its.jpo.ode.coder.OdeBsmDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdeMapDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdePsmDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdeSpatDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdeSrmDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdeSsmDataCreatorHelper; +import us.dot.its.jpo.ode.coder.OdeTimDataCreatorHelper; +import us.dot.its.jpo.ode.context.AppContext; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.topics.PojoTopics; +import us.dot.its.jpo.ode.model.OdeAsn1Data; +import us.dot.its.jpo.ode.model.OdeBsmData; +import us.dot.its.jpo.ode.model.OdeLogMetadata; +import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; +import us.dot.its.jpo.ode.plugin.j2735.J2735DSRCmsgID; +import us.dot.its.jpo.ode.util.XmlUtils; +import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; + +/** + * The Asn1DecodedDataRouter class is a component responsible for processing decoded ASN.1 data from + * Kafka topics. It listens to messages on a specified Kafka topic and handles the incoming data by + * processing and forwarding it to different topics based on specific criteria. + * + *

This listener is specifically designed to handle decoded data produced by the asn1_codec. + * Upon receiving a payload, it transforms the payload and then determines the appropriate + * Kafka topic to forward the processed data.

+ * + *

The class utilizes Spring Kafka's annotation-driven listener configuration, + * allowing it to automatically consume messages from a configured Kafka topic.

+ */ +@Slf4j +@Component +public class Asn1DecodedDataRouter { + + private final PojoTopics pojoTopics; + private final JsonTopics jsonTopics; + private final KafkaTemplate kafkaTemplate; + private final KafkaTemplate bsmDataKafkaTemplate; + + /** + * Constructs an instance of Asn1DecodedDataRouter. + * + * @param kafkaTemplate the KafkaTemplate used for sending messages to Kafka topics. + */ + public Asn1DecodedDataRouter(KafkaTemplate kafkaTemplate, + KafkaTemplate bsmDataKafkaTemplate, + PojoTopics pojoTopics, + JsonTopics jsonTopics) { + this.kafkaTemplate = kafkaTemplate; + this.bsmDataKafkaTemplate = bsmDataKafkaTemplate; + this.pojoTopics = pojoTopics; + this.jsonTopics = jsonTopics; + } + + /** + * Processes the given Kafka message payload by transforming it into ODE data and publishing it to + * appropriate Kafka topics based on its record type. + */ + @KafkaListener( + id = "Asn1DecodedDataRouter", + topics = "${ode.kafka.topics.asn1.decoder-output}" + ) + public void listen(ConsumerRecord consumerRecord) throws XmlUtilsException { + log.debug("Key: {} payload: {}", consumerRecord.key(), consumerRecord.value()); + + JSONObject consumed = XmlUtils.toJSONObject(consumerRecord.value()) + .getJSONObject(OdeAsn1Data.class.getSimpleName()); + J2735DSRCmsgID messageId = J2735DSRCmsgID.valueOf( + consumed.getJSONObject(AppContext.PAYLOAD_STRING) + .getJSONObject(AppContext.DATA_STRING) + .getJSONObject("MessageFrame") + .getInt("messageId") + ); + + OdeLogMetadata.RecordType recordType = OdeLogMetadata.RecordType + .valueOf(XmlUtils.toJSONObject(consumerRecord.value()) + .getJSONObject(OdeAsn1Data.class.getSimpleName()) + .getJSONObject(AppContext.METADATA_STRING) + .getString("recordType") + ); + + switch (messageId) { + case BasicSafetyMessage -> routeBSM(consumerRecord, recordType); + case TravelerInformation -> routeTIM(consumerRecord, recordType); + case SPATMessage -> routeSPAT(consumerRecord, recordType); + case MAPMessage -> routeMAP(consumerRecord, recordType); + case SSMMessage -> routeSSM(consumerRecord, recordType); + case SRMMessage -> routeSRM(consumerRecord, recordType); + case PersonalSafetyMessage -> routePSM(consumerRecord, recordType); + case null, default -> log.warn("Unknown message type: {}", messageId); + } + } + + private void routePSM(ConsumerRecord consumerRecord, RecordType recordType) + throws XmlUtils.XmlUtilsException { + String odePsmData = OdePsmDataCreatorHelper.createOdePsmData(consumerRecord.value()).toString(); + if (recordType == RecordType.psmTx) { + kafkaTemplate.send(pojoTopics.getTxPsm(), consumerRecord.key(), odePsmData); + } + // Send all PSMs also to OdePsmJson + kafkaTemplate.send(jsonTopics.getPsm(), consumerRecord.key(), odePsmData); + } + + private void routeSRM(ConsumerRecord consumerRecord, RecordType recordType) + throws XmlUtils.XmlUtilsException { + String odeSrmData = OdeSrmDataCreatorHelper.createOdeSrmData(consumerRecord.value()).toString(); + if (recordType == RecordType.srmTx) { + kafkaTemplate.send(pojoTopics.getTxSrm(), consumerRecord.key(), odeSrmData); + } + // Send all SRMs also to OdeSrmJson + kafkaTemplate.send(jsonTopics.getSrm(), consumerRecord.key(), odeSrmData); + } + + private void routeSSM(ConsumerRecord consumerRecord, RecordType recordType) + throws XmlUtils.XmlUtilsException { + String odeSsmData = OdeSsmDataCreatorHelper.createOdeSsmData(consumerRecord.value()).toString(); + if (recordType == RecordType.ssmTx) { + kafkaTemplate.send(pojoTopics.getSsm(), consumerRecord.key(), odeSsmData); + } + // Send all SSMs also to OdeSsmJson + kafkaTemplate.send(jsonTopics.getSsm(), consumerRecord.key(), odeSsmData); + } + + private void routeSPAT(ConsumerRecord consumerRecord, RecordType recordType) + throws XmlUtils.XmlUtilsException { + String odeSpatData = + OdeSpatDataCreatorHelper.createOdeSpatData(consumerRecord.value()).toString(); + switch (recordType) { + case dnMsg -> kafkaTemplate.send( + jsonTopics.getDnMessage(), consumerRecord.key(), odeSpatData); + case rxMsg -> kafkaTemplate.send(jsonTopics.getRxSpat(), consumerRecord.key(), odeSpatData); + case spatTx -> kafkaTemplate.send(pojoTopics.getTxSpat(), consumerRecord.key(), odeSpatData); + default -> log.trace("Consumed SPAT data with record type: {}", recordType); + } + // Send all SPATs also to OdeSpatJson + kafkaTemplate.send(jsonTopics.getSpat(), consumerRecord.key(), odeSpatData); + } + + + private void routeMAP(ConsumerRecord consumerRecord, RecordType recordType) + throws XmlUtilsException { + String odeMapData = OdeMapDataCreatorHelper.createOdeMapData(consumerRecord.value()).toString(); + if (recordType == RecordType.mapTx) { + kafkaTemplate.send(pojoTopics.getTxMap(), odeMapData); + } + + // Send all MAP data to OdeMapJson despite the record type + kafkaTemplate.send(jsonTopics.getMap(), odeMapData); + } + + private void routeTIM(ConsumerRecord consumerRecord, RecordType recordType) + throws XmlUtilsException { + String odeTimData = + OdeTimDataCreatorHelper.createOdeTimDataFromDecoded(consumerRecord.value()).toString(); + switch (recordType) { + case dnMsg -> kafkaTemplate.send(jsonTopics.getDnMessage(), consumerRecord.key(), odeTimData); + case rxMsg -> kafkaTemplate.send(jsonTopics.getRxTim(), consumerRecord.key(), odeTimData); + default -> log.trace("Consumed TIM data with record type: {}", recordType); + } + // Send all TIMs also to OdeTimJson + kafkaTemplate.send(jsonTopics.getTim(), consumerRecord.key(), odeTimData); + } + + private void routeBSM(ConsumerRecord consumerRecord, RecordType recordType) + throws XmlUtils.XmlUtilsException { + // ODE-518/ODE-604 Demultiplex the messages to appropriate topics based on the "recordType" + OdeBsmData odeBsmData = OdeBsmDataCreatorHelper.createOdeBsmData(consumerRecord.value()); + switch (recordType) { + case bsmLogDuringEvent -> + bsmDataKafkaTemplate.send(pojoTopics.getBsmDuringEvent(), consumerRecord.key(), + odeBsmData); + case rxMsg -> + bsmDataKafkaTemplate.send(pojoTopics.getRxBsm(), consumerRecord.key(), odeBsmData); + case bsmTx -> + bsmDataKafkaTemplate.send(pojoTopics.getTxBsm(), consumerRecord.key(), odeBsmData); + default -> log.trace("Consumed BSM data with record type: {}", recordType); + } + // Send all BSMs also to OdeBsmPojo + bsmDataKafkaTemplate.send(pojoTopics.getBsm(), consumerRecord.key(), odeBsmData); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouter.java new file mode 100644 index 000000000..21ec8c1cf --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouter.java @@ -0,0 +1,61 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import us.dot.its.jpo.ode.model.OdeBsmMetadata; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.uper.StartFlagNotFoundException; +import us.dot.its.jpo.ode.uper.SupportedMessageType; + +/** + * A Kafka listener component that processes ASN.1 encoded BSM JSON messages from a specified Kafka + * topic. It processes the raw encoded JSON messages and publishes them to be decoded by the ASN.1 + * codec + */ +@Component +public class RawEncodedBSMJsonRouter { + + private final KafkaTemplate kafkaTemplate; + private final String publishTopic; + private final RawEncodedJsonService rawEncodedJsonService; + + /** + * Constructs an instance of the RawEncodedBSMJsonRouter. + * + * @param kafkaTemplate A KafkaTemplate for publishing messages to a Kafka topic. + * @param publishTopic The name of the Kafka topic to publish the processed messages to. + * @param rawEncodedJsonService A service to transform incoming data into the expected output + */ + public RawEncodedBSMJsonRouter(KafkaTemplate kafkaTemplate, + RawEncodedJsonService rawEncodedJsonService, + @Value("${ode.kafka.topics.asn1.decoder-input}") String publishTopic) { + this.kafkaTemplate = kafkaTemplate; + this.rawEncodedJsonService = rawEncodedJsonService; + this.publishTopic = publishTopic; + } + + /** + * Consumes and processes Kafka messages containing ASN.1 encoded BSM JSON data. This method + * extracts metadata and payload from the JSON message sends it for decoding. + * + * @param consumerRecord The Kafka consumer record containing the message key and value. The value + * includes the raw ASN.1 encoded JSON BSM data to be processed. + * @throws StartFlagNotFoundException If the start flag for the BSM message type is not found + * during payload processing. + * @throws JsonProcessingException If there's an error while processing or deserializing JSON + * data. + */ + @KafkaListener(id = "RawEncodedBSMJsonRouter", topics = "${ode.kafka.topics.raw-encoded-json.bsm}") + public void listen(ConsumerRecord consumerRecord) + throws StartFlagNotFoundException, JsonProcessingException { + var messageToPublish = + rawEncodedJsonService.addEncodingAndMutateBytes(consumerRecord.value(), + SupportedMessageType.BSM, + OdeBsmMetadata.class); + kafkaTemplate.send(publishTopic, consumerRecord.key(), messageToPublish); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedJsonService.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedJsonService.java new file mode 100644 index 000000000..98afbd8b6 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedJsonService.java @@ -0,0 +1,66 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.apache.tomcat.util.buf.HexUtils; +import org.json.JSONObject; +import org.springframework.stereotype.Service; +import us.dot.its.jpo.ode.model.Asn1Encoding; +import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; +import us.dot.its.jpo.ode.model.OdeAsn1Data; +import us.dot.its.jpo.ode.model.OdeAsn1Payload; +import us.dot.its.jpo.ode.model.OdeLogMetadata; +import us.dot.its.jpo.ode.uper.StartFlagNotFoundException; +import us.dot.its.jpo.ode.uper.SupportedMessageType; +import us.dot.its.jpo.ode.uper.UperUtil; + +/** + * Service class responsible for processing raw ASN.1 encoded JSON data, applying specific + * encodings, and mutating the payload bytes to comply with desired formats. + */ +@Service +public class RawEncodedJsonService { + + private final ObjectMapper mapper; + + public RawEncodedJsonService(ObjectMapper mapper) { + this.mapper = mapper; + } + + /** + * Processes the given JSON string and constructs an OdeAsn1Data object by extracting and encoding + * metadata and payload information. The metadata is mutated by adding an Asn1Encoding. Converts + * the payload bytes from hexadecimal string format after stripping IEEE 1609.2 security headers. + * + * @param json the JSON string containing the metadata and payload information + * @param messageType the type of message to determine the start flag for processing the + * payload + * @param metadataClass the class type of OdeLogMetadata to which the JSON metadata should be + * deserialized + * @return an OdeAsn1Data object containing the processed metadata and payload + * @throws JsonProcessingException if there is an error processing the JSON input + * @throws StartFlagNotFoundException if the specified start flag is not found in the payload + */ + public OdeAsn1Data addEncodingAndMutateBytes(String json, SupportedMessageType messageType, + Class metadataClass) + throws JsonProcessingException, StartFlagNotFoundException { + JSONObject rawJsonObject = new JSONObject(json); + + String jsonStringMetadata = rawJsonObject.get("metadata").toString(); + var metadata = mapper.readValue(jsonStringMetadata, metadataClass); + + Asn1Encoding + unsecuredDataEncoding = + new Asn1Encoding("unsecuredData", "MessageFrame", EncodingRule.UPER); + metadata.addEncoding(unsecuredDataEncoding); + + String payloadHexString = + ((JSONObject) ((JSONObject) rawJsonObject.get("payload")).get("data")).getString( + "bytes"); + payloadHexString = UperUtil.stripDot2Header(payloadHexString, messageType.getStartFlag()); + + OdeAsn1Payload payload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); + return new OdeAsn1Data(metadata, payload); + } + +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouter.java new file mode 100644 index 000000000..4c8b92052 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouter.java @@ -0,0 +1,63 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import com.fasterxml.jackson.core.JsonProcessingException; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import us.dot.its.jpo.ode.model.OdeMapMetadata; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.uper.StartFlagNotFoundException; +import us.dot.its.jpo.ode.uper.SupportedMessageType; + +/** + * A Kafka listener component that processes ASN.1 encoded MAP JSON messages from a specified Kafka + * topic. It processes the raw encoded JSON messages and publishes them to be decoded by the ASN.1 + * codec + */ +@Slf4j +@Component +public class RawEncodedMAPJsonRouter { + + private final KafkaTemplate kafkaTemplate; + private final String publishTopic; + private final RawEncodedJsonService rawEncodedJsonService; + + /** + * Constructor for the RawEncodedMAPJsonRouter class. + * + * @param kafkaTemplate The KafkaTemplate instance used to publish decoded data to the specified + * Kafka topic. + * @param publishTopic The Kafka topic to which the decoded and processed data is published. + * @param rawEncodedJsonService A service to transform incoming data into the expected output + */ + public RawEncodedMAPJsonRouter(KafkaTemplate kafkaTemplate, + @Value("${ode.kafka.topics.asn1.decoder-input}") String publishTopic, + RawEncodedJsonService rawEncodedJsonService) { + this.kafkaTemplate = kafkaTemplate; + this.publishTopic = publishTopic; + this.rawEncodedJsonService = rawEncodedJsonService; + } + + /** + * Consumes and processes Kafka messages containing ASN.1 encoded MAP JSON data. This method + * extracts metadata and payload from the JSON message sends it for decoding. + * + * @param consumerRecord The Kafka consumer record containing the message key and value. The value + * includes the raw ASN.1 encoded JSON MAP data to be processed. + * @throws StartFlagNotFoundException If the start flag for the MAP message type is not found + * during payload processing. + * @throws JsonProcessingException If there's an error while processing or deserializing JSON + * data. + */ + @KafkaListener(id = "RawEncodedMAPJsonRouter", topics = "${ode.kafka.topics.raw-encoded-json.map}") + public void listen(ConsumerRecord consumerRecord) + throws JsonProcessingException, StartFlagNotFoundException { + var messageToPublish = rawEncodedJsonService.addEncodingAndMutateBytes( + consumerRecord.value(), + SupportedMessageType.MAP, OdeMapMetadata.class); + kafkaTemplate.send(publishTopic, consumerRecord.key(), messageToPublish); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouter.java new file mode 100644 index 000000000..de99257ba --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouter.java @@ -0,0 +1,59 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.model.OdePsmMetadata; +import us.dot.its.jpo.ode.uper.StartFlagNotFoundException; +import us.dot.its.jpo.ode.uper.SupportedMessageType; + +/** + * A Kafka listener component that processes ASN.1 encoded PSM JSON messages from a specified Kafka + * topic. It processes the raw encoded JSON messages and publishes them to be decoded by the ASN.1 + * codec + */ +@Component +public class RawEncodedPSMJsonRouter { + + private final KafkaTemplate kafkaTemplate; + private final String publishTopic; + private final RawEncodedJsonService rawEncodedJsonService; + + /** + * Constructs an instance of the RawEncodedPSMJsonRouter. + * + * @param kafkaTemplate A KafkaTemplate for publishing messages to a Kafka topic. + * @param publishTopic The name of the Kafka topic to publish the processed messages to. + * @param rawEncodedJsonService A service to transform incoming data into the expected output + */ + public RawEncodedPSMJsonRouter(KafkaTemplate kafkaTemplate, + @Value("${ode.kafka.topics.asn1.decoder-input}") String publishTopic, + RawEncodedJsonService rawEncodedJsonService) { + this.kafkaTemplate = kafkaTemplate; + this.publishTopic = publishTopic; + this.rawEncodedJsonService = rawEncodedJsonService; + } + + /** + * Consumes and processes Kafka messages containing ASN.1 encoded PSM JSON data. This method + * extracts metadata and payload from the JSON message sends it for decoding. + * + * @param consumerRecord The Kafka consumer record containing the message key and value. The value + * includes the raw ASN.1 encoded JSON PSM data to be processed. + * @throws StartFlagNotFoundException If the start flag for the PSM message type is not found + * during payload processing. + * @throws JsonProcessingException If there's an error while processing or deserializing JSON + * data. + */ + @KafkaListener(id = "RawEncodedPSMJsonRouter", topics = "${ode.kafka.topics.raw-encoded-json.psm}") + public void listen(ConsumerRecord consumerRecord) + throws StartFlagNotFoundException, JsonProcessingException { + var messageToPublish = rawEncodedJsonService.addEncodingAndMutateBytes(consumerRecord.value(), + SupportedMessageType.PSM, OdePsmMetadata.class); + kafkaTemplate.send(publishTopic, consumerRecord.key(), messageToPublish); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouter.java new file mode 100644 index 000000000..64be4b316 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouter.java @@ -0,0 +1,58 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.model.OdeSpatMetadata; +import us.dot.its.jpo.ode.uper.StartFlagNotFoundException; +import us.dot.its.jpo.ode.uper.SupportedMessageType; + +/** + * A Kafka listener component that processes ASN.1 encoded SPAT JSON messages from a specified Kafka + * topic. It processes the raw encoded JSON messages and publishes them to be decoded by the ASN.1 + * codec + */ +@Component +public class RawEncodedSPATJsonRouter { + + private final KafkaTemplate kafkaTemplate; + private final String publishTopic; + private final RawEncodedJsonService rawEncodedJsonService; + + /** + * Constructs an instance of the RawEncodedSPATJsonRouter. + * + * @param kafkaTemplate A KafkaTemplate for publishing messages to a Kafka topic. + * @param publishTopic The name of the Kafka topic to publish the processed messages to. + */ + public RawEncodedSPATJsonRouter(KafkaTemplate kafkaTemplate, + @Value("${ode.kafka.topics.asn1.decoder-input}") String publishTopic, + RawEncodedJsonService rawEncodedJsonService) { + this.kafkaTemplate = kafkaTemplate; + this.publishTopic = publishTopic; + this.rawEncodedJsonService = rawEncodedJsonService; + } + + /** + * Consumes and processes Kafka messages containing ASN.1 encoded SPAT JSON data. This method + * extracts metadata and payload from the JSON message sends it for decoding. + * + * @param consumerRecord The Kafka consumer record containing the message key and value. The value + * includes the raw ASN.1 encoded JSON SPAT data to be processed. + * @throws StartFlagNotFoundException If the start flag for the SPAT message type is not found + * during payload processing. + * @throws JsonProcessingException If there's an error while processing or deserializing JSON + * data. + */ + @KafkaListener(id = "RawEncodedSPATJsonRouter", topics = "${ode.kafka.topics.raw-encoded-json.spat}") + public void listen(ConsumerRecord consumerRecord) + throws StartFlagNotFoundException, JsonProcessingException { + var messageToPublish = rawEncodedJsonService.addEncodingAndMutateBytes(consumerRecord.value(), + SupportedMessageType.SPAT, OdeSpatMetadata.class); + kafkaTemplate.send(publishTopic, consumerRecord.key(), messageToPublish); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouter.java new file mode 100644 index 000000000..fc054b446 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouter.java @@ -0,0 +1,59 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.model.OdeSrmMetadata; +import us.dot.its.jpo.ode.uper.StartFlagNotFoundException; +import us.dot.its.jpo.ode.uper.SupportedMessageType; + +/** + * A Kafka listener component that processes ASN.1 encoded SRM JSON messages from a specified Kafka + * topic. It processes the raw encoded JSON messages and publishes them to be decoded by the ASN.1 + * codec + */ +@Component +public class RawEncodedSRMJsonRouter { + + private final KafkaTemplate kafkaTemplate; + private final String publishTopic; + private final RawEncodedJsonService rawEncodedJsonService; + + /** + * Constructs an instance of the RawEncodedSRMJsonRouter. + * + * @param kafkaTemplate A KafkaTemplate for publishing messages to a Kafka topic. + * @param publishTopic The name of the Kafka topic to publish the processed messages to. + * @param rawEncodedJsonService A service to transform incoming data into the expected output + */ + public RawEncodedSRMJsonRouter(KafkaTemplate kafkaTemplate, + @Value("${ode.kafka.topics.asn1.decoder-input}") String publishTopic, + RawEncodedJsonService rawEncodedJsonService) { + this.kafkaTemplate = kafkaTemplate; + this.publishTopic = publishTopic; + this.rawEncodedJsonService = rawEncodedJsonService; + } + + /** + * Consumes and processes Kafka messages containing ASN.1 encoded SRM JSON data. This method + * extracts metadata and payload from the JSON message sends it for decoding. + * + * @param consumerRecord The Kafka consumer record containing the message key and value. The value + * includes the raw ASN.1 encoded JSON SRM data to be processed. + * @throws StartFlagNotFoundException If the start flag for the SRM message type is not found + * during payload processing. + * @throws JsonProcessingException If there's an error while processing or deserializing JSON + * data. + */ + @KafkaListener(id = "RawEncodedSRMJsonRouter", topics = "${ode.kafka.topics.raw-encoded-json.srm}") + public void listen(ConsumerRecord consumerRecord) + throws JsonProcessingException, StartFlagNotFoundException { + var messageToPublish = rawEncodedJsonService.addEncodingAndMutateBytes(consumerRecord.value(), + SupportedMessageType.SRM, OdeSrmMetadata.class); + kafkaTemplate.send(publishTopic, consumerRecord.key(), messageToPublish); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouter.java new file mode 100644 index 000000000..d753cde64 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouter.java @@ -0,0 +1,59 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.model.OdeSsmMetadata; +import us.dot.its.jpo.ode.uper.StartFlagNotFoundException; +import us.dot.its.jpo.ode.uper.SupportedMessageType; + +/** + * A Kafka listener component that processes ASN.1 encoded SSM JSON messages from a specified Kafka + * topic. It processes the raw encoded JSON messages and publishes them to be decoded by the ASN.1 + * codec + */ +@Component +public class RawEncodedSSMJsonRouter { + + private final KafkaTemplate kafkaTemplate; + private final String publishTopic; + private final RawEncodedJsonService rawEncodedJsonService; + + /** + * Constructs an instance of the RawEncodedSSMJsonRouter. + * + * @param kafkaTemplate A KafkaTemplate for publishing messages to a Kafka topic. + * @param publishTopic The name of the Kafka topic to publish the processed messages to. + * @param rawEncodedJsonService A service to transform incoming data into the expected output + */ + public RawEncodedSSMJsonRouter(KafkaTemplate kafkaTemplate, + @Value("${ode.kafka.topics.asn1.decoder-input}") String publishTopic, + RawEncodedJsonService rawEncodedJsonService) { + this.kafkaTemplate = kafkaTemplate; + this.publishTopic = publishTopic; + this.rawEncodedJsonService = rawEncodedJsonService; + } + + /** + * Consumes and processes Kafka messages containing ASN.1 encoded SSM JSON data. This method + * extracts metadata and payload from the JSON message sends it for decoding. + * + * @param consumerRecord The Kafka consumer record containing the message key and value. The value + * includes the raw ASN.1 encoded JSON SSM data to be processed. + * @throws StartFlagNotFoundException If the start flag for the SSM message type is not found + * during payload processing. + * @throws JsonProcessingException If there's an error while processing or deserializing JSON + * data. + */ + @KafkaListener(id = "RawEncodedSSMJsonRouter", topics = "${ode.kafka.topics.raw-encoded-json.ssm}") + public void listen(ConsumerRecord consumerRecord) + throws StartFlagNotFoundException, JsonProcessingException { + var messageToPublish = rawEncodedJsonService.addEncodingAndMutateBytes(consumerRecord.value(), + SupportedMessageType.SSM, OdeSsmMetadata.class); + kafkaTemplate.send(publishTopic, consumerRecord.key(), messageToPublish); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouter.java new file mode 100644 index 000000000..6dca5d85d --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouter.java @@ -0,0 +1,59 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import com.fasterxml.jackson.core.JsonProcessingException; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.kafka.annotation.KafkaListener; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.stereotype.Component; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.model.OdeTimMetadata; +import us.dot.its.jpo.ode.uper.StartFlagNotFoundException; +import us.dot.its.jpo.ode.uper.SupportedMessageType; + +/** + * A Kafka listener component that processes ASN.1 encoded TIM JSON messages from a specified Kafka + * topic. It processes the raw encoded JSON messages and publishes them to be decoded by the ASN.1 + * codec + */ +@Component +public class RawEncodedTIMJsonRouter { + + private final KafkaTemplate kafkaTemplate; + private final String publishTopic; + private final RawEncodedJsonService rawEncodedJsonService; + + /** + * Constructs an instance of the RawEncodedTIMJsonRouter. + * + * @param kafkaTemplate A KafkaTemplate for publishing messages to a Kafka topic. + * @param publishTopic The name of the Kafka topic to publish the processed messages to. + * @param rawEncodedJsonService A service to transform incoming data into the expected output + */ + public RawEncodedTIMJsonRouter(KafkaTemplate kafkaTemplate, + @Value("${ode.kafka.topics.asn1.decoder-input}") String publishTopic, + RawEncodedJsonService rawEncodedJsonService) { + this.kafkaTemplate = kafkaTemplate; + this.publishTopic = publishTopic; + this.rawEncodedJsonService = rawEncodedJsonService; + } + + /** + * Consumes and processes Kafka messages containing ASN.1 encoded BSM JSON data. This method + * extracts metadata and payload from the JSON message sends it for decoding. + * + * @param consumerRecord The Kafka consumer record containing the message key and value. The value + * includes the raw ASN.1 encoded JSON BSM data to be processed. + * @throws StartFlagNotFoundException If the start flag for the BSM message type is not found + * during payload processing. + * @throws JsonProcessingException If there's an error while processing or deserializing JSON + * data. + */ + @KafkaListener(id = "RawEncodedTIMJsonRouter", topics = "${ode.kafka.topics.raw-encoded-json.tim}") + public void listen(ConsumerRecord consumerRecord) + throws StartFlagNotFoundException, JsonProcessingException { + var messageToPublish = rawEncodedJsonService.addEncodingAndMutateBytes(consumerRecord.value(), + SupportedMessageType.TIM, OdeTimMetadata.class); + kafkaTemplate.send(publishTopic, consumerRecord.key(), messageToPublish); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/InterceptingKafkaTemplate.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/InterceptingKafkaTemplate.java new file mode 100644 index 000000000..459f1b73a --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/InterceptingKafkaTemplate.java @@ -0,0 +1,58 @@ +package us.dot.its.jpo.ode.kafka.producer; + +import io.micrometer.observation.Observation; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.RecordMetadata; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.core.ProducerFactory; +import org.springframework.kafka.support.SendResult; +import org.springframework.lang.NonNull; + +/** + * InterceptingKafkaTemplate is an extension of the KafkaTemplate class designed to introduce a + * mechanism for selectively preventing messages from being sent to certain Kafka topics. This + * functionality is implemented via a set of "disabledTopics", which contains topic names that + * should be blocked from receiving messages. + * + * @param the type of message key + * @param the type of message value + */ +@Slf4j +public class InterceptingKafkaTemplate extends KafkaTemplate { + + private final Set disabledTopics; + + /** + * Create an instance using the supplied producer factory and autoFlush false. + * + * @param producerFactory the producer factory. + */ + public InterceptingKafkaTemplate( + ProducerFactory producerFactory, Set disabledTopics) { + super(producerFactory); + this.disabledTopics = disabledTopics; + } + + /** + * Send the producer record if the producerRecord's topic is not contained in the disabledTopics. + * + * @param producerRecord the producer record. + * @param observation the observation. + * @return a Future for the {@link RecordMetadata RecordMetadata}. + */ + @Override + protected CompletableFuture> doSend( + final ProducerRecord producerRecord, + @NonNull Observation observation) { + if (disabledTopics.contains(producerRecord.topic())) { + log.debug("Blocked attempt to send data to disabled topic {}", producerRecord.topic()); + return new CompletableFuture<>(); + } + + return super.doSend(producerRecord, observation); + } + +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/KafkaProducerConfig.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/KafkaProducerConfig.java new file mode 100644 index 000000000..64e4bfdda --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/KafkaProducerConfig.java @@ -0,0 +1,174 @@ +package us.dot.its.jpo.ode.kafka.producer; + +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import java.util.Map; +import org.apache.kafka.clients.producer.ProducerConfig; +import org.apache.kafka.common.serialization.StringSerializer; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.kafka.annotation.EnableKafka; +import org.springframework.kafka.core.DefaultKafkaProducerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.core.ProducerFactory; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.XMLOdeObjectSerializer; +import us.dot.its.jpo.ode.model.OdeBsmData; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.wrapper.serdes.MessagingSerializer; + +/** + * KafkaProducerConfig is a configuration class for setting up Kafka producers with Spring Boot. + * This class utilizes the KafkaProperties and OdeKafkaProperties to define and construct the + * necessary producer factories and Kafka templates for producing messages to Kafka topics. + * + *

It provides configuration for two types of Kafka producer factories and templates: + * one for producing regular String messages and another for producing `OdeObject` messages + * serialized as XML. + * + *

This configuration is crucial for integrating with Kafka by providing + * necessary producer settings and managing producer instances. + */ +@EnableKafka +@Configuration +public class KafkaProducerConfig { + + private final KafkaProperties kafkaProperties; + private final OdeKafkaProperties odeKafkaProperties; + + /** + * Constructor for the KafkaProducerConfig class, which sets up the configuration for Kafka + * producers using provided Kafka properties. + * + * @param kafkaProperties the properties related to Kafka configuration as set up in the Spring + * environment, providing necessary configurations for creating Kafka + * producers. + * @param odeKafkaProperties the properties specific to the ODE Kafka setup, including custom + * configurations like Kafka type (e.g., CONFLUENT) and other + * specialized settings for integrating with the ODE infrastructure. + */ + public KafkaProducerConfig(KafkaProperties kafkaProperties, + OdeKafkaProperties odeKafkaProperties) { + this.kafkaProperties = kafkaProperties; + this.odeKafkaProperties = odeKafkaProperties; + } + + /** + * Creates a Kafka ProducerFactory configured for producing messages with String keys and String + * values. This factory sets up and manages the configuration needed for producing messages to + * Kafka topics using the properties defined in the application configuration. + * + * @return a ProducerFactory instance for creating Kafka producers with String key and value + * serializers. This includes any custom properties defined for Kafka producers, as well as + * additional settings for Confluent-based Kafka setups if applicable. + */ + @Bean + public ProducerFactory producerFactory() { + return new DefaultKafkaProducerFactory<>(buildProducerProperties()); + } + + /** + * Creates and returns a KafkaTemplate that allows for sending messages with String keys and + * String values to Kafka topics. This template is configured using the ProducerFactory instance + * provided by the producerFactory() method, ensuring that it is set up with the necessary + * serializers and additional properties defined in the application configuration. + * + * @return a KafkaTemplate instance configured for publishing messages to Kafka topics with String + * keys and values, facilitating message sending operations in Kafka. + */ + @Bean + public KafkaTemplate kafkaTemplate( + ProducerFactory producerFactory) { + var template = new InterceptingKafkaTemplate<>(producerFactory, + this.odeKafkaProperties.getDisabledTopics()); + + template.setProducerListener(new LoggingProducerListener<>()); + + return template; + } + + /** + * Creates a Kafka ProducerFactory specifically configured for handling messages with String keys + * and OdeObject values. This factory utilizes a custom XML serializer for OdeObjects, enabling + * proper serialization for Kafka message transmission. + * + * @return a ProducerFactory instance configured with String serializers for keys and a custom + * XMLOdeObjectSerializer for OdeObject values, using producer properties tailored to the + * application's Kafka and ODE settings. + */ + @Bean + public ProducerFactory odeDataProducerFactory(XmlMapper xmlMapper) { + return new DefaultKafkaProducerFactory<>(buildProducerProperties(), + new StringSerializer(), new XMLOdeObjectSerializer(xmlMapper)); + } + + /** + * Creates and returns a KafkaTemplate for sending messages with String keys and OdeObject values + * to Kafka topics. The template is configured using the ProducerFactory provided by the + * odeDataProducerFactory() method, ensuring it incorporates the necessary serializers and + * properties for proper message handling in the context of ODE and Kafka integration. + * + * @return a KafkaTemplate instance configured for handling messages with String keys and + * OdeObject values, enabling seamless message publication to Kafka topics within the + * application's messaging infrastructure. + */ + @Bean + public KafkaTemplate odeDataKafkaTemplate( + ProducerFactory producerFactory + ) { + var template = new InterceptingKafkaTemplate<>(producerFactory, + this.odeKafkaProperties.getDisabledTopics()); + template.setProducerListener(new LoggingProducerListener<>()); + + return template; + } + + /** + * Creates a Kafka ProducerFactory configured for producing messages with String keys and + * OdeBsmData values. This factory utilizes the provided producer properties, along with specific + * serializers for the key and value types. + * + * @return a ProducerFactory instance configured for handling String keys and OdeBsmData values + * with the necessary serialization settings and application-specific properties. + */ + @Bean + public ProducerFactory odeBsmProducerFactory() { + return new DefaultKafkaProducerFactory<>(buildProducerProperties(), + new StringSerializer(), new MessagingSerializer<>()); + } + + /** + * Creates a KafkaTemplate specifically configured for handling messages with String keys and + * OdeBsmData values. This KafkaTemplate incorporates a {@link InterceptingKafkaTemplate} to block + * messages being sent to disabled topics and a LoggingProducerListener for logging producer + * activity. + * + * @param producerFactory the ProducerFactory used to create Kafka producers for sending messages + * with String keys and OdeBsmData values. Configures the necessary + * serializers and properties. + * @return a KafkaTemplate instance configured for publishing messages to Kafka topics with String + * keys and OdeBsmData values, ensuring proper handling of disabled topics and logging. + */ + @Bean + public KafkaTemplate odeBsmKafkaTemplate( + ProducerFactory producerFactory + ) { + var template = new InterceptingKafkaTemplate<>(producerFactory, + this.odeKafkaProperties.getDisabledTopics()); + template.setProducerListener(new LoggingProducerListener<>()); + return template; + } + + private Map buildProducerProperties() { + var producerProps = kafkaProperties.buildProducerProperties(); + if ("CONFLUENT".equals(this.odeKafkaProperties.getKafkaType())) { + producerProps.putAll(this.odeKafkaProperties.getConfluent().buildConfluentProperties()); + } + // linger.ms isn't present in the KafkaProperties object above, but it is important to limit the amount of time + // we wait before publishing messages via the KafkaTemplate producer while the data size of the batch is less than the + // batch-size set in the application.yaml. The default is (2^31)-1 millis, which is not suitable for our use case. + producerProps.put(ProducerConfig.LINGER_MS_CONFIG, odeKafkaProperties.getProducer().getLingerMs()); + producerProps.put(ProducerConfig.RETRIES_CONFIG, odeKafkaProperties.getProducer().getRetries()); + return producerProps; + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/LoggingProducerListener.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/LoggingProducerListener.java new file mode 100644 index 000000000..3c097c540 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/producer/LoggingProducerListener.java @@ -0,0 +1,35 @@ +package us.dot.its.jpo.ode.kafka.producer; + +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.RecordMetadata; +import org.springframework.kafka.support.ProducerListener; +import org.springframework.lang.Nullable; + +/** + * The LoggingProducerListener is a Kafka ProducerListener implementation that handles logging for + * Kafka producer events. + * + *

This class uses Slf4j for logging and should be added to Kafka producer + * configurations where logging of producer activity is required.

+ * + * @param the type of the key for Kafka producer records + * @param the type of the value for Kafka producer records + */ +@Slf4j +public final class LoggingProducerListener + implements ProducerListener { + + @Override + public void onSuccess(ProducerRecord producerRecord, RecordMetadata recordMetadata) { + log.debug("Successfully produced to topic {} with key {} ", producerRecord.topic(), producerRecord.key()); + } + + @Override + public void onError( + ProducerRecord producerRecord, + @Nullable RecordMetadata recordMetadata, + Exception exception) { + log.error("Failed to produce to topic {} with key {} with exception: {}", producerRecord.topic(), producerRecord.key(), exception.getMessage()); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/Asn1CoderTopics.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/Asn1CoderTopics.java new file mode 100644 index 000000000..c19fc24e5 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/Asn1CoderTopics.java @@ -0,0 +1,15 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties("ode.kafka.topics.asn1") +@Data +public class Asn1CoderTopics { + private String decoderInput; + private String decoderOutput; + private String encoderInput; + private String encoderOutput; +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/FileTopics.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/FileTopics.java new file mode 100644 index 000000000..a581f619f --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/FileTopics.java @@ -0,0 +1,13 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "ode.kafka.topics.file") +@Data +public class FileTopics { + private String filteredOutput; + private String unfilteredOutput; +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/JsonTopics.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/JsonTopics.java new file mode 100644 index 000000000..b6939ecda --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/JsonTopics.java @@ -0,0 +1,36 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "ode.kafka.topics.json") +@Data +public class JsonTopics { + private String bsm; + private String map; + private String psm; + private String spat; + private String srm; + private String ssm; + private String tim; + + private String driverAlert; + + private String timBroadcast; + + private String bsmFiltered; + private String spatFiltered; + private String timFiltered; + private String timTmcFiltered; + + private String timCertExpiration; + + private String dnMessage; + + private String rxTim; + private String rxSpat; + + private String j2735TimBroadcast; +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/PojoTopics.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/PojoTopics.java new file mode 100644 index 000000000..55c4b84c3 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/PojoTopics.java @@ -0,0 +1,27 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "ode.kafka.topics.pojo") +@Data +public class PojoTopics { + private String bsm; + private String spat; + private String ssm; + + private String timBroadcast; + + private String bsmDuringEvent; + + private String rxBsm; + private String rxSpat; + + private String txBsm; + private String txMap; + private String txPsm; + private String txSpat; + private String txSrm; +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/RawEncodedJsonTopics.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/RawEncodedJsonTopics.java new file mode 100644 index 000000000..dc38c68d3 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/RawEncodedJsonTopics.java @@ -0,0 +1,18 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "ode.kafka.topics.raw-encoded-json") +@Data +public class RawEncodedJsonTopics { + private String bsm; + private String map; + private String psm; + private String spat; + private String srm; + private String ssm; + private String tim; +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/SDXDepositorTopics.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/SDXDepositorTopics.java new file mode 100644 index 000000000..d98e76e8b --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/kafka/topics/SDXDepositorTopics.java @@ -0,0 +1,12 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "ode.kafka.topics.sdx-depositor") +@Data +public class SDXDepositorTopics { + private String input; +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuDepositor.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuDepositor.java index 0673189d0..265c704c5 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuDepositor.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuDepositor.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2020 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -16,150 +16,140 @@ package us.dot.its.jpo.ode.rsu; -import java.io.IOException; -import java.text.ParseException; -import java.util.ArrayList; -import java.util.HashMap; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.snmp4j.event.ResponseEvent; - -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.eventlog.EventLogger; -import us.dot.its.jpo.ode.plugin.ServiceRequest; import us.dot.its.jpo.ode.plugin.RoadSideUnit.RSU; +import us.dot.its.jpo.ode.plugin.ServiceRequest; import us.dot.its.jpo.ode.snmp.SnmpSession; import us.dot.its.jpo.ode.traveler.TimTransmogrifier; +import java.io.IOException; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.HashMap; + +@Slf4j public class RsuDepositor extends Thread { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - private volatile boolean running = true; - private OdeProperties odeProperties; - private ArrayList depositorEntries = new ArrayList(); - - private static boolean dataSigningEnabledRSU = System.getenv("DATA_SIGNING_ENABLED_RSU") != null && !System.getenv("DATA_SIGNING_ENABLED_RSU").isEmpty() - ? Boolean.parseBoolean(System.getenv("DATA_SIGNING_ENABLED_RSU")) - : false; - - class RsuDepositorEntry{ - public RsuDepositorEntry(ServiceRequest request, String encodedMsg) { - this.request = request; - this.encodedMsg = encodedMsg; - } - ServiceRequest request; - String encodedMsg; - } - - public RsuDepositor(OdeProperties odeProperties) { - this.odeProperties = odeProperties; - } - - public OdeProperties getOdeProperties() { - return odeProperties; - } - - public void setOdeProperties(OdeProperties odeProperties) { - this.odeProperties = odeProperties; - } - - public void shutdown() { - running = false; - } - - public boolean isRunning() - { - return running; - } - - public void run() { - try { - while (running) - { - RsuDepositorEntry[] entryList = new RsuDepositorEntry[0]; - synchronized(depositorEntries) - { - entryList = new RsuDepositorEntry[depositorEntries.size()]; - entryList = depositorEntries.toArray(entryList); - depositorEntries.clear(); - } - - for (RsuDepositorEntry entry : entryList) { - HashMap responseList = new HashMap<>(); - for (RSU curRsu : entry.request.getRsus()) { - - TimTransmogrifier.updateRsuCreds(curRsu, odeProperties); - - ResponseEvent rsuResponse = null; - - String httpResponseStatus; - try { - rsuResponse = SnmpSession.createAndSend(entry.request.getSnmp(), curRsu, entry.encodedMsg, entry.request.getOde().getVerb(), dataSigningEnabledRSU); - if (null == rsuResponse || null == rsuResponse.getResponse()) { - // Timeout - httpResponseStatus = "Timeout"; - } else if (rsuResponse.getResponse().getErrorStatus() == 0) { - // Success - httpResponseStatus = "Success"; - } else if (rsuResponse.getResponse().getErrorStatus() == 5) { - // Error, message already exists - httpResponseStatus = "Message already exists at ".concat(Integer.toString(curRsu.getRsuIndex())); - } else if (rsuResponse.getResponse().getErrorStatus() == 10) { - // Error, possible SNMP protocol mismatch - httpResponseStatus = "Possible SNMP protocol mismatch, check RSU configuration"; - } else { - // Misc error - httpResponseStatus = "Error code " + rsuResponse.getResponse().getErrorStatus() + " " - + rsuResponse.getResponse().getErrorStatusText(); - } - } catch (IOException | ParseException e) { - String msg = "Exception caught in TIM RSU deposit loop."; - EventLogger.logger.error(msg, e); - logger.error(msg, e); - httpResponseStatus = e.getClass().getName() + ": " + e.getMessage(); - } - responseList.put(curRsu.getRsuTarget(), httpResponseStatus); - - if (null == rsuResponse || null == rsuResponse.getResponse()) { - // Timeout - logger.error("Error on RSU SNMP deposit to {}: timed out.", curRsu.getRsuTarget()); - } else if (rsuResponse.getResponse().getErrorStatus() == 0) { - // Success - logger.info("RSU SNMP deposit to {} successful.", curRsu.getRsuTarget()); - } else if (rsuResponse.getResponse().getErrorStatus() == 5) { - // Error, message already exists - Integer destIndex = curRsu.getRsuIndex(); - logger.error("Error on RSU SNMP deposit to {}: message already exists at index {}.", curRsu.getRsuTarget(), - destIndex); - } else if (rsuResponse.getResponse().getErrorStatus() == 10) { - // Error, possible SNMP protocol mismatch - logger.error("Error on RSU SNMP deposit to {}: Possible SNMP protocol mismatch, check RSU configuration.", - curRsu.getRsuTarget()); - } else { - // Misc error - logger.error("Error on RSU SNMP deposit to {}: {}", curRsu.getRsuTarget(), "Error code '" - + rsuResponse.getResponse().getErrorStatus() + "' '" + rsuResponse.getResponse().getErrorStatusText() + "'"); - // Log the PDUs involved in the failed deposit - logger.debug("PDUs involved in failed RSU SNMP deposit to " + curRsu.getRsuTarget() - + " => Request PDU: " + rsuResponse.getRequest() + " Response PDU: " + rsuResponse.getResponse()); - } - - } - logger.info("TIM deposit response {}", responseList); - } - Thread.sleep(100); - } - } - catch (InterruptedException e) { - logger.error("RsuDepositor thread interrupted", e); - } - } - - public void deposit(ServiceRequest request, String encodedMsg) { - synchronized(depositorEntries) - { - depositorEntries.add(new RsuDepositorEntry(request, encodedMsg)); - } - } + private final boolean dataSigningEnabled; + private volatile boolean running = true; + private final RsuProperties rsuProperties; + private final ArrayList depositorEntries = new ArrayList<>(); + + protected static class RsuDepositorEntry { + public RsuDepositorEntry(ServiceRequest request, String encodedMsg) { + this.request = request; + this.encodedMsg = encodedMsg; + } + + ServiceRequest request; + String encodedMsg; + } + + public RsuDepositor(RsuProperties rsuProperties, boolean isDataSigningEnabled) { + this.rsuProperties = rsuProperties; + this.dataSigningEnabled = isDataSigningEnabled; + } + + public void shutdown() { + running = false; + } + + public boolean isRunning() { + return running; + } + + @Override + public void run() { + try { + while (running) { + RsuDepositorEntry[] entryList; + synchronized (depositorEntries) { + entryList = new RsuDepositorEntry[depositorEntries.size()]; + entryList = depositorEntries.toArray(entryList); + depositorEntries.clear(); + } + + for (RsuDepositorEntry entry : entryList) { + HashMap responseList = new HashMap<>(); + for (RSU curRsu : entry.request.getRsus()) { + + TimTransmogrifier.updateRsuCreds(curRsu, rsuProperties); + String httpResponseStatus; + try { + ResponseEvent rsuResponse = SnmpSession.createAndSend(entry.request.getSnmp(), + curRsu, + entry.encodedMsg, + entry.request.getOde().getVerb(), + dataSigningEnabled); + httpResponseStatus = getResponseStatus(rsuResponse, curRsu); + } catch (IOException | ParseException e) { + String msg = "Exception caught in TIM RSU deposit loop."; + EventLogger.logger.error(msg, e); + log.error(msg, e); + httpResponseStatus = e.getClass().getName() + ": " + e.getMessage(); + } + + responseList.put(curRsu.getRsuTarget(), httpResponseStatus); + } + log.info("TIM deposit response {}", responseList); + } + Thread.sleep(100); + } + } catch (InterruptedException e) { + log.error("RsuDepositor thread interrupted", e); + } + } + + private String getResponseStatus(ResponseEvent rsuResponse, RSU curRsu) { + String httpResponseStatus; + + if (null == rsuResponse || null == rsuResponse.getResponse()) { + // Timeout + httpResponseStatus = "Timeout"; + log.error("Error on RSU SNMP deposit to {}: timed out.", curRsu.getRsuTarget()); + return httpResponseStatus; + } + + RsuResponseCode responseCode = RsuResponseCode.fromInt(rsuResponse.getResponse().getErrorStatus()); + switch (responseCode) { + case SUCCESS: + httpResponseStatus = "Success"; + log.info("RSU SNMP deposit to {} successful.", curRsu.getRsuTarget()); + break; + case DUPLICATE_MESSAGE: + httpResponseStatus = "Message already exists at ".concat(Integer.toString(curRsu.getRsuIndex())); + Integer destIndex = curRsu.getRsuIndex(); + log.error("Error on RSU SNMP deposit to {}: message already exists at index {}.", curRsu.getRsuTarget(), + destIndex); + break; + case POSSIBLE_SNMP_PROTOCOL_MISMATCH: + httpResponseStatus = "Possible SNMP protocol mismatch, check RSU configuration"; + log.error("Error on RSU SNMP deposit to {}: Possible SNMP protocol mismatch, check RSU configuration.", + curRsu.getRsuTarget()); + break; + case null, default: + httpResponseStatus = "Error code " + rsuResponse.getResponse().getErrorStatus() + " " + + rsuResponse.getResponse().getErrorStatusText(); + // Misc error + log.error("Error on RSU SNMP deposit to {}: Error code '{}' '{}'", curRsu.getRsuTarget(), rsuResponse.getResponse().getErrorStatus(), rsuResponse.getResponse().getErrorStatusText() + "'"); + // Log the PDUs involved in the failed deposit + log.debug("PDUs involved in failed RSU SNMP deposit to {} => Request PDU: {} Response PDU: {}", curRsu.getRsuTarget(), rsuResponse.getRequest(), rsuResponse.getResponse()); + break; + } + + return httpResponseStatus; + } + + public void deposit(ServiceRequest request, String encodedMsg) { + synchronized (depositorEntries) { + depositorEntries.add(new RsuDepositorEntry(request, encodedMsg)); + } + } + protected ArrayList getDepositorEntries() { + synchronized (depositorEntries) { + return depositorEntries; + } + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuProperties.java new file mode 100644 index 000000000..3d9c29b9c --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuProperties.java @@ -0,0 +1,14 @@ +package us.dot.its.jpo.ode.rsu; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; + +@Configuration +@ConfigurationProperties(prefix = "ode.rsu") +@Data +public class RsuProperties { + private int srmSlots; // number of "store and repeat message" indices for RSU TIMs + private String username; + private String password; +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuResponseCode.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuResponseCode.java new file mode 100644 index 000000000..b9bbcdd1a --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/rsu/RsuResponseCode.java @@ -0,0 +1,14 @@ +package us.dot.its.jpo.ode.rsu; + +public enum RsuResponseCode { + SUCCESS, DUPLICATE_MESSAGE, POSSIBLE_SNMP_PROTOCOL_MISMATCH; + + public static RsuResponseCode fromInt(int i) { + return switch (i) { + case 0 -> SUCCESS; + case 5 -> DUPLICATE_MESSAGE; + case 10 -> POSSIBLE_SNMP_PROTOCOL_MISMATCH; + default -> null; + }; + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/security/SecurityServicesProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/security/SecurityServicesProperties.java new file mode 100644 index 000000000..a53315ec6 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/security/SecurityServicesProperties.java @@ -0,0 +1,28 @@ +package us.dot.its.jpo.ode.security; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.validation.annotation.Validated; + +@Configuration +@ConfigurationProperties(prefix = "ode.security-services") +@Data +@Validated(value = SecurityServicesPropertiesValidator.class) +public class SecurityServicesProperties { + private String hostIP; + private String signatureEndpoint; + private Integer port = -1; + private Boolean isSdwSigningEnabled = true; + private Boolean isRsuSigningEnabled = false; + + public String getSignatureEndpoint() { + if (signatureEndpoint == null || signatureEndpoint.isEmpty()) { + // if signatureEndpoint is not set, then construct it from hostIP and port + // to provide a useful default. We can't use the default value in the annotation + // because it doesn't allow us to reference other properties. + this.signatureEndpoint = "http://" + hostIP + ":" + port + "/sign"; + } + return signatureEndpoint; + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/security/SecurityServicesPropertiesValidator.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/security/SecurityServicesPropertiesValidator.java new file mode 100644 index 000000000..3b75c7987 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/security/SecurityServicesPropertiesValidator.java @@ -0,0 +1,51 @@ +package us.dot.its.jpo.ode.security; + +import org.springframework.validation.Validator; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Objects; + +public class SecurityServicesPropertiesValidator implements Validator { + + @Override + public boolean supports(Class clazz) { + return SecurityServicesProperties.class.equals(clazz); + } + + @Override + public void validate(Object target, org.springframework.validation.Errors errors) { + SecurityServicesProperties properties = (SecurityServicesProperties) target; + + if (Boolean.FALSE.equals(properties.getIsRsuSigningEnabled()) && Boolean.FALSE.equals(properties.getIsSdwSigningEnabled())) { + // if neither RSU nor SDW are enabled, then no further validation is needed because no security services are enabled + return; + } + + if (properties.getSignatureEndpoint() != null && !properties.getSignatureEndpoint().isEmpty()) { + String errorCode = "signatureEndpoint.invalid"; + String fieldName = "signatureEndpoint"; + try { + URI uri = new URI(properties.getSignatureEndpoint()); + if (!uri.getScheme().equals("http") && !uri.getScheme().equals("https")) { + errors.rejectValue(fieldName, errorCode, "Signature endpoint must be an http URL"); + } + if (uri.getHost() == null || Objects.equals(uri.getHost(), "null") || uri.getHost().isEmpty()) { + errors.rejectValue(fieldName, errorCode, "Signature endpoint must have a host"); + } + if (uri.getPort() < 0) { + errors.rejectValue(fieldName, errorCode, "Signature endpoint must have a port"); + } + } catch (URISyntaxException e) { + errors.rejectValue(fieldName, errorCode, "Signature endpoint must be a valid URL"); + } + } else { + if (properties.getHostIP() == null || properties.getHostIP().isEmpty()) { + errors.rejectValue("hostIP", "hostIP.invalid", "Host IP must be provided"); + } + if (properties.getPort() <= 0) { + errors.rejectValue("port", "port.invalid", "Port must be greater than 0"); + } + } + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManager.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManager.java index 1072b87e7..2e3db752d 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManager.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManager.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,24 +15,18 @@ ******************************************************************************/ package us.dot.its.jpo.ode.services.asn1; -import java.text.ParseException; -import java.util.HashMap; -import java.util.Map; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; - -import com.fasterxml.jackson.databind.node.ArrayNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.context.AppContext; import us.dot.its.jpo.ode.eventlog.EventLogger; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.SDXDepositorTopics; import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; import us.dot.its.jpo.ode.model.OdeAsdPayload; import us.dot.its.jpo.ode.model.OdeMsgMetadata; @@ -42,7 +36,9 @@ import us.dot.its.jpo.ode.plugin.SituationDataWarehouse.SDW; import us.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData; import us.dot.its.jpo.ode.plugin.j2735.builders.GeoRegionBuilder; +import us.dot.its.jpo.ode.rsu.RsuProperties; import us.dot.its.jpo.ode.rsu.RsuDepositor; +import us.dot.its.jpo.ode.security.SecurityServicesProperties; import us.dot.its.jpo.ode.traveler.TimTransmogrifier; import us.dot.its.jpo.ode.util.JsonUtils; import us.dot.its.jpo.ode.util.JsonUtils.JsonUtilsException; @@ -50,193 +46,164 @@ import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; import us.dot.its.jpo.ode.wrapper.MessageProducer; -public class Asn1CommandManager { - - public static final String ADVISORY_SITUATION_DATA_STRING = "AdvisorySituationData"; - private static final Logger logger = LoggerFactory.getLogger(Asn1CommandManager.class); - - public static class Asn1CommandManagerException extends Exception { - - private static final long serialVersionUID = 1L; - - public Asn1CommandManagerException(String string) { - super(string); - } - - public Asn1CommandManagerException(String msg, Exception e) { - super(msg, e); - } - - } - - private String signatureUri; - private OdeProperties odeProperties; - - private MessageProducer stringMessageProducer; - - private String depositTopic; - private RsuDepositor rsuDepositor; - - public Asn1CommandManager(OdeProperties odeProperties) { - - this.odeProperties = odeProperties; - - this.signatureUri = odeProperties.getSecuritySvcsSignatureUri(); +import java.text.ParseException; +import java.util.HashMap; +import java.util.Map; - try { - this.rsuDepositor = new RsuDepositor(odeProperties); - this.rsuDepositor.start(); - this.stringMessageProducer = MessageProducer.defaultStringMessageProducer(odeProperties.getKafkaBrokers(), - odeProperties.getKafkaProducerType(), odeProperties.getKafkaTopicsDisabledSet()); - this.setDepositTopic(odeProperties.getKafkaTopicSdwDepositorInput()); - } catch (Exception e) { - String msg = "Error starting SDW depositor"; - EventLogger.logger.error(msg, e); - logger.error(msg, e); - } +@Slf4j +public class Asn1CommandManager { - } + public static final String ADVISORY_SITUATION_DATA_STRING = "AdvisorySituationData"; - public void depositToSdw(String depositObj) throws Asn1CommandManagerException { - stringMessageProducer.send(this.getDepositTopic(), null, depositObj); - logger.info("Published message to SDW deposit topic"); - EventLogger.logger.info("Published message to SDW deposit topic"); - logger.debug("Message deposited: {}", depositObj); - EventLogger.logger.debug("Message deposited: {}", depositObj); - } + public static class Asn1CommandManagerException extends Exception { - public void sendToRsus(ServiceRequest request, String encodedMsg) { + private static final long serialVersionUID = 1L; - rsuDepositor.deposit(request, encodedMsg); - return; - } + public Asn1CommandManagerException(String string) { + super(string); + } - public String sendForSignature(String message) { - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); + public Asn1CommandManagerException(String msg, Exception e) { + super(msg, e); + } - HttpEntity entity = new HttpEntity<>(JsonUtils.jsonKeyValue("message", message), headers); + } - RestTemplate template = new RestTemplate(); + private final String signatureUri; - logger.info("Sending data to security services module at {} to be signed", signatureUri); - logger.debug("Data to be signed: {}", entity); + private MessageProducer stringMessageProducer; - ResponseEntity respEntity = template.postForEntity(signatureUri, entity, String.class); + private String depositTopic; + private RsuDepositor rsuDepositor; - logger.info("Security services module response: {}", respEntity); + public Asn1CommandManager(OdeKafkaProperties odeKafkaProperties, SDXDepositorTopics sdxDepositorTopics, RsuProperties rsuProperties, SecurityServicesProperties securityServicesProperties) { + this.signatureUri = securityServicesProperties.getSignatureEndpoint(); - return respEntity.getBody(); - } + try { + this.rsuDepositor = new RsuDepositor(rsuProperties, securityServicesProperties.getIsRsuSigningEnabled()); + this.rsuDepositor.start(); + this.stringMessageProducer = MessageProducer.defaultStringMessageProducer(odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); + this.depositTopic = sdxDepositorTopics.getInput(); + } catch (Exception e) { + String msg = "Error starting SDW depositor"; + EventLogger.logger.error(msg, e); + log.error(msg, e); + } + } - public String sendForSignature(String message, int sigValidityOverride) { - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.APPLICATION_JSON); - Map map = new HashMap<>(); - map.put("message", message); - map.put("sigValidityOverride", Integer.toString(sigValidityOverride)); + public void depositToSdw(String depositObj) throws Asn1CommandManagerException { + stringMessageProducer.send(this.depositTopic, null, depositObj); + log.info("Published message to SDW deposit topic {}", this.depositTopic); + EventLogger.logger.info("Published message to SDW deposit topic"); + log.debug("Message deposited: {}", depositObj); + EventLogger.logger.debug("Message deposited: {}", depositObj); + } - HttpEntity> entity = new HttpEntity<>(map, headers); - RestTemplate template = new RestTemplate(); + public void sendToRsus(ServiceRequest request, String encodedMsg) { + rsuDepositor.deposit(request, encodedMsg); + } - logger.info("Sending data to security services module with validity override at {} to be signed", - signatureUri); - logger.debug("Data to be signed: {}", entity); + public String sendForSignature(String message, int sigValidityOverride) { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + Map map = new HashMap<>(); + map.put("message", message); + map.put("sigValidityOverride", Integer.toString(sigValidityOverride)); - ResponseEntity respEntity = template.postForEntity(signatureUri, entity, String.class); + HttpEntity> entity = new HttpEntity<>(map, headers); + RestTemplate template = new RestTemplate(); - logger.debug("Security services module response: {}", respEntity); + log.info("Sending data to security services module with validity override at {} to be signed", + signatureUri); + log.debug("Data to be signed: {}", entity); - return respEntity.getBody(); - } + ResponseEntity respEntity = template.postForEntity(signatureUri, entity, String.class); - public String packageSignedTimIntoAsd(ServiceRequest request, String signedMsg) { + log.debug("Security services module response: {}", respEntity); - SDW sdw = request.getSdw(); - SNMP snmp = request.getSnmp(); - DdsAdvisorySituationData asd = null; + return respEntity.getBody(); + } - byte sendToRsu = request.getRsus() != null ? DdsAdvisorySituationData.RSU : DdsAdvisorySituationData.NONE; - byte distroType = (byte) (DdsAdvisorySituationData.IP | sendToRsu); - // - String outputXml = null; - try { - if (null != snmp) { + public String packageSignedTimIntoAsd(ServiceRequest request, String signedMsg) { - asd = new DdsAdvisorySituationData() - .setAsdmDetails(snmp.getDeliverystart(), snmp.getDeliverystop(), distroType, null) - .setServiceRegion(GeoRegionBuilder.ddsGeoRegion(sdw.getServiceRegion())).setTimeToLive(sdw.getTtl()) - .setGroupID(sdw.getGroupID()).setRecordID(sdw.getRecordId()); - } else { - asd = new DdsAdvisorySituationData() - .setAsdmDetails(sdw.getDeliverystart(), sdw.getDeliverystop(), distroType, null) - .setServiceRegion(GeoRegionBuilder.ddsGeoRegion(sdw.getServiceRegion())).setTimeToLive(sdw.getTtl()) - .setGroupID(sdw.getGroupID()).setRecordID(sdw.getRecordId()); - } + SDW sdw = request.getSdw(); + SNMP snmp = request.getSnmp(); + DdsAdvisorySituationData asd; - OdeMsgPayload payload = null; + byte sendToRsu = request.getRsus() != null ? DdsAdvisorySituationData.RSU : DdsAdvisorySituationData.NONE; + byte distroType = (byte) (DdsAdvisorySituationData.IP | sendToRsu); - ObjectNode dataBodyObj = JsonUtils.newNode(); - ObjectNode asdObj = JsonUtils.toObjectNode(asd.toJson()); - ObjectNode admDetailsObj = (ObjectNode) asdObj.findValue("asdmDetails"); - admDetailsObj.remove("advisoryMessage"); - admDetailsObj.put("advisoryMessage", signedMsg); + String outputXml = null; + try { + if (null != snmp) { - dataBodyObj.set(ADVISORY_SITUATION_DATA_STRING, asdObj); + asd = new DdsAdvisorySituationData() + .setAsdmDetails(snmp.getDeliverystart(), snmp.getDeliverystop(), distroType, null) + .setServiceRegion(GeoRegionBuilder.ddsGeoRegion(sdw.getServiceRegion())).setTimeToLive(sdw.getTtl()) + .setGroupID(sdw.getGroupID()).setRecordID(sdw.getRecordId()); + } else { + asd = new DdsAdvisorySituationData() + .setAsdmDetails(sdw.getDeliverystart(), sdw.getDeliverystop(), distroType, null) + .setServiceRegion(GeoRegionBuilder.ddsGeoRegion(sdw.getServiceRegion())).setTimeToLive(sdw.getTtl()) + .setGroupID(sdw.getGroupID()).setRecordID(sdw.getRecordId()); + } - payload = new OdeAsdPayload(asd); + OdeMsgPayload payload; - ObjectNode payloadObj = JsonUtils.toObjectNode(payload.toJson()); - payloadObj.set(AppContext.DATA_STRING, dataBodyObj); + ObjectNode dataBodyObj = JsonUtils.newNode(); + ObjectNode asdObj = JsonUtils.toObjectNode(asd.toJson()); + ObjectNode admDetailsObj = (ObjectNode) asdObj.findValue("asdmDetails"); + admDetailsObj.remove("advisoryMessage"); + admDetailsObj.put("advisoryMessage", signedMsg); - OdeMsgMetadata metadata = new OdeMsgMetadata(payload); - ObjectNode metaObject = JsonUtils.toObjectNode(metadata.toJson()); + dataBodyObj.set(ADVISORY_SITUATION_DATA_STRING, asdObj); - ObjectNode requestObj = JsonUtils.toObjectNode(JsonUtils.toJson(request, false)); + payload = new OdeAsdPayload(asd); - requestObj.remove("tim"); + ObjectNode payloadObj = JsonUtils.toObjectNode(payload.toJson()); + payloadObj.set(AppContext.DATA_STRING, dataBodyObj); - metaObject.set("request", requestObj); + OdeMsgMetadata metadata = new OdeMsgMetadata(payload); + ObjectNode metaObject = JsonUtils.toObjectNode(metadata.toJson()); - ArrayNode encodings = buildEncodings(); - ObjectNode enc = XmlUtils.createEmbeddedJsonArrayForXmlConversion(AppContext.ENCODINGS_STRING, encodings); - metaObject.set(AppContext.ENCODINGS_STRING, enc); + ObjectNode requestObj = JsonUtils.toObjectNode(JsonUtils.toJson(request, false)); - ObjectNode message = JsonUtils.newNode(); - message.set(AppContext.METADATA_STRING, metaObject); - message.set(AppContext.PAYLOAD_STRING, payloadObj); + requestObj.remove("tim"); - ObjectNode root = JsonUtils.newNode(); - root.set(AppContext.ODE_ASN1_DATA, message); + metaObject.set("request", requestObj); - outputXml = XmlUtils.toXmlStatic(root); + ArrayNode encodings = buildEncodings(); + ObjectNode enc = XmlUtils.createEmbeddedJsonArrayForXmlConversion(AppContext.ENCODINGS_STRING, encodings); + metaObject.set(AppContext.ENCODINGS_STRING, enc); - // remove the surrounding - outputXml = outputXml.replace("", ""); - outputXml = outputXml.replace("", ""); + ObjectNode message = JsonUtils.newNode(); + message.set(AppContext.METADATA_STRING, metaObject); + message.set(AppContext.PAYLOAD_STRING, payloadObj); - } catch (ParseException | JsonUtilsException | XmlUtilsException e) { - logger.error("Parsing exception thrown while populating ASD structure: {}", e); - } + ObjectNode root = JsonUtils.newNode(); + root.set(AppContext.ODE_ASN1_DATA, message); - logger.debug("Fully crafted ASD to be encoded: {}", outputXml); + outputXml = XmlUtils.toXmlStatic(root); - return outputXml; - } + // remove the surrounding + outputXml = outputXml.replace("", ""); + outputXml = outputXml.replace("", ""); - public static ArrayNode buildEncodings() throws JsonUtilsException { - ArrayNode encodings = JsonUtils.newArrayNode(); - encodings.add(TimTransmogrifier.buildEncodingNode(ADVISORY_SITUATION_DATA_STRING, ADVISORY_SITUATION_DATA_STRING, - EncodingRule.UPER)); - return encodings; - } + } catch (ParseException | JsonUtilsException | XmlUtilsException e) { + log.error("Parsing exception thrown while populating ASD structure: ", e); + } - public String getDepositTopic() { - return depositTopic; - } + log.debug("Fully crafted ASD to be encoded: {}", outputXml); - public void setDepositTopic(String depositTopic) { - this.depositTopic = depositTopic; - } + return outputXml; + } + public static ArrayNode buildEncodings() throws JsonUtilsException { + ArrayNode encodings = JsonUtils.newArrayNode(); + encodings.add(TimTransmogrifier.buildEncodingNode(ADVISORY_SITUATION_DATA_STRING, ADVISORY_SITUATION_DATA_STRING, + EncodingRule.UPER)); + return encodings; + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouter.java deleted file mode 100644 index f2b9c393d..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouter.java +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.services.asn1; - -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.OdeBsmDataCreatorHelper; -import us.dot.its.jpo.ode.coder.OdeMapDataCreatorHelper; -import us.dot.its.jpo.ode.coder.OdeSpatDataCreatorHelper; -import us.dot.its.jpo.ode.coder.OdeSsmDataCreatorHelper; -import us.dot.its.jpo.ode.coder.OdeSrmDataCreatorHelper; -import us.dot.its.jpo.ode.coder.OdePsmDataCreatorHelper; -import us.dot.its.jpo.ode.context.AppContext; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeBsmData; -import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; -import us.dot.its.jpo.ode.plugin.j2735.J2735DSRCmsgID; -import us.dot.its.jpo.ode.traveler.TimTransmogrifier; -import us.dot.its.jpo.ode.util.XmlUtils; -import us.dot.its.jpo.ode.wrapper.AbstractSubscriberProcessor; -import us.dot.its.jpo.ode.wrapper.MessageProducer; -import us.dot.its.jpo.ode.wrapper.serdes.OdeBsmSerializer; - -public class Asn1DecodedDataRouter extends AbstractSubscriberProcessor { - - private Logger logger = LoggerFactory.getLogger(this.getClass()); - - private OdeProperties odeProperties; - private MessageProducer bsmProducer; - private MessageProducer timProducer; - private MessageProducer spatProducer; - private MessageProducer mapProducer; - private MessageProducer ssmProducer; - private MessageProducer srmProducer; - private MessageProducer psmProducer; - - public Asn1DecodedDataRouter(OdeProperties odeProps) { - super(); - this.odeProperties = odeProps; - this.bsmProducer = new MessageProducer<>(odeProps.getKafkaBrokers(), odeProps.getKafkaProducerType(), null, - OdeBsmSerializer.class.getName(), odeProperties.getKafkaTopicsDisabledSet()); - this.timProducer = MessageProducer.defaultStringMessageProducer(odeProps.getKafkaBrokers(), - odeProps.getKafkaProducerType(), odeProperties.getKafkaTopicsDisabledSet()); - this.spatProducer = MessageProducer.defaultStringMessageProducer(odeProps.getKafkaBrokers(), - odeProps.getKafkaProducerType(), odeProperties.getKafkaTopicsDisabledSet()); - this.mapProducer = MessageProducer.defaultStringMessageProducer(odeProps.getKafkaBrokers(), - odeProps.getKafkaProducerType(), odeProperties.getKafkaTopicsDisabledSet()); - this.ssmProducer = MessageProducer.defaultStringMessageProducer(odeProps.getKafkaBrokers(), - odeProps.getKafkaProducerType(), odeProperties.getKafkaTopicsDisabledSet()); - this.srmProducer = MessageProducer.defaultStringMessageProducer(odeProps.getKafkaBrokers(), - odeProps.getKafkaProducerType(), odeProperties.getKafkaTopicsDisabledSet()); - this.psmProducer = MessageProducer.defaultStringMessageProducer(odeProps.getKafkaBrokers(), - odeProps.getKafkaProducerType(), odeProperties.getKafkaTopicsDisabledSet()); - } - - @Override - public Object process(String consumedData) { - try { - JSONObject consumed = XmlUtils.toJSONObject(consumedData).getJSONObject(OdeAsn1Data.class.getSimpleName()); - int messageId = consumed.getJSONObject(AppContext.PAYLOAD_STRING).getJSONObject(AppContext.DATA_STRING) - .getJSONObject("MessageFrame").getInt("messageId"); - - RecordType recordType = RecordType - .valueOf(consumed.getJSONObject(AppContext.METADATA_STRING).getString("recordType")); - - if (messageId == J2735DSRCmsgID.BasicSafetyMessage.getMsgID()) { - // ODE-518/ODE-604 Demultiplex the messages to appropriate topics based on the - // "recordType" - OdeBsmData odeBsmData = OdeBsmDataCreatorHelper.createOdeBsmData(consumedData); - if (recordType == RecordType.bsmLogDuringEvent) { - bsmProducer.send(odeProperties.getKafkaTopicOdeBsmDuringEventPojo(), getRecord().key(), odeBsmData); - } else if (recordType == RecordType.rxMsg) { - bsmProducer.send(odeProperties.getKafkaTopicOdeBsmRxPojo(), getRecord().key(), odeBsmData); - } else if (recordType == RecordType.bsmTx) { - bsmProducer.send(odeProperties.getKafkaTopicOdeBsmTxPojo(), getRecord().key(), odeBsmData); - } - // Send all BSMs also to OdeBsmPojo - bsmProducer.send(odeProperties.getKafkaTopicOdeBsmPojo(), getRecord().key(), odeBsmData); - logger.debug("Submitted to BSM Pojo topic"); - } else if (messageId == J2735DSRCmsgID.TravelerInformation.getMsgID()) { - String odeTimData = TimTransmogrifier.createOdeTimData(consumed).toString(); - if (recordType == RecordType.dnMsg) { - timProducer.send(odeProperties.getKafkaTopicOdeDNMsgJson(), getRecord().key(), odeTimData); - } else if (recordType == RecordType.rxMsg) { - timProducer.send(odeProperties.getKafkaTopicOdeTimRxJson(), getRecord().key(), odeTimData); - } - // Send all TIMs also to OdeTimJson - timProducer.send(odeProperties.getKafkaTopicOdeTimJson(), getRecord().key(), odeTimData); - logger.debug("Submitted to TIM Pojo topic"); - } else if (messageId == J2735DSRCmsgID.SPATMessage.getMsgID()) { - String odeSpatData = OdeSpatDataCreatorHelper.createOdeSpatData(consumedData).toString(); - if (recordType == RecordType.dnMsg) { - spatProducer.send(odeProperties.getKafkaTopicOdeDNMsgJson(), getRecord().key(), odeSpatData); - } else if (recordType == RecordType.rxMsg) { - spatProducer.send(odeProperties.getKafkaTopicOdeSpatRxJson(), getRecord().key(), odeSpatData); - } else if (recordType == RecordType.spatTx) { - spatProducer.send(odeProperties.getKafkaTopicOdeSpatTxPojo(), getRecord().key(), odeSpatData); - } - // Send all SPATs also to OdeSpatJson - spatProducer.send(odeProperties.getKafkaTopicOdeSpatJson(), getRecord().key(), odeSpatData); - logger.debug("Submitted to SPAT Pojo topic"); - } else if (messageId == J2735DSRCmsgID.MAPMessage.getMsgID()) { - String odeMapData = OdeMapDataCreatorHelper.createOdeMapData(consumedData).toString(); - if (recordType == RecordType.mapTx) { - mapProducer.send(odeProperties.getKafkaTopicOdeMapTxPojo(), getRecord().key(), odeMapData); - } - // Send all Map also to OdeMapJson - mapProducer.send(odeProperties.getKafkaTopicOdeMapJson(), getRecord().key(), odeMapData); - logger.debug("Submitted to MAP Pojo topic"); - } else if (messageId == J2735DSRCmsgID.SSMMessage.getMsgID()) { - String odeSsmData = OdeSsmDataCreatorHelper.createOdeSsmData(consumedData).toString(); - if (recordType == RecordType.ssmTx) { - ssmProducer.send(odeProperties.getKafkaTopicOdeSsmPojo(), getRecord().key(), odeSsmData); - } - // Send all SSMs also to OdeSsmJson - ssmProducer.send(odeProperties.getKafkaTopicOdeSsmJson(), getRecord().key(), odeSsmData); - logger.debug("Submitted to SSM Pojo topic"); - } else if (messageId == J2735DSRCmsgID.SRMMessage.getMsgID()) { - String odeSrmData = OdeSrmDataCreatorHelper.createOdeSrmData(consumedData).toString(); - if (recordType == RecordType.srmTx) { - srmProducer.send(odeProperties.getKafkaTopicOdeSrmTxPojo(), getRecord().key(), odeSrmData); - } - // Send all SRMs also to OdeSrmJson - srmProducer.send(odeProperties.getKafkaTopicOdeSrmJson(), getRecord().key(), odeSrmData); - logger.debug("Submitted to SRM Pojo topic"); - } else if (messageId == J2735DSRCmsgID.PersonalSafetyMessage.getMsgID()) { - String odePsmData = OdePsmDataCreatorHelper.createOdePsmData(consumedData).toString(); - if (recordType == RecordType.psmTx) { - psmProducer.send(odeProperties.getKafkaTopicOdePsmTxPojo(), getRecord().key(), odePsmData); - } - // Send all PSMs also to OdePsmJson - psmProducer.send(odeProperties.getKafkaTopicOdePsmJson(), getRecord().key(), odePsmData); - logger.debug("Submitted to PSM Pojo topic"); - } - } catch (Exception e) { - logger.error("Failed to route received data: " + consumedData, e); - } - return null; - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java index 2f78af9ba..297dcaade 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouter.java @@ -1,34 +1,39 @@ /******************************************************************************* * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * + *

http://www.apache.org/licenses/LICENSE-2.0 + * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.services.asn1; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; +import lombok.extern.slf4j.Slf4j; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.OdeTimJsonTopology; import us.dot.its.jpo.ode.context.AppContext; import us.dot.its.jpo.ode.eventlog.EventLogger; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.topics.SDXDepositorTopics; import us.dot.its.jpo.ode.model.OdeAsn1Data; import us.dot.its.jpo.ode.plugin.ServiceRequest; +import us.dot.its.jpo.ode.rsu.RsuProperties; +import us.dot.its.jpo.ode.security.SecurityServicesProperties; import us.dot.its.jpo.ode.services.asn1.Asn1CommandManager.Asn1CommandManagerException; import us.dot.its.jpo.ode.traveler.TimTransmogrifier; import us.dot.its.jpo.ode.util.CodecUtils; @@ -38,368 +43,460 @@ import us.dot.its.jpo.ode.wrapper.AbstractSubscriberProcessor; import us.dot.its.jpo.ode.wrapper.MessageProducer; +/** + * The Asn1EncodedDataRouter is responsible for routing encoded TIM messages + * that are consumed from the Kafka topic.Asn1EncoderOutput topic and decide + * whether to route to the SDX or an RSU. + **/ +@Slf4j public class Asn1EncodedDataRouter extends AbstractSubscriberProcessor { - private static final String BYTES = "bytes"; - - private static final String MESSAGE_FRAME = "MessageFrame"; - - private static final String ERROR_ON_SDX_DEPOSIT = "Error on SDX deposit."; + private static final String BYTES = "bytes"; + private static final String MESSAGE_FRAME = "MessageFrame"; + private static final String ERROR_ON_SDX_DEPOSIT = "Error on SDX deposit."; + + /** + * Exception for Asn1EncodedDataRouter specific failures. + */ + public static class Asn1EncodedDataRouterException extends Exception { + private static final long serialVersionUID = 1L; + + public Asn1EncodedDataRouterException(String string) { + super(string); + } + } + + private final Asn1CoderTopics asn1CoderTopics; + private final JsonTopics jsonTopics; + + private final MessageProducer stringMsgProducer; + private final OdeTimJsonTopology odeTimJsonTopology; + private final Asn1CommandManager asn1CommandManager; + private final boolean dataSigningEnabledSDW; + private final boolean dataSigningEnabledRSU; + + /** + * Instantiates the Asn1EncodedDataRouter to actively consume from Kafka and route the + * the encoded TIM messages to the SDX and RSUs. + * + * @param odeKafkaProperties The Kafka properties used to consume and produce to Kafka + * @param asn1CoderTopics The specified ASN1 Coder topics + * @param jsonTopics The specified JSON topics to write to + * @param sdxDepositorTopics The SDX depositor topics to write to + * @param rsuProperties The RSU properties to use + * @param securityServicesProperties The security services properties to use + **/ + public Asn1EncodedDataRouter(OdeKafkaProperties odeKafkaProperties, + Asn1CoderTopics asn1CoderTopics, + JsonTopics jsonTopics, + SDXDepositorTopics sdxDepositorTopics, + RsuProperties rsuProperties, + SecurityServicesProperties securityServicesProperties) { + super(); + + this.asn1CoderTopics = asn1CoderTopics; + this.jsonTopics = jsonTopics; + + this.stringMsgProducer = MessageProducer.defaultStringMessageProducer( + odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()); + + this.asn1CommandManager = new Asn1CommandManager( + odeKafkaProperties, + sdxDepositorTopics, + rsuProperties, + securityServicesProperties); + this.dataSigningEnabledSDW = securityServicesProperties.getIsSdwSigningEnabled(); + this.dataSigningEnabledRSU = securityServicesProperties.getIsRsuSigningEnabled(); + + odeTimJsonTopology = new OdeTimJsonTopology(odeKafkaProperties, jsonTopics.getTim()); + } + + @Override + public Object process(String consumedData) { + try { + log.debug("Consumed: {}", consumedData); + JSONObject consumedObj = XmlUtils.toJSONObject(consumedData).getJSONObject( + OdeAsn1Data.class.getSimpleName()); + + /* + * When receiving the 'rsus' in xml, since there is only one 'rsu' and + * there is no construct for array in xml, the rsus does not translate + * to an array of 1 element. The following workaround, resolves this + * issue. + */ + JSONObject metadata = consumedObj.getJSONObject(AppContext.METADATA_STRING); + + if (metadata.has(TimTransmogrifier.REQUEST_STRING)) { + JSONObject request = metadata.getJSONObject(TimTransmogrifier.REQUEST_STRING); + if (request.has(TimTransmogrifier.RSUS_STRING)) { + Object rsus = request.get(TimTransmogrifier.RSUS_STRING); + if (rsus instanceof JSONObject) { + JSONObject rsusIn = (JSONObject) request.get(TimTransmogrifier.RSUS_STRING); + if (rsusIn.has(TimTransmogrifier.RSUS_STRING)) { + Object rsu = rsusIn.get(TimTransmogrifier.RSUS_STRING); + JSONArray rsusOut = new JSONArray(); + if (rsu instanceof JSONArray) { + log.debug("Multiple RSUs exist in the request: {}", request); + JSONArray rsusInArray = (JSONArray) rsu; + for (int i = 0; i < rsusInArray.length(); i++) { + rsusOut.put(rsusInArray.get(i)); + } + request.put(TimTransmogrifier.RSUS_STRING, rsusOut); + } else if (rsu instanceof JSONObject) { + log.debug("Single RSU exists in the request: {}", request); + rsusOut.put(rsu); + request.put(TimTransmogrifier.RSUS_STRING, rsusOut); + } else { + log.debug("No RSUs exist in the request: {}", request); + request.remove(TimTransmogrifier.RSUS_STRING); + } + } + } + } - public static class Asn1EncodedDataRouterException extends Exception { + // Convert JSON to POJO + ServiceRequest servicerequest = getServicerequest(consumedObj); - private static final long serialVersionUID = 1L; + processEncodedTim(servicerequest, consumedObj); + } else { + throw new Asn1EncodedDataRouterException("Invalid or missing '" + + TimTransmogrifier.REQUEST_STRING + "' object in the encoder response"); + } + } catch (Exception e) { + String msg = "Error in processing received message from ASN.1 Encoder module: " + + consumedData; + if (log.isDebugEnabled()) { + // print error message and stack trace + EventLogger.logger.error(msg, e); + log.error(msg, e); + } else { + // print error message only + EventLogger.logger.error(msg); + log.error(msg); + } + } + return null; + } + + /** + * Gets the service request based on the consumed JSONObject. + * + * @param consumedObj The object to retrieve the service request for + * @return The service request + */ + public ServiceRequest getServicerequest(JSONObject consumedObj) { + String sr = consumedObj.getJSONObject(AppContext.METADATA_STRING).getJSONObject( + TimTransmogrifier.REQUEST_STRING).toString(); + log.debug("ServiceRequest: {}", sr); + + // Convert JSON to POJO + ServiceRequest serviceRequest = null; + try { + serviceRequest = (ServiceRequest) JsonUtils.fromJson(sr, ServiceRequest.class); + + } catch (Exception e) { + String errMsg = "Malformed JSON."; + EventLogger.logger.error(errMsg, e); + log.error(errMsg, e); + } + + return serviceRequest; + } + + /** + * Process the signed encoded TIM message. + * + * @param request The service request + * @param consumedObj The consumed JSON object + */ + public void processEncodedTim(ServiceRequest request, JSONObject consumedObj) { + + JSONObject dataObj = consumedObj.getJSONObject(AppContext.PAYLOAD_STRING).getJSONObject( + AppContext.DATA_STRING); + JSONObject metadataObj = consumedObj.getJSONObject(AppContext.METADATA_STRING); + + // CASE 1: no SDW in metadata (SNMP deposit only) + // - sign MF + // - send to RSU + // CASE 2: SDW in metadata but no ASD in body (send back for another + // encoding) + // - sign MF + // - send to RSU + // - craft ASD object + // - publish back to encoder stream + // CASE 3: If SDW in metadata and ASD in body (double encoding complete) + // - send to SDX + + if (!dataObj.has(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING)) { + log.debug("Unsigned message received"); + // We don't have ASD, therefore it must be just a MessageFrame that needs to be + // signed + // No support for unsecured MessageFrame only payload. + // Cases 1 & 2 + // Sign and send to RSUs + + JSONObject mfObj = dataObj.getJSONObject(MESSAGE_FRAME); + + String hexEncodedTim = mfObj.getString(BYTES); + log.debug("Encoded message - phase 1: {}", hexEncodedTim); + // use Asnc1 library to decode the encoded tim returned from ASNC1; another + // class two blockers: decode the tim and decode the message-sign + + // Case 1: SNMP-deposit + if (dataSigningEnabledRSU && request.getRsus() != null) { + hexEncodedTim = signTIMAndProduceToExpireTopic(hexEncodedTim, consumedObj); + } else { + // if header is present, strip it + if (isHeaderPresent(hexEncodedTim)) { + String header = hexEncodedTim.substring(0, hexEncodedTim.indexOf("001F") + 4); + log.debug("Stripping header from unsigned message: {}", header); + hexEncodedTim = stripHeader(hexEncodedTim); + mfObj.remove(BYTES); + mfObj.put(BYTES, hexEncodedTim); + dataObj.remove(MESSAGE_FRAME); + dataObj.put(MESSAGE_FRAME, mfObj); + consumedObj.remove(AppContext.PAYLOAD_STRING); + consumedObj.put(AppContext.PAYLOAD_STRING, dataObj); + } + } - public Asn1EncodedDataRouterException(String string) { - super(string); + if (null != request.getSnmp() && null != request.getRsus() && null != hexEncodedTim) { + log.info("Sending message to RSUs..."); + asn1CommandManager.sendToRsus(request, hexEncodedTim); } - } + hexEncodedTim = mfObj.getString(BYTES); - private Logger logger = LoggerFactory.getLogger(this.getClass()); + // Case 2: SDX-deposit + if (dataSigningEnabledSDW && request.getSdw() != null) { + hexEncodedTim = signTIMAndProduceToExpireTopic(hexEncodedTim, consumedObj); + } - private OdeProperties odeProperties; - private MessageProducer stringMsgProducer; - private Asn1CommandManager asn1CommandManager; - private boolean dataSigningEnabledRSU; - private boolean dataSigningEnabledSDW; + // Deposit encoded & signed TIM to TMC-filtered topic if TMC-generated + depositToFilteredTopic(metadataObj, hexEncodedTim); + if (request.getSdw() != null) { + // Case 2 only - public Asn1EncodedDataRouter(OdeProperties odeProperties) { - super(); + log.debug("Publishing message for round 2 encoding!"); + String xmlizedMessage = asn1CommandManager.packageSignedTimIntoAsd(request, hexEncodedTim); - this.odeProperties = odeProperties; + stringMsgProducer.send(asn1CoderTopics.getEncoderInput(), null, xmlizedMessage); + } - this.stringMsgProducer = MessageProducer.defaultStringMessageProducer(odeProperties.getKafkaBrokers(), - odeProperties.getKafkaProducerType(), this.odeProperties.getKafkaTopicsDisabledSet()); + } else { + // We have encoded ASD. It could be either UNSECURED or secured. + if (dataSigningEnabledSDW && request.getSdw() != null) { + log.debug("Signed message received. Depositing it to SDW."); + // We have a ASD with signed MessageFrame + // Case 3 + JSONObject asdObj = dataObj.getJSONObject( + Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING); + try { + JSONObject deposit = new JSONObject(); + deposit.put("estimatedRemovalDate", request.getSdw().getEstimatedRemovalDate()); + deposit.put("encodedMsg", asdObj.getString(BYTES)); + asn1CommandManager.depositToSdw(deposit.toString()); + } catch (JSONException | Asn1CommandManagerException e) { + String msg = ERROR_ON_SDX_DEPOSIT; + log.error(msg, e); + } + } else { + log.debug("Unsigned ASD received. Depositing it to SDW."); + // We have ASD with UNSECURED MessageFrame + processEncodedTimUnsecured(request, consumedObj); + } + } + } + + /** + * Process the unsigned encoded TIM message. + * + * @param request The service request + * @param consumedObj The consumed JSON object + */ + public void processEncodedTimUnsecured(ServiceRequest request, JSONObject consumedObj) { + // Send TIMs and record results + HashMap responseList = new HashMap<>(); + JSONObject metadataObj = consumedObj.getJSONObject(AppContext.METADATA_STRING); + + JSONObject dataObj = consumedObj + .getJSONObject(AppContext.PAYLOAD_STRING) + .getJSONObject(AppContext.DATA_STRING); + + if (null != request.getSdw()) { + JSONObject asdObj = null; + if (dataObj.has(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING)) { + asdObj = dataObj.getJSONObject(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING); + } else { + log.error("ASD structure present in metadata but not in JSONObject!"); + } - this.asn1CommandManager = new Asn1CommandManager(odeProperties); + if (null != asdObj) { + String asdBytes = asdObj.getString(BYTES); + + try { + JSONObject deposit = new JSONObject(); + deposit.put("estimatedRemovalDate", request.getSdw().getEstimatedRemovalDate()); + deposit.put("encodedMsg", asdBytes); + asn1CommandManager.depositToSdw(deposit.toString()); + log.info("SDX deposit successful."); + } catch (Exception e) { + String msg = ERROR_ON_SDX_DEPOSIT; + log.error(msg, e); + EventLogger.logger.error(msg, e); + } + + } else if (log.isErrorEnabled()) { + // Added to avoid Sonar's "Invoke method(s) only conditionally." code smell + String msg = "ASN.1 Encoder did not return ASD encoding {}"; + EventLogger.logger.error(msg, consumedObj); + log.error(msg, consumedObj); + } + } + + if (dataObj.has(MESSAGE_FRAME)) { + JSONObject mfObj = dataObj.getJSONObject(MESSAGE_FRAME); + String encodedTim = mfObj.getString(BYTES); + + // Deposit encoded TIM to TMC-filtered topic if TMC-generated + depositToFilteredTopic(metadataObj, encodedTim); + + // if header is present, strip it + if (isHeaderPresent(encodedTim)) { + String header = encodedTim.substring(0, encodedTim.indexOf("001F") + 4); + log.debug("Stripping header from unsigned message: {}", header); + encodedTim = stripHeader(encodedTim); + mfObj.remove(BYTES); + mfObj.put(BYTES, encodedTim); + dataObj.remove(MESSAGE_FRAME); + dataObj.put(MESSAGE_FRAME, mfObj); + consumedObj.remove(AppContext.PAYLOAD_STRING); + consumedObj.put(AppContext.PAYLOAD_STRING, dataObj); + } - this.dataSigningEnabledRSU = System.getenv("DATA_SIGNING_ENABLED_RSU") != null && !System.getenv("DATA_SIGNING_ENABLED_RSU").isEmpty() - ? Boolean.parseBoolean(System.getenv("DATA_SIGNING_ENABLED_RSU")) - : false; - this.dataSigningEnabledSDW = System.getenv("DATA_SIGNING_ENABLED_SDW") != null && !System.getenv("DATA_SIGNING_ENABLED_SDW").isEmpty() - ? Boolean.parseBoolean(System.getenv("DATA_SIGNING_ENABLED_SDW")) - : true; - } + log.debug("Encoded message - phase 2: {}", encodedTim); - @Override - public Object process(String consumedData) { + // only send message to rsu if snmp, rsus, and message frame fields are present + if (null != request.getSnmp() && null != request.getRsus() && null != encodedTim) { + log.debug("Encoded message phase 3: {}", encodedTim); + asn1CommandManager.sendToRsus(request, encodedTim); + } + } + + log.info("TIM deposit response {}", responseList); + } + + /** + * Sign the encoded TIM message and write to Kafka with an expiration time. + * + * @param encodedTIM The encoded TIM message to be signed + * @param consumedObj The JSON object to be consumed + * @return The String representation of the encodedTim payload + */ + public String signTIMAndProduceToExpireTopic(String encodedTIM, JSONObject consumedObj) { + log.debug("Sending message for signature! "); + String base64EncodedTim = CodecUtils.toBase64( + CodecUtils.fromHex(encodedTIM)); + JSONObject metadataObjs = consumedObj.getJSONObject(AppContext.METADATA_STRING); + // get max duration time and convert from minutes to milliseconds (unsigned + // integer valid 0 to 2^32-1 in units of + // milliseconds.) from metadata + int maxDurationTime = Integer.valueOf(metadataObjs.get("maxDurationTime").toString()) + * 60 * 1000; + String timpacketID = metadataObjs.getString("odePacketID"); + String timStartDateTime = metadataObjs.getString("odeTimStartDateTime"); + String signedResponse = asn1CommandManager.sendForSignature(base64EncodedTim, maxDurationTime); + try { + final String hexEncodedTim = CodecUtils.toHex( + CodecUtils.fromBase64( + JsonUtils.toJSONObject(JsonUtils.toJSONObject(signedResponse).getString("result")) + .getString("message-signed"))); + + JSONObject timWithExpiration = new JSONObject(); + timWithExpiration.put("packetID", timpacketID); + timWithExpiration.put("startDateTime", timStartDateTime); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); try { - logger.debug("Consumed: {}", consumedData); - JSONObject consumedObj = XmlUtils.toJSONObject(consumedData).getJSONObject(OdeAsn1Data.class.getSimpleName()); - - /* - * When receiving the 'rsus' in xml, since there is only one 'rsu' and - * there is no construct for array in xml, the rsus does not translate - * to an array of 1 element. The following workaround, resolves this - * issue. - */ - JSONObject metadata = consumedObj.getJSONObject(AppContext.METADATA_STRING); - - if (metadata.has(TimTransmogrifier.REQUEST_STRING)) { - JSONObject request = metadata.getJSONObject(TimTransmogrifier.REQUEST_STRING); - if (request.has(TimTransmogrifier.RSUS_STRING)) { - Object rsus = request.get(TimTransmogrifier.RSUS_STRING); - if (rsus instanceof JSONObject) { - JSONObject rsusIn = (JSONObject) request.get(TimTransmogrifier.RSUS_STRING); - if (rsusIn.has(TimTransmogrifier.RSUS_STRING)) { - Object rsu = rsusIn.get(TimTransmogrifier.RSUS_STRING); - JSONArray rsusOut = new JSONArray(); - if (rsu instanceof JSONArray) { - logger.debug("Multiple RSUs exist in the request: {}", request); - JSONArray rsusInArray = (JSONArray) rsu; - for (int i = 0; i < rsusInArray.length(); i++) { - rsusOut.put(rsusInArray.get(i)); - } - request.put(TimTransmogrifier.RSUS_STRING, rsusOut); - } else if (rsu instanceof JSONObject) { - logger.debug("Single RSU exists in the request: {}", request); - rsusOut.put(rsu); - request.put(TimTransmogrifier.RSUS_STRING, rsusOut); - } else { - logger.debug("No RSUs exist in the request: {}", request); - request.remove(TimTransmogrifier.RSUS_STRING); - } - } - } - } - - // Convert JSON to POJO - ServiceRequest servicerequest = getServicerequest(consumedObj); - - processEncodedTim(servicerequest, consumedObj); - } else { - throw new Asn1EncodedDataRouterException("Invalid or missing '" - + TimTransmogrifier.REQUEST_STRING + "' object in the encoder response"); - } + JSONObject jsonResult = JsonUtils + .toJSONObject((JsonUtils.toJSONObject(signedResponse).getString("result"))); + // messageExpiry uses unit of seconds + long messageExpiry = Long.parseLong(jsonResult.getString("message-expiry")); + timWithExpiration.put("expirationDate", dateFormat.format(new Date(messageExpiry * 1000))); } catch (Exception e) { - String msg = "Error in processing received message from ASN.1 Encoder module: " + consumedData; - if (logger.isDebugEnabled()) { - // print error message and stack trace - EventLogger.logger.error(msg, e); - logger.error(msg, e); - } - else { - // print error message only - EventLogger.logger.error(msg); - logger.error(msg); - } + log.error("Unable to get expiration date from signed messages response ", e); + timWithExpiration.put("expirationDate", "null"); } - return null; - } - - public ServiceRequest getServicerequest(JSONObject consumedObj) { - String sr = consumedObj.getJSONObject(AppContext.METADATA_STRING).getJSONObject(TimTransmogrifier.REQUEST_STRING).toString(); - logger.debug("ServiceRequest: {}", sr); - // Convert JSON to POJO - ServiceRequest serviceRequest = null; try { - serviceRequest = (ServiceRequest) JsonUtils.fromJson(sr, ServiceRequest.class); - + Date parsedtimTimeStamp = dateFormat.parse(timStartDateTime); + Date requiredExpirationDate = new Date(); + requiredExpirationDate.setTime(parsedtimTimeStamp.getTime() + maxDurationTime); + timWithExpiration.put("requiredExpirationDate", dateFormat.format(requiredExpirationDate)); } catch (Exception e) { - String errMsg = "Malformed JSON."; - EventLogger.logger.error(errMsg, e); - logger.error(errMsg, e); + log.error("Unable to parse requiredExpirationDate ", e); + timWithExpiration.put("requiredExpirationDate", "null"); } - - return serviceRequest; - } - - public void processEncodedTim(ServiceRequest request, JSONObject consumedObj) { - - JSONObject dataObj = consumedObj.getJSONObject(AppContext.PAYLOAD_STRING).getJSONObject(AppContext.DATA_STRING); - - // CASE 1: no SDW in metadata (SNMP deposit only) - // - sign MF - // - send to RSU - // CASE 2: SDW in metadata but no ASD in body (send back for another - // encoding) - // - sign MF - // - send to RSU - // - craft ASD object - // - publish back to encoder stream - // CASE 3: If SDW in metadata and ASD in body (double encoding complete) - // - send to SDX - - if (!dataObj.has(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING)) { - logger.debug("Unsigned message received"); - // We don't have ASD, therefore it must be just a MessageFrame that needs to be signed - // No support for unsecured MessageFrame only payload. - // Cases 1 & 2 - // Sign and send to RSUs - - JSONObject mfObj = dataObj.getJSONObject(MESSAGE_FRAME); - - String hexEncodedTim = mfObj.getString(BYTES); - logger.debug("Encoded message - phase 1: {}", hexEncodedTim); - //use Asnc1 library to decode the encoded tim returned from ASNC1; another class two blockers: decode the tim and decode the message-sign - - // Case 1: SNMP-deposit - if (dataSigningEnabledRSU && request.getRsus() != null) { - hexEncodedTim = signTIM(hexEncodedTim, consumedObj); - } - else { - // if header is present, strip it - if (isHeaderPresent(hexEncodedTim)) { - String header = hexEncodedTim.substring(0, hexEncodedTim.indexOf("001F") + 4); - logger.debug("Stripping header from unsigned message: {}", header); - hexEncodedTim = stripHeader(hexEncodedTim); - mfObj.remove(BYTES); - mfObj.put(BYTES, hexEncodedTim); - dataObj.remove(MESSAGE_FRAME); - dataObj.put(MESSAGE_FRAME, mfObj); - consumedObj.remove(AppContext.PAYLOAD_STRING); - consumedObj.put(AppContext.PAYLOAD_STRING, dataObj); - } - } - - if (null != request.getSnmp() && null != request.getRsus() && null != hexEncodedTim) { - logger.info("Sending message to RSUs..."); - asn1CommandManager.sendToRsus(request, hexEncodedTim); - } - - hexEncodedTim = mfObj.getString(BYTES); - - // Case 2: SDX-deposit - if (dataSigningEnabledSDW && request.getSdw() != null) { - hexEncodedTim = signTIM(hexEncodedTim, consumedObj); - } - - if (request.getSdw() != null) { - // Case 2 only - - logger.debug("Publishing message for round 2 encoding!"); - String xmlizedMessage = asn1CommandManager.packageSignedTimIntoAsd(request, hexEncodedTim); - - stringMsgProducer.send(odeProperties.getKafkaTopicAsn1EncoderInput(), null, xmlizedMessage); - } - - } else { - //We have encoded ASD. It could be either UNSECURED or secured. - logger.debug("securitySvcsSignatureUri = {}", odeProperties.getSecuritySvcsSignatureUri()); - if (dataSigningEnabledSDW && request.getSdw() != null) { - logger.debug("Signed message received. Depositing it to SDW."); - // We have a ASD with signed MessageFrame - // Case 3 - JSONObject asdObj = dataObj.getJSONObject(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING); - try { - JSONObject deposit = new JSONObject(); - deposit.put("estimatedRemovalDate", request.getSdw().getEstimatedRemovalDate()); - deposit.put("encodedMsg", asdObj.getString(BYTES)); - asn1CommandManager.depositToSdw(deposit.toString()); - } catch (JSONException | Asn1CommandManagerException e) { - String msg = ERROR_ON_SDX_DEPOSIT; - logger.error(msg, e); - } - } else { - logger.debug("Unsigned ASD received. Depositing it to SDW."); - //We have ASD with UNSECURED MessageFrame - processEncodedTimUnsecured(request, consumedObj); - } - } - } - - public void processEncodedTimUnsecured(ServiceRequest request, JSONObject consumedObj) { - // Send TIMs and record results - HashMap responseList = new HashMap<>(); - - JSONObject dataObj = consumedObj - .getJSONObject(AppContext.PAYLOAD_STRING) - .getJSONObject(AppContext.DATA_STRING); - - if (null != request.getSdw()) { - JSONObject asdObj = null; - if (dataObj.has(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING)) { - asdObj = dataObj.getJSONObject(Asn1CommandManager.ADVISORY_SITUATION_DATA_STRING); - } else { - logger.error("ASD structure present in metadata but not in JSONObject!"); - } - - if (null != asdObj) { - String asdBytes = asdObj.getString(BYTES); - - try { - JSONObject deposit = new JSONObject(); - deposit.put("estimatedRemovalDate", request.getSdw().getEstimatedRemovalDate()); - deposit.put("encodedMsg", asdBytes); - asn1CommandManager.depositToSdw(deposit.toString()); - logger.info("SDX deposit successful."); - } catch (Exception e) { - String msg = ERROR_ON_SDX_DEPOSIT; - logger.error(msg, e); - EventLogger.logger.error(msg, e); - } - - } else if (logger.isErrorEnabled()) { // Added to avoid Sonar's "Invoke method(s) only conditionally." code smell - String msg = "ASN.1 Encoder did not return ASD encoding {}"; - EventLogger.logger.error(msg, consumedObj.toString()); - logger.error(msg, consumedObj.toString()); - } + // publish to Tim expiration kafka + stringMsgProducer.send(jsonTopics.getTimCertExpiration(), null, + timWithExpiration.toString()); + + return hexEncodedTim; + + } catch (JsonUtilsException e1) { + log.error("Unable to parse signed message response ", e1); + } + return encodedTIM; + } + + /** + * Checks if header is present in encoded message. + */ + private boolean isHeaderPresent(String encodedTim) { + return encodedTim.indexOf("001F") > 0; + } + + /** + * Strips header from unsigned message (all bytes before 001F hex value). + */ + private String stripHeader(String encodedUnsignedTim) { + String toReturn = ""; + // find 001F hex value + int index = encodedUnsignedTim.indexOf("001F"); + if (index == -1) { + log.warn("No '001F' hex value found in encoded message"); + return encodedUnsignedTim; + } + // strip everything before 001F + toReturn = encodedUnsignedTim.substring(index); + return toReturn; + } + + private void depositToFilteredTopic(JSONObject metadataObj, String hexEncodedTim) { + try { + String generatedBy = metadataObj.getString("recordGeneratedBy"); + String streamId = metadataObj.getJSONObject("serialId").getString("streamId"); + if (!generatedBy.equalsIgnoreCase("TMC")) { + log.debug("Not a TMC-generated TIM. Skipping deposit to TMC-filtered topic."); + return; } - if (dataObj.has(MESSAGE_FRAME)) { - JSONObject mfObj = dataObj.getJSONObject(MESSAGE_FRAME); - String encodedTim = mfObj.getString(BYTES); - - // if header is present, strip it - if (isHeaderPresent(encodedTim)) { - String header = encodedTim.substring(0, encodedTim.indexOf("001F") + 4); - logger.debug("Stripping header from unsigned message: {}", header); - encodedTim = stripHeader(encodedTim); - mfObj.remove(BYTES); - mfObj.put(BYTES, encodedTim); - dataObj.remove(MESSAGE_FRAME); - dataObj.put(MESSAGE_FRAME, mfObj); - consumedObj.remove(AppContext.PAYLOAD_STRING); - consumedObj.put(AppContext.PAYLOAD_STRING, dataObj); - } - - logger.debug("Encoded message - phase 2: {}", encodedTim); - - // only send message to rsu if snmp, rsus, and message frame fields are present - if (null != request.getSnmp() && null != request.getRsus() && null != encodedTim) { - logger.debug("Encoded message phase 3: {}", encodedTim); - asn1CommandManager.sendToRsus(request, encodedTim); - } - } + String timString = odeTimJsonTopology.query(streamId); + if (timString != null) { + // Set ASN1 data in TIM metadata + JSONObject timJSON = new JSONObject(timString); + JSONObject metadataJSON = timJSON.getJSONObject("metadata"); + metadataJSON.put("asn1", hexEncodedTim); + timJSON.put("metadata", metadataJSON); - logger.info("TIM deposit response {}", responseList); - } - - public String signTIM(String encodedTIM, JSONObject consumedObj) { - logger.debug("Sending message for signature! "); - String base64EncodedTim = CodecUtils.toBase64( - CodecUtils.fromHex(encodedTIM)); - JSONObject metadataObjs = consumedObj.getJSONObject(AppContext.METADATA_STRING); - // get max duration time and convert from minutes to milliseconds (unsigned - // integer valid 0 to 2^32-1 in units of - // milliseconds.) from metadata - int maxDurationTime = Integer.valueOf(metadataObjs.get("maxDurationTime").toString()) * 60 * 1000; - String timpacketID = metadataObjs.getString("odePacketID"); - String timStartDateTime = metadataObjs.getString("odeTimStartDateTime"); - String signedResponse = asn1CommandManager.sendForSignature(base64EncodedTim,maxDurationTime); - try { - String hexEncodedTim = CodecUtils.toHex( - CodecUtils.fromBase64( - JsonUtils.toJSONObject(JsonUtils.toJSONObject(signedResponse).getString("result")).getString("message-signed"))); - - JSONObject timWithExpiration = new JSONObject(); - timWithExpiration.put("packetID", timpacketID); - timWithExpiration.put("startDateTime", timStartDateTime); - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - try { - JSONObject jsonResult = JsonUtils - .toJSONObject((JsonUtils.toJSONObject(signedResponse).getString("result"))); - // messageExpiry uses unit of seconds - long messageExpiry = Long.valueOf(jsonResult.getString("message-expiry")); - timWithExpiration.put("expirationDate", dateFormat.format(new Date(messageExpiry * 1000))); - } catch (Exception e) { - logger.error("Unable to get expiration date from signed messages response {}", e); - timWithExpiration.put("expirationDate", "null"); - } - - try { - Date parsedtimTimeStamp = dateFormat.parse(timStartDateTime); - Date requiredExpirationDate = new Date(); - requiredExpirationDate.setTime(parsedtimTimeStamp.getTime() + maxDurationTime); - timWithExpiration.put("requiredExpirationDate", dateFormat.format(requiredExpirationDate)); - } catch (Exception e) { - logger.error("Unable to parse requiredExpirationDate {}", e); - timWithExpiration.put("requiredExpirationDate", "null"); - } - //publish to Tim expiration kafka - stringMsgProducer.send(odeProperties.getKafkaTopicSignedOdeTimJsonExpiration(), null, - timWithExpiration.toString()); - - return hexEncodedTim; - - } catch (JsonUtilsException e1) { - logger.error("Unable to parse signed message response {}", e1); - } - return encodedTIM; - } - - /** - * Checks if header is present in encoded message - */ - private boolean isHeaderPresent(String encodedTim) { - return encodedTim.indexOf("001F") > 0; - } - - /** - * Strips header from unsigned message (all bytes before 001F hex value) - */ - private String stripHeader(String encodedUnsignedTim) { - String toReturn = ""; - // find 001F hex value - int index = encodedUnsignedTim.indexOf("001F"); - if (index == -1) { - logger.warn("No '001F' hex value found in encoded message"); - return encodedUnsignedTim; + // Send the message w/ asn1 data to the TMC-filtered topic + stringMsgProducer.send(jsonTopics.getTimTmcFiltered(), null, timJSON.toString()); } - // strip everything before 001F - toReturn = encodedUnsignedTim.substring(index); - return toReturn; - } + } catch (JSONException e) { + log.error("Error while fetching recordGeneratedBy field: {}", e.getMessage()); + } catch (Exception e) { + log.error("Error while updating TIM: {}", e.getMessage()); + } + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/AsnCodecRouterServiceController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/AsnCodecRouterServiceController.java index 03ba821d6..7734b2115 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/AsnCodecRouterServiceController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/AsnCodecRouterServiceController.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,49 +15,50 @@ ******************************************************************************/ package us.dot.its.jpo.ode.services.asn1; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; - -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.topics.SDXDepositorTopics; +import us.dot.its.jpo.ode.rsu.RsuProperties; +import us.dot.its.jpo.ode.security.SecurityServicesProperties; import us.dot.its.jpo.ode.wrapper.MessageConsumer; /** * Launches ToJsonConverter service */ @Controller +@Slf4j public class AsnCodecRouterServiceController { - private static final Logger logger = LoggerFactory.getLogger(AsnCodecRouterServiceController.class); - org.apache.kafka.common.serialization.Serdes bas; - - @Autowired - public AsnCodecRouterServiceController(OdeProperties odeProps) { - super(); - - logger.info("Starting {}", this.getClass().getSimpleName()); - - // asn1_codec Decoder Routing - logger.info("Routing DECODED data received ASN.1 Decoder"); - - Asn1DecodedDataRouter decoderRouter = new Asn1DecodedDataRouter(odeProps); - - MessageConsumer asn1DecoderConsumer = MessageConsumer.defaultStringMessageConsumer( - odeProps.getKafkaBrokers(), this.getClass().getSimpleName(), decoderRouter); + @Autowired + public AsnCodecRouterServiceController(OdeKafkaProperties odeKafkaProperties, + JsonTopics jsonTopics, + Asn1CoderTopics asn1CoderTopics, + SDXDepositorTopics sdxDepositorTopics, + RsuProperties rsuProperties, + SecurityServicesProperties securityServicesProperties) { + super(); - asn1DecoderConsumer.setName("Asn1DecoderConsumer"); - decoderRouter.start(asn1DecoderConsumer, odeProps.getKafkaTopicAsn1DecoderOutput()); + log.info("Starting {}", this.getClass().getSimpleName()); - // asn1_codec Encoder Routing - logger.info("Routing ENCODED data received ASN.1 Encoder"); + // asn1_codec Encoder Routing + log.info("Routing ENCODED data received ASN.1 Encoder"); - Asn1EncodedDataRouter encoderRouter = new Asn1EncodedDataRouter(odeProps); + Asn1EncodedDataRouter encoderRouter = new Asn1EncodedDataRouter( + odeKafkaProperties, + asn1CoderTopics, + jsonTopics, + sdxDepositorTopics, + rsuProperties, + securityServicesProperties); - MessageConsumer encoderConsumer = MessageConsumer.defaultStringMessageConsumer( - odeProps.getKafkaBrokers(), this.getClass().getSimpleName(), encoderRouter); + MessageConsumer encoderConsumer = MessageConsumer.defaultStringMessageConsumer( + odeKafkaProperties.getBrokers(), this.getClass().getSimpleName(), encoderRouter); - encoderConsumer.setName("Asn1EncoderConsumer"); - encoderRouter.start(encoderConsumer, odeProps.getKafkaTopicAsn1EncoderOutput()); - } + encoderConsumer.setName("Asn1EncoderConsumer"); + encoderRouter.start(encoderConsumer, asn1CoderTopics.getEncoderOutput()); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/AbstractAsn1DecodeMessageJSON.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/AbstractAsn1DecodeMessageJSON.java deleted file mode 100644 index 5bcab7e3d..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/AbstractAsn1DecodeMessageJSON.java +++ /dev/null @@ -1,41 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.core.JsonProcessingException; - -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.OdeData; -import us.dot.its.jpo.ode.util.XmlUtils; -import us.dot.its.jpo.ode.wrapper.AbstractSubscriberProcessor; - -public abstract class AbstractAsn1DecodeMessageJSON extends AbstractSubscriberProcessor { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - - protected StringPublisher codecPublisher; - protected String payload_start_flag; - - public AbstractAsn1DecodeMessageJSON() { - super(); - } - - public AbstractAsn1DecodeMessageJSON(StringPublisher codecPublisher, String payload_start_flag) { - super(); - this.codecPublisher = codecPublisher; - this.payload_start_flag = payload_start_flag; - } - - protected void publishEncodedMessageToAsn1Decoder(OdeData odeData) { - XmlUtils xmlUtils = new XmlUtils(); - try { - logger.debug("Sending encoded message payload XML to ASN1 codec {}", xmlUtils.toXml(odeData)); - codecPublisher.publish(xmlUtils.toXml(odeData), - codecPublisher.getOdeProperties().getKafkaTopicAsn1DecoderInput()); - } catch (JsonProcessingException e) { - logger.error("Error sending encoded message payload XML to ASN1 codec {}", e.getMessage()); - e.printStackTrace(); - } - - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSON.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSON.java deleted file mode 100644 index 49d244cf0..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSON.java +++ /dev/null @@ -1,56 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import org.apache.tomcat.util.buf.HexUtils; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.Asn1Encoding; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeBsmMetadata; -import us.dot.its.jpo.ode.uper.UperUtil; - -public class Asn1DecodeBSMJSON extends AbstractAsn1DecodeMessageJSON { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - private ObjectMapper objectMapper = new ObjectMapper(); - - public Asn1DecodeBSMJSON(OdeProperties odeProps) { - super(new StringPublisher(odeProps), UperUtil.getBsmStartFlag()); - } - - @Override - protected OdeAsn1Data process(String consumedData) { - OdeAsn1Data messageToPublish = null; - try { - JSONObject rawBsmJsonObject = new JSONObject(consumedData); - - String jsonStringMetadata = rawBsmJsonObject.get("metadata").toString(); - OdeBsmMetadata metadata = objectMapper.readValue(jsonStringMetadata, OdeBsmMetadata.class); - - Asn1Encoding unsecuredDataEncoding = new Asn1Encoding("unsecuredData", "MessageFrame", EncodingRule.UPER); - metadata.addEncoding(unsecuredDataEncoding); - - String payloadHexString = ((JSONObject)((JSONObject) rawBsmJsonObject.get("payload")).get("data")).getString("bytes"); - payloadHexString = UperUtil.stripDot2Header(payloadHexString, super.payload_start_flag); - - if (payloadHexString.equals("BAD DATA")) { - logger.error("NON-BSM DATA ENCOUNTERED IN THE ASN1DECODEBSMJSON CLASS"); - return null; - } - - OdeAsn1Payload payload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - - messageToPublish = new OdeAsn1Data(metadata, payload); - publishEncodedMessageToAsn1Decoder(messageToPublish); - } catch (Exception e) { - logger.error("Error publishing to Asn1DecoderInput: {}", e.getMessage()); - } - return messageToPublish; - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSON.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSON.java deleted file mode 100644 index 61f821c91..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSON.java +++ /dev/null @@ -1,57 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import org.apache.tomcat.util.buf.HexUtils; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.Asn1Encoding; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeMapMetadata; -import us.dot.its.jpo.ode.uper.UperUtil; - -public class Asn1DecodeMAPJSON extends AbstractAsn1DecodeMessageJSON { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - private ObjectMapper objectMapper = new ObjectMapper(); - - - public Asn1DecodeMAPJSON(OdeProperties odeProps) { - super(new StringPublisher(odeProps), UperUtil.getMapStartFlag()); - } - - @Override - protected OdeAsn1Data process(String consumedData) { - OdeAsn1Data messageToPublish = null; - try { - JSONObject rawMapJsonObject = new JSONObject(consumedData); - - String jsonStringMetadata = rawMapJsonObject.get("metadata").toString(); - OdeMapMetadata metadata = objectMapper.readValue(jsonStringMetadata, OdeMapMetadata.class); - - Asn1Encoding unsecuredDataEncoding = new Asn1Encoding("unsecuredData", "MessageFrame", EncodingRule.UPER); - metadata.addEncoding(unsecuredDataEncoding); - - String payloadHexString = ((JSONObject)((JSONObject) rawMapJsonObject.get("payload")).get("data")).getString("bytes"); - payloadHexString = UperUtil.stripDot2Header(payloadHexString, super.payload_start_flag); - - if (payloadHexString.equals("BAD DATA")) { - logger.error("NON-MAP DATA ENCOUNTERED IN THE ASN1DECODEMAPJSON CLASS"); - return null; - } - - OdeAsn1Payload payload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - - messageToPublish = new OdeAsn1Data(metadata, payload); - publishEncodedMessageToAsn1Decoder(messageToPublish); - } catch (Exception e) { - logger.error("Error publishing to Asn1DecoderInput: {}", e.getMessage()); - } - return messageToPublish; - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSON.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSON.java deleted file mode 100644 index 1729348ac..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSON.java +++ /dev/null @@ -1,56 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import org.apache.tomcat.util.buf.HexUtils; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.Asn1Encoding; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdePsmMetadata; -import us.dot.its.jpo.ode.uper.UperUtil; - -public class Asn1DecodePSMJSON extends AbstractAsn1DecodeMessageJSON { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - private ObjectMapper objectMapper = new ObjectMapper(); - - public Asn1DecodePSMJSON(OdeProperties odeProps) { - super(new StringPublisher(odeProps), UperUtil.getPsmStartFlag()); - } - - @Override - protected OdeAsn1Data process(String consumedData) { - OdeAsn1Data messageToPublish = null; - try { - JSONObject rawPsmJsonObject = new JSONObject(consumedData); - - String jsonStringMetadata = rawPsmJsonObject.get("metadata").toString(); - OdePsmMetadata metadata = objectMapper.readValue(jsonStringMetadata, OdePsmMetadata.class); - - Asn1Encoding unsecuredDataEncoding = new Asn1Encoding("unsecuredData", "MessageFrame", EncodingRule.UPER); - metadata.addEncoding(unsecuredDataEncoding); - - String payloadHexString = ((JSONObject)((JSONObject) rawPsmJsonObject.get("payload")).get("data")).getString("bytes"); - payloadHexString = UperUtil.stripDot2Header(payloadHexString, super.payload_start_flag); - - if (payloadHexString.equals("BAD DATA")) { - logger.error("NON-PSM DATA ENCOUNTERED IN THE ASN1DECODEPSMJSON CLASS"); - return null; - } - - OdeAsn1Payload payload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - - messageToPublish = new OdeAsn1Data(metadata, payload); - publishEncodedMessageToAsn1Decoder(messageToPublish); - } catch (Exception e) { - logger.error("Error publishing to Asn1DecoderInput: {}", e.getMessage()); - } - return messageToPublish; - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSON.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSON.java deleted file mode 100644 index 33077257f..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSON.java +++ /dev/null @@ -1,58 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import org.apache.tomcat.util.buf.HexUtils; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.Asn1Encoding; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeSpatMetadata; -import us.dot.its.jpo.ode.uper.UperUtil; - -public class Asn1DecodeSPATJSON extends AbstractAsn1DecodeMessageJSON { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - private ObjectMapper objectMapper = new ObjectMapper(); - - public Asn1DecodeSPATJSON(OdeProperties odeProps) { - super(new StringPublisher(odeProps), UperUtil.getSpatStartFlag()); - } - - @Override - protected OdeAsn1Data process(String consumedData) { - OdeAsn1Data messageToPublish = null; - try { - JSONObject rawSpatJsonObject = new JSONObject(consumedData); - - String jsonStringMetadata = rawSpatJsonObject.get("metadata").toString(); - OdeSpatMetadata metadata = objectMapper.readValue(jsonStringMetadata, OdeSpatMetadata.class); - - Asn1Encoding unsecuredDataEncoding = new Asn1Encoding("unsecuredData", "MessageFrame", EncodingRule.UPER); - metadata.addEncoding(unsecuredDataEncoding); - - String payloadHexString = ((JSONObject) ((JSONObject) rawSpatJsonObject.get("payload")).get("data")) - .getString("bytes"); - payloadHexString = UperUtil.stripDot2Header(payloadHexString, super.payload_start_flag); - - if (payloadHexString.equals("BAD DATA")) { - logger.error("NON-SPAT DATA ENCOUNTERED IN THE ASN1DECODESPATJSON CLASS"); - return null; - } - - OdeAsn1Payload payload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - - messageToPublish = new OdeAsn1Data(metadata, payload); - publishEncodedMessageToAsn1Decoder(messageToPublish); - } catch (Exception e) { - logger.error("Error publishing to Asn1DecoderInput: {}", e.getMessage()); - } - return messageToPublish; - } - -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSON.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSON.java deleted file mode 100644 index 5f726f892..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSON.java +++ /dev/null @@ -1,57 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import org.apache.tomcat.util.buf.HexUtils; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.Asn1Encoding; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeSrmMetadata; -import us.dot.its.jpo.ode.uper.UperUtil; - -public class Asn1DecodeSRMJSON extends AbstractAsn1DecodeMessageJSON { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - private ObjectMapper objectMapper = new ObjectMapper(); - - public Asn1DecodeSRMJSON(OdeProperties odeProps) { - super(new StringPublisher(odeProps), UperUtil.getSrmStartFlag()); - } - - @Override - protected OdeAsn1Data process(String consumedData) { - OdeAsn1Data messageToPublish = null; - try { - JSONObject rawSrmJsonObject = new JSONObject(consumedData); - - String jsonStringMetadata = rawSrmJsonObject.get("metadata").toString(); - OdeSrmMetadata metadata = objectMapper.readValue(jsonStringMetadata, OdeSrmMetadata.class); - - Asn1Encoding unsecuredDataEncoding = new Asn1Encoding("unsecuredData", "MessageFrame", EncodingRule.UPER); - metadata.addEncoding(unsecuredDataEncoding); - - String payloadHexString = ((JSONObject) ((JSONObject) rawSrmJsonObject.get("payload")).get("data")) - .getString("bytes"); - payloadHexString = UperUtil.stripDot2Header(payloadHexString, super.payload_start_flag); - - if (payloadHexString.equals("BAD DATA")) { - logger.error("NON-SRM DATA ENCOUNTERED IN THE ASN1DECODESRMJSON CLASS"); - return null; - } - - OdeAsn1Payload payload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - - messageToPublish = new OdeAsn1Data(metadata, payload); - publishEncodedMessageToAsn1Decoder(messageToPublish); - } catch (Exception e) { - logger.error("Error publishing to Asn1DecoderInput: {}", e.getMessage()); - } - return messageToPublish; - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSON.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSON.java deleted file mode 100644 index ae9042fa9..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSON.java +++ /dev/null @@ -1,57 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import org.apache.tomcat.util.buf.HexUtils; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.Asn1Encoding; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeSsmMetadata; -import us.dot.its.jpo.ode.uper.UperUtil; - -public class Asn1DecodeSSMJSON extends AbstractAsn1DecodeMessageJSON { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - private ObjectMapper objectMapper = new ObjectMapper(); - - public Asn1DecodeSSMJSON(OdeProperties odeProps) { - super(new StringPublisher(odeProps), UperUtil.getSsmStartFlag()); - } - - @Override - protected OdeAsn1Data process(String consumedData) { - OdeAsn1Data messageToPublish = null; - try { - JSONObject rawSsmJsonObject = new JSONObject(consumedData); - - String jsonStringMetadata = rawSsmJsonObject.get("metadata").toString(); - OdeSsmMetadata metadata = objectMapper.readValue(jsonStringMetadata, OdeSsmMetadata.class); - - Asn1Encoding unsecuredDataEncoding = new Asn1Encoding("unsecuredData", "MessageFrame", EncodingRule.UPER); - metadata.addEncoding(unsecuredDataEncoding); - - String payloadHexString = ((JSONObject) ((JSONObject) rawSsmJsonObject.get("payload")).get("data")) - .getString("bytes"); - payloadHexString = UperUtil.stripDot2Header(payloadHexString, super.payload_start_flag); - - if (payloadHexString.equals("BAD DATA")) { - logger.error("NON-SSM DATA ENCOUNTERED IN THE ASN1DECODESSMJSON CLASS"); - return null; - } - - OdeAsn1Payload payload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - - messageToPublish = new OdeAsn1Data(metadata, payload); - publishEncodedMessageToAsn1Decoder(messageToPublish); - } catch (Exception e) { - logger.error("Error publishing to Asn1DecoderInput: {}", e.getMessage()); - } - return messageToPublish; - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSON.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSON.java deleted file mode 100644 index cf612dec1..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSON.java +++ /dev/null @@ -1,56 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import org.apache.tomcat.util.buf.HexUtils; -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import com.fasterxml.jackson.databind.ObjectMapper; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.model.Asn1Encoding; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeTimMetadata; -import us.dot.its.jpo.ode.uper.UperUtil; - -public class Asn1DecodeTIMJSON extends AbstractAsn1DecodeMessageJSON { - private Logger logger = LoggerFactory.getLogger(this.getClass()); - private ObjectMapper objectMapper = new ObjectMapper(); - - public Asn1DecodeTIMJSON(OdeProperties odeProps) { - super(new StringPublisher(odeProps), UperUtil.getTimStartFlag()); - } - - @Override - protected OdeAsn1Data process(String consumedData) { - OdeAsn1Data messageToPublish = null; - try { - JSONObject rawTimJsonObject = new JSONObject(consumedData); - - String jsonStringMetadata = rawTimJsonObject.get("metadata").toString(); - OdeTimMetadata metadata = objectMapper.readValue(jsonStringMetadata, OdeTimMetadata.class); - - Asn1Encoding unsecuredDataEncoding = new Asn1Encoding("unsecuredData", "MessageFrame", EncodingRule.UPER); - metadata.addEncoding(unsecuredDataEncoding); - - String payloadHexString = ((JSONObject) ((JSONObject) rawTimJsonObject.get("payload")).get("data")).getString("bytes"); - payloadHexString = UperUtil.stripDot2Header(payloadHexString, super.payload_start_flag); - - if (payloadHexString.equals("BAD DATA")) { - logger.error("NON-TIM DATA ENCOUNTERED IN THE ASN1DECODETIMJSON CLASS"); - return null; - } - - OdeAsn1Payload payload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - - messageToPublish = new OdeAsn1Data(metadata, payload); - publishEncodedMessageToAsn1Decoder(messageToPublish); - } catch (Exception e) { - logger.error("Error publishing to Asn1DecoderInput: {}", e.getMessage()); - } - return messageToPublish; - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/AsnCodecMessageServiceController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/AsnCodecMessageServiceController.java deleted file mode 100644 index e7954ca46..000000000 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/asn1/message/AsnCodecMessageServiceController.java +++ /dev/null @@ -1,86 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.wrapper.MessageConsumer; - -/*** - * Launch sending encoded message service - */ -@Controller -public class AsnCodecMessageServiceController { - - private static final Logger logger = LoggerFactory.getLogger(AsnCodecMessageServiceController.class); - - @Autowired - public AsnCodecMessageServiceController(OdeProperties odeProps) { - super(); - logger.info("Starting {} ", this.getClass().getSimpleName()); - - // asn1_codec Decoder Routing - // BSM - logger.info("Send encoded BSM to ASN.1 Decoder"); - Asn1DecodeBSMJSON asn1DecodeBSMJSON = new Asn1DecodeBSMJSON(odeProps); - - MessageConsumer asn1RawBSMJSONConsumer = MessageConsumer.defaultStringMessageConsumer( - odeProps.getKafkaBrokers(), this.getClass().getSimpleName(), asn1DecodeBSMJSON); - asn1RawBSMJSONConsumer.setName("asn1DecodeBSMJSON"); - asn1DecodeBSMJSON.start(asn1RawBSMJSONConsumer, odeProps.getKafkaTopicOdeRawEncodedBSMJson()); - - // SPAT - logger.info("Send encoded SPAT to ASN.1 Decoder"); - Asn1DecodeSPATJSON asn1DecodeSPATJSON = new Asn1DecodeSPATJSON(odeProps); - - MessageConsumer asn1RawSPATJSONConsumer = MessageConsumer.defaultStringMessageConsumer( - odeProps.getKafkaBrokers(), this.getClass().getSimpleName(), asn1DecodeSPATJSON); - asn1RawSPATJSONConsumer.setName("asn1DecodeSPATJSON"); - asn1DecodeSPATJSON.start(asn1RawSPATJSONConsumer, odeProps.getKafkaTopicOdeRawEncodedSPATJson()); - - // SSM - logger.info("Send encoded SSM to ASN.1 Decoder"); - Asn1DecodeSSMJSON asn1DecodeSSMJSON = new Asn1DecodeSSMJSON(odeProps); - - MessageConsumer asn1RawSSMJSONConsumer = MessageConsumer.defaultStringMessageConsumer( - odeProps.getKafkaBrokers(), this.getClass().getSimpleName(), asn1DecodeSSMJSON); - asn1RawSSMJSONConsumer.setName("asn1DecodeSSMJSON"); - asn1DecodeSSMJSON.start(asn1RawSSMJSONConsumer, odeProps.getKafkaTopicOdeRawEncodedSSMJson()); - - // SRM - logger.info("Send encoded SRM to ASN.1 Decoder"); - Asn1DecodeSRMJSON asn1DecodeSRMJSON = new Asn1DecodeSRMJSON(odeProps); - - MessageConsumer asn1RawSRMJSONConsumer = MessageConsumer.defaultStringMessageConsumer( - odeProps.getKafkaBrokers(), this.getClass().getSimpleName(), asn1DecodeSRMJSON); - asn1RawSRMJSONConsumer.setName("asn1DecodeSRMJSON"); - asn1DecodeSRMJSON.start(asn1RawSRMJSONConsumer, odeProps.getKafkaTopicOdeRawEncodedSRMJson()); - - // TIM - logger.info("Send encoded TIM to ASN.1 Decoder"); - Asn1DecodeTIMJSON asn1DecodeTIMJSON = new Asn1DecodeTIMJSON(odeProps); - - MessageConsumer asn1RawTIMJSONConsumer = MessageConsumer.defaultStringMessageConsumer( - odeProps.getKafkaBrokers(), this.getClass().getSimpleName(), asn1DecodeTIMJSON); - asn1RawTIMJSONConsumer.setName("asn1DecodeTIMJSON"); - asn1DecodeTIMJSON.start(asn1RawTIMJSONConsumer, odeProps.getKafkaTopicOdeRawEncodedTIMJson()); - - //MAP - logger.info("Send encoded MAP to ASN.1 Decoder"); - Asn1DecodeMAPJSON asn1DecodeMAPSON = new Asn1DecodeMAPJSON(odeProps); - MessageConsumer asn1RawMAPJSONConsumer = MessageConsumer.defaultStringMessageConsumer( - odeProps.getKafkaBrokers(), this.getClass().getSimpleName(), asn1DecodeMAPSON); - asn1RawMAPJSONConsumer.setName("asn1DecodeMAPJSON"); - asn1DecodeMAPSON.start(asn1RawMAPJSONConsumer, odeProps.getKafkaTopicOdeRawEncodedMAPJson()); - - //PSM - logger.info("Send encoded PSM to ASN.1 Decoder"); - Asn1DecodePSMJSON asn1DecodePSMSON = new Asn1DecodePSMJSON(odeProps); - MessageConsumer asn1RawPSMJSONConsumer = MessageConsumer.defaultStringMessageConsumer( - odeProps.getKafkaBrokers(), this.getClass().getSimpleName(), asn1DecodePSMSON); - asn1RawPSMJSONConsumer.setName("asn1DecodePSMJSON"); - asn1DecodePSMSON.start(asn1RawPSMJSONConsumer, odeProps.getKafkaTopicOdeRawEncodedPSMJson()); - } -} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/json/ToJsonConverter.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/json/ToJsonConverter.java index 942380d87..d45d91d46 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/json/ToJsonConverter.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/json/ToJsonConverter.java @@ -15,7 +15,7 @@ ******************************************************************************/ package us.dot.its.jpo.ode.services.json; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.util.JsonUtils; import us.dot.its.jpo.ode.wrapper.AbstractSubPubTransformer; import us.dot.its.jpo.ode.wrapper.MessageProducer; @@ -25,13 +25,13 @@ */ public class ToJsonConverter extends AbstractSubPubTransformer { - private boolean verbose; + private final boolean verbose; - public ToJsonConverter(OdeProperties odeProps, boolean verbose, String outTopic) { + public ToJsonConverter(OdeKafkaProperties odeKafkaProperties, boolean verbose, String outTopic) { super(MessageProducer.defaultStringMessageProducer( - odeProps.getKafkaBrokers(), - odeProps.getKafkaProducerType(), - odeProps.getKafkaTopicsDisabledSet()), outTopic); + odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), + odeKafkaProperties.getDisabledTopics()), outTopic); this.verbose = verbose; } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/json/ToJsonServiceController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/json/ToJsonServiceController.java index 5febab02a..77f0f79e8 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/json/ToJsonServiceController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/services/json/ToJsonServiceController.java @@ -15,12 +15,12 @@ ******************************************************************************/ package us.dot.its.jpo.ode.services.json; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; - -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.PojoTopics; import us.dot.its.jpo.ode.wrapper.MessageConsumer; import us.dot.its.jpo.ode.wrapper.serdes.OdeBsmDeserializer; @@ -28,28 +28,27 @@ * Launches ToJsonConverter service */ @Controller +@Slf4j public class ToJsonServiceController { - - private static final Logger logger = LoggerFactory.getLogger(ToJsonServiceController.class); - - private OdeProperties odeProperties; + + private final String brokers; @Autowired - public ToJsonServiceController(OdeProperties odeProps) { + public ToJsonServiceController(OdeKafkaProperties odeKafkaProperties, JsonTopics jsonTopics, PojoTopics pojoTopics) { super(); - this.odeProperties = odeProps; + this.brokers = odeKafkaProperties.getBrokers(); // BSM POJO --> JSON converter - launchConverter(odeProps.getKafkaTopicOdeBsmPojo(), OdeBsmDeserializer.class.getName(), - new ToJsonConverter<>(odeProps, false, odeProps.getKafkaTopicOdeBsmJson())); + launchConverter(pojoTopics.getBsm(), OdeBsmDeserializer.class.getName(), + new ToJsonConverter<>(odeKafkaProperties, false, jsonTopics.getBsm())); } private void launchConverter(String fromTopic, String serializerFQN, ToJsonConverter jsonConverter) { - logger.info("Starting JSON converter, converting records from topic {} and publishing to topic {} ", fromTopic, + log.info("Starting JSON converter, converting records from topic {} and publishing to topic {} ", fromTopic, jsonConverter.getOutputTopic()); - MessageConsumer consumer = new MessageConsumer<>(odeProperties.getKafkaBrokers(), + MessageConsumer consumer = new MessageConsumer<>(this.brokers, this.getClass().getSimpleName(), jsonConverter, serializerFQN); consumer.setName(this.getClass().getName() + fromTopic + "Consumer"); diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/snmp/SnmpSession.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/snmp/SnmpSession.java index e936bcbf7..9fdeeede0 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/snmp/SnmpSession.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/snmp/SnmpSession.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,9 +15,6 @@ ******************************************************************************/ package us.dot.its.jpo.ode.snmp; -import java.io.IOException; -import java.text.ParseException; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.snmp4j.PDU; @@ -41,13 +38,15 @@ import org.snmp4j.smi.OctetString; import org.snmp4j.smi.VariableBinding; import org.snmp4j.transport.DefaultUdpTransportMapping; - import us.dot.its.jpo.ode.eventlog.EventLogger; import us.dot.its.jpo.ode.plugin.RoadSideUnit.RSU; -import us.dot.its.jpo.ode.plugin.SnmpProtocol; import us.dot.its.jpo.ode.plugin.SNMP; import us.dot.its.jpo.ode.plugin.ServiceRequest; import us.dot.its.jpo.ode.plugin.ServiceRequest.OdeInternal.RequestVerb; +import us.dot.its.jpo.ode.plugin.SnmpProtocol; + +import java.io.IOException; +import java.text.ParseException; /** * This object is used to abstract away the complexities of SNMP calls and allow @@ -58,369 +57,367 @@ */ public class SnmpSession { - private static final Logger logger = LoggerFactory.getLogger(SnmpSession.class); - - private Snmp snmp; - private TransportMapping transport; - private UserTarget target; - - private boolean ready = false; - private boolean listening; - - /** - * Constructor for SnmpSession - * - * @param props SnmpProperties for the session (target address, retries, - * timeout, etc) - * @throws IOException - */ - public SnmpSession(RSU rsu) throws IOException { - Address addr = GenericAddress.parse(rsu.getRsuTarget() + "/161"); - - // Create a "target" to which a request is sent - target = new UserTarget(); - target.setAddress(addr); - target.setRetries(rsu.getRsuRetries()); - target.setTimeout(rsu.getRsuTimeout()); - target.setVersion(SnmpConstants.version3); - if (rsu.getRsuUsername() != null) { - target.setSecurityLevel(SecurityLevel.AUTH_PRIV); - target.setSecurityName(new OctetString(rsu.getRsuUsername())); - } else { - target.setSecurityLevel(SecurityLevel.NOAUTH_NOPRIV); - } - - // Set up the UDP transport mapping over which requests are sent - transport = null; - try { - transport = new DefaultUdpTransportMapping(); - } catch (IOException e) { - throw new IOException("Failed to create UDP transport mapping: {}", e); - } - - // Instantiate the SNMP instance - snmp = new Snmp(transport); - - // Register the security options and create an SNMP "user" - USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0); - SecurityModels.getInstance().addSecurityModel(usm); - if (rsu.getRsuUsername() != null) { - snmp.getUSM().addUser(new OctetString(rsu.getRsuUsername()), new UsmUser(new OctetString(rsu.getRsuUsername()), - AuthSHA.ID, new OctetString(rsu.getRsuPassword()), PrivAES128.ID, new OctetString(rsu.getRsuPassword()))); - } - - // Assert the ready flag so the user can begin sending messages - ready = true; - } - - /** - * Sends a SET-type PDU to the target specified by the constructor. - * - * @param pdu The message content to be sent to the target - * @return ResponseEvent - * @throws IOException - */ - public ResponseEvent set(PDU pdu, Snmp snmpob, UserTarget targetob, Boolean keepOpen) throws IOException { - - // Ensure the object has been instantiated - if (!ready) { - throw new IOException("Tried to send PDU before SNMP sending service is ready."); - } - - if (!listening) { - startListen(); - } - - // Try to send the SNMP request (synchronously) - ResponseEvent responseEvent = null; - try { - // attempt to discover & set authoritative engine ID - byte[] authEngineID = snmpob.discoverAuthoritativeEngineID(targetob.getAddress(), 1000); - if (authEngineID != null && authEngineID.length > 0) { - targetob.setAuthoritativeEngineID(authEngineID); - } - - // send request - responseEvent = snmpob.set(pdu, targetob); - if (!keepOpen) { - snmpob.close(); - } - - // if RSU responded and we didn't get an authEngineID, log a warning - if (responseEvent != null && responseEvent.getResponse() != null) { - if (authEngineID == null) { - logger.warn("Failed to discover authoritative engine ID for SNMP target: {}", targetob.getAddress()); + private static final Logger logger = LoggerFactory.getLogger(SnmpSession.class); + + private Snmp snmp; + private TransportMapping transport; + private UserTarget target; + + private boolean ready = false; + private boolean listening; + + /** + * Constructor for SnmpSession + * + * @param props SnmpProperties for the session (target address, retries, + * timeout, etc) + * @throws IOException + */ + public SnmpSession(RSU rsu) throws IOException { + Address addr = GenericAddress.parse(rsu.getRsuTarget() + "/161"); + + // Create a "target" to which a request is sent + target = new UserTarget(); + target.setAddress(addr); + target.setRetries(rsu.getRsuRetries()); + target.setTimeout(rsu.getRsuTimeout()); + target.setVersion(SnmpConstants.version3); + if (rsu.getRsuUsername() != null) { + target.setSecurityLevel(SecurityLevel.AUTH_PRIV); + target.setSecurityName(new OctetString(rsu.getRsuUsername())); + } else { + target.setSecurityLevel(SecurityLevel.NOAUTH_NOPRIV); + } + + // Set up the UDP transport mapping over which requests are sent + transport = null; + try { + transport = new DefaultUdpTransportMapping(); + } catch (IOException e) { + throw new IOException("Failed to create UDP transport mapping: {}", e); + } + + // Instantiate the SNMP instance + snmp = new Snmp(transport); + + // Register the security options and create an SNMP "user" + USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0); + SecurityModels.getInstance().addSecurityModel(usm); + if (rsu.getRsuUsername() != null) { + snmp.getUSM().addUser(new OctetString(rsu.getRsuUsername()), new UsmUser(new OctetString(rsu.getRsuUsername()), + AuthSHA.ID, new OctetString(rsu.getRsuPassword()), PrivAES128.ID, new OctetString(rsu.getRsuPassword()))); + } + + // Assert the ready flag so the user can begin sending messages + ready = true; + } + + /** + * Sends a SET-type PDU to the target specified by the constructor. + * + * @param pdu The message content to be sent to the target + * @return ResponseEvent + * @throws IOException + */ + public ResponseEvent set(PDU pdu, Snmp snmpob, UserTarget targetob, Boolean keepOpen) throws IOException { + + // Ensure the object has been instantiated + if (!ready) { + throw new IOException("Tried to send PDU before SNMP sending service is ready."); + } + + if (!listening) { + startListen(); + } + + // Try to send the SNMP request (synchronously) + ResponseEvent

responseEvent; + try { + // attempt to discover & set authoritative engine ID + byte[] authEngineID = snmpob.discoverAuthoritativeEngineID(targetob.getAddress(), 1000); + if (authEngineID != null && authEngineID.length > 0) { + targetob.setAuthoritativeEngineID(authEngineID); + } + + // send request + responseEvent = snmpob.set(pdu, targetob); + if (!keepOpen) { + snmpob.close(); + } + + // if RSU responded and we didn't get an authEngineID, log a warning + if (responseEvent != null && responseEvent.getResponse() != null && authEngineID == null) { + logger.warn("Failed to discover authoritative engine ID for SNMP target: {}", targetob.getAddress()); + } + } catch (IOException e) { + throw new IOException("Failed to send SNMP request: " + e); + } + + return responseEvent; + } + + /** + * Sends a SET-type PDU to the target specified by the constructor. + * + * @param pdu The message content to be sent to the target + * @return ResponseEvent + * @throws IOException + */ + public ResponseEvent get(PDU pdu, Snmp snmpob, UserTarget targetob, Boolean keepOpen) throws IOException { + + // Ensure the object has been instantiated + if (!ready) { + throw new IOException("Tried to send PDU before SNMP sending service is ready."); + } + + // Start listening on UDP + if (!listening) { + startListen(); + } + + // Try to send the SNMP request (synchronously) + ResponseEvent responseEvent = null; + try { + responseEvent = snmpob.get(pdu, targetob); + if (!keepOpen) { + snmpob.close(); } - } - } catch (IOException e) { - throw new IOException("Failed to send SNMP request: " + e); - } - - return responseEvent; - } - - /** - * Sends a SET-type PDU to the target specified by the constructor. - * - * @param pdu The message content to be sent to the target - * @return ResponseEvent - * @throws IOException - */ - public ResponseEvent get(PDU pdu, Snmp snmpob, UserTarget targetob, Boolean keepOpen) throws IOException { - - // Ensure the object has been instantiated - if (!ready) { - throw new IOException("Tried to send PDU before SNMP sending service is ready."); - } - - // Start listening on UDP - if (!listening) { - startListen(); - } - - // Try to send the SNMP request (synchronously) - ResponseEvent responseEvent = null; - try { - responseEvent = snmpob.get(pdu, targetob); - if (!keepOpen) { - snmpob.close(); - } - } catch (IOException e) { - throw new IOException("Failed to send SNMP request: " + e); - } - - return responseEvent; - } - - /** - * Start listening for responses - * - * @throws IOException - */ - public void startListen() throws IOException { - transport.listen(); - listening = true; - } - - /** - * Create an SNMP session given the values in - * - * @param tim - The TIM parameters (payload, channel, mode, etc) - * @param props - The SNMP properties (ip, username, password, etc) - * @return ResponseEvent - * @throws TimPduCreatorException - * @throws IOException - * @throws ParseException - */ - public static ResponseEvent createAndSend(SNMP snmp, RSU rsu, String payload, RequestVerb requestVerb, boolean dataSigningEnabledRSU) - throws ParseException, IOException { - - SnmpSession session = new SnmpSession(rsu); - - // Send the PDU - ResponseEvent response = null; - ScopedPDU pdu = SnmpSession.createPDU(snmp, payload, rsu.getRsuIndex(), requestVerb, rsu.getSnmpProtocol(), dataSigningEnabledRSU); - response = session.set(pdu, session.getSnmp(), session.getTarget(), false); - String msg = "Message Sent to {}, index {}: {}"; - EventLogger.logger.debug(msg, rsu.getRsuTarget(), rsu.getRsuIndex(), payload); - logger.debug(msg, rsu.getRsuTarget(), rsu.getRsuIndex(), payload); - return response; - } - - public Snmp getSnmp() { - return snmp; - } - - public void setSnmp(Snmp snmp) { - this.snmp = snmp; - } - - public TransportMapping getTransport() { - return transport; - } - - public void setTransport(TransportMapping transport) { - this.transport = transport; - } - - public UserTarget getTarget() { - return target; - } - - public void setTarget(UserTarget target) { - this.target = target; - } - - public void endSession() throws IOException { - this.snmp.close(); - } - - /** - * Assembles the various RSU elements of a TimParameters object into a usable - * PDU. - * - * @param index Storage index on the RSU - * @param params TimParameters POJO that stores status, channel, payload, etc. - * @return PDU - * @throws ParseException - */ - public static ScopedPDU createPDU(SNMP snmp, String payload, int index, RequestVerb verb, SnmpProtocol snmpProtocol, boolean dataSigningEnabledRSU) throws ParseException { - switch (snmpProtocol) { - case FOURDOT1: - return createPDUWithFourDot1Protocol(snmp, payload, index, verb); - case NTCIP1218: - return createPDUWithNTCIP1218Protocol(snmp, payload, index, verb, dataSigningEnabledRSU); - default: - logger.error("Unknown SNMP protocol: {}", snmpProtocol); - return null; - } - } - - public static VariableBinding getPEncodedVariableBinding(String oid, String val) { - Integer intVal = Integer.parseInt(val, 16); - Integer additionValue = null; - - if (intVal >= 0 && intVal <= 127) { - // P = V - // here we must instantiate the OctetString directly with the hex string to - // avoid inadvertently creating the ASCII character codes - // for instance OctetString.fromString("20", 16) produces the space character (" - // ") rather than hex 20 - return new VariableBinding(new OID(oid), new OctetString(Integer.toHexString(intVal))); - } else if (intVal >= 128 && intVal <= 16511) { - // P = V + 0x7F80 - additionValue = 0x7F80; - } else if (intVal >= 016512 && intVal <= 2113663) { - // P = V + 0xBFBF80 - additionValue = 0xBFBF80; - } else if (intVal >= 2113664 && intVal <= 270549119) { - // P = V + 0xDFDFBF80 - additionValue = 0xDFDFBF80; - } - - if (additionValue != null) { - return new VariableBinding(new OID(oid), - OctetString.fromString(Integer.toHexString(intVal + additionValue), 16)); - } - return null; - } - - private static ScopedPDU createPDUWithFourDot1Protocol(SNMP snmp, String payload, int index, RequestVerb verb) throws ParseException { - ////////////////////////////// - // - OID examples - // - ////////////////////////////// - // rsuSRMStatus.3 = 4 - // --> 1.4.1.11.3 = 4 - // rsuSRMTxChannel.3 = 3 - // --> 1.4.1.5.3 = 178 - // rsuSRMTxMode.3 = 1 - // --> 1.4.1.4.3 = 1 - // rsuSRMPsid.3 x "8003" - // --> 1.4.1.2.3 x "8003" - // rsuSRMDsrcMsgId.3 = 31 - // --> 1.4.1.3.3 = 31 - // rsuSRMTxInterval.3 = 10 - // --> 1.4.1.6.3 = 10 - // rsuSRMDeliveryStart.3 x "07e7051f0c000000" - // --> 1.4.1.7.3 = "07e7051f0c000000" - // rsuSRMDeliveryStop.3 x "07e7060f0c000000" - // --> 1.4.1.8.3 = "07e7060f0c000000" - // rsuSRMPayload.3 x "001f6020100000000000de8f834082729de80d80734d37862d2187864fc2099f1f4028407e53bd01b00e69a6f0c5a409c46c3c300118e69a26fa77a0104b8e69a2e86779e21981414e39a68fd29de697d804fb38e69a50e27796151013d81080020290" - // --> 1.4.1.9.3 = "001f6020100000000000de8f834082729de80d80734d37862d2187864fc2099f1f4028407e53bd01b00e69a6f0c5a409c46c3c300118e69a26fa77a0104b8e69a2e86779e21981414e39a68fd29de697d804fb38e69a50e27796151013d81080020290" - // rsuSRMEnable.3 = 1 - // --> 1.4.1.10.3 = 1 - ////////////////////////////// - - VariableBinding rsuSRMPsid = SnmpFourDot1Protocol.getVbRsuSrmPsid(index, snmp.getRsuid()); - VariableBinding rsuSRMDsrcMsgId = SnmpFourDot1Protocol.getVbRsuSrmDsrcMsgId(index, snmp.getMsgid()); - VariableBinding rsuSRMTxMode = SnmpFourDot1Protocol.getVbRsuSrmTxMode(index, snmp.getMode()); - VariableBinding rsuSRMTxChannel = SnmpFourDot1Protocol.getVbRsuSrmTxChannel(index, snmp.getChannel()); - VariableBinding rsuSRMTxInterval = SnmpFourDot1Protocol.getVbRsuSrmTxInterval(index, snmp.getInterval()); - VariableBinding rsuSRMDeliveryStart = SnmpFourDot1Protocol.getVbRsuSrmDeliveryStart(index, snmp.getDeliverystart()); - VariableBinding rsuSRMDeliveryStop = SnmpFourDot1Protocol.getVbRsuSrmDeliveryStop(index, snmp.getDeliverystop()); - VariableBinding rsuSRMPayload = SnmpFourDot1Protocol.getVbRsuSrmPayload(index, payload); - VariableBinding rsuSRMEnable = SnmpFourDot1Protocol.getVbRsuSrmEnable(index, snmp.getEnable()); - VariableBinding rsuSRMStatus = SnmpFourDot1Protocol.getVbRsuSrmStatus(index, snmp.getStatus()); - - ScopedPDU pdu = new ScopedPDU(); - pdu.add(rsuSRMPsid); - pdu.add(rsuSRMDsrcMsgId); - pdu.add(rsuSRMTxMode); - pdu.add(rsuSRMTxChannel); - pdu.add(rsuSRMTxInterval); - pdu.add(rsuSRMDeliveryStart); - pdu.add(rsuSRMDeliveryStop); - pdu.add(rsuSRMPayload); - pdu.add(rsuSRMEnable); - if (verb == ServiceRequest.OdeInternal.RequestVerb.POST) { + } catch (IOException e) { + throw new IOException("Failed to send SNMP request: " + e); + } + + return responseEvent; + } + + /** + * Start listening for responses + * + * @throws IOException + */ + public void startListen() throws IOException { + transport.listen(); + listening = true; + } + + /** + * Create an SNMP session given the values in + * + * @param tim - The TIM parameters (payload, channel, mode, etc) + * @param props - The SNMP properties (ip, username, password, etc) + * @return ResponseEvent + * @throws TimPduCreatorException + * @throws IOException + * @throws ParseException + */ + public static ResponseEvent createAndSend(SNMP snmp, RSU rsu, String payload, RequestVerb requestVerb, boolean dataSigningEnabledRSU) + throws ParseException, IOException { + + SnmpSession session = new SnmpSession(rsu); + + // Send the PDU + ResponseEvent response = null; + ScopedPDU pdu = SnmpSession.createPDU(snmp, payload, rsu.getRsuIndex(), requestVerb, rsu.getSnmpProtocol(), dataSigningEnabledRSU); + response = session.set(pdu, session.getSnmp(), session.getTarget(), false); + String msg = "Message Sent to {}, index {}: {}"; + EventLogger.logger.debug(msg, rsu.getRsuTarget(), rsu.getRsuIndex(), payload); + logger.debug(msg, rsu.getRsuTarget(), rsu.getRsuIndex(), payload); + return response; + } + + public Snmp getSnmp() { + return snmp; + } + + public void setSnmp(Snmp snmp) { + this.snmp = snmp; + } + + public TransportMapping getTransport() { + return transport; + } + + public void setTransport(TransportMapping transport) { + this.transport = transport; + } + + public UserTarget getTarget() { + return target; + } + + public void setTarget(UserTarget target) { + this.target = target; + } + + public void endSession() throws IOException { + this.snmp.close(); + } + + /** + * Assembles the various RSU elements of a TimParameters object into a usable + * PDU. + * + * @param index Storage index on the RSU + * @param params TimParameters POJO that stores status, channel, payload, etc. + * @return PDU + * @throws ParseException + */ + public static ScopedPDU createPDU(SNMP snmp, String payload, int index, RequestVerb verb, SnmpProtocol snmpProtocol, boolean dataSigningEnabledRSU) throws ParseException { + switch (snmpProtocol) { + case FOURDOT1: + return createPDUWithFourDot1Protocol(snmp, payload, index, verb); + case NTCIP1218: + return createPDUWithNTCIP1218Protocol(snmp, payload, index, verb, dataSigningEnabledRSU); + default: + logger.error("Unknown SNMP protocol: {}", snmpProtocol); + return null; + } + } + + public static VariableBinding getPEncodedVariableBinding(String oid, String val) { + Integer intVal = Integer.parseInt(val, 16); + Integer additionValue = null; + + if (intVal >= 0 && intVal <= 127) { + // P = V + // here we must instantiate the OctetString directly with the hex string to + // avoid inadvertently creating the ASCII character codes + // for instance OctetString.fromString("20", 16) produces the space character (" + // ") rather than hex 20 + return new VariableBinding(new OID(oid), new OctetString(Integer.toHexString(intVal))); + } else if (intVal >= 128 && intVal <= 16511) { + // P = V + 0x7F80 + additionValue = 0x7F80; + } else if (intVal >= 016512 && intVal <= 2113663) { + // P = V + 0xBFBF80 + additionValue = 0xBFBF80; + } else if (intVal >= 2113664 && intVal <= 270549119) { + // P = V + 0xDFDFBF80 + additionValue = 0xDFDFBF80; + } + + if (additionValue != null) { + return new VariableBinding(new OID(oid), + OctetString.fromString(Integer.toHexString(intVal + additionValue), 16)); + } + return null; + } + + private static ScopedPDU createPDUWithFourDot1Protocol(SNMP snmp, String payload, int index, RequestVerb verb) throws ParseException { + ////////////////////////////// + // - OID examples - // + ////////////////////////////// + // rsuSRMStatus.3 = 4 + // --> 1.4.1.11.3 = 4 + // rsuSRMTxChannel.3 = 3 + // --> 1.4.1.5.3 = 178 + // rsuSRMTxMode.3 = 1 + // --> 1.4.1.4.3 = 1 + // rsuSRMPsid.3 x "8003" + // --> 1.4.1.2.3 x "8003" + // rsuSRMDsrcMsgId.3 = 31 + // --> 1.4.1.3.3 = 31 + // rsuSRMTxInterval.3 = 10 + // --> 1.4.1.6.3 = 10 + // rsuSRMDeliveryStart.3 x "07e7051f0c000000" + // --> 1.4.1.7.3 = "07e7051f0c000000" + // rsuSRMDeliveryStop.3 x "07e7060f0c000000" + // --> 1.4.1.8.3 = "07e7060f0c000000" + // rsuSRMPayload.3 x "001f6020100000000000de8f834082729de80d80734d37862d2187864fc2099f1f4028407e53bd01b00e69a6f0c5a409c46c3c300118e69a26fa77a0104b8e69a2e86779e21981414e39a68fd29de697d804fb38e69a50e27796151013d81080020290" + // --> 1.4.1.9.3 = "001f6020100000000000de8f834082729de80d80734d37862d2187864fc2099f1f4028407e53bd01b00e69a6f0c5a409c46c3c300118e69a26fa77a0104b8e69a2e86779e21981414e39a68fd29de697d804fb38e69a50e27796151013d81080020290" + // rsuSRMEnable.3 = 1 + // --> 1.4.1.10.3 = 1 + ////////////////////////////// + + VariableBinding rsuSRMPsid = SnmpFourDot1Protocol.getVbRsuSrmPsid(index, snmp.getRsuid()); + VariableBinding rsuSRMDsrcMsgId = SnmpFourDot1Protocol.getVbRsuSrmDsrcMsgId(index, snmp.getMsgid()); + VariableBinding rsuSRMTxMode = SnmpFourDot1Protocol.getVbRsuSrmTxMode(index, snmp.getMode()); + VariableBinding rsuSRMTxChannel = SnmpFourDot1Protocol.getVbRsuSrmTxChannel(index, snmp.getChannel()); + VariableBinding rsuSRMTxInterval = SnmpFourDot1Protocol.getVbRsuSrmTxInterval(index, snmp.getInterval()); + VariableBinding rsuSRMDeliveryStart = SnmpFourDot1Protocol.getVbRsuSrmDeliveryStart(index, snmp.getDeliverystart()); + VariableBinding rsuSRMDeliveryStop = SnmpFourDot1Protocol.getVbRsuSrmDeliveryStop(index, snmp.getDeliverystop()); + VariableBinding rsuSRMPayload = SnmpFourDot1Protocol.getVbRsuSrmPayload(index, payload); + VariableBinding rsuSRMEnable = SnmpFourDot1Protocol.getVbRsuSrmEnable(index, snmp.getEnable()); + VariableBinding rsuSRMStatus = SnmpFourDot1Protocol.getVbRsuSrmStatus(index, snmp.getStatus()); + + ScopedPDU pdu = new ScopedPDU(); + pdu.add(rsuSRMPsid); + pdu.add(rsuSRMDsrcMsgId); + pdu.add(rsuSRMTxMode); + pdu.add(rsuSRMTxChannel); + pdu.add(rsuSRMTxInterval); + pdu.add(rsuSRMDeliveryStart); + pdu.add(rsuSRMDeliveryStop); + pdu.add(rsuSRMPayload); + pdu.add(rsuSRMEnable); + if (verb == ServiceRequest.OdeInternal.RequestVerb.POST) { pdu.add(rsuSRMStatus); - } - pdu.setType(PDU.SET); - - return pdu; - } - - private static ScopedPDU createPDUWithNTCIP1218Protocol(SNMP snmp, String payload, int index, RequestVerb verb, boolean dataSigningEnabledRSU) throws ParseException { - ////////////////////////////// - // - OID examples - // - ////////////////////////////// - // rsuMsgRepeatPsid.3 x "8003" - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.2.3 x "8003" - // rsuMsgRepeatTxChannel.3 = 3 - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.3.3 = 183 - // rsuMsgRepeatTxInterval.3 = 10 - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.4.3 = 10 - // rsuMsgRepeatDeliveryStart.3 x "07e7051f0c000000" - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.5.3 = "07e7051f0c000000" - // rsuMsgRepeatDeliveryStop.3 x "07e7060f0c000000" - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.6.3 = "07e7060f0c000000" - // rsuMsgRepeatPayload.3 x "001f6020100000000000de8f834082729de80d80734d37862d2187864fc2099f1f4028407e53bd01b00e69a6f0c5a409c46c3c300118e69a26fa77a0104b8e69a2e86779e21981414e39a68fd29de697d804fb38e69a50e27796151013d81080020290" - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.7.3 = "001f6020100000000000de8f834082729de80d80734d37862d2187864fc2099f1f4028407e53bd01b00e69a6f0c5a409c46c3c300118e69a26fa77a0104b8e69a2e86779e21981414e39a68fd29de697d804fb38e69a50e27796151013d81080020290" - // rsuMsgRepeatEnable.3 = 1 - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.8.3 = 1 - // rsuMsgRepeatStatus.3 = 4 - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.9.3 = 4 - // rsuMsgRepeatPriority.3 = 6 - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.10.3 = 6 - // rsuMsgRepeatOptions.3 = "00" - // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.11.3 = "00" - ////////////////////////////// - - VariableBinding rsuMsgRepeatPsid = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatPsid(index, snmp.getRsuid()); - // note: dsrc_msg_id is not in NTCIP 1218 - // note: tx_mode is not in NTCIP 1218 - VariableBinding rsuMsgRepeatTxChannel = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatTxChannel(index, snmp.getChannel()); - VariableBinding rsuMsgRepeatTxInterval = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatTxInterval(index, snmp.getInterval()); - VariableBinding rsuMsgRepeatDeliveryStart = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatDeliveryStart(index, snmp.getDeliverystart()); - VariableBinding rsuMsgRepeatDeliveryStop = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatDeliveryStop(index, snmp.getDeliverystop()); - VariableBinding rsuMsgRepeatPayload = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatPayload(index, payload); - VariableBinding rsuMsgRepeatEnable = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatEnable(index, snmp.getEnable()); - VariableBinding rsuMsgRepeatStatus = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatStatus(index, snmp.getStatus()); - VariableBinding rsuMsgRepeatPriority = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatPriority(index); - VariableBinding rsuMsgRepeatOptions; - if (dataSigningEnabledRSU) { + } + pdu.setType(PDU.SET); + + return pdu; + } + + private static ScopedPDU createPDUWithNTCIP1218Protocol(SNMP snmp, String payload, int index, RequestVerb verb, boolean dataSigningEnabledRSU) throws ParseException { + ////////////////////////////// + // - OID examples - // + ////////////////////////////// + // rsuMsgRepeatPsid.3 x "8003" + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.2.3 x "8003" + // rsuMsgRepeatTxChannel.3 = 3 + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.3.3 = 183 + // rsuMsgRepeatTxInterval.3 = 10 + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.4.3 = 10 + // rsuMsgRepeatDeliveryStart.3 x "07e7051f0c000000" + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.5.3 = "07e7051f0c000000" + // rsuMsgRepeatDeliveryStop.3 x "07e7060f0c000000" + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.6.3 = "07e7060f0c000000" + // rsuMsgRepeatPayload.3 x "001f6020100000000000de8f834082729de80d80734d37862d2187864fc2099f1f4028407e53bd01b00e69a6f0c5a409c46c3c300118e69a26fa77a0104b8e69a2e86779e21981414e39a68fd29de697d804fb38e69a50e27796151013d81080020290" + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.7.3 = "001f6020100000000000de8f834082729de80d80734d37862d2187864fc2099f1f4028407e53bd01b00e69a6f0c5a409c46c3c300118e69a26fa77a0104b8e69a2e86779e21981414e39a68fd29de697d804fb38e69a50e27796151013d81080020290" + // rsuMsgRepeatEnable.3 = 1 + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.8.3 = 1 + // rsuMsgRepeatStatus.3 = 4 + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.9.3 = 4 + // rsuMsgRepeatPriority.3 = 6 + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.10.3 = 6 + // rsuMsgRepeatOptions.3 = "00" + // --> 1.3.6.1.4.1.1206.4.2.18.3.2.1.11.3 = "00" + ////////////////////////////// + + VariableBinding rsuMsgRepeatPsid = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatPsid(index, snmp.getRsuid()); + // note: dsrc_msg_id is not in NTCIP 1218 + // note: tx_mode is not in NTCIP 1218 + VariableBinding rsuMsgRepeatTxChannel = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatTxChannel(index, snmp.getChannel()); + VariableBinding rsuMsgRepeatTxInterval = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatTxInterval(index, snmp.getInterval()); + VariableBinding rsuMsgRepeatDeliveryStart = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatDeliveryStart(index, snmp.getDeliverystart()); + VariableBinding rsuMsgRepeatDeliveryStop = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatDeliveryStop(index, snmp.getDeliverystop()); + VariableBinding rsuMsgRepeatPayload = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatPayload(index, payload); + VariableBinding rsuMsgRepeatEnable = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatEnable(index, snmp.getEnable()); + VariableBinding rsuMsgRepeatStatus = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatStatus(index, snmp.getStatus()); + VariableBinding rsuMsgRepeatPriority = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatPriority(index); + VariableBinding rsuMsgRepeatOptions; + if (dataSigningEnabledRSU) { // set options to 0x00 to tell RSU to broadcast message without signing or attaching a 1609.2 header rsuMsgRepeatOptions = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatOptions(index, 0x00); - } else { + } else { // set options to 0x80 to tell RSU to sign & attach a 1609.2 header before broadcasting rsuMsgRepeatOptions = SnmpNTCIP1218Protocol.getVbRsuMsgRepeatOptions(index, 0x80); - } - - ScopedPDU pdu = new ScopedPDU(); - pdu.add(rsuMsgRepeatPsid); - pdu.add(rsuMsgRepeatTxChannel); - pdu.add(rsuMsgRepeatTxInterval); - pdu.add(rsuMsgRepeatDeliveryStart); - pdu.add(rsuMsgRepeatDeliveryStop); - pdu.add(rsuMsgRepeatPayload); - pdu.add(rsuMsgRepeatEnable); - if (verb == ServiceRequest.OdeInternal.RequestVerb.POST) { + } + + ScopedPDU pdu = new ScopedPDU(); + pdu.add(rsuMsgRepeatPsid); + pdu.add(rsuMsgRepeatTxChannel); + pdu.add(rsuMsgRepeatTxInterval); + pdu.add(rsuMsgRepeatDeliveryStart); + pdu.add(rsuMsgRepeatDeliveryStop); + pdu.add(rsuMsgRepeatPayload); + pdu.add(rsuMsgRepeatEnable); + if (verb == ServiceRequest.OdeInternal.RequestVerb.POST) { pdu.add(rsuMsgRepeatStatus); - } - pdu.add(rsuMsgRepeatPriority); - pdu.add(rsuMsgRepeatOptions); - pdu.setType(PDU.SET); + } + pdu.add(rsuMsgRepeatPriority); + pdu.add(rsuMsgRepeatOptions); + pdu.setType(PDU.SET); - return pdu; - } + return pdu; + } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/storage/FileSystemStorageService.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/storage/FileSystemStorageService.java index 4299b0075..e4ec8d473 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/storage/FileSystemStorageService.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/storage/FileSystemStorageService.java @@ -15,41 +15,40 @@ ******************************************************************************/ package us.dot.its.jpo.ode.storage; -import java.io.IOException; -import java.net.MalformedURLException; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.stream.Stream; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; import org.springframework.stereotype.Service; import org.springframework.util.FileSystemUtils; import org.springframework.web.multipart.MultipartFile; - -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.coder.stream.FileImporterProperties; +import us.dot.its.jpo.ode.coder.stream.FileImporterProperties; import us.dot.its.jpo.ode.eventlog.EventLogger; +import java.io.IOException; +import java.net.MalformedURLException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.stream.Stream; + @Service +@Slf4j public class FileSystemStorageService implements StorageService { - private static Logger logger = LoggerFactory.getLogger(FileSystemStorageService.class); private Path rootLocation; private Path logFileLocation; @Autowired - public FileSystemStorageService(OdeProperties properties) { + public FileSystemStorageService(FileImporterProperties properties) { this.rootLocation = Paths.get(properties.getUploadLocationRoot()); this.logFileLocation = Paths.get(properties.getUploadLocationRoot(), - properties.getUploadLocationObuLog()); + properties.getObuLogUploadLocation()); - logger.info("Upload location (root): {}", this.rootLocation); - logger.info("Upload location (OBU log file): {}", this.logFileLocation); + log.info("Upload location (root): {}", this.rootLocation); + log.info("Upload location (OBU log file): {}", this.logFileLocation); } @Override @@ -81,7 +80,7 @@ public void store(MultipartFile file, String type) { // Copy the file to the relevant directory try { - logger.debug("Copying file {} to {}", file.getOriginalFilename(), path); + log.debug("Copying file {} to {}", file.getOriginalFilename(), path); EventLogger.logger.info("Copying file {} to {}", file.getOriginalFilename(), path); Files.copy(file.getInputStream(), path); } catch (Exception e) { @@ -136,12 +135,4 @@ public void init() { throw new StorageException("Failed to initialize storage service " + this.rootLocation, e); } } - - public Path getRootLocation() { - return rootLocation; - } - - public void setRootLocation(Path rootLocation) { - this.rootLocation = rootLocation; - } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDeleteController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDeleteController.java index 51445a37d..a5e1a12e8 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDeleteController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDeleteController.java @@ -22,9 +22,6 @@ import org.snmp4j.PDU; import org.snmp4j.ScopedPDU; import org.snmp4j.event.ResponseEvent; -import org.snmp4j.smi.Integer32; -import org.snmp4j.smi.OID; -import org.snmp4j.smi.VariableBinding; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -34,9 +31,9 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.plugin.SnmpProtocol; import us.dot.its.jpo.ode.plugin.RoadSideUnit.RSU; +import us.dot.its.jpo.ode.rsu.RsuProperties; import us.dot.its.jpo.ode.snmp.SnmpFourDot1Protocol; import us.dot.its.jpo.ode.snmp.SnmpNTCIP1218Protocol; import us.dot.its.jpo.ode.snmp.SnmpSession; @@ -49,12 +46,12 @@ public class TimDeleteController { private static final String ERRSTR = "error"; - private OdeProperties odeProperties; + private RsuProperties rsuProperties; @Autowired - public TimDeleteController(OdeProperties odeProperties) { + public TimDeleteController(RsuProperties rsuProperties) { super(); - this.odeProperties = odeProperties; + this.rsuProperties = rsuProperties; } @CrossOrigin @@ -68,7 +65,7 @@ public ResponseEntity deleteTim(@RequestBody String jsonString, } RSU queryTarget = (RSU) JsonUtils.fromJson(jsonString, RSU.class); - TimTransmogrifier.updateRsuCreds(queryTarget, odeProperties); + TimTransmogrifier.updateRsuCreds(queryTarget, rsuProperties); logger.info("TIM delete call, RSU info {}", queryTarget); diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDepositController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDepositController.java index 56dea7112..c7a238c0c 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDepositController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimDepositController.java @@ -1,28 +1,29 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.traveler; +import com.fasterxml.jackson.databind.node.ObjectNode; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.format.DateTimeParseException; import java.util.Date; - -import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -31,11 +32,11 @@ import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; - -import com.fasterxml.jackson.databind.node.ObjectNode; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.context.AppContext; +import us.dot.its.jpo.ode.coder.OdeTimDataCreatorHelper; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.topics.PojoTopics; import us.dot.its.jpo.ode.model.OdeMsgMetadata.GeneratedBy; import us.dot.its.jpo.ode.model.OdeMsgPayload; import us.dot.its.jpo.ode.model.OdeObject; @@ -50,6 +51,7 @@ import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage; import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage.DataFrame; import us.dot.its.jpo.ode.plugin.j2735.builders.TravelerMessageFromHumanToAsnConverter; +import us.dot.its.jpo.ode.security.SecurityServicesProperties; import us.dot.its.jpo.ode.traveler.TimTransmogrifier.TimTransmogrifierException; import us.dot.its.jpo.ode.util.DateTimeUtils; import us.dot.its.jpo.ode.util.JsonUtils; @@ -58,236 +60,304 @@ import us.dot.its.jpo.ode.wrapper.MessageProducer; import us.dot.its.jpo.ode.wrapper.serdes.OdeTimSerializer; +/** + * The REST controller for handling TIM creation requests. + */ @RestController +@Slf4j public class TimDepositController { - private static final Logger logger = LoggerFactory.getLogger(TimDepositController.class); - - private static final String ERRSTR = "error"; - private static final String WARNING = "warning"; - private static final String SUCCESS = "success"; - - private OdeProperties odeProperties; - - private SerialId serialIdJ2735; - private SerialId serialIdOde; - - private MessageProducer stringMsgProducer; - private MessageProducer timProducer; - - private boolean dataSigningEnabledSDW; - - public static class TimDepositControllerException extends Exception { - - private static final long serialVersionUID = 1L; - - public TimDepositControllerException(String errMsg) { - super(errMsg); - } - - } - - @Autowired - public TimDepositController(OdeProperties odeProperties) { - super(); - - this.odeProperties = odeProperties; - - this.serialIdJ2735 = new SerialId(); - this.serialIdOde = new SerialId(); - - this.stringMsgProducer = MessageProducer.defaultStringMessageProducer(odeProperties.getKafkaBrokers(), - odeProperties.getKafkaProducerType(), odeProperties.getKafkaTopicsDisabledSet()); - this.timProducer = new MessageProducer<>(odeProperties.getKafkaBrokers(), odeProperties.getKafkaProducerType(), - null, OdeTimSerializer.class.getName(), odeProperties.getKafkaTopicsDisabledSet()); - - this.dataSigningEnabledSDW = System.getenv("DATA_SIGNING_ENABLED_SDW") != null && !System.getenv("DATA_SIGNING_ENABLED_SDW").isEmpty() - ? Boolean.parseBoolean(System.getenv("DATA_SIGNING_ENABLED_SDW")) - : true; - - } - - /** - * Send a TIM with the appropriate deposit type, ODE.PUT or ODE.POST - * - * @param jsonString - * @param verb - * @return - */ - public synchronized ResponseEntity depositTim(String jsonString, RequestVerb verb) { - - if (null == jsonString || jsonString.isEmpty()) { - String errMsg = "Empty request."; - logger.error(errMsg); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + private static final TimIngestTracker INGEST_MONITOR = TimIngestTracker.getInstance(); + + private static final String ERRSTR = "error"; + private static final String WARNING = "warning"; + private static final String SUCCESS = "success"; + + private final Asn1CoderTopics asn1CoderTopics; + private final PojoTopics pojoTopics; + private final JsonTopics jsonTopics; + + private final SerialId serialIdJ2735; + private final SerialId serialIdOde; + + private final MessageProducer stringMsgProducer; + private final MessageProducer timProducer; + + private final boolean dataSigningEnabledSDW; + + /** + * Unique exception for the TimDepositController to handle error state responses to the client. + */ + public static class TimDepositControllerException extends Exception { + + private static final long serialVersionUID = 1L; + + public TimDepositControllerException(String errMsg) { + super(errMsg); + } + + } + + /** + * Spring Autowired constructor for the REST controller to properly initialize. + */ + @Autowired + public TimDepositController(OdeKafkaProperties odeKafkaProperties, + Asn1CoderTopics asn1CoderTopics, + PojoTopics pojoTopics, + JsonTopics jsonTopics, + TimIngestTrackerProperties ingestTrackerProperties, + SecurityServicesProperties securityServicesProperties) { + super(); + + this.asn1CoderTopics = asn1CoderTopics; + this.pojoTopics = pojoTopics; + this.jsonTopics = jsonTopics; + this.serialIdJ2735 = new SerialId(); + this.serialIdOde = new SerialId(); + + this.stringMsgProducer = + MessageProducer.defaultStringMessageProducer(odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), odeKafkaProperties.getDisabledTopics()); + this.timProducer = new MessageProducer<>(odeKafkaProperties.getBrokers(), + odeKafkaProperties.getKafkaType(), null, + OdeTimSerializer.class.getName(), odeKafkaProperties.getDisabledTopics()); + + this.dataSigningEnabledSDW = securityServicesProperties.getIsSdwSigningEnabled(); + + // start the TIM ingest monitoring service if enabled + if (ingestTrackerProperties.isTrackingEnabled()) { + log.info("TIM ingest monitoring enabled."); + + ScheduledExecutorService scheduledExecutorService = + Executors + .newSingleThreadScheduledExecutor(); + + scheduledExecutorService.scheduleAtFixedRate( + new TimIngestWatcher(ingestTrackerProperties.getInterval()), + ingestTrackerProperties.getInterval(), + ingestTrackerProperties.getInterval(), + java.util.concurrent.TimeUnit.SECONDS); + } else { + log.info("TIM ingest monitoring disabled."); + } + } + + /** + * Send a TIM with the appropriate deposit type, ODE.PUT or ODE.POST. + * + * @param jsonString The value of the JSON message + * @param verb The HTTP verb being requested + * @return The request completion status + */ + public synchronized ResponseEntity depositTim(String jsonString, RequestVerb verb) { + + if (null == jsonString || jsonString.isEmpty()) { + String errMsg = "Empty request."; + log.error(errMsg); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } + + OdeTravelerInputData odeTID; + ServiceRequest request; + try { + // Convert JSON to POJO + odeTID = + (OdeTravelerInputData) JsonUtils.jacksonFromJson(jsonString, + OdeTravelerInputData.class, + true); + if (odeTID == null) { + String errMsg = "Malformed or non-compliant JSON syntax."; + log.error(errMsg); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); } - OdeTravelerInputData odeTID = null; - ServiceRequest request; - try { - // Convert JSON to POJO - odeTID = (OdeTravelerInputData) JsonUtils.jacksonFromJson(jsonString, OdeTravelerInputData.class, true); - if (odeTID == null) { - String errMsg = "Malformed or non-compliant JSON syntax."; - logger.error(errMsg); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); - } - - request = odeTID.getRequest(); - if (request == null) { - throw new TimDepositControllerException("Request element is required as of version 3."); - } - - if (request.getOde() == null) { - request.setOde(new OdeInternal()); - } - - request.getOde().setVerb(verb); - - } catch (TimDepositControllerException e) { - String errMsg = "Missing or invalid argument: " + e.getMessage(); - logger.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); - } catch (JsonUtilsException e) { - String errMsg = "Malformed or non-compliant JSON syntax."; - logger.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + request = odeTID.getRequest(); + if (request == null) { + throw new TimDepositControllerException("Request element is required as of version 3."); } - // Add metadata to message and publish to kafka - OdeTravelerInformationMessage tim = odeTID.getTim(); - OdeMsgPayload timDataPayload = new OdeMsgPayload(tim); - OdeRequestMsgMetadata timMetadata = new OdeRequestMsgMetadata(timDataPayload, request); - - // set packetID in tim Metadata - timMetadata.setOdePacketID(tim.getPacketID()); - // set maxDurationTime in tim Metadata and set latest startDatetime in tim - // metadata - SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); - if (null != tim.getDataframes() && tim.getDataframes().length > 0) { - int maxDurationTime = 0; - Date latestStartDateTime = null; - for (DataFrame dataFrameItem : tim.getDataframes()) { - maxDurationTime = maxDurationTime > dataFrameItem.getDurationTime() ? maxDurationTime - : dataFrameItem.getDurationTime(); - try { - latestStartDateTime = (latestStartDateTime == null || (latestStartDateTime != null - && latestStartDateTime.before(dateFormat.parse(dataFrameItem.getStartDateTime()))) - ? dateFormat.parse(dataFrameItem.getStartDateTime()) - : latestStartDateTime); - } catch (ParseException e) { - logger.error("Invalid dateTime parse: " + e); - } - } - timMetadata.setMaxDurationTime(maxDurationTime); - timMetadata.setOdeTimStartDateTime(dateFormat.format(latestStartDateTime)); + if (request.getOde() == null) { + request.setOde(new OdeInternal()); } - // Setting the SerialId to OdeBradcastTim serialId to be changed to - // J2735BroadcastTim serialId after the message has been published to - // OdeTimBrodcast topic - timMetadata.setSerialId(serialIdOde); - timMetadata.setRecordGeneratedBy(GeneratedBy.TMC); - - try { - timMetadata.setRecordGeneratedAt(DateTimeUtils.isoDateTime(DateTimeUtils.isoDateTime(tim.getTimeStamp()))); - } catch (ParseException | DateTimeParseException e) { - String errMsg = "Invalid timestamp in tim record: " + tim.getTimeStamp(); - logger.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); - } - - OdeTimData odeTimData = new OdeTimData(timMetadata, timDataPayload); - timProducer.send(odeProperties.getKafkaTopicOdeTimBroadcastPojo(), null, odeTimData); - - String obfuscatedTimData = TimTransmogrifier.obfuscateRsuPassword(odeTimData.toJson()); - stringMsgProducer.send(odeProperties.getKafkaTopicOdeTimBroadcastJson(), null, obfuscatedTimData); - - // Now that the message gas been published to OdeBradcastTim topic, it should be - // changed to J2735BroadcastTim serialId - timMetadata.setSerialId(serialIdJ2735); - // Short circuit - // If the TIM has no RSU/SNMP or SDW structures, we are done - if ((request.getRsus() == null || request.getSnmp() == null) && request.getSdw() == null) { - String warningMsg = "Warning: TIM contains no RSU, SNMP, or SDW fields. Message only published to broadcast streams."; - logger.warn(warningMsg); - return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue(WARNING, warningMsg)); + request.getOde().setVerb(verb); + + } catch (TimDepositControllerException e) { + String errMsg = "Missing or invalid argument: " + e.getMessage(); + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } catch (JsonUtilsException e) { + String errMsg = "Malformed or non-compliant JSON syntax."; + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } + + // Add metadata to message and publish to kafka + OdeTravelerInformationMessage tim = odeTID.getTim(); + OdeMsgPayload timDataPayload = new OdeMsgPayload(tim); + OdeRequestMsgMetadata timMetadata = new OdeRequestMsgMetadata(timDataPayload, request); + + // set packetID in tim Metadata + timMetadata.setOdePacketID(tim.getPacketID()); + // set maxDurationTime in tim Metadata and set latest startDatetime in tim + // metadata + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + if (null != tim.getDataframes() && tim.getDataframes().length > 0) { + int maxDurationTime = 0; + Date latestStartDateTime = null; + for (DataFrame dataFrameItem : tim.getDataframes()) { + maxDurationTime = Math.max(maxDurationTime, dataFrameItem.getDurationTime()); + try { + latestStartDateTime = (latestStartDateTime == null || (latestStartDateTime != null + && latestStartDateTime.before(dateFormat.parse(dataFrameItem.getStartDateTime()))) + ? dateFormat.parse(dataFrameItem.getStartDateTime()) + : latestStartDateTime); + } catch (ParseException e) { + log.error("Invalid dateTime parse: ", e); + } } - - // Craft ASN-encodable TIM - ObjectNode encodableTid; - try { - encodableTid = JsonUtils.toObjectNode(odeTID.toJson()); - TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(encodableTid); - - logger.debug("Encodable Traveler Information Data: {}", encodableTid); - - } catch (JsonUtilsException e) { - String errMsg = "Error converting to encodable TravelerInputData."; - logger.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + timMetadata.setMaxDurationTime(maxDurationTime); + timMetadata.setOdeTimStartDateTime(dateFormat.format(latestStartDateTime)); + } + // Setting the SerialId to OdeBradcastTim serialId to be changed to + // J2735BroadcastTim serialId after the message has been published to + // OdeTimBrodcast topic + timMetadata.setSerialId(serialIdOde); + timMetadata.setRecordGeneratedBy(GeneratedBy.TMC); + + try { + timMetadata.setRecordGeneratedAt( + DateTimeUtils.isoDateTime( + DateTimeUtils.isoDateTime(tim.getTimeStamp()))); + } catch (DateTimeParseException e) { + String errMsg = "Invalid timestamp in tim record: " + tim.getTimeStamp(); + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } + + OdeTimData odeTimData = new OdeTimData(timMetadata, timDataPayload); + timProducer.send(pojoTopics.getTimBroadcast(), null, odeTimData); + + String obfuscatedTimData = TimTransmogrifier.obfuscateRsuPassword(odeTimData.toJson()); + stringMsgProducer.send(jsonTopics.getTimBroadcast(), null, obfuscatedTimData); + + // Now that the message has been published to OdeBroadcastTim topic, it should + // be + // changed to J2735BroadcastTim serialId + timMetadata.setSerialId(serialIdJ2735); + + // Short circuit + // If the TIM has no RSU/SNMP or SDW structures, we are done + if ((request.getRsus() == null || request.getSnmp() == null) && request.getSdw() == null) { + String warningMsg = + "Warning: TIM contains no RSU, SNMP, or SDW fields." + + " Message only published to broadcast streams."; + log.warn(warningMsg); + return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue(WARNING, warningMsg)); + } + + // Craft ASN-encodable TIM + ObjectNode encodableTid; + try { + encodableTid = JsonUtils.toObjectNode(odeTID.toJson()); + TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(encodableTid); + + log.debug("Encodable Traveler Information Data: {}", encodableTid); + + } catch (JsonUtilsException e) { + String errMsg = "Error converting to encodable TravelerInputData."; + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } catch (TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException e) { + String errMsg = "Non-compliant fields in TIM: " + e.getMessage(); + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body( + JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } + + try { + String xmlMsg; + DdsAdvisorySituationData asd = null; + if (!this.dataSigningEnabledSDW) { + // We need to send data UNSECURED, so we should try to build the ASD as well as + // MessageFrame + asd = TimTransmogrifier.buildASD(odeTID.getRequest()); } - - try { - logger.debug("securitySvcsSignatureUri = {}", odeProperties.getSecuritySvcsSignatureUri()); - String xmlMsg; - DdsAdvisorySituationData asd = null; - if (!this.dataSigningEnabledSDW) { - // We need to send data UNSECURED, so we should try to build the ASD as well as - // MessageFrame - asd = TimTransmogrifier.buildASD(odeTID.getRequest()); - } - xmlMsg = TimTransmogrifier.convertToXml(asd, encodableTid, timMetadata, serialIdJ2735); - logger.debug("XML representation: {}", xmlMsg); - - JSONObject jsonMsg = XmlUtils.toJSONObject(xmlMsg); - - String j2735Tim = TimTransmogrifier.createOdeTimData(jsonMsg.getJSONObject(AppContext.ODE_ASN1_DATA)) - .toString(); - - stringMsgProducer.send(odeProperties.getKafkaTopicAsn1EncoderInput(), null, xmlMsg); - - String obfuscatedj2735Tim = TimTransmogrifier.obfuscateRsuPassword(j2735Tim); - // publish Broadcast TIM to a J2735 compliant topic. - stringMsgProducer.send(odeProperties.getKafkaTopicJ2735TimBroadcastJson(), null, obfuscatedj2735Tim); - // publish J2735 TIM also to general un-filtered TIM topic - stringMsgProducer.send(odeProperties.getKafkaTopicOdeTimJson(), null, obfuscatedj2735Tim); - - serialIdOde.increment(); - serialIdJ2735.increment(); - } catch (JsonUtils.JsonUtilsException | XmlUtils.XmlUtilsException | TimTransmogrifierException e) { - String errMsg = "Error sending data to ASN.1 Encoder module: " + e.getMessage(); - logger.error(errMsg, e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + xmlMsg = TimTransmogrifier.convertToXml(asd, encodableTid, timMetadata, serialIdJ2735); + if (xmlMsg != null) { + log.debug("XML representation: {}", xmlMsg); + + // Convert XML into ODE TIM JSON object and obfuscate RSU password + OdeTimData odeTimObj = OdeTimDataCreatorHelper.createOdeTimDataFromCreator( + xmlMsg, timMetadata); + + String j2735Tim = + odeTimObj + .toString(); + + + String obfuscatedJ2735Tim = TimTransmogrifier.obfuscateRsuPassword(j2735Tim); + // publish Broadcast TIM to a J2735 compliant topic. + stringMsgProducer.send(jsonTopics.getJ2735TimBroadcast(), null, obfuscatedJ2735Tim); + // publish J2735 TIM also to general un-filtered TIM topic with streamID as key + stringMsgProducer.send(jsonTopics.getTim(), serialIdJ2735.getStreamId(), + obfuscatedJ2735Tim); // Write XML to the encoder input topic at the end to ensure the correct order + // of operations to pair + // each message to an OdeTimJson streamId key + stringMsgProducer.send(asn1CoderTopics.getEncoderInput(), null, xmlMsg); } - return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue(SUCCESS, "true")); - } - - /** - * Update an already-deposited TIM - * - * @param jsonString TIM in JSON - * @return list of success/failures - */ - @PutMapping(value = "/tim", produces = "application/json") - @CrossOrigin - public ResponseEntity putTim(@RequestBody String jsonString) { - - return depositTim(jsonString, ServiceRequest.OdeInternal.RequestVerb.PUT); - } - - /** - * Deposit a new TIM - * - * @param jsonString TIM in JSON - * @return list of success/failures - */ - @PostMapping(value = "/tim", produces = "application/json") - @CrossOrigin - public ResponseEntity postTim(@RequestBody String jsonString) { - - return depositTim(jsonString, ServiceRequest.OdeInternal.RequestVerb.POST); - } + serialIdOde.increment(); + serialIdJ2735.increment(); + } catch (JsonUtils.JsonUtilsException | XmlUtils.XmlUtilsException + | TimTransmogrifierException e) { + String errMsg = "Error sending data to ASN.1 Encoder module: " + e.getMessage(); + log.error(errMsg, e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(JsonUtils.jsonKeyValue(ERRSTR, errMsg)); + } + + INGEST_MONITOR.incrementTotalMessagesReceived(); + return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue(SUCCESS, "true")); + } + + /** + * Update an already-deposited TIM. + * + * @param jsonString TIM in JSON + * @return list of success/failures + */ + @PutMapping(value = "/tim", produces = "application/json") + @CrossOrigin + public ResponseEntity putTim(@RequestBody String jsonString) { + + return depositTim(jsonString, ServiceRequest.OdeInternal.RequestVerb.PUT); + } + + /** + * Deposit a new TIM. + * + * @param jsonString TIM in JSON + * @return list of success/failures + */ + @PostMapping(value = "/tim", produces = "application/json") + @CrossOrigin + public ResponseEntity postTim(@RequestBody String jsonString) { + + return depositTim(jsonString, ServiceRequest.OdeInternal.RequestVerb.POST); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestPropertiesValidator.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestPropertiesValidator.java new file mode 100644 index 000000000..4a5c2bd17 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestPropertiesValidator.java @@ -0,0 +1,20 @@ +package us.dot.its.jpo.ode.traveler; + +import org.springframework.validation.Validator; + +public class TimIngestPropertiesValidator implements Validator { + + @Override + public boolean supports(Class clazz) { + return TimIngestTrackerProperties.class.equals(clazz); + } + + @Override + public void validate(Object target, org.springframework.validation.Errors errors) { + TimIngestTrackerProperties properties = (TimIngestTrackerProperties) target; + + if (properties.isTrackingEnabled() && properties.getInterval() <= 0) { + errors.rejectValue("interval", "interval.invalid", "Monitoring interval must be greater than 0"); + } + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestTracker.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestTracker.java new file mode 100644 index 000000000..940e200d1 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestTracker.java @@ -0,0 +1,30 @@ +package us.dot.its.jpo.ode.traveler; + +public class TimIngestTracker { + + private long totalMessagesReceived; + + private TimIngestTracker() { + totalMessagesReceived = 0; + } + + public static TimIngestTracker getInstance() { + return TimIngestMonitorHolder.INSTANCE; + } + + private static class TimIngestMonitorHolder { + private static final TimIngestTracker INSTANCE = new TimIngestTracker(); + } + + public long getTotalMessagesReceived() { + return totalMessagesReceived; + } + + public void incrementTotalMessagesReceived() { + totalMessagesReceived++; + } + + public void resetTotalMessagesReceived() { + totalMessagesReceived = 0; + } + } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestTrackerProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestTrackerProperties.java new file mode 100644 index 000000000..e70ca4f0d --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestTrackerProperties.java @@ -0,0 +1,15 @@ +package us.dot.its.jpo.ode.traveler; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.validation.annotation.Validated; + +@Configuration +@ConfigurationProperties(prefix = "ode.tim-ingest-monitoring") +@Validated(value = TimIngestPropertiesValidator.class) +@Data +public class TimIngestTrackerProperties { + private boolean trackingEnabled; + private long interval = 3600; // in seconds. Default is 1 hour (3600 seconds) +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestWatcher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestWatcher.java new file mode 100644 index 000000000..5de3fa94f --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimIngestWatcher.java @@ -0,0 +1,29 @@ +package us.dot.its.jpo.ode.traveler; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class TimIngestWatcher implements Runnable { + + private static final Logger logger = LoggerFactory.getLogger(TimIngestWatcher.class.getName()); + private final long interval; + + public TimIngestWatcher(long interval) { + this.interval = interval; + } + + @Override + public void run() { + TimIngestTracker tracker = TimIngestTracker.getInstance(); + long ingested = tracker.getTotalMessagesReceived(); + + if (ingested == 0) { + logger.warn("ODE has not received TIM deposits in {} seconds.", interval); + } else { + logger.debug("ODE has received {} TIM deposits in the last {} seconds.", ingested, interval); + } + + // After checking the number of TIMs ingested in the last interval, reset the counter + tracker.resetTotalMessagesReceived(); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimQueryController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimQueryController.java index 73ef59562..712e576a4 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimQueryController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimQueryController.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,15 +15,10 @@ ******************************************************************************/ package us.dot.its.jpo.ode.traveler; -import java.io.IOException; -import java.util.HashMap; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.snmp4j.PDU; import org.snmp4j.ScopedPDU; import org.snmp4j.event.ResponseEvent; -import org.snmp4j.smi.OID; import org.snmp4j.smi.VariableBinding; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -32,147 +27,147 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.plugin.SnmpProtocol; import us.dot.its.jpo.ode.plugin.RoadSideUnit.RSU; +import us.dot.its.jpo.ode.plugin.SnmpProtocol; +import us.dot.its.jpo.ode.rsu.RsuProperties; import us.dot.its.jpo.ode.snmp.SnmpFourDot1Protocol; import us.dot.its.jpo.ode.snmp.SnmpNTCIP1218Protocol; import us.dot.its.jpo.ode.snmp.SnmpSession; import us.dot.its.jpo.ode.util.JsonUtils; +import java.io.IOException; +import java.util.HashMap; + @RestController +@Slf4j public class TimQueryController { - - private static final Logger logger = LoggerFactory.getLogger(TimQueryController.class); - - private static final String ERRSTR = "error"; - - private OdeProperties odeProperties; - - @Autowired - public TimQueryController(OdeProperties odeProperties) { - this.odeProperties = odeProperties; - } - - /** - * Checks given RSU for all TIMs set - * - * @param jsonString - * Request body containing RSU info - * @return list of occupied TIM slots on RSU - */ - @CrossOrigin - @PostMapping(value = "/tim/query") - public synchronized ResponseEntity bulkQuery(@RequestBody String jsonString) { // NOSONAR - - if (null == jsonString || jsonString.isEmpty()) { - logger.error("Empty request."); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, "Empty request.")); - } - - RSU queryTarget = null; - try { - queryTarget = (RSU) JsonUtils.fromJson(jsonString, RSU.class); - } - catch(Exception e) { - - } - if (queryTarget == null) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, "Unrecognized protocol")); - } - - TimTransmogrifier.updateRsuCreds(queryTarget, odeProperties); - - SnmpSession snmpSession = null; - try { - snmpSession = new SnmpSession(queryTarget); - snmpSession.startListen(); - } catch (IOException e) { - logger.error("Error creating SNMP session.", e); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(JsonUtils.jsonKeyValue(ERRSTR, "Failed to create SNMP session.")); - } - - PDU pdu0 = new ScopedPDU(); - pdu0.setType(PDU.GET); - PDU pdu1 = new ScopedPDU(); - pdu1.setType(PDU.GET); - - SnmpProtocol snmpProtocol = queryTarget.getSnmpProtocol(); - - if (snmpProtocol == null) { - logger.error("No SNMP protocol specified."); - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(JsonUtils.jsonKeyValue(ERRSTR, "No SNMP protocol specified.")); - } - - if (snmpProtocol == SnmpProtocol.FOURDOT1) { - for (int i = 0; i < odeProperties.getRsuSrmSlots() - 50; i++) { - pdu0.add(SnmpFourDot1Protocol.getVbRsuSrmStatus(i)); - } - - for (int i = 50; i < odeProperties.getRsuSrmSlots(); i++) { - pdu1.add(SnmpFourDot1Protocol.getVbRsuSrmStatus(i)); - } - } - else if (snmpProtocol == SnmpProtocol.NTCIP1218) { - for (int i = 0; i < odeProperties.getRsuSrmSlots() - 50; i++) { - pdu0.add(SnmpNTCIP1218Protocol.getVbRsuMsgRepeatStatus(i)); - } - - for (int i = 50; i < odeProperties.getRsuSrmSlots(); i++) { - pdu1.add(SnmpNTCIP1218Protocol.getVbRsuMsgRepeatStatus(i)); - } - } - else { - logger.error("Unsupported SNMP protocol: {}", snmpProtocol); - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(JsonUtils.jsonKeyValue(ERRSTR, "Unsupported SNMP protocol: " + snmpProtocol)); - } - - ResponseEvent response0 = null; - ResponseEvent response1 = null; - try { - response0 = snmpSession.getSnmp().send(pdu0, snmpSession.getTarget()); - response1 = snmpSession.getSnmp().send(pdu1, snmpSession.getTarget()); - } catch (IOException e) { - logger.error("Error creating SNMP session.", e); - return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) - .body(JsonUtils.jsonKeyValue(ERRSTR, "Failed to create SNMP session.")); - } - - // Process response - if (response0 == null || response0.getResponse() == null || response1 == null - || response1.getResponse() == null) { - logger.error("RSU query failed, timeout."); - return ResponseEntity.status(HttpStatus.BAD_REQUEST) - .body(JsonUtils.jsonKeyValue(ERRSTR, "Timeout, no response from RSU.")); - } - - HashMap resultsMap = new HashMap<>(); - for (Object vbo : response0.getResponse().getVariableBindings().toArray()) { - VariableBinding vb = (VariableBinding) vbo; - if (vb.getVariable().toInt() == 1) { - resultsMap.put(vb.getOid().toString().substring(21), true); - } - } - - for (Object vbo : response1.getResponse().getVariableBindings().toArray()) { - VariableBinding vb = (VariableBinding) vbo; - if (vb.getVariable().toInt() == 1) { - resultsMap.put(vb.getOid().toString().substring(21), true); - } - } - - try { - snmpSession.endSession(); - } catch (IOException e) { - logger.error("Error closing SNMP session.", e); - } - - logger.info("RSU query successful: {}", resultsMap.keySet()); - return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue("indicies_set", resultsMap.keySet().toString())); - } - + + private static final String ERRSTR = "error"; + + private final RsuProperties rsuProperties; + + @Autowired + public TimQueryController(RsuProperties rsuProperties) { + this.rsuProperties = rsuProperties; + } + + /** + * Checks given RSU for all TIMs set + * + * @param jsonString Request body containing RSU info + * @return list of occupied TIM slots on RSU + */ + @CrossOrigin + @PostMapping(value = "/tim/query") + public synchronized ResponseEntity bulkQuery(@RequestBody String jsonString) { // NOSONAR + + if (null == jsonString || jsonString.isEmpty()) { + log.error("Empty request."); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, "Empty request.")); + } + + RSU queryTarget = null; + try { + queryTarget = (RSU) JsonUtils.fromJson(jsonString, RSU.class); + } catch (Exception e) { + log.error("Convert JSON to RSU failed.", e); + } + if (queryTarget == null) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(JsonUtils.jsonKeyValue(ERRSTR, "Unrecognized protocol")); + } + + TimTransmogrifier.updateRsuCreds(queryTarget, rsuProperties); + + SnmpSession snmpSession = null; + try { + snmpSession = new SnmpSession(queryTarget); + snmpSession.startListen(); + } catch (IOException e) { + log.error("Error creating SNMP session.", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(JsonUtils.jsonKeyValue(ERRSTR, "Failed to create SNMP session.")); + } + + PDU pdu0 = new ScopedPDU(); + pdu0.setType(PDU.GET); + PDU pdu1 = new ScopedPDU(); + pdu1.setType(PDU.GET); + + SnmpProtocol snmpProtocol = queryTarget.getSnmpProtocol(); + + if (snmpProtocol == null) { + log.error("No SNMP protocol specified."); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(JsonUtils.jsonKeyValue(ERRSTR, "No SNMP protocol specified.")); + } + + switch (snmpProtocol) { + case SnmpProtocol.FOURDOT1 -> { + for (int i = 0; i < rsuProperties.getSrmSlots() - 50; i++) { + pdu0.add(SnmpFourDot1Protocol.getVbRsuSrmStatus(i)); + } + + for (int i = 50; i < rsuProperties.getSrmSlots(); i++) { + pdu1.add(SnmpFourDot1Protocol.getVbRsuSrmStatus(i)); + } + } + case SnmpProtocol.NTCIP1218 -> { + for (int i = 0; i < rsuProperties.getSrmSlots() - 50; i++) { + pdu0.add(SnmpNTCIP1218Protocol.getVbRsuMsgRepeatStatus(i)); + } + + for (int i = 50; i < rsuProperties.getSrmSlots(); i++) { + pdu1.add(SnmpNTCIP1218Protocol.getVbRsuMsgRepeatStatus(i)); + } + } + default -> { + log.error("Unsupported SNMP protocol: {}", snmpProtocol); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(JsonUtils.jsonKeyValue(ERRSTR, "Unsupported SNMP protocol: " + snmpProtocol)); + } + } + + ResponseEvent response0 = null; + ResponseEvent response1 = null; + try { + response0 = snmpSession.getSnmp().send(pdu0, snmpSession.getTarget()); + response1 = snmpSession.getSnmp().send(pdu1, snmpSession.getTarget()); + } catch (IOException e) { + log.error("Error creating SNMP session.", e); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) + .body(JsonUtils.jsonKeyValue(ERRSTR, "Failed to create SNMP session.")); + } + + // Process response + if (response0 == null || response0.getResponse() == null || response1 == null + || response1.getResponse() == null) { + log.error("RSU query failed, timeout."); + return ResponseEntity.status(HttpStatus.BAD_REQUEST) + .body(JsonUtils.jsonKeyValue(ERRSTR, "Timeout, no response from RSU.")); + } + + HashMap resultsMap = new HashMap<>(); + for (Object vbo : response0.getResponse().getVariableBindings().toArray()) { + VariableBinding vb = (VariableBinding) vbo; + if (vb.getVariable().toInt() == 1) { + resultsMap.put(vb.getOid().toString().substring(21), true); + } + } + + for (Object vbo : response1.getResponse().getVariableBindings().toArray()) { + VariableBinding vb = (VariableBinding) vbo; + if (vb.getVariable().toInt() == 1) { + resultsMap.put(vb.getOid().toString().substring(21), true); + } + } + + try { + snmpSession.endSession(); + } catch (IOException e) { + log.error("Error closing SNMP session.", e); + } + + log.info("RSU query successful: {}", resultsMap.keySet()); + return ResponseEntity.status(HttpStatus.OK).body(JsonUtils.jsonKeyValue("indicies_set", resultsMap.keySet().toString())); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimTransmogrifier.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimTransmogrifier.java index 21eca8508..dc7646717 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimTransmogrifier.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/traveler/TimTransmogrifier.java @@ -1,12 +1,9 @@ package us.dot.its.jpo.ode.traveler; -import org.json.JSONObject; - import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.context.AppContext; import us.dot.its.jpo.ode.model.Asn1Encoding; import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; @@ -29,6 +26,7 @@ import us.dot.its.jpo.ode.plugin.j2735.builders.TravelerMessageFromHumanToAsnConverter; import us.dot.its.jpo.ode.plugin.j2735.timstorage.MessageFrame; import us.dot.its.jpo.ode.plugin.j2735.timstorage.TravelerInputData; +import us.dot.its.jpo.ode.rsu.RsuProperties; import us.dot.its.jpo.ode.util.JsonUtils; import us.dot.its.jpo.ode.util.JsonUtils.JsonUtilsException; import us.dot.its.jpo.ode.util.XmlUtils; @@ -220,14 +218,14 @@ private static ArrayNode buildEncodings(DdsAdvisorySituationData asd) throws Jso return encodings; } - public static void updateRsuCreds(RSU rsu, OdeProperties odeProperties) { + public static void updateRsuCreds(RSU rsu, RsuProperties rsuProperties) { if (rsu.getRsuUsername() == null || rsu.getRsuUsername().isEmpty()) { - rsu.setRsuUsername(odeProperties.getRsuUsername()); + rsu.setRsuUsername(rsuProperties.getUsername()); } if (rsu.getRsuPassword() == null || rsu.getRsuPassword().isEmpty()) { - rsu.setRsuPassword(odeProperties.getRsuPassword()); + rsu.setRsuPassword(rsuProperties.getPassword()); } } @@ -235,16 +233,4 @@ public static JsonNode buildEncodingNode(String name, String type, EncodingRule Asn1Encoding mfEnc = new Asn1Encoding(name, type, rule); return JsonUtils.toObjectNode(mfEnc.toJson()); } - - public static JSONObject createOdeTimData(JSONObject timData) { - - JSONObject metadata = timData.getJSONObject(AppContext.METADATA_STRING); - metadata.put("payloadType", OdeTimPayload.class.getName()); - metadata.remove(AppContext.ENCODINGS_STRING); - - JSONObject payload = timData.getJSONObject(AppContext.PAYLOAD_STRING); - payload.put(AppContext.DATA_TYPE_STRING, TravelerMessageFromHumanToAsnConverter.TRAVELER_INFORMATION); - return timData; - } - } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java index f4ed3b121..59586800a 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/AbstractUdpReceiverPublisher.java @@ -1,58 +1,49 @@ package us.dot.its.jpo.ode.udp; +import lombok.extern.slf4j.Slf4j; + import java.net.DatagramSocket; import java.net.SocketException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.OdeProperties; - +@Slf4j public abstract class AbstractUdpReceiverPublisher implements Runnable { - public class UdpReceiverException extends Exception { - private static final long serialVersionUID = 1L; - - public UdpReceiverException(String string, Exception e) { - super(string, e); - } - } + public class UdpReceiverException extends Exception { + private static final long serialVersionUID = 1L; - private static Logger logger = LoggerFactory.getLogger(AbstractUdpReceiverPublisher.class); - protected DatagramSocket socket; + public UdpReceiverException(String string, Exception e) { + super(string, e); + } + } - protected String senderIp; - protected int senderPort; + protected DatagramSocket socket; - protected OdeProperties odeProperties; - protected int port; - protected int bufferSize; + protected String senderIp; + protected int senderPort; - private boolean stopped = false; + protected int port; + protected int bufferSize; - public boolean isStopped() { - return stopped; - } + private boolean stopped = false; - public void setStopped(boolean stopped) { - this.stopped = stopped; - } + public boolean isStopped() { + return stopped; + } - @Autowired - public AbstractUdpReceiverPublisher(OdeProperties odeProps, int port, int bufferSize) { - this.odeProperties = odeProps; - this.port = port; - this.bufferSize = bufferSize; + public void setStopped(boolean stopped) { + this.stopped = stopped; + } - try { - socket = new DatagramSocket(this.port); - logger.info("Created UDP socket bound to port {}", this.port); - } catch (SocketException e) { - logger.error("Error creating socket with port " + this.port, e); - } - } + protected AbstractUdpReceiverPublisher(int port, int bufferSize) { + this.port = port; + this.bufferSize = bufferSize; - + try { + this.socket = new DatagramSocket(this.port); + log.info("Created UDP socket bound to port {}", this.port); + } catch (SocketException e) { + log.error("Error creating socket with port {}", this.port, e); + } + } } \ No newline at end of file diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/InvalidPayloadException.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/InvalidPayloadException.java new file mode 100644 index 000000000..975b31dc7 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/InvalidPayloadException.java @@ -0,0 +1,9 @@ +package us.dot.its.jpo.ode.udp; + +public class InvalidPayloadException extends Exception { + private static final long serialVersionUID = 1L; + + public InvalidPayloadException(String message) { + super(message); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java index bd62c7d0f..840321317 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/UdpHexDecoder.java @@ -1,14 +1,8 @@ package us.dot.its.jpo.ode.udp; import java.net.DatagramPacket; -import java.time.ZoneOffset; -import java.time.ZonedDateTime; -import java.time.format.DateTimeFormatter; - +import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import us.dot.its.jpo.ode.model.OdeAsn1Data; import us.dot.its.jpo.ode.model.OdeAsn1Payload; import us.dot.its.jpo.ode.model.OdeBsmMetadata; @@ -30,209 +24,296 @@ import us.dot.its.jpo.ode.model.OdeTimMetadata; import us.dot.its.jpo.ode.model.ReceivedMessageDetails; import us.dot.its.jpo.ode.model.RxSource; +import us.dot.its.jpo.ode.uper.SupportedMessageType; import us.dot.its.jpo.ode.uper.UperUtil; +import us.dot.its.jpo.ode.util.DateTimeUtils; import us.dot.its.jpo.ode.util.JsonUtils; +/** + * The `UdpHexDecoder` class provides functionalities to decode UDP DatagramPackets into specific + * JSON representations based on the message type. It supports the extraction and conversion of the + * packet payloads into ASN.1 payloads for various message types such as MAP, SPAT, TIM, BSM, SSM, + * SRM, and PSM. + * + *

The class logs details about the packet's origin and ensures the payload contains the correct + * message type start flag. It provides methods to build JSON objects encapsulating metadata about + * each packet's origin, source, record type, and security information. + * + *

Note that this class cannot be instantiated. + */ +@Slf4j public class UdpHexDecoder { - - private static Logger logger = LoggerFactory.getLogger(UdpHexDecoder.class); - - public static OdeAsn1Payload getPayloadHexString(DatagramPacket packet, UperUtil.SupportedMessageTypes msgType) { - String startFlag = UperUtil.getStartFlag(msgType); - // extract the actual packet from the buffer - byte[] payload = packet.getData(); - if (payload == null) - return null; - // convert bytes to hex string and verify identity - String payloadHexString = HexUtils.toHexString(payload).toLowerCase(); - if (payloadHexString.indexOf(startFlag) == -1) - return null; - - logger.debug("Full {} packet: {}", msgType, payloadHexString); - - payloadHexString = UperUtil.stripTrailingZeros(UperUtil.stripDot3Header(payloadHexString, startFlag)).toLowerCase(); - logger.debug("Stripped {} packet: {}", msgType, payloadHexString); - - OdeAsn1Payload odePayload = new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); - - return odePayload; - } - - public static String buildJsonMapFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload mapPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.MAP); - if (mapPayload == null) - return null; - OdeMapMetadata mapMetadata = new OdeMapMetadata(mapPayload); - - // Add header data for the decoding process - mapMetadata.setOdeReceivedAt(getUtcTimeString()); - - mapMetadata.setOriginIp(senderIp); - mapMetadata.setMapSource(MapSource.RSU); - mapMetadata.setRecordType(RecordType.mapTx); - mapMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - mapMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(mapMetadata, mapPayload), false); - } - - public static String buildJsonSpatFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload spatPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SPAT); - if (spatPayload == null) - return null; - OdeSpatMetadata spatMetadata = new OdeSpatMetadata(spatPayload); - - // Add header data for the decoding process - spatMetadata.setOdeReceivedAt(getUtcTimeString()); - - spatMetadata.setOriginIp(senderIp); - spatMetadata.setSpatSource(SpatSource.RSU); - spatMetadata.setRecordType(RecordType.spatTx); - spatMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - spatMetadata.setSecurityResultCode(SecurityResultCode.success); - - - return JsonUtils.toJson(new OdeAsn1Data(spatMetadata, spatPayload), false); - } - - public static String buildJsonTimFromPacket(DatagramPacket packet){ - - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload timPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.TIM); - if (timPayload == null) - return null; - OdeTimMetadata timMetadata = new OdeTimMetadata(timPayload); - - // Add header data for the decoding process - timMetadata.setOdeReceivedAt(getUtcTimeString()); - - timMetadata.setOriginIp(senderIp); - timMetadata.setRecordType(RecordType.timMsg); - timMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - timMetadata.setSecurityResultCode(SecurityResultCode.success); - return JsonUtils.toJson(new OdeAsn1Data(timMetadata, timPayload), false); - } - - public static String buildJsonBsmFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - OdeAsn1Payload bsmPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.BSM); - if (bsmPayload == null) - return null; - OdeBsmMetadata bsmMetadata = new OdeBsmMetadata(bsmPayload); - - // Set BSM Metadata values that can be assumed from the UDP endpoint - bsmMetadata.setOdeReceivedAt(getUtcTimeString()); - - ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); - OdeLogMsgMetadataLocation locationData = new OdeLogMsgMetadataLocation( - "unavailable", - "unavailable", - "unavailable", - "unavailable", - "unavailable"); - receivedMessageDetails.setRxSource(RxSource.RSU); - receivedMessageDetails.setLocationData(locationData); - bsmMetadata.setReceivedMessageDetails(receivedMessageDetails); - - bsmMetadata.setOriginIp(senderIp); - bsmMetadata.setBsmSource(BsmSource.EV); - bsmMetadata.setRecordType(RecordType.bsmTx); - bsmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); - bsmMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(bsmMetadata, bsmPayload), false); - } - - public static String buildJsonSsmFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload ssmPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SSM); - if (ssmPayload == null) - return null; - OdeSsmMetadata ssmMetadata = new OdeSsmMetadata(ssmPayload); - - // Add header data for the decoding process - ssmMetadata.setOdeReceivedAt(getUtcTimeString()); - - ssmMetadata.setOriginIp(senderIp); - ssmMetadata.setSsmSource(SsmSource.RSU); - ssmMetadata.setRecordType(RecordType.ssmTx); - ssmMetadata.setRecordGeneratedBy(GeneratedBy.RSU); - ssmMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(ssmMetadata, ssmPayload), false); - } - public static String buildJsonSrmFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload srmPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.SRM); - if (srmPayload == null) - return null; - OdeSrmMetadata srmMetadata = new OdeSrmMetadata(srmPayload); - - // Add header data for the decoding process - srmMetadata.setOdeReceivedAt(getUtcTimeString()); - - srmMetadata.setOriginIp(senderIp); - srmMetadata.setSrmSource(SrmSource.RSU); - srmMetadata.setRecordType(RecordType.srmTx); - srmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); - srmMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(srmMetadata, srmPayload), false); + private UdpHexDecoder() { + throw new UnsupportedOperationException(); + } + + /** + * Extracts the payload from the given {@link DatagramPacket} and converts it into an + * {@link OdeAsn1Payload} object. The method validates that the payload contains the necessary + * start flag for the specified message type. + * + * @param packet the DatagramPacket containing the data + * @param msgType the type of message expected in the payload + * @return the extracted OdeAsn1Payload from the packet + * @throws InvalidPayloadException if the payload is null or does not contain the expected start + * flag + */ + public static OdeAsn1Payload getPayloadHexString(DatagramPacket packet, + SupportedMessageType msgType) + throws InvalidPayloadException { + // retrieve the buffer from the packet + byte[] buffer = packet.getData(); + if (buffer == null) { + throw new InvalidPayloadException("Buffer is null, no payload to extract"); } - public static String buildJsonPsmFromPacket(DatagramPacket packet){ - String senderIp = packet.getAddress().getHostAddress(); - int senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - // Create OdeMsgPayload and OdeLogMetadata objects and populate them - OdeAsn1Payload psmPayload = getPayloadHexString(packet, UperUtil.SupportedMessageTypes.PSM); - if (psmPayload == null) - return null; - OdePsmMetadata psmMetadata = new OdePsmMetadata(psmPayload); - // Add header data for the decoding process - psmMetadata.setOdeReceivedAt(getUtcTimeString()); - - psmMetadata.setOriginIp(senderIp); - psmMetadata.setPsmSource(PsmSource.RSU); - psmMetadata.setRecordType(RecordType.psmTx); - psmMetadata.setRecordGeneratedBy(GeneratedBy.UNKNOWN); - psmMetadata.setSecurityResultCode(SecurityResultCode.success); - - return JsonUtils.toJson(new OdeAsn1Data(psmMetadata, psmPayload), false); - } + // retrieve the payload from the buffer + int lengthOfReceivedPacket = packet.getLength(); + int offsetOfReceivedPacket = packet.getOffset(); + byte[] payload = retrieveRelevantBytes(lengthOfReceivedPacket, buffer, offsetOfReceivedPacket); - public static String getUtcTimeString(){ - ZonedDateTime utc = ZonedDateTime.now(ZoneOffset.UTC); - String timestamp = utc.format(DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")); - return timestamp; + // convert bytes to hex string and verify identity + String payloadHexString = HexUtils.toHexString(payload).toLowerCase(); + if (!payloadHexString.contains(msgType.getStartFlag())) { + throw new InvalidPayloadException("Payload does not contain start flag"); } - + log.debug("Full {} packet: {}", msgType, payloadHexString); + + payloadHexString = + UperUtil.stripDot3Header(payloadHexString, msgType.getStartFlag()).toLowerCase(); + log.debug("Stripped {} packet: {}", msgType, payloadHexString); + + return new OdeAsn1Payload(HexUtils.fromHexString(payloadHexString)); + } + + /** + * Converts the data from the given {@link DatagramPacket} into a JSON string representing a MAP + * message. It extracts metadata and payload, then structures them into a JSON format. + * + * @param packet the DatagramPacket containing the MAP data + * @return a JSON string representing the MAP message + * @throws InvalidPayloadException if the payload extraction fails + */ + public static String buildJsonMapFromPacket(DatagramPacket packet) + throws InvalidPayloadException { + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + log.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload mapPayload = getPayloadHexString(packet, SupportedMessageType.MAP); + OdeMapMetadata mapMetadata = new OdeMapMetadata(mapPayload); + + // Add header data for the decoding process + mapMetadata.setOdeReceivedAt(DateTimeUtils.now()); + + mapMetadata.setOriginIp(senderIp); + mapMetadata.setMapSource(MapSource.RSU); + mapMetadata.setRecordType(RecordType.mapTx); + mapMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + mapMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(mapMetadata, mapPayload), false); + } + + /** + * Converts the data from the given {@link DatagramPacket} into a JSON string representing an SPAT + * message. It extracts metadata and payload, then structures them into a JSON format. + * + * @param packet the DatagramPacket containing the SPAT data + * @return a JSON string representing the SPAT message + * @throws InvalidPayloadException if the payload extraction fails + */ + public static String buildJsonSpatFromPacket(DatagramPacket packet) + throws InvalidPayloadException { + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + log.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload spatPayload = getPayloadHexString(packet, SupportedMessageType.SPAT); + OdeSpatMetadata spatMetadata = new OdeSpatMetadata(spatPayload); + + // Add header data for the decoding process + spatMetadata.setOdeReceivedAt(DateTimeUtils.now()); + + spatMetadata.setOriginIp(senderIp); + spatMetadata.setSpatSource(SpatSource.RSU); + spatMetadata.setRecordType(RecordType.spatTx); + spatMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + spatMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(spatMetadata, spatPayload), false); + } + + /** + * Converts the data from the given {@link DatagramPacket} into a JSON string representing a TIM + * message. It extracts metadata and payload, then structures them into a JSON format. + * + * @param packet the DatagramPacket containing the TIM data + * @return a JSON string representing the TIM message + * @throws InvalidPayloadException if the payload extraction fails + */ + public static String buildJsonTimFromPacket(DatagramPacket packet) + throws InvalidPayloadException { + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + log.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload timPayload = getPayloadHexString(packet, SupportedMessageType.TIM); + OdeTimMetadata timMetadata = new OdeTimMetadata(timPayload); + + // Add header data for the decoding process + timMetadata.setOdeReceivedAt(DateTimeUtils.now()); + + timMetadata.setOriginIp(senderIp); + timMetadata.setRecordType(RecordType.timMsg); + timMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + timMetadata.setSecurityResultCode(SecurityResultCode.success); + return JsonUtils.toJson(new OdeAsn1Data(timMetadata, timPayload), false); + } + + /** + * Converts the data from the given {@link DatagramPacket} into a JSON string representing a BSM + * message. It extracts metadata and payload, then structures them into a JSON format. + * + * @param packet the DatagramPacket containing the BSM data + * @return a JSON string representing the BSM message + * @throws InvalidPayloadException if the payload extraction fails + */ + public static String buildJsonBsmFromPacket(DatagramPacket packet) + throws InvalidPayloadException { + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + log.debug("Packet received from {}:{}", senderIp, senderPort); + + OdeAsn1Payload bsmPayload = getPayloadHexString(packet, SupportedMessageType.BSM); + OdeBsmMetadata bsmMetadata = new OdeBsmMetadata(bsmPayload); + + // Set BSM Metadata values that can be assumed from the UDP endpoint + bsmMetadata.setOdeReceivedAt(DateTimeUtils.now()); + + ReceivedMessageDetails receivedMessageDetails = new ReceivedMessageDetails(); + OdeLogMsgMetadataLocation locationData = + new OdeLogMsgMetadataLocation("unavailable", "unavailable", "unavailable", "unavailable", + "unavailable"); + receivedMessageDetails.setRxSource(RxSource.RSU); + receivedMessageDetails.setLocationData(locationData); + bsmMetadata.setReceivedMessageDetails(receivedMessageDetails); + + bsmMetadata.setOriginIp(senderIp); + bsmMetadata.setBsmSource(BsmSource.EV); + bsmMetadata.setRecordType(RecordType.bsmTx); + bsmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); + bsmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(bsmMetadata, bsmPayload), false); + } + + /** + * Converts the data from the given {@link DatagramPacket} into a JSON string representing an SSM + * message. It extracts metadata and payload, then structures them into a JSON format. + * + * @param packet the DatagramPacket containing the SSM data + * @return a JSON string representing the SSM message + * @throws InvalidPayloadException if the payload extraction fails + */ + public static String buildJsonSsmFromPacket(DatagramPacket packet) + throws InvalidPayloadException { + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + log.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload ssmPayload = getPayloadHexString(packet, SupportedMessageType.SSM); + OdeSsmMetadata ssmMetadata = new OdeSsmMetadata(ssmPayload); + + // Add header data for the decoding process + ssmMetadata.setOdeReceivedAt(DateTimeUtils.now()); + + ssmMetadata.setOriginIp(senderIp); + ssmMetadata.setSsmSource(SsmSource.RSU); + ssmMetadata.setRecordType(RecordType.ssmTx); + ssmMetadata.setRecordGeneratedBy(GeneratedBy.RSU); + ssmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(ssmMetadata, ssmPayload), false); + } + + /** + * Converts the data from the given {@link DatagramPacket} into a JSON string representing an SRM + * message. It extracts metadata and payload, then structures them into a JSON format. + * + * @param packet the DatagramPacket containing the SRM data + * @return a JSON string representing the SRM message + * @throws InvalidPayloadException if the payload extraction fails + */ + public static String buildJsonSrmFromPacket(DatagramPacket packet) + throws InvalidPayloadException { + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + log.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload srmPayload = getPayloadHexString(packet, SupportedMessageType.SRM); + OdeSrmMetadata srmMetadata = new OdeSrmMetadata(srmPayload); + + // Add header data for the decoding process + srmMetadata.setOdeReceivedAt(DateTimeUtils.now()); + + srmMetadata.setOriginIp(senderIp); + srmMetadata.setSrmSource(SrmSource.RSU); + srmMetadata.setRecordType(RecordType.srmTx); + srmMetadata.setRecordGeneratedBy(GeneratedBy.OBU); + srmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(srmMetadata, srmPayload), false); + } + + /** + * Converts the data from the given {@link DatagramPacket} into a JSON string representing a PSM + * message. It extracts metadata and payload, then structures them into a JSON format. + * + * @param packet the DatagramPacket containing the PSM data + * @return a JSON string representing the PSM message + * @throws InvalidPayloadException if the payload extraction fails + */ + public static String buildJsonPsmFromPacket(DatagramPacket packet) + throws InvalidPayloadException { + String senderIp = packet.getAddress().getHostAddress(); + int senderPort = packet.getPort(); + log.debug("Packet received from {}:{}", senderIp, senderPort); + + // Create OdeMsgPayload and OdeLogMetadata objects and populate them + OdeAsn1Payload psmPayload = getPayloadHexString(packet, SupportedMessageType.PSM); + OdePsmMetadata psmMetadata = new OdePsmMetadata(psmPayload); + // Add header data for the decoding process + psmMetadata.setOdeReceivedAt(DateTimeUtils.now()); + + psmMetadata.setOriginIp(senderIp); + psmMetadata.setPsmSource(PsmSource.RSU); + psmMetadata.setRecordType(RecordType.psmTx); + psmMetadata.setRecordGeneratedBy(GeneratedBy.UNKNOWN); + psmMetadata.setSecurityResultCode(SecurityResultCode.success); + + return JsonUtils.toJson(new OdeAsn1Data(psmMetadata, psmPayload), false); + } + + /** + * Given a buffer containing the full payload, this method retrieves and returns only the relevant + * bytes of the message, excluding any padded bytes. + * + * @param length The length of the message + * @param buffer The buffer containing the full message and possibly padded bytes + * @param offset The position in the buffer where the message starts + * @return The relevant bytes of the message + */ + private static byte[] retrieveRelevantBytes(int length, byte[] buffer, int offset) { + byte[] relevantPayload = new byte[length]; + System.arraycopy(buffer, offset, relevantPayload, 0, length); + return relevantPayload; + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java index f135593a1..507cd5d57 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiver.java @@ -1,61 +1,74 @@ package us.dot.its.jpo.ode.udp.bsm; import java.net.DatagramPacket; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.StringPublisher; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.InvalidPayloadException; import us.dot.its.jpo.ode.udp.UdpHexDecoder; - +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; + +/** + * The BsmReceiver class is responsible for receiving UDP packets containing Basic Safety Message + * (BSM) data, decoding the packets, and publishing the decoded message to a specified Kafka topic. + * It extends the AbstractUdpReceiverPublisher, leveraging its capabilities to receive UDP packets + * asynchronously. + */ +@Slf4j public class BsmReceiver extends AbstractUdpReceiverPublisher { - private static Logger logger = LoggerFactory.getLogger(BsmReceiver.class); - - private StringPublisher bsmPublisher; - - @Autowired - public BsmReceiver(OdeProperties odeProps) { - this(odeProps, odeProps.getBsmReceiverPort(), odeProps.getBsmBufferSize()); - - this.bsmPublisher = new StringPublisher(odeProps); - } - - public BsmReceiver(OdeProperties odeProps, int port, int bufferSize) { - super(odeProps, port, bufferSize); - - this.bsmPublisher = new StringPublisher(odeProps); - } - - @Override - public void run() { - - logger.debug("BSM UDP Receiver Service started."); - - byte[] buffer = new byte[bufferSize]; - - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); - - do { - try { - logger.debug("Waiting for UDP BSM packets..."); - socket.receive(packet); - if (packet.getLength() > 0) { - String bsmJson = UdpHexDecoder.buildJsonBsmFromPacket(packet); - - if(bsmJson != null){ - bsmPublisher.publish(bsmJson, bsmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedBSMJson()); - } - - + private final KafkaTemplate bsmPublisher; + private final String publishTopic; + + /** + * Constructs a BsmReceiver object that is responsible for receiving UDP packets, decoding Basic + * Safety Message (BSM) data, and publishing the decoded message to a specified Kafka topic. + * + * @param receiverProperties properties that configure the UDP receiver, including the port and + * buffer size. + * @param template KafkaTemplate used for sending messages to the Kafka broker. + * @param publishTopic the Kafka topic to which the decoded BSM data should be published. + */ + public BsmReceiver(UDPReceiverProperties.ReceiverProperties receiverProperties, + KafkaTemplate template, String publishTopic) { + super(receiverProperties.getReceiverPort(), receiverProperties.getBufferSize()); + + this.publishTopic = publishTopic; + this.bsmPublisher = template; + } + + @Override + public void run() { + log.debug("BSM UDP Receiver Service started."); + + byte[] buffer = new byte[bufferSize]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + do { + try { + log.debug("Waiting for UDP BSM packets..."); + this.socket.receive(packet); + if ((packet.getLength() <= 0)) { + log.debug("Skipping empty payload"); + continue; + } + + String bsmJson = UdpHexDecoder.buildJsonBsmFromPacket(packet); + if (bsmJson != null) { + log.debug("Publishing String data to {}", publishTopic); + + var sendResult = bsmPublisher.send(publishTopic, bsmJson); + sendResult.whenCompleteAsync((result, error) -> { + if (error != null) { + log.error("Error sending BSM to Kafka", error); } - } catch (Exception e) { - logger.error("Error receiving packet", e); - } - } while (!isStopped()); - } - - + }); + } + + } catch (InvalidPayloadException e) { + log.error("Error decoding packet", e); + } catch (Exception e) { + log.error("Error receiving packet", e); + } + } while (!isStopped()); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UDPReceiverProperties.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UDPReceiverProperties.java new file mode 100644 index 000000000..0d0e8f72e --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UDPReceiverProperties.java @@ -0,0 +1,27 @@ +package us.dot.its.jpo.ode.udp.controller; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +@Configuration +@ConfigurationProperties(prefix = "ode.receivers") +@Data +@Primary +public class UDPReceiverProperties { + private ReceiverProperties generic; + private ReceiverProperties bsm; + private ReceiverProperties map; + private ReceiverProperties psm; + private ReceiverProperties spat; + private ReceiverProperties srm; + private ReceiverProperties ssm; + private ReceiverProperties tim; + + @Data + public static class ReceiverProperties { + private int receiverPort; + private int bufferSize; + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UdpServicesController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UdpServicesController.java index c27352a9b..ae7da8093 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UdpServicesController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/controller/UdpServicesController.java @@ -1,62 +1,61 @@ package us.dot.its.jpo.ode.udp.controller; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Controller; - -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; import us.dot.its.jpo.ode.udp.bsm.BsmReceiver; import us.dot.its.jpo.ode.udp.generic.GenericReceiver; -import us.dot.its.jpo.ode.udp.tim.TimReceiver; -import us.dot.its.jpo.ode.udp.ssm.SsmReceiver; -import us.dot.its.jpo.ode.udp.srm.SrmReceiver; -import us.dot.its.jpo.ode.udp.spat.SpatReceiver; import us.dot.its.jpo.ode.udp.map.MapReceiver; import us.dot.its.jpo.ode.udp.psm.PsmReceiver; +import us.dot.its.jpo.ode.udp.spat.SpatReceiver; +import us.dot.its.jpo.ode.udp.srm.SrmReceiver; +import us.dot.its.jpo.ode.udp.ssm.SsmReceiver; +import us.dot.its.jpo.ode.udp.tim.TimReceiver; /** * Centralized UDP service dispatcher. - * */ @Controller +@Slf4j public class UdpServicesController { - private Logger logger = LoggerFactory.getLogger(UdpServicesController.class); - - @Autowired - public UdpServicesController(OdeProperties odeProps) { - super(); - - // Start the UDP receivers - ServiceManager rm = new ServiceManager(new UdpServiceThreadFactory("UdpReceiverManager")); - - logger.debug("Starting UDP receiver services..."); - - // BSM internal - rm.submit(new BsmReceiver(odeProps)); - - // TIM internal - rm.submit(new TimReceiver(odeProps)); - - // SSM internal port - rm.submit(new SsmReceiver(odeProps)); - - // SRM internal port - rm.submit(new SrmReceiver(odeProps)); - - // SPAT internal port - rm.submit(new SpatReceiver(odeProps)); - - // MAP internal port - rm.submit(new MapReceiver(odeProps)); - - // PSM internal port - rm.submit(new PsmReceiver(odeProps)); - - // Generic Receiver internal port - rm.submit(new GenericReceiver(odeProps)); - - logger.debug("UDP receiver services started."); - } + /** + * Constructs a UdpServicesController to manage UDP receiver services for different message + * types. + * + * @param udpProps Properties containing configuration for each UDP receiver. + * @param rawEncodedJsonTopics Topics to which the decoded messages will be published via Kafka. + * @param kafkaTemplate Template to facilitate sending messages to Kafka topics. + */ + @Autowired + public UdpServicesController(UDPReceiverProperties udpProps, + RawEncodedJsonTopics rawEncodedJsonTopics, + KafkaTemplate kafkaTemplate) { + super(); + + ServiceManager serviceManager = new ServiceManager( + new UdpServiceThreadFactory("UdpReceiverManager")); + log.debug("Starting UDP receiver services..."); + + serviceManager.submit( + new BsmReceiver(udpProps.getBsm(), kafkaTemplate, rawEncodedJsonTopics.getBsm())); + serviceManager.submit( + new TimReceiver(udpProps.getTim(), kafkaTemplate, rawEncodedJsonTopics.getTim())); + serviceManager.submit( + new SsmReceiver(udpProps.getSsm(), kafkaTemplate, rawEncodedJsonTopics.getSsm())); + serviceManager.submit( + new SrmReceiver(udpProps.getSrm(), kafkaTemplate, rawEncodedJsonTopics.getSrm())); + serviceManager.submit( + new SpatReceiver(udpProps.getSpat(), kafkaTemplate, rawEncodedJsonTopics.getSpat())); + serviceManager.submit( + new MapReceiver(udpProps.getMap(), kafkaTemplate, rawEncodedJsonTopics.getMap())); + serviceManager.submit( + new PsmReceiver(udpProps.getPsm(), kafkaTemplate, rawEncodedJsonTopics.getPsm())); + serviceManager.submit( + new GenericReceiver(udpProps.getGeneric(), kafkaTemplate, rawEncodedJsonTopics)); + + log.debug("UDP receiver services started."); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java index 90a8042d7..f2810860d 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/generic/GenericReceiver.java @@ -1,115 +1,137 @@ package us.dot.its.jpo.ode.udp.generic; +import io.netty.handler.codec.UnsupportedMessageTypeException; import java.net.DatagramPacket; +import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.StringPublisher; +import org.springframework.kafka.core.KafkaTemplate; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.InvalidPayloadException; import us.dot.its.jpo.ode.udp.UdpHexDecoder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties.ReceiverProperties; import us.dot.its.jpo.ode.uper.UperUtil; +/** + * GenericReceiver is a class that listens for UDP packets and processes them based on the + * determined message type. It extends AbstractUdpReceiverPublisher to take advantage of the + * runnable interface for running the receiver service in a separate thread. + * + *

The class is designed to handle all {@link us.dot.its.jpo.ode.uper.SupportedMessageType} + * message types encoded in UDP packets such as and routes them to the appropriate Kafka topic. + */ +@Slf4j public class GenericReceiver extends AbstractUdpReceiverPublisher { - private static Logger logger = LoggerFactory.getLogger(GenericReceiver.class); - - private StringPublisher publisher; - - - - @Autowired - public GenericReceiver(OdeProperties odeProps) { - this(odeProps, odeProps.getGenericReceiverPort(), odeProps.getGenericBufferSize()); - - this.publisher = new StringPublisher(odeProps); - } - - public GenericReceiver(OdeProperties odeProps, int port, int bufferSize) { - super(odeProps, port, bufferSize); - - this.publisher = new StringPublisher(odeProps); - + private final KafkaTemplate publisher; + private final RawEncodedJsonTopics rawEncodedJsonTopics; + + /** + * Constructs a new GenericReceiver with the specified properties, Kafka template, and raw encoded + * JSON topics. + * + * @param props the receiver properties containing configuration settings such as + * port and buffer size + * @param kafkaTemplate the KafkaTemplate used for publishing messages + * @param rawEncodedJsonTopics the configuration object containing the topics used to publish + * messages + */ + public GenericReceiver(ReceiverProperties props, KafkaTemplate kafkaTemplate, + RawEncodedJsonTopics rawEncodedJsonTopics) { + super(props.getReceiverPort(), props.getBufferSize()); + + this.publisher = kafkaTemplate; + this.rawEncodedJsonTopics = rawEncodedJsonTopics; + } + + @Override + public void run() { + log.debug("Generic UDP Receiver Service started."); + + byte[] buffer; + do { + buffer = new byte[bufferSize]; + // packet should be recreated on each loop to prevent latent data in buffer + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + try { + log.debug("Waiting for Generic UDP packets..."); + socket.receive(packet); + byte[] payload = packet.getData(); + if ((packet.getLength() <= 0) || (payload == null)) { + log.debug("Skipping empty payload"); + continue; + } + + senderIp = packet.getAddress().getHostAddress(); + senderPort = packet.getPort(); + log.debug("Packet received from {}:{}", senderIp, senderPort); + + String payloadHexString = HexUtils.toHexString(payload).toLowerCase(); + log.debug("Raw Payload {}", payloadHexString); + + String messageType = UperUtil.determineHexPacketType(payloadHexString); + routeMessageByMessageType(messageType, packet); + + } catch (UnsupportedMessageTypeException e) { + log.error("Unsupported Message Type", e); + } catch (InvalidPayloadException e) { + log.error("Error decoding packet", e); + } catch (Exception e) { + log.error("Error receiving packet", e); + } + } while (!isStopped()); + } + + private void routeMessageByMessageType( + String messageType, + DatagramPacket packet + ) throws InvalidPayloadException, UnsupportedMessageTypeException { + log.debug("Detected Message Type {}", messageType); + switch (messageType) { + case "MAP" -> { + String mapJson = UdpHexDecoder.buildJsonMapFromPacket(packet); + log.debug("Sending Data to Topic {}", mapJson); + if (mapJson != null) { + publisher.send(rawEncodedJsonTopics.getMap(), mapJson); + } + } + case "SPAT" -> { + String spatJson = UdpHexDecoder.buildJsonSpatFromPacket(packet); + if (spatJson != null) { + publisher.send(rawEncodedJsonTopics.getSpat(), spatJson); + } + } + case "TIM" -> { + String timJson = UdpHexDecoder.buildJsonTimFromPacket(packet); + if (timJson != null) { + publisher.send(rawEncodedJsonTopics.getTim(), timJson); + } + } + case "BSM" -> { + String bsmJson = UdpHexDecoder.buildJsonBsmFromPacket(packet); + if (bsmJson != null) { + publisher.send(rawEncodedJsonTopics.getBsm(), bsmJson); + } + } + case "SSM" -> { + String ssmJson = UdpHexDecoder.buildJsonSsmFromPacket(packet); + if (ssmJson != null) { + publisher.send(rawEncodedJsonTopics.getSsm(), ssmJson); + } + } + case "SRM" -> { + String srmJson = UdpHexDecoder.buildJsonSrmFromPacket(packet); + if (srmJson != null) { + publisher.send(rawEncodedJsonTopics.getSrm(), srmJson); + } + } + case "PSM" -> { + String psmJson = UdpHexDecoder.buildJsonPsmFromPacket(packet); + if (psmJson != null) { + publisher.send(rawEncodedJsonTopics.getPsm(), psmJson); + } + } + default -> throw new UnsupportedMessageTypeException(messageType); } - - @Override - public void run() { - - logger.debug("Generic UDP Receiver Service started."); - - byte[] buffer = new byte[bufferSize]; - - - - do { - buffer = new byte[bufferSize]; - // packet should be recreated on each loop to prevent latent data in buffer - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); - try { - logger.debug("Waiting for Generic UDP packets..."); - socket.receive(packet); - if (packet.getLength() > 0) { - senderIp = packet.getAddress().getHostAddress(); - senderPort = packet.getPort(); - logger.debug("Packet received from {}:{}", senderIp, senderPort); - - byte[] payload = packet.getData(); - if (payload == null){ - logger.debug("Skipping Null Payload"); - continue; - } - String payloadHexString = HexUtils.toHexString(payload).toLowerCase(); - logger.debug("Raw Payload" + payloadHexString); - - String messageType = UperUtil.determineHexPacketType(payloadHexString); - - logger.debug("Detected Message Type {}", messageType); - - if (messageType.equals("MAP")) { - String mapJson = UdpHexDecoder.buildJsonMapFromPacket(packet); - logger.debug("Sending Data to Topic" + mapJson); - if(mapJson != null){ - publisher.publish(mapJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); - } - } else if(messageType.equals("SPAT")) { - String spatJson = UdpHexDecoder.buildJsonSpatFromPacket(packet); - if(spatJson != null){ - publisher.publish(spatJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); - } - } else if (messageType.equals("TIM")) { - String timJson = UdpHexDecoder.buildJsonTimFromPacket(packet); - if(timJson != null){ - publisher.publish(timJson, publisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); - } - } else if (messageType.equals("BSM")) { - String bsmJson = UdpHexDecoder.buildJsonBsmFromPacket(packet); - if(bsmJson!=null){ - publisher.publish(bsmJson, this.odeProperties.getKafkaTopicOdeRawEncodedBSMJson()); - } - } else if (messageType.equals("SSM")) { - String ssmJson = UdpHexDecoder.buildJsonSsmFromPacket(packet); - if(ssmJson!=null){ - publisher.publish(ssmJson, this.odeProperties.getKafkaTopicOdeRawEncodedSSMJson()); - } - } else if (messageType.equals("SRM")) { - String srmJson = UdpHexDecoder.buildJsonSrmFromPacket(packet); - if(srmJson!=null){ - publisher.publish(srmJson, this.odeProperties.getKafkaTopicOdeRawEncodedSRMJson()); - } - } else if (messageType.equals("PSM")) { - String psmJson = UdpHexDecoder.buildJsonPsmFromPacket(packet); - if(psmJson!=null){ - publisher.publish(psmJson, this.odeProperties.getKafkaTopicOdeRawEncodedPSMJson()); - } - }else{ - logger.debug("Unknown Message Type"); - } - } - } catch (Exception e) { - logger.error("Error receiving packet", e); - } - } while (!isStopped()); - } + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java index 53a4dcd55..77d2f26b6 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/map/MapReceiver.java @@ -1,60 +1,69 @@ package us.dot.its.jpo.ode.udp.map; import java.net.DatagramPacket; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.OdeProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.InvalidPayloadException; import us.dot.its.jpo.ode.udp.UdpHexDecoder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +/** + * The MapReceiver class is responsible for receiving UDP packets, decoding them, and publishing the + * decoded JSON map to a specified Kafka topic. It extends the {@link AbstractUdpReceiverPublisher} + * class to leverage UDP receiving capabilities. + * + *

MapReceiver listens on a specified port for incoming UDP packets encapsulating + * map data, and decodes these packets. Upon successful decoding, the map data is published to a + * Kafka topic using KafkaTemplate. + */ +@Slf4j public class MapReceiver extends AbstractUdpReceiverPublisher { - private static Logger logger = LoggerFactory.getLogger(MapReceiver.class); - - private StringPublisher mapPublisher; - - @Autowired - public MapReceiver(OdeProperties odeProps) { - this(odeProps, odeProps.getMapReceiverPort(), odeProps.getMapBufferSize()); - - this.mapPublisher = new StringPublisher(odeProps); - } - - public MapReceiver(OdeProperties odeProps, int port, int bufferSize) { - super(odeProps, port, bufferSize); - - this.mapPublisher = new StringPublisher(odeProps); - } - - @Override - public void run() { - - logger.debug("Map UDP Receiver Service started."); - byte[] buffer = new byte[bufferSize]; + KafkaTemplate kafkaTemplate; + private final String publishTopic; - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + /** + * Constructs a new MapReceiver instance to receive UDP packets, decode them, and publish the + * decoded map data to a specified Kafka topic. + * + * @param receiverProperties The properties that define the UDP receiver configuration, including + * the port on which to listen and the buffer size for incoming + * packets. + * @param kafkaTemplate The KafkaTemplate instance used to send messages to the Kafka topic. + * @param publishTopic The topic to which decoded map data should be published. + */ + public MapReceiver(UDPReceiverProperties.ReceiverProperties receiverProperties, + KafkaTemplate kafkaTemplate, String publishTopic) { + super(receiverProperties.getReceiverPort(), receiverProperties.getBufferSize()); + this.kafkaTemplate = kafkaTemplate; + this.publishTopic = publishTopic; + } - do { - try { - logger.debug("Waiting for UDP Map packets..."); - socket.receive(packet); - if (packet.getLength() > 0) { - - String mapJson = UdpHexDecoder.buildJsonMapFromPacket(packet); - if(mapJson != null){ - mapPublisher.publish(mapJson, mapPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedMAPJson()); - } - - } - } catch (Exception e) { - logger.error("Error receiving packet", e); - } - } while (!isStopped()); - } + @Override + public void run() { + log.debug("Map UDP Receiver Service started."); + byte[] buffer = new byte[bufferSize]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + do { + try { + log.debug("Waiting for UDP Map packets..."); + socket.receive(packet); + if (packet.getLength() > 0) { + String mapJson = UdpHexDecoder.buildJsonMapFromPacket(packet); + if (mapJson != null) { + kafkaTemplate.send(publishTopic, mapJson); + } + } else { + log.debug("Ignoring empty packet from {}", packet.getSocketAddress()); + } + } catch (InvalidPayloadException e) { + log.error("Error decoding packet", e); + } catch (Exception e) { + log.error("Error receiving packet", e); + } + } while (!isStopped()); + } - } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java index 82bb93b41..a7619230b 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/psm/PsmReceiver.java @@ -1,57 +1,68 @@ package us.dot.its.jpo.ode.udp.psm; import java.net.DatagramPacket; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.OdeProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.InvalidPayloadException; import us.dot.its.jpo.ode.udp.UdpHexDecoder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties.ReceiverProperties; +/** + * The PsmReceiver class extends AbstractUdpReceiverPublisher and is responsible for receiving UDP + * packets containing PSM (Position & Status Message) data, decoding them from their hex + * representation to JSON format, and then publishing the JSON data to a Kafka topic. + * + *

+ * The class utilizes a KafkaTemplate for publishing messages and a configurable topic name where + * the decoded PSM JSON messages are sent. + */ +@Slf4j public class PsmReceiver extends AbstractUdpReceiverPublisher { - private static Logger logger = LoggerFactory.getLogger(PsmReceiver.class); - - private StringPublisher psmPublisher; - - @Autowired - public PsmReceiver(OdeProperties odeProps) { - this(odeProps, odeProps.getPsmReceiverPort(), odeProps.getPsmBufferSize()); - - this.psmPublisher = new StringPublisher(odeProps); - } - - public PsmReceiver(OdeProperties odeProps, int port, int bufferSize) { - super(odeProps, port, bufferSize); - - this.psmPublisher = new StringPublisher(odeProps); - } - - @Override - public void run() { - logger.debug("PSM UDP Receiver Service started."); + private final KafkaTemplate psmPublisher; + private final String publishTopic; - byte[] buffer = new byte[bufferSize]; + /** + * Constructs a PsmReceiver object that listens for UDP packets containing Position & Status + * Message (PSM) data, decodes them, and publishes the decoded JSON data to a specified Kafka + * topic. + * + * @param receiverProperties The properties containing configuration details such as the port to + * listen on and buffer size. + * @param kafkaTemplate The KafkaTemplate used to publish messages to a Kafka topic. + * @param publishTopic The name of the Kafka topic to which decoded PSM JSON messages should + * be published. + */ + public PsmReceiver(ReceiverProperties receiverProperties, + KafkaTemplate kafkaTemplate, String publishTopic) { + super(receiverProperties.getReceiverPort(), receiverProperties.getBufferSize()); - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + this.publishTopic = publishTopic; + this.psmPublisher = kafkaTemplate; + } - do { - try { - logger.debug("Waiting for UDP PSM packets..."); - socket.receive(packet); - if (packet.getLength() > 0) { - String psmJson = UdpHexDecoder.buildJsonPsmFromPacket(packet); - if(psmJson != null){ - psmPublisher.publish(psmJson, psmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedPSMJson()); - } - } - } catch (Exception e) { - logger.error("Error receiving packet", e); - } - } while (!isStopped()); - } + @Override + public void run() { + log.debug("PSM UDP Receiver Service started."); - + byte[] buffer = new byte[bufferSize]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + do { + try { + log.debug("Waiting for UDP PSM packets..."); + socket.receive(packet); + if (packet.getLength() > 0) { + String psmJson = UdpHexDecoder.buildJsonPsmFromPacket(packet); + if (psmJson != null) { + psmPublisher.send(publishTopic, psmJson); + } + } + } catch (InvalidPayloadException e) { + log.error("Error decoding packet", e); + } catch (Exception e) { + log.error("Error receiving packet", e); + } + } while (!isStopped()); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java index d67706515..e6781a72a 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/spat/SpatReceiver.java @@ -1,58 +1,67 @@ package us.dot.its.jpo.ode.udp.spat; import java.net.DatagramPacket; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.OdeProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.InvalidPayloadException; import us.dot.its.jpo.ode.udp.UdpHexDecoder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties.ReceiverProperties; +/** + * The SpatReceiver class is responsible for receiving UDP packets containing SPaT (Signal Phase and + * Timing) data, decoding these packets, and publishing the resulting JSON string to a specified + * Kafka topic. + * + *

+ * This class extends the AbstractUdpReceiverPublisher, allowing it to run as a separate thread and + * handle incoming UDP packets. It utilizes a Kafka template to publish decoded data. + */ +@Slf4j public class SpatReceiver extends AbstractUdpReceiverPublisher { - private static Logger logger = LoggerFactory.getLogger(SpatReceiver.class); - - private StringPublisher spatPublisher; - - @Autowired - public SpatReceiver(OdeProperties odeProps) { - this(odeProps, odeProps.getSpatReceiverPort(), odeProps.getSpatBufferSize()); - - this.spatPublisher = new StringPublisher(odeProps); - } - - public SpatReceiver(OdeProperties odeProps, int port, int bufferSize) { - super(odeProps, port, bufferSize); - - this.spatPublisher = new StringPublisher(odeProps); - } - - @Override - public void run() { - - logger.debug("SPaT UDP Receiver Service started."); - byte[] buffer = new byte[bufferSize]; + private final KafkaTemplate spatPublisher; + private final String publishTopic; - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + /** + * Constructs a SpatReceiver object that is responsible for receiving UDP packets containing SPaT + * (Signal Phase and Timing) data, decoding these packets, and publishing the resulting JSON + * string to a specified Kafka topic. + * + * @param receiverProperties the properties for the receiver including the port and buffer size + * @param kafkaTemplate the Kafka template used for publishing the decoded SPaT data + * @param publishTopic the Kafka topic to which the decoded SPaT data will be published + */ + public SpatReceiver( + ReceiverProperties receiverProperties, KafkaTemplate kafkaTemplate, + String publishTopic) { + super(receiverProperties.getReceiverPort(), receiverProperties.getBufferSize()); - do { - try { - logger.debug("Waiting for UDP SPaT packets..."); - socket.receive(packet); - if (packet.getLength() > 0) { - String spatJson = UdpHexDecoder.buildJsonSpatFromPacket(packet); - if(spatJson != null){ - spatPublisher.publish(spatJson,spatPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSPATJson()); - } - } - } catch (Exception e) { - logger.error("Error receiving packet", e); - } - } while (!isStopped()); - } + this.publishTopic = publishTopic; + this.spatPublisher = kafkaTemplate; + } + @Override + public void run() { + log.debug("SPaT UDP Receiver Service started."); - + byte[] buffer = new byte[bufferSize]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + do { + try { + log.debug("Waiting for UDP SPaT packets..."); + socket.receive(packet); + if (packet.getLength() > 0) { + String spatJson = UdpHexDecoder.buildJsonSpatFromPacket(packet); + if (spatJson != null) { + spatPublisher.send(publishTopic, spatJson); + } + } + } catch (InvalidPayloadException e) { + log.error("Error decoding packet", e); + } catch (Exception e) { + log.error("Error receiving packet", e); + } + } while (!isStopped()); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java index 0c1361407..855f6ca6d 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/srm/SrmReceiver.java @@ -1,58 +1,70 @@ package us.dot.its.jpo.ode.udp.srm; import java.net.DatagramPacket; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.OdeProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.InvalidPayloadException; import us.dot.its.jpo.ode.udp.UdpHexDecoder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties.ReceiverProperties; +/** + * SrmReceiver is responsible for receiving UDP packets containing SRM (Signal Request Message) + * data, decoding them, and publishing the decoded messages to a specified Kafka topic. + * + *

+ * This class extends the AbstractUdpReceiverPublisher and overrides its run method to implement the + * logic for receiving packets, processing them, and sending the result to Kafka. + * + *

+ * It utilizes a KafkaTemplate for sending messages to Kafka and uses a DatagramSocket to listen for + * incoming UDP packets on a specified port. + */ +@Slf4j public class SrmReceiver extends AbstractUdpReceiverPublisher { - private static Logger logger = LoggerFactory.getLogger(SrmReceiver.class); - - private StringPublisher srmPublisher; - - @Autowired - public SrmReceiver(OdeProperties odeProps) { - this(odeProps, odeProps.getSrmReceiverPort(), odeProps.getSrmBufferSize()); - - this.srmPublisher = new StringPublisher(odeProps); - } - - public SrmReceiver(OdeProperties odeProps, int port, int bufferSize) { - super(odeProps, port, bufferSize); - - this.srmPublisher = new StringPublisher(odeProps); - } - - @Override - public void run() { - logger.debug("SRM UDP Receiver Service started."); + private final KafkaTemplate srmPublisher; + private final String publishTopic; - byte[] buffer = new byte[bufferSize]; + /** + * Constructs an instance of SrmReceiver which is responsible for receiving UDP packets carrying + * SRM data, decoding them, and publishing the results to a Kafka topic. + * + * @param receiverProperties the properties for configuring the UDP receiver, including port and + * buffer size. + * @param kafkaTemplate the KafkaTemplate to be used for publishing decoded messages to + * Kafka. + * @param publishTopic the Kafka topic to which the decoded SRM messages will be published. + */ + public SrmReceiver(ReceiverProperties receiverProperties, + KafkaTemplate kafkaTemplate, String publishTopic) { + super(receiverProperties.getReceiverPort(), receiverProperties.getBufferSize()); - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + this.publishTopic = publishTopic; + this.srmPublisher = kafkaTemplate; + } - do { - try { - logger.debug("Waiting for UDP SRM packets..."); - socket.receive(packet); - if (packet.getLength() > 0) { - - String srmJson = UdpHexDecoder.buildJsonSrmFromPacket(packet); - if(srmJson != null){ - srmPublisher.publish(srmJson, srmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSRMJson()); - } - } - } catch (Exception e) { - logger.error("Error receiving packet", e); - } - } while (!isStopped()); - } + @Override + public void run() { + log.debug("SRM UDP Receiver Service started."); - + byte[] buffer = new byte[bufferSize]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + do { + try { + log.debug("Waiting for UDP SRM packets..."); + socket.receive(packet); + if (packet.getLength() > 0) { + String srmJson = UdpHexDecoder.buildJsonSrmFromPacket(packet); + if (srmJson != null) { + srmPublisher.send(publishTopic, srmJson); + } + } + } catch (InvalidPayloadException e) { + log.error("Error decoding packet", e); + } catch (Exception e) { + log.error("Error receiving packet", e); + } + } while (!isStopped()); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java index cd28f5fd0..9175eefcb 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiver.java @@ -1,60 +1,61 @@ package us.dot.its.jpo.ode.udp.ssm; import java.net.DatagramPacket; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.OdeProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.InvalidPayloadException; import us.dot.its.jpo.ode.udp.UdpHexDecoder; - +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties.ReceiverProperties; + +/** + * The SsmReceiver class is responsible for receiving UDP packets and publishing them as JSON + * messages to a specified Kafka topic. It extends the functionality of AbstractUdpReceiverPublisher + * to handle UDP packet reception and decoding. + */ +@Slf4j public class SsmReceiver extends AbstractUdpReceiverPublisher { - private static Logger logger = LoggerFactory.getLogger(SsmReceiver.class); - - private StringPublisher ssmPublisher; - - @Autowired - public SsmReceiver(OdeProperties odeProps) { - this(odeProps, odeProps.getSsmReceiverPort(), odeProps.getSsmBufferSize()); - - this.ssmPublisher = new StringPublisher(odeProps); - } - - public SsmReceiver(OdeProperties odeProps, int port, int bufferSize) { - super(odeProps, port, bufferSize); - - this.ssmPublisher = new StringPublisher(odeProps); - } - - @Override - public void run() { - - logger.debug("SSM UDP Receiver Service started."); - - byte[] buffer = new byte[bufferSize]; - - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); - - do { - try { - logger.debug("Waiting for UDP SSM packets..."); - socket.receive(packet); - if (packet.getLength() > 0) { - - String ssmJson = UdpHexDecoder.buildJsonSsmFromPacket(packet); - - if(ssmJson!=null){ - ssmPublisher.publish(ssmJson, ssmPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedSSMJson()); - } - - } - } catch (Exception e) { - logger.error("Error receiving packet", e); - } - } while (!isStopped()); - } - + private final KafkaTemplate ssmPublisher; + private final String publishTopic; + + /** + * Constructs an SsmReceiver to handle UDP packets and publish them to a specified Kafka topic. + * + * @param receiverProperties Properties object containing the receiver configuration like port and + * buffer size. + * @param kafkaTemplate Kafka template used to send messages to a Kafka topic. + * @param publishTopic The Kafka topic to which the decoded UDP packets will be published. + */ + public SsmReceiver(ReceiverProperties receiverProperties, + KafkaTemplate kafkaTemplate, String publishTopic) { + super(receiverProperties.getReceiverPort(), receiverProperties.getBufferSize()); + + this.publishTopic = publishTopic; + this.ssmPublisher = kafkaTemplate; + } + + @Override + public void run() { + log.debug("SSM UDP Receiver Service started."); + + byte[] buffer = new byte[bufferSize]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + do { + try { + log.debug("Waiting for UDP SSM packets..."); + socket.receive(packet); + if (packet.getLength() > 0) { + String ssmJson = UdpHexDecoder.buildJsonSsmFromPacket(packet); + if (ssmJson != null) { + ssmPublisher.send(publishTopic, ssmJson); + } + } + } catch (InvalidPayloadException e) { + log.error("Error decoding packet", e); + } catch (Exception e) { + log.error("Error receiving packet", e); + } + } while (!isStopped()); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java index cff647a00..26dcddebb 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/udp/tim/TimReceiver.java @@ -1,58 +1,67 @@ package us.dot.its.jpo.ode.udp.tim; import java.net.DatagramPacket; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; - -import us.dot.its.jpo.ode.coder.StringPublisher; -import us.dot.its.jpo.ode.OdeProperties; +import lombok.extern.slf4j.Slf4j; +import org.springframework.kafka.core.KafkaTemplate; import us.dot.its.jpo.ode.udp.AbstractUdpReceiverPublisher; +import us.dot.its.jpo.ode.udp.InvalidPayloadException; import us.dot.its.jpo.ode.udp.UdpHexDecoder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties.ReceiverProperties; +/** + * The TimReceiver class extends the AbstractUdpReceiverPublisher and is responsible for receiving + * UDP packets containing TIM (Traveler Information Message) data. Upon receiving a packet, it + * decodes the TIM data and forwards it to a specified Kafka topic using a KafkaTemplate. + */ +@Slf4j public class TimReceiver extends AbstractUdpReceiverPublisher { - private static Logger logger = LoggerFactory.getLogger(TimReceiver.class); - - private StringPublisher timPublisher; - - @Autowired - public TimReceiver(OdeProperties odeProps) { - this(odeProps, odeProps.getTimReceiverPort(), odeProps.getTimBufferSize()); - - this.timPublisher = new StringPublisher(odeProps); - } - - public TimReceiver(OdeProperties odeProps, int port, int bufferSize) { - super(odeProps, port, bufferSize); - - this.timPublisher = new StringPublisher(odeProps); - } - - @Override - public void run() { - logger.debug("TIM UDP Receiver Service started."); - - byte[] buffer = new byte[bufferSize]; - - DatagramPacket packet = new DatagramPacket(buffer, buffer.length); - - do { - try { - logger.debug("Waiting for UDP TIM packets..."); - socket.receive(packet); - if (packet.getLength() > 0) { - - String timJson = UdpHexDecoder.buildJsonTimFromPacket(packet); - if(timJson != null){ - timPublisher.publish(timJson, timPublisher.getOdeProperties().getKafkaTopicOdeRawEncodedTIMJson()); - } - - } - } catch (Exception e) { - logger.error("Error receiving packet", e); - } - } while (!isStopped()); - } - - + + private final KafkaTemplate timPublisher; + private final String publishTopic; + + /** + * Constructs a TimReceiver for receiving UDP packets and forwarding TIM (Traveler Information + * Message) data to a Kafka topic. + * + * @param receiverProperties contains configuration properties such as receiver port and buffer + * size needed for establishing the UDP receiver. + * @param kafkaTemplate the KafkaTemplate used for sending the TIM data to the specified + * Kafka topic after decoding. + * @param publishTopic the name of the Kafka topic to which the decoded TIM data should be + * published. + */ + public TimReceiver(ReceiverProperties receiverProperties, + KafkaTemplate kafkaTemplate, String publishTopic) { + super(receiverProperties.getReceiverPort(), receiverProperties.getBufferSize()); + + this.publishTopic = publishTopic; + this.timPublisher = kafkaTemplate; + } + + @Override + public void run() { + log.debug("TIM UDP Receiver Service started."); + + byte[] buffer = new byte[bufferSize]; + + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + + do { + try { + log.debug("Waiting for UDP TIM packets..."); + socket.receive(packet); + if (packet.getLength() > 0) { + + String timJson = UdpHexDecoder.buildJsonTimFromPacket(packet); + if (timJson != null) { + timPublisher.send(publishTopic, timJson); + } + } + } catch (InvalidPayloadException e) { + log.error("Error decoding packet", e); + } catch (Exception e) { + log.error("Error receiving packet", e); + } + } while (!isStopped()); + } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/StartFlagNotFoundException.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/StartFlagNotFoundException.java new file mode 100644 index 000000000..dec63eb01 --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/StartFlagNotFoundException.java @@ -0,0 +1,7 @@ +package us.dot.its.jpo.ode.uper; + +public class StartFlagNotFoundException extends Exception { + public StartFlagNotFoundException(String s) { + super(s); + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/SupportedMessageType.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/SupportedMessageType.java new file mode 100644 index 000000000..08bc24a0a --- /dev/null +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/SupportedMessageType.java @@ -0,0 +1,20 @@ +package us.dot.its.jpo.ode.uper; + +import lombok.Getter; + +@Getter +public enum SupportedMessageType { + BSM("0014"), + TIM("001f"), + SPAT("0013"), + SSM("001e"), + SRM("001d"), + MAP("0012"), + PSM("0020"); + + private final String startFlag; + + SupportedMessageType(String startFlag) { + this.startFlag = startFlag; + } +} diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java index 04cb4cc46..924e1ba9c 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/uper/UperUtil.java @@ -1,237 +1,189 @@ package us.dot.its.jpo.ode.uper; import java.util.HashMap; - +import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils; import org.json.JSONObject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import us.dot.its.jpo.ode.model.OdeMsgPayload; import us.dot.its.jpo.ode.util.JsonUtils; import us.dot.its.jpo.ode.util.JsonUtils.JsonUtilsException; +/** + * Utility class for handling and manipulating hexadecimal strings representing network packet data, + * particularly those adhering to IEEE 1609.2 and 1609.3 standards. + */ +@Slf4j public class UperUtil { - private static Logger logger = LoggerFactory.getLogger(UperUtil.class); - - // start flags for BSM, TIM, MAP, SPAT, SRM, SSM, and PSM - private static final String BSM_START_FLAG = "0014"; - private static final String TIM_START_FLAG = "001f"; - private static final String SPAT_START_FLAG = "0013"; - private static final String SSM_START_FLAG = "001e"; - private static final String SRM_START_FLAG = "001d"; - private static final String MAP_START_FLAG = "0012"; - private static final String PSM_START_FLAG = "0020"; - - public enum SupportedMessageTypes { - BSM, TIM, SPAT, SSM, SRM, MAP, PSM - } - - // Strips the IEEE 1609.2 security header (if it exists) and returns the payload - public static String stripDot2Header(String hexString, String payload_start_flag) { - hexString = hexString.toLowerCase(); - int startIndex = findValidStartFlagLocation(hexString, payload_start_flag); - if (startIndex == -1) - return "BAD DATA"; - String strippedPayload = stripTrailingZeros(hexString.substring(startIndex, hexString.length())); - return strippedPayload; - } - - /* - * Strips the 1609.3 and unsigned 1609.2 headers if they are present. - * Will return the payload with a signed 1609.2 header if it is present. - * Otherwise, returns just the payload. - */ - public static byte[] stripDot3Header(byte[] packet, HashMap msgStartFlags) { - - String hexString = HexUtils.toHexString(packet); - String hexPacketParsed = ""; - - for (String start_flag : msgStartFlags.values()) { - int payloadStartIndex = findValidStartFlagLocation(hexString, start_flag); - if (payloadStartIndex == -1){ - continue; - } - - String headers = hexString.substring(0, payloadStartIndex); - String payload = hexString.substring(payloadStartIndex, hexString.length()); - - // Look for the index of the start flag of a signed 1609.2 header, if one exists - int signedDot2StartIndex = headers.indexOf("038100"); - if (signedDot2StartIndex == -1) - hexPacketParsed = payload; - else - hexPacketParsed = headers.substring(signedDot2StartIndex, headers.length()) + payload; - break; - } - - if (hexPacketParsed.equals("")) { - hexPacketParsed = hexString; - logger.debug("Packet is not a BSM, TIM or Map message: " + hexPacketParsed); - } else { - logger.debug("Base packet: " + hexPacketParsed); - hexPacketParsed = stripTrailingZeros(hexPacketParsed); - logger.debug("Stripped packet: " + hexPacketParsed); - } - return HexUtils.fromHexString(hexPacketParsed); - } - - /* - * Strips the 1609.3 and unsigned 1609.2 headers if they are present. - * Will return the payload with a signed 1609.2 header if it is present. - * Otherwise, returns just the payload. - */ - public static String stripDot3Header(String hexString, String payload_start_flag) { - int payloadStartIndex = findValidStartFlagLocation(hexString,payload_start_flag); - String headers = hexString.substring(0, payloadStartIndex); - String payload = hexString.substring(payloadStartIndex, hexString.length()); - logger.debug("Base payload: " + payload); - String strippedPayload = stripTrailingZeros(payload); - logger.debug("Stripped payload: " + strippedPayload); - // Look for the index of the start flag of a signed 1609.2 header - int signedDot2StartIndex = headers.indexOf("038100"); - if (signedDot2StartIndex == -1) - return strippedPayload; - else - return headers.substring(signedDot2StartIndex, headers.length()) + strippedPayload; - } - /** - * Determines the message type based off the most likely start flag - * - * @param payload The OdeMsgPayload to check the content of. - */ - public static String determineMessageType(OdeMsgPayload payload) { - String messageType = ""; - try { - JSONObject payloadJson = JsonUtils.toJSONObject(payload.getData().toJson()); - String hexString = payloadJson.getString("bytes").toLowerCase(); - hexString = stripTrailingZeros(hexString); - messageType = determineHexPacketType(hexString); - - } catch (JsonUtilsException e) { - logger.error("JsonUtilsException while checking message header. Stacktrace: " + e.toString()); - } - return messageType; - } - - public static String determineHexPacketType(String hexString){ - - String messageType = ""; - HashMap flagIndexes = new HashMap(); - - flagIndexes.put("MAP", findValidStartFlagLocation(hexString, MAP_START_FLAG)); - flagIndexes.put("SPAT", findValidStartFlagLocation(hexString, SPAT_START_FLAG)); - flagIndexes.put("TIM", findValidStartFlagLocation(hexString, TIM_START_FLAG)); - flagIndexes.put("BSM", findValidStartFlagLocation(hexString, BSM_START_FLAG)); - flagIndexes.put("SSM", findValidStartFlagLocation(hexString, SSM_START_FLAG)); - flagIndexes.put("PSM", findValidStartFlagLocation(hexString, PSM_START_FLAG)); - flagIndexes.put("SRM", findValidStartFlagLocation(hexString, SRM_START_FLAG)); - - int lowestIndex = Integer.MAX_VALUE; - for (String key : flagIndexes.keySet()) { - if (flagIndexes.get(key) == -1) { - logger.debug("This message is not of type " + key); - continue; - } - if (flagIndexes.get(key) < lowestIndex) { - messageType = key; - lowestIndex = flagIndexes.get(key); - } - } - return messageType; + private UperUtil() { + throw new UnsupportedOperationException(); + } + + /** + * Strips the IEEE 1609.2 security header (if it exists) and returns the payload from a given + * hexadecimal string. The method searches for a specified start flag that indicates the beginning + * of the payload. + * + * @param hexString the input hexadecimal string from which the IEEE 1609.2 security header + * needs to be stripped. + * @param payloadStartFlag the start flag indicating the beginning of the payload. + * @return a string representing the payload without the IEEE 1609.2 security header, if the start + * flag is found. + * @throws StartFlagNotFoundException if the specified start flag is not found within the + * hexadecimal string. + */ + public static String stripDot2Header(String hexString, String payloadStartFlag) + throws StartFlagNotFoundException { + hexString = hexString.toLowerCase(); + int startIndex = findValidStartFlagLocation(hexString, payloadStartFlag); + if (startIndex == -1) { + throw new StartFlagNotFoundException( + "Start flag" + payloadStartFlag + " not found in message"); } - - public static int findValidStartFlagLocation(String hexString, String startFlag){ - int index = hexString.indexOf(startFlag); - - // If the message has a header, make sure not to missidentify the message by the header - - if(index == 0 || index == -1){ - return index; - } - else{ - index = hexString.indexOf(startFlag,4); - } - - // Make sure start flag is on an even numbered byte - while(index != -1 && index %2 != 0){ - index = hexString.indexOf(startFlag, index+1); - } - return index; + return hexString.substring(startIndex); + } + + /** + * Strips the 1609.3 and unsigned 1609.2 headers if they are present. Will return the payload with + * a signed 1609.2 header if it is present. Otherwise, returns just the payload. + */ + public static byte[] stripDot3Header(byte[] packet, HashMap msgStartFlags) { + + String hexString = HexUtils.toHexString(packet); + String hexPacketParsed = ""; + + for (String startFlag : msgStartFlags.values()) { + int payloadStartIndex = findValidStartFlagLocation(hexString, startFlag); + if (payloadStartIndex == -1) { + continue; + } + + String headers = hexString.substring(0, payloadStartIndex); + String payload = hexString.substring(payloadStartIndex); + + // Look for the index of the start flag of a signed 1609.2 header, if one exists + int signedDot2StartIndex = headers.indexOf("038100"); + if (signedDot2StartIndex == -1) { + hexPacketParsed = payload; + } else { + hexPacketParsed = headers.substring(signedDot2StartIndex) + payload; + } + break; } - - /** - * Trims extra `00` bytes off of the end of an ASN1 payload string - * This is remove the padded bytes added to the payload when receiving ASN1 payloads - * - * @param payload The OdeMsgPayload as a string to trim. - */ - public static String stripTrailingZeros(String payload) { - // Remove trailing '0's - while (payload.endsWith("0")) { - payload = payload.substring(0, payload.length() - 1); - } - - // Ensure the payload length is even - if (payload.length() % 2 != 0) { - payload += "0"; - } - - // Append '00' to ensure one remaining byte of '00's for decoding - payload += "00"; - - return payload; + if (hexPacketParsed.isEmpty()) { + hexPacketParsed = hexString; + log.debug("Packet is not a BSM, TIM or Map message: {}", hexPacketParsed); } - - // Get methods for message start flags - public static String getBsmStartFlag() { - return BSM_START_FLAG; + return HexUtils.fromHexString(hexPacketParsed); + } + + /** + * Strips the 1609.3 and unsigned 1609.2 headers if they are present. Will return the payload with + * a signed 1609.2 header if it is present. Otherwise, returns just the payload. + */ + public static String stripDot3Header(String hexString, String payloadStartFlag) { + int payloadStartIndex = findValidStartFlagLocation(hexString, payloadStartFlag); + String headers = hexString.substring(0, payloadStartIndex); + String payload = hexString.substring(payloadStartIndex); + log.debug("Base payload: {}", payload); + // Look for the index of the start flag of a signed 1609.2 header + int signedDot2StartIndex = headers.indexOf("038100"); + if (signedDot2StartIndex == -1) { + return payload; + } else { + return headers.substring(signedDot2StartIndex) + payload; } - - public static String getTimStartFlag() { - return TIM_START_FLAG; + } + + /** + * Determines the message type based off the most likely start flag. + * + * @param payload The OdeMsgPayload to check the content of. + */ + public static String determineMessageType(OdeMsgPayload payload) { + String messageType = ""; + try { + JSONObject payloadJson = JsonUtils.toJSONObject(payload.getData().toJson()); + String hexString = payloadJson.getString("bytes").toLowerCase(); + messageType = determineHexPacketType(hexString); + + } catch (JsonUtilsException e) { + log.error("JsonUtilsException while checking message header.", e); } - - public static String getSpatStartFlag() { - return SPAT_START_FLAG; + return messageType; + } + + /** + * Determines the type of hex packet based on predefined start flags for various message types + * defined by {@link SupportedMessageType}. + * + * @param hexString the hexadecimal string representing a packet whose type is to be determined + * @return a string indicating the type of the packet, such as "MAP", "SPAT", "TIM", "BSM", "SSM", + * "PSM", or "SRM". If no valid type is found, returns an empty string. + */ + public static String determineHexPacketType(String hexString) { + HashMap flagIndexes = new HashMap<>(); + + flagIndexes.put("MAP", + findValidStartFlagLocation(hexString, SupportedMessageType.MAP.getStartFlag())); + flagIndexes.put("SPAT", + findValidStartFlagLocation(hexString, SupportedMessageType.SPAT.getStartFlag())); + flagIndexes.put("TIM", + findValidStartFlagLocation(hexString, SupportedMessageType.TIM.getStartFlag())); + flagIndexes.put("BSM", + findValidStartFlagLocation(hexString, SupportedMessageType.BSM.getStartFlag())); + flagIndexes.put("SSM", + findValidStartFlagLocation(hexString, SupportedMessageType.SSM.getStartFlag())); + flagIndexes.put("PSM", + findValidStartFlagLocation(hexString, SupportedMessageType.PSM.getStartFlag())); + flagIndexes.put("SRM", + findValidStartFlagLocation(hexString, SupportedMessageType.SRM.getStartFlag())); + + int lowestIndex = Integer.MAX_VALUE; + String messageType = ""; + for (String key : flagIndexes.keySet()) { + if (flagIndexes.get(key) == -1) { + log.debug("This message is not of type {}", key); + continue; + } + if (flagIndexes.get(key) < lowestIndex) { + messageType = key; + lowestIndex = flagIndexes.get(key); + } } - - public static String getSsmStartFlag() { - return SSM_START_FLAG; + return messageType; + } + + /** + * Searches for the location of the given start flag in the provided hex string and ensures it is + * on an even numbered byte. If the start flag is found at the beginning of the string or not + * found at all, it returns immediately. Otherwise, it continues searching from the fifth + * position. The method ensures that the found start flag is located on an even byte boundary. + * + * @param hexString the string representation of the message in hexadecimal format where the + * search for the start flag will be conducted. + * @param startFlag the specific flag pattern to locate within the given hex string, indicating + * the start of a valid message. + * @return the index of the start flag within the hex string if found, and located on an even byte + * boundary; -1 if not found. + */ + public static int findValidStartFlagLocation(String hexString, String startFlag) { + int index = hexString.indexOf(startFlag); + + // If the message has a header, make sure not to misidentify the message by the header + if (index == 0 || index == -1) { + return index; + } else { + index = hexString.indexOf(startFlag, 4); } - public static String getSrmStartFlag() { - return SRM_START_FLAG; + // Make sure start flag is on an even numbered byte + while (index != -1 && index % 2 != 0) { + index = hexString.indexOf(startFlag, index + 1); } + return index; + } - public static String getMapStartFlag() { - return MAP_START_FLAG; - } - - public static String getPsmStartFlag() { - return PSM_START_FLAG; - } - public static String getStartFlag(SupportedMessageTypes msgType) { - switch (msgType) { - case SupportedMessageTypes.BSM: - return BSM_START_FLAG; - case SupportedMessageTypes.TIM: - return TIM_START_FLAG; - case SupportedMessageTypes.SPAT: - return SPAT_START_FLAG; - case SupportedMessageTypes.SSM: - return SSM_START_FLAG; - case SupportedMessageTypes.SRM: - return SRM_START_FLAG; - case SupportedMessageTypes.MAP: - return MAP_START_FLAG; - case SupportedMessageTypes.PSM: - return PSM_START_FLAG; - default: - return null; - } - } } diff --git a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/upload/FileUploadController.java b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/upload/FileUploadController.java index 7ad63c352..e3cea1aa9 100644 --- a/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/upload/FileUploadController.java +++ b/jpo-ode-svcs/src/main/java/us/dot/its/jpo/ode/upload/FileUploadController.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,93 +15,87 @@ ******************************************************************************/ package us.dot.its.jpo.ode.upload; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.messaging.simp.SimpMessagingTemplate; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; - -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.coder.stream.FileImporterProperties; import us.dot.its.jpo.ode.exporter.StompStringExporter; import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher; -import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher.ImporterFileType; +import us.dot.its.jpo.ode.kafka.topics.FileTopics; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; import us.dot.its.jpo.ode.storage.StorageFileNotFoundException; import us.dot.its.jpo.ode.storage.StorageService; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@Slf4j @RestController public class FileUploadController { - private static final String FILTERED_OUTPUT_TOPIC = "/topic/filtered_messages"; - private static final String UNFILTERED_OUTPUT_TOPIC = "/topic/unfiltered_messages"; - - private static Logger logger = LoggerFactory.getLogger(FileUploadController.class); - - private final StorageService storageService; - - @Autowired - public FileUploadController( - StorageService storageService, OdeProperties odeProperties, - SimpMessagingTemplate template) { - super(); - this.storageService = storageService; - - ExecutorService threadPool = Executors.newCachedThreadPool(); - - Path logPath = Paths.get(odeProperties.getUploadLocationRoot(), - odeProperties.getUploadLocationObuLog()); - logger.debug("UPLOADER - BSM log file upload directory: {}", logPath); - Path failurePath = Paths.get(odeProperties.getUploadLocationRoot(), "failed"); - logger.debug("UPLOADER - Failure directory: {}", failurePath); - Path backupPath = Paths.get(odeProperties.getUploadLocationRoot(), "backup"); - logger.debug("UPLOADER - Backup directory: {}", backupPath); - - // Create the importers that watch folders for new/modified files - threadPool.submit(new ImporterDirectoryWatcher(odeProperties, logPath, backupPath, failurePath, ImporterFileType.LOG_FILE, odeProperties.getFileWatcherPeriod())); - - // Create unfiltered exporters - threadPool.submit(new StompStringExporter(odeProperties, UNFILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicOdeBsmJson())); - threadPool.submit(new StompStringExporter(odeProperties, UNFILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicOdeTimJson())); - threadPool.submit(new StompStringExporter(odeProperties, UNFILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicOdeSpatJson())); - threadPool.submit(new StompStringExporter(odeProperties, UNFILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicOdeMapJson())); - threadPool.submit(new StompStringExporter(odeProperties, UNFILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicOdeSsmJson())); - threadPool.submit(new StompStringExporter(odeProperties, UNFILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicOdeSrmJson())); - threadPool.submit(new StompStringExporter(odeProperties, UNFILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicDriverAlertJson())); - threadPool.submit(new StompStringExporter(odeProperties, UNFILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicOdeTimBroadcastJson())); - - // Create filtered exporters - threadPool.submit(new StompStringExporter(odeProperties, FILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicFilteredOdeBsmJson())); - threadPool.submit(new StompStringExporter(odeProperties, FILTERED_OUTPUT_TOPIC, template, odeProperties.getKafkaTopicFilteredOdeTimJson())); - } - - @PostMapping("/upload/{type}") - public ResponseEntity handleFileUpload(@RequestParam("file") MultipartFile file, @PathVariable("type") String type) { - - logger.debug("File received at endpoint: /upload/{}, name={}", type, file.getOriginalFilename()); - try { - storageService.store(file, type); - } catch (Exception e) { - logger.error("File storage error", e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("{\"Error\": \"File storage error.\"}"); - // do not return exception, XSS vulnerable - } - - return ResponseEntity.status(HttpStatus.OK).body("{\"Success\": \"True\"}"); - } - - @ExceptionHandler(StorageFileNotFoundException.class) - public ResponseEntity handleStorageFileNotFound(StorageFileNotFoundException exc) { - return ResponseEntity.notFound().build(); - } + private final StorageService storageService; + + @Autowired + public FileUploadController( + StorageService storageService, + SimpMessagingTemplate template, + FileImporterProperties fileImporterProps, + FileTopics fileTopics, + JsonTopics jsonTopics, + RawEncodedJsonTopics rawEncodedJsonTopics, + OdeKafkaProperties odeKafkaProperties) { + super(); + this.storageService = storageService; + + ExecutorService threadPool = Executors.newCachedThreadPool(); + + // Create the importers that watch folders for new/modified files + threadPool.submit( + new ImporterDirectoryWatcher(fileImporterProps, + odeKafkaProperties, + jsonTopics, + ImporterDirectoryWatcher.ImporterFileType.LOG_FILE, + rawEncodedJsonTopics) + ); + + // Create unfiltered exporters + threadPool.submit(new StompStringExporter(fileTopics.getUnfilteredOutput(), template, jsonTopics.getBsm(), odeKafkaProperties.getBrokers())); + threadPool.submit(new StompStringExporter(fileTopics.getUnfilteredOutput(), template, jsonTopics.getTim(), odeKafkaProperties.getBrokers())); + threadPool.submit(new StompStringExporter(fileTopics.getUnfilteredOutput(), template, jsonTopics.getSpat(), odeKafkaProperties.getBrokers())); + threadPool.submit(new StompStringExporter(fileTopics.getUnfilteredOutput(), template, jsonTopics.getMap(), odeKafkaProperties.getBrokers())); + threadPool.submit(new StompStringExporter(fileTopics.getUnfilteredOutput(), template, jsonTopics.getSsm(), odeKafkaProperties.getBrokers())); + threadPool.submit(new StompStringExporter(fileTopics.getUnfilteredOutput(), template, jsonTopics.getSrm(), odeKafkaProperties.getBrokers())); + threadPool.submit(new StompStringExporter(fileTopics.getUnfilteredOutput(), template, jsonTopics.getDriverAlert(), odeKafkaProperties.getBrokers())); + threadPool.submit(new StompStringExporter(fileTopics.getUnfilteredOutput(), template, jsonTopics.getTimBroadcast(), odeKafkaProperties.getBrokers())); + + // Create filtered exporters + threadPool.submit(new StompStringExporter(fileTopics.getFilteredOutput(), template, jsonTopics.getBsmFiltered(), odeKafkaProperties.getBrokers())); + threadPool.submit(new StompStringExporter(fileTopics.getFilteredOutput(), template, jsonTopics.getTimFiltered(), odeKafkaProperties.getBrokers())); + } + + @PostMapping("/upload/{type}") + public ResponseEntity handleFileUpload(@RequestParam("file") MultipartFile file, @PathVariable("type") String type) { + + log.debug("File received at endpoint: /upload/{}, name={}", type, file.getOriginalFilename()); + try { + storageService.store(file, type); + } catch (Exception e) { + log.error("File storage error", e); + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("{\"Error\": \"File storage error.\"}"); + // do not return exception, XSS vulnerable + } + + return ResponseEntity.status(HttpStatus.OK).body("{\"Success\": \"True\"}"); + } + + @ExceptionHandler(StorageFileNotFoundException.class) + public ResponseEntity handleStorageFileNotFound(StorageFileNotFoundException exc) { + return ResponseEntity.notFound().build(); + } } diff --git a/jpo-ode-svcs/src/main/resources/.logback.xml.swp b/jpo-ode-svcs/src/main/resources/.logback.xml.swp deleted file mode 100644 index 5ec164d47..000000000 Binary files a/jpo-ode-svcs/src/main/resources/.logback.xml.swp and /dev/null differ diff --git a/jpo-ode-svcs/src/main/resources/application.properties b/jpo-ode-svcs/src/main/resources/application.properties deleted file mode 100644 index 4fe1e2faa..000000000 --- a/jpo-ode-svcs/src/main/resources/application.properties +++ /dev/null @@ -1,61 +0,0 @@ -#General Properties -#================== -groupId=${project.groupId} -artifactId=${project.artifactId} -version=${project.version} -#server.port = 8443 -#server.ssl.key-store = classpath:jpo_ode_keystore.jks -#server.ssl.key-store-password = keystore_pass -#server.ssl.key-password = key_pass - -spring.http.multipart.max-file-size=1MB -spring.http.multipart.max-request-size=1MB - -#ode.kafkaBrokers = localhost:9092 -#ode.verboseJson = false - -#File import properties -#ode.uploadLocation = uploads -#ode.uploadLocationBsm = bsm -#ode.uploadLocationMessageFrame = messageframe - -#USDOT Situation Data Clearinghouse (SDC) / Situational Data Exchange (SDX) Properties -#========================================================================================================================= - -#RSU Properties (note - do not include quotes) -#-------------- -#ode.rsuUsername = -#ode.rsuPassword = - -#Security Properties -#------------------- -#ode.caCertPath = path/to/CaCertFile or define env variable ${ODE_CA_CERT_PATH} -#ode.selfCertPath = path/to/selfCertFile or define env variable ${ODE_SELF_CERT_PATH} -#ode.selfPrivateKeyReconstructionFilePath = path/to/selfPrivateKeyReconstructionFile or define env variable ${ODE_SELF_PRIVATE_KEY_RECONSTRUCTION_FILE_PATH} -#ode.selfSigningPrivateKeyFilePath = path/to/selfSigningPrivateKeyFile or define env variable ${ODE_SELF_SIGNING_PRIVATE_KEY_FILE_PATH} -#ode.securitySvcsSignatureUri= // The URI for signing data using the jpo-security-svcs module. Normally doesn't need to be set because ODE will calculate it based on DOCKER_HOST_IP. If the service is deployed outside Docker, it should be set to http://host:ip/sign of the server it's running on - -#Kafka Topics -#ode.kafkaTopicsDisabled = topic.OdeBsmRxPojo topic.OdeBsmTxPojo topic.OdeBsmDuringEventPojo topic.OdeTimBroadcastPojo -#BSM -#ode.kafkaTopicOdeBsmPojo = topic.OdeBsmPojo -#ode.kafkaTopicOdeBsmJson = topic.OdeBsmJson -#ode.kafkaTopicOdeBsmRxPojo= topic.OdeBsmRxPojo -#ode.kafkaTopicOdeBsmTxPojo= topic.OdeBsmTxPojo -#ode.kafkaTopicOdeBsmDuringEventPojo= topic.OdeBsmDuringEventPojo -#ode.kafkaTopicFilteredOdeBsmJson = topic.FilteredOdeBsmJson - -#TIM -#ode.kafkaTopicOdeTimPojo = topic.OdeTimPojo -#ode.kafkaTopicOdeTimJson = topic.OdeTimJson -#ode.kafkaTopicOdeDNMsgJson= topic.OdeDNMsgJson -#ode.kafkaTopicOdeDNMsgPojo= topic.OdeDNMsgPojo -#ode.kafkaTopicOdeTimRxJson= topic.OdeTimRxJson -#ode.kafkaTopicOdeTimBroadcastPojo= topic.OdeTimBroadcastPojo -#ode.kafkaTopicOdeTimBroadcastJson= topic.OdeTimBroadcastJson - -#ASN.1 CODEC -#ode.kafkaTopicAsn1DecoderInput = topic.Asn1DecoderInput -#ode.kafkaTopicAsn1DecoderOutput = topic.Asn1DecoderOutput -#ode.kafkaTopicAsn1EncoderInput = topic.Asn1EncoderInput -#ode.kafkaTopicAsn1EncoderOutput = topic.Asn1EncoderOutput diff --git a/jpo-ode-svcs/src/main/resources/application.yaml b/jpo-ode-svcs/src/main/resources/application.yaml new file mode 100644 index 000000000..2875e4513 --- /dev/null +++ b/jpo-ode-svcs/src/main/resources/application.yaml @@ -0,0 +1,142 @@ +spring: + application: + name: "jpo-ode-svcs" + kafka: + consumer: + enable-auto-commit: true + auto-commit-interval: 1000 + bootstrap-servers: ${ODE_KAFKA_BROKERS} + producer: + acks: "all" + batch-size: 16384 + compression-type: "zstd" + buffer-memory: 33554432 + bootstrap-servers: ${ODE_KAFKA_BROKERS} + retry: + topic: + attempts: 0 + listener: + log-container-config: true + http: + multipart: + max-file-size: 1MB + max-request-size: 1MB +ode: + security-services: + host-ip: ${DOCKER_HOST_IP} + port: 8090 + signature-endpoint: ${ODE_SECURITY_SVCS_SIGNATURE_URI} + is-rsu-signing-enabled: ${DATA_SIGNING_ENABLED_RSU} + is-sdw-signing-enabled: ${DATA_SIGNING_ENABLED_SDW} + rsu: + srm-slots: 100 + username: ${ODE_RSU_USERNAME} + password: ${ODE_RSU_PASSWORD} + kafka: + brokers: ${ODE_KAFKA_BROKERS} + kafka-type: ${KAFKA_TYPE} + confluent: + password: ${CONFLUENT_SECRET} + username: ${CONFLUENT_KEY} + producer: + type: "sync" + acks: ${KAFKA_ACKS} + retries: ${KAFKA_RETRIES} + batch-size: ${KAFKA_BATCH_SIZE} + linger-ms: ${KAFKA_LINGER_MS} + buffer-memory: ${KAFKA_BUFFER_MEMORY} + key-serializer: ${KAFKA_KEY_SERIALIZER} + value-serializer: ${KAFKA_VALUE_SERIALIZER} + partitioner-class: ${KAFKA_PARTITIONER_CLASS} + compression-type: ${KAFKA_COMPRESSION_TYPE} + disabled-topics: + - "topic.OdeBsmRxPojo" + - "topic.OdeBsmTxPojo" + - "topic.OdeBsmDuringEventPojo" + - "topic.OdeTimBroadcastPojo" + topics: + asn1: + decoder-input: "topic.Asn1DecoderInput" + decoder-output: "topic.Asn1DecoderOutput" + encoder-input: "topic.Asn1EncoderInput" + encoder-output: "topic.Asn1EncoderOutput" + json: + bsm: "topic.OdeBsmJson" + map: "topic.OdeMapJson" + psm: "topic.OdePsmJson" + spat: "topic.OdeSpatJson" + srm: "topic.OdeSrmJson" + ssm: "topic.OdeSsmJson" + tim: "topic.OdeTimJson" + driver-alert: "topic.OdeDriverAlertJson" + tim-broadcast: "topic.OdeTimBroadcastJson" + bsm-filtered: "topic.FilteredOdeBsmJson" + spat-filtered: "topic.FilteredOdeSpatJson" + tim-filtered: "topic.FilteredOdeTimJson" + tim-tmc-filtered: "topic.OdeTimJsonTMCFiltered" + tim-cert-expiration: "topic.OdeTIMCertExpirationTimeJson" + dn-message: "topic.OdeDNMsgJson" + rx-tim: "topic.OdeTimRxJson" + rx-spat: "topic.OdeSpatRxJson" + j2735-tim-broadcast: "topic.J2735TimBroadcastJson" + pojo: + bsm: "topic.OdeBsmPojo" + spat: "topic.OdeSpatPojo" + ssm: "topic.OdeSsmPojo" + tim-broadcast: "topic.OdeTimBroadcastPojo" + bsm-during-event: "topic.OdeBsmDuringEventPojo" + rx-bsm: "topic.OdeBsmRxPojo" + rx-spat: "topic.OdeSpatRxPojo" + tx-bsm: "topic.OdeBsmTxPojo" + tx-map: "topic.OdeMapTxPojo" + tx-psm: "topic.OdePsmTxPojo" + tx-spat: "topic.OdeSpatTxPojo" + tx-srm: "topic.OdeSrmTxPojo" + raw-encoded-json: + bsm: "topic.OdeRawEncodedBSMJson" + map: "topic.OdeRawEncodedMAPJson" + psm: "topic.OdeRawEncodedPSMJson" + spat: "topic.OdeRawEncodedSPATJson" + srm: "topic.OdeRawEncodedSRMJson" + ssm: "topic.OdeRawEncodedSSMJson" + tim: "topic.OdeRawEncodedTIMJson" + sdx-depositor: + input: "topic.SDWDepositorInput" + file: + filtered-output: "/topic/filtered_messages" + unfiltered-output: "/topic/unfiltered_messages" + receivers: + generic: + buffer-size: 2000 + receiver-port: 44990 + bsm: + buffer-size: 500 + receiver-port: 46800 + map: + buffer-size: 2048 + receiver-port: 44920 + psm: + buffer-size: 500 + receiver-port: 44940 + spat: + buffer-size: 500 + receiver-port: 44910 + srm: + buffer-size: 500 + receiver-port: 44930 + ssm: + buffer-size: 500 + receiver-port: 44900 + tim: + buffer-size: 2048 + receiver-port: 47900 + file-importer: + buffer-size: 500 + backup-dir: "backup" + failed-dir: "failed" + time-period: 5 + upload-location-root: "uploads" + obu-log-upload-location: "bsmlog" + tim-ingest-monitoring: + tracking-enabled: ${ODE_TIM_INGEST_MONITORING_ENABLED} + interval: ${ODE_TIM_INGEST_MONITORING_INTERVAL} diff --git a/jpo-ode-svcs/src/main/resources/logback.xml b/jpo-ode-svcs/src/main/resources/logback.xml index 0895b02d6..6c9d56518 100644 --- a/jpo-ode-svcs/src/main/resources/logback.xml +++ b/jpo-ode-svcs/src/main/resources/logback.xml @@ -1,20 +1,16 @@ - + - - - %date{"yyyy-MM-dd HH:mm:ss", UTC} [%thread] %-5level %logger{0} - %msg %n - - + + + %date{"yyyy-MM-dd HH:mm:ss", UTC} [%thread] [%X{traceId:-},%X{spanId:-}] %-5level %logger{0} - %msg %n + + - - - - - + - - - + + + diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdePropertiesTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdePropertiesTest.java deleted file mode 100644 index 49fc2125c..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdePropertiesTest.java +++ /dev/null @@ -1,236 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.util.HashSet; -import java.util.Set; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.info.BuildProperties; -import org.springframework.core.env.Environment; - -import mockit.Capturing; -import mockit.Expectations; -import mockit.Injectable; -import mockit.Tested; -import us.dot.its.jpo.ode.util.CommonUtils; - -public class OdePropertiesTest { - - @Tested - OdeProperties testOdeProperties; - @Injectable - Environment mockEnv; - @Injectable - BuildProperties mockBuildProperties; - - @Capturing - CommonUtils capturingCommonUtils; - - @Test - public void testInit() { - new Expectations() { - { - } - }; - try { - new OdeProperties(); - } catch (Exception e) { - fail("Unexpected exception: " + e); - } - } - - @Test - public void testSettersAndGetters() { - - String testDdsCasPassword = "testDdsCasPassword123456"; - String testDdsCasUrl = "testDdsCasUrl123456"; - String testDdsCasUsername = "testDdsCasUsername123456"; - String testDdsWebsocketUrl = "testDdsWebsocketUrl123456"; - String testKafkaBrokers = "testKafkaBrokers123456"; - String testKafkaProducerType = "testKafkaProducerType123456"; - String testPluginsLocations = "testpluginsLocations123456"; - String testUploadLocationObuLog = "testuploadLocationObuLog123456"; - String testUploadLocationRoot = "testUploadLocationRoot123456"; - int testMessagesUntilTrustReestablished = 17; - String testCaCertPath = "testCaCertPath"; - String testSelfCertPath = "testSelfCertPath"; - String testSelfPrivateKeyReconstructionFilePath = "testSelfPrivateKeyReconstructionFilePath"; - String testSelfSigningPrivateKeyFilePath = "testSelfSigningPrivateKeyFilePath"; - String testKafkaTopicBsmFilteredJson = "testKafkaTopicBsmFilteredJson"; - boolean testVerboseJson = true; - int testRsuSrmSlots = 22; - int testTrustRetries = 23; - String testKafkaTopicOdeBsmPojo = "testKafkaTopicOdeBsmPojo"; - String testKafkaTopicOdeBsmJson = "testKafkaTopicOdeBsmJson"; - String testVersion = "1.1.0-SNAPSHOT"; - int testImportProcessorBufferSize = 83; - - String[] testKafkaTopicsDisabled = new String[] { "testKafkaTopicsDisabled0" }; - Set testKafkaTopicsDisabledSet = new HashSet<>(); - testKafkaTopicsDisabledSet.add("testKafkaTopicsDisabledSet0"); - - String testKafkaTopicAsn1DecoderInput = "testKafkaTopicAsn1DecoderInput"; - String testKafkaTopicAsn1DecoderOutput = "testKafkaTopicAsn1DecoderOutput"; - String testKafkaTopicAsn1EncoderInput = "testKafkaTopicAsn1EncoderInput"; - String testKafkaTopicAsn1EncoderOutput = "testKafkaTopicAsn1EncoderOutput"; - String testKafkaTopicOdeDNMsgJson = "testKafkaTopicOdeDNMsgJson"; - String testKafkaTopicOdeTimJson = "testKafkaTopicOdeTimJson"; - String testKafkaTopicOdeBsmDuringEventPojo = "testKafkaTopicOdeBsmDuringEventPojo"; - String testKafkaTopicOdeBsmRxPojo = "testKafkaTopicOdeBsmRxPojo"; - String testKafkaTopicOdeBsmTxPojo = "testKafkaTopicOdeBsmTxPojo"; - String testKafkaTopicOdeTimRxJson = "testKafkaTopicOdeTimRxJson"; - String testKafkaTopicOdeTimBroadcastPojo = "testKafkaTopicOdeTimBroadcastPojo"; - String testKafkaTopicOdeTimBroadcastJson = "testKafkaTopicOdeTimBroadcastJson"; - String testKafkaTopicJ2735TimBroadcastJson = "testKafkaTopicJ2735TimBroadcastJson"; - String testKafkaTopicFilteredOdeTimJson = "testKafkaTopicFilteredOdeTimJson"; - String testKafkaTopicDriverAlertJson = "testKafkaTopicDriverAlertJson"; - - Integer testFileWatcherPeriod = 5; - String testSecuritySvcsSignatureUri = "testSecuritySvcsSignatureUri"; - String testRsuUsername = "testRsuUsername"; - String testRsuPassword = "testRsuPassword"; - - testOdeProperties.setEnv(mockEnv); - testOdeProperties.setEnvironment(mockEnv); - testOdeProperties.setKafkaBrokers(testKafkaBrokers); - testOdeProperties.setKafkaProducerType(testKafkaProducerType); - testOdeProperties.setPluginsLocations(testPluginsLocations); - testOdeProperties.setUploadLocationObuLog(testUploadLocationObuLog); - testOdeProperties.setUploadLocationRoot(testUploadLocationRoot); - testOdeProperties.setMessagesUntilTrustReestablished(testMessagesUntilTrustReestablished); - testOdeProperties.setCaCertPath(testCaCertPath); - testOdeProperties.setSelfCertPath(testSelfCertPath); - testOdeProperties.setSelfPrivateKeyReconstructionFilePath(testSelfPrivateKeyReconstructionFilePath); - testOdeProperties.setSelfSigningPrivateKeyFilePath(testSelfSigningPrivateKeyFilePath); - testOdeProperties.setKafkaTopicFilteredOdeBsmJson(testKafkaTopicBsmFilteredJson); - testOdeProperties.setVerboseJson(testVerboseJson); - testOdeProperties.setRsuSrmSlots(testRsuSrmSlots); - testOdeProperties.setTrustRetries(testTrustRetries); - testOdeProperties.setKafkaTopicOdeBsmPojo(testKafkaTopicOdeBsmPojo); - testOdeProperties.setKafkaTopicOdeBsmJson(testKafkaTopicOdeBsmJson); - testOdeProperties.setVersion(testVersion); - testOdeProperties.setImportProcessorBufferSize(testImportProcessorBufferSize); - testOdeProperties.setKafkaTopicsDisabled(testKafkaTopicsDisabled); - testOdeProperties.setKafkaTopicsDisabledSet(testKafkaTopicsDisabledSet); - - testOdeProperties.setKafkaTopicAsn1DecoderInput(testKafkaTopicAsn1DecoderInput); - testOdeProperties.setKafkaTopicAsn1DecoderOutput(testKafkaTopicAsn1DecoderOutput); - testOdeProperties.setKafkaTopicAsn1EncoderInput(testKafkaTopicAsn1EncoderInput); - testOdeProperties.setKafkaTopicAsn1EncoderOutput(testKafkaTopicAsn1EncoderOutput); - testOdeProperties.setKafkaTopicOdeDNMsgJson(testKafkaTopicOdeDNMsgJson); - testOdeProperties.setKafkaTopicOdeTimJson(testKafkaTopicOdeTimJson); - testOdeProperties.setKafkaTopicOdeBsmDuringEventPojo(testKafkaTopicOdeBsmDuringEventPojo); - testOdeProperties.setKafkaTopicOdeBsmRxPojo(testKafkaTopicOdeBsmRxPojo); - testOdeProperties.setKafkaTopicOdeBsmTxPojo(testKafkaTopicOdeBsmTxPojo); - testOdeProperties.setKafkaTopicOdeTimRxJson(testKafkaTopicOdeTimRxJson); - testOdeProperties.setKafkaTopicOdeTimBroadcastPojo(testKafkaTopicOdeTimBroadcastPojo); - testOdeProperties.setKafkaTopicOdeTimBroadcastJson(testKafkaTopicOdeTimBroadcastJson); - testOdeProperties.setKafkaTopicJ2735TimBroadcastJson(testKafkaTopicJ2735TimBroadcastJson); - testOdeProperties.setKafkaTopicFilteredOdeTimJson(testKafkaTopicFilteredOdeTimJson); - testOdeProperties.setKafkaTopicDriverAlertJson(testKafkaTopicDriverAlertJson); - - testOdeProperties.setFileWatcherPeriod(testFileWatcherPeriod); - testOdeProperties.setSecuritySvcsSignatureUri(testSecuritySvcsSignatureUri); - testOdeProperties.setRsuUsername(testRsuUsername); - testOdeProperties.setRsuPassword(testRsuPassword); - - assertEquals("Incorrect testEnv", mockEnv, testOdeProperties.getEnv()); - assertEquals("Incorrect testKafkaBrokers", testKafkaBrokers, testOdeProperties.getKafkaBrokers()); - assertEquals("Incorrect testKafkaProducerType", testKafkaProducerType, - testOdeProperties.getKafkaProducerType()); - assertEquals("Incorrect testpluginsLocations", testPluginsLocations, - testOdeProperties.getPluginsLocations()); - assertEquals("Incorrect testUploadLocationObuLog", testUploadLocationObuLog, - testOdeProperties.getUploadLocationObuLog()); - assertEquals("Incorrect testUploadLocationRoot", testUploadLocationRoot, - testOdeProperties.getUploadLocationRoot()); - assertEquals("Incorrect testMessagesUntilTrustReestablished", testMessagesUntilTrustReestablished, - testOdeProperties.getMessagesUntilTrustReestablished()); - assertEquals("Incorrect testCaCertPath", testCaCertPath, testOdeProperties.getCaCertPath()); - assertEquals("Incorrect testSelfCertPath", testSelfCertPath, testOdeProperties.getSelfCertPath()); - assertEquals("Incorrect testSelfPrivateKeyReconstructionFilePath", testSelfPrivateKeyReconstructionFilePath, - testOdeProperties.getSelfPrivateKeyReconstructionFilePath()); - assertEquals("Incorrect testSelfSigningPrivateKeyFilePath", testSelfSigningPrivateKeyFilePath, - testOdeProperties.getSelfSigningPrivateKeyFilePath()); - assertEquals("Incorrect testKafkaTopicBsmFilteredJson", testKafkaTopicBsmFilteredJson, - testOdeProperties.getKafkaTopicFilteredOdeBsmJson()); - assertEquals("Incorrect testVerboseJson", testVerboseJson, testOdeProperties.getVerboseJson()); - assertEquals("Incorrect testRsuSrmSlots", testRsuSrmSlots, testOdeProperties.getRsuSrmSlots()); - assertEquals("Incorrect testTrustRetries", testTrustRetries, testOdeProperties.getTrustRetries()); - assertEquals("Incorrect testKafkaTopicOdeBsmPojo", testKafkaTopicOdeBsmPojo, - testOdeProperties.getKafkaTopicOdeBsmPojo()); - assertEquals("Incorrect testKafkaTopicOdeBsmJson", testKafkaTopicOdeBsmJson, - testOdeProperties.getKafkaTopicOdeBsmJson()); - assertEquals("Incorrect testVersion", testVersion, testOdeProperties.getVersion()); - assertEquals("Incorrect testImportProcessorBufferSize", testImportProcessorBufferSize, - testOdeProperties.getImportProcessorBufferSize()); - assertEquals("Incorrect testKafkaTopicsDisabled", testKafkaTopicsDisabled[0], - testOdeProperties.getKafkaTopicsDisabled()[0]); - assertTrue("Incorrect testKafkaTopicsDisabledSet", - testOdeProperties.getKafkaTopicsDisabledSet().contains("testKafkaTopicsDisabledSet0")); - - assertEquals("Incorrect testKafkaTopicAsn1DecoderInput", testKafkaTopicAsn1DecoderInput, - testOdeProperties.getKafkaTopicAsn1DecoderInput()); - assertEquals("Incorrect testKafkaTopicAsn1DecoderOutput", testKafkaTopicAsn1DecoderOutput, - testOdeProperties.getKafkaTopicAsn1DecoderOutput()); - assertEquals("Incorrect testKafkaTopicAsn1EncoderInput", testKafkaTopicAsn1EncoderInput, - testOdeProperties.getKafkaTopicAsn1EncoderInput()); - assertEquals("Incorrect testKafkaTopicAsn1EncoderOutput", testKafkaTopicAsn1EncoderOutput, - testOdeProperties.getKafkaTopicAsn1EncoderOutput()); - assertEquals("Incorrect testKafkaTopicOdeDNMsgJson", testKafkaTopicOdeDNMsgJson, - testOdeProperties.getKafkaTopicOdeDNMsgJson()); - assertEquals("Incorrect testKafkaTopicOdeTimJson", testKafkaTopicOdeTimJson, - testOdeProperties.getKafkaTopicOdeTimJson()); - assertEquals("Incorrect testKafkaTopicOdeBsmDuringEventPojo", testKafkaTopicOdeBsmDuringEventPojo, - testOdeProperties.getKafkaTopicOdeBsmDuringEventPojo()); - assertEquals("Incorrect testKafkaTopicOdeBsmRxPojo", testKafkaTopicOdeBsmRxPojo, - testOdeProperties.getKafkaTopicOdeBsmRxPojo()); - assertEquals("Incorrect testKafkaTopicOdeBsmTxPojo", testKafkaTopicOdeBsmTxPojo, - testOdeProperties.getKafkaTopicOdeBsmTxPojo()); - assertEquals("Incorrect testKafkaTopicOdeTimRxJson", testKafkaTopicOdeTimRxJson, - testOdeProperties.getKafkaTopicOdeTimRxJson()); - assertEquals("Incorrect testKafkaTopicOdeTimBroadcastPojo", testKafkaTopicOdeTimBroadcastPojo, - testOdeProperties.getKafkaTopicOdeTimBroadcastPojo()); - assertEquals("Incorrect testKafkaTopicOdeTimBroadcastJson", testKafkaTopicOdeTimBroadcastJson, - testOdeProperties.getKafkaTopicOdeTimBroadcastJson()); - assertEquals("Incorrect testKafkaTopicJ2735TimBroadcastJson", testKafkaTopicJ2735TimBroadcastJson, - testOdeProperties.getKafkaTopicJ2735TimBroadcastJson()); - assertEquals("Incorrect testKafkaTopicFilteredOdeTimJson", testKafkaTopicFilteredOdeTimJson, - testOdeProperties.getKafkaTopicFilteredOdeTimJson()); - assertEquals("Incorrect testKafkaTopicDriverAlertJson", testKafkaTopicDriverAlertJson, - testOdeProperties.getKafkaTopicDriverAlertJson()); - - assertEquals("Incorrect testFileWatcherPeriod", testFileWatcherPeriod, - testOdeProperties.getFileWatcherPeriod()); - assertEquals("Incorrect testSecuritySvcsSignatureUri", testSecuritySvcsSignatureUri, - testOdeProperties.getSecuritySvcsSignatureUri()); - assertEquals("Incorrect testRsuUsername", testRsuUsername, testOdeProperties.getRsuUsername()); - assertEquals("Incorrect RsuPassword", testRsuPassword, testOdeProperties.getRsuPassword()); - - OdeProperties.getJpoOdeGroupId(); - testOdeProperties.getHostId(); - testOdeProperties.getProperty("testProperty"); - testOdeProperties.getProperty("testProperty", 5); - testOdeProperties.getProperty("testProperty", "testDefaultValue"); - testOdeProperties.getUploadLocations(); - } - -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdeTimJsonTopologyTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdeTimJsonTopologyTest.java new file mode 100644 index 000000000..32017ef36 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/OdeTimJsonTopologyTest.java @@ -0,0 +1,47 @@ +package us.dot.its.jpo.ode; + +import org.awaitility.Awaitility; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = OdeKafkaProperties.class) +class OdeTimJsonTopologyTest { + + @Autowired + private OdeKafkaProperties odeKafkaProperties; + + @Value("${ode.kafka.topics.json.tim}") + private String timTopic; + + private OdeTimJsonTopology odeTimJsonTopology; + + @BeforeEach + void setUp() throws SecurityException, IllegalArgumentException { + odeTimJsonTopology = new OdeTimJsonTopology(odeKafkaProperties, timTopic); + Awaitility.setDefaultTimeout(250, java.util.concurrent.TimeUnit.MILLISECONDS); + } + + @Test + void testStop() { + odeTimJsonTopology.stop(); + Awaitility.await().untilAsserted(() -> assertFalse(odeTimJsonTopology.isRunning())); + } + + @Test + void testIsRunning() { + Awaitility.await().untilAsserted(() -> assertTrue(odeTimJsonTopology.isRunning())); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/SerializableMessageProducerPoolTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/SerializableMessageProducerPoolTest.java index 96de098f2..709cfdc7e 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/SerializableMessageProducerPoolTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/SerializableMessageProducerPoolTest.java @@ -15,116 +15,52 @@ ******************************************************************************/ package us.dot.its.jpo.ode; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import java.util.Properties; -import java.util.Set; - import org.apache.kafka.clients.producer.Producer; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; - -import mockit.Expectations; -import mockit.Injectable; -import mockit.Mocked; -import mockit.Tested; -import mockit.Verifications; -//import mockit.integration.junit4.JMockit; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.info.BuildProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.context.annotation.Import; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.wrapper.MessageProducer; -//@RunWith(JMockit.class) -public class SerializableMessageProducerPoolTest { +import static org.junit.jupiter.api.Assertions.*; - @Tested - SerializableMessageProducerPool testSerializableMessageProducerPool; - @Injectable - OdeProperties mockOdeProperties; +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@Import({BuildProperties.class}) +@EnableConfigurationProperties(value = {OdeKafkaProperties.class}) +class SerializableMessageProducerPoolTest { - @BeforeEach - public void setUp() { - new Expectations() { - { - mockOdeProperties.getProperty(anyString, anyInt); - result = "test1"; - mockOdeProperties.getProperty(anyString, anyString); - result = "test2"; - } - }; - } + @Autowired + OdeKafkaProperties testOdeKafkaProperties; - @SuppressWarnings("unchecked") @Test - public void testCreate(@Mocked final MessageProducer mockMessageProducer) { - new Expectations() { - { - new MessageProducer(anyString, anyString, anyString, - (Properties) any, (Set)any); - } - }; - - assertTrue(testSerializableMessageProducerPool.create() instanceof MessageProducer); + void testCreate() { + SerializableMessageProducerPool testSerializableMessageProducerPool = new SerializableMessageProducerPool<>(testOdeKafkaProperties); + assertEquals(MessageProducer.class, testSerializableMessageProducerPool.create().getClass()); } - @SuppressWarnings({ "rawtypes", "unchecked" }) @Test - public void testValidateTrue(@Injectable MessageProducer mockMessageProducer, @Mocked Producer mockProducer) { - - new Expectations() { - { - mockMessageProducer.getProducer(); - result = mockProducer; - } - }; - - assertTrue(testSerializableMessageProducerPool.validate(mockMessageProducer)); - + void testValidate() { + SerializableMessageProducerPool testSerializableMessageProducerPool = new SerializableMessageProducerPool<>(testOdeKafkaProperties); + MessageProducer producer = testSerializableMessageProducerPool.create(); + assertTrue(testSerializableMessageProducerPool.validate(producer)); } - @SuppressWarnings({ "rawtypes", "unchecked" }) @Test - public void testValidateFalse(@Injectable MessageProducer mockMessageProducer) { - - new Expectations() { - { - mockMessageProducer.getProducer(); - result = null; - } - }; - - assertFalse(testSerializableMessageProducerPool.validate(mockMessageProducer)); - + void testExpire() { + SerializableMessageProducerPool testSerializableMessageProducerPool = new SerializableMessageProducerPool<>(testOdeKafkaProperties); + MessageProducer producer = testSerializableMessageProducerPool.create(); + testSerializableMessageProducerPool.expire(producer); + + // To confirm that the producer has been expired, we will try to send a message. + // If the producer has been expired, it will throw an IllegalStateException. + Producer internalProducer = producer.getProducer(); + assertThrows(IllegalStateException.class, () -> internalProducer.send(null)); } - - @SuppressWarnings({ "rawtypes", "unchecked" }) - @Test - public void testExpire(@Injectable MessageProducer mockMessageProducer) { - testSerializableMessageProducerPool.expire(mockMessageProducer); - - new Verifications() { - { - mockMessageProducer.close(); - } - }; - } - - @Test - public void testSettersAndGetters() { - - testSerializableMessageProducerPool.setBrokers("testBrokers123"); - assertEquals("testBrokers123", testSerializableMessageProducerPool.getBrokers()); - - testSerializableMessageProducerPool.setPartitionerClass("testPartitionerClass123"); - assertEquals("testPartitionerClass123", testSerializableMessageProducerPool.getPartitionerClass()); - - testSerializableMessageProducerPool.setType("testType123"); - assertEquals("testType123", testSerializableMessageProducerPool.getType()); - - testSerializableMessageProducerPool.setProps(null); - assertNull(testSerializableMessageProducerPool.getProps()); - } - } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/ByteArrayPublisherTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/ByteArrayPublisherTest.java index 3d4d132d6..8287ccb48 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/ByteArrayPublisherTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/ByteArrayPublisherTest.java @@ -22,15 +22,16 @@ import mockit.Injectable; import mockit.Mocked; import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.wrapper.MessageProducer; public class ByteArrayPublisherTest { @Tested ByteArrayPublisher testMessagePublisher; + @Injectable - OdeProperties testOdeProperties; + OdeKafkaProperties injectableOdeKafkaProperties; @Injectable String testSerializer; @Mocked @@ -49,6 +50,6 @@ public void shouldPublishTwice() { } }; - testMessagePublisher.publish(mockOdeBsmData, "topic"); + testMessagePublisher.publish("topic", mockOdeBsmData); } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeBsmDataCreatorHelperTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeBsmDataCreatorHelperTest.java index 6587fb028..ada3ec231 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeBsmDataCreatorHelperTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeBsmDataCreatorHelperTest.java @@ -1,39 +1,85 @@ package us.dot.its.jpo.ode.coder; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.fail; import static org.junit.jupiter.api.Assertions.assertEquals; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.networknt.schema.JsonSchema; +import com.networknt.schema.JsonSchemaFactory; +import com.networknt.schema.SpecVersion; +import java.io.File; +import java.io.IOException; import java.math.BigDecimal; - +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.util.Objects; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; - import us.dot.its.jpo.ode.model.OdeBsmData; import us.dot.its.jpo.ode.model.OdeBsmPayload; import us.dot.its.jpo.ode.plugin.j2735.J2735BsmPart2ExtensionBase; import us.dot.its.jpo.ode.plugin.j2735.J2735VehicleSafetyExtensions; import us.dot.its.jpo.ode.util.XmlUtils; -import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; - -public class OdeBsmDataCreatorHelperTest { - @Test - public void testCreateOdeBsmData() { - String consumedData = "RVbsmTxsuccessRVunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload746fdbbb-188b-471b-a4ed-8f9c0310851210002022-10-31T06:50:07.892312Z60false172.19.0.1MessageFrame20350D337EAF8800396792924-10593528173395935270019696000501000000001000000000000-1347-37532261530-1998-6328-1262370-1887-8337-3962710-1166-10100-5763020164-11501-77633802130-12445-95637804586-12737-102642206499-12139-111646708041-10872-906503010185-7426-53655353276720000001000020065535655351010734101001000000000000000"; - try { - XmlUtils.toObjectNode(consumedData); - } catch (XmlUtilsException e) { - fail("XML parsing error:" + e); - } - OdeBsmData bsmData; - try { - bsmData = OdeBsmDataCreatorHelper.createOdeBsmData(consumedData); - assertNotNull(bsmData); - J2735BsmPart2ExtensionBase part2Ext = ((OdeBsmPayload)bsmData.getPayload()).getBsm().getPartII().get(0).getValue(); - BigDecimal timeOffset = ((J2735VehicleSafetyExtensions)part2Ext).getPathHistory().getCrumbData().get(9).getTimeOffset(); - assertEquals(Integer.toString(65535), timeOffset.toString()); - } catch (XmlUtilsException e) { - e.printStackTrace(); - } - - } + +class OdeBsmDataCreatorHelperTest { + @Test + void testCreateOdeBsmData_OnePartIIExtension() + throws XmlUtils.XmlUtilsException, IOException, URISyntaxException { + String xmlFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeBsmDataCreatorHelper_BSM_XER_J2735_2024_OneExtension.xml"; + String consumedData = loadResourceAsString(xmlFilePath); + XmlUtils.toObjectNode(consumedData); + + OdeBsmData bsmData = OdeBsmDataCreatorHelper.createOdeBsmData(consumedData); + Assertions.assertNotNull(bsmData); + J2735BsmPart2ExtensionBase part2Ext = + ((OdeBsmPayload) bsmData.getPayload()).getBsm().getPartII().getFirst().getValue(); + BigDecimal timeOffset = + ((J2735VehicleSafetyExtensions) part2Ext).getPathHistory().getCrumbData().get(9) + .getTimeOffset(); + assertEquals(Integer.toString(65535), timeOffset.toString()); + + // validate against schema + JsonSchema schema = loadBsmSchema(); + var objectMapper = new ObjectMapper(); + var serializedBsmData = objectMapper.writeValueAsString(bsmData); + var validationResults = schema.validate(objectMapper.readTree(serializedBsmData)); + assertEquals(0, validationResults.size(), + "Outputted BSM failed schema validation: " + validationResults); + } + + @Test + void testCreateOdeBsmData_TwoPartIIExtensions() + throws XmlUtils.XmlUtilsException, IOException, URISyntaxException { + String xmlFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeBsmDataCreatorHelper_BSM_XER_J2735_2024_TwoExtensions.xml"; + String consumedData = loadResourceAsString(xmlFilePath); + XmlUtils.toObjectNode(consumedData); + + OdeBsmData bsmData = OdeBsmDataCreatorHelper.createOdeBsmData(consumedData); + Assertions.assertNotNull(bsmData); + J2735BsmPart2ExtensionBase part2Ext = + ((OdeBsmPayload) bsmData.getPayload()).getBsm().getPartII().getFirst().getValue(); + Assertions.assertNotNull(part2Ext); + + // validate against schema + JsonSchema schema = loadBsmSchema(); + var objectMapper = new ObjectMapper(); + var serializedBsmData = objectMapper.writeValueAsString(bsmData); + var validationResults = schema.validate(objectMapper.readTree(serializedBsmData)); + assertEquals(0, validationResults.size(), + "Outputted BSM failed schema validation: " + validationResults); + } + + static String loadResourceAsString(String resourcePath) throws IOException { + File file = new File(resourcePath); + byte[] data = Files.readAllBytes(file.toPath()); + return new String(data); + } + + static JsonSchema loadBsmSchema() throws URISyntaxException { + JsonSchemaFactory factory = JsonSchemaFactory.getInstance(SpecVersion.VersionFlag.V7); + return factory.getSchema(Objects.requireNonNull( + OdeBsmDataCreatorHelperTest.class.getClassLoader().getResource("schemas/schema-bsm.json")) + .toURI()); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeDataPublisherTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeDataPublisherTest.java index d6b297b4f..86607c9a6 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeDataPublisherTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeDataPublisherTest.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,42 +15,42 @@ ******************************************************************************/ package us.dot.its.jpo.ode.coder; -import org.junit.jupiter.api.Test; - import mockit.Capturing; import mockit.Expectations; -import mockit.Injectable; import mockit.Mocked; import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; +import org.junit.jupiter.api.Test; import us.dot.its.jpo.ode.model.OdeBsmData; import us.dot.its.jpo.ode.model.OdeData; import us.dot.its.jpo.ode.wrapper.MessageProducer; -public class OdeDataPublisherTest { +import java.util.Set; + + +class OdeDataPublisherTest { + + @Tested + OdeDataPublisher testMessagePublisher = new OdeDataPublisher("sync", + "localhost:9093", + Set.of(), + "us.dot.its.jpo.ode.wrapper.serdes.OdeBsmSerializer"); + @Mocked + OdeBsmData mockOdeBsmData; - @Tested - OdeDataPublisher testMessagePublisher; - @Injectable - OdeProperties testOdeProperties; - @Injectable - String testSerializer; - @Mocked - OdeBsmData mockOdeBsmData; - @Capturing - MessageProducer capturingMessageProducer; + @Capturing + MessageProducer capturingMessageProducer; - @Test - public void shouldPublishTwice() { + @Test + void shouldPublishOnce() { - new Expectations() { - { - capturingMessageProducer.send(anyString, null, (OdeData) any); - times = 1; - } - }; + new Expectations() { + { + capturingMessageProducer.send(anyString, null, (OdeData) any); + times = 1; + } + }; - testMessagePublisher.publish(mockOdeBsmData, "topic"); - } + testMessagePublisher.publish("topic", mockOdeBsmData); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeSsmDataCreatorHelperTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeSsmDataCreatorHelperTest.java index 014176828..b80be1360 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeSsmDataCreatorHelperTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeSsmDataCreatorHelperTest.java @@ -1,12 +1,11 @@ package us.dot.its.jpo.ode.coder; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; import org.junit.jupiter.api.Test; -import com.fasterxml.jackson.databind.JsonNode; - import us.dot.its.jpo.ode.model.OdeSsmData; import us.dot.its.jpo.ode.util.XmlUtils; import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; @@ -20,17 +19,19 @@ public void testConstructor() { @Test public void testCreateOdeSrmData() { - String consumedData = "us.dot.its.jpo.ode.model.OdeAsn1Payload50b5374e-db5b-410f-84d8-c047b157119010002021-10-03T20:00:43.331224Z60falsessmTxunsecuredDataMessageFrameUPER172.250.250.77RSUMessageFrame30001211023668450943023"; - JsonNode jsonMap = null; + String consumedData = "ssmTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload75b0ddae-5f6e-403d-ae9d-ec41080bb50010002024-11-11T21:42:11.755Z70RSUfalse001E2366CF218CA0B40010BD4C2896A131B71C0450201685AD512AACB3B0105010402E4C6A805000172.18.0.1RSUMessageFrame30446241360009021211528235811271105413231435923970101551597"; try { - jsonMap = XmlUtils.toObjectNode(consumedData); + XmlUtils.toObjectNode(consumedData); } catch (XmlUtilsException e) { fail("XML parsing error:" + e); } + + String expectedJson = "{\"metadata\":{\"logFileName\":\"\",\"recordType\":\"ssmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeSsmPayload\",\"serialId\":{\"streamId\":\"75b0ddae-5f6e-403d-ae9d-ec41080bb500\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-11-11T21:42:11.755Z\",\"schemaVersion\":7,\"maxDurationTime\":0,\"recordGeneratedAt\":\"\",\"recordGeneratedBy\":\"RSU\",\"sanitized\":false,\"odePacketID\":\"\",\"odeTimStartDateTime\":\"\",\"asn1\":\"001E2366CF218CA0B40010BD4C2896A131B71C0450201685AD512AACB3B0105010402E4C6A805000\",\"originIp\":\"172.18.0.1\",\"ssmSource\":\"RSU\"},\"payload\":{\"data\":{\"timeStamp\":446241,\"second\":36000,\"sequenceNumber\":90,\"status\":{\"signalStatus\":[{\"sequenceNumber\":2,\"id\":{\"id\":12115},\"sigStatus\":{\"signalStatusPackage\":[{\"requester\":{\"id\":{\"stationID\":2823581127},\"request\":1,\"sequenceNumber\":10,\"role\":\"publicTransport\"},\"inboundOn\":{\"lane\":5},\"duration\":41323,\"status\":\"rejected\"},{\"requester\":{\"id\":{\"stationID\":1435923970},\"request\":10,\"sequenceNumber\":1,\"role\":\"publicTransport\"},\"inboundOn\":{\"lane\":5},\"duration\":51597,\"status\":\"rejected\"}]}}]}},\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.J2735SSM\"}}"; OdeSsmData ssmData; try { ssmData = OdeSsmDataCreatorHelper.createOdeSsmData(consumedData); assertNotNull(ssmData); + assertEquals(ssmData.toJson(), expectedJson); } catch (XmlUtilsException e) { e.printStackTrace(); } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeStringPublisherTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeStringPublisherTest.java index 5723a5c0b..945e168a2 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeStringPublisherTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeStringPublisherTest.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,36 +15,32 @@ ******************************************************************************/ package us.dot.its.jpo.ode.coder; -import org.junit.jupiter.api.Test; - import mockit.Capturing; import mockit.Expectations; -import mockit.Injectable; import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; +import org.junit.jupiter.api.Test; import us.dot.its.jpo.ode.model.OdeData; import us.dot.its.jpo.ode.wrapper.MessageProducer; -public class OdeStringPublisherTest { +import java.util.Set; - @Tested - OdeStringPublisher testOdeStringPublisher; +class OdeStringPublisherTest { - @Injectable - OdeProperties injectableOdeProperties; + @Tested + OdeStringPublisher testOdeStringPublisher = new OdeStringPublisher("localhost:9093", "sync", Set.of("disabledTopic")); - @Capturing - MessageProducer capturingMessageProducer; + @Capturing + MessageProducer capturingMessageProducer; - @Test - public void publishShouldCallMessageProducer() { - new Expectations() { - { - capturingMessageProducer.send(anyString, null, anyString); - times = 1; - } - }; + @Test + void publishShouldCallMessageProducer() { + new Expectations() { + { + capturingMessageProducer.send(anyString, null, anyString); + times = 1; + } + }; - testOdeStringPublisher.publish(new OdeData(), "testTopic"); - } + testOdeStringPublisher.publish("testTopic", new OdeData()); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelperTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelperTest.java new file mode 100644 index 000000000..eb0b2fac5 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/OdeTimDataCreatorHelperTest.java @@ -0,0 +1,82 @@ +package us.dot.its.jpo.ode.coder; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.File; +import java.nio.file.Files; +import org.junit.jupiter.api.Test; +import us.dot.its.jpo.ode.model.OdeTimData; +import us.dot.its.jpo.ode.util.XmlUtils; + +class OdeTimDataCreatorHelperTest { + + @Test + public void testCreateOdeTimDataFromDecoded2024() throws Exception { + String xmlFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2024.xml"; + File xmlFile = new File(xmlFilePath); + byte[] xmlData = Files.readAllBytes(xmlFile.toPath()); + String xmlString = new String(xmlData); + + XmlUtils.toObjectNode(xmlString); + + String jsonFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON_J2735-2024.json"; + File jsonFile = new File(jsonFilePath); + byte[] jsonData = Files.readAllBytes(jsonFile.toPath()); + String expectedJsonString = new String(jsonData); + OdeTimData timData; + + timData = OdeTimDataCreatorHelper.createOdeTimDataFromDecoded(xmlString); + + assertEquals(expectedJsonString, timData.toString()); + + } + + + @Test + public void testCreateOdeTimDataFromDecoded2020() throws Exception { + String xmlFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2020.xml"; + File xmlFile = new File(xmlFilePath); + byte[] xmlData = Files.readAllBytes(xmlFile.toPath()); + String xmlString = new String(xmlData); + + XmlUtils.toObjectNode(xmlString); + + String jsonFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON_J2735-2024.json"; + File jsonFile = new File(jsonFilePath); + byte[] jsonData = Files.readAllBytes(jsonFile.toPath()); + String expectedJsonString = new String(jsonData); + OdeTimData timData; + + timData = OdeTimDataCreatorHelper.createOdeTimDataFromDecoded(xmlString); + + assertEquals(expectedJsonString, timData.toString()); + + } + + @Test + public void testCreateOdeTimDataFromDecoded2016() throws Exception { + String xmlFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2016.xml"; + File xmlFile = new File(xmlFilePath); + byte[] xmlData = Files.readAllBytes(xmlFile.toPath()); + String xmlString = new String(xmlData); + + XmlUtils.toObjectNode(xmlString); + + String jsonFilePath = + "src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON_J2735-2024.json"; + File jsonFile = new File(jsonFilePath); + byte[] jsonData = Files.readAllBytes(jsonFile.toPath()); + String expectedJsonString = new String(jsonData); + OdeTimData timData; + + timData = OdeTimDataCreatorHelper.createOdeTimDataFromDecoded(xmlString); + + assertEquals(expectedJsonString, timData.toString()); + + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java index 083973e92..33878ab0d 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/coder/stream/LogFileToAsn1CodecPublisherTest.java @@ -1,384 +1,393 @@ /******************************************************************************* * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * + *

http://www.apache.org/licenses/LICENSE-2.0 + * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. ******************************************************************************/ + package us.dot.its.jpo.ode.coder.stream; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.util.List; - -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - import mockit.Expectations; import mockit.Injectable; import mockit.Mocked; import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; +import org.junit.jupiter.api.Test; import us.dot.its.jpo.ode.coder.StringPublisher; import us.dot.its.jpo.ode.coder.stream.LogFileToAsn1CodecPublisher.LogFileToAsn1CodecPublisherException; import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher.ImporterFileType; import us.dot.its.jpo.ode.importer.parser.FileParser.ParserStatus; import us.dot.its.jpo.ode.importer.parser.LogFileParser; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; import us.dot.its.jpo.ode.model.OdeData; import us.dot.its.jpo.ode.model.OdeLogMetadata.RecordType; -import us.dot.its.jpo.ode.model.OdeMsgMetadata; import us.dot.its.jpo.ode.util.DateTimeUtils; -public class LogFileToAsn1CodecPublisherTest { - - private static final String GZ = ".gz"; - private static String schemaVersion = "7"; - - @Tested - LogFileToAsn1CodecPublisher testLogFileToAsn1CodecPublisher; - - @Injectable - StringPublisher injectableStringPublisher; - - @BeforeAll - public static void setupClass() { - OdeMsgMetadata.setStaticSchemaVersion(OdeProperties.OUTPUT_SCHEMA_VERSION); - schemaVersion = Integer.toString(OdeProperties.OUTPUT_SCHEMA_VERSION); - } - - @Test - public void testPublishInit(@Mocked LogFileParser mockLogFileParser) throws Exception { - new Expectations() { - { - LogFileParser.factory(anyString); - result = mockLogFileParser; - - mockLogFileParser.parseFile((BufferedInputStream) any, anyString); - result = ParserStatus.INIT; - } - }; - - List dataList = testLogFileToAsn1CodecPublisher.publish( - new BufferedInputStream(new ByteArrayInputStream(new byte[0])), - "fileName", ImporterFileType.LOG_FILE); - - assertTrue(dataList.isEmpty()); - } - - @Test - public void testPublishEOF(@Mocked LogFileParser mockLogFileParser) throws Exception { - new Expectations() { - { - LogFileParser.factory(anyString); - result = mockLogFileParser; - - mockLogFileParser.parseFile((BufferedInputStream) any, anyString); - result = ParserStatus.EOF; - } - }; - - List dataList = testLogFileToAsn1CodecPublisher.publish( - new BufferedInputStream(new ByteArrayInputStream(new byte[0])), - "fileName", ImporterFileType.LOG_FILE); - - assertTrue(dataList.isEmpty()); - } - - @Test - public void testPublishThrowsIllegalArgumentException() throws Exception { - // If the filename does not follow expected filename pattern, - // IllegalArgumentException should be thrown - assertThrows(IllegalArgumentException.class, () -> { - // If the filename does not follow expected filename pattern, - // IllegalArgumentException should be thrown - testLogFileToAsn1CodecPublisher.publish(new BufferedInputStream(new ByteArrayInputStream(new byte[0])), - "fileName", ImporterFileType.LOG_FILE); - fail("Expected an IllegalArgumentException to be thrown"); - }); - } - - @Test - public void testPublishThrowsLogFileToAsn1CodecPublisherException(@Mocked LogFileParser mockLogFileParser) - throws Exception { - assertThrows(LogFileToAsn1CodecPublisherException.class, () -> { - new Expectations() { - { - LogFileParser.factory(anyString); - result = mockLogFileParser; - - /* - * If the embedded parser fails to parse a log file header, it may throw an - * exception - * which is then caught by the parser and re-thrown as - * LogFileToAsn1CodecPublisherException. - * This mocked object will simulate that eventuality. - */ - mockLogFileParser.parseFile((BufferedInputStream) any, anyString); - result = new LogFileToAsn1CodecPublisherException(anyString, (Exception) any); - } - }; - - testLogFileToAsn1CodecPublisher.publish(new BufferedInputStream(new ByteArrayInputStream(new byte[0])), - "fileName", ImporterFileType.LOG_FILE); - fail("Expected an LogFileToAsn1CodecPublisherException to be thrown"); - }); - } - - @Test - public void testPublishDecodeFailure(@Mocked LogFileParser mockLogFileParser) throws Exception { - new Expectations() { - { - LogFileParser.factory(anyString); - result = mockLogFileParser; - - mockLogFileParser.parseFile((BufferedInputStream) any, anyString); - result = ParserStatus.ERROR; - } - }; - - List dataList = testLogFileToAsn1CodecPublisher.publish( - new BufferedInputStream(new ByteArrayInputStream(new byte[0])), - "fileName", ImporterFileType.LOG_FILE); - - assertTrue(dataList.isEmpty()); - } - - @Test - public void testPublishBsmTxLogFile() throws Exception { - - byte[] buf = new byte[] { - (byte) 0x00, // 1. direction - (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 2.0 latitude - (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 2.1 longitude - (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 2.3 elevation - (byte) 0x04, (byte) 0x00, // 2.3 speed - (byte) 0x09, (byte) 0x27, // 2.4 heading - (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 3. utcTimeInSec - (byte) 0x8f, (byte) 0x01, // 4. mSec - (byte) 0x00, // 5. securityResultCode - (byte) 0x06, (byte) 0x00, // 6.0 payloadLength - // 6.1 payload - (byte) 0x03, (byte) 0x81, (byte) 0x00, (byte) 0x14, (byte) 0x03, (byte) 0x80 - }; - - String filename = RecordType.bsmTx.name() + GZ; - - BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); - - List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); - - for (OdeData data : dataList) { - assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), - DateTimeUtils.nowZDT()) > 0); - data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); - data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - String asn1String = data.getMetadata().getAsn1(); - var expected = String.format("{\"metadata\":{\"bsmSource\":\"EV\",\"logFileName\":\"bsmTx.gz\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", schemaVersion, asn1String, asn1String); - assertEquals(expected, data.toJson()); - } - } - - @Test - public void testPublishDistressNotificationLogFile() throws Exception { - - byte[] buf = new byte[] { - (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 1.1 latitude - (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 1.2 longitude - (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 1.3 elevation - (byte) 0x04, (byte) 0x00, // 1.4 speed - (byte) 0x09, (byte) 0x27, // 1.5 heading - (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 2. utcTimeInSec - (byte) 0x8f, (byte) 0x01, // 3. mSec - (byte) 0x00, // 4. securityResultCode - (byte) 0x06, (byte) 0x00, // 5.1 payloadLength - // 5.2 payload - (byte) 0x03, (byte) 0x81, (byte) 0x00, (byte) 0x40, (byte) 0x03, (byte) 0x80 - }; - - String filename = RecordType.dnMsg.name() + GZ; +class LogFileToAsn1CodecPublisherTest { - BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + private static final String GZ = ".gz"; + private static final String schemaVersion = "8"; - List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + @Tested + LogFileToAsn1CodecPublisher testLogFileToAsn1CodecPublisher; - for (OdeData data : dataList) { - assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), - DateTimeUtils.nowZDT()) > 0); - data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); - data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - var expected = String.format("{\"metadata\":{\"logFileName\":\"dnMsg.gz\",\"recordType\":\"dnMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"encodings\":[{\"elementName\":\"root\",\"elementType\":\"Ieee1609Dot2Data\",\"encodingRule\":\"COER\"},{\"elementName\":\"unsecuredData\",\"elementType\":\"MessageFrame\",\"encodingRule\":\"UPER\"}],\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"038100400380\"}}}", schemaVersion); - } - } - - @Test - public void testPublishDriverAlertLogFile() throws Exception { - - byte[] buf = new byte[] { - (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 1.0 latitude - (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 1.1 longitude - (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 1.2 elevation - (byte) 0x04, (byte) 0x00, // 1.3 speed - (byte) 0x09, (byte) 0x27, // 1.4 heading - - (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 2. utcTimeInSec - (byte) 0x8f, (byte) 0x01, // 3. mSec - (byte) 0x11, (byte) 0x00, // 4.0 payloadLength - // 4.1 payload - 'T', 'e', 's', 't', ' ', 'D', 'r', 'i', 'v', 'e', 'r', ' ', 'A', 'l', 'e', 'r', 't' - }; + @Injectable + StringPublisher injectableStringPublisher; - String filename = RecordType.driverAlert.name() + GZ; + @Injectable + JsonTopics injectableJsonTopics; - BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + @Injectable + RawEncodedJsonTopics injectableRawEncodedJsonTopics; - List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + @Test + void testPublishInit(@Mocked LogFileParser mockLogFileParser) throws Exception { + new Expectations() { + { + LogFileParser.factory(anyString); + result = mockLogFileParser; - for (OdeData data : dataList) { - assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), - DateTimeUtils.nowZDT()) > 0); - data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); - data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - var expected = String.format("{\"metadata\":{\"logFileName\":\"driverAlert.gz\",\"recordType\":\"driverAlert\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeDriverAlertPayload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"alert\":\"Test Driver Alert\"}}", schemaVersion); - assertEquals(expected, data.toJson()); + mockLogFileParser.parseFile((BufferedInputStream) any, anyString); + result = ParserStatus.INIT; } - } - - @Test - public void testPublishRxMsgTIMLogFile() throws Exception { - - byte[] buf = new byte[] { - (byte) 0x01, // 1. RxSource = SAT - (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 2.0 latitude - (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 2.1 longitude - (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 2.3 elevation - (byte) 0x04, (byte) 0x00, // 2.3 speed - (byte) 0x09, (byte) 0x27, // 2.4 heading - (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 2. utcTimeInSec - (byte) 0x8f, (byte) 0x01, // 4. mSec - (byte) 0x00, // 5. securityResultCode - (byte) 0x06, (byte) 0x00, // 6.0 payloadLength - // 6.1 payload - (byte) 0x03, (byte) 0x81, (byte) 0x00, (byte) 0x14, (byte) 0x03, (byte) 0x80 - }; + }; - String filename = RecordType.rxMsg.name() + GZ; + List dataList = testLogFileToAsn1CodecPublisher.publish( + new BufferedInputStream(new ByteArrayInputStream(new byte[0])), + "fileName", ImporterFileType.LOG_FILE); - BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + assertTrue(dataList.isEmpty()); + } - List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + @Test + void testPublishEOF(@Mocked LogFileParser mockLogFileParser) throws Exception { + new Expectations() { + { + LogFileParser.factory(anyString); + result = mockLogFileParser; - for (OdeData data : dataList) { - assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), - DateTimeUtils.nowZDT()) > 0); - data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); - data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - String asn1String = data.getMetadata().getAsn1(); - var expected = String.format("{\"metadata\":{\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"SAT\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"TMC_VIA_SAT\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", schemaVersion, asn1String, asn1String); - assertEquals(expected, data.toJson()); + mockLogFileParser.parseFile((BufferedInputStream) any, anyString); + result = ParserStatus.EOF; } - } - - @Test - public void testPublishRxMsgBSMLogFile() throws Exception { - - byte[] buf = new byte[] { - (byte) 0x02, // 1. RxSource = RV - (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 2.0 latitude - (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 2.1 longitude - (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 2.3 elevation - (byte) 0x04, (byte) 0x00, // 2.3 speed - (byte) 0x09, (byte) 0x27, // 2.4 heading - (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 3. utcTimeInSec - (byte) 0x8f, (byte) 0x01, // 4. mSec - (byte) 0x00, // 5. securityResultCode - (byte) 0x06, (byte) 0x00, // 6.0 payloadLength - // 6.1 payload - (byte) 0x11, (byte) 0x81, (byte) 0x00, (byte) 0x14, (byte) 0x03, (byte) 0x80 - }; - - String filename = RecordType.rxMsg.name() + GZ; + }; - BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + List dataList = testLogFileToAsn1CodecPublisher.publish( + new BufferedInputStream(new ByteArrayInputStream(new byte[0])), + "fileName", ImporterFileType.LOG_FILE); - List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + assertTrue(dataList.isEmpty()); + } - for (OdeData data : dataList) { - assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), - DateTimeUtils.nowZDT()) > 0); - data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); - data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - String asn1String = data.getMetadata().getAsn1(); - var expected = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", schemaVersion, asn1String, asn1String); - assertEquals(expected, data.toJson()); - } - } - - @Test - public void testPublishNonLearLogFile() throws Exception { - - String filename = RecordType.rxMsg.name() + GZ; - - String jsonData = "{\"fakeJsonKey\":\"fakeJsonValue\""; - byte[] buf = jsonData.getBytes(); - BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); - - /* - * This call to publish method does not actually try to parse the data. It - * short-circuits the parsing because - * currently we dont' support JSON input records. We may in the future. - */ - - List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.JSON_FILE); - - assertTrue(dataList.isEmpty()); - } - - @Test - public void testPublishRxMsgBSMLogFileNewLine() throws Exception { - - byte[] buf = new byte[] { - (byte) 0x02, // 1. RxSource = RV - (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 2.0 latitude - (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 2.1 longitude - (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 2.3 elevation - (byte) 0x04, (byte) 0x00, // 2.3 speed - (byte) 0x09, (byte) 0x27, // 2.4 heading - (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 3. utcTimeInSec - (byte) 0x8f, (byte) 0x01, // 4. mSec - (byte) 0x00, // 5. securityResultCode - (byte) 0x06, (byte) 0x00, // 6.0 payloadLength - // 6.1 payload - (byte) 0x11, (byte) 0x81, (byte) 0x00, (byte) 0x14, (byte) 0x03, (byte) 0x80, - (byte) 0x0a + @Test + void testPublishThrowsIllegalArgumentException() { + // If the filename does not follow expected filename pattern, + // IllegalArgumentException should be thrown + assertThrows(IllegalArgumentException.class, () -> { + // If the filename does not follow expected filename pattern, + // IllegalArgumentException should be thrown + testLogFileToAsn1CodecPublisher.publish(new BufferedInputStream(new ByteArrayInputStream(new byte[0])), + "fileName", ImporterFileType.LOG_FILE); + fail("Expected an IllegalArgumentException to be thrown"); + }); + } + + @Test + void testPublishThrowsLogFileToAsn1CodecPublisherException(@Mocked LogFileParser mockLogFileParser) { + assertThrows(LogFileToAsn1CodecPublisherException.class, () -> { + new Expectations() { + { + LogFileParser.factory(anyString); + result = mockLogFileParser; + + /* + * If the embedded parser fails to parse a log file header, it may throw an + * exception + * which is then caught by the parser and re-thrown as + * LogFileToAsn1CodecPublisherException. + * This mocked object will simulate that eventuality. + */ + mockLogFileParser.parseFile((BufferedInputStream) any, anyString); + result = new LogFileToAsn1CodecPublisherException(anyString, (Exception) any); + } }; - String filename = RecordType.rxMsg.name() + GZ; - - BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); - - List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); - - for (OdeData data : dataList) { - assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), - DateTimeUtils.nowZDT()) > 0); - data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); - data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); - String asn1String = data.getMetadata().getAsn1(); - var expected = String.format("{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", schemaVersion, asn1String, asn1String); - assertEquals(expected, data.toJson()); + testLogFileToAsn1CodecPublisher.publish(new BufferedInputStream(new ByteArrayInputStream(new byte[0])), + "fileName", ImporterFileType.LOG_FILE); + fail("Expected an LogFileToAsn1CodecPublisherException to be thrown"); + }); + } + + @Test + void testPublishDecodeFailure(@Mocked LogFileParser mockLogFileParser) throws Exception { + new Expectations() { + { + LogFileParser.factory(anyString); + result = mockLogFileParser; + + mockLogFileParser.parseFile((BufferedInputStream) any, anyString); + result = ParserStatus.ERROR; } - } + }; + + List dataList = testLogFileToAsn1CodecPublisher.publish( + new BufferedInputStream(new ByteArrayInputStream(new byte[0])), + "fileName", ImporterFileType.LOG_FILE); + + assertTrue(dataList.isEmpty()); + } + + @Test + void testPublishBsmTxLogFile() throws Exception { + + byte[] buf = new byte[] { + (byte) 0x00, // 1. direction + (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 2.0 latitude + (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 2.1 longitude + (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 2.3 elevation + (byte) 0x04, (byte) 0x00, // 2.3 speed + (byte) 0x09, (byte) 0x27, // 2.4 heading + (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 3. utcTimeInSec + (byte) 0x8f, (byte) 0x01, // 4. mSec + (byte) 0x00, // 5. securityResultCode + (byte) 0x06, (byte) 0x00, // 6.0 payloadLength + // 6.1 payload + (byte) 0x03, (byte) 0x81, (byte) 0x00, (byte) 0x14, (byte) 0x03, (byte) 0x80 + }; + + String filename = RecordType.bsmTx.name() + GZ; + + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + + for (OdeData data : dataList) { + assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), + DateTimeUtils.nowZDT()) > 0); + data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); + data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); + String asn1String = data.getMetadata().getAsn1(); + var expected = String.format( + "{\"metadata\":{\"bsmSource\":\"EV\",\"logFileName\":\"bsmTx.gz\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", + schemaVersion, asn1String, asn1String); + assertEquals(expected, data.toJson()); + } + } + + @Test + void testPublishDistressNotificationLogFile() throws Exception { + + byte[] buf = new byte[] { + (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 1.1 latitude + (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 1.2 longitude + (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 1.3 elevation + (byte) 0x04, (byte) 0x00, // 1.4 speed + (byte) 0x09, (byte) 0x27, // 1.5 heading + (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 2. utcTimeInSec + (byte) 0x8f, (byte) 0x01, // 3. mSec + (byte) 0x00, // 4. securityResultCode + (byte) 0x06, (byte) 0x00, // 5.1 payloadLength + // 5.2 payload + (byte) 0x03, (byte) 0x81, (byte) 0x00, (byte) 0x40, (byte) 0x03, (byte) 0x80 + }; + + String filename = RecordType.dnMsg.name() + GZ; + + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + + for (OdeData data : dataList) { + assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), + DateTimeUtils.nowZDT()) > 0); + data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); + data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); + var expected = String.format( + "{\"metadata\":{\"logFileName\":\"dnMsg.gz\",\"recordType\":\"dnMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"encodings\":[{\"elementName\":\"root\",\"elementType\":\"Ieee1609Dot2Data\",\"encodingRule\":\"COER\"},{\"elementName\":\"unsecuredData\",\"elementType\":\"MessageFrame\",\"encodingRule\":\"UPER\"}],\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"038100400380\"}}}", + schemaVersion); + } + } + + @Test + void testPublishDriverAlertLogFile() throws Exception { + + byte[] buf = new byte[] { + (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 1.0 latitude + (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 1.1 longitude + (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 1.2 elevation + (byte) 0x04, (byte) 0x00, // 1.3 speed + (byte) 0x09, (byte) 0x27, // 1.4 heading + + (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 2. utcTimeInSec + (byte) 0x8f, (byte) 0x01, // 3. mSec + (byte) 0x11, (byte) 0x00, // 4.0 payloadLength + // 4.1 payload + 'T', 'e', 's', 't', ' ', 'D', 'r', 'i', 'v', 'e', 'r', ' ', 'A', 'l', 'e', 'r', 't' + }; + + String filename = RecordType.driverAlert.name() + GZ; + + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + + for (OdeData data : dataList) { + assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), + DateTimeUtils.nowZDT()) > 0); + data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); + data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); + var expected = String.format( + "{\"metadata\":{\"logFileName\":\"driverAlert.gz\",\"recordType\":\"driverAlert\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"NA\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeDriverAlertPayload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false},\"payload\":{\"alert\":\"Test Driver Alert\"}}", + schemaVersion); + assertEquals(expected, data.toJson()); + } + } + + @Test + void testPublishRxMsgTIMLogFile() throws Exception { + + byte[] buf = new byte[] { + (byte) 0x01, // 1. RxSource = SAT + (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 2.0 latitude + (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 2.1 longitude + (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 2.3 elevation + (byte) 0x04, (byte) 0x00, // 2.3 speed + (byte) 0x09, (byte) 0x27, // 2.4 heading + (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 2. utcTimeInSec + (byte) 0x8f, (byte) 0x01, // 4. mSec + (byte) 0x00, // 5. securityResultCode + (byte) 0x06, (byte) 0x00, // 6.0 payloadLength + // 6.1 payload + (byte) 0x03, (byte) 0x81, (byte) 0x00, (byte) 0x14, (byte) 0x03, (byte) 0x80 + }; + + String filename = RecordType.rxMsg.name() + GZ; + + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + + for (OdeData data : dataList) { + assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), + DateTimeUtils.nowZDT()) > 0); + data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); + data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); + String asn1String = data.getMetadata().getAsn1(); + var expected = String.format( + "{\"metadata\":{\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"SAT\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"TMC_VIA_SAT\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", + schemaVersion, asn1String, asn1String); + assertEquals(expected, data.toJson()); + } + } + + @Test + void testPublishRxMsgBSMLogFile() throws Exception { + + byte[] buf = new byte[] { + (byte) 0x02, // 1. RxSource = RV + (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 2.0 latitude + (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 2.1 longitude + (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 2.3 elevation + (byte) 0x04, (byte) 0x00, // 2.3 speed + (byte) 0x09, (byte) 0x27, // 2.4 heading + (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 3. utcTimeInSec + (byte) 0x8f, (byte) 0x01, // 4. mSec + (byte) 0x00, // 5. securityResultCode + (byte) 0x06, (byte) 0x00, // 6.0 payloadLength + // 6.1 payload + (byte) 0x11, (byte) 0x81, (byte) 0x00, (byte) 0x14, (byte) 0x03, (byte) 0x80 + }; + + String filename = RecordType.rxMsg.name() + GZ; + + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + + for (OdeData data : dataList) { + assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), + DateTimeUtils.nowZDT()) > 0); + data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); + data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); + String asn1String = data.getMetadata().getAsn1(); + var expected = String.format( + "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", + schemaVersion, asn1String, asn1String); + assertEquals(expected, data.toJson()); + } + } + + @Test + void testPublishNonLearLogFile() throws Exception { + + String filename = RecordType.rxMsg.name() + GZ; + + String jsonData = "{\"fakeJsonKey\":\"fakeJsonValue\""; + byte[] buf = jsonData.getBytes(); + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + /* + * This call to publish method does not actually try to parse the data. It + * short-circuits the parsing because + * currently we dont' support JSON input records. We may in the future. + */ + + List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.JSON_FILE); + + assertTrue(dataList.isEmpty()); + } + + @Test + void testPublishRxMsgBSMLogFileNewLine() throws Exception { + + byte[] buf = new byte[] { + (byte) 0x02, // 1. RxSource = RV + (byte) 0x6f, (byte) 0x75, (byte) 0x4d, (byte) 0x19, // 2.0 latitude + (byte) 0xa4, (byte) 0xa1, (byte) 0x5c, (byte) 0xce, // 2.1 longitude + (byte) 0x67, (byte) 0x06, (byte) 0x00, (byte) 0x00, // 2.3 elevation + (byte) 0x04, (byte) 0x00, // 2.3 speed + (byte) 0x09, (byte) 0x27, // 2.4 heading + (byte) 0xa9, (byte) 0x2c, (byte) 0xe2, (byte) 0x5a, // 3. utcTimeInSec + (byte) 0x8f, (byte) 0x01, // 4. mSec + (byte) 0x00, // 5. securityResultCode + (byte) 0x06, (byte) 0x00, // 6.0 payloadLength + // 6.1 payload + (byte) 0x11, (byte) 0x81, (byte) 0x00, (byte) 0x14, (byte) 0x03, (byte) 0x80, + (byte) 0x0a + }; + + String filename = RecordType.rxMsg.name() + GZ; + + BufferedInputStream bis = new BufferedInputStream(new ByteArrayInputStream(buf)); + + List dataList = testLogFileToAsn1CodecPublisher.publish(bis, filename, ImporterFileType.LOG_FILE); + + for (OdeData data : dataList) { + assertTrue(DateTimeUtils.difference(DateTimeUtils.isoDateTime(data.getMetadata().getRecordGeneratedAt()), + DateTimeUtils.nowZDT()) > 0); + data.getMetadata().setOdeReceivedAt("2019-03-05T20:31:17.579Z"); + data.getMetadata().getSerialId().setStreamId("c7bbb42e-1e39-442d-98ac-62740ca50f92"); + String asn1String = data.getMetadata().getAsn1(); + var expected = String.format( + "{\"metadata\":{\"bsmSource\":\"RV\",\"logFileName\":\"rxMsg.gz\",\"recordType\":\"rxMsg\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"42.4506735\",\"longitude\":\"-83.2790108\",\"elevation\":\"163.9\",\"speed\":\"0.08\",\"heading\":\"124.9125\"},\"rxSource\":\"RV\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c7bbb42e-1e39-442d-98ac-62740ca50f92\",\"bundleSize\":1,\"bundleId\":1,\"recordId\":0,\"serialNumber\":1},\"odeReceivedAt\":\"2019-03-05T20:31:17.579Z\",\"schemaVersion\":%s,\"maxDurationTime\":0,\"recordGeneratedAt\":\"2018-04-26T19:46:49.399Z\",\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"asn1\":\"%s\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"%s\"}}}", + schemaVersion, asn1String, asn1String); + assertEquals(expected, data.toJson()); + } + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/exporter/ExporterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/exporter/ExporterTest.java index 0229be360..c11cb6cb1 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/exporter/ExporterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/exporter/ExporterTest.java @@ -18,22 +18,18 @@ import mockit.Expectations; import mockit.Injectable; import mockit.Mocked; -//import mockit.integration.junit4.JMockit; import static org.junit.Assert.*; import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; import org.springframework.messaging.simp.SimpMessagingTemplate; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.wrapper.MessageConsumer; -//@RunWith(JMockit.class) -public class ExporterTest { +class ExporterTest { - @Test - public void shouldRun(@Mocked OdeProperties mockOdeProperties, + void shouldRun(@Mocked OdeKafkaProperties odeKafkaProperties, @Injectable SimpMessagingTemplate mockSimpMessagingTemplate, @Mocked final MessageConsumer mockByteArrayConsumer, @Mocked final MessageConsumer mockStringConsumer) { @@ -42,10 +38,7 @@ public void shouldRun(@Mocked OdeProperties mockOdeProperties, new Expectations() { { - mockOdeProperties.getKafkaBrokers(); - result = anyString; - - mockOdeProperties.getHostId(); + odeKafkaProperties.getBrokers(); result = anyString; mockStringConsumer.close(); @@ -54,8 +47,8 @@ public void shouldRun(@Mocked OdeProperties mockOdeProperties, try { Exporter odeBsmExporter = new StompStringExporter( - mockOdeProperties, testTopic, mockSimpMessagingTemplate, - "odeTopic"); + testTopic, + mockSimpMessagingTemplate, "odeTopic", odeKafkaProperties.getBrokers()); odeBsmExporter.setConsumer(mockStringConsumer); odeBsmExporter.run(); diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/exporter/StompStringExporterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/exporter/StompStringExporterTest.java index ac892bd65..01f42197f 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/exporter/StompStringExporterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/exporter/StompStringExporterTest.java @@ -18,7 +18,7 @@ import mockit.*; import org.junit.jupiter.api.Test; import org.springframework.messaging.simp.SimpMessagingTemplate; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.wrapper.MessageConsumer; import us.dot.its.jpo.ode.wrapper.MessageProcessor; @@ -28,13 +28,15 @@ public class StompStringExporterTest { StompStringExporter testStompExporter; @Injectable - OdeProperties injectableOdeProperties; + OdeKafkaProperties injectableOdeKafkaProperties; @Injectable String stompTopic = "testTopic"; @Injectable SimpMessagingTemplate simpMessagingTemplate; @Injectable - String odeTopic; + String odeTopic = "testOdeTopic"; + @Injectable + String brokers = "localhost:9093"; @SuppressWarnings({ "rawtypes", "unchecked" }) @Test diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcherTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcherTest.java index 02bd8bfe5..0fd50ed53 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcherTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcherTest.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,81 +15,55 @@ ******************************************************************************/ package us.dot.its.jpo.ode.importer; -import java.io.IOException; -import java.nio.file.Path; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.TimeUnit; - import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import us.dot.its.jpo.ode.coder.stream.FileImporterProperties; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; + +import java.nio.file.Files; +import java.nio.file.Path; -import mockit.Capturing; -import mockit.Expectations; -import mockit.Injectable; -import mockit.Mocked; -import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher.ImporterFileType; - -public class ImporterDirectoryWatcherTest { - - @Tested - ImporterDirectoryWatcher testImporterDirectoryWatcher; - - @Injectable - OdeProperties injectableOdeProperties; - @Injectable - Path inbox; - @Injectable - Path failureDir; - @Injectable - Path backupDir; - @Injectable - ImporterFileType injectableImporterFileType = ImporterFileType.LOG_FILE; - @Injectable - Integer timePeriod = 5; - - @Capturing - OdeFileUtils capturingOdeFileUtils; - @Capturing - ImporterProcessor capturingImporterProcessor; - @Capturing - Executors capturingExecutors; - - @Mocked - ScheduledExecutorService mockScheduledExecutorService; - - // @BeforeEach - public void testConstructor() throws IOException { - new Expectations() { - { - OdeFileUtils.createDirectoryRecursively((Path) any); - times = 3; - - Executors.newScheduledThreadPool(1); - result = mockScheduledExecutorService; - } - }; - } - - @Test - public void testRun() throws InterruptedException, IOException { - new Expectations() { - { - OdeFileUtils.createDirectoryRecursively((Path) any); - times = 3; - - Executors.newScheduledThreadPool(1); - result = mockScheduledExecutorService; - - mockScheduledExecutorService.scheduleWithFixedDelay((Runnable) any, anyLong, anyLong, TimeUnit.SECONDS); - - mockScheduledExecutorService.awaitTermination(anyLong, TimeUnit.SECONDS); - } - }; - testImporterDirectoryWatcher = new ImporterDirectoryWatcher(injectableOdeProperties, backupDir, failureDir, backupDir, injectableImporterFileType, timePeriod); - - testImporterDirectoryWatcher.run(); - } +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = {OdeKafkaProperties.class, FileImporterProperties.class, JsonTopics.class, RawEncodedJsonTopics.class}) +class ImporterDirectoryWatcherTest { + + @Autowired + FileImporterProperties injectableFileImporterProperties; + @Autowired + OdeKafkaProperties odeKafkaProperties; + @Autowired + JsonTopics jsonTopics; + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + + @Test + void testConstructorCreatesThreeDirectories() { + + ImporterDirectoryWatcher testImporterDirectoryWatcher = new ImporterDirectoryWatcher(injectableFileImporterProperties, + odeKafkaProperties, + jsonTopics, + ImporterDirectoryWatcher.ImporterFileType.LOG_FILE, + rawEncodedJsonTopics); + + assertNotNull(testImporterDirectoryWatcher); + Path inbox = Path.of(injectableFileImporterProperties.getUploadLocationRoot(), injectableFileImporterProperties.getObuLogUploadLocation()); + assertTrue(Files.exists(inbox)); + Path backups = Path.of(injectableFileImporterProperties.getUploadLocationRoot(), injectableFileImporterProperties.getBackupDir()); + assertTrue(Files.exists(backups)); + Path failures = Path.of(injectableFileImporterProperties.getUploadLocationRoot(), injectableFileImporterProperties.getFailedDir()); + assertTrue(Files.exists(failures)); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcherTestOld.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcherTestOld.java deleted file mode 100644 index 32e43b921..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterDirectoryWatcherTestOld.java +++ /dev/null @@ -1,133 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.importer; - -import static org.junit.Assert.fail; -import static org.junit.jupiter.api.Assertions.assertTimeout; - -import java.io.IOException; -import java.nio.file.Path; -import java.nio.file.WatchEvent; -import java.nio.file.WatchEvent.Kind; -import java.time.Duration; -import java.nio.file.WatchKey; -import java.nio.file.WatchService; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.Timeout; - -import mockit.Capturing; -import mockit.Expectations; -import mockit.Injectable; -import mockit.Mocked; -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher.ImporterFileType; - -@Disabled -public class ImporterDirectoryWatcherTestOld { - - ImporterDirectoryWatcher testImporterDirectoryWatcher; - - @Injectable - OdeProperties injectableOdeProperties; - @Mocked - Path mockDir; - @Injectable - Path failureDir; - @Injectable - Path backupDir; - @Injectable - Integer timePeriod = 5; - - @Mocked - WatchKey mockWatchKey; - @Mocked - WatchService mockWatchService; - @Mocked - WatchEvent mockWatchEvent; - - @Capturing - OdeFileUtils capturingOdeFileUtils; - @Capturing - ImporterProcessor capturingImporterProcessor; - - @BeforeEach - public void createTestObject() { - try { - new Expectations() { - { - OdeFileUtils.createDirectoryRecursively((Path) any); - times = 3; - } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - testImporterDirectoryWatcher = new ImporterDirectoryWatcher(injectableOdeProperties, mockDir, backupDir, failureDir, ImporterFileType.LOG_FILE, timePeriod); - testImporterDirectoryWatcher.setWatching(false); - } - - @Test - public void testConstructorOdeUtilsException() { - try { - new Expectations() { - { - OdeFileUtils.createDirectoryRecursively((Path) any); - result = new IOException("acceptionIsKindofAWord"); - } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - new ImporterDirectoryWatcher(injectableOdeProperties, mockDir, backupDir, failureDir, ImporterFileType.LOG_FILE, timePeriod); - } - - @Test - public void runShouldCatchException() { - assertTimeout(Duration.ofMillis(4000), () -> { - try { - new Expectations() { - { - mockDir.register((WatchService) any, (Kind) any); - result = null; - } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - testImporterDirectoryWatcher.run(); - }); - } - - @Test - @Timeout(4) - public void shouldRunNoProblems() { - try { - new Expectations() { - { - mockDir.register((WatchService) any, (Kind) any); - result = mockWatchKey; - } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - testImporterDirectoryWatcher.run(); - } - -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterProcessorTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterProcessorTest.java index 9e8ff6317..27ccdc779 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterProcessorTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/importer/ImporterProcessorTest.java @@ -29,13 +29,10 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import mockit.Capturing; import mockit.Expectations; import mockit.Injectable; import mockit.Mocked; import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.FileAsn1CodecPublisher; import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher.ImporterFileType; public class ImporterProcessorTest { @@ -43,8 +40,6 @@ public class ImporterProcessorTest { @Tested ImporterProcessor testImporterProcessor; - @Injectable - OdeProperties injectableOdeProperties; @Injectable ImporterFileType injectableImporterDirType = ImporterFileType.LOG_FILE; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/ConfluentPropertiesTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/ConfluentPropertiesTest.java new file mode 100644 index 000000000..d791408f3 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/ConfluentPropertiesTest.java @@ -0,0 +1,27 @@ +package us.dot.its.jpo.ode.kafka; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Test; + +class ConfluentPropertiesTest { + + @Test + void buildConfluentProperties() { + ConfluentProperties confluentProperties = new ConfluentProperties(); + confluentProperties.setPassword("password123"); + confluentProperties.setUsername("username322"); + + Map expected = new HashMap<>(); + expected.put("ssl.endpoint.identification.algorithm", "https"); + expected.put("security.protocol", "SASL_SSL"); + expected.put("sasl.mechanism", "PLAIN"); + expected.put("sasl.jaas.config", + "org.apache.kafka.common.security.plain.PlainLoginModule " + + "required username=\"username322\" password=\"password123\";"); + + assertEquals(expected, confluentProperties.buildConfluentProperties()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java new file mode 100644 index 000000000..533a490b2 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/KafkaProducerConfigTest.java @@ -0,0 +1,172 @@ +package us.dot.its.jpo.ode.kafka; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertInstanceOf; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import com.fasterxml.jackson.dataformat.xml.XmlMapper; +import java.util.Set; +import java.util.UUID; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.TestConfiguration; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Import; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.DefaultKafkaProducerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.core.ProducerFactory; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties.Producer; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.model.OdeObject; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; + +@Slf4j +@ExtendWith(SpringExtension.class) +@DirtiesContext +@EnableConfigurationProperties({KafkaProperties.class}) +@Import({KafkaProducerConfigTest.KafkaProducerConfigTestConfig.class, SerializationConfig.class}) +class KafkaProducerConfigTest { + + @Autowired + @Qualifier("testKafkaProducerConfig") + KafkaProducerConfig kafkaProducerConfig; + @Autowired + @Qualifier("testOdeKafkaProperties") + OdeKafkaProperties odeKafkaProperties; + @Autowired + XmlMapper xmlMapper; + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void odeDataProducerFactory_shouldReturnNonNull() { + ProducerFactory producerFactory = + kafkaProducerConfig.odeDataProducerFactory(xmlMapper); + assertNotNull(producerFactory); + } + + @Test + void odeDataProducerFactory_shouldReturnDefaultKafkaProducerFactory() { + ProducerFactory producerFactory = + kafkaProducerConfig.odeDataProducerFactory(xmlMapper); + assertNotNull(producerFactory); + assertInstanceOf(DefaultKafkaProducerFactory.class, producerFactory); + } + + @Test + void kafkaTemplateInterceptorPreventsSendingToDisabledTopics() { + EmbeddedKafkaHolder.addTopics(odeKafkaProperties.getDisabledTopics().toArray(new String[0])); + var consumerProps = + KafkaTestUtils.consumerProps("interceptor-disabled", + "false", + embeddedKafka); + var cf = new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var consumer = cf.createConsumer(); + embeddedKafka.consumeFromEmbeddedTopics(consumer, + odeKafkaProperties.getDisabledTopics().toArray(new String[0])); + KafkaTemplate stringKafkaTemplate = kafkaProducerConfig.kafkaTemplate( + kafkaProducerConfig.producerFactory()); + // Attempting to send to a disabled topic + for (String topic : odeKafkaProperties.getDisabledTopics()) { + stringKafkaTemplate.send(topic, "key", "value"); + + var records = KafkaTestUtils.getEndOffsets(consumer, topic, 0); + // Assert that the message we attempted to send to the disabled topic was intercepted + // and not sent + assertTrue(records + .entrySet() + .stream() + .allMatch(e -> e.getValue() == 0L) + ); + } + } + + @Test + void kafkaTemplateInterceptorAllowsSendingToTopicsNotInDisabledSet() { + String enabledTopic = "topic.enabled" + this.getClass().getSimpleName(); + EmbeddedKafkaHolder.addTopics(enabledTopic); + + var consumerProps = + KafkaTestUtils.consumerProps("interceptor-enabled", "false", embeddedKafka); + var cf = new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var consumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(consumer, enabledTopic); + + // Attempting to send to a topic not in the disabledTopics set with the string template + KafkaTemplate stringKafkaTemplate = kafkaProducerConfig.kafkaTemplate( + kafkaProducerConfig.producerFactory()); + stringKafkaTemplate.send(enabledTopic, "key", "value"); + + var records = KafkaTestUtils.getRecords(consumer); + var produced = records.records(enabledTopic).iterator().next(); + assertEquals("key", produced.key()); + assertEquals("value", produced.value()); + } + + @Test + void kafkaTemplateInterceptorCanSendAfterAttemptToSendToDisabledTopic() { + String enabledTopic = "topic.enabled" + this.getClass().getSimpleName(); + EmbeddedKafkaHolder.addTopics(enabledTopic); + + var consumerProps = + KafkaTestUtils.consumerProps("send-after", "false", embeddedKafka); + var cf = new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var consumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(consumer, enabledTopic); + + KafkaTemplate stringKafkaTemplate = kafkaProducerConfig.kafkaTemplate( + kafkaProducerConfig.producerFactory()); + var blockedTopic = odeKafkaProperties.getDisabledTopics().iterator().next(); + stringKafkaTemplate.send(blockedTopic, "blocked", "not sent"); + stringKafkaTemplate.send(enabledTopic, "key", "value"); + + var records = KafkaTestUtils.getRecords(consumer); + assertFalse(records.records(blockedTopic).iterator().hasNext()); + + var produced = records.records(enabledTopic).iterator().next(); + assertEquals("key", produced.key()); + assertEquals("value", produced.value()); + } + + @TestConfiguration + static class KafkaProducerConfigTestConfig { + + @Bean + public OdeKafkaProperties testOdeKafkaProperties() { + OdeKafkaProperties odeKafkaProperties = new OdeKafkaProperties(); + odeKafkaProperties.setBrokers("localhost:4242"); + odeKafkaProperties.setProducer(new Producer()); + var uniqueSuffix = UUID.randomUUID().toString().substring(0, 4); + odeKafkaProperties.setDisabledTopics(Set.of( + "topic.OdeBsmRxPojo" + uniqueSuffix, + "topic.OdeBsmTxPojo" + uniqueSuffix, + "topic.OdeBsmDuringEventPojo" + uniqueSuffix, + "topic.OdeTimBroadcastPojo" + uniqueSuffix + )); + + return odeKafkaProperties; + } + + @Bean + public KafkaProducerConfig testKafkaProducerConfig(KafkaProperties kafkaProperties, OdeKafkaProperties testOdeKafkaProperties) { + return new KafkaProducerConfig(kafkaProperties, testOdeKafkaProperties); + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/OdeKafkaPropertiesTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/OdeKafkaPropertiesTest.java new file mode 100644 index 000000000..4cb641334 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/OdeKafkaPropertiesTest.java @@ -0,0 +1,87 @@ +package us.dot.its.jpo.ode.kafka; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = OdeKafkaProperties.class) +class OdeKafkaPropertiesTest { + + @Autowired + private OdeKafkaProperties odeKafkaProperties; + + @Test + void testGetBrokers() { + assertEquals("localhost:4242", odeKafkaProperties.getBrokers()); + } + + @Test + void testGetKafkaTopicsDisabled() { + Set kafkaTopicsDisabled = odeKafkaProperties.getDisabledTopics(); + assertEquals(4, kafkaTopicsDisabled.size()); + assertTrue(kafkaTopicsDisabled.contains("topic.OdeBsmRxPojo")); + assertTrue(kafkaTopicsDisabled.contains("topic.OdeBsmTxPojo")); + assertTrue(kafkaTopicsDisabled.contains("topic.OdeBsmDuringEventPojo")); + assertTrue(kafkaTopicsDisabled.contains("topic.OdeTimBroadcastPojo")); + } + + @Test + void testGetProducerAcks() { + assertEquals("0", odeKafkaProperties.getProducer().getAcks()); + } + + @Test + void testGetProducerBatchSize() { + assertEquals( 1638, odeKafkaProperties.getProducer().getBatchSize()); + } + + @Test + void testGetProducerBufferMemory() { + assertEquals(33554433, odeKafkaProperties.getProducer().getBufferMemory()); + } + + @Test + void testGetProducerKeySerializer() { + assertEquals("org.apache.kafka.common.serialization.StringSerializer", odeKafkaProperties.getProducer().getKeySerializer()); + } + + @Test + void testGetProducerLingerMs() { + assertEquals(2, odeKafkaProperties.getProducer().getLingerMs()); + } + + @Test + void testGetProducerPartitionerClass() { + assertEquals("org.apache.kafka.clients.producer.internals.DefaultPartitioner", odeKafkaProperties.getProducer().getPartitionerClass()); + } + + @Test + void testGetProducerRetries() { + assertEquals(1, odeKafkaProperties.getProducer().getRetries()); + } + + @Test + void testGetProducerType() { + assertEquals("async", odeKafkaProperties.getProducer().getType()); + } + + @Test + void testGetProducerValueSerializer() { + assertEquals("org.apache.kafka.common.serialization.ByteArraySerializer", odeKafkaProperties.getProducer().getValueSerializer()); + } + + @Test + void testGetProducerCompressionType() { + assertEquals("zstd", odeKafkaProperties.getProducer().getCompressionType()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/OdeKafkaPropertiesValidatorTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/OdeKafkaPropertiesValidatorTest.java new file mode 100644 index 000000000..1e4721b90 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/OdeKafkaPropertiesValidatorTest.java @@ -0,0 +1,92 @@ +package us.dot.its.jpo.ode.kafka; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class OdeKafkaPropertiesValidatorTest { + + @Test + void supports() { + OdeKafkaPropertiesValidator validator = new OdeKafkaPropertiesValidator(); + assertTrue(validator.supports(OdeKafkaProperties.class)); + assertFalse(validator.supports(Object.class)); + } + + @Test + void validate() { + OdeKafkaProperties properties = new OdeKafkaProperties(); + properties.setBrokers("localhost:9092"); + OdeKafkaProperties.Producer producer = new OdeKafkaProperties.Producer(); + producer.setAcks("all"); + properties.setProducer(producer); + + OdeKafkaPropertiesValidator validator = new OdeKafkaPropertiesValidator(); + org.springframework.validation.BeanPropertyBindingResult errors = new org.springframework.validation.BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertFalse(errors.hasErrors()); + } + + @Test + void errorThrownForInvalidAcks() { + OdeKafkaProperties properties = new OdeKafkaProperties(); + properties.setBrokers("localhost:9092"); + OdeKafkaProperties.Producer producer = new OdeKafkaProperties.Producer(); + producer.setAcks("none"); + properties.setProducer(producer); + + OdeKafkaPropertiesValidator validator = new OdeKafkaPropertiesValidator(); + org.springframework.validation.BeanPropertyBindingResult errors = new org.springframework.validation.BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertTrue(errors.hasErrors()); + } + + @Test + void errorThrownForInvalidBrokers() { + OdeKafkaProperties properties = new OdeKafkaProperties(); + properties.setBrokers(""); + OdeKafkaProperties.Producer producer = new OdeKafkaProperties.Producer(); + producer.setAcks("all"); + properties.setProducer(producer); + + OdeKafkaPropertiesValidator validator = new OdeKafkaPropertiesValidator(); + org.springframework.validation.BeanPropertyBindingResult errors = new org.springframework.validation.BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertTrue(errors.hasErrors()); + } + + @Test + void errorThrownForInvalidKafkaType() { + OdeKafkaProperties properties = new OdeKafkaProperties(); + OdeKafkaProperties.Producer producer = new OdeKafkaProperties.Producer(); + properties.setProducer(producer); + properties.setKafkaType("REDPANDA"); + + OdeKafkaPropertiesValidator validator = new OdeKafkaPropertiesValidator(); + org.springframework.validation.BeanPropertyBindingResult errors = new org.springframework.validation.BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertTrue(errors.hasErrors()); + assertNotNull(errors.getFieldError("kafkaType")); + } + + @Test + void errorThrownForInvalidConfluentProperties() { + OdeKafkaProperties properties = new OdeKafkaProperties(); + OdeKafkaProperties.Producer producer = new OdeKafkaProperties.Producer(); + properties.setProducer(producer); + properties.setKafkaType("CONFLUENT"); + ConfluentProperties confluentProperties = new ConfluentProperties(); + properties.setConfluent(confluentProperties); + + OdeKafkaPropertiesValidator validator = new OdeKafkaPropertiesValidator(); + org.springframework.validation.BeanPropertyBindingResult errors = new org.springframework.validation.BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + assertTrue(errors.hasErrors()); + assertNotNull(errors.getFieldError("confluent.password")); + assertNotNull(errors.getFieldError("confluent.username")); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java new file mode 100644 index 000000000..1dee240c8 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterApprovalTest.java @@ -0,0 +1,118 @@ +package us.dot.its.jpo.ode.kafka.listeners; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; +import java.util.List; +import java.util.Map; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.Consumer; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.listeners.asn1.Asn1DecodedDataRouter; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.topics.PojoTopics; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.model.OdeMapData; +import us.dot.its.jpo.ode.test.utilities.ApprovalTestCase; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; + +@Slf4j +@SpringBootTest( + classes = { + Asn1DecodedDataRouter.class, + KafkaProperties.class, + KafkaProducerConfig.class, + KafkaConsumerConfig.class, + SerializationConfig.class + }, + properties = { + "ode.kafka.topics.asn1.decoder-output=topic.Asn1DecoderOutputRouterApprovalTest", + "ode.kafka.topics.pojo.tx-map=topic.OdeMapTxPojoRouterApprovalTest", + "ode.kafka.topics.json.map=topic.OdeMapJsonRouterApprovalTest" + }) +@EnableConfigurationProperties +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class, + PojoTopics.class, JsonTopics.class +}) +@DirtiesContext +class Asn1DecodedDataRouterApprovalTest { + + @Value("${ode.kafka.topics.asn1.decoder-output}") + private String decoderOutputTopic; + + @Value("${ode.kafka.topics.pojo.tx-map}") + private String txMapTopic; + + @Value("${ode.kafka.topics.json.map}") + private String jsonMapTopic; + + @Autowired + KafkaTemplate producer; + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void testAsn1DecodedDataRouter_MAPDataFlow() throws IOException { + String[] topics = {decoderOutputTopic, txMapTopic, jsonMapTopic}; + EmbeddedKafkaHolder.addTopics(topics); + + @SuppressWarnings("checkstyle:linelength") + List testCases = ApprovalTestCase.deserializeTestCases( + "src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapTxPojo.json"); + + Map consumerProps = + KafkaTestUtils.consumerProps("testT", "false", embeddedKafka); + DefaultKafkaConsumerFactory cf = + new DefaultKafkaConsumerFactory<>(consumerProps); + + Consumer consumer = cf.createConsumer(); + embeddedKafka.consumeFromEmbeddedTopics(consumer, txMapTopic, jsonMapTopic); + + for (ApprovalTestCase testCase : testCases) { + producer.send(decoderOutputTopic, testCase.getInput()); + + String received = KafkaTestUtils.getSingleRecord(consumer, txMapTopic).value(); + ObjectMapper mapper = new ObjectMapper(); + OdeMapData receivedMapData = mapper.readValue(received, OdeMapData.class); + OdeMapData expectedMapData = mapper.readValue(testCase.getExpected(), OdeMapData.class); + assertEquals(expectedMapData.toJson(), receivedMapData.toJson(), + "Failed test case: " + testCase.getDescription()); + // discard the JSON output + KafkaTestUtils.getSingleRecord(consumer, jsonMapTopic); + } + + @SuppressWarnings("checkstyle:linelength") + List jsonTestCases = ApprovalTestCase.deserializeTestCases( + "src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapJson.json"); + + for (ApprovalTestCase testCase : jsonTestCases) { + producer.send(decoderOutputTopic, testCase.getInput()); + + String received = KafkaTestUtils.getSingleRecord(consumer, jsonMapTopic).value(); + ObjectMapper mapper = new ObjectMapper(); + OdeMapData receivedMapData = mapper.readValue(received, OdeMapData.class); + OdeMapData expectedMapData = mapper.readValue(testCase.getExpected(), OdeMapData.class); + assertEquals(expectedMapData.toJson(), receivedMapData.toJson(), + "Failed test case: " + testCase.getDescription()); + } + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java new file mode 100644 index 000000000..8a5681e2c --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/Asn1DecodedDataRouterTest.java @@ -0,0 +1,420 @@ +package us.dot.its.jpo.ode.kafka.listeners; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.UUID; +import java.util.concurrent.atomic.AtomicReference; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.assertj.core.util.Arrays; +import org.awaitility.Awaitility; +import org.awaitility.Duration; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.listeners.asn1.Asn1DecodedDataRouter; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.topics.PojoTopics; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.model.OdeBsmData; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import us.dot.its.jpo.ode.wrapper.serdes.MessagingDeserializer; + +@Slf4j +@SpringBootTest( + classes = { + KafkaProperties.class, + PojoTopics.class, + JsonTopics.class, + Asn1CoderTopics.class, + KafkaConsumerConfig.class, + KafkaProducerConfig.class, + RawEncodedJsonTopics.class, + Asn1CoderTopics.class, + OdeKafkaProperties.class, + Asn1DecodedDataRouter.class, + SerializationConfig.class + }, + properties = {"ode.kafka.disabled-topics="} +) +@EnableConfigurationProperties +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + PojoTopics.class, KafkaProperties.class +}) +@DirtiesContext +class Asn1DecodedDataRouterTest { + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + @Autowired + KafkaTemplate kafkaStringTemplate; + @Autowired + PojoTopics pojoTopics; + @Autowired + JsonTopics jsonTopics; + @Autowired + Asn1CoderTopics asn1CoderTopics; + + ObjectMapper mapper = new ObjectMapper(); + + @Test + void testAsn1DecodedDataRouterBSMDataFlow() throws IOException { + String[] topics = Arrays.array( + pojoTopics.getBsm(), + pojoTopics.getBsmDuringEvent(), + pojoTopics.getRxBsm(), + pojoTopics.getTxBsm() + ); + EmbeddedKafkaHolder.addTopics(topics); + + var consumerProps = KafkaTestUtils.consumerProps( + "bsmDecoderTest", "false", embeddedKafka); + var consumerFactory = new DefaultKafkaConsumerFactory(consumerProps); + consumerFactory.setKeyDeserializer(new StringDeserializer()); + consumerFactory.setValueDeserializer(new MessagingDeserializer<>()); + var testConsumer = consumerFactory.createConsumer(); + embeddedKafka.consumeFromEmbeddedTopics(testConsumer, topics); + + String decodedBsmXml = + loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-bsm.xml"); + OdeBsmData expectedBsm = mapper.readValue( + new File("src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-bsm.json"), + OdeBsmData.class); + for (String recordType : new String[] {"bsmLogDuringEvent", "rxMsg", "bsmTx"}) { + String topic; + switch (recordType) { + case "bsmLogDuringEvent" -> topic = pojoTopics.getBsmDuringEvent(); + case "rxMsg" -> topic = pojoTopics.getRxBsm(); + case "bsmTx" -> topic = pojoTopics.getTxBsm(); + default -> throw new IllegalStateException("Unexpected value: " + recordType); + } + + String inputData = replaceRecordType(decodedBsmXml, "bsmTx", recordType); + var uniqueKey = UUID.randomUUID().toString(); + kafkaStringTemplate.send(asn1CoderTopics.getDecoderOutput(), uniqueKey, inputData); + + AtomicReference> consumedSpecific = + new AtomicReference<>(); + AtomicReference> consumedBsm = new AtomicReference<>(); + Awaitility.await().until(() -> { + var records = KafkaTestUtils.getRecords(testConsumer); + for (ConsumerRecord cr : records.records(topic)) { + if (cr.key().equals(uniqueKey)) { + consumedSpecific.set(cr); + break; + } + } + for (ConsumerRecord cr : records.records(pojoTopics.getBsm())) { + if (cr.key().equals(uniqueKey)) { + consumedBsm.set(cr); + break; + } + } + return consumedSpecific.get() != null && consumedBsm.get() != null; + }); + assertEquals(expectedBsm, consumedSpecific.get().value()); + assertEquals(expectedBsm, consumedBsm.get().value()); + } + } + + @Test + void testAsn1DecodedDataRouterTIMDataFlow() { + Awaitility.setDefaultTimeout(Duration.FOREVER); + String[] topics = Arrays.array( + jsonTopics.getDnMessage(), + jsonTopics.getRxTim(), + jsonTopics.getTim() + ); + EmbeddedKafkaHolder.addTopics(topics); + + String baseTestData = + loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-tim.xml"); + + var consumerProps = KafkaTestUtils.consumerProps( + "timDecoderTest", "false", embeddedKafka); + var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var testConsumer = consumerFactory.createConsumer(); + + embeddedKafka.consumeFromEmbeddedTopics(testConsumer, topics); + + String baseExpectedTim = + loadFromResource("us/dot/its/jpo/ode/services/asn1/expected-tim.json"); + for (String recordType : new String[] {"dnMsg", "rxMsg"}) { + String topic; + switch (recordType) { + case "rxMsg" -> topic = jsonTopics.getRxTim(); + case "dnMsg" -> topic = jsonTopics.getDnMessage(); + default -> throw new IllegalStateException("Unexpected value: " + recordType); + } + + String inputData = replaceRecordType(baseTestData, "timMsg", recordType); + var uniqueKey = UUID.randomUUID().toString(); + kafkaStringTemplate.send(asn1CoderTopics.getDecoderOutput(), uniqueKey, inputData); + + AtomicReference> consumedSpecific = new AtomicReference<>(); + AtomicReference> consumedTim = new AtomicReference<>(); + Awaitility.await().until(() -> { + var records = KafkaTestUtils.getRecords(testConsumer); + for (ConsumerRecord cr : records.records(topic)) { + if (cr.key().equals(uniqueKey)) { + consumedSpecific.set(cr); + break; + } + } + for (ConsumerRecord cr : records.records(jsonTopics.getTim())) { + if (cr.key().equals(uniqueKey)) { + consumedTim.set(cr); + break; + } + } + return consumedSpecific.get() != null && consumedTim.get() != null; + }); + var expectedTim = replaceJSONRecordType(baseExpectedTim, "dnMsg", recordType); + assertEquals(expectedTim, consumedSpecific.get().value()); + assertEquals(expectedTim, consumedTim.get().value()); + + } + } + + @Test + void testAsn1DecodedDataRouter_SPaTDataFlow() { + String[] topics = Arrays.array( + jsonTopics.getSpat(), + jsonTopics.getRxSpat(), + jsonTopics.getDnMessage(), + pojoTopics.getTxSpat() + ); + EmbeddedKafkaHolder.addTopics(topics); + + String baseTestData = + loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-spat.xml"); + + var consumerProps = KafkaTestUtils.consumerProps( + "spatDecoderTest", "false", embeddedKafka); + var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var testConsumer = consumerFactory.createConsumer(); + embeddedKafka.consumeFromEmbeddedTopics(testConsumer, topics); + + String baseExpectedSpat = + loadFromResource("us/dot/its/jpo/ode/services/asn1/expected-spat.json"); + for (String recordType : new String[] {"spatTx", "rxMsg", "dnMsg"}) { + String topic; + switch (recordType) { + case "rxMsg" -> topic = jsonTopics.getRxSpat(); + case "dnMsg" -> topic = jsonTopics.getDnMessage(); + case "spatTx" -> topic = pojoTopics.getTxSpat(); + default -> throw new IllegalStateException("Unexpected value: " + recordType); + } + + String inputData = replaceRecordType(baseTestData, "spatTx", recordType); + var uniqueKey = UUID.randomUUID().toString(); + kafkaStringTemplate.send(asn1CoderTopics.getDecoderOutput(), uniqueKey, inputData); + + var consumedSpecific = KafkaTestUtils.getSingleRecord(testConsumer, topic); + var consumedSpat = KafkaTestUtils.getSingleRecord(testConsumer, jsonTopics.getSpat()); + + var expectedSpat = replaceJSONRecordType(baseExpectedSpat, "spatTx", recordType); + assertEquals(expectedSpat, consumedSpat.value()); + assertEquals(expectedSpat, consumedSpecific.value()); + } + } + + @Test + void testAsn1DecodedDataRouter_SSMDataFlow() { + String[] topics = Arrays.array( + jsonTopics.getSsm(), + pojoTopics.getSsm() + ); + EmbeddedKafkaHolder.addTopics(topics); + + String baseTestData = + loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-ssm.xml"); + + var consumerProps = KafkaTestUtils.consumerProps( + "ssmDecoderTest", "false", embeddedKafka); + var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var testConsumer = consumerFactory.createConsumer(); + embeddedKafka.consumeFromEmbeddedTopics(testConsumer, topics); + + String baseExpectedSsm = + loadFromResource("us/dot/its/jpo/ode/services/asn1/expected-ssm.json"); + for (String recordType : new String[] {"ssmTx", "unsupported"}) { + + String inputData = replaceRecordType(baseTestData, "ssmTx", recordType); + var uniqueKey = UUID.randomUUID().toString(); + kafkaStringTemplate.send(asn1CoderTopics.getDecoderOutput(), uniqueKey, inputData); + + var expectedSsm = replaceJSONRecordType(baseExpectedSsm, "ssmTx", recordType); + + var consumedSsm = KafkaTestUtils.getSingleRecord(testConsumer, jsonTopics.getSsm()); + assertEquals(expectedSsm, consumedSsm.value()); + + if (recordType.equals("ssmTx")) { + var consumedSpecific = KafkaTestUtils.getSingleRecord(testConsumer, pojoTopics.getSsm()); + assertEquals(expectedSsm, consumedSpecific.value()); + } + } + } + + @Test + void testAsn1DecodedDataRouter_SRMDataFlow() { + String[] topics = Arrays.array( + jsonTopics.getSrm(), + pojoTopics.getTxSrm() + ); + EmbeddedKafkaHolder.addTopics(topics); + + String baseTestData = + loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-srm.xml"); + + var consumerProps = KafkaTestUtils.consumerProps( + "srmDecoderTest", "false", embeddedKafka); + var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var testConsumer = consumerFactory.createConsumer(); + embeddedKafka.consumeFromEmbeddedTopics(testConsumer, topics); + + String baseExpectedSrm = + loadFromResource("us/dot/its/jpo/ode/services/asn1/expected-srm.json"); + for (String recordType : new String[] {"srmTx", "unsupported"}) { + + String inputData = replaceRecordType(baseTestData, "srmTx", recordType); + var uniqueKey = UUID.randomUUID().toString(); + kafkaStringTemplate.send(asn1CoderTopics.getDecoderOutput(), uniqueKey, inputData); + + var expectedSrm = replaceJSONRecordType(baseExpectedSrm, "srmTx", recordType); + + var consumedSrm = KafkaTestUtils.getSingleRecord(testConsumer, jsonTopics.getSrm()); + assertEquals(expectedSrm, consumedSrm.value()); + + if (recordType.equals("srmTx")) { + var consumedSpecific = KafkaTestUtils.getSingleRecord(testConsumer, pojoTopics.getTxSrm()); + assertEquals(expectedSrm, consumedSpecific.value()); + } + } + } + + @Test + void testAsn1DecodedDataRouter_PSMDataFlow() { + String[] topics = Arrays.array( + jsonTopics.getPsm(), + pojoTopics.getTxPsm() + ); + EmbeddedKafkaHolder.addTopics(topics); + + String baseTestData = + loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-psm.xml"); + + var consumerProps = KafkaTestUtils.consumerProps( + "psmDecoderTest", "false", embeddedKafka); + var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var testConsumer = consumerFactory.createConsumer(); + embeddedKafka.consumeFromEmbeddedTopics(testConsumer, topics); + + String baseExpectedPsm = + loadFromResource("us/dot/its/jpo/ode/services/asn1/expected-psm.json"); + for (String recordType : new String[] {"psmTx", "unsupported"}) { + + String inputData = replaceRecordType(baseTestData, "psmTx", recordType); + var uniqueKey = UUID.randomUUID().toString(); + kafkaStringTemplate.send(asn1CoderTopics.getDecoderOutput(), uniqueKey, inputData); + + var expectedPsm = replaceJSONRecordType(baseExpectedPsm, "psmTx", recordType); + + var consumedPsm = KafkaTestUtils.getSingleRecord(testConsumer, jsonTopics.getPsm()); + assertEquals(expectedPsm, consumedPsm.value()); + + if (recordType.equals("psmTx")) { + var consumedSpecific = KafkaTestUtils.getSingleRecord(testConsumer, pojoTopics.getTxPsm()); + assertEquals(expectedPsm, consumedSpecific.value()); + } + } + } + + @Test + void testAsn1DecodedDataRouter_MAPDataFlow() { + String[] topics = Arrays.array( + jsonTopics.getMap(), + pojoTopics.getTxMap() + ); + EmbeddedKafkaHolder.addTopics(topics); + + String baseTestData = + loadFromResource("us/dot/its/jpo/ode/services/asn1/decoder-output-map.xml"); + + var consumerProps = KafkaTestUtils.consumerProps( + "mapDecoderTest", "false", embeddedKafka); + var consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var testConsumer = consumerFactory.createConsumer(); + embeddedKafka.consumeFromEmbeddedTopics(testConsumer, topics); + + String baseExpectedMap = + loadFromResource("us/dot/its/jpo/ode/services/asn1/expected-map.json"); + for (String recordType : new String[] {"mapTx", "unsupported"}) { + + String inputData = replaceRecordType(baseTestData, "mapTx", recordType); + var uniqueKey = UUID.randomUUID().toString(); + kafkaStringTemplate.send(asn1CoderTopics.getDecoderOutput(), uniqueKey, inputData); + + var expectedMap = replaceJSONRecordType(baseExpectedMap, "mapTx", recordType); + + var consumedMap = KafkaTestUtils.getSingleRecord(testConsumer, jsonTopics.getMap()); + assertEquals(expectedMap, consumedMap.value()); + + if (recordType.equals("mapTx")) { + var consumedSpecific = KafkaTestUtils.getSingleRecord(testConsumer, pojoTopics.getTxMap()); + assertEquals(expectedMap, consumedSpecific.value()); + } + } + } + + private String loadFromResource(String resourcePath) { + String baseTestData; + try (InputStream inputStream = getClass().getClassLoader() + .getResourceAsStream(resourcePath)) { + if (inputStream == null) { + throw new FileNotFoundException("Resource not found: " + resourcePath); + } + baseTestData = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + } catch (IOException e) { + throw new RuntimeException("Failed to load test data", e); + } + return baseTestData; + } + + private String replaceRecordType(String testData, String curRecordType, String recordType) { + return testData.replace("" + curRecordType + "", + "" + recordType + ""); + } + + private String replaceJSONRecordType(String testData, String curRecordType, String recordType) { + return testData.replace("\"recordType\":\"" + curRecordType + "\"", + "\"recordType\":\"" + recordType + "\""); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java new file mode 100644 index 000000000..eacedabc3 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedBSMJsonRouterTest.java @@ -0,0 +1,91 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; + +@SpringBootTest( + classes = { + KafkaProducerConfig.class, + KafkaConsumerConfig.class, + RawEncodedBSMJsonRouter.class, + RawEncodedJsonService.class, + SerializationConfig.class + }, + properties = { + "ode.kafka.topics.raw-encoded-json.bsm=topic.Asn1DecoderTestBSMJSON", + "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderBSMInput" + }) +@EnableConfigurationProperties +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class RawEncodedBSMJsonRouterTest { + + @Value(value = "${ode.kafka.topics.raw-encoded-json.bsm}") + private String rawEncodedBsmJson; + + @Value(value = "${ode.kafka.topics.asn1.decoder-input}") + private String asn1DecoderInput; + + @Autowired + KafkaTemplate kafkaTemplate; + + @Test + void testListen() throws JSONException, IOException { + var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + EmbeddedKafkaHolder.addTopics(asn1DecoderInput, rawEncodedBsmJson); + + Map consumerProps = + KafkaTestUtils.consumerProps("Asn1DecodeBSMJSONTestConsumer", "false", embeddedKafka); + var cf = + new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + Consumer testConsumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1DecoderInput); + + var classLoader = getClass().getClassLoader(); + InputStream inputStream = classLoader + .getResourceAsStream( + "us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-bsm.json"); + assert inputStream != null; + var bsmJson = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + kafkaTemplate.send(rawEncodedBsmJson, bsmJson); + + inputStream = classLoader + .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-bsm.xml"); + assert inputStream != null; + var expectedBsm = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + + var produced = + KafkaTestUtils.getSingleRecord(testConsumer, asn1DecoderInput); + var odeBsmData = produced.value(); + assertEquals(expectedBsm, odeBsmData); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java new file mode 100644 index 000000000..1fb2a29fe --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedMAPJsonRouterTest.java @@ -0,0 +1,91 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static us.dot.its.jpo.ode.test.utilities.ApprovalTestCase.deserializeTestCases; + +import java.io.IOException; +import java.util.List; +import java.util.Map; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.ApprovalTestCase; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; + +@Slf4j +@SpringBootTest( + classes = { + KafkaProducerConfig.class, + KafkaConsumerConfig.class, + RawEncodedMAPJsonRouter.class, + RawEncodedJsonService.class, + SerializationConfig.class + }, + properties = { + "ode.kafka.topics.raw-encoded-json.map=topic.Asn1DecoderTestMAPJSON", + "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderMAPInput" + }) +@EnableConfigurationProperties +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class RawEncodedMAPJsonRouterTest { + + @Value(value = "${ode.kafka.topics.raw-encoded-json.map}") + private String rawEncodedMapJson; + + @Value(value = "${ode.kafka.topics.asn1.decoder-input}") + private String asn1DecoderInput; + @Autowired + KafkaTemplate producer; + + private static final EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void testProcess_ApprovalTest() throws IOException { + String[] topics = {rawEncodedMapJson, asn1DecoderInput}; + EmbeddedKafkaHolder.addTopics(topics); + + String path = + "src/test/resources/us.dot.its.jpo.ode.udp.map/JSONEncodedMAP_to_Asn1DecoderInput_Validation.json"; + List approvalTestCases = deserializeTestCases(path); + + Map consumerProps = + KafkaTestUtils.consumerProps("Asn1DecodeMapJSONTestConsumer", "false", embeddedKafka); + var cf = + new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + Consumer testConsumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1DecoderInput); + + for (ApprovalTestCase approvalTestCase : approvalTestCases) { + // produce the test case input to the topic for consumption by the asn1RawMAPJSONConsumer + producer.send(rawEncodedMapJson, approvalTestCase.getInput()); + + var actualRecord = + KafkaTestUtils.getSingleRecord(testConsumer, asn1DecoderInput); + assertEquals(approvalTestCase.getExpected(), actualRecord.value(), + approvalTestCase.getDescription()); + } + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java new file mode 100644 index 000000000..f10f4604e --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedPSMJsonRouterTest.java @@ -0,0 +1,87 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; + +@SpringBootTest( + classes = { + KafkaProducerConfig.class, + KafkaConsumerConfig.class, + KafkaProperties.class, + RawEncodedPSMJsonRouter.class, + RawEncodedJsonService.class, + SerializationConfig.class + }, + properties = { + "ode.kafka.topics.raw-encoded-json.psm=topic.Asn1DecoderTestPSMJSON", + "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderPSMInput" + }) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = { + OdeKafkaProperties.class, + Asn1CoderTopics.class, + RawEncodedJsonTopics.class}) +class RawEncodedPSMJsonRouterTest { + + @Autowired + Asn1CoderTopics asn1CoderTopics; + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + @Autowired + private KafkaTemplate kafkaTemplate; + + @Test + void testListen() throws JSONException, IOException { + var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getPsm()); + + Map consumerProps = + KafkaTestUtils.consumerProps("RawEncodedPSMJsonRouterTest", "false", embeddedKafka); + var cf = + new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + var testConsumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + + var classLoader = getClass().getClassLoader(); + InputStream inputStream = classLoader + .getResourceAsStream( + "us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-psm.json"); + assert inputStream != null; + var psmJson = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + kafkaTemplate.send(rawEncodedJsonTopics.getPsm(), psmJson); + + inputStream = classLoader + .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-psm.xml"); + assert inputStream != null; + var expectedPsm = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + + var produced = + KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); + var odePsmData = produced.value(); + assertEquals(expectedPsm, odePsmData); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java new file mode 100644 index 000000000..fcb78a9f1 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSPATJsonRouterTest.java @@ -0,0 +1,89 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; + +@SpringBootTest( + classes = { + KafkaProducerConfig.class, + RawEncodedSPATJsonRouter.class, + RawEncodedJsonService.class, + KafkaConsumerConfig.class, + SerializationConfig.class + }, + properties = { + "ode.kafka.topics.raw-encoded-json.spat=topic.Asn1DecoderTestSPATJSON", + "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderSPATInput" + }) +@EnableConfigurationProperties +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class, Asn1CoderTopics.class +}) +@DirtiesContext +class RawEncodedSPATJsonRouterTest { + + @Autowired + Asn1CoderTopics asn1CoderTopics; + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + @Autowired + KafkaTemplate kafkaTemplate; + + @Test + void testListen() throws JSONException, IOException { + var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), + rawEncodedJsonTopics.getSpat()); + + Map consumerProps = + KafkaTestUtils.consumerProps("Asn1DecodeSPATJSONTestConsumer", "false", embeddedKafka); + var cf = + new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + Consumer testConsumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + + var classLoader = getClass().getClassLoader(); + InputStream inputStream = classLoader + .getResourceAsStream( + "us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-spat.json"); + assert inputStream != null; + var spatJson = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + kafkaTemplate.send(rawEncodedJsonTopics.getSpat(), spatJson); + + var consumedSpat = + KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); + + inputStream = classLoader + .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-spat.xml"); + assert inputStream != null; + var expectedSpat = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + assertEquals(expectedSpat, consumedSpat.value()); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java new file mode 100644 index 000000000..265d25c24 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSRMJsonRouterTest.java @@ -0,0 +1,87 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; + +@SpringBootTest( + classes = { + KafkaProducerConfig.class, + KafkaConsumerConfig.class, + RawEncodedSRMJsonRouter.class, + RawEncodedJsonService.class, + SerializationConfig.class + }, + properties = { + "ode.kafka.topics.raw-encoded-json.srm=topic.Asn1DecoderTestSRMJSON", + "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderSRMInput" + }) +@EnableConfigurationProperties +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class, Asn1CoderTopics.class +}) +@DirtiesContext +class RawEncodedSRMJsonRouterTest { + + @Autowired + Asn1CoderTopics asn1CoderTopics; + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + @Autowired + private KafkaTemplate kafkaTemplate; + + @Test + void testListen() throws JSONException, IOException { + var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getSrm()); + + Map consumerProps = + KafkaTestUtils.consumerProps("Asn1DecodeSRMJSONTestConsumer", "false", embeddedKafka); + var cf = + new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + Consumer testConsumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + + var classLoader = getClass().getClassLoader(); + InputStream inputStream = classLoader + .getResourceAsStream( + "us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-srm.json"); + assert inputStream != null; + var json = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + kafkaTemplate.send(rawEncodedJsonTopics.getSrm(), json); + + inputStream = classLoader + .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-srm.xml"); + assert inputStream != null; + var expectedSrm = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + + var producedSrm = KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); + assertEquals(expectedSrm, producedSrm.value()); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java new file mode 100644 index 000000000..22bc8d728 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedSSMJsonRouterTest.java @@ -0,0 +1,87 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; + +@SpringBootTest( + classes = { + KafkaProducerConfig.class, + KafkaConsumerConfig.class, + RawEncodedSSMJsonRouter.class, + RawEncodedJsonService.class, + SerializationConfig.class + }, + properties = { + "ode.kafka.topics.raw-encoded-json.ssm=topic.Asn1DecoderTestSSMJSON", + "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderSSMInput" + }) +@EnableConfigurationProperties +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class, Asn1CoderTopics.class +}) +@DirtiesContext +class RawEncodedSSMJsonRouterTest { + + @Autowired + Asn1CoderTopics asn1CoderTopics; + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + @Autowired + private KafkaTemplate kafkaTemplate; + + @Test + void testListen() throws JSONException, IOException { + var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getSsm()); + + Map consumerProps = + KafkaTestUtils.consumerProps("Asn1DecodeSSMJSONTestConsumer", "false", embeddedKafka); + var cf = + new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + Consumer testConsumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + + var classLoader = getClass().getClassLoader(); + InputStream inputStream = classLoader + .getResourceAsStream( + "us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-ssm.json"); + assert inputStream != null; + var json = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + kafkaTemplate.send(rawEncodedJsonTopics.getSsm(), json); + + inputStream = classLoader + .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-ssm.xml"); + assert inputStream != null; + var expectedSSM = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + + var consumedSSM = KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); + assertEquals(expectedSSM, consumedSSM.value()); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java new file mode 100644 index 000000000..339dc8ee0 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/listeners/asn1/RawEncodedTIMJsonRouterTest.java @@ -0,0 +1,89 @@ +package us.dot.its.jpo.ode.kafka.listeners.asn1; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Map; +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.common.serialization.StringDeserializer; +import org.json.JSONException; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.KafkaConsumerConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; + + +@SpringBootTest( + classes = { + KafkaProducerConfig.class, + KafkaConsumerConfig.class, + SerializationConfig.class, + RawEncodedTIMJsonRouter.class, + RawEncodedJsonService.class, + }, + properties = { + "ode.kafka.topics.raw-encoded-json.tim=topic.Asn1DecoderTestTIMJSON", + "ode.kafka.topics.asn1.decoder-input=topic.Asn1DecoderTIMInput" + }) +@EnableConfigurationProperties +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class, Asn1CoderTopics.class +}) +@DirtiesContext +class RawEncodedTIMJsonRouterTest { + + @Autowired + Asn1CoderTopics asn1CoderTopics; + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + @Autowired + private KafkaTemplate kafkaTemplate; + + @Test + void testListen() throws JSONException, IOException { + var embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + EmbeddedKafkaHolder.addTopics(asn1CoderTopics.getDecoderInput(), rawEncodedJsonTopics.getTim()); + + Map consumerProps = + KafkaTestUtils.consumerProps("Asn1DecodeTIMJSONTestConsumer", "false", embeddedKafka); + var cf = + new DefaultKafkaConsumerFactory<>(consumerProps, + new StringDeserializer(), new StringDeserializer()); + Consumer testConsumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(testConsumer, asn1CoderTopics.getDecoderInput()); + + var classLoader = getClass().getClassLoader(); + InputStream inputStream = classLoader + .getResourceAsStream( + "us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-tim.json"); + assert inputStream != null; + var json = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + kafkaTemplate.send(rawEncodedJsonTopics.getTim(), json); + + inputStream = classLoader + .getResourceAsStream("us/dot/its/jpo/ode/kafka/listeners/asn1/expected-tim.xml"); + assert inputStream != null; + var expectedTim = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + + var produced = + KafkaTestUtils.getSingleRecord(testConsumer, asn1CoderTopics.getDecoderInput()); + assertEquals(expectedTim, produced.value()); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/Asn1CoderTopicsTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/Asn1CoderTopicsTest.java new file mode 100644 index 000000000..157a6cee7 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/Asn1CoderTopicsTest.java @@ -0,0 +1,40 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = Asn1CoderTopics.class) +class Asn1CoderTopicsTest { + + @Autowired + Asn1CoderTopics asn1CoderTopics; + + @Test + void getDecoderInput() { + assertEquals("topic.Asn1DecoderInput", asn1CoderTopics.getDecoderInput()); + } + + @Test + void getDecoderOutput() { + assertEquals("topic.Asn1DecoderOutput", asn1CoderTopics.getDecoderOutput()); + } + + @Test + void getEncoderInput() { + assertEquals("topic.Asn1EncoderInput", asn1CoderTopics.getEncoderInput()); + } + + @Test + void getEncoderOutput() { + assertEquals("topic.Asn1EncoderOutput", asn1CoderTopics.getEncoderOutput()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/FileTopicsTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/FileTopicsTest.java new file mode 100644 index 000000000..75b165ad8 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/FileTopicsTest.java @@ -0,0 +1,30 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = FileTopics.class) +class FileTopicsTest { + + @Autowired + FileTopics fileTopics; + + @Test + void getFilteredOutput() { + assertEquals("/topic/filtered_messages", fileTopics.getFilteredOutput()); + } + + @Test + void getUnfilteredOutput() { + assertEquals("/topic/unfiltered_messages", fileTopics.getUnfilteredOutput()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/JsonTopicsTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/JsonTopicsTest.java new file mode 100644 index 000000000..cfae2811c --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/JsonTopicsTest.java @@ -0,0 +1,110 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = JsonTopics.class) +class JsonTopicsTest { + + @Autowired + JsonTopics jsonTopics; + + @Test + void getBsm() { + assertEquals("topic.OdeBsmJson", jsonTopics.getBsm()); + } + + @Test + void getMap() { + assertEquals("topic.OdeMapJson", jsonTopics.getMap()); + } + + @Test + void getPsm() { + assertEquals("topic.OdePsmJson", jsonTopics.getPsm()); + } + + @Test + void getSpat() { + assertEquals("topic.OdeSpatJson", jsonTopics.getSpat()); + } + + @Test + void getSrm() { + assertEquals("topic.OdeSrmJson", jsonTopics.getSrm()); + } + + @Test + void getSsm() { + assertEquals("topic.OdeSsmJson", jsonTopics.getSsm()); + } + + @Test + void getTim() { + assertEquals("topic.OdeTimJson", jsonTopics.getTim()); + } + + @Test + void getDriverAlert() { + assertEquals("topic.OdeDriverAlertJson", jsonTopics.getDriverAlert()); + } + + @Test + void getTimBroadcast() { + assertEquals("topic.OdeTimBroadcastJson", jsonTopics.getTimBroadcast()); + } + + @Test + void getBsmFiltered() { + assertEquals("topic.FilteredOdeBsmJson", jsonTopics.getBsmFiltered()); + } + + @Test + void getSpatFiltered() { + assertEquals("topic.FilteredOdeSpatJson", jsonTopics.getSpatFiltered()); + } + + @Test + void getTimFiltered() { + assertEquals("topic.FilteredOdeTimJson", jsonTopics.getTimFiltered()); + } + + @Test + void getTimTmcFiltered() { + assertEquals("topic.OdeTimJsonTMCFiltered", jsonTopics.getTimTmcFiltered()); + } + + @Test + void getTimCertExpiration() { + assertEquals("topic.OdeTIMCertExpirationTimeJson", jsonTopics.getTimCertExpiration()); + } + + @Test + void getDnMessage() { + assertEquals("topic.OdeDNMsgJson", jsonTopics.getDnMessage()); + } + + @Test + void getRxTim() { + assertEquals("topic.OdeTimRxJson", jsonTopics.getRxTim()); + } + + @Test + void getRxSpat() { + assertEquals("topic.OdeSpatRxJson", jsonTopics.getRxSpat()); + } + + @Test + void getJ2735TimBroadcast() { + assertEquals("topic.J2735TimBroadcastJson", jsonTopics.getJ2735TimBroadcast()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/PojoTopicsTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/PojoTopicsTest.java new file mode 100644 index 000000000..dbda84a6b --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/PojoTopicsTest.java @@ -0,0 +1,80 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = PojoTopics.class) +class PojoTopicsTest { + + @Autowired + PojoTopics pojoTopics; + + @Test + void getBsm() { + assertEquals("topic.OdeBsmPojo", pojoTopics.getBsm()); + } + + @Test + void getSpat() { + assertEquals("topic.OdeSpatPojo", pojoTopics.getSpat()); + } + + @Test + void getSsm() { + assertEquals("topic.OdeSsmPojo", pojoTopics.getSsm()); + } + + @Test + void getTimBroadcast() { + assertEquals("topic.OdeTimBroadcastPojo", pojoTopics.getTimBroadcast()); + } + + @Test + void getBsmDuringEvent() { + assertEquals("topic.OdeBsmDuringEventPojo", pojoTopics.getBsmDuringEvent()); + } + + @Test + void getRxBsm() { + assertEquals("topic.OdeBsmRxPojo", pojoTopics.getRxBsm()); + } + + @Test + void getRxSpat() { + assertEquals("topic.OdeSpatRxPojo", pojoTopics.getRxSpat()); + } + + @Test + void getTxBsm() { + assertEquals("topic.OdeBsmTxPojo", pojoTopics.getTxBsm()); + } + + @Test + void getTxMap() { + assertEquals("topic.OdeMapTxPojo", pojoTopics.getTxMap()); + } + + @Test + void getTxPsm() { + assertEquals("topic.OdePsmTxPojo", pojoTopics.getTxPsm()); + } + + @Test + void getTxSpat() { + assertEquals("topic.OdeSpatTxPojo", pojoTopics.getTxSpat()); + } + + @Test + void getTxSrm() { + assertEquals("topic.OdeSrmTxPojo", pojoTopics.getTxSrm()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/RawEncodedJsonTopicsTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/RawEncodedJsonTopicsTest.java new file mode 100644 index 000000000..827c40a5f --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/RawEncodedJsonTopicsTest.java @@ -0,0 +1,55 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = RawEncodedJsonTopics.class) +class RawEncodedJsonTopicsTest { + + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Test + void getBsm() { + assertEquals("topic.OdeRawEncodedBSMJson", rawEncodedJsonTopics.getBsm()); + } + + @Test + void getMap() { + assertEquals("topic.OdeRawEncodedMAPJson", rawEncodedJsonTopics.getMap()); + } + + @Test + void getPsm() { + assertEquals("topic.OdeRawEncodedPSMJson", rawEncodedJsonTopics.getPsm()); + } + + @Test + void getSpat() { + assertEquals("topic.OdeRawEncodedSPATJson", rawEncodedJsonTopics.getSpat()); + } + + @Test + void getSrm() { + assertEquals("topic.OdeRawEncodedSRMJson", rawEncodedJsonTopics.getSrm()); + } + + @Test + void getSsm() { + assertEquals("topic.OdeRawEncodedSSMJson", rawEncodedJsonTopics.getSsm()); + } + + @Test + void getTim() { + assertEquals("topic.OdeRawEncodedTIMJson", rawEncodedJsonTopics.getTim()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/SDXDepositorTopicsTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/SDXDepositorTopicsTest.java new file mode 100644 index 000000000..bc700a7dd --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/kafka/topics/SDXDepositorTopicsTest.java @@ -0,0 +1,25 @@ +package us.dot.its.jpo.ode.kafka.topics; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = SDXDepositorTopics.class) +class SDXDepositorTopicsTest { + + @Autowired + SDXDepositorTopics sdxDepositorTopics; + + @Test + void getInput() { + assertEquals("topic.SDWDepositorInput", sdxDepositorTopics.getInput()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/rsu/RsuDepositorTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/rsu/RsuDepositorTest.java index 99f53b7e5..a5451376f 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/rsu/RsuDepositorTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/rsu/RsuDepositorTest.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2020 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -16,68 +16,46 @@ package us.dot.its.jpo.ode.rsu; -import static org.junit.Assert.assertEquals; - -import java.io.IOException; -import java.text.ParseException; - import org.junit.jupiter.api.Test; -import org.junit.runner.RunWith; - -import mockit.Capturing; -import mockit.Injectable; -import mockit.Mocked; -import mockit.Tested; -//import mockit.integration.junit4.JMockit; -import us.dot.its.jpo.ode.OdeProperties; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; import us.dot.its.jpo.ode.model.OdeTravelerInputData; -import us.dot.its.jpo.ode.snmp.SnmpSession; -import us.dot.its.jpo.ode.wrapper.MessageProducer; - -//@RunWith(JMockit.class) -public class RsuDepositorTest { - - @Tested - RsuDepositor testRsuDepositor; - - @Injectable - OdeProperties injectableOdeProperties; - @Capturing - MessageProducer capturingMessageProducer; - @Capturing - SnmpSession capturingSnmpSession; - - @Injectable - OdeTravelerInputData injectableOdeTravelerInputData; - - @Mocked - MessageProducer mockMessageProducer; - @Test - public void shouldConstruct(@Mocked OdeProperties mockOdeProperties) { - testRsuDepositor = new RsuDepositor(mockOdeProperties); - testRsuDepositor.start(); - assertEquals(mockOdeProperties, testRsuDepositor.getOdeProperties()); +import us.dot.its.jpo.ode.security.SecurityServicesProperties; - } +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; - @Test - public void testShutdown() { - testRsuDepositor.shutdown(); - assertEquals(false, testRsuDepositor.isRunning()); - assertEquals(false, testRsuDepositor.isAlive()); +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = {RsuProperties.class, SecurityServicesProperties.class}) +class RsuDepositorTest { - } + @Autowired + RsuProperties rsuProperties; + @Autowired + SecurityServicesProperties securityServicesProperties; - @Test - public void testDeposit(@Mocked OdeTravelerInputData mockOdeTravelerInputData) - throws IOException, ParseException { - - testRsuDepositor.deposit(mockOdeTravelerInputData.getRequest(), "message"); - - } + @Test + void testShutdown() { + RsuDepositor testRsuDepositor = new RsuDepositor(rsuProperties, securityServicesProperties.getIsRsuSigningEnabled()); + testRsuDepositor.shutdown(); + assertFalse(testRsuDepositor.isRunning()); + assertFalse(testRsuDepositor.isAlive()); + } + @Test + void testDeposit() { + RsuDepositor testRsuDepositor = new RsuDepositor(rsuProperties, securityServicesProperties.getIsRsuSigningEnabled()); + OdeTravelerInputData mockOdeTravelerInputData = new OdeTravelerInputData(); + testRsuDepositor.deposit(mockOdeTravelerInputData.getRequest(), "message"); + assertEquals(1, testRsuDepositor.getDepositorEntries().size()); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/security/SecurityServicesPropertiesTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/security/SecurityServicesPropertiesTest.java new file mode 100644 index 000000000..913207847 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/security/SecurityServicesPropertiesTest.java @@ -0,0 +1,54 @@ +package us.dot.its.jpo.ode.security; + +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = SecurityServicesProperties.class) +class SecurityServicesPropertiesTest { + + @Autowired + SecurityServicesProperties securityServicesProperties; + + @Test + @Order(1) + void getSignatureEndpoint() { + assertEquals("http://localhost:8090/sign", securityServicesProperties.getSignatureEndpoint()); + } + + @Test + @Order(2) + void getSignatureEndpoint_DefaultWhenNoValueProvided() { + securityServicesProperties.setSignatureEndpoint(null); + assertEquals("http://test-host:1234/sign", securityServicesProperties.getSignatureEndpoint()); + } + + @Test + void getHostIP() { + assertEquals("test-host", securityServicesProperties.getHostIP()); + } + + @Test + void getPort() { + assertEquals(1234, securityServicesProperties.getPort()); + } + + @Test + void isSdwEnabled_DefaultsToTrueWhenNoValueProvided() { + assertTrue(securityServicesProperties.getIsSdwSigningEnabled()); + } + + @Test + void isRsuEnabled_DefaultsToFalseWhenNoValueProvided() { + assertFalse(securityServicesProperties.getIsRsuSigningEnabled()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/security/SecurityServicesPropertiesValidatorTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/security/SecurityServicesPropertiesValidatorTest.java new file mode 100644 index 000000000..67556a3b8 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/security/SecurityServicesPropertiesValidatorTest.java @@ -0,0 +1,72 @@ +package us.dot.its.jpo.ode.security; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class SecurityServicesPropertiesValidatorTest { + + @Test + void supports() { + SecurityServicesPropertiesValidator validator = new SecurityServicesPropertiesValidator(); + assertTrue(validator.supports(SecurityServicesProperties.class)); + assertFalse(validator.supports(Object.class)); + } + + @Test + void validate() { + SecurityServicesProperties properties = new SecurityServicesProperties(); + properties.setIsRsuSigningEnabled(true); + properties.setIsSdwSigningEnabled(true); + properties.setSignatureEndpoint("http://localhost:8080/sign"); + + SecurityServicesPropertiesValidator validator = new SecurityServicesPropertiesValidator(); + org.springframework.validation.BeanPropertyBindingResult errors = new org.springframework.validation.BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertFalse(errors.hasErrors()); + } + + @Test + void errorThrownForInvalidSignatureEndpoint() { + SecurityServicesProperties properties = new SecurityServicesProperties(); + properties.setIsRsuSigningEnabled(true); + properties.setIsSdwSigningEnabled(true); + properties.setSignatureEndpoint("localhost:8080/sign"); + + SecurityServicesPropertiesValidator validator = new SecurityServicesPropertiesValidator(); + org.springframework.validation.BeanPropertyBindingResult errors = new org.springframework.validation.BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertTrue(errors.hasErrors()); + } + + @Test + void errorThrownForInvalidHostIP() { + SecurityServicesProperties properties = new SecurityServicesProperties(); + properties.setIsRsuSigningEnabled(true); + properties.setIsSdwSigningEnabled(true); + properties.setHostIP(null); + properties.setPort(8080); + + SecurityServicesPropertiesValidator validator = new SecurityServicesPropertiesValidator(); + org.springframework.validation.BeanPropertyBindingResult errors = new org.springframework.validation.BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertTrue(errors.hasErrors()); + } + + @Test + void errorThrownForInvalidPort() { + SecurityServicesProperties properties = new SecurityServicesProperties(); + properties.setIsRsuSigningEnabled(true); + properties.setIsSdwSigningEnabled(true); + properties.setHostIP("localhost"); + + SecurityServicesPropertiesValidator validator = new SecurityServicesPropertiesValidator(); + org.springframework.validation.BeanPropertyBindingResult errors = new org.springframework.validation.BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertTrue(errors.hasErrors()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManagerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManagerTest.java index 47cdb0b11..46474407d 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManagerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1CommandManagerTest.java @@ -22,14 +22,14 @@ import org.junit.jupiter.api.Test; import mockit.Capturing; -import mockit.Expectations; import mockit.Injectable; import mockit.Mocked; import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.SDXDepositorTopics; import us.dot.its.jpo.ode.model.OdeTravelerInputData; -import us.dot.its.jpo.ode.plugin.RoadSideUnit.RSU; -import us.dot.its.jpo.ode.plugin.ServiceRequest.OdeInternal.RequestVerb; +import us.dot.its.jpo.ode.rsu.RsuProperties; +import us.dot.its.jpo.ode.security.SecurityServicesProperties; import us.dot.its.jpo.ode.services.asn1.Asn1CommandManager.Asn1CommandManagerException; import us.dot.its.jpo.ode.snmp.SnmpSession; import us.dot.its.jpo.ode.wrapper.MessageProducer; @@ -40,7 +40,16 @@ public class Asn1CommandManagerTest { Asn1CommandManager testAsn1CommandManager; @Injectable - OdeProperties injectableOdeProperties; + OdeKafkaProperties injectableOdeKafkaProperties; + + @Injectable + SDXDepositorTopics injectableSDXDepositorTopics; + + @Injectable + RsuProperties injectableRsuProperties; + + @Injectable + SecurityServicesProperties injectableSecurityServicesProperties; @Capturing MessageProducer capturingMessageProducer; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouterTest.java deleted file mode 100644 index a0ff1680d..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1DecodedDataRouterTest.java +++ /dev/null @@ -1,400 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.services.asn1; - -import java.util.Set; - -import org.apache.kafka.clients.consumer.ConsumerRecord; -import org.json.JSONException; -import org.json.JSONObject; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import mockit.Capturing; -import mockit.Expectations; -import mockit.Injectable; -import mockit.Mocked; -import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.coder.OdeBsmDataCreatorHelper; -import us.dot.its.jpo.ode.model.OdeBsmData; -import us.dot.its.jpo.ode.plugin.j2735.J2735DSRCmsgID; -import us.dot.its.jpo.ode.util.XmlUtils; -import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; -import us.dot.its.jpo.ode.wrapper.MessageProducer; - -public class Asn1DecodedDataRouterTest { - - @Tested - Asn1DecodedDataRouter testAsn1DecodedDataRouter; - - @Injectable - OdeProperties injectableOdeProperties; - -// @SuppressWarnings("rawtypes") -// @Capturing -// MessageProducer capturingMessageProducer; -// -// @Capturing -// XmlUtils capturingXmlUtils; -// -// @Capturing -// OdeBsmDataCreatorHelper capturingOdeBsmDataCreatorHelper; - - @Mocked - MessageProducer mockBsmMessageProducer; - @Mocked - MessageProducer mockTimMessageProducer; - - @Mocked - JSONObject mockConsumed; - @Mocked - ConsumerRecord mockConsumerRecord; - - @SuppressWarnings("unchecked") - @BeforeEach @Disabled - public void createMockProducers() { - - new Expectations() { - { - new MessageProducer(null, null, null, anyString, (Set) any); - result = mockBsmMessageProducer; - - MessageProducer.defaultStringMessageProducer(null, null, (Set) any); - result = mockTimMessageProducer; - - } - }; - } - - @Test @Disabled - public void testProcessBsmLogDuringEvent() throws XmlUtilsException { - try { - new Expectations() { - - { - XmlUtils.toJSONObject(anyString); - result = mockConsumed; - - mockConsumed.getJSONObject(anyString); - result = mockConsumed; - - // mock the messageID to be BSM - mockConsumed.getInt(anyString); - result = J2735DSRCmsgID.BasicSafetyMessage.getMsgID(); - - // mock the record type to be bsmLogDuringEvent - mockConsumed.getString(anyString); - result = "bsmLogDuringEvent"; - - mockConsumerRecord.key(); - result = "testKey"; - - mockBsmMessageProducer.send(null, anyString, (OdeBsmData) any); - times = 2; - - mockTimMessageProducer.send(null, anyString, anyString); - times = 0; - } - }; - } catch (XmlUtilsException e) { - - e.printStackTrace(); - } catch (JSONException e) { - - e.printStackTrace(); - } - - testAsn1DecodedDataRouter.setRecord(mockConsumerRecord); - testAsn1DecodedDataRouter.process("testConsumedData"); - } - - @Test @Disabled - public void testProcessRxMsgBsm() throws XmlUtilsException { - try { - new Expectations() { - - { - XmlUtils.toJSONObject(anyString); - result = mockConsumed; - - mockConsumed.getJSONObject(anyString); - result = mockConsumed; - - // mock the messageID to be BSM - mockConsumed.getInt(anyString); - result = J2735DSRCmsgID.BasicSafetyMessage.getMsgID(); - - // mock the record type to be bsmLogDuringEvent - mockConsumed.getString(anyString); - result = "rxMsg"; - - mockConsumerRecord.key(); - result = "testKey"; - - mockBsmMessageProducer.send(null, anyString, (OdeBsmData) any); - times = 2; - - mockTimMessageProducer.send(null, anyString, anyString); - times = 0; - } - }; - } catch (XmlUtilsException e) { - - e.printStackTrace(); - } catch (JSONException e) { - - e.printStackTrace(); - } - - testAsn1DecodedDataRouter.setRecord(mockConsumerRecord); - testAsn1DecodedDataRouter.process("testConsumedData"); - } - - @Test @Disabled - public void testProcessTxMsgBsm() throws XmlUtilsException { - try { - new Expectations() { - - { - XmlUtils.toJSONObject(anyString); - result = mockConsumed; - - mockConsumed.getJSONObject(anyString); - result = mockConsumed; - - // mock the messageID to be BSM - mockConsumed.getInt(anyString); - result = J2735DSRCmsgID.BasicSafetyMessage.getMsgID(); - - // mock the record type to be bsmLogDuringEvent - mockConsumed.getString(anyString); - result = "bsmTx"; - - mockConsumerRecord.key(); - result = "testKey"; - - mockBsmMessageProducer.send(null, anyString, (OdeBsmData) any); - times = 2; - - mockTimMessageProducer.send(null, anyString, anyString); - times = 0; - } - }; - } catch (XmlUtilsException e) { - - e.printStackTrace(); - } catch (JSONException e) { - - e.printStackTrace(); - } - - testAsn1DecodedDataRouter.setRecord(mockConsumerRecord); - testAsn1DecodedDataRouter.process("testConsumedData"); - } - - @Test @Disabled - public void testProcessDnsTim() throws XmlUtilsException { - try { - new Expectations() { - - { - XmlUtils.toJSONObject(anyString); - result = mockConsumed; - - mockConsumed.getJSONObject(anyString); - result = mockConsumed; - - // mock the messageID to be BSM - mockConsumed.getInt(anyString); - result = J2735DSRCmsgID.TravelerInformation.getMsgID(); - - // mock the record type to be bsmLogDuringEvent - mockConsumed.getString(anyString); - result = "dnMsg"; - - mockConsumerRecord.key(); - result = "testKey"; - - mockBsmMessageProducer.send(null, anyString, (OdeBsmData) any); - times = 0; - - mockTimMessageProducer.send(null, anyString, anyString); - times = 2; - } - }; - } catch (XmlUtilsException e) { - - e.printStackTrace(); - } catch (JSONException e) { - - e.printStackTrace(); - } - - testAsn1DecodedDataRouter.setRecord(mockConsumerRecord); - testAsn1DecodedDataRouter.process("testConsumedData"); - } - - @Test @Disabled - public void testProcessRxTim() throws XmlUtilsException { - try { - new Expectations() { - - { - XmlUtils.toJSONObject(anyString); - result = mockConsumed; - - mockConsumed.getJSONObject(anyString); - result = mockConsumed; - - // mock the messageID to be BSM - mockConsumed.getInt(anyString); - result = J2735DSRCmsgID.TravelerInformation.getMsgID(); - - // mock the record type to be bsmLogDuringEvent - mockConsumed.getString(anyString); - result = "rxMsg"; - - mockConsumerRecord.key(); - result = "testKey"; - - mockBsmMessageProducer.send(null, anyString, (OdeBsmData) any); - times = 0; - - mockTimMessageProducer.send(null, anyString, anyString); - times = 2; - } - }; - } catch (XmlUtilsException e) { - - e.printStackTrace(); - } catch (JSONException e) { - - e.printStackTrace(); - } - - testAsn1DecodedDataRouter.setRecord(mockConsumerRecord); - testAsn1DecodedDataRouter.process("testConsumedData"); - } - - @Test @Disabled - public void testProcessUnsupportedTim() throws XmlUtilsException { - try { - new Expectations() { - - { - XmlUtils.toJSONObject(anyString); - result = mockConsumed; - - mockConsumed.getJSONObject(anyString); - result = mockConsumed; - - // mock the messageID to be BSM - mockConsumed.getInt(anyString); - result = J2735DSRCmsgID.TravelerInformation.getMsgID(); - - // mock the record type to be bsmLogDuringEvent - mockConsumed.getString(anyString); - result = "unsupported"; - - mockConsumerRecord.key(); - result = "testKey"; - - mockBsmMessageProducer.send(null, anyString, (OdeBsmData) any); - times = 0; - - mockTimMessageProducer.send(null, anyString, anyString); - times = 1; - } - }; - } catch (XmlUtilsException e) { - - e.printStackTrace(); - } catch (JSONException e) { - - e.printStackTrace(); - } - - testAsn1DecodedDataRouter.setRecord(mockConsumerRecord); - testAsn1DecodedDataRouter.process("testConsumedData"); - } - - @Test @Disabled - public void testProcessUnsupportedBsm() throws XmlUtilsException { - try { - new Expectations() { - - { - XmlUtils.toJSONObject(anyString); - result = mockConsumed; - - mockConsumed.getJSONObject(anyString); - result = mockConsumed; - - // mock the messageID to be BSM - mockConsumed.getInt(anyString); - result = J2735DSRCmsgID.BasicSafetyMessage.getMsgID(); - - // mock the record type to be bsmLogDuringEvent - mockConsumed.getString(anyString); - result = "unsupported"; - - mockConsumerRecord.key(); - result = "testKey"; - - mockBsmMessageProducer.send(null, anyString, (OdeBsmData) any); - times = 1; - - mockTimMessageProducer.send(null, anyString, anyString); - times = 0; - } - }; - } catch (XmlUtilsException e) { - - e.printStackTrace(); - } catch (JSONException e) { - - e.printStackTrace(); - } - - testAsn1DecodedDataRouter.setRecord(mockConsumerRecord); - testAsn1DecodedDataRouter.process("testConsumedData"); - } - - - @Test @Disabled - public void testProcessXmlException() throws XmlUtilsException { - new Expectations() { - - @Mocked - XmlUtilsException mockXmlUtilsException; - - { - XmlUtils.toJSONObject(anyString); - result = mockXmlUtilsException; - - mockBsmMessageProducer.send(null, anyString, (OdeBsmData) any); - times = 0; - - mockTimMessageProducer.send(null, anyString, anyString); - times = 0; - } - }; - - testAsn1DecodedDataRouter.process("testConsumedData"); - } -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java index 00f2b2953..d18fcaba0 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/Asn1EncodedDataRouterTest.java @@ -21,25 +21,19 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import mockit.Capturing; import mockit.Expectations; -import mockit.Injectable; import mockit.Mocked; import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.context.AppContext; import us.dot.its.jpo.ode.traveler.TimTransmogrifier; import us.dot.its.jpo.ode.util.XmlUtils; import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; -import us.dot.its.jpo.ode.wrapper.MessageProducer; public class Asn1EncodedDataRouterTest { @Tested Asn1EncodedDataRouter testAsn1EncodedDataRouter; - - @Injectable - OdeProperties injectableOdeProperties; + // @Capturing // MessageProducer capturingMessageProducer; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/AsnCodecRouterServiceControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/AsnCodecRouterServiceControllerTest.java deleted file mode 100644 index 3cad9e9e1..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/AsnCodecRouterServiceControllerTest.java +++ /dev/null @@ -1,56 +0,0 @@ -/******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - ******************************************************************************/ -package us.dot.its.jpo.ode.services.asn1; - -import static org.junit.Assert.assertNotNull; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; - -import mockit.Capturing; -import mockit.Expectations; -import mockit.Injectable; -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.wrapper.MessageConsumer; - -public class AsnCodecRouterServiceControllerTest { - -// @Capturing -// MessageConsumer capturingMessageConsumer; -// -// @Capturing -// Asn1DecodedDataRouter capturingAsn1DecodedDataRouter; -// -// @Capturing -// Asn1EncodedDataRouter capturingAsn1EncodedDataRouter; - - @Injectable - OdeProperties injectableOdeProperties; - - @Test @Disabled - public void shouldStartTwoConsumers() { - - new Expectations() { - { - MessageConsumer.defaultStringMessageConsumer(anyString, anyString, (Asn1DecodedDataRouter) any); - times = 2; - } - }; - - assertNotNull(new AsnCodecRouterServiceController(injectableOdeProperties)); - } - -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSONTest.java deleted file mode 100644 index af86ea450..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeBSMJSONTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.json.JSONException; -import org.junit.jupiter.api.Test; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeBsmMetadata; -import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; - -public class Asn1DecodeBSMJSONTest { - private final String json = "{\"metadata\":{\"bsmSource\":\"EV\",\"recordType\":\"bsmTx\",\"securityResultCode\":\"success\",\"receivedMessageDetails\":{\"locationData\":{\"latitude\":\"unavailable\",\"longitude\":\"unavailable\",\"elevation\":\"unavailable\",\"speed\":\"unavailable\",\"heading\":\"unavailable\"},\"rxSource\":\"RSU\"},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"be071349-9bb6-4b66-b1c7-8df1f9e0cb74\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-03-15T16:46:45.297174600Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"originIp\":\"192.168.0.1\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"03810040038081B1001480AD4644A9EA5442BC26E97C7496576E052569B214000070007050FD7D0FA1007FFF8000681250020214C1C0FF64BFFA0FB84F720FF71BFF9500DFFFC0FF564006D001FFFC0FF5BBFE5B031FFFC0FF573FF73075FFFC0FF973FFB708FFFFC0FFEFC00B50B5FFFC0FFF0401150BBFFFC0FFDF4015D0C1FFFC0FFB9C01690C7FFFC0FFC0401550C9FFFC0FFBAC014F0C9FFFC0FFBBC01530CBFFFC0FFBB400B30E7FFFC100383FFCD0E3FFFCFFFEC800400120000243450D45B978805B073A8672E91E9D80824A65C65F85E35B61502149263F000FE804E6B84AF66507D51690DE76F30D1468A68F8986B58E6AECB2C5FC4766C223F0B977E87678DDF714FE123C483622CC7500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}}}"; - - @Test - public void testConstructor() { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - assertEquals(properties.getKafkaTopicOdeRawEncodedBSMJson(), "topic.OdeRawEncodedBSMJson"); - } - - @Test - public void testProcess() throws XmlUtilsException, JSONException { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - Asn1DecodeBSMJSON testDecodeBsmJson = new Asn1DecodeBSMJSON(properties); - - OdeAsn1Data resultOdeObj = testDecodeBsmJson.process(json); - - // Validate the metadata - OdeBsmMetadata jsonMetadataObj = (OdeBsmMetadata) resultOdeObj.getMetadata(); - assertEquals(jsonMetadataObj.getBsmSource(), OdeBsmMetadata.BsmSource.EV); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementName(), "unsecuredData"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementType(), "MessageFrame"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); - - // Validate the payload - String expectedPayload = "{\"bytes\":\"001480AD4644A9EA5442BC26E97C7496576E052569B214000070007050FD7D0FA1007FFF8000681250020214C1C0FF64BFFA0FB84F720FF71BFF9500DFFFC0FF564006D001FFFC0FF5BBFE5B031FFFC0FF573FF73075FFFC0FF973FFB708FFFFC0FFEFC00B50B5FFFC0FFF0401150BBFFFC0FFDF4015D0C1FFFC0FFB9C01690C7FFFC0FFC0401550C9FFFC0FFBAC014F0C9FFFC0FFBBC01530CBFFFC0FFBB400B30E7FFFC100383FFCD0E3FFFCFFFEC800400120000243450D45B978805B073A8672E91E9D80824A65C65F85E35B61502149263F000FE804E6B84AF66507D51690DE76F30D1468A68F8986B58E6AECB2C5FC4766C223F0B977E87678DDF714FE123C483622CC7500\"}"; - OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); - assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); - assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); - } -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSONTest.java deleted file mode 100644 index 02c6a0c7f..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeMAPJSONTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.json.JSONException; -import org.junit.jupiter.api.Test; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeMapMetadata; -import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; - -public class Asn1DecodeMAPJSONTest { - private final String json = "{\"metadata\":{\"recordType\":\"mapTx\",\"securityResultCode\":\"success\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"b91c5c0f-1c42-457e-b7c5-54505c942667\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-03-15T19:04:47.440601200Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedBy\":\"RSU\",\"sanitized\":false,\"mapSource\":\"RSU\",\"originIp\":\"192.168.0.1\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"03810040038081B10012839338023000205E96094D40DF4C2CA626C8516E02DC3C2010640000000289E01C009F603F42E88039900000000A41107B027D80FD0A4200C6400000002973021C09F603DE0C16029200000080002A8A008D027D98FEE805404FB0E1085F60588200028096021200000080002AA0007D027D98FE9802E04FB1200C214456228000A02B1240005022C03240000020000D56B40BC04FB35FF655E2C09F623FB81C835FEC0DB240A0A2BFF4AEBF82C660000804B0089000000800025670034013ECD7FB9578E027D9AFF883C4E050515FFA567A41635000040258024800000400012B8F81F409F663FAC094013ECD7FC83DDB02829AFFA480BC04FB02C6E0000804B09C5000000200035EA98A9604F60DA6C7C113D505C35FFE941D409F65C05034C050500C9880004409BC800000006D2BD3CEC813C40CDE062C1FD400000200008791EA3DB3CF380A009F666F05005813D80FFE0A0588C00040092106A00000000BC75CAC009F66DB54C04A813D80A100801241ED40000000078EBAE3B6DA7A008809E2050904008811F100000000BC72389009F60ECA8002049C400000002F1B2CA3027D93A71FA813EC204BC400000002F1B2B34027B0397608880CD10000000039B8E1A51036820505080D51000000003A7461ED1036760505080DD1000000003B2F62311006260505160BCA00000080002B785E2A80A0A6C028DE728145037F1F9E456488000202B2540001022C1894000001000057058C5B81414D806DBCD4028A18F4DF23A050502C8D0000404B05A5000000800035B6471BC05053602431F380A2864087BDB0141458064AB0D6C00053FC013EC0B0680006012C15940000020000D6C06C6581414D807FB972028A1901D78DC050536020EC1800A0A6C039D639813D80B0780006012C1494000002000096AB8C6581414D8062BE32028A1B01417E04050A360172D77009E2058440003009409C200000040006B3486A480A0A1CAB7134C8117DCC02879B018FAE2C050F3601CED54809E21012720000000067FBAD0007E7E84045C80000000100661580958004041C8000000019F3658401CDFA2C0D64000002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B0000802E8000802000035FDB1D84C09EC6C003BA14814140B0540003012C187400040080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C900008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}}}"; - - @Test - public void testConstructor() { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - assertEquals(properties.getKafkaTopicOdeRawEncodedMAPJson(), "topic.OdeRawEncodedMAPJson"); - } - - @Test - public void testProcess() throws XmlUtilsException, JSONException { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - Asn1DecodeMAPJSON testDecodeMapJson = new Asn1DecodeMAPJSON(properties); - - OdeAsn1Data resultOdeObj = testDecodeMapJson.process(json); - - // Validate the metadata - OdeMapMetadata jsonMetadataObj = (OdeMapMetadata) resultOdeObj.getMetadata(); - assertEquals(jsonMetadataObj.getMapSource(), OdeMapMetadata.MapSource.RSU); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementName(), "unsecuredData"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementType(), "MessageFrame"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); - - // Validate the payload - String expectedPayload = "{\"bytes\":\"0012839338023000205E96094D40DF4C2CA626C8516E02DC3C2010640000000289E01C009F603F42E88039900000000A41107B027D80FD0A4200C6400000002973021C09F603DE0C16029200000080002A8A008D027D98FEE805404FB0E1085F60588200028096021200000080002AA0007D027D98FE9802E04FB1200C214456228000A02B1240005022C03240000020000D56B40BC04FB35FF655E2C09F623FB81C835FEC0DB240A0A2BFF4AEBF82C660000804B0089000000800025670034013ECD7FB9578E027D9AFF883C4E050515FFA567A41635000040258024800000400012B8F81F409F663FAC094013ECD7FC83DDB02829AFFA480BC04FB02C6E0000804B09C5000000200035EA98A9604F60DA6C7C113D505C35FFE941D409F65C05034C050500C9880004409BC800000006D2BD3CEC813C40CDE062C1FD400000200008791EA3DB3CF380A009F666F05005813D80FFE0A0588C00040092106A00000000BC75CAC009F66DB54C04A813D80A100801241ED40000000078EBAE3B6DA7A008809E2050904008811F100000000BC72389009F60ECA8002049C400000002F1B2CA3027D93A71FA813EC204BC400000002F1B2B34027B0397608880CD10000000039B8E1A51036820505080D51000000003A7461ED1036760505080DD1000000003B2F62311006260505160BCA00000080002B785E2A80A0A6C028DE728145037F1F9E456488000202B2540001022C1894000001000057058C5B81414D806DBCD4028A18F4DF23A050502C8D0000404B05A5000000800035B6471BC05053602431F380A2864087BDB0141458064AB0D6C00053FC013EC0B0680006012C15940000020000D6C06C6581414D807FB972028A1901D78DC050536020EC1800A0A6C039D639813D80B0780006012C1494000002000096AB8C6581414D8062BE32028A1B01417E04050A360172D77009E2058440003009409C200000040006B3486A480A0A1CAB7134C8117DCC02879B018FAE2C050F3601CED54809E21012720000000067FBAD0007E7E84045C80000000100661580958004041C8000000019F3658401CDFA2C0D64000002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B0000802E8000802000035FDB1D84C09EC6C003BA14814140B0540003012C187400040080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800\"}"; - OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); - assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); - assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); - } -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSONTest.java deleted file mode 100644 index 5c7ed84f8..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodePSMJSONTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.json.JSONException; -import org.junit.jupiter.api.Test; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdePsmMetadata; -import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; - -public class Asn1DecodePSMJSONTest { - private final String json = "{\"metadata\":{\"recordType\":\"psmTx\",\"securityResultCode\":\"success\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"fa3dfe1b-80cd-45cb-ae2c-c604a214fe56\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-03-15T19:16:35.212860500Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedBy\":\"UNKNOWN\",\"sanitized\":false,\"psmSource\":\"RSU\",\"originIp\":\"192.168.0.1\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC798601000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}}}"; - - @Test - public void testConstructor() { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - assertEquals(properties.getKafkaTopicOdeRawEncodedPSMJson(), "topic.OdeRawEncodedPSMJson"); - } - - @Test - public void testProcess() throws XmlUtilsException, JSONException { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - Asn1DecodePSMJSON testDecodePsmJson = new Asn1DecodePSMJSON(properties); - - OdeAsn1Data resultOdeObj = testDecodePsmJson.process(json); - - // Validate the metadata - OdePsmMetadata jsonMetadataObj = (OdePsmMetadata) resultOdeObj.getMetadata(); - assertEquals(jsonMetadataObj.getPsmSource(), OdePsmMetadata.PsmSource.RSU); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementName(), "unsecuredData"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementType(), "MessageFrame"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); - - // Validate the payload - String expectedPayload = "{\"bytes\":\"00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC79860100\"}"; - OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); - assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); - assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); - } -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSONTest.java deleted file mode 100644 index 47c6bb773..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSPATJSONTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.json.JSONException; -import org.junit.jupiter.api.Test; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeSpatMetadata; -import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; - -public class Asn1DecodeSPATJSONTest { - private final String json = "{\"metadata\":{\"recordType\":\"spatTx\",\"securityResultCode\":\"success\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"5ec410a3-bec6-4724-9601-1e08778e1dfc\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-03-15T19:43:22.604870100Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedBy\":\"RSU\",\"sanitized\":false,\"spatSource\":\"RSU\",\"originIp\":\"192.168.0.1\",\"isCertPresent\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"0381004003807C00134700081132000000E437070010434257925790010232119A11CE800C10D095E495E400808684AF24AF20050434257925790030232119A11CE801C10D095E495E401008684AF24AF20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}}}"; - - @Test - public void testConstructor() { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - assertEquals(properties.getKafkaTopicOdeRawEncodedSPATJson(), "topic.OdeRawEncodedSPATJson"); - } - - @Test - public void testProcess() throws XmlUtilsException, JSONException { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - Asn1DecodeSPATJSON testDecodeSpatJson = new Asn1DecodeSPATJSON(properties); - - OdeAsn1Data resultOdeObj = testDecodeSpatJson.process(json); - - // Validate the metadata - OdeSpatMetadata jsonMetadataObj = (OdeSpatMetadata) resultOdeObj.getMetadata(); - assertEquals(jsonMetadataObj.getSpatSource(), OdeSpatMetadata.SpatSource.RSU); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementName(), "unsecuredData"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementType(), "MessageFrame"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); - - // Validate the payload - String expectedPayload = "{\"bytes\":\"00134700081132000000E437070010434257925790010232119A11CE800C10D095E495E400808684AF24AF20050434257925790030232119A11CE801C10D095E495E401008684AF24AF200\"}"; - OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); - assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); - assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); - } -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSONTest.java deleted file mode 100644 index 3a0944d2e..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSRMJSONTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.json.JSONException; -import org.junit.jupiter.api.Test; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeSrmMetadata; -import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; - -public class Asn1DecodeSRMJSONTest { - private final String json = "{\"metadata\":{\"recordType\":\"srmTx\",\"securityResultCode\":\"success\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"190cbd65-d1e2-488a-ba42-b7d3f03a5c69\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-03-15T19:24:04.113614500Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedBy\":\"OBU\",\"sanitized\":false,\"originIp\":\"192.168.0.1\",\"srmSource\":\"RSU\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"0381004003807C001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}}}"; - - @Test - public void testConstructor() { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - assertEquals(properties.getKafkaTopicOdeRawEncodedSRMJson(), "topic.OdeRawEncodedSRMJson"); - } - - @Test - public void testProcess() throws XmlUtilsException, JSONException { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - Asn1DecodeSRMJSON testDecodeSrmJson = new Asn1DecodeSRMJSON(properties); - - OdeAsn1Data resultOdeObj = testDecodeSrmJson.process(json); - - // Validate the metadata - OdeSrmMetadata jsonMetadataObj = (OdeSrmMetadata) resultOdeObj.getMetadata(); - assertEquals(jsonMetadataObj.getSrmSource(), OdeSrmMetadata.SrmSource.RSU); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementName(), "unsecuredData"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementType(), "MessageFrame"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); - - // Validate the payload - String expectedPayload = "{\"bytes\":\"001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C000\"}"; - OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); - assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); - assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); - } -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSONTest.java deleted file mode 100644 index 84bb81734..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeSSMJSONTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.json.JSONException; -import org.junit.jupiter.api.Test; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeSsmMetadata; -import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; - -public class Asn1DecodeSSMJSONTest { - private final String json = "{\"metadata\":{\"recordType\":\"ssmTx\",\"securityResultCode\":\"success\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"c4e4e92d-dccc-45f5-813f-7d36795529a0\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-03-15T19:31:02.907835400Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedBy\":\"RSU\",\"sanitized\":false,\"originIp\":\"192.168.0.1\",\"ssmSource\":\"RSU\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"0381004003807C001E120000000005E9C04071A26614C06000040BA000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}}}"; - - @Test - public void testConstructor() { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - assertEquals(properties.getKafkaTopicOdeRawEncodedSSMJson(), "topic.OdeRawEncodedSSMJson"); - } - - @Test - public void testProcess() throws XmlUtilsException, JSONException { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - Asn1DecodeSSMJSON testDecodeSsmJson = new Asn1DecodeSSMJSON(properties); - - OdeAsn1Data resultOdeObj = testDecodeSsmJson.process(json); - - // Validate the metadata - OdeSsmMetadata jsonMetadataObj = (OdeSsmMetadata) resultOdeObj.getMetadata(); - assertEquals(jsonMetadataObj.getSsmSource(), OdeSsmMetadata.SsmSource.RSU); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementName(), "unsecuredData"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementType(), "MessageFrame"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); - - // Validate the payload - String expectedPayload = "{\"bytes\":\"001E120000000005E9C04071A26614C06000040BA000\"}"; - OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); - assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); - assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); - } -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSONTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSONTest.java deleted file mode 100644 index 4df22112f..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/Asn1DecodeTIMJSONTest.java +++ /dev/null @@ -1,47 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -import org.json.JSONException; -import org.junit.jupiter.api.Test; - -import us.dot.its.jpo.ode.OdeProperties; -import us.dot.its.jpo.ode.model.Asn1Encoding.EncodingRule; -import us.dot.its.jpo.ode.model.OdeAsn1Data; -import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.model.OdeMsgMetadata; -import us.dot.its.jpo.ode.model.OdeTimMetadata; -import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; - -public class Asn1DecodeTIMJSONTest { - private final String json = "{\"metadata\":{\"recordType\":\"timMsg\",\"securityResultCode\":\"success\",\"payloadType\":\"us.dot.its.jpo.ode.model.OdeAsn1Payload\",\"serialId\":{\"streamId\":\"9952caf6-81bd-490d-ad95-47dee31c3ba8\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2024-03-15T19:38:48.578500100Z\",\"schemaVersion\":6,\"maxDurationTime\":0,\"recordGeneratedBy\":\"RSU\",\"sanitized\":false,\"originIp\":\"192.168.0.1\"},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.model.OdeHexByteArray\",\"data\":{\"bytes\":\"0381004003807C001F79201000000000012AA366D080729B8987D859717EE22001FFFE4FD0011589D828007E537130FB0B2E2FDC440001F46FFFF002B8B2E46E926E27CE6813D862CB90EDC9B89E11CE2CB8E98F9B89BCC4050518B2E365B66E26AE3B8B2E291A66E2591D8141462CB873969B89396C62CB86AFE9B89208E00000131560018300023E43A6A1351800023E4700EFC51881010100030180C620FB90CAAD3B9C5082080E1DDC905E10168E396921000325A0D73B83279C83010180034801090001260001808001838005008001F0408001828005008001304000041020407E800320409780050080012040000320409900018780032040958005000001E0408183E7139D7B70987019B526B8A950052F5C011D3C4B992143E885C71F95DA6071658082346CC03A50D66801F65288C30AB39673D0494536C559047E457AD291C99C20A7FB1244363E993EE3EE98C78742609340541DA01545A0F7339C26A527903576D30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000\"}}}"; - - @Test - public void testConstructor() { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - assertEquals(properties.getKafkaTopicOdeRawEncodedTIMJson(), "topic.OdeRawEncodedTIMJson"); - } - - @Test - public void testProcess() throws XmlUtilsException, JSONException { - OdeProperties properties = new OdeProperties(); - properties.setKafkaBrokers("localhost:9092"); - Asn1DecodeTIMJSON testDecodeTimJson = new Asn1DecodeTIMJSON(properties); - - OdeAsn1Data resultOdeObj = testDecodeTimJson.process(json); - - // Validate the metadata - OdeTimMetadata jsonMetadataObj = (OdeTimMetadata) resultOdeObj.getMetadata(); - assertEquals(jsonMetadataObj.getRecordGeneratedBy(), OdeMsgMetadata.GeneratedBy.RSU); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementName(), "unsecuredData"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getElementType(), "MessageFrame"); - assertEquals(jsonMetadataObj.getEncodings().get(0).getEncodingRule(), EncodingRule.UPER); - - // Validate the payload - String expectedPayload = "{\"bytes\":\"001F79201000000000012AA366D080729B8987D859717EE22001FFFE4FD0011589D828007E537130FB0B2E2FDC440001F46FFFF002B8B2E46E926E27CE6813D862CB90EDC9B89E11CE2CB8E98F9B89BCC4050518B2E365B66E26AE3B8B2E291A66E2591D8141462CB873969B89396C62CB86AFE9B89208E00000131560018300023E43A6A1351800023E4700EFC51881010100030180C620FB90CAAD3B9C5082080E1DDC905E10168E396921000325A0D73B83279C83010180034801090001260001808001838005008001F0408001828005008001304000041020407E800320409780050080012040000320409900018780032040958005000001E0408183E7139D7B70987019B526B8A950052F5C011D3C4B992143E885C71F95DA6071658082346CC03A50D66801F65288C30AB39673D0494536C559047E457AD291C99C20A7FB1244363E993EE3EE98C78742609340541DA01545A0F7339C26A527903576D300\"}"; - OdeAsn1Payload jsonPayloadObj = (OdeAsn1Payload) resultOdeObj.getPayload(); - assertEquals(jsonPayloadObj.getDataType(), "us.dot.its.jpo.ode.model.OdeHexByteArray"); - assertEquals(jsonPayloadObj.getData().toString(), expectedPayload); - } -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/AsnCodecMessageServiceControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/AsnCodecMessageServiceControllerTest.java deleted file mode 100644 index 2cf131c7e..000000000 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/asn1/message/AsnCodecMessageServiceControllerTest.java +++ /dev/null @@ -1,19 +0,0 @@ -package us.dot.its.jpo.ode.services.asn1.message; - -import static org.junit.Assert.assertNotNull; - -import org.junit.jupiter.api.Test; - -import us.dot.its.jpo.ode.OdeProperties; - -public class AsnCodecMessageServiceControllerTest { - - @Test - public void shouldStartTwoConsumers() { - OdeProperties odeProps = new OdeProperties(); - odeProps.setKafkaBrokers("localhost:9092"); - AsnCodecMessageServiceController asnCodecMessageServiceController = new AsnCodecMessageServiceController(odeProps); - assertNotNull(asnCodecMessageServiceController); - } - -} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/json/ToJsonConverterTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/json/ToJsonConverterTest.java index 44d736835..e259303a4 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/json/ToJsonConverterTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/json/ToJsonConverterTest.java @@ -21,7 +21,7 @@ import mockit.Injectable; import mockit.Mocked; import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; import us.dot.its.jpo.ode.util.JsonUtils; import us.dot.its.jpo.ode.wrapper.MessageProducer; @@ -29,9 +29,9 @@ public class ToJsonConverterTest { @Tested ToJsonConverter testToJsonConverter; - + @Injectable - OdeProperties mockOdeProperties; + OdeKafkaProperties injectableOdeKafkaProperties; @Injectable boolean mockVerbose; @Injectable diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/json/ToJsonServiceControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/json/ToJsonServiceControllerTest.java index b703558d3..68564da35 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/json/ToJsonServiceControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/services/json/ToJsonServiceControllerTest.java @@ -17,17 +17,22 @@ import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; -import mockit.Capturing; import mockit.Expectations; import mockit.Injectable; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.PojoTopics; import us.dot.its.jpo.ode.wrapper.MessageConsumer; import us.dot.its.jpo.ode.wrapper.MessageProcessor; public class ToJsonServiceControllerTest { @Injectable - OdeProperties injectableOdeProperties; + OdeKafkaProperties mockOdeKafkaProperties; + @Injectable + JsonTopics jsonTopics; + @Injectable + PojoTopics pojoTopics; // @Capturing // ToJsonConverter capturingToJsonConverter; @@ -38,7 +43,7 @@ public class ToJsonServiceControllerTest { public void test() { new Expectations() { { - new ToJsonConverter<>((OdeProperties) any, anyBoolean, anyString); + new ToJsonConverter<>((OdeKafkaProperties) any, anyBoolean, anyString); times = 1; new MessageConsumer<>(anyString, anyString, (MessageProcessor) any, anyString); @@ -46,7 +51,7 @@ public void test() { } }; - new ToJsonServiceController(injectableOdeProperties); + new ToJsonServiceController(mockOdeKafkaProperties, jsonTopics, pojoTopics); } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/snmp/SnmpSessionTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/snmp/SnmpSessionTest.java index 16624faa9..65674eae1 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/snmp/SnmpSessionTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/snmp/SnmpSessionTest.java @@ -211,8 +211,6 @@ public void shouldCreatePDUWithNTCIP1218Protocol_dataSigningEnabledRsu_False() t SNMP testParams = new SNMP(rsuSRMPsid, 0, 0, rsuSRMTxChannel, rsuSRMTxInterval, "2017-12-02T17:47:11-05:00", "2017-12-02T17:47:11-05:00", rsuSRMEnable, rsuSRMStatus); - System.setProperty("DATA_SIGNING_ENABLED_RSU", "false"); - boolean rsuDataSigningEnabled = false; // execute diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/storage/FileSystemStorageServiceTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/storage/FileSystemStorageServiceTest.java index a703eceed..e93bade43 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/storage/FileSystemStorageServiceTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/storage/FileSystemStorageServiceTest.java @@ -31,43 +31,32 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; import org.springframework.core.io.UrlResource; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; import org.springframework.util.FileSystemUtils; import org.springframework.web.multipart.MultipartFile; import mockit.Expectations; import mockit.Mocked; import mockit.Verifications; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.coder.stream.FileImporterProperties; +import us.dot.its.jpo.ode.coder.stream.FileImporterProperties; import us.dot.its.jpo.ode.eventlog.EventLogger; +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = FileImporterProperties.class) public class FileSystemStorageServiceTest { - @Mocked - OdeProperties mockOdeProperties; - - @BeforeEach - public void setupOdePropertiesExpectations() { - new Expectations() { - { - mockOdeProperties.getUploadLocationRoot(); - result = anyString; - mockOdeProperties.getUploadLocationObuLog(); - result = anyString; - } - }; - } - - @Test - public void shouldConstruct(@Mocked final Logger mockLogger, @Mocked LoggerFactory unused) { - - FileSystemStorageService testFileSystemStorageService = new FileSystemStorageService(mockOdeProperties); - - assertNotNull(testFileSystemStorageService.getRootLocation()); - - } + @Autowired + private FileImporterProperties fileImporterProperties; @Test @Disabled public void storeShouldThrowExceptionUnknownType(@Mocked MultipartFile mockMultipartFile) { @@ -75,7 +64,7 @@ public void storeShouldThrowExceptionUnknownType(@Mocked MultipartFile mockMulti String unknownType = "test123"; try { - new FileSystemStorageService(mockOdeProperties).store(mockMultipartFile, unknownType); + new FileSystemStorageService(fileImporterProperties).store(mockMultipartFile, unknownType); fail("Expected StorageException"); } catch (Exception e) { assertEquals("Incorrect exception thrown", StorageException.class, e.getClass()); @@ -105,7 +94,7 @@ public void storeShouldTryToResolveBsmFilename(@Mocked MultipartFile mockMultipa }; try { - new FileSystemStorageService(mockOdeProperties).store(mockMultipartFile, testType); + new FileSystemStorageService(fileImporterProperties).store(mockMultipartFile, testType); fail("Expected StorageException"); } catch (Exception e) { assertEquals("Incorrect exception thrown", StorageException.class, e.getClass()); @@ -134,7 +123,7 @@ public void storeShouldThrowAnErrorEmptyFile(@Mocked MultipartFile mockMultipart }; try { - new FileSystemStorageService(mockOdeProperties).store(mockMultipartFile, testType); + new FileSystemStorageService(fileImporterProperties).store(mockMultipartFile, testType); fail("Expected StorageException"); } catch (Exception e) { assertEquals("Incorrect exception thrown", StorageException.class, e.getClass()); @@ -174,7 +163,7 @@ public void storeShouldRethrowDeleteException(@Mocked MultipartFile mockMultipar } try { - new FileSystemStorageService(mockOdeProperties).store(mockMultipartFile, testType); + new FileSystemStorageService(fileImporterProperties).store(mockMultipartFile, testType); fail("Expected StorageException"); } catch (Exception e) { assertEquals("Incorrect exception thrown", StorageException.class, e.getClass()); @@ -218,7 +207,7 @@ public void storeShouldRethrowCopyException(@Mocked MultipartFile mockMultipartF } try { - new FileSystemStorageService(mockOdeProperties).store(mockMultipartFile, testType); + new FileSystemStorageService(fileImporterProperties).store(mockMultipartFile, testType); fail("Expected StorageException"); } catch (Exception e) { assertEquals("Incorrect exception thrown", StorageException.class, e.getClass()); @@ -248,7 +237,7 @@ public void loadAllShouldRethrowException(/**@Mocked Files unused**/) { } try { - new FileSystemStorageService(mockOdeProperties).loadAll(); + new FileSystemStorageService(fileImporterProperties).loadAll(); fail("Expected StorageException"); } catch (Exception e) { assertEquals("Incorrect exception thrown", StorageException.class, e.getClass()); @@ -288,8 +277,7 @@ public void loadAsResourceShouldThrowExceptionWhenFileNotExists( } try { - FileSystemStorageService testFileSystemStorageService = new FileSystemStorageService(mockOdeProperties); - testFileSystemStorageService.setRootLocation(mockRootPath); + FileSystemStorageService testFileSystemStorageService = new FileSystemStorageService(fileImporterProperties); testFileSystemStorageService.loadAsResource("testFile"); fail("Expected StorageFileNotFoundException"); } catch (Exception e) { @@ -325,8 +313,7 @@ public void loadAsResourceShouldThrowExceptionWhenFileNotReadable(@Mocked Path m } try { - FileSystemStorageService testFileSystemStorageService = new FileSystemStorageService(mockOdeProperties); - testFileSystemStorageService.setRootLocation(mockRootPath); + FileSystemStorageService testFileSystemStorageService = new FileSystemStorageService(fileImporterProperties); testFileSystemStorageService.loadAsResource("testFile"); fail("Expected StorageFileNotFoundException"); } catch (Exception e) { @@ -356,8 +343,8 @@ public void loadAsResourceShouldRethrowMalformedURLException(@Mocked Path mockRo } try { - FileSystemStorageService testFileSystemStorageService = new FileSystemStorageService(mockOdeProperties); - testFileSystemStorageService.setRootLocation(mockRootPath); + FileSystemStorageService testFileSystemStorageService = new FileSystemStorageService(fileImporterProperties); + testFileSystemStorageService.loadAsResource("testFile"); fail("Expected StorageFileNotFoundException"); } catch (Exception e) { @@ -392,8 +379,8 @@ public void loadAsResourceShouldReturnResource(@Mocked Path mockRootPath, @Mocke } try { - FileSystemStorageService testFileSystemStorageService = new FileSystemStorageService(mockOdeProperties); - testFileSystemStorageService.setRootLocation(mockRootPath); + FileSystemStorageService testFileSystemStorageService = new FileSystemStorageService(fileImporterProperties); + assertEquals(UrlResource.class, testFileSystemStorageService.loadAsResource("testFile").getClass()); } catch (Exception e) { fail("Unexpected exception: " + e); @@ -403,7 +390,7 @@ public void loadAsResourceShouldReturnResource(@Mocked Path mockRootPath, @Mocke @Test @Disabled public void initShouldCreateDirectories(@Mocked final Files unused) { - new FileSystemStorageService(mockOdeProperties).init(); + new FileSystemStorageService(fileImporterProperties).init(); try { new Verifications() { @@ -432,7 +419,7 @@ public void initShouldRethrowAndLogException(@Mocked final Files unused) { } try { - new FileSystemStorageService(mockOdeProperties).init(); + new FileSystemStorageService(fileImporterProperties).init(); } catch (Exception e) { assertEquals("Incorrect exception thrown.", StorageException.class, e.getClass()); assertTrue("Incorrect exception message", @@ -449,7 +436,7 @@ public void initShouldRethrowAndLogException(@Mocked final Files unused) { @Test @Disabled public void deleteAllShouldDeleteRecursivelyAndLog(@Mocked final FileSystemUtils unused) { - new FileSystemStorageService(mockOdeProperties).deleteAll(); + new FileSystemStorageService(fileImporterProperties).deleteAll(); new Verifications() { { diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/ApprovalTestCase.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/ApprovalTestCase.java new file mode 100644 index 000000000..a743115a9 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/ApprovalTestCase.java @@ -0,0 +1,58 @@ +package us.dot.its.jpo.ode.test.utilities; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.util.ArrayList; +import java.util.List; +import lombok.Getter; +import lombok.Setter; +import org.json.JSONArray; +import org.json.JSONObject; + +/** + * Represents a test case for an approval test, containing a description, input, and expected + * output. + */ +@Getter +@Setter +public class ApprovalTestCase { + + public String description; + public String input; + public String expected; + + /** + * Deserializes a list of approval test cases from a JSON file located at the specified path. The + * JSON file is expected to have a structure where the test cases are contained in an array named + * "cases". Each test case is represented by a JSON object that includes a "description", "input", + * and "expected" field. + * + * @param path the file path to the JSON file containing the test cases + * @return a list of ApprovalTestCase objects deserialized from the JSON file + * @throws IOException if an I/O error occurs while reading the file + */ + public static List deserializeTestCases(String path) throws IOException { + List cases = new ArrayList<>(); + File file = new File(path); + byte[] jsonData = Files.readAllBytes(file.toPath()); + JSONObject jsonObject = new JSONObject(new String(jsonData)); + + JSONArray jsonArray = jsonObject.getJSONArray("cases"); + + for (int i = 0; i < jsonArray.length(); i++) { + ApprovalTestCase approvalTestCase = new ApprovalTestCase(); + JSONObject json = jsonArray.getJSONObject(i); + + approvalTestCase.setDescription(json.getString("description")); + + Object input = json.get("input"); + approvalTestCase.setInput(input.toString()); + + approvalTestCase.setExpected(json.get("expected").toString()); + + cases.add(approvalTestCase); + } + return cases; + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/EmbeddedKafkaHolder.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/EmbeddedKafkaHolder.java new file mode 100644 index 000000000..95fcc5366 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/EmbeddedKafkaHolder.java @@ -0,0 +1,75 @@ +package us.dot.its.jpo.ode.test.utilities; + +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.admin.NewTopic; +import org.springframework.kafka.KafkaException; +import org.springframework.kafka.test.EmbeddedKafkaBroker; + +/** + * The EmbeddedKafkaHolder class is a utility for managing a singleton instance of an embedded Kafka + * broker for testing purposes. It ensures that the embedded Kafka broker is started only once + * throughout the application lifecycle. + * + *

This class initializes an embedded Kafka broker with a specified configuration, which + * includes a single broker and auto-start enabled. The broker list property is set to + * "spring.kafka.bootstrap-servers". + * + *

The embedded Kafka instance is lazily started when the getEmbeddedKafka method is called + * for the first time. If the broker fails to start, a KafkaException is thrown. + * + *

The class is designed to be non-instantiable with a private constructor. + */ +@Slf4j +public final class EmbeddedKafkaHolder { + + private static final EmbeddedKafkaBroker embeddedKafka = new EmbeddedKafkaBroker(1, + true, + 1) + .brokerListProperty("spring.kafka.bootstrap-servers"); + + private static boolean started; + + /** + * Provides access to a singleton instance of an embedded Kafka broker for testing purposes. + * Lazily initializes and starts the broker on the first call with a predefined configuration. If + * the broker fails to start, a KafkaException is thrown. + * + * @return the singleton instance of the embedded Kafka broker + * @throws KafkaException if the embedded broker fails to start + */ + public static EmbeddedKafkaBroker getEmbeddedKafka() { + if (!started) { + try { + embeddedKafka.kafkaPorts(4242); + embeddedKafka.afterPropertiesSet(); + } catch (Exception e) { + throw new KafkaException("Embedded broker failed to start", e); + } + started = true; + } + return embeddedKafka; + } + + /** + * Adds one or more topics to the embedded Kafka broker instance. Each topic will be created + * with a replication factor of 1 and a single partition. If a topic already exists, no action + * is taken, and the exception is ignored. + * + * @param topics one or more topic names to be added to the embedded Kafka broker + */ + public static void addTopics(String... topics) { + for (String topic : topics) { + NewTopic newTopic = new NewTopic(topic, 1, (short) 1); + try { + embeddedKafka.addTopics(newTopic); + } catch (Exception e) { + // Ignore because we only care they are created not that they weren't created prior + log.debug("exception adding topic {} to embedded kafka broker", topic, e); + } + } + } + + private EmbeddedKafkaHolder() { + super(); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/TestUDPClient.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/TestUDPClient.java new file mode 100644 index 000000000..316aa4aad --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/test/utilities/TestUDPClient.java @@ -0,0 +1,51 @@ +package us.dot.its.jpo.ode.test.utilities; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import java.net.SocketException; +import java.net.UnknownHostException; +import lombok.extern.slf4j.Slf4j; +import org.apache.tomcat.util.buf.HexUtils; + +/** + * TestUDPClient is a utility class used for sending UDP packets to a specified port. It + * encapsulates the creation of a DatagramSocket and the logic to send data packets to a local + * server. + */ +@Slf4j +public class TestUDPClient { + + private final DatagramSocket socket; + private final InetAddress address; + private final int sendPort; + + /** + * Constructs a new TestUDPClient instance configured to send UDP packets to the specified port on + * the localhost. + * + * @param port the port number on the localhost to which UDP packets will be sent + * @throws SocketException if there is an error creating the DatagramSocket + * @throws UnknownHostException if the local host cannot be resolved + */ + public TestUDPClient(int port) throws SocketException, UnknownHostException { + socket = new DatagramSocket(); + address = InetAddress.getByName("localhost"); + sendPort = port; + } + + /** + * Sends a UDP packet containing the specified message to the configured port on the localhost. + * The message is converted from a hexadecimal string to a byte array before being sent. + * + * @param msg the message to be sent, represented as a hexadecimal string + * @throws IOException if an I/O error occurs during the sending process + */ + public void send(String msg) throws IOException { + byte[] buf = HexUtils.fromHexString(msg); + + DatagramPacket packet = new DatagramPacket(buf, buf.length, address, sendPort); + socket.send(packet); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDeleteControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDeleteControllerTest.java index 1721cda64..ae7cd763e 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDeleteControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDeleteControllerTest.java @@ -20,6 +20,7 @@ import java.io.IOException; +import mockit.*; import org.junit.jupiter.api.Test; import org.snmp4j.PDU; import org.snmp4j.Snmp; @@ -27,22 +28,17 @@ import org.snmp4j.event.ResponseEvent; import org.springframework.http.HttpStatus; -import mockit.Capturing; -import mockit.Expectations; -import mockit.Injectable; -import mockit.Mocked; -import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.plugin.RoadSideUnit.RSU; +import us.dot.its.jpo.ode.rsu.RsuProperties; import us.dot.its.jpo.ode.snmp.SnmpSession; public class TimDeleteControllerTest { @Tested TimDeleteController testTimDeleteController; - + @Injectable - OdeProperties injectableOdeProperties; + RsuProperties injectableRsuProperties; @Capturing SnmpSession capturingSnmpSession; diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java index 911a77919..53ba2bead 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimDepositControllerTest.java @@ -1,177 +1,223 @@ /******************************************************************************* - * Copyright 2018 572682 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * Copyright 2018 572682. + * + *

Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy - * of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software + * of the License at

+ * + *

http://www.apache.org/licenses/LICENSE-2.0

+ * + *

Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under - * the License. + * the License.

******************************************************************************/ + package us.dot.its.jpo.ode.traveler; import static org.junit.Assert.assertEquals; -import org.apache.commons.io.IOUtils; -import org.junit.jupiter.api.Test; -import org.springframework.http.ResponseEntity; - import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ObjectNode; - import mockit.Capturing; import mockit.Expectations; import mockit.Injectable; import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; +import org.apache.commons.io.IOUtils; +import org.junit.jupiter.api.Test; +import org.springframework.http.ResponseEntity; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.Asn1CoderTopics; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.topics.PojoTopics; import us.dot.its.jpo.ode.model.OdeMsgMetadata; import us.dot.its.jpo.ode.model.SerialId; import us.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData; import us.dot.its.jpo.ode.plugin.j2735.builders.TravelerMessageFromHumanToAsnConverter; +import us.dot.its.jpo.ode.security.SecurityServicesProperties; import us.dot.its.jpo.ode.util.JsonUtils.JsonUtilsException; import us.dot.its.jpo.ode.util.XmlUtils; import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; import us.dot.its.jpo.ode.wrapper.MessageProducer; -public class TimDepositControllerTest { - - @Tested - TimDepositController testTimDepositController; - - @Injectable - OdeProperties injectableOdeProperties; - - @Capturing - MessageProducer capturingMessageProducer; - - @Test - public void nullRequestShouldReturnEmptyError() { - ResponseEntity actualResponse = testTimDepositController.postTim(null); - assertEquals("{\"error\":\"Empty request.\"}", actualResponse.getBody()); - } - - @Test - public void emptyRequestShouldReturnEmptyError() { - ResponseEntity actualResponse = testTimDepositController.postTim(""); - assertEquals("{\"error\":\"Empty request.\"}", actualResponse.getBody()); - } - - @Test - public void invalidJsonSyntaxShouldReturnJsonSyntaxError() { - ResponseEntity actualResponse = testTimDepositController.postTim("{\"in\"va}}}on\"}}"); - assertEquals("{\"error\":\"Malformed or non-compliant JSON syntax.\"}", actualResponse.getBody()); - } - - @Test - public void missingRequestElementShouldReturnMissingRequestError() { - ResponseEntity actualResponse = testTimDepositController.postTim("{\"tim\":{}}"); - assertEquals("{\"error\":\"Missing or invalid argument: Request element is required as of version 3.\"}", - actualResponse.getBody()); - } - - @Test - public void invalidTimestampShouldReturnInvalidTimestampError() { - ResponseEntity actualResponse = testTimDepositController - .postTim("{\"request\":{},\"tim\":{\"timeStamp\":\"201-03-13T01:07:11-05:00\"}}"); - assertEquals("{\"error\":\"Invalid timestamp in tim record: 201-03-13T01:07:11-05:00\"}", - actualResponse.getBody()); - } - - @Test - public void messageWithNoRSUsOrSDWShouldReturnWarning() { - ResponseEntity actualResponse = testTimDepositController - .postTim("{\"request\":{},\"tim\":{\"timeStamp\":\"2018-03-13T01:07:11-05:00\"}}"); - assertEquals( - "{\"warning\":\"Warning: TIM contains no RSU, SNMP, or SDW fields. Message only published to broadcast streams.\"}", - actualResponse.getBody()); - } - - @Test - public void failedObjectNodeConversionShouldReturnConvertingError( - @Capturing TravelerMessageFromHumanToAsnConverter capturingTravelerMessageFromHumanToAsnConverter) - throws JsonUtilsException { - - new Expectations() { - - { - TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim((JsonNode) any); - result = new JsonUtilsException("testException123", null); - } - }; - - ResponseEntity actualResponse = testTimDepositController.postTim( - "{\"request\":{\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); - assertEquals("{\"error\":\"Error converting to encodable TravelerInputData.\"}", actualResponse.getBody()); - } - - @Test - public void failedXmlConversionShouldReturnConversionError(@Capturing TimTransmogrifier capturingTimTransmogrifier) - throws XmlUtilsException, JsonUtilsException { - - new Expectations() { - { - TimTransmogrifier.convertToXml((DdsAdvisorySituationData) any, (ObjectNode) any, (OdeMsgMetadata) any, - (SerialId) any); - result = new XmlUtilsException("testException123", null); - } - }; - - ResponseEntity actualResponse = testTimDepositController.postTim( - "{\"request\":{\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); - assertEquals("{\"error\":\"Error sending data to ASN.1 Encoder module: testException123\"}", - actualResponse.getBody()); - - } - - @Test - public void testSuccessfulMessageReturnsSuccessMessagePost(@Capturing TimTransmogrifier capturingTimTransmogrifier, @Capturing XmlUtils capturingXmlUtils) { - ResponseEntity actualResponse = testTimDepositController.postTim( - "{\"request\":{\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); - assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); - } - - @Test - public void testSuccessfullSdwRequestMessageReturnsSuccessMessagePost() - throws Exception { - String file = "/sdwRequest.json"; - String json = IOUtils.toString( - TimDepositControllerTest.class.getResourceAsStream(file), - "UTF-8"); - ResponseEntity actualResponse = testTimDepositController.postTim(json); - assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); - } - - @Test - public void testSuccessfulMessageReturnsSuccessMessagePostWithOde(@Capturing TimTransmogrifier capturingTimTransmogrifier, @Capturing XmlUtils capturingXmlUtils) { - ResponseEntity actualResponse = testTimDepositController.postTim( - "{\"request\":{\"ode\":{},\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); - assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); - } - - @Test - public void testSuccessfulMessageReturnsSuccessMessagePut(@Capturing TimTransmogrifier capturingTimTransmogrifier, @Capturing XmlUtils capturingXmlUtils) { - ResponseEntity actualResponse = testTimDepositController.putTim( - "{\"request\":{\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); - assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); - } - - @Test - public void testDepositingTimWithExtraProperties(@Capturing TimTransmogrifier capturingTimTransmogrifier, @Capturing XmlUtils capturingXmlUtils) { - String timToSubmit = "{\"request\":{\"rsus\":[],\"snmp\":{},\"randomProp1\":true,\"randomProp2\":\"hello world\"},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"randomProp3\":123,\"randomProp4\":{\"nestedProp1\":\"foo\",\"nestedProp2\":\"bar\"}}}"; - ResponseEntity actualResponse = testTimDepositController.postTim(timToSubmit); - assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); - } - - @Test - public void testSuccessfulRsuMessageReturnsSuccessMessagePost(@Capturing TimTransmogrifier capturingTimTransmogrifier, @Capturing XmlUtils capturingXmlUtils) { - String timToSubmit = "{\"request\": {\"rsus\": [{\"latitude\": 30.123456, \"longitude\": -100.12345, \"rsuId\": 123, \"route\": \"myroute\", \"milepost\": 10, \"rsuTarget\": \"172.0.0.1\", \"rsuRetries\": 3, \"rsuTimeout\": 5000, \"rsuIndex\": 7, \"rsuUsername\": \"myusername\", \"rsuPassword\": \"mypassword\"}], \"snmp\": {\"rsuid\": \"83\", \"msgid\": 31, \"mode\": 1, \"channel\": 183, \"interval\": 2000, \"deliverystart\": \"2024-05-13T14:30:00Z\", \"deliverystop\": \"2024-05-13T22:30:00Z\", \"enable\": 1, \"status\": 4}}, \"tim\": {\"msgCnt\": \"1\", \"timeStamp\": \"2024-05-10T19:01:22Z\", \"packetID\": \"123451234512345123\", \"urlB\": \"null\", \"dataframes\": [{\"startDateTime\": \"2024-05-13T20:30:05.014Z\", \"durationTime\": \"30\", \"sspTimRights\": \"1\", \"frameType\": \"advisory\", \"msgId\": {\"roadSignID\": {\"mutcdCode\": \"warning\", \"viewAngle\": \"1111111111111111\", \"position\": {\"latitude\": 30.123456, \"longitude\": -100.12345}}}, \"priority\": \"5\", \"sspLocationRights\": \"1\", \"regions\": [{\"name\": \"I_myroute_RSU_172.0.0.1\", \"anchorPosition\": {\"latitude\": 30.123456, \"longitude\": -100.12345}, \"laneWidth\": \"50\", \"directionality\": \"3\", \"closedPath\": \"false\", \"description\": \"path\", \"path\": {\"scale\": 0, \"nodes\": [{\"delta\": \"node-LL\", \"nodeLat\": 0.0, \"nodeLong\": 0.0}, {\"delta\": \"node-LL\", \"nodeLat\": 0.0, \"nodeLong\": 0.0}], \"type\": \"ll\"}, \"direction\": \"0000000000010000\"}], \"sspMsgTypes\": \"1\", \"sspMsgContent\": \"1\", \"content\": \"workZone\", \"items\": [\"771\"], \"url\": \"null\"}]}}"; - ResponseEntity actualResponse = testTimDepositController.postTim(timToSubmit); - assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); - } + +class TimDepositControllerTest { + + @Tested + TimDepositController testTimDepositController; + + @Injectable + OdeKafkaProperties injectableOdeKafkaProperties; + + @Injectable + Asn1CoderTopics injectableAsn1CoderTopics; + + @Injectable + PojoTopics injectablePojoTopics; + + @Injectable + JsonTopics injectableJsonTopics; + + @Injectable + TimIngestTrackerProperties injectableTimIngestTrackerProperties; + + @Injectable + SecurityServicesProperties injectableSecurityServicesProperties; + + @Capturing + MessageProducer capturingMessageProducer; + + @Test + void nullRequestShouldReturnEmptyError() { + ResponseEntity actualResponse = testTimDepositController.postTim(null); + assertEquals("{\"error\":\"Empty request.\"}", actualResponse.getBody()); + } + + @Test + void emptyRequestShouldReturnEmptyError() { + ResponseEntity actualResponse = testTimDepositController.postTim(""); + assertEquals("{\"error\":\"Empty request.\"}", actualResponse.getBody()); + } + + @Test + void invalidJsonSyntaxShouldReturnJsonSyntaxError() { + ResponseEntity actualResponse = testTimDepositController.postTim("{\"in\"va}}}on\"}}"); + assertEquals("{\"error\":\"Malformed or non-compliant JSON syntax.\"}", + actualResponse.getBody()); + } + + @Test + void missingRequestElementShouldReturnMissingRequestError() { + ResponseEntity actualResponse = testTimDepositController.postTim("{\"tim\":{}}"); + assertEquals( + "{\"error\":\"Missing or invalid argument: Request element is required as of version 3.\"}", + actualResponse.getBody()); + } + + @Test + void invalidTimestampShouldReturnInvalidTimestampError() { + ResponseEntity actualResponse = testTimDepositController.postTim( + "{\"request\":{},\"tim\":{\"timeStamp\":\"201-03-13T01:07:11-05:00\"}}"); + assertEquals("{\"error\":\"Invalid timestamp in tim record: 201-03-13T01:07:11-05:00\"}", + actualResponse.getBody()); + } + + @Test + void messageWithNoRSUsOrSDWShouldReturnWarning() { + ResponseEntity actualResponse = testTimDepositController.postTim( + "{\"request\":{},\"tim\":{\"timeStamp\":\"2018-03-13T01:07:11-05:00\"}}"); + assertEquals( + "{\"warning\":\"Warning: TIM contains no RSU, SNMP, or SDW fields. Message only published to broadcast streams.\"}", + actualResponse.getBody()); + } + + @Test + void failedObjectNodeConversionShouldReturnConvertingError(@Capturing + TravelerMessageFromHumanToAsnConverter capturingTravelerMessageFromHumanToAsnConverter) + throws JsonUtilsException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { + + new Expectations() { + + { + TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim( + (JsonNode) any); + result = new JsonUtilsException("testException123", null); + } + }; + + ResponseEntity actualResponse = testTimDepositController.postTim( + "{\"request\":{\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); + assertEquals("{\"error\":\"Error converting to encodable TravelerInputData.\"}", + actualResponse.getBody()); + } + + @Test + void failedXmlConversionShouldReturnConversionError( + @Capturing TimTransmogrifier capturingTimTransmogrifier) + throws XmlUtilsException, JsonUtilsException { + + new Expectations() { + { + TimTransmogrifier.convertToXml((DdsAdvisorySituationData) any, (ObjectNode) any, + (OdeMsgMetadata) any, (SerialId) any); + result = new XmlUtilsException("testException123", null); + } + }; + + ResponseEntity actualResponse = testTimDepositController.postTim( + "{\"request\":{\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); + assertEquals("{\"error\":\"Error sending data to ASN.1 Encoder module: testException123\"}", + actualResponse.getBody()); + + } + + @Test + void testSuccessfulMessageReturnsSuccessMessagePost( + @Capturing TimTransmogrifier capturingTimTransmogrifier, + @Capturing XmlUtils capturingXmlUtils) { + ResponseEntity actualResponse = testTimDepositController.postTim( + "{\"request\":{\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); + assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); + } + + @Test + void testSuccessfullSdwRequestMessageReturnsSuccessMessagePost() throws Exception { + String file = "/sdwRequest.json"; + String json = + IOUtils.toString(TimDepositControllerTest.class.getResourceAsStream(file), "UTF-8"); + ResponseEntity actualResponse = testTimDepositController.postTim(json); + assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); + } + + @Test + void testSuccessfulMessageReturnsSuccessMessagePostWithOde( + @Capturing TimTransmogrifier capturingTimTransmogrifier, + @Capturing XmlUtils capturingXmlUtils) { + ResponseEntity actualResponse = testTimDepositController.postTim( + "{\"request\":{\"ode\":{},\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); + assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); + } + + @Test + void testSuccessfulMessageReturnsSuccessMessagePut( + @Capturing TimTransmogrifier capturingTimTransmogrifier, + @Capturing XmlUtils capturingXmlUtils) { + ResponseEntity actualResponse = testTimDepositController.putTim( + "{\"request\":{\"rsus\":[],\"snmp\":{}},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\"}}"); + assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); + } + + @Test + void testDepositingTimWithExtraProperties( + @Capturing TimTransmogrifier capturingTimTransmogrifier, + @Capturing XmlUtils capturingXmlUtils) { + String timToSubmit = + "{\"request\":{\"rsus\":[],\"snmp\":{},\"randomProp1\":true,\"randomProp2\":\"hello world\"},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"randomProp3\":123,\"randomProp4\":{\"nestedProp1\":\"foo\",\"nestedProp2\":\"bar\"}}}"; + ResponseEntity actualResponse = testTimDepositController.postTim(timToSubmit); + assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); + } + + @Test + void testSuccessfulTimIngestIsTracked( + @Capturing TimTransmogrifier capturingTimTransmogrifier, + @Capturing XmlUtils capturingXmlUtils) { + String timToSubmit = + "{\"request\":{\"rsus\":[],\"snmp\":{},\"randomProp1\":true,\"randomProp2\":\"hello world\"},\"tim\":{\"msgCnt\":\"13\",\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"randomProp3\":123,\"randomProp4\":{\"nestedProp1\":\"foo\",\"nestedProp2\":\"bar\"}}}"; + long priorIngestCount = TimIngestTracker.getInstance().getTotalMessagesReceived(); + ResponseEntity actualResponse = testTimDepositController.postTim(timToSubmit); + assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); + assertEquals(priorIngestCount + 1, TimIngestTracker.getInstance().getTotalMessagesReceived()); + } + + // This serves as an integration test without mocking the TimTransmogrifier and XmlUtils@Test + void testSuccessfulRsuMessageReturnsSuccessMessagePost( + ) { + String timToSubmit = + "{\"request\": {\"rsus\": [{\"latitude\": 30.123456, \"longitude\": -100.12345, \"rsuId\": 123, \"route\": \"myroute\", \"milepost\": 10, \"rsuTarget\": \"172.0.0.1\", \"rsuRetries\": 3, \"rsuTimeout\": 5000, \"rsuIndex\": 7, \"rsuUsername\": \"myusername\", \"rsuPassword\": \"mypassword\"}], \"snmp\": {\"rsuid\": \"83\", \"msgid\": 31, \"mode\": 1, \"channel\": 183, \"interval\": 2000, \"deliverystart\": \"2024-05-13T14:30:00Z\", \"deliverystop\": \"2024-05-13T22:30:00Z\", \"enable\": 1, \"status\": 4}}, \"tim\": {\"msgCnt\": \"1\", \"timeStamp\": \"2024-05-10T19:01:22Z\", \"packetID\": \"123451234512345123\", \"urlB\": \"null\", \"dataframes\": [{\"startDateTime\": \"2024-05-13T20:30:05.014Z\", \"durationTime\": \"30\", \"doNotUse1\": 0, \"frameType\": \"advisory\", \"msgId\": {\"roadSignID\": {\"mutcdCode\": \"warning\", \"viewAngle\": \"1111111111111111\", \"position\": {\"latitude\": 30.123456, \"longitude\": -100.12345}}}, \"priority\": \"5\", \"doNotUse2\": 0, \"regions\": [{\"name\": \"I_myroute_RSU_172.0.0.1\", \"anchorPosition\": {\"latitude\": 30.123456, \"longitude\": -100.12345}, \"laneWidth\": \"50\", \"directionality\": \"3\", \"closedPath\": \"false\", \"description\": \"path\", \"path\": {\"scale\": 0, \"nodes\": [{\"delta\": \"node-LL\", \"nodeLat\": 0.0, \"nodeLong\": 0.0}, {\"delta\": \"node-LL\", \"nodeLat\": 0.0, \"nodeLong\": 0.0}], \"type\": \"ll\"}, \"direction\": \"0000000000010000\"}], \"doNotUse4\": 0, \"doNotUse3\": 0, \"content\": \"workZone\", \"items\": [\"771\"], \"url\": \"null\"}]}}"; + ResponseEntity actualResponse = testTimDepositController.postTim(timToSubmit); + assertEquals("{\"success\":\"true\"}", actualResponse.getBody()); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestPropertiesValidatorTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestPropertiesValidatorTest.java new file mode 100644 index 000000000..4cd4fc812 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestPropertiesValidatorTest.java @@ -0,0 +1,42 @@ +package us.dot.its.jpo.ode.traveler; + +import org.junit.jupiter.api.Test; +import org.springframework.validation.BeanPropertyBindingResult; + +import static org.junit.jupiter.api.Assertions.*; + +class TimIngestPropertiesValidatorTest { + + @Test + void supports() { + TimIngestPropertiesValidator validator = new TimIngestPropertiesValidator(); + assertTrue(validator.supports(TimIngestTrackerProperties.class)); + assertFalse(validator.supports(Object.class)); + } + + @Test + void validate() { + TimIngestTrackerProperties properties = new TimIngestTrackerProperties(); + properties.setTrackingEnabled(true); + properties.setInterval(1); + + TimIngestPropertiesValidator validator = new TimIngestPropertiesValidator(); + BeanPropertyBindingResult errors = new BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertFalse(errors.hasErrors()); + } + + @Test + void errorThrownForInvalidMonitoringInterval() { + TimIngestTrackerProperties properties = new TimIngestTrackerProperties(); + properties.setTrackingEnabled(true); + properties.setInterval(0); + + TimIngestPropertiesValidator validator = new TimIngestPropertiesValidator(); + BeanPropertyBindingResult errors = new BeanPropertyBindingResult(properties, "properties"); + validator.validate(properties, errors); + + assertTrue(errors.hasErrors()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestTrackerPropertiesTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestTrackerPropertiesTest.java new file mode 100644 index 000000000..443b0fdfb --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestTrackerPropertiesTest.java @@ -0,0 +1,30 @@ +package us.dot.its.jpo.ode.traveler; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.junit.jupiter.api.Assertions.*; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = TimIngestTrackerProperties.class) +class TimIngestTrackerPropertiesTest { + + @Autowired + TimIngestTrackerProperties timIngestTrackerProperties; + + @Test + void isTrackingEnabled() { + assertTrue(timIngestTrackerProperties.isTrackingEnabled()); + } + + @Test + void getMonitoringInterval() { + assertEquals(10, timIngestTrackerProperties.getInterval()); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestTrackerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestTrackerTest.java new file mode 100644 index 000000000..f9ae23735 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestTrackerTest.java @@ -0,0 +1,25 @@ +package us.dot.its.jpo.ode.traveler; + +import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import org.junit.jupiter.api.Test; + +public class TimIngestTrackerTest { + + @Test + public void testCanIncrementTotalMessagesReceived() { + TimIngestTracker testTimIngestTracker = TimIngestTracker.getInstance(); + long priorCount = testTimIngestTracker.getTotalMessagesReceived(); + testTimIngestTracker.incrementTotalMessagesReceived(); + assertTrue(testTimIngestTracker.getTotalMessagesReceived() > priorCount); + } + + @Test + public void testCanResetTotalMessagesReceived() { + TimIngestTracker testTimIngestTracker = TimIngestTracker.getInstance(); + testTimIngestTracker.incrementTotalMessagesReceived(); + assertTrue(testTimIngestTracker.getTotalMessagesReceived()> 0); + testTimIngestTracker.resetTotalMessagesReceived(); + assertEquals(0, testTimIngestTracker.getTotalMessagesReceived()); + } +} diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestWatcherTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestWatcherTest.java new file mode 100644 index 000000000..51947277d --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimIngestWatcherTest.java @@ -0,0 +1,18 @@ +package us.dot.its.jpo.ode.traveler; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +public class TimIngestWatcherTest { + + @Test + public void testRun() { + TimIngestWatcher watcher = new TimIngestWatcher(0); + watcher.run(); + + // we can't easily test that the run method wrote the correct log message, but we can test that it reset the total messages received after running + TimIngestTracker testTimIngestTracker = TimIngestTracker.getInstance(); + assertEquals(0, testTimIngestTracker.getTotalMessagesReceived()); + } + +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimQueryControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimQueryControllerTest.java index f5a417461..fff9aecdd 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimQueryControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimQueryControllerTest.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -15,13 +15,7 @@ ******************************************************************************/ package us.dot.its.jpo.ode.traveler; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -import java.io.IOException; -import java.util.Vector; - +import mockit.*; import org.junit.jupiter.api.Test; import org.snmp4j.PDU; import org.snmp4j.Snmp; @@ -30,461 +24,460 @@ import org.snmp4j.smi.VariableBinding; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; - -import mockit.Capturing; -import mockit.Expectations; -import mockit.Injectable; -import mockit.Mocked; -import mockit.Tested; -import us.dot.its.jpo.ode.OdeProperties; import us.dot.its.jpo.ode.plugin.RoadSideUnit.RSU; +import us.dot.its.jpo.ode.rsu.RsuProperties; import us.dot.its.jpo.ode.snmp.SnmpSession; -public class TimQueryControllerTest { - - @Tested - TimQueryController testTimQueryController; - - @Injectable - OdeProperties mockOdeProperties; - - @Capturing - SnmpSession capturingSnmpSession; - - @Mocked - Snmp mockSnmp; - @Mocked - ResponseEvent mockResponseEvent; - @Mocked - PDU mockPDU; - - private String defaultRSU = "{\"rsuTarget\":\"10.10.10.10\",\"rsuUsername\":\"user\",\"rsuPassword\":\"pass\",\"rsuRetries\":\"3\",\"rsuTimeout\":\"5000\"}"; - private String fourDot1RSU = "{\"rsuTarget\":\"10.10.10.10\",\"rsuUsername\":\"user\",\"rsuPassword\":\"pass\",\"rsuRetries\":\"3\",\"rsuTimeout\":\"5000\",\"snmpProtocol\":\"FOURDOT1\"}"; - private String ntcip1218RSU = "{\"rsuTarget\":\"10.10.10.10\",\"rsuUsername\":\"user\",\"rsuPassword\":\"pass\",\"rsuRetries\":\"3\",\"rsuTimeout\":\"5000\",\"snmpProtocol\":\"NTCIP1218\"}"; - - @Test - public void nullRequestShouldReturnError() { - ResponseEntity result = testTimQueryController.bulkQuery(null); - assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode()); - assertEquals("{\"error\":\"Empty request.\"}", result.getBody()); - } - - @Test - public void emptyRequestShouldReturnError() { - ResponseEntity result = testTimQueryController.bulkQuery(""); - assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode()); - assertEquals("{\"error\":\"Empty request.\"}", result.getBody()); - } - - @Test - public void snmpSessionExceptionShouldReturnError() { - try { - new Expectations() { +import java.io.IOException; +import java.util.Vector; + +import static org.junit.jupiter.api.Assertions.*; + +class TimQueryControllerTest { + + @Tested + TimQueryController testTimQueryController; + + @Injectable + RsuProperties mockRsuProperties; + + @Capturing + SnmpSession capturingSnmpSession; + + @Mocked + Snmp mockSnmp; + @Mocked + ResponseEvent mockResponseEvent; + @Mocked + PDU mockPDU; + + private final String defaultRSU = "{\"rsuTarget\":\"10.10.10.10\",\"rsuUsername\":\"user\",\"rsuPassword\":\"pass\",\"rsuRetries\":\"3\",\"rsuTimeout\":\"5000\"}"; + private final String fourDot1RSU = "{\"rsuTarget\":\"10.10.10.10\",\"rsuUsername\":\"user\",\"rsuPassword\":\"pass\",\"rsuRetries\":\"3\",\"rsuTimeout\":\"5000\",\"snmpProtocol\":\"FOURDOT1\"}"; + private final String ntcip1218RSU = "{\"rsuTarget\":\"10.10.10.10\",\"rsuUsername\":\"user\",\"rsuPassword\":\"pass\",\"rsuRetries\":\"3\",\"rsuTimeout\":\"5000\",\"snmpProtocol\":\"NTCIP1218\"}"; + + @Test + void nullRequestShouldReturnError() { + ResponseEntity result = testTimQueryController.bulkQuery(null); + assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode()); + assertEquals("{\"error\":\"Empty request.\"}", result.getBody()); + } + + @Test + void emptyRequestShouldReturnError() { + ResponseEntity result = testTimQueryController.bulkQuery(""); + assertEquals(HttpStatus.BAD_REQUEST, result.getStatusCode()); + assertEquals("{\"error\":\"Empty request.\"}", result.getBody()); + } + + @Test + void snmpSessionExceptionShouldReturnError() { + try { + new Expectations() { + { + new SnmpSession((RSU) any); + result = new IOException("testException123"); + } + }; + } catch (IOException e) { + fail("Unexpected exception in expectations block: " + e); + } + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); + } + + @Test + void snmpSessionExceptionShouldReturnError_fourDot1RSU() { + try { + new Expectations() { + { + new SnmpSession((RSU) any); + result = new IOException("testException123"); + } + }; + } catch (IOException e) { + fail("Unexpected exception in expectations block: " + e); + } + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); + } + + @Test + void snmpSessionExceptionShouldReturnError_ntcip1218RSU() { + try { + new Expectations() { + { + new SnmpSession((RSU) any); + result = new IOException("testException123"); + } + }; + } catch (IOException e) { + fail("Unexpected exception in expectations block: " + e); + } + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); + } + + @Test + void snmpSessionListenExceptionShouldReturnError() { + try { + new Expectations() { + { + capturingSnmpSession.startListen(); + result = new IOException("testException123"); + } + }; + } catch (IOException e) { + fail("Unexpected exception in expectations block: " + e); + } + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); + } + + @Test + void snmpSessionListenExceptionShouldReturnError_fourDot1RSU() { + try { + new Expectations() { + { + capturingSnmpSession.startListen(); + result = new IOException("testException123"); + } + }; + } catch (IOException e) { + fail("Unexpected exception in expectations block: " + e); + } + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); + } + + @Test + void snmpSessionListenExceptionShouldReturnError_ntcip1218RSU() { + try { + new Expectations() { + { + capturingSnmpSession.startListen(); + result = new IOException("testException123"); + } + }; + } catch (IOException e) { + fail("Unexpected exception in expectations block: " + e); + } + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); + assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); + } + + @Test + void testNullResponseReturnsTimeout() throws IOException { + new Expectations() { + { + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = null; + } + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); + assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); + } + + @Test + void testNullResponseReturnsTimeout_fourDot1RSU() throws IOException { + new Expectations() { { - new SnmpSession((RSU) any); - result = new IOException("testException123"); + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = null; } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); - } - - @Test - public void snmpSessionExceptionShouldReturnError_fourDot1RSU() { - try { - new Expectations() { + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); + assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); + } + + @Test + void testNullResponseReturnsTimeout_ntcip1218RSU() throws IOException { + new Expectations() { { - new SnmpSession((RSU) any); - result = new IOException("testException123"); + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = null; } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); - } - - @Test - public void snmpSessionExceptionShouldReturnError_ntcip1218RSU() { - try { - new Expectations() { + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); + assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); + } + + @Test + void testNullResponseResponseReturnsTimeout() throws IOException { + new Expectations() { { - new SnmpSession((RSU) any); - result = new IOException("testException123"); + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = mockResponseEvent; + + mockResponseEvent.getResponse(); + result = null; } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); - } - - @Test - public void snmpSessionListenExceptionShouldReturnError() { - try { - new Expectations() { + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); + assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); + } + + @Test + void testNullResponseResponseReturnsTimeout_fourDot1RSU() throws IOException { + new Expectations() { { - capturingSnmpSession.startListen(); - result = new IOException("testException123"); + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = mockResponseEvent; + + mockResponseEvent.getResponse(); + result = null; } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); - } - - @Test - public void snmpSessionListenExceptionShouldReturnError_fourDot1RSU() { - try { - new Expectations() { + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); + assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); + } + + @Test + void testNullResponseResponseReturnsTimeout_ntcip1218RSU() throws IOException { + new Expectations() { { - capturingSnmpSession.startListen(); - result = new IOException("testException123"); + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = mockResponseEvent; + + mockResponseEvent.getResponse(); + result = null; } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); - } - - @Test - public void snmpSessionListenExceptionShouldReturnError_ntcip1218RSU() { - try { - new Expectations() { + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); + assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); + } + + @Test + void testSuccessfulQuery() throws IOException { + new Expectations() { { - capturingSnmpSession.startListen(); - result = new IOException("testException123"); + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = mockResponseEvent; + + mockResponseEvent.getResponse(); + result = mockPDU; + + mockPDU.getVariableBindings(); + result = new Vector(); } - }; - } catch (IOException e) { - fail("Unexpected exception in expectations block: " + e); - } - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); - assertEquals(HttpStatus.INTERNAL_SERVER_ERROR, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Failed to create SNMP session.")); - } - - @Test - public void testNullResponseReturnsTimeout() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = null; - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); - assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); - } - - @Test - public void testNullResponseReturnsTimeout_fourDot1RSU() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = null; - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); - assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); - } - - @Test - public void testNullResponseReturnsTimeout_ntcip1218RSU() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = null; - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); - assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); - } - - @Test - public void testNullResponseResponseReturnsTimeout() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = mockResponseEvent; - - mockResponseEvent.getResponse(); - result = null; - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); - assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); - } - - @Test - public void testNullResponseResponseReturnsTimeout_fourDot1RSU() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = mockResponseEvent; - - mockResponseEvent.getResponse(); - result = null; - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); - assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); - } - - @Test - public void testNullResponseResponseReturnsTimeout_ntcip1218RSU() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = mockResponseEvent; - - mockResponseEvent.getResponse(); - result = null; - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); - assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Timeout, no response from RSU.")); - } - - @Test - public void testSuccessfulQuery() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = mockResponseEvent; - - mockResponseEvent.getResponse(); - result = mockPDU; - - mockPDU.getVariableBindings(); - result = new Vector(); - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); - assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("indicies_set")); - } - - @Test - public void testSuccessfulQuery_fourDot1RSU() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = mockResponseEvent; - - mockResponseEvent.getResponse(); - result = mockPDU; - - mockPDU.getVariableBindings(); - result = new Vector(); - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); - assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("indicies_set")); - } - - @Test - public void testSuccessfulQuery_ntcip1218RSU() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = mockResponseEvent; - - mockResponseEvent.getResponse(); - result = mockPDU; - - mockPDU.getVariableBindings(); - result = new Vector(); - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); - assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("indicies_set")); - } - - @Test - public void testSuccessfulPopulatedQuery() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = mockResponseEvent; - - mockResponseEvent.getResponse(); - result = mockPDU; - - Vector fakeVector = new Vector(); - fakeVector.add(new VariableBinding()); - - mockPDU.getVariableBindings(); - result = fakeVector; - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); - assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("indicies_set")); - } - - @Test - public void testSuccessfulPopulatedQuery_fourDot1RSU() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = mockResponseEvent; - - mockResponseEvent.getResponse(); - result = mockPDU; - - Vector fakeVector = new Vector(); - fakeVector.add(new VariableBinding()); - - mockPDU.getVariableBindings(); - result = fakeVector; - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); - assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("indicies_set")); - } - - @Test - public void testSuccessfulPopulatedQuery_ntcip1218RSU() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuSrmSlots(); - result = 1; - - capturingSnmpSession.getSnmp(); - result = mockSnmp; - - mockSnmp.send((PDU) any, (UserTarget) any); - result = mockResponseEvent; - - mockResponseEvent.getResponse(); - result = mockPDU; - - Vector fakeVector = new Vector(); - fakeVector.add(new VariableBinding()); - - mockPDU.getVariableBindings(); - result = fakeVector; - } - }; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); - assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("indicies_set")); - } - - @Test - public void testPopulatedQuery_unrecognizedProtocol() throws IOException { - String unrecognizedProtocolRSU = "{\"rsuTarget\":\"10.10.10.10\",\"rsuUsername\":\"user\",\"rsuPassword\":\"pass\",\"rsuRetries\":\"3\",\"rsuTimeout\":\"5000\",\"snmpProtocol\":\"banana\"}"; - - ResponseEntity actualResponse = testTimQueryController.bulkQuery(unrecognizedProtocolRSU); - assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); - assertTrue(actualResponse.getBody().contains("Unrecognized protocol")); - } + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); + assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("indicies_set")); + } + + @Test + void testSuccessfulQuery_fourDot1RSU() throws IOException { + new Expectations() { + { + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = mockResponseEvent; + + mockResponseEvent.getResponse(); + result = mockPDU; + + mockPDU.getVariableBindings(); + result = new Vector(); + } + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); + assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("indicies_set")); + } + + @Test + void testSuccessfulQuery_ntcip1218RSU() throws IOException { + new Expectations() { + { + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = mockResponseEvent; + + mockResponseEvent.getResponse(); + result = mockPDU; + + mockPDU.getVariableBindings(); + result = new Vector(); + } + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); + assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("indicies_set")); + } + + @Test + void testSuccessfulPopulatedQuery() throws IOException { + new Expectations() { + { + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = mockResponseEvent; + + mockResponseEvent.getResponse(); + result = mockPDU; + + Vector fakeVector = new Vector(); + fakeVector.add(new VariableBinding()); + + mockPDU.getVariableBindings(); + result = fakeVector; + } + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(defaultRSU); + assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("indicies_set")); + } + + @Test + void testSuccessfulPopulatedQuery_fourDot1RSU() throws IOException { + new Expectations() { + { + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = mockResponseEvent; + + mockResponseEvent.getResponse(); + result = mockPDU; + + Vector fakeVector = new Vector(); + fakeVector.add(new VariableBinding()); + + mockPDU.getVariableBindings(); + result = fakeVector; + } + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(fourDot1RSU); + assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("indicies_set")); + } + + @Test + void testSuccessfulPopulatedQuery_ntcip1218RSU() throws IOException { + new Expectations() { + { + mockRsuProperties.getSrmSlots(); + result = 1; + + capturingSnmpSession.getSnmp(); + result = mockSnmp; + + mockSnmp.send((PDU) any, (UserTarget) any); + result = mockResponseEvent; + + mockResponseEvent.getResponse(); + result = mockPDU; + + Vector fakeVector = new Vector(); + fakeVector.add(new VariableBinding()); + + mockPDU.getVariableBindings(); + result = fakeVector; + } + }; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(ntcip1218RSU); + assertEquals(HttpStatus.OK, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("indicies_set")); + } + + @Test + void testPopulatedQuery_unrecognizedProtocol() throws IOException { + String unrecognizedProtocolRSU = "{\"rsuTarget\":\"10.10.10.10\",\"rsuUsername\":\"user\",\"rsuPassword\":\"pass\",\"rsuRetries\":\"3\",\"rsuTimeout\":\"5000\",\"snmpProtocol\":\"banana\"}"; + + ResponseEntity actualResponse = testTimQueryController.bulkQuery(unrecognizedProtocolRSU); + assertEquals(HttpStatus.BAD_REQUEST, actualResponse.getStatusCode()); + assertTrue(actualResponse.getBody().contains("Unrecognized protocol")); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java index 9a2446f81..cce0a3419 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/traveler/TimTransmogrifierTest.java @@ -1,40 +1,48 @@ package us.dot.its.jpo.ode.traveler; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Modifier; - -import org.json.JSONObject; -import org.junit.jupiter.api.BeforeAll; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; +import java.util.Date; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; - -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.node.ObjectNode; - -import mockit.Capturing; -import mockit.Expectations; -import mockit.Mock; -import mockit.MockUp; -import mockit.Mocked; -import us.dot.its.jpo.ode.OdeProperties; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; import us.dot.its.jpo.ode.model.OdeMsgMetadata; +import us.dot.its.jpo.ode.model.OdeMsgPayload; +import us.dot.its.jpo.ode.model.OdeRequestMsgMetadata; +import us.dot.its.jpo.ode.model.OdeTravelerInputData; import us.dot.its.jpo.ode.model.SerialId; import us.dot.its.jpo.ode.plugin.RoadSideUnit.RSU; import us.dot.its.jpo.ode.plugin.SNMP; import us.dot.its.jpo.ode.plugin.ServiceRequest; import us.dot.its.jpo.ode.plugin.SituationDataWarehouse.SDW; import us.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData; -import us.dot.its.jpo.ode.plugin.j2735.DdsGeoRegion; import us.dot.its.jpo.ode.plugin.j2735.OdeGeoRegion; -import us.dot.its.jpo.ode.plugin.j2735.builders.GeoRegionBuilder; +import us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage; +import us.dot.its.jpo.ode.plugin.j2735.builders.TravelerMessageFromHumanToAsnConverter; import us.dot.its.jpo.ode.plugin.j2735.timstorage.TravelerInputData; +import us.dot.its.jpo.ode.rsu.RsuProperties; import us.dot.its.jpo.ode.traveler.TimTransmogrifier.TimTransmogrifierException; import us.dot.its.jpo.ode.util.DateTimeUtils; import us.dot.its.jpo.ode.util.JsonUtils; @@ -42,264 +50,336 @@ import us.dot.its.jpo.ode.util.XmlUtils; import us.dot.its.jpo.ode.util.XmlUtils.XmlUtilsException; -public class TimTransmogrifierTest { - - @Mocked - OdeProperties mockOdeProperties; - - private static String schemaVersion = "7"; - - @BeforeAll - public static void setupClass() { - schemaVersion = Integer.toString(OdeProperties.OUTPUT_SCHEMA_VERSION); - } - - @Test - public void testGetRsu() throws IOException { - new Expectations() { - { - mockOdeProperties.getRsuUsername(); - result = "v3user"; - - mockOdeProperties.getRsuPassword(); - result = "password"; - } - }; - - RSU expected = new RSU("127.0.0.1", "v3user", "password", 1, 2000); - - // rsuUsername and rsuPassword are null - RSU actual1 = new RSU("127.0.0.1", null, null, 1, 2000); - TimTransmogrifier.updateRsuCreds(actual1, mockOdeProperties); - assertEquals(expected, actual1); - - // rsuUsername and rsuPassword are not-null - RSU actual2 = new RSU("127.0.0.1", "v3user", "password", 1, 2000); - TimTransmogrifier.updateRsuCreds(actual2, mockOdeProperties); - assertEquals(expected, actual2); - - // rsuUsername and rsuPassword are blank - RSU actual3 = new RSU("127.0.0.1", "", "", 1, 2000); - TimTransmogrifier.updateRsuCreds(actual3, mockOdeProperties); - assertEquals(expected, actual3); - } - - @Test - public void testObfuscateRsuPassword() { - String actual = TimTransmogrifier.obfuscateRsuPassword( - "{\"metadata\":{\"request\":{\"ode\":{\"version\":3,\"verb\":\"POST\"},\"sdw\":null,\"rsus\":[{\"rsuTarget\":\"127.0.0.1\",\"rsuUsername\":\"v3user\",\"rsuPassword\": \"password\",\"rsuRetries\":0,\"rsuTimeout\":2000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\": \"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\": \"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":31,\"mode\":1,\"channel\":178,\"interval\":2,\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":1,\"status\":4}},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMsgPayload\",\"serialId\":{\"streamId\":\"59651ecc-240c-4440-9011-4a43c926817b\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2018-11-16T19:21:22.568Z\",\"schemaVersion\":6,\"recordGeneratedAt\":\"2017-03-13T06:07:11Z\",\"recordGeneratedBy\":\"TMC\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage\",\"data\":{\"msgCnt\":13,\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"sspTimRights\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000000000000000\"},\"furtherInfoID\":null},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":22,\"priority\":0,\"sspLocationRights\":3,\"regions\":[{\"name\":\"bob\",\"regulatorID\":23,\"segmentID\":33,\"anchorPosition\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"laneWidth\":7,\"directionality\":3,\"closedPath\":false,\"direction\":\"1010101010101010\",\"description\":\"geometry\",\"path\":null,\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":1,\"laneWidth\":33,\"circle\":{\"position\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"radius\":15,\"units\":7}},\"oldRegion\":null}],\"sspMsgTypes\":2,\"sspMsgContent\":3,\"content\":\"Advisory\",\"items\":[\"125\",\"some text\",\"250\",\"\\u002798765\"],\"url\":\"null\"}],\"asnDataFrames\":null}}}"); - assertEquals( - "{\"metadata\":{\"request\":{\"ode\":{\"version\":3,\"verb\":\"POST\"},\"sdw\":null,\"rsus\":[{\"rsuTarget\":\"127.0.0.1\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"*\",\"rsuRetries\":0,\"rsuTimeout\":2000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"*\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"*\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":31,\"mode\":1,\"channel\":178,\"interval\":2,\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":1,\"status\":4}},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMsgPayload\",\"serialId\":{\"streamId\":\"59651ecc-240c-4440-9011-4a43c926817b\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2018-11-16T19:21:22.568Z\",\"schemaVersion\":6,\"recordGeneratedAt\":\"2017-03-13T06:07:11Z\",\"recordGeneratedBy\":\"TMC\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage\",\"data\":{\"msgCnt\":13,\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"sspTimRights\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000000000000000\"},\"furtherInfoID\":null},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":22,\"priority\":0,\"sspLocationRights\":3,\"regions\":[{\"name\":\"bob\",\"regulatorID\":23,\"segmentID\":33,\"anchorPosition\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"laneWidth\":7,\"directionality\":3,\"closedPath\":false,\"direction\":\"1010101010101010\",\"description\":\"geometry\",\"path\":null,\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":1,\"laneWidth\":33,\"circle\":{\"position\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"radius\":15,\"units\":7}},\"oldRegion\":null}],\"sspMsgTypes\":2,\"sspMsgContent\":3,\"content\":\"Advisory\",\"items\":[\"125\",\"some text\",\"250\",\"\\u002798765\"],\"url\":\"null\"}],\"asnDataFrames\":null}}}", - actual); - } - - public void assertConvertArray(String array, String arrayKey, String elementKey, Object expectedXml) - throws JsonUtilsException, XmlUtilsException { - JsonNode obj = JsonUtils.toObjectNode(array); - JsonNode oldObj = obj.get(arrayKey); - - JsonNode newObj = XmlUtils.createEmbeddedJsonArrayForXmlConversion(elementKey, oldObj); - String actualXml = XmlUtils.toXmlStatic(newObj); - - assertEquals(expectedXml, actualXml); - } - - @Test - public void testConvertRsusArray() throws JsonUtilsException, XmlUtilsException { - String single = "{\"ode\":{\"version\":3,\"verb\":\"POST\"},\"rsus\":{\"rsu_\":[{\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10}]},\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":31,\"mode\":1,\"channel\":178,\"interval\":2,\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":1,\"status\":4}}"; - String singleXmlExpected = "127.0.0.3v3userpassword1100010"; - assertConvertArray(single, TimTransmogrifier.RSUS_STRING, TimTransmogrifier.RSUS_STRING, singleXmlExpected); - - String multi = "{\"ode\":{\"version\":3,\"verb\":\"POST\"},\"rsus\":{\"rsu_\":[{\"rsuTarget\":\"127.0.0.1\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":0,\"rsuTimeout\":2000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10}]},\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":31,\"mode\":1,\"channel\":178,\"interval\":2,\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":1,\"status\":4}}"; - String multiXmlExpected = "127.0.0.1v3userpassword0200010127.0.0.2v3userpassword1100010127.0.0.3v3userpassword1100010"; - assertConvertArray(multi, TimTransmogrifier.RSUS_STRING, TimTransmogrifier.RSUS_STRING, multiXmlExpected); - } - - @Test - public void testBuildASDNoSDWReturnsNull() throws TimTransmogrifierException { - DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(new ServiceRequest()); - assertNull(actualASD); - } - - @Test - public void testBuildASDNullTimeRethrowsTimeParsingExceptionFromSNMP() throws TimTransmogrifierException { - - ServiceRequest inputServiceRequest = new ServiceRequest(); - inputServiceRequest.setSdw(new SDW()); - inputServiceRequest.setSnmp(new SNMP()); - - try { - TimTransmogrifier.buildASD(inputServiceRequest); - fail("Expected TimTransmogrifierException"); - } catch (Exception e) { - assertTrue(e instanceof TimTransmogrifierException); - } - } - - @Test - public void testBuildASDNullTimeRethrowsTimeParsingExceptionFromSDW() throws TimTransmogrifierException { - - ServiceRequest inputServiceRequest = new ServiceRequest(); - inputServiceRequest.setSdw(new SDW()); - - try { - TimTransmogrifier.buildASD(inputServiceRequest); - fail("Expected TimTransmogrifierException"); - } catch (Exception e) { - assertTrue(e instanceof TimTransmogrifierException); - } - } - - @Test - public void testBuildASDValidTimeFromSNMP(@Capturing GeoRegionBuilder capturingGeoRegionBuilder) - throws TimTransmogrifierException { - - SNMP inputSNMP = new SNMP(); - inputSNMP.setDeliverystart("2017-06-01T17:47:11-05:00"); - inputSNMP.setDeliverystop("2018-03-01T17:47:11-05:15"); - - ServiceRequest inputServiceRequest = new ServiceRequest(); - inputServiceRequest.setSdw(new SDW()); - inputServiceRequest.setSnmp(inputSNMP); - - DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(inputServiceRequest); - - assertNotNull(actualASD); - assertEquals(Integer.valueOf(6), actualASD.getAsdmDetails().getStartTime().getMonth()); - assertEquals(Integer.valueOf(3), actualASD.getAsdmDetails().getStopTime().getMonth()); - } - - @Test - public void testBuildASDValidTimeFromSDW(@Capturing GeoRegionBuilder capturingGeoRegionBuilder) - throws TimTransmogrifierException { - - SDW inputSDW = new SDW(); - inputSDW.setDeliverystart("2017-06-01T17:47:11-05:00"); - inputSDW.setDeliverystop("2018-03-01T17:47:11-05:15"); - - ServiceRequest inputServiceRequest = new ServiceRequest(); - inputServiceRequest.setSdw(inputSDW); - - DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(inputServiceRequest); - - assertNotNull(actualASD); - assertEquals(Integer.valueOf(6), actualASD.getAsdmDetails().getStartTime().getMonth()); - assertEquals(Integer.valueOf(3), actualASD.getAsdmDetails().getStopTime().getMonth()); - } - - @Test - public void testConvertToXMLASD(@Capturing DateTimeUtils capturingDateTimeUtils, - @Capturing GeoRegionBuilder capturingGeoRegionBuilder) - throws TimTransmogrifierException, JsonUtilsException, XmlUtilsException { - - new Expectations() { - { - DateTimeUtils.now(); - result = "timeTime"; - } - }; - - new MockUp() { - @Mock - public DdsGeoRegion ddsGeoRegion(OdeGeoRegion serviceRegion) { - return new DdsGeoRegion(); - } - }; - - SDW inputSDW = new SDW(); - inputSDW.setDeliverystart("2017-06-01T17:47:11-05:00"); - inputSDW.setDeliverystop("2018-03-01T17:47:11-05:15"); - - ServiceRequest inputServiceRequest = new ServiceRequest(); - inputServiceRequest.setSdw(inputSDW); - inputServiceRequest.setRsus(new RSU[0]); - - DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(inputServiceRequest); - actualASD.setRequestID("7876BA7F"); - actualASD.getAsdmDetails().setAsdmID("7876BA7F"); - - TravelerInputData fakeTID = new TravelerInputData(); - fakeTID.setRequest(inputServiceRequest); - - ObjectNode encodableTID = JsonUtils.toObjectNode(JsonUtils.toJson(fakeTID, false)); - - SerialId staticSerialId = new SerialId(); - staticSerialId.setStreamId("6c33f802-418d-4b67-89d1-326b4fc8b1e3"); - - OdeMsgMetadata staticOdeMsgMetadata = new OdeMsgMetadata(); - - staticOdeMsgMetadata.setSchemaVersion(Integer.parseInt(schemaVersion)); - - String actualXML = TimTransmogrifier.convertToXml(actualASD, encodableTID, staticOdeMsgMetadata, staticSerialId); - String expected = String.format("us.dot.its.jpo.ode.model.OdeAsdPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000timeTime%s0falsethirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPERIeee1609Dot2DataIeee1609Dot2DataCOERAdvisorySituationDataAdvisorySituationDataUPERus.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData1565000000007876BA7F0000000017876BA7F2030000000000331", schemaVersion); - assertEquals(expected, actualXML); - } - - @Test - public void testConvertToXMLMessageFrame(@Capturing DateTimeUtils capturingDateTimeUtils, - @Capturing GeoRegionBuilder capturingGeoRegionBuilder) - throws TimTransmogrifierException, JsonUtilsException, XmlUtilsException { - - new Expectations() { - { - DateTimeUtils.now(); - result = "timeTime"; - } - }; - - SDW inputSDW = new SDW(); - inputSDW.setDeliverystart("2017-06-01T17:47:11-05:00"); - inputSDW.setDeliverystop("2018-03-01T17:47:11-05:15"); - - ServiceRequest inputServiceRequest = new ServiceRequest(); - inputServiceRequest.setSdw(inputSDW); - inputServiceRequest.setRsus(new RSU[0]); - - DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(inputServiceRequest); - actualASD.setRequestID("7876BA7F"); - actualASD.getAsdmDetails().setAsdmID("7876BA7F"); - - TravelerInputData fakeTID = new TravelerInputData(); - fakeTID.setRequest(inputServiceRequest); - - ObjectNode encodableTID = JsonUtils.toObjectNode(JsonUtils.toJson(fakeTID, false)); - - SerialId staticSerialId = new SerialId(); - staticSerialId.setStreamId("6c33f802-418d-4b67-89d1-326b4fc8b1e3"); - - OdeMsgMetadata staticOdeMsgMetadata = new OdeMsgMetadata(); - staticOdeMsgMetadata.setSchemaVersion(Integer.parseInt(schemaVersion)); - - String actualXML = TimTransmogrifier.convertToXml(null, encodableTID, staticOdeMsgMetadata, staticSerialId); - var expected = String.format("us.dot.its.jpo.ode.model.OdeTimPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000timeTime%s0falsethirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPERMessageFrame31", schemaVersion); - assertEquals(expected,actualXML); - } - - @Test - public void testCreateOdeTimData() throws JsonUtilsException { - - JSONObject testObject = JsonUtils - .toJSONObject("{\"metadata\":{\"object\":\"value\"},\"payload\":{\"object\":\"value\"}}"); - JSONObject actualOdeTimData = TimTransmogrifier.createOdeTimData(testObject); - - assertEquals( - "{\"metadata\":{\"payloadType\":\"us.dot.its.jpo.ode.model.OdeTimPayload\",\"object\":\"value\"},\"payload\":{\"dataType\":\"TravelerInformation\",\"object\":\"value\"}}", - actualOdeTimData.toString()); - } - - @Test - public void testConstructorIsPrivate() - throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { - - Constructor constructor = TimTransmogrifier.class.getDeclaredConstructor(); - assertTrue(Modifier.isPrivate(constructor.getModifiers())); - constructor.setAccessible(true); - try { - constructor.newInstance(); - fail("Expected IllegalAccessException.class"); - } catch (Exception e) { - assertEquals(InvocationTargetException.class, e.getClass()); - } - } +@ExtendWith(SpringExtension.class) +@ContextConfiguration(initializers = ConfigDataApplicationContextInitializer.class) +@EnableConfigurationProperties(value = RsuProperties.class) +class TimTransmogrifierTest { + + @Autowired + RsuProperties rsuProperties; + + private static final String schemaVersion = "8"; + + @Test + void testUpdateRsuCreds_UpdateWhenNull() { + RSU expected = new RSU("127.0.0.1", rsuProperties.getUsername(), rsuProperties.getPassword(), 1, 2000); + + RSU actual = new RSU("127.0.0.1", null, null, 1, 2000); + TimTransmogrifier.updateRsuCreds(actual, rsuProperties); + + assertEquals(expected, actual); + } + + @Test + void testUpdateRsuCreds_DoNotOverwriteExisting() { + RSU expected = new RSU("127.0.0.1", rsuProperties.getUsername(), rsuProperties.getPassword(), 1, 2000); + + RSU actual = new RSU("127.0.0.1", rsuProperties.getUsername(), rsuProperties.getPassword(), 1, 2000); + TimTransmogrifier.updateRsuCreds(actual, rsuProperties); + + assertEquals(expected, actual); + } + + @Test + void testUpdateRsuCreds_UpdatedWhenEmptyString() { + RSU expected = new RSU("127.0.0.1", rsuProperties.getUsername(), rsuProperties.getPassword(), 1, 2000); + // rsuUsername and rsuPassword are blank + RSU actual3 = new RSU("127.0.0.1", "", "", 1, 2000); + TimTransmogrifier.updateRsuCreds(actual3, rsuProperties); + assertEquals(expected, actual3); + } + + @Test + void testObfuscateRsuPassword() { + String actual = TimTransmogrifier.obfuscateRsuPassword( + "{\"metadata\":{\"request\":{\"ode\":{\"version\":3,\"verb\":\"POST\"},\"sdw\":null,\"rsus\":[{\"rsuTarget\":\"127.0.0.1\",\"rsuUsername\":\"v3user\",\"rsuPassword\": \"password\",\"rsuRetries\":0,\"rsuTimeout\":2000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\": \"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\": \"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":31,\"mode\":1,\"channel\":178,\"interval\":2,\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":1,\"status\":4}},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMsgPayload\",\"serialId\":{\"streamId\":\"59651ecc-240c-4440-9011-4a43c926817b\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2018-11-16T19:21:22.568Z\",\"schemaVersion\":8,\"recordGeneratedAt\":\"2017-03-13T06:07:11Z\",\"recordGeneratedBy\":\"TMC\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage\",\"data\":{\"msgCnt\":13,\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"doNotUse1\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000000000000000\"},\"furtherInfoID\":null},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":22,\"priority\":0,\"doNotUse2\":0,\"regions\":[{\"name\":\"bob\",\"regulatorID\":23,\"segmentID\":33,\"anchorPosition\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"laneWidth\":7,\"directionality\":3,\"closedPath\":false,\"direction\":\"1010101010101010\",\"description\":\"geometry\",\"path\":null,\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":1,\"laneWidth\":33,\"circle\":{\"position\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"radius\":15,\"units\":7}},\"oldRegion\":null}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"Advisory\",\"items\":[\"125\",\"some text\",\"250\",\"\\u002798765\"],\"url\":\"null\"}],\"asnDataFrames\":null}}}"); + assertEquals( + "{\"metadata\":{\"request\":{\"ode\":{\"version\":3,\"verb\":\"POST\"},\"sdw\":null,\"rsus\":[{\"rsuTarget\":\"127.0.0.1\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"*\",\"rsuRetries\":0,\"rsuTimeout\":2000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"*\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"*\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10}],\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":31,\"mode\":1,\"channel\":178,\"interval\":2,\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":1,\"status\":4}},\"payloadType\":\"us.dot.its.jpo.ode.model.OdeMsgPayload\",\"serialId\":{\"streamId\":\"59651ecc-240c-4440-9011-4a43c926817b\",\"bundleSize\":1,\"bundleId\":0,\"recordId\":0,\"serialNumber\":0},\"odeReceivedAt\":\"2018-11-16T19:21:22.568Z\",\"schemaVersion\":8,\"recordGeneratedAt\":\"2017-03-13T06:07:11Z\",\"recordGeneratedBy\":\"TMC\",\"sanitized\":false},\"payload\":{\"dataType\":\"us.dot.its.jpo.ode.plugin.j2735.OdeTravelerInformationMessage\",\"data\":{\"msgCnt\":13,\"timeStamp\":\"2017-03-13T01:07:11-05:00\",\"packetID\":\"EC9C236B0000000000\",\"urlB\":\"null\",\"dataframes\":[{\"doNotUse1\":0,\"frameType\":\"advisory\",\"msgId\":{\"roadSignID\":{\"position\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"viewAngle\":\"1010101010101010\",\"mutcdCode\":\"warning\",\"crc\":\"0000000000000000\"},\"furtherInfoID\":null},\"startDateTime\":\"2017-12-01T17:47:11-05:00\",\"durationTime\":22,\"priority\":0,\"doNotUse2\":0,\"regions\":[{\"name\":\"bob\",\"regulatorID\":23,\"segmentID\":33,\"anchorPosition\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"laneWidth\":7,\"directionality\":3,\"closedPath\":false,\"direction\":\"1010101010101010\",\"description\":\"geometry\",\"path\":null,\"geometry\":{\"direction\":\"1010101010101010\",\"extent\":1,\"laneWidth\":33,\"circle\":{\"position\":{\"latitude\":41.678473,\"longitude\":-108.782775,\"elevation\":917.1432},\"radius\":15,\"units\":7}},\"oldRegion\":null}],\"doNotUse4\":0,\"doNotUse3\":0,\"content\":\"Advisory\",\"items\":[\"125\",\"some text\",\"250\",\"\\u002798765\"],\"url\":\"null\"}],\"asnDataFrames\":null}}}", + actual); + } + + void assertConvertArray(String array, String arrayKey, String elementKey, Object expectedXml) + throws JsonUtilsException, XmlUtilsException { + JsonNode obj = JsonUtils.toObjectNode(array); + JsonNode oldObj = obj.get(arrayKey); + + JsonNode newObj = XmlUtils.createEmbeddedJsonArrayForXmlConversion(elementKey, oldObj); + String actualXml = XmlUtils.toXmlStatic(newObj); + + assertEquals(expectedXml, actualXml); + } + + @Test + void testConvertRsusArray() throws JsonUtilsException, XmlUtilsException { + String single = "{\"ode\":{\"version\":3,\"verb\":\"POST\"},\"rsus\":{\"rsu_\":[{\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10}]},\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":31,\"mode\":1,\"channel\":178,\"interval\":2,\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":1,\"status\":4}}"; + String singleXmlExpected = "127.0.0.3v3userpassword1100010"; + assertConvertArray(single, TimTransmogrifier.RSUS_STRING, TimTransmogrifier.RSUS_STRING, + singleXmlExpected); + + String multi = "{\"ode\":{\"version\":3,\"verb\":\"POST\"},\"rsus\":{\"rsu_\":[{\"rsuTarget\":\"127.0.0.1\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":0,\"rsuTimeout\":2000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.2\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10},{\"rsuTarget\":\"127.0.0.3\",\"rsuUsername\":\"v3user\",\"rsuPassword\":\"password\",\"rsuRetries\":1,\"rsuTimeout\":1000,\"rsuIndex\":10}]},\"snmp\":{\"rsuid\":\"00000083\",\"msgid\":31,\"mode\":1,\"channel\":178,\"interval\":2,\"deliverystart\":\"2017-06-01T17:47:11-05:00\",\"deliverystop\":\"2018-01-01T17:47:11-05:15\",\"enable\":1,\"status\":4}}"; + String multiXmlExpected = "127.0.0.1v3userpassword0200010127.0.0.2v3userpassword1100010127.0.0.3v3userpassword1100010"; + assertConvertArray(multi, TimTransmogrifier.RSUS_STRING, TimTransmogrifier.RSUS_STRING, + multiXmlExpected); + } + + @Test + void testBuildASDNoSDWReturnsNull() throws TimTransmogrifierException { + DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(new ServiceRequest()); + assertNull(actualASD); + } + + @Test + void testBuildASDNullTimeRethrowsTimeParsingExceptionFromSNMP() { + + ServiceRequest inputServiceRequest = new ServiceRequest(); + inputServiceRequest.setSdw(new SDW()); + inputServiceRequest.setSnmp(new SNMP()); + + assertThrows(TimTransmogrifierException.class, + () -> TimTransmogrifier.buildASD(inputServiceRequest)); + } + + @Test + void testBuildASDNullTimeRethrowsTimeParsingExceptionFromSDW() { + + ServiceRequest inputServiceRequest = new ServiceRequest(); + inputServiceRequest.setSdw(new SDW()); + + assertThrows(TimTransmogrifierException.class, + () -> TimTransmogrifier.buildASD(inputServiceRequest)); + } + + @Test + void testBuildASDValidTimeFromSNMP() + throws TimTransmogrifierException, OdeGeoRegion.GeoRegionException { + + SNMP inputSNMP = new SNMP(); + inputSNMP.setDeliverystart("2017-06-01T17:47:11-05:00"); + inputSNMP.setDeliverystop("2018-03-01T17:47:11-05:15"); + + SDW inputSDW = new SDW(); + inputSDW.setServiceRegion(new OdeGeoRegion("42.537903,-83.477903 42.305753, -82.842753")); + + ServiceRequest inputServiceRequest = new ServiceRequest(); + inputServiceRequest.setSdw(inputSDW); + inputServiceRequest.setSnmp(inputSNMP); + + DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(inputServiceRequest); + + assertNotNull(actualASD); + assertEquals(Integer.valueOf(6), actualASD.getAsdmDetails().getStartTime().getMonth()); + assertEquals(Integer.valueOf(3), actualASD.getAsdmDetails().getStopTime().getMonth()); + } + + @Test + void testBuildASDValidTimeFromSDW() + throws TimTransmogrifierException, OdeGeoRegion.GeoRegionException { + + SDW inputSDW = new SDW(); + inputSDW.setDeliverystart("2017-06-01T17:47:11-05:00"); + inputSDW.setDeliverystop("2018-03-01T17:47:11-05:15"); + inputSDW.setServiceRegion(new OdeGeoRegion("42.537903,-83.477903 42.305753, -82.842753")); + + ServiceRequest inputServiceRequest = new ServiceRequest(); + inputServiceRequest.setSdw(inputSDW); + + DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(inputServiceRequest); + + assertNotNull(actualASD); + assertEquals(Integer.valueOf(6), actualASD.getAsdmDetails().getStartTime().getMonth()); + assertEquals(Integer.valueOf(3), actualASD.getAsdmDetails().getStopTime().getMonth()); + } + + @Test + void testConvertToXMLASD() + throws TimTransmogrifierException, JsonUtilsException, XmlUtilsException, + OdeGeoRegion.GeoRegionException { + + Clock fixedClock = Clock.fixed(Instant.parse("2024-10-30T19:00:15.190Z"), ZoneId.of("UTC")); + DateTimeUtils.setClock(fixedClock); + + SDW inputSDW = new SDW(); + inputSDW.setDeliverystart("2017-06-01T17:47:11-05:00"); + inputSDW.setDeliverystop("2018-03-01T17:47:11-05:15"); + inputSDW.setServiceRegion(new OdeGeoRegion("42.537903,-83.477903 42.305753, -82.842753")); + + ServiceRequest inputServiceRequest = new ServiceRequest(); + inputServiceRequest.setSdw(inputSDW); + inputServiceRequest.setRsus(new RSU[0]); + + DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(inputServiceRequest); + actualASD.setRequestID("7876BA7F"); + actualASD.getAsdmDetails().setAsdmID("7876BA7F"); + inputSDW.setServiceRegion(new OdeGeoRegion("42.537903,-83.477903 42.305753, -82.842753")); + + TravelerInputData fakeTID = new TravelerInputData(); + fakeTID.setRequest(inputServiceRequest); + + ObjectNode encodableTID = JsonUtils.toObjectNode(JsonUtils.toJson(fakeTID, false)); + + SerialId staticSerialId = new SerialId(); + staticSerialId.setStreamId("6c33f802-418d-4b67-89d1-326b4fc8b1e3"); + + OdeMsgMetadata staticOdeMsgMetadata = new OdeMsgMetadata(); + + staticOdeMsgMetadata.setSchemaVersion(Integer.parseInt(schemaVersion)); + + String actualXML = TimTransmogrifier.convertToXml(actualASD, encodableTID, staticOdeMsgMetadata, + staticSerialId); + String expected = String.format( + "us.dot.its.jpo.ode.model.OdeAsdPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000%s%s0false42.537903-83.47790342.305753-82.842753thirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPERIeee1609Dot2DataIeee1609Dot2DataCOERAdvisorySituationDataAdvisorySituationDataUPERus.dot.its.jpo.ode.plugin.j2735.DdsAdvisorySituationData1565000000007876BA7F000000001425379030-834779030423057530-8284275307876BA7F20320176117472018311747331", + DateTimeUtils.now(), schemaVersion); + assertEquals(expected, actualXML); + } + + @Test + void testConvertToXMLMessageFrame() + throws TimTransmogrifierException, JsonUtilsException, XmlUtilsException, + OdeGeoRegion.GeoRegionException { + + Clock fixedClock = Clock.fixed(Instant.parse("2024-10-30T19:36:15.170Z"), ZoneId.of("UTC")); + DateTimeUtils.setClock(fixedClock); + + SDW inputSDW = new SDW(); + inputSDW.setDeliverystart("2017-06-01T17:47:11-05:00"); + inputSDW.setDeliverystop("2018-03-01T17:47:11-05:15"); + inputSDW.setServiceRegion(new OdeGeoRegion("42.537903,-83.477903 42.305753, -82.842753")); + + ServiceRequest inputServiceRequest = new ServiceRequest(); + inputServiceRequest.setSdw(inputSDW); + inputServiceRequest.setRsus(new RSU[0]); + + DdsAdvisorySituationData actualASD = TimTransmogrifier.buildASD(inputServiceRequest); + actualASD.setRequestID("7876BA7F"); + actualASD.getAsdmDetails().setAsdmID("7876BA7F"); + + TravelerInputData fakeTID = new TravelerInputData(); + fakeTID.setRequest(inputServiceRequest); + + ObjectNode encodableTID = JsonUtils.toObjectNode(JsonUtils.toJson(fakeTID, false)); + + SerialId staticSerialId = new SerialId(); + staticSerialId.setStreamId("6c33f802-418d-4b67-89d1-326b4fc8b1e3"); + + OdeMsgMetadata staticOdeMsgMetadata = new OdeMsgMetadata(); + staticOdeMsgMetadata.setSchemaVersion(Integer.parseInt(schemaVersion)); + + String actualXML = TimTransmogrifier.convertToXml(null, encodableTID, staticOdeMsgMetadata, staticSerialId); + var expected = String.format( + "us.dot.its.jpo.ode.model.OdeTimPayload6c33f802-418d-4b67-89d1-326b4fc8b1e31000%s%s0false42.537903-83.47790342.305753-82.842753thirtyminutes2017-06-01T17:47:11-05:002018-03-01T17:47:11-05:15MessageFrameMessageFrameUPER31MessageFrame", + DateTimeUtils.now(), schemaVersion); + assertEquals(expected, actualXML); + } + + /** + * It should be noted that the 'prepare' section of this test largely follows + * the + * logic in the TimDepositController.depositTim() method. This is because the + * TimTransmogrifier.convertToXml() method is called by the TimDepositController + * and the TimDepositController is responsible for preparing the data that is + * passed to the TimTransmogrifier.convertToXml() method. + */ + @Test + void testConvertToXML_VerifyPositionElementNotInCircleElementAfterConversion() + throws IOException, JsonUtilsException, XmlUtilsException, ParseException, + TravelerMessageFromHumanToAsnConverter.NoncompliantFieldsException { + // prepare + String timRequestContainingCircleGeometry = new String(Files.readAllBytes(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/traveler/timRequestContainingCircleGeometry.json"))); + + SerialId serialId = prepareSerialId(); + OdeTravelerInputData odeTID = prepareOdeTID(timRequestContainingCircleGeometry); + OdeRequestMsgMetadata timMetadata = prepareMetadata(odeTID, serialId); + + ObjectNode encodableTid = JsonUtils.toObjectNode(odeTID.toJson()); + TravelerMessageFromHumanToAsnConverter.convertTravelerInputDataToEncodableTim(encodableTid); + + // Set the clock to a fixed instant for value comparison + DateTimeUtils.setClock( + Clock.fixed(Instant.parse("2024-11-05T16:51:14.473Z"), ZoneId.of("UTC"))); + + // execute + String actualXML = TimTransmogrifier.convertToXml(null, encodableTid, timMetadata, serialId); + + // verify + String expectedXml = new String(Files.readAllBytes(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/traveler/aemInputContainingCircleGeometry.xml"))).replaceAll( + "\\s", "") // remove all whitespace + .replaceAll("", ""); // add space before closing tag + Assertions.assertEquals(expectedXml, actualXML); + } + + @Test + void testConstructorIsPrivate() throws NoSuchMethodException { + + Constructor constructor = TimTransmogrifier.class.getDeclaredConstructor(); + assertTrue(Modifier.isPrivate(constructor.getModifiers())); + constructor.setAccessible(true); + + assertThrows(InvocationTargetException.class, constructor::newInstance); + } + + /** + * Helper method to prepare a SerialId object for testing. + * + * @return a SerialId object + */ + private SerialId prepareSerialId() { + SerialId serialId = new SerialId(); + serialId.setStreamId("testStreamId"); + return serialId; + } + + /** + * Helper method to prepare an OdeTravelerInputData object for testing. + * + * @param timRequestContainingCircleGeometry a JSON string containing a TIM + * request with a circle geometry + * @return an OdeTravelerInputData object + * @throws JsonUtilsException if there is an issue parsing the JSON string + */ + private OdeTravelerInputData prepareOdeTID(String timRequestContainingCircleGeometry) + throws JsonUtilsException { + return (OdeTravelerInputData) JsonUtils.jacksonFromJson(timRequestContainingCircleGeometry, + OdeTravelerInputData.class, true); + } + + /** + * Helper method to prepare an OdeRequestMsgMetadata object for testing. + * + * @param odeTID an OdeTravelerInputData object + * @param serialId a SerialId object + * @return an OdeRequestMsgMetadata object + * @throws ParseException if there is an issue parsing the date + */ + private OdeRequestMsgMetadata prepareMetadata(OdeTravelerInputData odeTID, SerialId serialId) + throws ParseException { + ServiceRequest request = odeTID.getRequest(); + request.setOde(new ServiceRequest.OdeInternal()); + request.getOde().setVerb(ServiceRequest.OdeInternal.RequestVerb.PUT); + OdeTravelerInformationMessage tim = odeTID.getTim(); + OdeMsgPayload timDataPayload = new OdeMsgPayload(tim); + OdeRequestMsgMetadata timMetadata = new OdeRequestMsgMetadata(timDataPayload, request); + timMetadata.setOdePacketID(tim.getPacketID()); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + int maxDurationTime = 0; + Date latestStartDateTime = null; + for (OdeTravelerInformationMessage.DataFrame dataFrameItem : tim.getDataframes()) { + maxDurationTime = Math.max(maxDurationTime, dataFrameItem.getDurationTime()); + latestStartDateTime = latestStartDateTime == null + || latestStartDateTime.before(dateFormat.parse(dataFrameItem.getStartDateTime())) + ? dateFormat.parse(dataFrameItem.getStartDateTime()) + : latestStartDateTime; + } + timMetadata.setMaxDurationTime(maxDurationTime); + timMetadata.setOdeTimStartDateTime(dateFormat.format(latestStartDateTime)); + + timMetadata.setSerialId(serialId); + timMetadata.setRecordGeneratedBy(OdeMsgMetadata.GeneratedBy.TMC); + timMetadata.setRecordGeneratedAt( + DateTimeUtils.isoDateTime(DateTimeUtils.isoDateTime(tim.getTimeStamp()))); + timMetadata.setSchemaVersion(8); + return timMetadata; + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/UdpHexDecoderTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/UdpHexDecoderTest.java new file mode 100644 index 000000000..59cfac583 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/UdpHexDecoderTest.java @@ -0,0 +1,50 @@ +package us.dot.its.jpo.ode.udp; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import java.net.DatagramPacket; +import org.apache.tomcat.util.buf.HexUtils; +import org.junit.jupiter.api.Test; +import us.dot.its.jpo.ode.model.OdeAsn1Payload; +import us.dot.its.jpo.ode.model.OdeHexByteArray; +import us.dot.its.jpo.ode.uper.SupportedMessageType; + +class UdpHexDecoderTest { + + /** + * Note: Except for the first 8 and last 4 characters, the rest of the characters + * in the hexString have been randomly generated. + */ + String exampleBSMHexString = + "001480ADDA7CDE5517E962C66947240CB711E804C8B106B7DB7B12B3056B8AA1AA4E838D00400F86822A3CD398D89E1BB8405B72C3C7A398C3CAFF63338526C646F4FFF524AD9E404039D5DA2FA62FEB57E305B552C7BE088B61E52A6BFC8CAF5AF64414F3E4513FEC189F8B5E1138B824A48B29BA1F43CB12CE296BCA3DFA8F651AB44AB1B81B633B797D5645DAA4EDADAB4AC22A0BC38AB361443395BAA2C81CC4538E7413E9C8C3F696BB2C9B6B0000"; + + /** + * Test method for ensuring that the getPayloadHexString method does not result in any missing or extra bytes + * when retrieving the payload from a BSM message. + */ + @Test + void getPayloadHexString_BSM_VerifyNoMissingOrExtraBytes() throws InvalidPayloadException { + // prepare the received bytes from the example BSM hex string + byte[] receivedBytes = HexUtils.fromHexString(exampleBSMHexString); + + // prepare the initial buffer and packet to simulate the receive() method + int bufferSize = 500; + byte[] buffer = new byte[bufferSize]; + DatagramPacket packet = new DatagramPacket(buffer, buffer.length); + + // simulate the receive() method by copying the received bytes into the buffer + System.arraycopy(receivedBytes, 0, buffer, 0, receivedBytes.length); + packet.setData(buffer); + packet.setLength(receivedBytes.length); + + // execute the method to get the payload hex string + OdeAsn1Payload payload = UdpHexDecoder.getPayloadHexString(packet, SupportedMessageType.BSM); + + // verify that the buffer size remains unchanged + assertEquals(bufferSize, packet.getData().length); + + // verify that the payload contents match the example BSM hex string + String payloadContents = ((OdeHexByteArray) payload.getData()).getBytes(); + assertEquals(exampleBSMHexString, payloadContents); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java new file mode 100644 index 000000000..1baee0127 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest.java @@ -0,0 +1,111 @@ +package us.dot.its.jpo.ode.udp.bsm; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import org.apache.kafka.clients.consumer.Consumer; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.test.utilities.TestUDPClient; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import us.dot.its.jpo.ode.util.DateTimeUtils; + +@EnableConfigurationProperties +@SpringBootTest( + classes = { + OdeKafkaProperties.class, + UDPReceiverProperties.class, + KafkaProducerConfig.class, + SerializationConfig.class + }, + properties = { + "ode.receivers.bsm.receiver-port=15352", + "ode.kafka.topics.raw-encoded-json.bsm=topic.BsmReceiverTest" + } +) +@ContextConfiguration(classes = { + UDPReceiverProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class BsmReceiverTest { + + @Autowired + UDPReceiverProperties udpReceiverProperties; + + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Autowired + KafkaTemplate kafkaTemplate; + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void testRun() throws Exception { + EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getBsm()); + + DateTimeUtils.setClock( + Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); + // create the BsmReceiver and submit it to a runner + BsmReceiver bsmReceiver = new BsmReceiver(udpReceiverProperties.getBsm(), kafkaTemplate, + rawEncodedJsonTopics.getBsm()); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.submit(bsmReceiver); + + String fileContent = + Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM.txt")); + String expected = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM_expected.json")); + + TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getBsm().getReceiverPort()); + udpClient.send(fileContent); + + var consumerProps = KafkaTestUtils.consumerProps( + "BsmReceiverTest", "true", embeddedKafka); + DefaultKafkaConsumerFactory cf = + new DefaultKafkaConsumerFactory<>(consumerProps); + Consumer consumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getBsm()); + + // read record from produce topic + var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getBsm()); + // confirm the stream-id is different, then remove it from both so that we can test equality of all other fields + assertNotEquals(expected, singleRecord.value()); + JSONObject producedJson = new JSONObject(singleRecord.value()); + JSONObject expectedJson = new JSONObject(expected); + + // assert that the UUIDs are different, then remove them so that the rest of the JSON can be compared + assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), + producedJson.getJSONObject("metadata").get("serialId")); + expectedJson.getJSONObject("metadata").remove("serialId"); + producedJson.getJSONObject("metadata").remove("serialId"); + + assertEquals( + expectedJson.toString(2), + producedJson.toString(2)); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java new file mode 100644 index 000000000..854071a6b --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/generic/GenericReceiverTest.java @@ -0,0 +1,187 @@ +package us.dot.its.jpo.ode.udp.generic; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneOffset; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.test.utilities.TestUDPClient; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import us.dot.its.jpo.ode.util.DateTimeUtils; + +@EnableConfigurationProperties +@SpringBootTest( + classes = { + OdeKafkaProperties.class, + UDPReceiverProperties.class, + KafkaProducerConfig.class, + SerializationConfig.class + }, + properties = { + "ode.receivers.generic.receiver-port=15460", + "ode.kafka.topics.raw-encoded-json.bsm=topic.GenericReceiverTestBSM", + "ode.kafka.topics.raw-encoded-json.map=topic.GenericReceiverTestMAP", + "ode.kafka.topics.raw-encoded-json.psm=topic.GenericReceiverTestPSM", + "ode.kafka.topics.raw-encoded-json.spat=topic.GenericReceiverTestSPAT", + "ode.kafka.topics.raw-encoded-json.ssm=topic.GenericReceiverTestSSM", + "ode.kafka.topics.raw-encoded-json.tim=topic.GenericReceiverTestTIM", + "ode.kafka.topics.raw-encoded-json.srm=topic.GenericReceiverTestSRM" + } +) +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class GenericReceiverTest { + + @Autowired + UDPReceiverProperties udpReceiverProperties; + + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Autowired + KafkaTemplate kafkaTemplate; + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void testRun() throws Exception { + String[] topics = { + rawEncodedJsonTopics.getBsm(), + rawEncodedJsonTopics.getMap(), + rawEncodedJsonTopics.getPsm(), + rawEncodedJsonTopics.getSpat(), + rawEncodedJsonTopics.getSsm(), + rawEncodedJsonTopics.getTim(), + rawEncodedJsonTopics.getSrm() + }; + EmbeddedKafkaHolder.addTopics(topics); + + GenericReceiver genericReceiver = new GenericReceiver( + udpReceiverProperties.getGeneric(), + kafkaTemplate, rawEncodedJsonTopics + ); + + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.submit(genericReceiver); + + TestUDPClient udpClient = new TestUDPClient( + udpReceiverProperties.getGeneric().getReceiverPort()); + + var consumerProps = KafkaTestUtils.consumerProps("GenericReceiverTest", "true", embeddedKafka); + var cf = new DefaultKafkaConsumerFactory(consumerProps); + var consumer = cf.createConsumer(); + embeddedKafka.consumeFromEmbeddedTopics(consumer, topics); + + DateTimeUtils.setClock(Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneOffset.UTC)); + + // Test the PSM path + String psmFileContent = Files.readString( + Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM.txt")); + String expectedPsm = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM_expected.json")); + + udpClient.send(psmFileContent); + var psmRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getPsm()); + assertExpected("Produced PSM message does not match expected", psmRecord.value(), expectedPsm); + + // Test the BSM path + String bsmFileContent = Files.readString( + Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM.txt")); + String expectedBsm = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM_expected.json")); + udpClient.send(bsmFileContent); + + var bsmRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getBsm()); + assertExpected("Produced BSM message does not match expected", bsmRecord.value(), expectedBsm); + + // Test the MAP path + String mapFileContent = Files.readString( + Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/map/MapReceiverTest_ValidMAP.txt")); + String expectedMap = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/map/MapReceiverTest_ValidMAP_expected.json")); + udpClient.send(mapFileContent); + + var mapRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getMap()); + assertExpected("Produced MAP message does not match expected", mapRecord.value(), expectedMap); + + // Test the SPAT path + String spatFileContent = Files.readString( + Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT.txt")); + String expectedSpat = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT_expected.json")); + udpClient.send(spatFileContent); + + var spatRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSpat()); + assertExpected("Produced SPAT message does not match expected", spatRecord.value(), + expectedSpat); + + // Test the SSM path + String ssmFileContent = Files.readString( + Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM.txt")); + String expectedSsm = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM_expected.json")); + udpClient.send(ssmFileContent); + + var ssmRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSsm()); + assertExpected("Produced SSM message does not match expected", ssmRecord.value(), expectedSsm); + + // Test the TIM path + String timFileContent = Files.readString( + Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM.txt")); + String expectedTim = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM_expected.json")); + udpClient.send(timFileContent); + + var timRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getTim()); + assertExpected("Produced TIM message does not match expected", timRecord.value(), expectedTim); + + String srmFileContent = Files.readString( + Paths.get("src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ValidData.txt") + ); + String expectedSrm = Files.readString( + Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ExpectedOutput.json") + ); + udpClient.send(srmFileContent); + + var srmRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSrm()); + assertExpected("Produced SRM message does not match expected", srmRecord.value(), expectedSrm); + } + + private static void assertExpected(String failureMsg, String actual, String expected) { + JSONObject producedJson = new JSONObject(actual); + JSONObject expectedJson = new JSONObject(expected); + + assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), + producedJson.getJSONObject("metadata").get("serialId")); + expectedJson.getJSONObject("metadata").remove("serialId"); + producedJson.getJSONObject("metadata").remove("serialId"); + + assertEquals(expectedJson.toString(2), producedJson.toString(2), failureMsg); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java new file mode 100644 index 000000000..0ac327004 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/map/MapReceiverTest.java @@ -0,0 +1,118 @@ +package us.dot.its.jpo.ode.udp.map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static us.dot.its.jpo.ode.test.utilities.ApprovalTestCase.deserializeTestCases; + +import java.io.IOException; +import java.time.Clock; +import java.time.Instant; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import lombok.extern.slf4j.Slf4j; +import org.apache.kafka.clients.consumer.Consumer; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.model.OdeMsgMetadata; +import us.dot.its.jpo.ode.test.utilities.ApprovalTestCase; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.test.utilities.TestUDPClient; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import us.dot.its.jpo.ode.util.DateTimeUtils; + +@Slf4j +@SpringBootTest( + classes = { + OdeKafkaProperties.class, + UDPReceiverProperties.class, + KafkaProducerConfig.class, + SerializationConfig.class + }, + properties = {"ode.kafka.topics.raw-encoded-json.map=topic.MapReceiverTestMAPJSON", + "ode.receivers.map.receiver-port=12412"} +) +@EnableConfigurationProperties +@ContextConfiguration(classes = { + UDPReceiverProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class MapReceiverTest { + + private final EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Autowired + UDPReceiverProperties udpReceiverProperties; + + @Autowired + KafkaTemplate kafkaTemplate; + + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Test + void testMapReceiver() throws IOException { + + // Set the clock to a fixed time so that the MapReceiver will produce the same output every time + DateTimeUtils.setClock( + Clock.fixed(Instant.parse("2020-01-01T00:00:00Z"), Clock.systemUTC().getZone())); + + MapReceiver mapReceiver = new MapReceiver(udpReceiverProperties.getMap(), kafkaTemplate, + rawEncodedJsonTopics.getMap()); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.submit(mapReceiver); + + EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getMap()); + + // Set up a Kafka consumer + Map consumerProps = + KafkaTestUtils.consumerProps("test-group", "false", embeddedKafka); + DefaultKafkaConsumerFactory cf = + new DefaultKafkaConsumerFactory<>(consumerProps); + Consumer consumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getMap()); + + TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getMap().getReceiverPort()); + + String path = + "src/test/resources/us.dot.its.jpo.ode.udp.map/UDPMAP_To_EncodedJSON_Validation.json"; + List approvalTestCases = deserializeTestCases(path); + + for (ApprovalTestCase approvalTestCase : approvalTestCases) { + udpClient.send(approvalTestCase.getInput()); + + ConsumerRecord produced = + KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getMap()); + + JSONObject producedJson = new JSONObject(produced.value()); + JSONObject expectedJson = new JSONObject(approvalTestCase.getExpected()); + + // assert that the UUIDs are different, then remove them so that the rest of the JSON can be compared + assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), + producedJson.getJSONObject("metadata").get("serialId")); + expectedJson.getJSONObject("metadata").remove("serialId"); + producedJson.getJSONObject("metadata").remove("serialId"); + + assertEquals(expectedJson.toString(), producedJson.toString(), + approvalTestCase.getDescription()); + } + } +} + diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java new file mode 100644 index 000000000..1e83e5866 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest.java @@ -0,0 +1,113 @@ +package us.dot.its.jpo.ode.udp.psm; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import org.apache.kafka.clients.admin.NewTopic; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.test.utilities.TestUDPClient; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import us.dot.its.jpo.ode.util.DateTimeUtils; + +@RunWith(SpringRunner.class) +@EnableConfigurationProperties +@SpringBootTest( + classes = { + OdeKafkaProperties.class, + UDPReceiverProperties.class, + KafkaProducerConfig.class, + SerializationConfig.class + }, + properties = { + "ode.receivers.psm.receiver-port=15456", + "ode.kafka.topics.raw-encoded-json.psm=topic.PsmReceiverTest" + } +) +@ContextConfiguration(classes = { + UDPReceiverProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class PsmReceiverTest { + + @Autowired + UDPReceiverProperties udpReceiverProperties; + + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Autowired + KafkaTemplate kafkaTemplate; + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void testRun() throws Exception { + try { + embeddedKafka.addTopics(new NewTopic(rawEncodedJsonTopics.getPsm(), 1, (short) 1)); + } catch (Exception e) { + // Ignore as we're only ensuring topics exist + } + + DateTimeUtils.setClock( + Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); + + PsmReceiver psmReceiver = new PsmReceiver(udpReceiverProperties.getPsm(), kafkaTemplate, + rawEncodedJsonTopics.getPsm()); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.submit(psmReceiver); + + String fileContent = + Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM.txt")); + String expected = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM_expected.json")); + + TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getPsm().getReceiverPort()); + udpClient.send(fileContent); + + var consumerProps = KafkaTestUtils.consumerProps( + "PsmReceiverTest", "true", embeddedKafka); + var cf = new DefaultKafkaConsumerFactory(consumerProps); + var consumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getPsm()); + + var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getPsm()); + assertNotEquals(expected, singleRecord.value()); + + JSONObject producedJson = new JSONObject(singleRecord.value()); + JSONObject expectedJson = new JSONObject(expected); + + assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), + producedJson.getJSONObject("metadata").get("serialId")); + expectedJson.getJSONObject("metadata").remove("serialId"); + producedJson.getJSONObject("metadata").remove("serialId"); + + assertEquals(expectedJson.toString(2), producedJson.toString(2)); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java new file mode 100644 index 000000000..f6124b9bb --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest.java @@ -0,0 +1,109 @@ +package us.dot.its.jpo.ode.udp.spat; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import org.apache.kafka.clients.consumer.Consumer; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.test.utilities.TestUDPClient; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import us.dot.its.jpo.ode.util.DateTimeUtils; + +@EnableConfigurationProperties +@SpringBootTest( + classes = { + OdeKafkaProperties.class, + UDPReceiverProperties.class, + KafkaProducerConfig.class, + SerializationConfig.class + }, + properties = { + "ode.receivers.spat.receiver-port=15356", + "ode.kafka.topics.raw-encoded-json.spat=topic.SpatReceiverTest" + } +) +@ContextConfiguration(classes = { + UDPReceiverProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class SpatReceiverTest { + + @Autowired + UDPReceiverProperties udpReceiverProperties; + + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Autowired + private KafkaTemplate kafkaTemplate; + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void testRun() throws Exception { + EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getSpat()); + + DateTimeUtils.setClock( + Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); + + SpatReceiver spatReceiver = new SpatReceiver(udpReceiverProperties.getSpat(), kafkaTemplate, + rawEncodedJsonTopics.getSpat()); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.submit(spatReceiver); + + String fileContent = + Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT.txt")); + + String expected = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT_expected.json")); + + TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getSpat().getReceiverPort()); + udpClient.send(fileContent); + + var consumerProps = KafkaTestUtils.consumerProps( + "SpatReceiverTest", "true", embeddedKafka); + DefaultKafkaConsumerFactory cf = + new DefaultKafkaConsumerFactory<>(consumerProps); + Consumer consumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getSpat()); + + var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSpat()); + assertNotEquals(expected, singleRecord.value()); + JSONObject producedJson = new JSONObject(singleRecord.value()); + JSONObject expectedJson = new JSONObject(expected); + + assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), + producedJson.getJSONObject("metadata").get("serialId")); + expectedJson.getJSONObject("metadata").remove("serialId"); + producedJson.getJSONObject("metadata").remove("serialId"); + + assertEquals( + expectedJson.toString(2), + producedJson.toString(2)); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java new file mode 100644 index 000000000..b59d07af1 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest.java @@ -0,0 +1,110 @@ +package us.dot.its.jpo.ode.udp.srm; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.junit.runner.RunWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringRunner; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.test.utilities.TestUDPClient; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import us.dot.its.jpo.ode.util.DateTimeUtils; + +@RunWith(SpringRunner.class) +@EnableConfigurationProperties +@SpringBootTest( + classes = { + OdeKafkaProperties.class, + UDPReceiverProperties.class, + KafkaProducerConfig.class, + SerializationConfig.class + }, + properties = { + "ode.receivers.srm.receiver-port=15459", + "ode.kafka.topics.raw-encoded-json.srm=topic.SrmReceiverTest" + } +) +@ContextConfiguration(classes = { + UDPReceiverProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class SrmReceiverTest { + + @Autowired + UDPReceiverProperties udpReceiverProperties; + + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Autowired + KafkaTemplate kafkaTemplate; + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void testRun() throws Exception { + EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getSrm()); + + DateTimeUtils.setClock( + Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); + + SrmReceiver srmReceiver = new SrmReceiver( + udpReceiverProperties.getSrm(), + kafkaTemplate, rawEncodedJsonTopics.getSrm() + ); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.submit(srmReceiver); + + String fileContent = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ValidData.txt")); + String expected = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ExpectedOutput.json")); + + TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getSrm().getReceiverPort()); + udpClient.send(fileContent); + + var consumerProps = KafkaTestUtils.consumerProps( + "SrmReceiverTest", "true", embeddedKafka); + var cf = new DefaultKafkaConsumerFactory(consumerProps); + var consumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getSrm()); + + var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSrm()); + String receivedValue = singleRecord.value(); + assertNotEquals(expected, receivedValue); + + JSONObject producedJson = new JSONObject(receivedValue); + JSONObject expectedJson = new JSONObject(expected); + + assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), + producedJson.getJSONObject("metadata").get("serialId")); + expectedJson.getJSONObject("metadata").remove("serialId"); + producedJson.getJSONObject("metadata").remove("serialId"); + + assertEquals(expectedJson.toString(2), producedJson.toString(2)); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java new file mode 100644 index 000000000..6ec5c475b --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest.java @@ -0,0 +1,108 @@ +package us.dot.its.jpo.ode.udp.ssm; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import org.apache.kafka.clients.consumer.Consumer; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.test.utilities.TestUDPClient; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import us.dot.its.jpo.ode.util.DateTimeUtils; + +@EnableConfigurationProperties +@SpringBootTest( + classes = { + OdeKafkaProperties.class, + UDPReceiverProperties.class, + KafkaProducerConfig.class, + SerializationConfig.class + }, + properties = { + "ode.receivers.ssm.receiver-port=15358", + "ode.kafka.topics.raw-encoded-json.ssm=topic.SsmReceiverTest" + } +) +@ContextConfiguration(classes = { + UDPReceiverProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class SsmReceiverTest { + + @Autowired + UDPReceiverProperties udpReceiverProperties; + + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Autowired + KafkaTemplate kafkaTemplate; + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void testRun() throws Exception { + EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getSsm()); + + DateTimeUtils.setClock( + Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); + + SsmReceiver ssmReceiver = new SsmReceiver(udpReceiverProperties.getSsm(), kafkaTemplate, + rawEncodedJsonTopics.getSsm()); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.submit(ssmReceiver); + + String fileContent = + Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM.txt")); + String expected = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM_expected.json")); + + TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getSsm().getReceiverPort()); + udpClient.send(fileContent); + + var consumerProps = KafkaTestUtils.consumerProps( + "SsmReceiverTest", "true", embeddedKafka); + DefaultKafkaConsumerFactory cf = + new DefaultKafkaConsumerFactory<>(consumerProps); + Consumer consumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getSsm()); + + var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getSsm()); + assertNotEquals(expected, singleRecord.value()); + JSONObject producedJson = new JSONObject(singleRecord.value()); + JSONObject expectedJson = new JSONObject(expected); + + assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), + producedJson.getJSONObject("metadata").get("serialId")); + expectedJson.getJSONObject("metadata").remove("serialId"); + producedJson.getJSONObject("metadata").remove("serialId"); + + assertEquals( + expectedJson.toString(2), + producedJson.toString(2)); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java new file mode 100644 index 000000000..602cba274 --- /dev/null +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/udp/tim/TimReceiverTest.java @@ -0,0 +1,110 @@ +package us.dot.its.jpo.ode.udp.tim; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + +import java.nio.file.Files; +import java.nio.file.Paths; +import java.time.Clock; +import java.time.Instant; +import java.time.ZoneId; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import org.apache.kafka.clients.consumer.Consumer; +import org.json.JSONObject; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.kafka.KafkaProperties; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.kafka.core.DefaultKafkaConsumerFactory; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.test.EmbeddedKafkaBroker; +import org.springframework.kafka.test.utils.KafkaTestUtils; +import org.springframework.test.annotation.DirtiesContext; +import org.springframework.test.context.ContextConfiguration; +import us.dot.its.jpo.ode.config.SerializationConfig; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.producer.KafkaProducerConfig; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; +import us.dot.its.jpo.ode.test.utilities.EmbeddedKafkaHolder; +import us.dot.its.jpo.ode.test.utilities.TestUDPClient; +import us.dot.its.jpo.ode.udp.controller.UDPReceiverProperties; +import us.dot.its.jpo.ode.util.DateTimeUtils; + +@EnableConfigurationProperties +@SpringBootTest( + classes = { + OdeKafkaProperties.class, + UDPReceiverProperties.class, + KafkaProducerConfig.class, + SerializationConfig.class + }, + properties = { + "ode.receivers.tim.receiver-port=15353", + "ode.kafka.topics.raw-encoded-json.tim=topic.TimReceiverTest" + } +) +@ContextConfiguration(classes = { + UDPReceiverProperties.class, OdeKafkaProperties.class, + RawEncodedJsonTopics.class, KafkaProperties.class +}) +@DirtiesContext +class TimReceiverTest { + + @Autowired + UDPReceiverProperties udpReceiverProperties; + + @Autowired + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Autowired + KafkaTemplate kafkaTemplate; + + EmbeddedKafkaBroker embeddedKafka = EmbeddedKafkaHolder.getEmbeddedKafka(); + + @Test + void testRun() throws Exception { + EmbeddedKafkaHolder.addTopics(rawEncodedJsonTopics.getTim()); + + DateTimeUtils.setClock( + Clock.fixed(Instant.parse("2024-11-26T23:53:21.120Z"), ZoneId.of("UTC"))); + + TimReceiver timReceiver = new TimReceiver(udpReceiverProperties.getTim(), + kafkaTemplate, rawEncodedJsonTopics.getTim()); + ExecutorService executorService = Executors.newCachedThreadPool(); + executorService.submit(timReceiver); + + String fileContent = + Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM.txt")); + String expected = Files.readString(Paths.get( + "src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM_expected.json")); + + TestUDPClient udpClient = new TestUDPClient(udpReceiverProperties.getTim().getReceiverPort()); + udpClient.send(fileContent); + + var consumerProps = KafkaTestUtils.consumerProps( + "TimReceiverTest", "true", embeddedKafka); + DefaultKafkaConsumerFactory cf = + new DefaultKafkaConsumerFactory<>(consumerProps); + Consumer consumer = cf.createConsumer(); + embeddedKafka.consumeFromAnEmbeddedTopic(consumer, rawEncodedJsonTopics.getTim()); + + var singleRecord = KafkaTestUtils.getSingleRecord(consumer, rawEncodedJsonTopics.getTim()); + // confirm the stream-id is different, then remove it from both so that we can test equality of all other fields + assertNotEquals(expected, singleRecord.value()); + JSONObject producedJson = new JSONObject(singleRecord.value()); + JSONObject expectedJson = new JSONObject(expected); + + // assert that the UUIDs are different, then remove them so that the rest of the JSON can be compared + assertNotEquals(expectedJson.getJSONObject("metadata").get("serialId"), + producedJson.getJSONObject("metadata").get("serialId")); + expectedJson.getJSONObject("metadata").remove("serialId"); + producedJson.getJSONObject("metadata").remove("serialId"); + + assertEquals( + expectedJson.toString(2), + producedJson.toString(2)); + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java index 0fa1c8909..6649b5bb0 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/uper/UperUtilTest.java @@ -1,93 +1,79 @@ package us.dot.its.jpo.ode.uper; -import static org.junit.Assert.assertArrayEquals; -import static org.junit.Assert.assertEquals; -import java.util.HashMap; +import static org.junit.jupiter.api.Assertions.assertArrayEquals; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import java.util.HashMap; import org.apache.tomcat.util.buf.HexUtils; import org.junit.jupiter.api.Test; - import us.dot.its.jpo.ode.model.OdeAsn1Payload; -import us.dot.its.jpo.ode.util.JsonUtils.JsonUtilsException; - -public class UperUtilTest { - UperUtil testUperUtil; - - @Test - public void testStripDot2Header() { - String testHexString = "10110014000000"; - String testPayloadStartFlag = "0014"; - String expectedValue = "001400"; - assertEquals(expectedValue, UperUtil.stripDot2Header(testHexString, testPayloadStartFlag)); - } - - @Test - public void testStripDot2HeaderBadData() { - String testHexString = "0014"; - String testPayloadStartFlag = "0015"; - String expectedValue = "BAD DATA"; - assertEquals(expectedValue, UperUtil.stripDot2Header(testHexString, testPayloadStartFlag)); - } - - @Test - public void testStripDot3Header() { - byte[] testPacket = { 0x10, 0x20, 0x00, 0x1f, 0x00, 0x00 }; - byte[] testExpected = { 0x00, 0x1f, 0x00 }; - HashMap testMsgStartFlag = new HashMap<>(); - testMsgStartFlag.put("TIM", "001f"); - byte[] testResult = UperUtil.stripDot3Header(testPacket, testMsgStartFlag); - assertArrayEquals(testExpected, testResult); - } - - @Test - public void testStripDot3HeaderWithDot2StartIndex() { - byte[] testPacket = { 0x0, 0x01, 0x03, (byte) 0x81, 0x00, 0x00, 0x1f, 0x00 }; - byte[] testExpected = { 0x03, (byte) 0x81, 0x00, 0x00, 0x1f, 0x00 }; - HashMap testMsgStartFlag = new HashMap<>(); - testMsgStartFlag.put("TIM", "001f"); - byte[] testResult = UperUtil.stripDot3Header(testPacket, testMsgStartFlag); - assertArrayEquals(testExpected, testResult); - } - - @Test - public void testStripDot3HeaderString() { - String testPacketString = "0102001f0000"; - String testExpectedString = "001f00"; - String testMsgStartFlag = "001f"; - assertEquals(testExpectedString, UperUtil.stripDot3Header(testPacketString, testMsgStartFlag)); - } - - @Test - public void testStripDot3HeaderStringWithDot2StartIndex() { - String testPacketString = "0001038100001f00"; - String testExpectedString = "038100001f00"; - String testMsgStartFlag = "001f"; - assertEquals(testExpectedString, UperUtil.stripDot3Header(testPacketString, testMsgStartFlag)); - } - - @Test - public void testDetermineMessageType() throws JsonUtilsException { - String mapHexString = "0012839338023000205E96094D40DF4C2CA626C8516E02DC3C2010640000000289E01C009F603F42E88039900000000A41107B027D80FD0A4200C6400000002973021C09F603DE0C16029200000080002A8A008D027D98FEE805404FB0E1085F60588200028096021200000080002AA0007D027D98FE9802E04FB1200C214456228000A02B1240005022C03240000020000D56B40BC04FB35FF655E2C09F623FB81C835FEC0DB240A0A2BFF4AEBF82C660000804B0089000000800025670034013ECD7FB9578E027D9AFF883C4E050515FFA567A41635000040258024800000400012B8F81F409F663FAC094013ECD7FC83DDB02829AFFA480BC04FB02C6E0000804B09C5000000200035EA98A9604F60DA6C7C113D505C35FFE941D409F65C05034C050500C9880004409BC800000006D2BD3CEC813C40CDE062C1FD400000200008791EA3DB3CF380A009F666F05005813D80FFE0A0588C00040092106A00000000BC75CAC009F66DB54C04A813D80A100801241ED40000000078EBAE3B6DA7A008809E2050904008811F100000000BC72389009F60ECA8002049C400000002F1B2CA3027D93A71FA813EC204BC400000002F1B2B34027B0397608880CD10000000039B8E1A51036820505080D51000000003A7461ED1036760505080DD1000000003B2F62311006260505160BCA00000080002B785E2A80A0A6C028DE728145037F1F9E456488000202B2540001022C1894000001000057058C5B81414D806DBCD4028A18F4DF23A050502C8D0000404B05A5000000800035B6471BC05053602431F380A2864087BDB0141458064AB0D6C00053FC013EC0B0680006012C15940000020000D6C06C6581414D807FB972028A1901D78DC050536020EC1800A0A6C039D639813D80B0780006012C1494000002000096AB8C6581414D8062BE32028A1B01417E04050A360172D77009E2058440003009409C200000040006B3486A480A0A1CAB7134C8117DCC02879B018FAE2C050F3601CED54809E21012720000000067FBAD0007E7E84045C80000000100661580958004041C8000000019F3658401CDFA2C0D64000002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B0000802E8000802000035FDB1D84C09EC6C003BA14814140B0540003012C187400040080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C900008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - OdeAsn1Payload mapPayload = new OdeAsn1Payload(HexUtils.fromHexString(mapHexString)); - assertEquals(UperUtil.determineMessageType(mapPayload), "MAP"); - - String timHexString = "001F79201000000000012AA366D080729B8987D859717EE22001FFFE4FD0011589D828007E537130FB0B2E2FDC440001F46FFFF002B8B2E46E926E27CE6813D862CB90EDC9B89E11CE2CB8E98F9B89BCC4050518B2E365B66E26AE3B8B2E291A66E2591D8141462CB873969B89396C62CB86AFE9B89208E00000131560018300023E43A6A1351800023E4700EFC51881010100030180C620FB90CAAD3B9C5082080E1DDC905E10168E396921000325A0D73B83279C83010180034801090001260001808001838005008001F0408001828005008001304000041020407E800320409780050080012040000320409900018780032040958005000001E0408183E7139D7B70987019B526B8A950052F5C011D3C4B992143E885C71F95DA6071658082346CC03A50D66801F65288C30AB39673D0494536C559047E457AD291C99C20A7FB1244363E993EE3EE98C78742609340541DA01545A0F7339C26A527903576D30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - OdeAsn1Payload timPayload = new OdeAsn1Payload(HexUtils.fromHexString(timHexString)); - assertEquals(UperUtil.determineMessageType(timPayload), "TIM"); - } - - @Test - public void testStripTrailingZeros() { - // Test case: String with trailing zeros - String input1 = "12340000"; - String expected1 = "123400"; - assertEquals(expected1, UperUtil.stripTrailingZeros(input1)); - - // Test case: String without extra zero at end of payload - String input2 = "123450000"; - String expected2 = "12345000"; - assertEquals(expected2, UperUtil.stripTrailingZeros(input2)); - } +class UperUtilTest { + + @Test + void testStripDot2Header() throws StartFlagNotFoundException { + String testHexString = "1011001400"; + String testPayloadStartFlag = "0014"; + String expectedValue = "001400"; + assertEquals(expectedValue, UperUtil.stripDot2Header(testHexString, testPayloadStartFlag)); + } + + @Test + void testStripDot2HeaderBadData() { + String testHexString = "0014"; + String testPayloadStartFlag = "0015"; + assertThrows(StartFlagNotFoundException.class, + () -> UperUtil.stripDot2Header(testHexString, testPayloadStartFlag)); + } + + @Test + void testStripDot3Header() { + byte[] testPacket = {0x10, 0x20, 0x00, 0x1f, 0x00}; + byte[] testExpected = {0x00, 0x1f, 0x00}; + HashMap testMsgStartFlag = new HashMap<>(); + testMsgStartFlag.put("TIM", "001f"); + byte[] testResult = UperUtil.stripDot3Header(testPacket, testMsgStartFlag); + assertArrayEquals(testExpected, testResult); + } + + @Test + void testStripDot3HeaderWithDot2StartIndex() { + byte[] testPacket = {0x0, 0x01, 0x03, (byte) 0x81, 0x00, 0x00, 0x1f, 0x00}; + byte[] testExpected = {0x03, (byte) 0x81, 0x00, 0x00, 0x1f, 0x00}; + HashMap testMsgStartFlag = new HashMap<>(); + testMsgStartFlag.put("TIM", "001f"); + byte[] testResult = UperUtil.stripDot3Header(testPacket, testMsgStartFlag); + assertArrayEquals(testExpected, testResult); + } + + @Test + void testStripDot3HeaderString() { + String testPacketString = "0102001f00"; + String testExpectedString = "001f00"; + String testMsgStartFlag = "001f"; + assertEquals(testExpectedString, UperUtil.stripDot3Header(testPacketString, testMsgStartFlag)); + } + + @Test + void testStripDot3HeaderStringWithDot2StartIndex() { + String testPacketString = "0001038100001f00"; + String testExpectedString = "038100001f00"; + String testMsgStartFlag = "001f"; + assertEquals(testExpectedString, UperUtil.stripDot3Header(testPacketString, testMsgStartFlag)); + } + + @Test + void testDetermineMessageType() { + String mapHexString = + "0012839338023000205E96094D40DF4C2CA626C8516E02DC3C2010640000000289E01C009F603F42E88039900000000A41107B027D80FD0A4200C6400000002973021C09F603DE0C16029200000080002A8A008D027D98FEE805404FB0E1085F60588200028096021200000080002AA0007D027D98FE9802E04FB1200C214456228000A02B1240005022C03240000020000D56B40BC04FB35FF655E2C09F623FB81C835FEC0DB240A0A2BFF4AEBF82C660000804B0089000000800025670034013ECD7FB9578E027D9AFF883C4E050515FFA567A41635000040258024800000400012B8F81F409F663FAC094013ECD7FC83DDB02829AFFA480BC04FB02C6E0000804B09C5000000200035EA98A9604F60DA6C7C113D505C35FFE941D409F65C05034C050500C9880004409BC800000006D2BD3CEC813C40CDE062C1FD400000200008791EA3DB3CF380A009F666F05005813D80FFE0A0588C00040092106A00000000BC75CAC009F66DB54C04A813D80A100801241ED40000000078EBAE3B6DA7A008809E2050904008811F100000000BC72389009F60ECA8002049C400000002F1B2CA3027D93A71FA813EC204BC400000002F1B2B34027B0397608880CD10000000039B8E1A51036820505080D51000000003A7461ED1036760505080DD1000000003B2F62311006260505160BCA00000080002B785E2A80A0A6C028DE728145037F1F9E456488000202B2540001022C1894000001000057058C5B81414D806DBCD4028A18F4DF23A050502C8D0000404B05A5000000800035B6471BC05053602431F380A2864087BDB0141458064AB0D6C00053FC013EC0B0680006012C15940000020000D6C06C6581414D807FB972028A1901D78DC050536020EC1800A0A6C039D639813D80B0780006012C1494000002000096AB8C6581414D8062BE32028A1B01417E04050A360172D77009E2058440003009409C200000040006B3486A480A0A1CAB7134C8117DCC02879B018FAE2C050F3601CED54809E21012720000000067FBAD0007E7E84045C80000000100661580958004041C8000000019F3658401CDFA2C0D64000002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B0000802E8000802000035FDB1D84C09EC6C003BA14814140B0540003012C187400040080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C900008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + OdeAsn1Payload mapPayload = new OdeAsn1Payload(HexUtils.fromHexString(mapHexString)); + assertEquals("MAP", UperUtil.determineMessageType(mapPayload)); + + String timHexString = + "001F79201000000000012AA366D080729B8987D859717EE22001FFFE4FD0011589D828007E537130FB0B2E2FDC440001F46FFFF002B8B2E46E926E27CE6813D862CB90EDC9B89E11CE2CB8E98F9B89BCC4050518B2E365B66E26AE3B8B2E291A66E2591D8141462CB873969B89396C62CB86AFE9B89208E00000131560018300023E43A6A1351800023E4700EFC51881010100030180C620FB90CAAD3B9C5082080E1DDC905E10168E396921000325A0D73B83279C83010180034801090001260001808001838005008001F0408001828005008001304000041020407E800320409780050080012040000320409900018780032040958005000001E0408183E7139D7B70987019B526B8A950052F5C011D3C4B992143E885C71F95DA6071658082346CC03A50D66801F65288C30AB39673D0494536C559047E457AD291C99C20A7FB1244363E993EE3EE98C78742609340541DA01545A0F7339C26A527903576D30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; + OdeAsn1Payload timPayload = new OdeAsn1Payload(HexUtils.fromHexString(timHexString)); + assertEquals("TIM", UperUtil.determineMessageType(timPayload)); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/upload/FileUploadControllerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/upload/FileUploadControllerTest.java index c83b30afd..c24d08a35 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/upload/FileUploadControllerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/upload/FileUploadControllerTest.java @@ -1,12 +1,12 @@ /******************************************************************************* * Copyright 2018 572682 - * + * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy * of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the @@ -18,17 +18,18 @@ import mockit.Capturing; import mockit.Expectations; import mockit.Injectable; -import mockit.Mock; -import mockit.MockUp; import mockit.Mocked; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.http.HttpStatus; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.web.multipart.MultipartFile; -import us.dot.its.jpo.ode.OdeProperties; +import us.dot.its.jpo.ode.coder.stream.FileImporterProperties; import us.dot.its.jpo.ode.importer.ImporterDirectoryWatcher; +import us.dot.its.jpo.ode.kafka.topics.FileTopics; +import us.dot.its.jpo.ode.kafka.topics.JsonTopics; +import us.dot.its.jpo.ode.kafka.OdeKafkaProperties; +import us.dot.its.jpo.ode.kafka.topics.RawEncodedJsonTopics; import us.dot.its.jpo.ode.storage.StorageFileNotFoundException; import us.dot.its.jpo.ode.storage.StorageService; @@ -37,80 +38,85 @@ import static org.junit.Assert.assertEquals; -public class FileUploadControllerTest { - - FileUploadController testFileUploadController; - - @Mocked - StorageService mockStorageService; - - @Injectable - OdeProperties injectableOdeProperties; - - @Injectable - SimpMessagingTemplate injectableSimpMessagingTemplate; - - @Capturing - Executors capturingExecutors; - @Capturing - ImporterDirectoryWatcher capturingImporterDirectoryWatcher; - @Mocked - ExecutorService mockExecutorService; - - @Mocked - OdeProperties mockOdeProperties; - - @Mocked - MultipartFile mockMultipartFile; - - @BeforeEach - public void constructorShouldLaunchSevenThreads() { - new Expectations() { - { - mockOdeProperties.getUploadLocationRoot(); - result = "testRootDir"; - mockOdeProperties.getUploadLocationObuLog(); - result = "testLogFileDir"; - - Executors.newCachedThreadPool(); - result = mockExecutorService; - - mockExecutorService.submit((Runnable) any); - times = 11; - } - }; - testFileUploadController = new FileUploadController(mockStorageService, mockOdeProperties, - injectableSimpMessagingTemplate); - } - - @Test - public void handleFileUploadReturnsErrorOnStorageException() { - new Expectations() { - { - mockStorageService.store((MultipartFile) any, anyString); - result = new StorageFileNotFoundException("testException123"); - } - }; - - assertEquals(HttpStatus.BAD_REQUEST, - testFileUploadController.handleFileUpload(mockMultipartFile, "type").getStatusCode()); - } - - @Test - public void successfulUploadReturnsHttpOk() { - new Expectations() { - { - mockStorageService.store((MultipartFile) any, anyString); - times = 1; - } - }; - - assertEquals(HttpStatus.OK, testFileUploadController.handleFileUpload(mockMultipartFile, "type").getStatusCode()); - } - - @Test - public void testStorageFileNotFoundException() { - assertEquals(HttpStatus.NOT_FOUND, testFileUploadController - .handleStorageFileNotFound(new StorageFileNotFoundException("testException123")).getStatusCode()); - } +class FileUploadControllerTest { + + FileUploadController testFileUploadController; + + @Mocked + StorageService mockStorageService; + + @Injectable + OdeKafkaProperties injectableOdeKafkaProperties; + + @Injectable + SimpMessagingTemplate injectableSimpMessagingTemplate; + + @Injectable + FileImporterProperties fileImporterProps; + + @Injectable + FileTopics fileTopics; + + @Injectable + JsonTopics jsonTopics; + + @Injectable + RawEncodedJsonTopics rawEncodedJsonTopics; + + @Capturing + Executors capturingExecutors; + @Capturing + ImporterDirectoryWatcher capturingImporterDirectoryWatcher; + @Mocked + ExecutorService mockExecutorService; + + @Mocked + MultipartFile mockMultipartFile; + + @BeforeEach + public void constructorShouldLaunchSevenThreads() { + new Expectations() { + { + Executors.newCachedThreadPool(); + result = mockExecutorService; + + mockExecutorService.submit((Runnable) any); + times = 11; + } + }; + + testFileUploadController = new FileUploadController(mockStorageService, + injectableSimpMessagingTemplate, fileImporterProps, fileTopics, jsonTopics, rawEncodedJsonTopics, injectableOdeKafkaProperties); + } + + @Test + void handleFileUploadReturnsErrorOnStorageException() { + new Expectations() { + { + mockStorageService.store((MultipartFile) any, anyString); + result = new StorageFileNotFoundException("testException123"); + } + }; + + assertEquals(HttpStatus.BAD_REQUEST, + testFileUploadController.handleFileUpload(mockMultipartFile, "type").getStatusCode()); + } + + @Test + void successfulUploadReturnsHttpOk() { + new Expectations() { + { + mockStorageService.store((MultipartFile) any, anyString); + times = 1; + } + }; + + assertEquals(HttpStatus.OK, testFileUploadController.handleFileUpload(mockMultipartFile, "type").getStatusCode()); + } + + @Test + void testStorageFileNotFoundException() { + assertEquals(HttpStatus.NOT_FOUND, testFileUploadController + .handleStorageFileNotFound(new StorageFileNotFoundException("testException123")).getStatusCode()); + } } diff --git a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/wrapper/MessageProducerTest.java b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/wrapper/MessageProducerTest.java index 86b939d0e..130d7e4c2 100644 --- a/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/wrapper/MessageProducerTest.java +++ b/jpo-ode-svcs/src/test/java/us/dot/its/jpo/ode/wrapper/MessageProducerTest.java @@ -75,7 +75,6 @@ public void testSendWithTopic() { new MessageProducer("testBrokers", null, "testPartitioner", mockProps, Collections.singleton("testTopic")); - testMessageProducer.setProducer(mockProducer); testMessageProducer.send("testTopic", "testKey", "testValue"); } diff --git a/jpo-ode-svcs/src/test/resources/application.yaml b/jpo-ode-svcs/src/test/resources/application.yaml new file mode 100644 index 000000000..8555b75dd --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/application.yaml @@ -0,0 +1,133 @@ +spring: + http: + multipart: + max-file-size: 1MB + max-request-size: 1MB + kafka: + bootstrap-servers: localhost:4242 + producer: + key-serializer: org.apache.kafka.common.serialization.StringSerializer + value-serializer: org.apache.kafka.common.serialization.StringSerializer + client-id: "ode-svcs-producer" + consumer: + key-deserializer: org.apache.kafka.common.serialization.StringDeserializer + value-deserializer: org.apache.kafka.common.serialization.StringDeserializer + group-id: test-group + auto-offset-reset: earliest + client-id: "ode-svcs-consumer" + admin: + auto-create: false +ode: + security-services: + host-ip: "test-host" + port: 1234 + signature-endpoint: "http://localhost:8090/sign" + is-sdw-signing-enabled: + is-rsu-signing-enabled: + rsu: + srm-slots: 100 + username: "test-username" + password: "test-password" + kafka: + brokers: "localhost:4242" + producer: + type: "async" + acks: "0" + retries: 1 + batch-size: 1638 + linger-ms: 2 + buffer-memory: 33554433 + key-serializer: "org.apache.kafka.common.serialization.StringSerializer" + value-serializer: "org.apache.kafka.common.serialization.ByteArraySerializer" + partitioner-class: "org.apache.kafka.clients.producer.internals.DefaultPartitioner" + disabled-topics: + - "topic.OdeBsmRxPojo" + - "topic.OdeBsmTxPojo" + - "topic.OdeBsmDuringEventPojo" + - "topic.OdeTimBroadcastPojo" + topics: + asn1: + decoder-input: "topic.Asn1DecoderInput" + decoder-output: "topic.Asn1DecoderOutput" + encoder-input: "topic.Asn1EncoderInput" + encoder-output: "topic.Asn1EncoderOutput" + json: + bsm: "topic.OdeBsmJson" + map: "topic.OdeMapJson" + psm: "topic.OdePsmJson" + spat: "topic.OdeSpatJson" + srm: "topic.OdeSrmJson" + ssm: "topic.OdeSsmJson" + tim: "topic.OdeTimJson" + driver-alert: "topic.OdeDriverAlertJson" + tim-broadcast: "topic.OdeTimBroadcastJson" + bsm-filtered: "topic.FilteredOdeBsmJson" + spat-filtered: "topic.FilteredOdeSpatJson" + tim-filtered: "topic.FilteredOdeTimJson" + tim-tmc-filtered: "topic.OdeTimJsonTMCFiltered" + tim-cert-expiration: "topic.OdeTIMCertExpirationTimeJson" + dn-message: "topic.OdeDNMsgJson" + rx-tim: "topic.OdeTimRxJson" + rx-spat: "topic.OdeSpatRxJson" + j2735-tim-broadcast: "topic.J2735TimBroadcastJson" + pojo: + bsm: "topic.OdeBsmPojo" + spat: "topic.OdeSpatPojo" + ssm: "topic.OdeSsmPojo" + tim-broadcast: "topic.OdeTimBroadcastPojo" + bsm-during-event: "topic.OdeBsmDuringEventPojo" + rx-bsm: "topic.OdeBsmRxPojo" + rx-spat: "topic.OdeSpatRxPojo" + tx-bsm: "topic.OdeBsmTxPojo" + tx-map: "topic.OdeMapTxPojo" + tx-psm: "topic.OdePsmTxPojo" + tx-spat: "topic.OdeSpatTxPojo" + tx-srm: "topic.OdeSrmTxPojo" + raw-encoded-json: + bsm: "topic.OdeRawEncodedBSMJson" + map: "topic.OdeRawEncodedMAPJson" + psm: "topic.OdeRawEncodedPSMJson" + spat: "topic.OdeRawEncodedSPATJson" + srm: "topic.OdeRawEncodedSRMJson" + ssm: "topic.OdeRawEncodedSSMJson" + tim: "topic.OdeRawEncodedTIMJson" + sdx-depositor: + input: "topic.SDWDepositorInput" + file: + filtered-output: "/topic/filtered_messages" + unfiltered-output: "/topic/unfiltered_messages" + receivers: + generic: + buffer-size: 2000 + receiver-port: 44990 + bsm: + buffer-size: 500 + receiver-port: 46800 + map: + buffer-size: 2048 + receiver-port: 44920 + psm: + buffer-size: 500 + receiver-port: 44940 + spat: + buffer-size: 500 + receiver-port: 44910 + srm: + buffer-size: 500 + receiver-port: 44930 + ssm: + buffer-size: 500 + receiver-port: 44900 + tim: + buffer-size: 500 + receiver-port: 47900 + file-importer: + buffer-size: 500 + backup-dir: "backup" + failed-dir: "failed" + time-period: 1 + upload-location-root: "uploads" + obu-log-upload-location: "bsmlog" + tim-ingest-monitoring: + tracking-enabled: true + interval: 10 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/logback-test.xml b/jpo-ode-svcs/src/test/resources/logback-test.xml index a7a69c483..de2819295 100644 --- a/jpo-ode-svcs/src/test/resources/logback-test.xml +++ b/jpo-ode-svcs/src/test/resources/logback-test.xml @@ -1,10 +1,10 @@ - - - %msg%n - - - - - + + + %msg%n + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/sdwRequest.json b/jpo-ode-svcs/src/test/resources/sdwRequest.json index 321b36514..7343d48e8 100644 --- a/jpo-ode-svcs/src/test/resources/sdwRequest.json +++ b/jpo-ode-svcs/src/test/resources/sdwRequest.json @@ -24,7 +24,7 @@ { "startDateTime": "2020-04-30T14:23:59.497Z", "durationTime": 1440, - "notUsed": "1", + "doNotUse1": 0, "frameType": "advisory", "msgId": { "roadSignID": { @@ -37,7 +37,7 @@ } }, "priority": "5", - "notUsed1": "0", + "doNotUse2": 0, "regions": [ { "name": "I_I 25_SAT-1CEE1793", @@ -82,8 +82,8 @@ "direction": "1000000000000001" } ], - "sspMsgTypes": "1", - "sspMsgContent": "1", + "doNotUse4": 0, + "doNotUse3": 0, "content": "advisory", "items": [ "5127" diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeBsmDataCreatorHelper_BSM_XER_J2735_2024_OneExtension.xml b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeBsmDataCreatorHelper_BSM_XER_J2735_2024_OneExtension.xml new file mode 100644 index 000000000..e647661dd --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeBsmDataCreatorHelper_BSM_XER_J2735_2024_OneExtension.xml @@ -0,0 +1 @@ +EVbsmTxsuccessunavailableunavailableunavailableunavailableunavailableRSUunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload9db5127b-29dd-4704-b7d0-55f6d69a6bc010002025-01-20T23:45:46.658Z80OBUfalse00143D5048F677DDEFD9E6E260A4965C63E5A5369414100070000000FD7D0FA1007FFF80005A0FA00058C0210023BFFA90001208100103FE55020EA34FFFEC8040012000025C5C3DA075B080A6B14F150DEECCBC808279F7D6B9169D4F8071B7E1DF888EEE77687117D4612E4B66FA3A6D341195313B212332B0A90AF809B701085FA62DA0CD756E7B803DBB8E58A897B9F28A759692172.19.0.1MessageFrame206523D9DF7748999404740169-104969272414957404081920012702001-12701000018050001000000000000-1347-37532261530-1998-6328-1262370-1887-8337-3962710-1166-10100-5763020164-11501-77633802130-12445-95637804586-12737-102642206499-12139-111646708041-10872-906503010185-7426-536553532767200000010000 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeBsmDataCreatorHelper_BSM_XER_J2735_2024_TwoExtensions.xml b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeBsmDataCreatorHelper_BSM_XER_J2735_2024_TwoExtensions.xml new file mode 100644 index 000000000..f462b7768 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeBsmDataCreatorHelper_BSM_XER_J2735_2024_TwoExtensions.xml @@ -0,0 +1 @@ +EVbsmTxsuccessunavailableunavailableunavailableunavailableunavailableRSUunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadb0e5a526-d2d0-41a5-a83a-7814c521090810002025-01-21T17:29:23.063Z80OBUfalse0014604EDEE641A6F6C566D3144E145C1CB823DE1D9415BA70005510FDFA1FA1007FFF8000A02801009CC061002DBFCD500019B81002BBECB6FFC1FCA0FE713456EFDE2AB20FE36AF550FCE334AFFFEC802107C0009000014E9B5FBFFFC7FFFF280000172.18.0.1MessageFrame20597B99069B56085402735004-11168380311426859401112402177612720012001-1270100003201280091-4060329387-2469-24070-798-23881-175466-915-34136-256566327672002005810965535655351010 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON_J2735-2024.json b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON_J2735-2024.json new file mode 100644 index 000000000..bdb7550b0 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_JSON_J2735-2024.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"timMsg","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"streamId":"8af76b08-89bf-422e-b674-0f0ee065666f","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-06T10:39:42.806Z","schemaVersion":8,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"RSU","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A600","originIp":"172.18.0.1"},"payload":{"data":{"msgCnt":82,"timeStamp":345337,"packetID":"4F4354455420535452","urlB":"IA5St","dataFrames":[{"doNotUse1":0,"frameType":"commercialSignage","msgId":{"furtherInfoID":"4F43"},"startYear":425,"startTime":306216,"durationTime":31001,"priority":2,"doNotUse2":0,"regions":[{"name":"IA5","id":{"region":38149,"id":48118},"anchor":{"lat":-567387419,"long":-1717691068,"elevation":53848},"laneWidth":15175,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":true,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"oldRegion":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor50000meters","area":{"circle":{"center":{"lat":-686654332,"long":1616508908,"elevation":38736},"radius":3832,"units":"centimeter"}}}}},{"name":"I","id":{"region":64573,"id":33281},"anchor":{"lat":-714161321,"long":-1285139143,"elevation":48475},"laneWidth":26805,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"path":{"scale":1,"offset":{"ll":{"nodes":[{"delta":{"node-LL4":{"lon":-127947,"lat":-120550}},"attributes":{"localNode":["downstreamStopLine","closedToTraffic"],"disabled":["adjacentParkingOnLeft","transitStopOnLeft","parallelParking","mergingLaneLeft","curbOnLeft"],"enabled":["midBlockCurbPresent","transitStopInLane","taperToCenterLine","lowCurbsPresent"],"data":[{"laneAngle":101},{"laneAngle":62},{"speedLimits":[{"type":"truckMaxSpeed","speed":5822},{"type":"truckNightMaxSpeed","speed":3017}]},{"pathEndPointAngle":-8},{"laneCrownPointLeft":35}],"dWidth":162,"dElevation":424}},{"delta":{"node-LatLon":{"lon":-998896073,"lat":735850714}},"attributes":{"localNode":["hydrantPresent","safeIsland","closedToTraffic","stopLine","reserved"],"disabled":["loadingzoneOnRight","adjacentParkingOnRight","headInParking"],"enabled":["costToPark","mergingLaneLeft","midBlockCurbPresent","unEvenPavementPresent","curbOnLeft"],"data":[{"speedLimits":[{"type":"maxSpeedInSchoolZoneWhenChildrenArePresent","speed":3453},{"type":"truckMinSpeed","speed":7876}]},{"speedLimits":[{"type":"truckMinSpeed","speed":2097}]},{"laneAngle":-82}],"dWidth":264,"dElevation":-269}},{"delta":{"node-LL4":{"lon":86161,"lat":20207}},"attributes":{"localNode":["roundedCapStyleA","divergePoint","roundedCapStyleB","reserved"],"disabled":["adjacentParkingOnLeft","adjacentBikeLaneOnRight"],"enabled":["headInParking","timeRestrictionsOnParking"],"data":[{"laneCrownPointCenter":-68}],"dWidth":245,"dElevation":247}},{"delta":{"node-LL1":{"lon":-172,"lat":525}},"attributes":{"localNode":["closedToTraffic","roundedCapStyleA"],"disabled":["partialCurbIntrusion"],"enabled":["adaptiveTimingPresent"],"dWidth":206,"dElevation":144}},{"delta":{"node-LL5":{"lon":-873243,"lat":1464496}},"attributes":{"localNode":["stopLine","downstreamStartNode"],"disabled":["taperToRight","doNotBlock"],"enabled":["bikeBoxInFront"],"data":[{"pathEndPointAngle":58},{"pathEndPointAngle":1},{"pathEndPointAngle":25},{"laneAngle":137}],"dWidth":414,"dElevation":181}}]}}}}},{"name":"IA5","id":{"region":7296,"id":1154},"anchor":{"lat":29950376,"long":270580409,"elevation":16367},"laneWidth":4926,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor10000meters","laneWidth":26482,"circle":{"center":{"lat":598135630,"long":664850545,"elevation":32186},"radius":3930,"units":"mile"}}}},{"name":"IA5S","id":{"region":1582,"id":46417},"anchor":{"lat":-283655839,"long":-685153664,"elevation":57976},"laneWidth":7235,"directionality":"forward","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":true,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"oldRegion":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor1000meters","area":{"shapePointSet":{"anchor":{"lat":581272185,"long":1108489970,"elevation":9059},"laneWidth":20085,"directionality":"forward","nodeList":{"nodes":[{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["mergePoint","reserved"],"disabled":["turnOutPointOnRight","adjacentParkingOnLeft","freeParking","costToPark"],"enabled":["costToPark","adjacentParkingOnRight"],"data":[{"laneCrownPointRight":-87},{"laneCrownPointRight":4},{"laneAngle":-167}],"dWidth":144,"dElevation":239}},{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["hydrantPresent","divergePoint"],"disabled":["freeParking","unEvenPavementPresent"],"enabled":["freeParking","adaptiveTimingPresent","taperToLeft"],"data":[{"speedLimits":[{"type":"vehiclesWithTrailersMaxSpeed","speed":3517}]}],"dWidth":-36,"dElevation":-453}},{"delta":{"node-LatLon":{"lon":-605370079,"lat":829743521}},"attributes":{"localNode":["roundedCapStyleA","downstreamStopLine","mergePoint","hydrantPresent"],"disabled":["doNotBlock","whiteLine","bikeBoxInFront","sharedBikeLane"],"enabled":["bikeBoxInFront","transitStopInLane","unEvenPavementPresent","adjacentBikeLaneOnRight"],"data":[{"laneAngle":60},{"pathEndPointAngle":-95}],"dWidth":463,"dElevation":57}}]}}}}}},{"name":"IA5","id":{"region":11251,"id":41890},"anchor":{"lat":385181606,"long":1670812734,"elevation":46812},"laneWidth":16153,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useInstantlyOnly","laneWidth":6004,"circle":{"center":{"lat":-509239964,"long":772185922,"elevation":9413},"radius":1224,"units":"cm2-5"}}}}],"doNotUse3":0,"doNotUse4":0,"content":{"exitService":[{"item":{"itis":599}}]},"url":"IA5S"},{"doNotUse1":0,"frameType":"commercialSignage","msgId":{"roadSignID":{"position":{"lat":634998835,"long":313588249,"elevation":50308},"viewAngle":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":true,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"mutcdCode":"maintenance","crc":"4F43"}},"startYear":3481,"startTime":305174,"durationTime":24752,"priority":5,"doNotUse2":0,"regions":[{"name":"I","id":{"region":44107,"id":63537},"anchor":{"lat":-419185997,"long":-533287210,"elevation":51107},"laneWidth":25278,"directionality":"reverse","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":true,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"path":{"scale":8,"offset":{"ll":{"nodes":[{"delta":{"node-LatLon":{"lon":900792217,"lat":448269129}},"attributes":{"localNode":["roundedCapStyleA","roundedCapStyleB","downstreamStartNode","divergePoint"],"disabled":["timeRestrictionsOnParking","sharedWithTrackedVehicle"],"enabled":["taperToCenterLine"],"data":[{"pathEndPointAngle":18},{"pathEndPointAngle":24},{"laneCrownPointCenter":9}],"dWidth":225,"dElevation":-213}},{"delta":{"node-LatLon":{"lon":900792217,"lat":448269129}},"attributes":{"localNode":["stopLine","mergePoint"],"disabled":["rfSignalRequestPresent"],"enabled":["turnOutPointOnLeft","loadingzoneOnLeft","headInParking","adjacentParkingOnRight","safeIsland"],"data":[{"pathEndPointAngle":-109},{"laneCrownPointRight":83}],"dWidth":-31,"dElevation":-482}},{"delta":{"node-LL1":{"lon":-1370,"lat":-1581}},"attributes":{"localNode":["mergePoint","divergePoint","downstreamStartNode","safeIsland"],"disabled":["adaptiveTimingPresent","partialCurbIntrusion","parallelParking","curbOnLeft","doNotBlock"],"enabled":["curbOnRight","sharedBikeLane"],"data":[{"laneCrownPointLeft":-121}],"dWidth":505,"dElevation":348}}]}}}}},{"name":"IA","id":{"region":30031,"id":322},"anchor":{"lat":-454547095,"long":353479827,"elevation":59458},"laneWidth":23566,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":true,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":true,"from337-5to360-0degrees":false},"extent":"useFor10meters","laneWidth":24321,"circle":{"center":{"lat":-539150408,"long":-814772254,"elevation":45059},"radius":1157,"units":"mile"}}}},{"name":"IA5St","id":{"region":46088,"id":60227},"anchor":{"lat":-476956537,"long":759386724,"elevation":4505},"laneWidth":28846,"directionality":"forward","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":true,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":true,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor100meters","laneWidth":8084,"circle":{"center":{"lat":-405703383,"long":-508985739,"elevation":9512},"radius":2519,"units":"mile"}}}}],"doNotUse3":0,"doNotUse4":0,"content":{"exitService":[{"item":{"text":"I"}},{"item":{"text":"IA5St"}},{"item":{"text":"IA5"}}]},"url":"IA5St"},{"doNotUse1":0,"frameType":"unknown","msgId":{"furtherInfoID":"4F43"},"startYear":2776,"startTime":408571,"durationTime":15957,"priority":5,"doNotUse2":0,"regions":[{"name":"IA","id":{"region":62756,"id":63693},"anchor":{"lat":424936826,"long":-1208779998,"elevation":35858},"laneWidth":18563,"directionality":"both","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":true,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":true,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor5000meters","laneWidth":17158,"circle":{"center":{"lat":442482548,"long":-804103995,"elevation":43319},"radius":1951,"units":"meter"}}}},{"name":"IA5S","id":{"region":51032,"id":30319},"anchor":{"lat":-559743245,"long":1697199162,"elevation":46636},"laneWidth":5901,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":true,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"geometry":{"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":true,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor500meters","laneWidth":28716,"circle":{"center":{"lat":707126893,"long":-77527193,"elevation":35728},"radius":3343,"units":"meter"}}}},{"name":"IA","id":{"region":23939,"id":26592},"anchor":{"lat":-328004279,"long":88284632,"elevation":45419},"laneWidth":15118,"directionality":"unavailable","closedPath":true,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":true,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"oldRegion":{"direction":{"from000-0to022-5degrees":true,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":false,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"extent":"useFor50000meters","area":{"circle":{"center":{"lat":171361070,"long":1462406911,"elevation":57912},"radius":3502,"units":"kilometer"}}}}}],"doNotUse3":0,"doNotUse4":0,"content":{"speedLimit":[{"item":{"itis":40721}},{"item":{"itis":36784}},{"item":{"text":"IA5S"}},{"item":{"text":"IA5"}},{"item":{"itis":49435}}]},"url":"IA5S"}]},"dataType":"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation"}} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2016.xml b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2016.xml new file mode 100644 index 000000000..ea1f346b7 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2016.xml @@ -0,0 +1,990 @@ + + + + + timMsg + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + 8af76b08-89bf-422e-b674-0f0ee065666f + 1 + 0 + 0 + 0 + + 2024-12-06T10:39:42.806Z + 8 + 0 + + RSU + false + + + 001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A600 + 172.18.0.1 + + + MessageFrame + + + 31 + + + 82 + 345337 + 4F4354455420535452 + IA5St + + + 0 + + + + + 4F43 + + 425 + 306216 + 31001 + 2 + 0 + + + IA5 + + 38149 + 48118 + + + -567387419 + -1717691068 + 53848 + + 15175 + + + + + + + 0001000000000000 + + + 0000000001000000 + + + + + +
+ -686654332 + 1616508908 + 38736 +
+ 3832 + + + +
+ +
+
+
+ + I + + 64573 + 33281 + + + -714161321 + -1285139143 + 48475 + + 26805 + + + + + + + 0000001000000000 + + + 1 + + + + + + + -127947 + -120550 + + + + + + + + + + + + + + + + + + + + + + 101 + + + + + + 5822 + + + + + + 3017 + + + -8 + 62 + 35 + + 162 + 424 + + + + + + -998896073 + 735850714 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3453 + + + + + + 7876 + + + -82 + + + + + + 2097 + + + + 264 + -269 + + + + + + 86161 + 20207 + + + + + + + + + + + + + + + + + + + -68 + + 245 + 247 + + + + + + -172 + 525 + + + + + + + + + + + + + + 206 + 144 + + + + + + -873243 + 1464496 + + + + + + + + + + + + + + + + 58 + 137 + 1 + 25 + + 414 + 181 + + + + + + + + + + IA5 + + 7296 + 1154 + + + 29950376 + 270580409 + 16367 + + 4926 + + + + + + + 0000000001000000 + + + 0000001000000000 + + + + 26482 + +
+ 598135630 + 664850545 + 32186 +
+ 3930 + + + +
+
+
+
+ + IA5S + + 1582 + 46417 + + + -283655839 + -685153664 + 57976 + + 7235 + + + + + + + 0000000100000000 + + + 0000001000000000 + + + + + + + 581272185 + 1108489970 + 9059 + + 20085 + + + + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + -87 + 4 + -167 + + 144 + 239 + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + + + + + + 3517 + + + + -36 + -453 + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + + + + + + 60 + -95 + + 463 + 57 + + + + + + + + + + + IA5 + + 11251 + 41890 + + + 385181606 + 1670812734 + 46812 + + 16153 + + + + + + + 0000001000000000 + + + 0000000001000000 + + + + 6004 + +
+ -509239964 + 772185922 + 9413 +
+ 1224 + + + +
+
+
+
+
+ 0 + 0 + + + + + 599 + + + + + IA5S +
+ + 0 + + + + + + + 634998835 + 313588249 + 50308 + + 0000000001000000 + + + + 4F43 + + + 3481 + 305174 + 24752 + 5 + 0 + + + I + + 44107 + 63537 + + + -419185997 + -533287210 + 51107 + + 25278 + + + + + + + 0000000000001000 + + + 8 + + + + + + + 900792217 + 448269129 + + + + + + + + + + + + + + + + + + + 18 + 9 + 24 + + 225 + -213 + + + + + + 900792217 + 448269129 + + + + + + + + + + + + + + + + + + + + -109 + 83 + + -31 + -482 + + + + + + -1370 + -1581 + + + + + + + + + + + + + + + + + + + + + + + + -121 + + 505 + 348 + + + + + + + + + + IA + + 30031 + 322 + + + -454547095 + 353479827 + 59458 + + 23566 + + + + + + + 0000000000100000 + + + 0000000000000010 + + + + 24321 + +
+ -539150408 + -814772254 + 45059 +
+ 1157 + + + +
+
+
+
+ + IA5St + + 46088 + 60227 + + + -476956537 + 759386724 + 4505 + + 28846 + + + + + + + 0000000000000010 + + + 0010000000000000 + + + + 8084 + +
+ -405703383 + -508985739 + 9512 +
+ 2519 + + + +
+
+
+
+
+ 0 + 0 + + + + + I + + + + + IA5St + + + + + IA5 + + + + + IA5St +
+ + 0 + + + + + 4F43 + + 2776 + 408571 + 15957 + 5 + 0 + + + IA + + 62756 + 63693 + + + 424936826 + -1208779998 + 35858 + + 18563 + + + + + + + 0000000010000000 + + + 0010000000000000 + + + + 17158 + +
+ 442482548 + -804103995 + 43319 +
+ 1951 + + + +
+
+
+
+ + IA5S + + 51032 + 30319 + + + -559743245 + 1697199162 + 46636 + + 5901 + + + + + + + 0000000000000100 + + + 0000001000000000 + + + + 28716 + +
+ 707126893 + -77527193 + 35728 +
+ 3343 + + + +
+
+
+
+ + IA + + 23939 + 26592 + + + -328004279 + 88284632 + 45419 + + 15118 + + + + + + + 0000100000000000 + + + 1000000000000000 + + + + + +
+ 171361070 + 1462406911 + 57912 +
+ 3502 + + + +
+ +
+
+
+
+ 0 + 0 + + + + + 40721 + + + + + 36784 + + + + + IA5S + + + + + IA5 + + + + + 49435 + + + + + IA5S +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2020.xml b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2020.xml new file mode 100644 index 000000000..af79564bd --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2020.xml @@ -0,0 +1,990 @@ + + + + + timMsg + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + 8af76b08-89bf-422e-b674-0f0ee065666f + 1 + 0 + 0 + 0 + + 2024-12-06T10:39:42.806Z + 8 + 0 + + RSU + false + + + 001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A600 + 172.18.0.1 + + + MessageFrame + + + 31 + + + 82 + 345337 + 4F4354455420535452 + IA5St + + + 0 + + + + + 4F43 + + 425 + 306216 + 31001 + 2 + 0 + + + IA5 + + 38149 + 48118 + + + -567387419 + -1717691068 + 53848 + + 15175 + + + + + + + 0001000000000000 + + + 0000000001000000 + + + + + +
+ -686654332 + 1616508908 + 38736 +
+ 3832 + + + +
+ +
+
+
+ + I + + 64573 + 33281 + + + -714161321 + -1285139143 + 48475 + + 26805 + + + + + + + 0000001000000000 + + + 1 + + + + + + + -127947 + -120550 + + + + + + + + + + + + + + + + + + + + + + 101 + + + + + + 5822 + + + + + + 3017 + + + -8 + 62 + 35 + + 162 + 424 + + + + + + -998896073 + 735850714 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3453 + + + + + + 7876 + + + -82 + + + + + + 2097 + + + + 264 + -269 + + + + + + 86161 + 20207 + + + + + + + + + + + + + + + + + + + -68 + + 245 + 247 + + + + + + -172 + 525 + + + + + + + + + + + + + + 206 + 144 + + + + + + -873243 + 1464496 + + + + + + + + + + + + + + + + 58 + 137 + 1 + 25 + + 414 + 181 + + + + + + + + + + IA5 + + 7296 + 1154 + + + 29950376 + 270580409 + 16367 + + 4926 + + + + + + + 0000000001000000 + + + 0000001000000000 + + + + 26482 + +
+ 598135630 + 664850545 + 32186 +
+ 3930 + + + +
+
+
+
+ + IA5S + + 1582 + 46417 + + + -283655839 + -685153664 + 57976 + + 7235 + + + + + + + 0000000100000000 + + + 0000001000000000 + + + + + + + 581272185 + 1108489970 + 9059 + + 20085 + + + + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + -87 + 4 + -167 + + 144 + 239 + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + + + + + + 3517 + + + + -36 + -453 + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + + + + + + 60 + -95 + + 463 + 57 + + + + + + + + + + + IA5 + + 11251 + 41890 + + + 385181606 + 1670812734 + 46812 + + 16153 + + + + + + + 0000001000000000 + + + 0000000001000000 + + + + 6004 + +
+ -509239964 + 772185922 + 9413 +
+ 1224 + + + +
+
+
+
+
+ 0 + 0 + + + + + 599 + + + + + IA5S +
+ + 0 + + + + + + + 634998835 + 313588249 + 50308 + + 0000000001000000 + + + + 4F43 + + + 3481 + 305174 + 24752 + 5 + 0 + + + I + + 44107 + 63537 + + + -419185997 + -533287210 + 51107 + + 25278 + + + + + + + 0000000000001000 + + + 8 + + + + + + + 900792217 + 448269129 + + + + + + + + + + + + + + + + + + + 18 + 9 + 24 + + 225 + -213 + + + + + + 900792217 + 448269129 + + + + + + + + + + + + + + + + + + + + -109 + 83 + + -31 + -482 + + + + + + -1370 + -1581 + + + + + + + + + + + + + + + + + + + + + + + + -121 + + 505 + 348 + + + + + + + + + + IA + + 30031 + 322 + + + -454547095 + 353479827 + 59458 + + 23566 + + + + + + + 0000000000100000 + + + 0000000000000010 + + + + 24321 + +
+ -539150408 + -814772254 + 45059 +
+ 1157 + + + +
+
+
+
+ + IA5St + + 46088 + 60227 + + + -476956537 + 759386724 + 4505 + + 28846 + + + + + + + 0000000000000010 + + + 0010000000000000 + + + + 8084 + +
+ -405703383 + -508985739 + 9512 +
+ 2519 + + + +
+
+
+
+
+ 0 + 0 + + + + + I + + + + + IA5St + + + + + IA5 + + + + + IA5St +
+ + 0 + + + + + 4F43 + + 2776 + 408571 + 15957 + 5 + 0 + + + IA + + 62756 + 63693 + + + 424936826 + -1208779998 + 35858 + + 18563 + + + + + + + 0000000010000000 + + + 0010000000000000 + + + + 17158 + +
+ 442482548 + -804103995 + 43319 +
+ 1951 + + + +
+
+
+
+ + IA5S + + 51032 + 30319 + + + -559743245 + 1697199162 + 46636 + + 5901 + + + + + + + 0000000000000100 + + + 0000001000000000 + + + + 28716 + +
+ 707126893 + -77527193 + 35728 +
+ 3343 + + + +
+
+
+
+ + IA + + 23939 + 26592 + + + -328004279 + 88284632 + 45419 + + 15118 + + + + + + + 0000100000000000 + + + 1000000000000000 + + + + + +
+ 171361070 + 1462406911 + 57912 +
+ 3502 + + + +
+ +
+
+
+
+ 0 + 0 + + + + + 40721 + + + + + 36784 + + + + + IA5S + + + + + IA5 + + + + + 49435 + + + + + IA5S +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2024.xml b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2024.xml new file mode 100644 index 000000000..06ffec352 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.coder/OdeTimDataCreatorHelper_TIM_XER_J2735-2024.xml @@ -0,0 +1,990 @@ + + + + + timMsg + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + 8af76b08-89bf-422e-b674-0f0ee065666f + 1 + 0 + 0 + 0 + + 2024-12-06T10:39:42.806Z + 8 + 0 + + RSU + false + + + 001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A600 + 172.18.0.1 + + + MessageFrame + + + 31 + + + 82 + 345337 + 4F4354455420535452 + IA5St + + + 0 + + + + + 4F43 + + 425 + 306216 + 31001 + 2 + 0 + + + IA5 + + 38149 + 48118 + + + -567387419 + -1717691068 + 53848 + + 15175 + + + + + + + 0001000000000000 + + + 0000000001000000 + + + + + +
+ -686654332 + 1616508908 + 38736 +
+ 3832 + + + +
+ +
+
+
+ + I + + 64573 + 33281 + + + -714161321 + -1285139143 + 48475 + + 26805 + + + + + + + 0000001000000000 + + + 1 + + + + + + + -127947 + -120550 + + + + + + + + + + + + + + + + + + + + + + 101 + + + + + + 5822 + + + + + + 3017 + + + -8 + 62 + 35 + + 162 + 424 + + + + + + -998896073 + 735850714 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 3453 + + + + + + 7876 + + + -82 + + + + + + 2097 + + + + 264 + -269 + + + + + + 86161 + 20207 + + + + + + + + + + + + + + + + + + + -68 + + 245 + 247 + + + + + + -172 + 525 + + + + + + + + + + + + + + 206 + 144 + + + + + + -873243 + 1464496 + + + + + + + + + + + + + + + + 58 + 137 + 1 + 25 + + 414 + 181 + + + + + + + + + + IA5 + + 7296 + 1154 + + + 29950376 + 270580409 + 16367 + + 4926 + + + + + + + 0000000001000000 + + + 0000001000000000 + + + + 26482 + +
+ 598135630 + 664850545 + 32186 +
+ 3930 + + + +
+
+
+
+ + IA5S + + 1582 + 46417 + + + -283655839 + -685153664 + 57976 + + 7235 + + + + + + + 0000000100000000 + + + 0000001000000000 + + + + + + + 581272185 + 1108489970 + 9059 + + 20085 + + + + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + -87 + 4 + -167 + + 144 + 239 + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + + + + + + 3517 + + + + -36 + -453 + + + + + + -605370079 + 829743521 + + + + + + + + + + + + + + + + + + + + + + + + 60 + -95 + + 463 + 57 + + + + + + + + + + + IA5 + + 11251 + 41890 + + + 385181606 + 1670812734 + 46812 + + 16153 + + + + + + + 0000001000000000 + + + 0000000001000000 + + + + 6004 + +
+ -509239964 + 772185922 + 9413 +
+ 1224 + + + +
+
+
+
+
+ 0 + 0 + + + + + 599 + + + + + IA5S +
+ + 0 + + + + + + + 634998835 + 313588249 + 50308 + + 0000000001000000 + + + + 4F43 + + + 3481 + 305174 + 24752 + 5 + 0 + + + I + + 44107 + 63537 + + + -419185997 + -533287210 + 51107 + + 25278 + + + + + + + 0000000000001000 + + + 8 + + + + + + + 900792217 + 448269129 + + + + + + + + + + + + + + + + + + + 18 + 9 + 24 + + 225 + -213 + + + + + + 900792217 + 448269129 + + + + + + + + + + + + + + + + + + + + -109 + 83 + + -31 + -482 + + + + + + -1370 + -1581 + + + + + + + + + + + + + + + + + + + + + + + + -121 + + 505 + 348 + + + + + + + + + + IA + + 30031 + 322 + + + -454547095 + 353479827 + 59458 + + 23566 + + + + + + + 0000000000100000 + + + 0000000000000010 + + + + 24321 + +
+ -539150408 + -814772254 + 45059 +
+ 1157 + + + +
+
+
+
+ + IA5St + + 46088 + 60227 + + + -476956537 + 759386724 + 4505 + + 28846 + + + + + + + 0000000000000010 + + + 0010000000000000 + + + + 8084 + +
+ -405703383 + -508985739 + 9512 +
+ 2519 + + + +
+
+
+
+
+ 0 + 0 + + + + + I + + + + + IA5St + + + + + IA5 + + + + + IA5St +
+ + 0 + + + + + 4F43 + + 2776 + 408571 + 15957 + 5 + 0 + + + IA + + 62756 + 63693 + + + 424936826 + -1208779998 + 35858 + + 18563 + + + + + + + 0000000010000000 + + + 0010000000000000 + + + + 17158 + +
+ 442482548 + -804103995 + 43319 +
+ 1951 + + + +
+
+
+
+ + IA5S + + 51032 + 30319 + + + -559743245 + 1697199162 + 46636 + + 5901 + + + + + + + 0000000000000100 + + + 0000001000000000 + + + + 28716 + +
+ 707126893 + -77527193 + 35728 +
+ 3343 + + + +
+
+
+
+ + IA + + 23939 + 26592 + + + -328004279 + 88284632 + 45419 + + 15118 + + + + + + + 0000100000000000 + + + 1000000000000000 + + + + + +
+ 171361070 + 1462406911 + 57912 +
+ 3502 + + + +
+ +
+
+
+
+ 0 + 0 + + + + + 40721 + + + + + 36784 + + + + + IA5S + + + + + IA5 + + + + + 49435 + + + + + IA5S +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapJson.json b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapJson.json new file mode 100644 index 000000000..8dc07157e --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapJson.json @@ -0,0 +1,13815 @@ +{ + "cases": [ + { + "description": "Test Case 1 - MapJson", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload85100a89-9411-4bc3-828c-9c398aa829a510002024-11-08T21:38:24.144Z80RSUfalse001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.30MessageFrame182088022395948212-104883094617442366229100000000000000000001110000000001355-188010795-292610167-231820-167-191010-1428-79862060100000000008111100000000000819001000000000239100000000000000000000100000000001004-1955544-176510311-185320121-154910-173-187610-1008-554220-697-3586-1050100000000003124910000000000000000000010000000000624-2010795-286820207-218020-305-265620-1590-8364401000000000031218100000000000000000000010000000002522-186210-380-981518-29262035-137110-161-201910-677-342610200010000000001281010000000000000000000001000000000-1676-310220-1797608-10-4401-356-30-9504-2310-723839-2171-6260010000000001271010000000000000000000001000000000-1517-282410-1411614250010000000001251101000000000000000000-6816-1069110-196161261101000000000000000000-6597-1038710-2071663110000000000000000000100000000000-664-799-3525-586-10-2446-225-2350-138-10-8407-1810-85131717100000000000211110000000000000000000100000000000-531-1503-2310-41910-3646-430-20-10414-14310-990910-1019100000000000212110000000000000000000100000000000-683-1177-3456-562-2411-259-10-10834-138-9372391810000000000021176010000000000000000001538-29625363186010000000000000000001619-66926592196010000000000000000001757-105925380108201000000000000000000-22691625-20-311-577201000000000000000000-22001293-20-334-636201000000000000000000-2108914-20-369-575201000000000000000000-2056564-20-363-694201000000000000000000-1975197-20-374-809310000000000000000000001000000000-17102641-20-4152042-28251680010000000004170010000000004210310000000000000000000001000000000-13652715-10-4842065-10-15052860010000000004211401000000000000000000-5872813-10-69235125100000000000000000001010000000005202310-103064643584088910358335633292071081000000000006111001000000000135100000000000000000001000000000005951960-104642895495371110611751610710000000000061145100000000000000000001000000000006641620-10359467735775741024273092387246244217212108010610000000000061155100000000000000000001000000000007321263-1059211073103617476242224036312511051000000000006116510000000000000000000100000000000800894358368347357233617384362524910410000000000061207010000000000000000008335-2221024223", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "85100a89-9411-4bc3-828c-9c398aa829a5", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T21:38:24.144Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000", + "mapSource": "RSU", + "originIp": "10.11.81.30" + }, + "payload": { + "data": { + "msgIssueRevision": 2, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 8802 + }, + "revision": 2, + "refPoint": { + "latitude": 39.5948212, + "longitude": -104.8830946, + "elevation": 1744.2 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 22, + "ingressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1355, + "y": -1880 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 795, + "y": -2926 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 167, + "y": -2318 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -167, + "y": -1910 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1428, + "y": -7986 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8 + }, + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + } + } + ] + } + }, + { + "laneID": 23, + "ingressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1004, + "y": -1955 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 544, + "y": -1765 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 311, + "y": -1853 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 121, + "y": -1549 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -173, + "y": -1876 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1008, + "y": -5542 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -697, + "y": -3586 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 24, + "ingressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 624, + "y": -2010 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 795, + "y": -2868 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 207, + "y": -2180 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -305, + "y": -2656 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1590, + "y": -8364 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 4, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 21, + "ingressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2522, + "y": -1862 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -380, + "y": -981 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 518, + "y": -2926 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 35, + "y": -1371 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -161, + "y": -2019 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -677, + "y": -3426 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 28, + "ingressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1676, + "y": -3102 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1797, + "y": 608 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4401, + "y": -356 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9504, + "y": -23 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -7238, + "y": 39 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2171, + "y": -6 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 26, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 27, + "ingressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1517, + "y": -2824 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1411, + "y": 614 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 25, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 25, + "egressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -6816, + "y": -10691 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -196, + "y": 161 + } + } + } + ] + } + }, + { + "laneID": 26, + "egressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -6597, + "y": -10387 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -207, + "y": 166 + } + } + } + ] + } + }, + { + "laneID": 3, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -664, + "y": -799 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -3525, + "y": -586 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2446, + "y": -225 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2350, + "y": -138 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8407, + "y": -18 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8513, + "y": 17 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 17, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -531, + "y": -1503 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2310, + "y": -419 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -3646, + "y": -430 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10414, + "y": -143 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9909, + "y": 10 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -683, + "y": -1177 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -3456, + "y": -562 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2411, + "y": -259 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10834, + "y": -138 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -9372, + "y": 39 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 18, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1538, + "y": -296 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 253, + "y": 63 + } + } + } + ] + } + }, + { + "laneID": 18, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1619, + "y": -669 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 265, + "y": 92 + } + } + } + ] + } + }, + { + "laneID": 19, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1757, + "y": -1059 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 253, + "y": 80 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + } + }, + { + "laneID": 8, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2269, + "y": 1625 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -311, + "y": -57 + } + } + } + ] + } + }, + { + "laneID": 7, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2200, + "y": 1293 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -334, + "y": -63 + } + } + } + ] + } + }, + { + "laneID": 6, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2108, + "y": 914 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -369, + "y": -57 + } + } + } + ] + } + }, + { + "laneID": 5, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2056, + "y": 564 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -363, + "y": -69 + } + } + } + ] + } + }, + { + "laneID": 4, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1975, + "y": 197 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -374, + "y": -80 + } + } + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1710, + "y": 2641 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -415, + "y": 2042 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 516 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 8, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 10, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1365, + "y": 2715 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -484, + "y": 2065 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -150, + "y": 528 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 11, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -587, + "y": 2813 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -69, + "y": 235 + } + } + } + ] + } + }, + { + "laneID": 12, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 520, + "y": 2310 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3064, + "y": 643 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 5840, + "y": 889 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3583, + "y": 356 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3329, + "y": 207 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 8, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + } + } + ] + } + }, + { + "laneID": 13, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 595, + "y": 1960 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 4642, + "y": 895 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 4953, + "y": 711 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 6117, + "y": 516 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 14, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 664, + "y": 1620 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3594, + "y": 677 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3577, + "y": 574 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 2427, + "y": 309 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2387, + "y": 246 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2442, + "y": 172 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 1210, + "y": 80 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 15, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 732, + "y": 1263 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5921, + "y": 1073 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3617, + "y": 476 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2422, + "y": 240 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3631, + "y": 251 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 16, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 800, + "y": 894 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3583, + "y": 683 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 4735, + "y": 723 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3617, + "y": 384 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3625, + "y": 249 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 4, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 20, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 8335, + "y": -222 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 242, + "y": 23 + } + } + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + }, + { + "description": "Test Case 2 - MapJson", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadcfc309e0-bcf6-4834-9178-4600d4998b3710002024-11-08T22:01:11.230Z80RSUfalse001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800RSU10.11.81.33MessageFrame183088053395950548-104866790817232366165100000000000000000001000000000001821120122824-17-7022927-23-4071000000000006117510000000000000000000100000000000183183322791-39-7022950-6-40610000000000061185100000000000000000001000000000001839453228698-7022893-12-4051000000000006119510000000000000000000010000000000260871-10105030-603001000000000011205100000000000000000000100000000002596-288-1096976-6029010000000000111551000000000000000000000100000000018151527101612838-90140010010000001130010000000002216010000000000000000001916-844-10461-6226010000000000000000001916-1205-20472-6236010000000000000000001875-1595-20507029801000000000000000000-540-2621-207-28330801000000000000000000-888-2635-200-28331801000000000000000000-1300-2685-207-24832110000000000000000000001000000000-2089-1980-10-1123022703100100100000013000100000000021110000000000000000000100000000000-2066-1614-22451-44140-22755-147023100000000000212110000000000000000000100000000000-2041-1320-2263729150-22601466022100000000000213110000000000000000000100000000000-2030-90410-226713140-22527186021100000000000214110000000000000000000010000000000-2430-10710-9878-1140-2258-55610130101000000005114010000000000525201000000000000000000-193942520-27106201000000000000000000-191679220-300-67201000000000000000000-1910115420-28208201000000000000000000-1899150420-288010310000000000000000000100000000000-594246720-23150310-522249-156200810-472216320-778232320-1296220920-110015491029100000000000419310000000000000000000001000000000-997240920-12176710-105295910-153123110-420210010-824212320-674133120-7551210-8351061108001001000000130100000000000437001000000000211310000000000000000000010000000000-288248620-29397610-196192210-5992473202201000000000071123100000000000000000000100000000002325092023246710-581979-242191610-43816181021010100000000711340100000000000000000044225452003331440100000000000000000085125331003381025710000000000000000000100000000000974-2408-30-60-1516050141000000000008126710000000000000000000100000000000564-2467-20-8-1509440131000000000008127710000000000000000000010000000000202-2492-2010-150804060100000000003128710000000000000000000010000000000-148-2541-207-303110501000000000031247100000000000000000000010000000002555-2340-30-357-252-438-459-288-562-177-601-13-903030250010000000001", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "cfc309e0-bcf6-4834-9178-4600d4998b37", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T22:01:11.230Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800", + "mapSource": "RSU", + "originIp": "10.11.81.33" + }, + "payload": { + "data": { + "msgIssueRevision": 3, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 8805 + }, + "revision": 3, + "refPoint": { + "latitude": 39.5950548, + "longitude": -104.8667908, + "elevation": 1723.2 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 16, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1821, + "y": 1201 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 22824, + "y": -17 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22927, + "y": -23 + } + }, + "attributes": { + "dElevation": -40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1831, + "y": 833 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 22791, + "y": -39 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22950, + "y": -6 + } + }, + "attributes": { + "dElevation": -40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 18, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1839, + "y": 453 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 22869, + "y": 8 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22893, + "y": -12 + } + }, + "attributes": { + "dElevation": -40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 19, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2608, + "y": 71 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 10503, + "y": 0 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 20, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2596, + "y": -288 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 9697, + "y": 6 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 15, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1815, + "y": 1527 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 16128, + "y": 38 + } + }, + "attributes": { + "dElevation": -90 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 14, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 21, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1916, + "y": -844 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 461, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 22, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1916, + "y": -1205 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 472, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 23, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1875, + "y": -1595 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 507, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 29, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -540, + "y": -2621 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -283 + } + } + } + ] + } + }, + { + "laneID": 30, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -888, + "y": -2635 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": -283 + } + } + } + ] + } + }, + { + "laneID": 31, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1300, + "y": -2685 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -248 + } + } + } + ] + } + }, + { + "laneID": 32, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2089, + "y": -1980 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -11230, + "y": 22 + } + }, + "attributes": { + "dElevation": 70 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 31, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2066, + "y": -1614 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -22451, + "y": -44 + } + }, + "attributes": { + "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22755, + "y": -14 + } + }, + "attributes": { + "dElevation": 70 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 23, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2041, + "y": -1320 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -22637, + "y": 29 + } + }, + "attributes": { + "dElevation": 150 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22601, + "y": 46 + } + }, + "attributes": { + "dElevation": 60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 22, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 3, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2030, + "y": -904 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22671, + "y": 3 + } + }, + "attributes": { + "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22527, + "y": 18 + } + }, + "attributes": { + "dElevation": 60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 21, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 4, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2430, + "y": -107 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9878, + "y": -11 + } + }, + "attributes": { + "dElevation": 40 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2258, + "y": -556 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 14, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 5, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1939, + "y": 425 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -271, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 6, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1916, + "y": 792 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -300, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 7, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1910, + "y": 1154 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 8, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1899, + "y": 1504 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -288, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 10, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -594, + "y": 2467 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -23, + "y": 1503 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": 2249 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -156, + "y": 2008 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -472, + "y": 2163 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -778, + "y": 2323 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1296, + "y": 2209 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1100, + "y": 1549 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -997, + "y": 2409 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -12, + "y": 1767 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -105, + "y": 2959 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -153, + "y": 1231 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -420, + "y": 2100 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -824, + "y": 2123 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -674, + "y": 1331 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -755, + "y": 1210 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -835, + "y": 1061 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 8, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 3 + }, + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 11, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -288, + "y": 2486 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -29, + "y": 3976 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -196, + "y": 1922 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -599, + "y": 2473 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 22, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 12, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 2509 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 2467 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -58, + "y": 1979 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -242, + "y": 1916 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -438, + "y": 1618 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 21, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 13, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 442, + "y": 2545 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 333 + } + } + } + ] + } + }, + { + "laneID": 14, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 851, + "y": 2533 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 338 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + } + }, + { + "laneID": 25, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 974, + "y": -2408 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -60, + "y": -15160 + } + }, + "attributes": { + "dElevation": 50 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 14, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 26, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 564, + "y": -2467 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8, + "y": -15094 + } + }, + "attributes": { + "dElevation": 40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 27, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 202, + "y": -2492 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 10, + "y": -15080 + } + }, + "attributes": { + "dElevation": 40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 28, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -148, + "y": -2541 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -3031 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 24, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2555, + "y": -2340 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -357, + "y": -252 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -438, + "y": -459 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -288, + "y": -562 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -177, + "y": -601 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -13, + "y": -9030 + } + }, + "attributes": { + "dElevation": 30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 25, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + }, + { + "description": "Test case 3 - MapJson", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload894cf226-1c88-4e93-8a44-4e2e619593e310002024-11-08T22:01:11.974Z80RSUfalse00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000RSU10.11.81.36MessageFrame182088082395950299-1048404171171463663110000000000000000000100000000000-2287-61510-22396-460-22917155-3018100000000000212110000000000000000000100000000000-2229-95410-225274360-2285033-3019100000000000211110000000000000000000101000000000-2148-138410-229003760-2258482-3020100000000000212600100100000022500100000000034110000000000000000000010000000000-243113610-213806360-1630-321110101000000005112010000000000525201000000000000000000-253467010-28206201000000000000000000-2569104310-2760107201000000000000000000-2621139810-29411108310000000000000000000001000000000-1486208710356379-1070010010000001600100000000029310000000000000000000100000000000-1158207510636402-10261000000000004110310000000000000000000010000000000-824205210696425-10180101000000007119010000000000721140100000000000000000024220700436124010000000000000000006452070-124361351000000000000000000010100000000019471325-1022150-462022325-85801200100100000011100100000000027100000000000631451000000000000000000010000000000020331003-1022028-422022360-10580610000000000061155100000000000000000001000000000002068624-1022029-522022307-7280510000000000061165100000000000000000000100000000002125314-1024076-138302601000000000011175100000000000000000000100000000002183-87-1020228-69102501010000000011186010000000000000000002275-661-10282-6196010000000000000000002344-1068-10230-6206010000000000000000002385-1395-10230022710000000000000000000100000000000697-20676-4044-173-212310-104-929-518-270810-1140-4991101210000000000081217100000000000000000000010000000001089-2072-29-1973-17-2593-184-182410-253-1744-363-184710-1146-48941020001001000000119001000000000224710000000000000000000010000000000-12-2095-52-42221050101000000003123710000000000000000000010000000000334-2101-23-4142-81-141110-236-2042-472-217410-1112-48711060100000000003125801000000000000000000-570-215310-6-29326801000000000000000000-1043-2153100-281", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "894cf226-1c88-4e93-8a44-4e2e619593e3", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T22:01:11.974Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000", + "mapSource": "RSU", + "originIp": "10.11.81.36" + }, + "payload": { + "data": { + "msgIssueRevision": 2, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 8808 + }, + "revision": 2, + "refPoint": { + "latitude": 39.5950299, + "longitude": -104.8404171, + "elevation": 1714.6 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 3, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2287, + "y": -615 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22396, + "y": -4 + } + }, + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22917, + "y": 155 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 18, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2229, + "y": -954 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22527, + "y": 43 + } + }, + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22850, + "y": 33 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2148, + "y": -1384 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22900, + "y": 37 + } + }, + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22584, + "y": 82 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 26, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 2 + }, + { + "connectingLane": { + "lane": 25, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 3 + } + ] + } + }, + { + "laneID": 4, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2431, + "y": 136 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -21380, + "y": 63 + } + }, + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1630, + "y": -321 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 5, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2534, + "y": 670 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 6, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2569, + "y": 1043 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -276, + "y": 0 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + } + }, + { + "laneID": 7, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2621, + "y": 1398 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -294, + "y": 11 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + } + }, + { + "laneID": 8, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1486, + "y": 2087 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 35, + "y": 6379 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1158, + "y": 2075 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 63, + "y": 6402 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 26, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 10, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -824, + "y": 2052 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 69, + "y": 6425 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 18, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 11, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 242, + "y": 2070 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 436 + } + } + } + ] + } + }, + { + "laneID": 12, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 645, + "y": 2070 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -12, + "y": 436 + } + } + } + ] + } + }, + { + "laneID": 13, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1947, + "y": 1325 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22150, + "y": -46 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22325, + "y": -85 + } + }, + "attributes": { + "dElevation": 80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + }, + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 3 + } + ] + } + }, + { + "laneID": 14, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2033, + "y": 1003 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22028, + "y": -42 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22360, + "y": -105 + } + }, + "attributes": { + "dElevation": 80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 15, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2068, + "y": 624 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22029, + "y": -52 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22307, + "y": -72 + } + }, + "attributes": { + "dElevation": 80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 16, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2125, + "y": 314 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 24076, + "y": -138 + } + }, + "attributes": { + "dElevation": 30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 26, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2183, + "y": -87 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 20228, + "y": -69 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 25, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 18, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2275, + "y": -661 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 282, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 19, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2344, + "y": -1068 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 230, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 20, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2385, + "y": -1395 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 230, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 22, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 697, + "y": -2067 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 6, + "y": -4044 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -173, + "y": -2123 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -104, + "y": -929 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -518, + "y": -2708 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1140, + "y": -4991 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 21, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1089, + "y": -2072 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -29, + "y": -1973 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -17, + "y": -2593 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -184, + "y": -1824 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -253, + "y": -1744 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -363, + "y": -1847 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1146, + "y": -4894 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 24, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -12, + "y": -2095 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": -4222 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 23, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 334, + "y": -2101 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -23, + "y": -4142 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -81, + "y": -1411 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -236, + "y": -2042 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -472, + "y": -2174 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1112, + "y": -4871 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 25, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -570, + "y": -2153 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -6, + "y": -293 + } + } + } + ] + } + }, + { + "laneID": 26, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1043, + "y": -2153 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": -281 + } + } + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + }, + { + "description": "Test case 4 - MapJson", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadd71ab23d-0f89-4847-abef-ea6ffe43995b10002024-11-08T22:01:12.973Z80RSUfalse0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200RSU10.11.81.19MessageFrame1820121132395662624-10508272111689936618710000000000000000000010000000000-1611679-145804-1732537270100000000001117710000000000000000000010000000000-521170910239274-10-2193765280100000000001116710000000000000000000100000000000-840170410-5210009-10-124867-1021822016-60-1159779-3041000000000006115710000000000000000000100000000000-1234171810-127989-10-38106-107824524-70-1616037-20510000000000061198010000000000000000005111577173212080100000000000000000092615831229823111000000000000000000010000000000017328666892-1495428-195-20111000000000008124111000000000000000000010000000000017185283215-176091-253-103008-57-10101000000000008125111000000000000000000001000000000017702014477-571965-575010000000000312611100000000000000000000100000000001735-1265584-1322507390-104010000000000312712010000000000000000001646-621305112812010000000000000000001623-99431703014100000000000000000000010000000001908-1870-472-953-102-8773-202900100000000013110000000000000000000010000000000234-168835-6680-1053-3539-1010010000000000511101000000000052110000000000000000000100000000000578-167769-6709-1043-8790-2040-16478-5023-15152-8019100000000000211110000000000000000000100000000000950-169863-7180-1012-3639-1040-6124-10103-15105-50-46-15037-8020100000000000219310000000000000000000010000000000-1823-1210-51574610-2339-33919010000000000718310000000000000000000010000000000-1817-33410-6609291020010000000000717310000000000000000000100000000000-1850-61410-6045-2310-2288172-669-527100000000000416310000000000000000000100000000000-1856-94710-4644-80-310616810-124523281000000000004110401000000000000000000-182944710-236611401000000000000000000-178886010-29402190100000000000000000013699302235055210000000000000000000-1195-1533-29-4254210000000000000000000-786-1510-23-4482913010000000000000000005345-13963921714610000000000000000000001000000000-2133178510484895296979-1021959921300100000000011200100000000013501000000000000000000-489489610-294012501000000000000000000-488354010-323-6", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "d71ab23d-0f89-4847-abef-ea6ffe43995b", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T22:01:12.973Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200", + "mapSource": "RSU", + "originIp": "10.11.81.19" + }, + "payload": { + "data": { + "msgIssueRevision": 2, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 12113 + }, + "revision": 2, + "refPoint": { + "latitude": 39.5662624, + "longitude": -105.0827211, + "elevation": 1689.9 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 18, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -161, + "y": 1679 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -14, + "y": 5804 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": -173, + "y": 2537 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 27, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -521, + "y": 1709 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 9274 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -219, + "y": 3765 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 28, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 16, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -840, + "y": 1704 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": 10009 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -12, + "y": 4867 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 218, + "y": 22016 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -115, + "y": 9779 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 4, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 15, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1234, + "y": 1718 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -12, + "y": 7989 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3, + "y": 8106 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 78, + "y": 24524 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY5": { + "x": -161, + "y": 6037 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 19, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 511, + "y": 1577 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 17, + "y": 321 + } + } + } + ] + } + }, + { + "laneID": 20, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 926, + "y": 1583 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 12, + "y": 298 + } + } + } + ] + } + }, + { + "laneID": 23, + "ingressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1732, + "y": 866 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 6892, + "y": -149 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 5428, + "y": -195 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 24, + "ingressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1718, + "y": 528 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": 3215, + "y": -17 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 6091, + "y": -253 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3008, + "y": -57 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 10, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 25, + "ingressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1770, + "y": 201 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 4477, + "y": -57 + } + } + }, + { + "delta": { + "nodeXY3": { + "x": 1965, + "y": -57 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 26, + "ingressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1735, + "y": -126 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 5584, + "y": -132 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": 2507, + "y": 390 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 4, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 27, + "egressApproach": 12, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1646, + "y": -621 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 305, + "y": 11 + } + } + } + ] + } + }, + { + "laneID": 28, + "egressApproach": 12, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1623, + "y": -994 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 317, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 30, + "ingressApproach": 14, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1908, + "y": -1870 + } + } + }, + { + "delta": { + "nodeXY2": { + "x": -472, + "y": -953 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -102, + "y": -8773 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 3, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 234, + "y": -1688 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 35, + "y": -6680 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 53, + "y": -3539 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 10, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 578, + "y": -1677 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 69, + "y": -6709 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 43, + "y": -8790 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 40, + "y": -16478 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": -15152 + } + }, + "attributes": { + "dElevation": -80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 950, + "y": -1698 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 63, + "y": -7180 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 12, + "y": -3639 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 40, + "y": -6124 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 103, + "y": -15105 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": -46, + "y": -15037 + } + }, + "attributes": { + "dElevation": -80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1823, + "y": -12 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -5157, + "y": 46 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -2339, + "y": -339 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 8, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1817, + "y": -334 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -6609, + "y": 29 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 7, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1850, + "y": -614 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -6045, + "y": -23 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -2288, + "y": 172 + } + } + }, + { + "delta": { + "nodeXY2": { + "x": -669, + "y": -5 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 27, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 6, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1856, + "y": -947 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -4644, + "y": -80 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": -3106, + "y": 168 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY3": { + "x": -1245, + "y": 23 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 28, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 10, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1829, + "y": 447 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -236, + "y": 6 + } + } + } + ] + } + }, + { + "laneID": 11, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1788, + "y": 860 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -294, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 21, + "egressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1369, + "y": 9302 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 23, + "y": 505 + } + } + } + ] + } + }, + { + "laneID": 5, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1195, + "y": -1533 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": -29, + "y": -425 + } + } + } + ] + } + }, + { + "laneID": 4, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -786, + "y": -1510 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": -23, + "y": -448 + } + } + } + ] + } + }, + { + "laneID": 29, + "egressApproach": 13, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": 5345, + "y": -1396 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 392, + "y": 17 + } + } + } + ] + } + }, + { + "laneID": 14, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2133, + "y": 1785 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY2": { + "x": 484, + "y": 895 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 29, + "y": 6979 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 219, + "y": 5992 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + } + } + ] + } + }, + { + "laneID": 13, + "egressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -4894, + "y": 896 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -294, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 12, + "egressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -4883, + "y": 540 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -323, + "y": -6 + } + } + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + }, + { + "description": "Test case 5 - MapJson", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload2c91e8d6-f917-4c82-96e4-9de0da3ddca710002024-11-08T22:01:11.319Z80RSUfalse0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.20MessageFrame1820121122395806913-10508706921702536618210000000000000000000100000000000-21211567-3670797050-1195249910-1832414920-4313934710-4364951530-42729547-6061000000000006119210000000000000000000100000000000-17521601-2218491230-2662580730-2581556630-32557046-4489982920-44889976-5051000000000006120210000000000000000000010000000000-13131627-2022437830-1194257510300100000000001121210000000000000000000010000000000-8131649-2201444730-3289635840-1930375310290100000000001122301000000000000000000-191163610-12733323301000000000000000000212168810-12135024301000000000000000000684175110-1272982641000000000000000000010000000000020228161024540103503-172107472-293308019-633405115-104747310-101310000000000081274100000000000000000001000000000002370498104419-149108497-344303531-3410810652-104718316-10121000000000008117110000000000000000000001000001000-34231969-1023662010-26299310-2057449120-95121632014001000000000115001000000000216001000000000295010000000000000000003219-4053110305010000000000000000003211-10064096316100000000000000000000010000000002729-1696-107-1089-102736-6046-50393-95130001000000000129001000000000236100000000000000000000100000000001012-1671-102845-6288-60904-18991301000000000051120100000000005226100000000000000000001000000000001430-1698-102767-6178-603194-6835-302990-6513-405135-11024-705003-11021-60221000000000002116100000000000000000001000000000001840-1673-103318-7339-602599-5381-302407-5583-405425-11583-705441-11713-6023100000000000217701000000000000000000-1081-1540-10127-310-106701000000000000000000-649-1528-10104-361-105701000000000000000000-234-1517-1098-3334701000000000000000000238-1545-1092-373-1010810000000000000000000100000000000-2640-253-20-9828-17-30-1007057-30-9788-17-2029100000000000419810000000000000000000100000000000-2452-630-20-1485246-50-15059-11-30301000000000004113901000000000000000000-30661034-10-305012901000000000000000000-3054644-10-3230-10161001000000000000000000-64751452-30-4090151001000000000000000000-65151096-30-3690141001000000000000000000-6521752-30-363-6", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "2c91e8d6-f917-4c82-96e4-9de0da3ddca7", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T22:01:11.319Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000", + "mapSource": "RSU", + "originIp": "10.11.81.20" + }, + "payload": { + "data": { + "msgIssueRevision": 2, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 12112 + }, + "revision": 2, + "refPoint": { + "latitude": 39.5806913, + "longitude": -105.0870692, + "elevation": 1702.5 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 18, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2121, + "y": 1567 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -3670, + "y": 7970 + } + }, + "attributes": { + "dElevation": 50 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1195, + "y": 2499 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -1832, + "y": 4149 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4313, + "y": 9347 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4364, + "y": 9515 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4272, + "y": 9547 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 19, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1752, + "y": 1601 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -2218, + "y": 4912 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2662, + "y": 5807 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2581, + "y": 5566 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3255, + "y": 7046 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -4489, + "y": 9829 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4488, + "y": 9976 + } + }, + "attributes": { + "dElevation": -50 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 20, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1313, + "y": 1627 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -2022, + "y": 4378 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1194, + "y": 2575 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 21, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -813, + "y": 1649 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -2201, + "y": 4447 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3289, + "y": 6358 + } + }, + "attributes": { + "dElevation": 40 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1930, + "y": 3753 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 22, + "egressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -191, + "y": 1636 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -127, + "y": 333 + } + } + } + ] + } + }, + { + "laneID": 23, + "egressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 212, + "y": 1688 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -121, + "y": 350 + } + } + } + ] + } + }, + { + "laneID": 24, + "egressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 684, + "y": 1751 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -127, + "y": 298 + } + } + } + ] + } + }, + { + "laneID": 26, + "ingressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 2022, + "y": 816 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 2454, + "y": 0 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3503, + "y": -172 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 7472, + "y": -293 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 8019, + "y": -63 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": 3405, + "y": 115 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4747, + "y": 310 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 27, + "ingressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 2370, + "y": 498 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4419, + "y": -149 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 8497, + "y": -344 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3531, + "y": -34 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 8106, + "y": 52 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4718, + "y": 316 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": true, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3423, + "y": 1969 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY2": { + "x": 236, + "y": 620 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY2": { + "x": -262, + "y": 993 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2057, + "y": 4491 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY4": { + "x": -951, + "y": 2163 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 14, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 15, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + }, + { + "connectingLane": { + "lane": 16, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + } + } + ] + } + }, + { + "laneID": 29, + "egressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 3219, + "y": -405 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 311, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 30, + "egressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 3211, + "y": -1006 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 409, + "y": 6 + } + } + } + ] + } + }, + { + "laneID": 31, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 2729, + "y": -1696 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY3": { + "x": 7, + "y": -1089 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2736, + "y": -6046 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY2": { + "x": 393, + "y": -951 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 3, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1012, + "y": -1671 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2845, + "y": -6288 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY3": { + "x": 904, + "y": -1899 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1430, + "y": -1698 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2767, + "y": -6178 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY5": { + "x": 3194, + "y": -6835 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2990, + "y": -6513 + } + }, + "attributes": { + "dElevation": -40 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5135, + "y": -11024 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5003, + "y": -11021 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 22, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1840, + "y": -1673 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 3318, + "y": -7339 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2599, + "y": -5381 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2407, + "y": -5583 + } + }, + "attributes": { + "dElevation": -40 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5425, + "y": -11583 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5441, + "y": -11713 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 23, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 7, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1081, + "y": -1540 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 127, + "y": -310 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + } + }, + { + "laneID": 6, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -649, + "y": -1528 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 104, + "y": -361 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + } + }, + { + "laneID": 5, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -234, + "y": -1517 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 98, + "y": -333 + } + } + } + ] + } + }, + { + "laneID": 4, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 238, + "y": -1545 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 92, + "y": -373 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + } + }, + { + "laneID": 10, + "ingressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2640, + "y": -253 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9828, + "y": -17 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10070, + "y": 57 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9788, + "y": -17 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2452, + "y": -630 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -14852, + "y": 46 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": -15059, + "y": -11 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 13, + "egressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3066, + "y": 1034 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -305, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 12, + "egressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3054, + "y": 644 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -323, + "y": 0 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + } + }, + { + "laneID": 16, + "egressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6475, + "y": 1452 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -409, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 15, + "egressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6515, + "y": 1096 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -369, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 14, + "egressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6521, + "y": 752 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -363, + "y": -6 + } + } + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + } + ] +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapTxPojo.json b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapTxPojo.json new file mode 100644 index 000000000..e94652678 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/Asn1DecoderRouter_ApprovalTestCases_MapTxPojo.json @@ -0,0 +1,13815 @@ +{ + "cases": [ + { + "description": "Test Case 1 - MapTxPojo", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload85100a89-9411-4bc3-828c-9c398aa829a510002024-11-08T21:38:24.144Z80RSUfalse001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.30MessageFrame182088022395948212-104883094617442366229100000000000000000001110000000001355-188010795-292610167-231820-167-191010-1428-79862060100000000008111100000000000819001000000000239100000000000000000000100000000001004-1955544-176510311-185320121-154910-173-187610-1008-554220-697-3586-1050100000000003124910000000000000000000010000000000624-2010795-286820207-218020-305-265620-1590-8364401000000000031218100000000000000000000010000000002522-186210-380-981518-29262035-137110-161-201910-677-342610200010000000001281010000000000000000000001000000000-1676-310220-1797608-10-4401-356-30-9504-2310-723839-2171-6260010000000001271010000000000000000000001000000000-1517-282410-1411614250010000000001251101000000000000000000-6816-1069110-196161261101000000000000000000-6597-1038710-2071663110000000000000000000100000000000-664-799-3525-586-10-2446-225-2350-138-10-8407-1810-85131717100000000000211110000000000000000000100000000000-531-1503-2310-41910-3646-430-20-10414-14310-990910-1019100000000000212110000000000000000000100000000000-683-1177-3456-562-2411-259-10-10834-138-9372391810000000000021176010000000000000000001538-29625363186010000000000000000001619-66926592196010000000000000000001757-105925380108201000000000000000000-22691625-20-311-577201000000000000000000-22001293-20-334-636201000000000000000000-2108914-20-369-575201000000000000000000-2056564-20-363-694201000000000000000000-1975197-20-374-809310000000000000000000001000000000-17102641-20-4152042-28251680010000000004170010000000004210310000000000000000000001000000000-13652715-10-4842065-10-15052860010000000004211401000000000000000000-5872813-10-69235125100000000000000000001010000000005202310-103064643584088910358335633292071081000000000006111001000000000135100000000000000000001000000000005951960-104642895495371110611751610710000000000061145100000000000000000001000000000006641620-10359467735775741024273092387246244217212108010610000000000061155100000000000000000001000000000007321263-1059211073103617476242224036312511051000000000006116510000000000000000000100000000000800894358368347357233617384362524910410000000000061207010000000000000000008335-2221024223", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "85100a89-9411-4bc3-828c-9c398aa829a5", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T21:38:24.144Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000", + "mapSource": "RSU", + "originIp": "10.11.81.30" + }, + "payload": { + "data": { + "msgIssueRevision": 2, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 8802 + }, + "revision": 2, + "refPoint": { + "latitude": 39.5948212, + "longitude": -104.8830946, + "elevation": 1744.2 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 22, + "ingressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1355, + "y": -1880 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 795, + "y": -2926 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 167, + "y": -2318 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -167, + "y": -1910 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1428, + "y": -7986 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8 + }, + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + } + } + ] + } + }, + { + "laneID": 23, + "ingressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1004, + "y": -1955 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 544, + "y": -1765 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 311, + "y": -1853 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 121, + "y": -1549 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -173, + "y": -1876 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1008, + "y": -5542 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -697, + "y": -3586 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 24, + "ingressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 624, + "y": -2010 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 795, + "y": -2868 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 207, + "y": -2180 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -305, + "y": -2656 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1590, + "y": -8364 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 4, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 21, + "ingressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2522, + "y": -1862 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -380, + "y": -981 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 518, + "y": -2926 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 35, + "y": -1371 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -161, + "y": -2019 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -677, + "y": -3426 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 28, + "ingressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1676, + "y": -3102 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1797, + "y": 608 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4401, + "y": -356 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9504, + "y": -23 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -7238, + "y": 39 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2171, + "y": -6 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 26, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 27, + "ingressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1517, + "y": -2824 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1411, + "y": 614 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 25, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 25, + "egressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -6816, + "y": -10691 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -196, + "y": 161 + } + } + } + ] + } + }, + { + "laneID": 26, + "egressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -6597, + "y": -10387 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -207, + "y": 166 + } + } + } + ] + } + }, + { + "laneID": 3, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -664, + "y": -799 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -3525, + "y": -586 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2446, + "y": -225 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2350, + "y": -138 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8407, + "y": -18 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8513, + "y": 17 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 17, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -531, + "y": -1503 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2310, + "y": -419 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -3646, + "y": -430 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10414, + "y": -143 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9909, + "y": 10 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -683, + "y": -1177 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -3456, + "y": -562 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -2411, + "y": -259 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10834, + "y": -138 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -9372, + "y": 39 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 18, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1538, + "y": -296 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 253, + "y": 63 + } + } + } + ] + } + }, + { + "laneID": 18, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1619, + "y": -669 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 265, + "y": 92 + } + } + } + ] + } + }, + { + "laneID": 19, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1757, + "y": -1059 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 253, + "y": 80 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + } + }, + { + "laneID": 8, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2269, + "y": 1625 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -311, + "y": -57 + } + } + } + ] + } + }, + { + "laneID": 7, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2200, + "y": 1293 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -334, + "y": -63 + } + } + } + ] + } + }, + { + "laneID": 6, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2108, + "y": 914 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -369, + "y": -57 + } + } + } + ] + } + }, + { + "laneID": 5, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2056, + "y": 564 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -363, + "y": -69 + } + } + } + ] + } + }, + { + "laneID": 4, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1975, + "y": 197 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -374, + "y": -80 + } + } + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1710, + "y": 2641 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -415, + "y": 2042 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 516 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 8, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 10, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1365, + "y": 2715 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -484, + "y": 2065 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -150, + "y": 528 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 11, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -587, + "y": 2813 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -69, + "y": 235 + } + } + } + ] + } + }, + { + "laneID": 12, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 520, + "y": 2310 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3064, + "y": 643 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 5840, + "y": 889 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3583, + "y": 356 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3329, + "y": 207 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 8, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + } + } + ] + } + }, + { + "laneID": 13, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 595, + "y": 1960 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 4642, + "y": 895 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 4953, + "y": 711 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 6117, + "y": 516 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 14, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 664, + "y": 1620 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3594, + "y": 677 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3577, + "y": 574 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 2427, + "y": 309 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2387, + "y": 246 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2442, + "y": 172 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 1210, + "y": 80 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 15, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 732, + "y": 1263 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5921, + "y": 1073 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 3617, + "y": 476 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 2422, + "y": 240 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3631, + "y": 251 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 16, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 800, + "y": 894 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3583, + "y": 683 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 4735, + "y": 723 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3617, + "y": 384 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 3625, + "y": 249 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 4, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 20, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 8335, + "y": -222 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 242, + "y": 23 + } + } + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + }, + { + "description": "Test Case 2 - MapTxPojo", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadcfc309e0-bcf6-4834-9178-4600d4998b3710002024-11-08T22:01:11.230Z80RSUfalse001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800RSU10.11.81.33MessageFrame183088053395950548-104866790817232366165100000000000000000001000000000001821120122824-17-7022927-23-4071000000000006117510000000000000000000100000000000183183322791-39-7022950-6-40610000000000061185100000000000000000001000000000001839453228698-7022893-12-4051000000000006119510000000000000000000010000000000260871-10105030-603001000000000011205100000000000000000000100000000002596-288-1096976-6029010000000000111551000000000000000000000100000000018151527101612838-90140010010000001130010000000002216010000000000000000001916-844-10461-6226010000000000000000001916-1205-20472-6236010000000000000000001875-1595-20507029801000000000000000000-540-2621-207-28330801000000000000000000-888-2635-200-28331801000000000000000000-1300-2685-207-24832110000000000000000000001000000000-2089-1980-10-1123022703100100100000013000100000000021110000000000000000000100000000000-2066-1614-22451-44140-22755-147023100000000000212110000000000000000000100000000000-2041-1320-2263729150-22601466022100000000000213110000000000000000000100000000000-2030-90410-226713140-22527186021100000000000214110000000000000000000010000000000-2430-10710-9878-1140-2258-55610130101000000005114010000000000525201000000000000000000-193942520-27106201000000000000000000-191679220-300-67201000000000000000000-1910115420-28208201000000000000000000-1899150420-288010310000000000000000000100000000000-594246720-23150310-522249-156200810-472216320-778232320-1296220920-110015491029100000000000419310000000000000000000001000000000-997240920-12176710-105295910-153123110-420210010-824212320-674133120-7551210-8351061108001001000000130100000000000437001000000000211310000000000000000000010000000000-288248620-29397610-196192210-5992473202201000000000071123100000000000000000000100000000002325092023246710-581979-242191610-43816181021010100000000711340100000000000000000044225452003331440100000000000000000085125331003381025710000000000000000000100000000000974-2408-30-60-1516050141000000000008126710000000000000000000100000000000564-2467-20-8-1509440131000000000008127710000000000000000000010000000000202-2492-2010-150804060100000000003128710000000000000000000010000000000-148-2541-207-303110501000000000031247100000000000000000000010000000002555-2340-30-357-252-438-459-288-562-177-601-13-903030250010000000001", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "cfc309e0-bcf6-4834-9178-4600d4998b37", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T22:01:11.230Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800", + "mapSource": "RSU", + "originIp": "10.11.81.33" + }, + "payload": { + "data": { + "msgIssueRevision": 3, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 8805 + }, + "revision": 3, + "refPoint": { + "latitude": 39.5950548, + "longitude": -104.8667908, + "elevation": 1723.2 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 16, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1821, + "y": 1201 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 22824, + "y": -17 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22927, + "y": -23 + } + }, + "attributes": { + "dElevation": -40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1831, + "y": 833 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 22791, + "y": -39 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22950, + "y": -6 + } + }, + "attributes": { + "dElevation": -40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 18, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1839, + "y": 453 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 22869, + "y": 8 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22893, + "y": -12 + } + }, + "attributes": { + "dElevation": -40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 19, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2608, + "y": 71 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 10503, + "y": 0 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 20, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2596, + "y": -288 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 9697, + "y": 6 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 15, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1815, + "y": 1527 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 16128, + "y": 38 + } + }, + "attributes": { + "dElevation": -90 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 14, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 21, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1916, + "y": -844 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 461, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 22, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1916, + "y": -1205 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 472, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 23, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1875, + "y": -1595 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 507, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 29, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -540, + "y": -2621 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -283 + } + } + } + ] + } + }, + { + "laneID": 30, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -888, + "y": -2635 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": -283 + } + } + } + ] + } + }, + { + "laneID": 31, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1300, + "y": -2685 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -248 + } + } + } + ] + } + }, + { + "laneID": 32, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2089, + "y": -1980 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -11230, + "y": 22 + } + }, + "attributes": { + "dElevation": 70 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 31, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2066, + "y": -1614 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -22451, + "y": -44 + } + }, + "attributes": { + "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22755, + "y": -14 + } + }, + "attributes": { + "dElevation": 70 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 23, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2041, + "y": -1320 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -22637, + "y": 29 + } + }, + "attributes": { + "dElevation": 150 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22601, + "y": 46 + } + }, + "attributes": { + "dElevation": 60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 22, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 3, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2030, + "y": -904 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22671, + "y": 3 + } + }, + "attributes": { + "dElevation": 140 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22527, + "y": 18 + } + }, + "attributes": { + "dElevation": 60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 21, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 4, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2430, + "y": -107 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9878, + "y": -11 + } + }, + "attributes": { + "dElevation": 40 + } + }, + { + "delta": { + "nodeXY6": { + "x": -2258, + "y": -556 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 14, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 5, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1939, + "y": 425 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -271, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 6, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1916, + "y": 792 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -300, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 7, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1910, + "y": 1154 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 8, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1899, + "y": 1504 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -288, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 10, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -594, + "y": 2467 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -23, + "y": 1503 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": 2249 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -156, + "y": 2008 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -472, + "y": 2163 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -778, + "y": 2323 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1296, + "y": 2209 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1100, + "y": 1549 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -997, + "y": 2409 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -12, + "y": 1767 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -105, + "y": 2959 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -153, + "y": 1231 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -420, + "y": 2100 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -824, + "y": 2123 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -674, + "y": 1331 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -755, + "y": 1210 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -835, + "y": 1061 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 8, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 3 + }, + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 11, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -288, + "y": 2486 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -29, + "y": 3976 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -196, + "y": 1922 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -599, + "y": 2473 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 22, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 12, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 2509 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 2467 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -58, + "y": 1979 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -242, + "y": 1916 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -438, + "y": 1618 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 21, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 13, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 442, + "y": 2545 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 333 + } + } + } + ] + } + }, + { + "laneID": 14, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 851, + "y": 2533 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 338 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + } + }, + { + "laneID": 25, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 974, + "y": -2408 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -60, + "y": -15160 + } + }, + "attributes": { + "dElevation": 50 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 14, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 26, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 564, + "y": -2467 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -8, + "y": -15094 + } + }, + "attributes": { + "dElevation": 40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 27, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 202, + "y": -2492 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 10, + "y": -15080 + } + }, + "attributes": { + "dElevation": 40 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 28, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -148, + "y": -2541 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 7, + "y": -3031 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 24, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2555, + "y": -2340 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -357, + "y": -252 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -438, + "y": -459 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -288, + "y": -562 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -177, + "y": -601 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -13, + "y": -9030 + } + }, + "attributes": { + "dElevation": 30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 25, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + }, + { + "description": "Test case 3 - MapTxPojo", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload894cf226-1c88-4e93-8a44-4e2e619593e310002024-11-08T22:01:11.974Z80RSUfalse00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000RSU10.11.81.36MessageFrame182088082395950299-1048404171171463663110000000000000000000100000000000-2287-61510-22396-460-22917155-3018100000000000212110000000000000000000100000000000-2229-95410-225274360-2285033-3019100000000000211110000000000000000000101000000000-2148-138410-229003760-2258482-3020100000000000212600100100000022500100000000034110000000000000000000010000000000-243113610-213806360-1630-321110101000000005112010000000000525201000000000000000000-253467010-28206201000000000000000000-2569104310-2760107201000000000000000000-2621139810-29411108310000000000000000000001000000000-1486208710356379-1070010010000001600100000000029310000000000000000000100000000000-1158207510636402-10261000000000004110310000000000000000000010000000000-824205210696425-10180101000000007119010000000000721140100000000000000000024220700436124010000000000000000006452070-124361351000000000000000000010100000000019471325-1022150-462022325-85801200100100000011100100000000027100000000000631451000000000000000000010000000000020331003-1022028-422022360-10580610000000000061155100000000000000000001000000000002068624-1022029-522022307-7280510000000000061165100000000000000000000100000000002125314-1024076-138302601000000000011175100000000000000000000100000000002183-87-1020228-69102501010000000011186010000000000000000002275-661-10282-6196010000000000000000002344-1068-10230-6206010000000000000000002385-1395-10230022710000000000000000000100000000000697-20676-4044-173-212310-104-929-518-270810-1140-4991101210000000000081217100000000000000000000010000000001089-2072-29-1973-17-2593-184-182410-253-1744-363-184710-1146-48941020001001000000119001000000000224710000000000000000000010000000000-12-2095-52-42221050101000000003123710000000000000000000010000000000334-2101-23-4142-81-141110-236-2042-472-217410-1112-48711060100000000003125801000000000000000000-570-215310-6-29326801000000000000000000-1043-2153100-281", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "894cf226-1c88-4e93-8a44-4e2e619593e3", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T22:01:11.974Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000", + "mapSource": "RSU", + "originIp": "10.11.81.36" + }, + "payload": { + "data": { + "msgIssueRevision": 2, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 8808 + }, + "revision": 2, + "refPoint": { + "latitude": 39.5950299, + "longitude": -104.8404171, + "elevation": 1714.6 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 3, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2287, + "y": -615 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22396, + "y": -4 + } + }, + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22917, + "y": 155 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 18, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2229, + "y": -954 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22527, + "y": 43 + } + }, + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22850, + "y": 33 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2148, + "y": -1384 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22900, + "y": 37 + } + }, + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -22584, + "y": 82 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 26, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 2 + }, + { + "connectingLane": { + "lane": 25, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 3 + } + ] + } + }, + { + "laneID": 4, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2431, + "y": 136 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -21380, + "y": 63 + } + }, + "attributes": { + "dElevation": 60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1630, + "y": -321 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 5, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2534, + "y": 670 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -282, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 6, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2569, + "y": 1043 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -276, + "y": 0 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + } + }, + { + "laneID": 7, + "egressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -2621, + "y": 1398 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -294, + "y": 11 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + } + }, + { + "laneID": 8, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1486, + "y": 2087 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 35, + "y": 6379 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1158, + "y": 2075 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 63, + "y": 6402 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 26, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 10, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -824, + "y": 2052 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 69, + "y": 6425 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 18, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 11, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 242, + "y": 2070 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": 436 + } + } + } + ] + } + }, + { + "laneID": 12, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 645, + "y": 2070 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -12, + "y": 436 + } + } + } + ] + } + }, + { + "laneID": 13, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1947, + "y": 1325 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22150, + "y": -46 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22325, + "y": -85 + } + }, + "attributes": { + "dElevation": 80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + }, + { + "connectingLane": { + "lane": 7, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 3 + } + ] + } + }, + { + "laneID": 14, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2033, + "y": 1003 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22028, + "y": -42 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22360, + "y": -105 + } + }, + "attributes": { + "dElevation": 80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 15, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2068, + "y": 624 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22029, + "y": -52 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 22307, + "y": -72 + } + }, + "attributes": { + "dElevation": 80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 16, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2125, + "y": 314 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 24076, + "y": -138 + } + }, + "attributes": { + "dElevation": 30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 26, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "ingressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2183, + "y": -87 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 20228, + "y": -69 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 25, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 18, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2275, + "y": -661 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 282, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 19, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2344, + "y": -1068 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 230, + "y": -6 + } + } + } + ] + } + }, + { + "laneID": 20, + "egressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 2385, + "y": -1395 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 230, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 22, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 697, + "y": -2067 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": 6, + "y": -4044 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -173, + "y": -2123 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -104, + "y": -929 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -518, + "y": -2708 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1140, + "y": -4991 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 21, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1089, + "y": -2072 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -29, + "y": -1973 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -17, + "y": -2593 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -184, + "y": -1824 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -253, + "y": -1744 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -363, + "y": -1847 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1146, + "y": -4894 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": true, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 24, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -12, + "y": -2095 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": -4222 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": true, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 23, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 334, + "y": -2101 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -23, + "y": -4142 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -81, + "y": -1411 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -236, + "y": -2042 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -472, + "y": -2174 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -1112, + "y": -4871 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 25, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -570, + "y": -2153 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -6, + "y": -293 + } + } + } + ] + } + }, + { + "laneID": 26, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": -1043, + "y": -2153 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 0, + "y": -281 + } + } + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + }, + { + "description": "Test case 4 - MapTxPojo", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadd71ab23d-0f89-4847-abef-ea6ffe43995b10002024-11-08T22:01:12.973Z80RSUfalse0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200RSU10.11.81.19MessageFrame1820121132395662624-10508272111689936618710000000000000000000010000000000-1611679-145804-1732537270100000000001117710000000000000000000010000000000-521170910239274-10-2193765280100000000001116710000000000000000000100000000000-840170410-5210009-10-124867-1021822016-60-1159779-3041000000000006115710000000000000000000100000000000-1234171810-127989-10-38106-107824524-70-1616037-20510000000000061198010000000000000000005111577173212080100000000000000000092615831229823111000000000000000000010000000000017328666892-1495428-195-20111000000000008124111000000000000000000010000000000017185283215-176091-253-103008-57-10101000000000008125111000000000000000000001000000000017702014477-571965-575010000000000312611100000000000000000000100000000001735-1265584-1322507390-104010000000000312712010000000000000000001646-621305112812010000000000000000001623-99431703014100000000000000000000010000000001908-1870-472-953-102-8773-202900100000000013110000000000000000000010000000000234-168835-6680-1053-3539-1010010000000000511101000000000052110000000000000000000100000000000578-167769-6709-1043-8790-2040-16478-5023-15152-8019100000000000211110000000000000000000100000000000950-169863-7180-1012-3639-1040-6124-10103-15105-50-46-15037-8020100000000000219310000000000000000000010000000000-1823-1210-51574610-2339-33919010000000000718310000000000000000000010000000000-1817-33410-6609291020010000000000717310000000000000000000100000000000-1850-61410-6045-2310-2288172-669-527100000000000416310000000000000000000100000000000-1856-94710-4644-80-310616810-124523281000000000004110401000000000000000000-182944710-236611401000000000000000000-178886010-29402190100000000000000000013699302235055210000000000000000000-1195-1533-29-4254210000000000000000000-786-1510-23-4482913010000000000000000005345-13963921714610000000000000000000001000000000-2133178510484895296979-1021959921300100000000011200100000000013501000000000000000000-489489610-294012501000000000000000000-488354010-323-6", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "d71ab23d-0f89-4847-abef-ea6ffe43995b", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T22:01:12.973Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200", + "mapSource": "RSU", + "originIp": "10.11.81.19" + }, + "payload": { + "data": { + "msgIssueRevision": 2, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 12113 + }, + "revision": 2, + "refPoint": { + "latitude": 39.5662624, + "longitude": -105.0827211, + "elevation": 1689.9 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 18, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -161, + "y": 1679 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -14, + "y": 5804 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": -173, + "y": 2537 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 27, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -521, + "y": 1709 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": 9274 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -219, + "y": 3765 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 28, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 16, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -840, + "y": 1704 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -52, + "y": 10009 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -12, + "y": 4867 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 218, + "y": 22016 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY6": { + "x": -115, + "y": 9779 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 4, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 15, + "ingressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1234, + "y": 1718 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -12, + "y": 7989 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3, + "y": 8106 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 78, + "y": 24524 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY5": { + "x": -161, + "y": 6037 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 19, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 511, + "y": 1577 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 17, + "y": 321 + } + } + } + ] + } + }, + { + "laneID": 20, + "egressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 926, + "y": 1583 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 12, + "y": 298 + } + } + } + ] + } + }, + { + "laneID": 23, + "ingressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1732, + "y": 866 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 6892, + "y": -149 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 5428, + "y": -195 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 24, + "ingressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1718, + "y": 528 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": 3215, + "y": -17 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 6091, + "y": -253 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3008, + "y": -57 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 10, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 25, + "ingressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1770, + "y": 201 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 4477, + "y": -57 + } + } + }, + { + "delta": { + "nodeXY3": { + "x": 1965, + "y": -57 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 26, + "ingressApproach": 11, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1735, + "y": -126 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 5584, + "y": -132 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": 2507, + "y": 390 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 4, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 3, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 27, + "egressApproach": 12, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1646, + "y": -621 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 305, + "y": 11 + } + } + } + ] + } + }, + { + "laneID": 28, + "egressApproach": 12, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1623, + "y": -994 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 317, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 30, + "ingressApproach": 14, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1908, + "y": -1870 + } + } + }, + { + "delta": { + "nodeXY2": { + "x": -472, + "y": -953 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -102, + "y": -8773 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 3, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 234, + "y": -1688 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 35, + "y": -6680 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 53, + "y": -3539 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 10, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 11, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 578, + "y": -1677 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 69, + "y": -6709 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 43, + "y": -8790 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": 40, + "y": -16478 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": 23, + "y": -15152 + } + }, + "attributes": { + "dElevation": -80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 950, + "y": -1698 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 63, + "y": -7180 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 12, + "y": -3639 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 40, + "y": -6124 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 103, + "y": -15105 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": -46, + "y": -15037 + } + }, + "attributes": { + "dElevation": -80 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1823, + "y": -12 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -5157, + "y": 46 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -2339, + "y": -339 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 19, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 8, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1817, + "y": -334 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -6609, + "y": 29 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 20, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 7, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 7, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1850, + "y": -614 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -6045, + "y": -23 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": -2288, + "y": 172 + } + } + }, + { + "delta": { + "nodeXY2": { + "x": -669, + "y": -5 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 27, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 6, + "ingressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1856, + "y": -947 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -4644, + "y": -80 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": -3106, + "y": 168 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY3": { + "x": -1245, + "y": 23 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 28, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 10, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1829, + "y": 447 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -236, + "y": 6 + } + } + } + ] + } + }, + { + "laneID": 11, + "egressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1788, + "y": 860 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -294, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 21, + "egressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY6": { + "x": 1369, + "y": 9302 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 23, + "y": 505 + } + } + } + ] + } + }, + { + "laneID": 5, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1195, + "y": -1533 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": -29, + "y": -425 + } + } + } + ] + } + }, + { + "laneID": 4, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -786, + "y": -1510 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": -23, + "y": -448 + } + } + } + ] + } + }, + { + "laneID": 29, + "egressApproach": 13, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": 5345, + "y": -1396 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 392, + "y": 17 + } + } + } + ] + } + }, + { + "laneID": 14, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2133, + "y": 1785 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY2": { + "x": 484, + "y": 895 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": 29, + "y": 6979 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 219, + "y": 5992 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + } + } + ] + } + }, + { + "laneID": 13, + "egressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -4894, + "y": 896 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -294, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 12, + "egressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -4883, + "y": 540 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -323, + "y": -6 + } + } + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + }, + { + "description": "Test case 5 - MapTxPojo", + "input": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload2c91e8d6-f917-4c82-96e4-9de0da3ddca710002024-11-08T22:01:11.319Z80RSUfalse0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.20MessageFrame1820121122395806913-10508706921702536618210000000000000000000100000000000-21211567-3670797050-1195249910-1832414920-4313934710-4364951530-42729547-6061000000000006119210000000000000000000100000000000-17521601-2218491230-2662580730-2581556630-32557046-4489982920-44889976-5051000000000006120210000000000000000000010000000000-13131627-2022437830-1194257510300100000000001121210000000000000000000010000000000-8131649-2201444730-3289635840-1930375310290100000000001122301000000000000000000-191163610-12733323301000000000000000000212168810-12135024301000000000000000000684175110-1272982641000000000000000000010000000000020228161024540103503-172107472-293308019-633405115-104747310-101310000000000081274100000000000000000001000000000002370498104419-149108497-344303531-3410810652-104718316-10121000000000008117110000000000000000000001000001000-34231969-1023662010-26299310-2057449120-95121632014001000000000115001000000000216001000000000295010000000000000000003219-4053110305010000000000000000003211-10064096316100000000000000000000010000000002729-1696-107-1089-102736-6046-50393-95130001000000000129001000000000236100000000000000000000100000000001012-1671-102845-6288-60904-18991301000000000051120100000000005226100000000000000000001000000000001430-1698-102767-6178-603194-6835-302990-6513-405135-11024-705003-11021-60221000000000002116100000000000000000001000000000001840-1673-103318-7339-602599-5381-302407-5583-405425-11583-705441-11713-6023100000000000217701000000000000000000-1081-1540-10127-310-106701000000000000000000-649-1528-10104-361-105701000000000000000000-234-1517-1098-3334701000000000000000000238-1545-1092-373-1010810000000000000000000100000000000-2640-253-20-9828-17-30-1007057-30-9788-17-2029100000000000419810000000000000000000100000000000-2452-630-20-1485246-50-15059-11-30301000000000004113901000000000000000000-30661034-10-305012901000000000000000000-3054644-10-3230-10161001000000000000000000-64751452-30-4090151001000000000000000000-65151096-30-3690141001000000000000000000-6521752-30-363-6", + "expected": { + "metadata": { + "logFileName": "", + "recordType": "mapTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "rxSource": "NA" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeMapPayload", + "serialId": { + "streamId": "2c91e8d6-f917-4c82-96e4-9de0da3ddca7", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T22:01:11.319Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "RSU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000", + "mapSource": "RSU", + "originIp": "10.11.81.20" + }, + "payload": { + "data": { + "msgIssueRevision": 2, + "layerType": "intersectionData", + "layerID": 0, + "intersections": { + "intersectionGeometry": [ + { + "id": { + "id": 12112 + }, + "revision": 2, + "refPoint": { + "latitude": 39.5806913, + "longitude": -105.0870692, + "elevation": 1702.5 + }, + "laneWidth": 366, + "laneSet": { + "GenericLane": [ + { + "laneID": 18, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2121, + "y": 1567 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -3670, + "y": 7970 + } + }, + "attributes": { + "dElevation": 50 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1195, + "y": 2499 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -1832, + "y": 4149 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4313, + "y": 9347 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4364, + "y": 9515 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4272, + "y": 9547 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 6, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 19, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1752, + "y": 1601 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -2218, + "y": 4912 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2662, + "y": 5807 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2581, + "y": 5566 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3255, + "y": 7046 + } + } + }, + { + "delta": { + "nodeXY6": { + "x": -4489, + "y": 9829 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -4488, + "y": 9976 + } + }, + "attributes": { + "dElevation": -50 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 5, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 6, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 20, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1313, + "y": 1627 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -2022, + "y": 4378 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1194, + "y": 2575 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 21, + "ingressApproach": 2, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -813, + "y": 1649 + } + } + }, + { + "delta": { + "nodeXY5": { + "x": -2201, + "y": 4447 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": -3289, + "y": 6358 + } + }, + "attributes": { + "dElevation": 40 + } + }, + { + "delta": { + "nodeXY4": { + "x": -1930, + "y": 3753 + } + }, + "attributes": { + "dElevation": 10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 1, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 22, + "egressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -191, + "y": 1636 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -127, + "y": 333 + } + } + } + ] + } + }, + { + "laneID": 23, + "egressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 212, + "y": 1688 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -121, + "y": 350 + } + } + } + ] + } + }, + { + "laneID": 24, + "egressApproach": 3, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 684, + "y": 1751 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -127, + "y": 298 + } + } + } + ] + } + }, + { + "laneID": 26, + "ingressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 2022, + "y": 816 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 2454, + "y": 0 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3503, + "y": -172 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 7472, + "y": -293 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 8019, + "y": -63 + } + } + }, + { + "delta": { + "nodeXY4": { + "x": 3405, + "y": 115 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4747, + "y": 310 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 27, + "ingressApproach": 4, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 2370, + "y": 498 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4419, + "y": -149 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY6": { + "x": 8497, + "y": -344 + } + }, + "attributes": { + "dElevation": 30 + } + }, + { + "delta": { + "nodeXY4": { + "x": 3531, + "y": -34 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 8106, + "y": 52 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 4718, + "y": 316 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 8, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 17, + "ingressApproach": 1, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": true, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3423, + "y": 1969 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY2": { + "x": 236, + "y": 620 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY2": { + "x": -262, + "y": 993 + } + }, + "attributes": { + "dElevation": 10 + } + }, + { + "delta": { + "nodeXY5": { + "x": -2057, + "y": 4491 + } + }, + "attributes": { + "dElevation": 20 + } + }, + { + "delta": { + "nodeXY4": { + "x": -951, + "y": 2163 + } + }, + "attributes": { + "dElevation": 20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 14, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 15, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + }, + { + "connectingLane": { + "lane": 16, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + } + } + ] + } + }, + { + "laneID": 29, + "egressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 3219, + "y": -405 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 311, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 30, + "egressApproach": 5, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 3211, + "y": -1006 + } + } + }, + { + "delta": { + "nodeXY1": { + "x": 409, + "y": 6 + } + } + } + ] + } + }, + { + "laneID": 31, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": 2729, + "y": -1696 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY3": { + "x": 7, + "y": -1089 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2736, + "y": -6046 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY2": { + "x": 393, + "y": -951 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": true, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 3, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1012, + "y": -1671 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2845, + "y": -6288 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY3": { + "x": 904, + "y": -1899 + } + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 13, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 1 + }, + { + "connectingLane": { + "lane": 12, + "maneuver": { + "maneuverStraightAllowed": false, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": true, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 5, + "connectionID": 2 + } + ] + } + }, + { + "laneID": 2, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1430, + "y": -1698 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2767, + "y": -6178 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY5": { + "x": 3194, + "y": -6835 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2990, + "y": -6513 + } + }, + "attributes": { + "dElevation": -40 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5135, + "y": -11024 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5003, + "y": -11021 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 22, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 1, + "ingressApproach": 6, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 1840, + "y": -1673 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY5": { + "x": 3318, + "y": -7339 + } + }, + "attributes": { + "dElevation": -60 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2599, + "y": -5381 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY5": { + "x": 2407, + "y": -5583 + } + }, + "attributes": { + "dElevation": -40 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5425, + "y": -11583 + } + }, + "attributes": { + "dElevation": -70 + } + }, + { + "delta": { + "nodeXY6": { + "x": 5441, + "y": -11713 + } + }, + "attributes": { + "dElevation": -60 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 23, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 2, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 7, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -1081, + "y": -1540 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 127, + "y": -310 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + } + }, + { + "laneID": 6, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -649, + "y": -1528 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 104, + "y": -361 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + } + }, + { + "laneID": 5, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": -234, + "y": -1517 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 98, + "y": -333 + } + } + } + ] + } + }, + { + "laneID": 4, + "egressApproach": 7, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY3": { + "x": 238, + "y": -1545 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": 92, + "y": -373 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + } + }, + { + "laneID": 10, + "ingressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2640, + "y": -253 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9828, + "y": -17 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -10070, + "y": 57 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY6": { + "x": -9788, + "y": -17 + } + }, + "attributes": { + "dElevation": -20 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 29, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 9, + "ingressApproach": 8, + "laneAttributes": { + "directionalUse": { + "ingressPath": true, + "egressPath": false + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "maneuvers": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -2452, + "y": -630 + } + }, + "attributes": { + "dElevation": -20 + } + }, + { + "delta": { + "nodeXY6": { + "x": -14852, + "y": 46 + } + }, + "attributes": { + "dElevation": -50 + } + }, + { + "delta": { + "nodeXY6": { + "x": -15059, + "y": -11 + } + }, + "attributes": { + "dElevation": -30 + } + } + ] + }, + "connectsTo": { + "connectsTo": [ + { + "connectingLane": { + "lane": 30, + "maneuver": { + "maneuverStraightAllowed": true, + "maneuverNoStoppingAllowed": false, + "goWithHalt": false, + "maneuverLeftAllowed": false, + "maneuverUTurnAllowed": false, + "maneuverLeftTurnOnRedAllowed": false, + "reserved1": false, + "maneuverRightAllowed": false, + "maneuverLaneChangeAllowed": false, + "yieldAllwaysRequired": false, + "maneuverRightTurnOnRedAllowed": false, + "caution": false + } + }, + "signalGroup": 4, + "connectionID": 1 + } + ] + } + }, + { + "laneID": 13, + "egressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3066, + "y": 1034 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -305, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 12, + "egressApproach": 9, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY4": { + "x": -3054, + "y": 644 + } + }, + "attributes": { + "dElevation": -10 + } + }, + { + "delta": { + "nodeXY1": { + "x": -323, + "y": 0 + } + }, + "attributes": { + "dElevation": -10 + } + } + ] + } + }, + { + "laneID": 16, + "egressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6475, + "y": 1452 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -409, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 15, + "egressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6515, + "y": 1096 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -369, + "y": 0 + } + } + } + ] + } + }, + { + "laneID": 14, + "egressApproach": 10, + "laneAttributes": { + "directionalUse": { + "ingressPath": false, + "egressPath": true + }, + "shareWith": { + "busVehicleTraffic": false, + "trackedVehicleTraffic": false, + "individualMotorizedVehicleTraffic": false, + "taxiVehicleTraffic": false, + "overlappingLaneDescriptionProvided": false, + "cyclistVehicleTraffic": false, + "otherNonMotorizedTrafficTypes": false, + "multipleLanesTreatedAsOneLane": false, + "pedestrianTraffic": false, + "pedestriansTraffic": false + }, + "laneType": { + "vehicle": { + "isVehicleRevocableLane": false, + "isVehicleFlyOverLane": false, + "permissionOnRequest": false, + "hasIRbeaconCoverage": false, + "restrictedToBusUse": false, + "restrictedToTaxiUse": false, + "restrictedFromPublicUse": false, + "hovLaneUseOnly": false + } + } + }, + "nodeList": { + "nodes": [ + { + "delta": { + "nodeXY5": { + "x": -6521, + "y": 752 + } + }, + "attributes": { + "dElevation": -30 + } + }, + { + "delta": { + "nodeXY1": { + "x": -363, + "y": -6 + } + } + } + ] + } + } + ] + } + } + ] + } + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735MAP" + } + } + } + ] +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/JSONEncodedMAP_to_Asn1DecoderInput_Validation.json b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/JSONEncodedMAP_to_Asn1DecoderInput_Validation.json new file mode 100644 index 000000000..9dc66fcc3 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/JSONEncodedMAP_to_Asn1DecoderInput_Validation.json @@ -0,0 +1,164 @@ +{ + "cases": [ + { + "description": "Test case 1", + "input": { + "metadata": { + "recordType": "mapTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "e99b160c-b2b2-4282-85bd-02fafbc52417", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T21:46:51.146Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "RSU", + "sanitized": false, + "asn1": "001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000", + "mapSource": "RSU", + "originIp": "10.11.81.30" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000" + } + } + }, + "expected": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloade99b160c-b2b2-4282-85bd-02fafbc5241710002024-11-08T21:46:51.146Z80RSUfalse001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.30us.dot.its.jpo.ode.model.OdeHexByteArray001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000" + }, + { + "description": "Test case 2", + "input": { + "metadata": { + "recordType": "mapTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "7afc0062-4747-4c45-9062-3e525e6d286c", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T21:46:50.228Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "RSU", + "sanitized": false, + "asn1": "001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800", + "mapSource": "RSU", + "originIp": "10.11.81.33" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800" + } + } + }, + "expected": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload7afc0062-4747-4c45-9062-3e525e6d286c10002024-11-08T21:46:50.228Z80RSUfalse001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800RSU10.11.81.33us.dot.its.jpo.ode.model.OdeHexByteArray001283DA380330002044CA0D4D3EA2D42CC86AFB534E02DC3E5820A80000040000961C7612C5BB250FFDE04DD37663DFFA409D80583C0003009608AA000001000025872783416EC83BFEC81374DD9A67FFA02760160D0000C025824A80000040000961CBE0715BB2AB001004DD3765B5FFD009D80582C0003009609AA00000080000D8A308047027D9B520F000004E202C790000404B0515000000400006C5123F70013ECDA5E1800602710163A8000202581EA80000010000361C5E17DC0A0A6DF8040130134C230E2400118690001080AB100000000D877C7CB4027D8B039AFFF4202CC40000000361DF1ED2C09EC2C0EC3FFD080BB100000000D875379C5027B0B03F70000203B04000000035F791D70C09EC2C003BF72880F4100000000D7C8875B5027B0B0000FDCA203F04000000035EBB1D60C09EC2C003BF8416100A00000040000D77D77844027D9AA845002C052308C7C9000463C40004580228000004000095DFB9E6C9A509AFFA80546349C75FFC80A46058BC00010096010A00000100002578077AD8693C9C00E8152CD27B7802E028F0162D00004025806280000040000B5E049F1E00A0A693B8C00181518D28018012028F0162B00004025808280000020000B5DA09FE540A0A6ACB53FFA81450D772E7DD402828561AA000A02B0E400050210052200000001AF0DB0352050A15FBC6000040188800000006BC42418C0142857ED47FFA10072200000001AF1150904050A15FB9A000040208800000006BC4AC2F00142857EE080002C0A3400000200019AFB5D1346050A35FFA6177C0A0A2BFE64464B5FD921F600A0A6BF14443981428D7CF6891302851AF5E11142050A35EED218340A0A058EC00020096049A0000004000ED7C1B896902851AFFE90DCE050535FE5E2E3C0A0A6BFB3C26781414D7E5C883402829AF9911096050A35F57A14CC0A142BE86C25D35F2F610940A0A218412000AC7A000100C60E40004581668000002000135FB8226D80A146BFF1C7C401414D7F3C878202829AFB531352050A02C590001C04B030D000000400036C00BC4E681428D801789A302828AFF8D0F76D7F0E877C02829AFC950CA4050502C554001C0440350800000006C0DD44F88142858000814D100E4200000001B06A713CA050536000205480A0A2C197400000200001B079CED3004F135FF1113200A3205874000400960D3A00000100000D8234765D027B1AFFF08A14051402C360002004B06DD000000400006C0653B22013D8D800A4518028A0160C80006025838E8000002000035FDB1D84C09EC6C003BA14814140B0540003012C187400000080011B13F6EDB804F115FA6DFC10AFC94FC6A57EE07DCE2BFA7BED3B5FFCD72E80A1E018C90000800" + }, + { + "description": "Test case 3", + "input": { + "metadata": { + "recordType": "mapTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "91194b7c-ba02-4e71-8297-e11c2a968e62", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T21:46:50.967Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "RSU", + "sanitized": false, + "asn1": "00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000", + "mapSource": "RSU", + "originIp": "10.11.81.36" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000" + } + } + }, + "expected": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload91194b7c-ba02-4e71-8297-e11c2a968e6210002024-11-08T21:46:50.967Z80RSUfalse00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000RSU10.11.81.36us.dot.its.jpo.ode.model.OdeHexByteArray00128315380230002044D0094D3EA1DB2CCC713452F402DC325806280000040000B5DC45F6640A0A694423FFE01478D267B809B02788162500004025804280000040000B5DD2DF1180A0A69400C01581478D26BE802102788162700004025802280000050000B5DE71EA600A0A69346401281478D27C88052027889629000040231A2400218C9000196020A00000080002D7681808802829A58F9007E051E15E689FAFC5616A000A02B0C400050210052200000001AEC35053C050515FB9A000040188800000006BAFBC20981414D7EEC800002828401C8800000006BAE1C2BB01414D7EDA800B02828B020D000000200006BD19441381414D802398EB027D8460E48002306200022C093400000200001AF6F5103605053600FE640809F6058D400020096051A00000080000D7CC8880402829B008B323204FB0AC494001C056268000E0420168400000001603CA2058B000103682018840000000160A162058AFFE90368581AA80000050000B61E6E14B409F66EB433FE901428DD7357FAB0294086184800230B20002583C00030196072A00000100002D87F183EB027D9BAC18FFAC050A375D61FE5C0A50058340003009607AA00000100002D88148270027D9BAC1AFF98050A375C8DFEE00A500582C00030096082A00000080000D884D813A027D9BBC18FEEC050F02C690000404B0455000000400006C443BFD4813ECDCF047FBB028281632A0002022024C4000000036238DF5AC09F62C08D3FFD0809B100000000D89287BD4027D8B01CCFFF42028C40000000362545EA3409F62C0734000160B3A00000100008582B977ED2C003381A35FD4DDED40A0A2BFCC3E2FB5F7E9D5B00A0A6BDC63640814140B0C80008012C157400000080014B0882EFD057FE3784B2BFF7BAEFB5FD21E3800A0A2BF81BC9835FA55E3240A0A6BDC336710141423142400118990001160C3A0000008000057FF477D16BFE637C1014140B0550003012C177400000100010B029CEF9657FE96FD26BFD7BD3E8141457F1478066BF143BC101414D7BA86CF902828160C8000602203304000000035F719DE5C0A0A2BFFD3F6D880D4100000000D7BED779702828B0000FDCE813ECCEB0E00B027D858D0FEA2D0476B169636B0200800161F00010022041A400000000BE456B81904002043A400000000BE01114184C00013C457FD24A52058C40001008037263DFF780A146E023C005813EC0A0806012C1554000002000045FE580ADC92E801402829B81AEFFC804FB0281C1804B05950000008000117FBD42371E39FF980A0A6E132C01E813EC0A0606012C18540000010000C780E7B5B3CEA805C0A0A1F0122C8BDCBC0000A0A5F07223204FB028800404B05D5000000400001E02A202DA50180060282814420202000" + }, + { + "description": "Test case 4", + "input": { + "metadata": { + "recordType": "mapTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "ce610ea5-0963-4c9e-a149-fc3c5b420d46", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T21:46:51.971Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "RSU", + "sanitized": false, + "asn1": "0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200", + "mapSource": "RSU", + "originIp": "10.11.81.19" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200" + } + } + }, + "expected": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadce610ea5-0963-4c9e-a149-fc3c5b420d4610002024-11-08T21:46:51.971Z80RSUfalse0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200RSU10.11.81.19us.dot.its.jpo.ode.model.OdeHexByteArray0012830538023000205EA2094D3A3E202CA7783451FA02DC385824E8000002000089D7FA3C8FF96D5837A9E7A4163680002025822E80000020000A97DFAB40A0A6C00BD21D013EC3792FAD4163880002025820E80000040001A92E3AA00A0A6BFE6538C813ECC7FD3303027D9B01B5AC0004E235FE3698CC09E2058240003009607BA00000100006A32EEB6028298FFA7E6A04FB31FFDFEA809F66C0276FE601374C7D7F795027B0160B0000C0220270400000000A7FF8A4108E8220290400000000AE7B8BC106654582F6800000400008BB12D889D763ED6CD4D1F3D027B01617000100258316800000400010BADA8407C8F7F7B37CB7C0C09F65EF01F8E04FB02C2A0002004B066D0000004000117754649317D7F1C5F5AF8E0B0540003012C1AB4000001000045D8EF044D741F7C5E72E30C04FB02C110000C04406F08000000017372C9833182C4073080000000172BA0F033D800B07B90000002000117BA05905140476BFCD2EDD813D8031D200012C03140000010000451D42D0C808C5E8027D97035116813EC2B0A4000501485A000296010A000001000062A421736408A2E5813ECD802B5DAA027B1B00507F4404E736005D134009B00589C00010096008A000001000082BB615E6407E1FA013ECB806072409F66405040A013ECD806744FF02739AFFA48A8604D802C520000804B024D000000400015070BFA01414C2F6E02E0282866DD75682C4D0001C04B020D000000400005073B5901414C18BE01D0282816288000E02580E680000040001283196680A0A610C6FF481414338842B0258DFD82C6E0001004B018D0000008000250602268141443771FB058F7A150050508C8E05C1639000080220148400000002836E6FC0A0A0229030805A100000000A104B5C0282806D400202B240000000161566915810BFF2400A48000000008D5480C0F18AE4008480000000093B88680F4880203BA40000000134E16A301C4422581CC800000100012CF576F9028283793BFB201DED0C09F6241B7BB408C3480004218400201AA4000000030CE28E000A0A01B50008062900000000C33B621C0282805EBF400002000144016C02C36DDFFF0282984ACC1EE05052C36F0AC02828669D82DA8F821480A0A10F140002C8E0001004B03190000008000519FD190C43B2E0066108B08401428C342A0CE02828258A0604A6BE959AEE0E6050502C920001004B02D90000008000459FA164404FB30A8580A00A14619C306701414C32CE10E02829659081F814141029030164B000080200" + }, + { + "description": "Test case 5", + "input": { + "metadata": { + "recordType": "mapTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "c8fbfede-ea1f-47d8-a039-0f0151468160", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-08T21:46:50.313Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "RSU", + "sanitized": false, + "asn1": "0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000", + "mapSource": "RSU", + "originIp": "10.11.81.20" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000" + } + } + }, + "expected": "mapTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadc8fbfede-ea1f-47d8-a039-0f015146816010002024-11-08T21:46:50.313Z80RSUfalse0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000RSU10.11.81.20us.dot.its.jpo.ode.model.OdeHexByteArray0012834538023000205EA0094D3C71C12CA6CE5D527C02DC3458244800000400028CF6F61F62355F9101464B5AAE70C0A0A631B181A81428D6F27A48302829ADDE94A56050F35BD42952C09C4058340003009609920000010000A2128E4162EAD9980143CC566B6AF028798AF5EB7C050F11349EE19ADCEF4CCA050A35B9E29BE009CE0582C000300960A120000008000222DFE5B6303588D0143CB5AB683C0A0A058F2000080960A920000008000424D3E7162ECF8AF8143CC4C9F8D6028A16876F54814140B1D4000101101632000000014E83CC805050181D34405CC80000000546A74C01414061F5E101832000000015559DAE05050181CA8B06910000008000557F359801414BCCB40000A0A5F6BDEA8050533D307B6C0A1E27EA6FE0AFA9B073027D99945C26C04FB02C360002004B06D1000000800045E50A3E40505331437DAC0A0A6D098BF540143CBEE5BF780A0A67F5501A013ECCC9BA13C027D8161900010025822280000010401AC5437B1027D933B3360141495F5F840A0A62FEF8C581428B624E1CC0A142187100008C3C80008220400203AA400000000F926E6B066F00080F29000000003E45B0481CCC0C583EC800000100012F552960027D9500E77E04FB32AB0218809CE0D89092231E2000118E900011601B200000080002ABF4179027D9958E8EE004E20AE20254561A8000A02B0C40005022C0264000002000115B2C2BC04FB32ACF1F7809C4658F42A6813C4CAEB868F02761B281EA9E004DD364E2D53CC09C4058B40001009600B200000100008AF30177027D9967B06AA04E232A272BEC09E2652CE518813B0D953152C1026E9B2A82A47E04E202C5E0000804401DC8000000051E38FE013EC89FCCA027D84019C8000000052BB904013EC89A097027D84015C80000000538B109813EC0988B31004720000000151DC3EE04FB225C22C09F62C0A840000020000965B0781813D8D599C7FEF02789AB155007204F1356711FFBC09EC058EC0002009604C200000100002B336362809EC6A2FE40170139CD452D7FF502788163D0000802201B2400000002C80D40A027D8067C0020192400000002C825284027D905EC0004FB08085100000000C1AD65AC02788033C00201F4400000003068D912009E2011F0008075100000000C1A1E2F00278804ABF47A7C8195028280540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000" + } + ] +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/UDPMAP_To_EncodedJSON_Validation.json b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/UDPMAP_To_EncodedJSON_Validation.json new file mode 100644 index 000000000..eb898e5aa --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us.dot.its.jpo.ode.udp.map/UDPMAP_To_EncodedJSON_Validation.json @@ -0,0 +1,68 @@ +{ + "cases": [ + { + "description": "Valid MAP", + "input": "001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000", + "expected": { + "metadata": { + "securityResultCode": "success", + "recordGeneratedBy": "RSU", + "schemaVersion": 8, + "mapSource": "RSU", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "recordId": 0, + "serialNumber": 0, + "streamId": "9a79753a-21f5-453f-8c0b-bf59a1b63285", + "bundleSize": 1, + "bundleId": 0 + }, + "sanitized": false, + "recordType": "mapTx", + "asn1": "001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000", + "maxDurationTime": 0, + "odeReceivedAt": "2020-01-01T00:00:00.000Z", + "originIp": "127.0.0.1" + }, + "payload": { + "data": { + "bytes": "001283B0380230002044C4094D3E99B42CC5EE1D542002DC36582D280000070001B6152DE2A00A0A6C18DBA4901414D80A776F202851AFEB2F114050535E9B183380A1425832000400A42E00020226400582F280000020002960FB1E175B0440F23605053604DDE30C0A146C03CBCF981414D7F5378AC02829AF820D4B4050A35F51DC7F809F60582A000180960C4A000000800065827078266C18DBA6601428D80CF777C02851AFD9EEB40050A15E7297D5016088000602582B080000010002362769E2E80A0A2BF423E15B60819D2480A146C011BD5281414D7F5F781D02829AFAB6E53C050500C5080004B0729000000200046BCBA39F101428D78FB8260027D9ADD9EFD3804F1356B81FFA40A0A2B1DD401395DE15FFE8063440002583748000001000035E84DD3E00A0A2BD3EC13300C64800044066C800000006B2B02B1E8141457F3C80A1101AB200000001ACC76AEDA050515FCC60298B00C5000000800042BEB43E70B5C8EDF6D809F62BB393F8FB5DB49FDD809F66AF94BFF70141455EBF80110588C00010096008A0000010000657DED7A216BB7D3F2E81414D71C27E52027B1AAEA4FEE2050535652E002809F60589C00010096010A0000010000657D557B672B9403EE735DA55FBF409F62AAD73FBB156D92009C162500004022022C40000000161809FB60B01FB007E2024C4000000016194DF58CB021300B82026C40000000161B75EF75B01FB00A0050508041100000000D77238659027B0AFD92FF8E200E44000000035DDA2143409EC2BF593FE088031100000000D77C48392027B0AFD1EFF8E200A44000000035DFE208D009EC2BF4ABFDD88021100000000D784980C5027B0AFD14FF605812680000010000B5E54A294409EC2BF30C3FD15FB9A081056104000802B0720004022C0A3400000080005AF557153604FB35F872204409F62BFB5410802C188001008402D0800000006BEDAC57E813EC57FBB80EB2C0C540000028000DB0411120C04FB162FE20A0DB2DA106F205051637FE0591B1A03019E05050AC220001804216400581AA8000004000136094E1EA009F62C91141BFB64D660B1C0A0A6CBF2C102014140B0780006012C0E5400000200015B05310CA804FB16382A0A95B1BF3047C05051625EE04D4B12A701EC5898A80AC6C25D4028014140B0680006012C0F540000020000DB05B909DE04FB365C8610C40A0A2C710C0EE1625DA03C1B1C5F01F6050502C160001804B0415000000800032C19041BF1637FE0AACB24FF05A658E2181806C714C07C814140B04800060110147200000001B411EFE4405051603CA005C000" + }, + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray" + } + } + }, + { + "description": "Valid MAP message - minimum allowed data elements", + "input": "00127b226d65746164617461223a7b227365637572697479526573756c74436f6465223a2273756363657373222c227265636f726447656e6572617465644279223a6e756c6c2c22736368656d6156657273696f6e223a362c226f64655061636b65744944223a22222c2273616e6974697a6564223a66616c73652c227265636f726454797065223a226d61705478222c22656e636f64696e6773223a6e756c6c2c227265636f726447656e6572617465644174223a22222c226d61784475726174696f6e54696d65223a302c226f646554696d53746172744461746554696d65223a22222c2272656365697665644d65737361676544657461696c73223a7b226c6f636174696f6e44617461223a6e756c6c2c227278536f75726365223a224e41227d2c226d6170536f75726365223a22525355222c227061796c6f616454797065223a2275732e646f742e6974732e6a706f2e6f64652e6d6f64656c2e4f64654d61705061796c6f6164222c2273657269616c4964223a7b227265636f72644964223a302c2273657269616c4e756d626572223a302c2273747265616d4964223a2231333962613361662d653530312d343835342d393332372d623965316132656438646662222c2262756e646c6553697a65223a312c2262756e646c654964223a307d2c226c6f6746696c654e616d65223a22222c226f646552656365697665644174223a224049534f5f444154455f54494d4540222c226f726967696e4970223a2231302e31312e38312e3132227d2c227061796c6f6164223a7b2264617461223a7b2274696d655374616d70223a6e756c6c2c226c6179657254797065223a22696e74657273656374696f6e44617461222c226c617965724944223a302c227265737472696374696f6e4c697374223a6e756c6c2c2264617461506172616d6574657273223a6e756c6c2c226d736749737375655265766973696f6e223a322c22696e74657273656374696f6e73223a7b22696e74657273656374696f6e47656f6d65747279223a5b7b2273706565644c696d697473223a6e756c6c2c226c616e65536574223a7b2247656e657269634c616e65223a5b7b22636f6e6e65637473546f223a7b22636f6e6e65637473546f223a5b7b2275736572436c617373223a6e756c6c2c22636f6e6e656374696f6e4944223a312c2272656d6f7465496e74657273656374696f6e223a6e756c6c2c227369676e616c47726f7570223a322c22636f6e6e656374696e674c616e65223a7b226c616e65223a31352c226d616e6575766572223a7b226d616e65757665725374726169676874416c6c6f776564223a747275652c226d616e65757665724e6f53746f7070696e67416c6c6f776564223a66616c73652c22676f5769746848616c74223a66616c73652c226d616e65757665724c656674416c6c6f776564223a66616c73652c226d616e6575766572555475726e416c6c6f776564223a66616c73652c226d616e65757665724c6566745475726e4f6e526564416c6c6f776564223a66616c73652c22726573657276656431223a66616c73652c226d616e65757665725269676874416c6c6f776564223a66616c73652c226d616e65757665724c616e654368616e6765416c6c6f776564223a66616c73652c227969656c64416c6c776179735265717569726564223a66616c73652c226d616e657576657252696768745475726e4f6e526564416c6c6f776564223a66616c73652c2263617574696f6e223a66616c73657d7d7d5d7d2c226c616e654944223a312c22656772657373417070726f616368223a6e756c6c2c226c616e6541747472696275746573223a7b22646972656374696f6e616c557365223a7b22696e677265737350617468223a747275652c2265677265737350617468223a66616c73657d2c22736861726557697468223a7b2262757356656869636c6554726166666963223a66616c73652c22747261636b656456656869636c6554726166666963223a66616c73652c22696e646976696475616c4d6f746f72697a656456656869636c6554726166666963223a66616c73652c227461786956656869636c6554726166666963223a66616c73652c226f7665726c617070696e674c616e654465736372697074696f6e50726f7669646564223a66616c73652c226379636c69737456656869636c6554726166666963223a66616c73652c226f746865724e6f6e4d6f746f72697a6564547261666669635479706573223a66616c73652c226d756c7469706c654c616e65735472656174656441734f6e654c616e65223a66616c73652c227065646573747269616e54726166666963223a66616c73652c227065646573747269616e7354726166666963223a66616c73657d2c226c616e6554797065223a7b227369646577616c6b223a6e756c6c2c227061726b696e67223a6e756c6c2c2263726f737377616c6b223a6e756c6c2c226d656469616e223a6e756c6c2c227374726970696e67223a6e756c6c2c2262696b654c616e65223a6e756c6c2c22747261636b656456656869636c65223a6e756c6c2c2276656869636c65223a7b22697356656869636c655265766f6361626c654c616e65223a66616c73652c22697356656869636c65466c794f7665724c616e65223a66616c73652c227065726d697373696f6e4f6e52657175657374223a66616c73652c226861734952626561636f6e436f766572616765223a66616c73652c2272657374726963746564546f427573557365223a66616c73652c2272657374726963746564546f54617869557365223a66616c73652c", + "expected": { + "metadata": { + "securityResultCode": "success", + "recordGeneratedBy": "RSU", + "schemaVersion": 8, + "mapSource": "RSU", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "recordId": 0, + "serialNumber": 0, + "streamId": "f085a371-082c-43ae-8c2a-044820b5f816", + "bundleSize": 1, + "bundleId": 0 + }, + "sanitized": false, + "recordType": "mapTx", + "asn1": "00127B226D65746164617461223A7B227365637572697479526573756C74436F6465223A2273756363657373222C227265636F726447656E6572617465644279223A6E756C6C2C22736368656D6156657273696F6E223A362C226F64655061636B65744944223A22222C2273616E6974697A6564223A66616C73652C227265636F726454797065223A226D61705478222C22656E636F64696E6773223A6E756C6C2C227265636F726447656E6572617465644174223A22222C226D61784475726174696F6E54696D65223A302C226F646554696D53746172744461746554696D65223A22222C2272656365697665644D65737361676544657461696C73223A7B226C6F636174696F6E44617461223A6E756C6C2C227278536F75726365223A224E41227D2C226D6170536F75726365223A22525355222C227061796C6F616454797065223A2275732E646F742E6974732E6A706F2E6F64652E6D6F64656C2E4F64654D61705061796C6F6164222C2273657269616C4964223A7B227265636F72644964223A302C2273657269616C4E756D626572223A302C2273747265616D4964223A2231333962613361662D653530312D343835342D393332372D623965316132656438646662222C2262756E646C6553697A65223A312C2262756E646C654964223A307D2C226C6F6746696C654E616D65223A22222C226F646552656365697665644174223A224049534F5F444154455F54494D4540222C226F726967696E4970223A2231302E31312E38312E3132227D2C227061796C6F6164223A7B2264617461223A7B2274696D655374616D70223A6E756C6C2C226C6179657254797065223A22696E74657273656374696F6E44617461222C226C617965724944223A302C227265737472696374696F6E4C697374223A6E756C6C2C2264617461506172616D6574657273223A6E756C6C2C226D736749737375655265766973696F6E223A322C22696E74657273656374696F6E73223A7B22696E74657273656374696F6E47656F6D65747279223A5B7B2273706565644C696D697473223A6E756C6C2C226C616E65536574223A7B2247656E657269634C616E65223A5B7B22636F6E6E65637473546F223A7B22636F6E6E65637473546F223A5B7B2275736572436C617373223A6E756C6C2C22636F6E6E656374696F6E4944223A312C2272656D6F7465496E74657273656374696F6E223A6E756C6C2C227369676E616C47726F7570223A322C22636F6E6E656374696E674C616E65223A7B226C616E65223A31352C226D616E6575766572223A7B226D616E65757665725374726169676874416C6C6F776564223A747275652C226D616E65757665724E6F53746F7070696E67416C6C6F776564223A66616C73652C22676F5769746848616C74223A66616C73652C226D616E65757665724C656674416C6C6F776564223A66616C73652C226D616E6575766572555475726E416C6C6F776564223A66616C73652C226D616E65757665724C6566745475726E4F6E526564416C6C6F776564223A66616C73652C22726573657276656431223A66616C73652C226D616E65757665725269676874416C6C6F776564223A66616C73652C226D616E65757665724C616E654368616E6765416C6C6F776564223A66616C73652C227969656C64416C6C776179735265717569726564223A66616C73652C226D616E657576657252696768745475726E4F6E526564416C6C6F776564223A66616C73652C2263617574696F6E223A66616C73657D7D7D5D7D2C226C616E654944223A312C22656772657373417070726F616368223A6E756C6C2C226C616E6541747472696275746573223A7B22646972656374696F6E616C557365223A7B22696E677265737350617468223A747275652C2265677265737350617468223A66616C73657D2C22736861726557697468223A7B2262757356656869636C6554726166666963223A66616C73652C22747261636B656456656869636C6554726166666963223A66616C73652C22696E646976696475616C4D6F746F72697A656456656869636C6554726166666963223A66616C73652C227461786956656869636C6554726166666963223A66616C73652C226F7665726C617070696E674C616E654465736372697074696F6E50726F7669646564223A66616C73652C226379636C69737456656869636C6554726166666963223A66616C73652C226F746865724E6F6E4D6F746F72697A6564547261666669635479706573223A66616C73652C226D756C7469706C654C616E65735472656174656441734F6E654C616E65223A66616C73652C227065646573747269616E54726166666963223A66616C73652C227065646573747269616E7354726166666963223A66616C73657D2C226C616E6554797065223A7B227369646577616C6B223A6E756C6C2C227061726B696E67223A6E756C6C2C2263726F737377616C6B223A6E756C6C2C226D656469616E223A6E756C6C2C227374726970696E67223A6E756C6C2C2262696B654C616E65223A6E756C6C2C22747261636B656456656869636C65223A6E756C6C2C2276656869636C65223A7B22697356656869636C655265766F6361626C654C616E65223A66616C73652C22697356656869636C65466C794F7665724C616E65223A66616C73652C227065726D697373696F6E4F6E52657175657374223A66616C73652C226861734952626561636F6E436F766572616765223A66616C73652C2272657374726963746564546F427573557365223A66616C73652C2272657374726963746564546F54617869557365223A66616C73652C", + "maxDurationTime": 0, + "odeReceivedAt": "2020-01-01T00:00:00.000Z", + "originIp": "127.0.0.1" + }, + "payload": { + "data": { + "bytes": "00127B226D65746164617461223A7B227365637572697479526573756C74436F6465223A2273756363657373222C227265636F726447656E6572617465644279223A6E756C6C2C22736368656D6156657273696F6E223A362C226F64655061636B65744944223A22222C2273616E6974697A6564223A66616C73652C227265636F726454797065223A226D61705478222C22656E636F64696E6773223A6E756C6C2C227265636F726447656E6572617465644174223A22222C226D61784475726174696F6E54696D65223A302C226F646554696D53746172744461746554696D65223A22222C2272656365697665644D65737361676544657461696C73223A7B226C6F636174696F6E44617461223A6E756C6C2C227278536F75726365223A224E41227D2C226D6170536F75726365223A22525355222C227061796C6F616454797065223A2275732E646F742E6974732E6A706F2E6F64652E6D6F64656C2E4F64654D61705061796C6F6164222C2273657269616C4964223A7B227265636F72644964223A302C2273657269616C4E756D626572223A302C2273747265616D4964223A2231333962613361662D653530312D343835342D393332372D623965316132656438646662222C2262756E646C6553697A65223A312C2262756E646C654964223A307D2C226C6F6746696C654E616D65223A22222C226F646552656365697665644174223A224049534F5F444154455F54494D4540222C226F726967696E4970223A2231302E31312E38312E3132227D2C227061796C6F6164223A7B2264617461223A7B2274696D655374616D70223A6E756C6C2C226C6179657254797065223A22696E74657273656374696F6E44617461222C226C617965724944223A302C227265737472696374696F6E4C697374223A6E756C6C2C2264617461506172616D6574657273223A6E756C6C2C226D736749737375655265766973696F6E223A322C22696E74657273656374696F6E73223A7B22696E74657273656374696F6E47656F6D65747279223A5B7B2273706565644C696D697473223A6E756C6C2C226C616E65536574223A7B2247656E657269634C616E65223A5B7B22636F6E6E65637473546F223A7B22636F6E6E65637473546F223A5B7B2275736572436C617373223A6E756C6C2C22636F6E6E656374696F6E4944223A312C2272656D6F7465496E74657273656374696F6E223A6E756C6C2C227369676E616C47726F7570223A322C22636F6E6E656374696E674C616E65223A7B226C616E65223A31352C226D616E6575766572223A7B226D616E65757665725374726169676874416C6C6F776564223A747275652C226D616E65757665724E6F53746F7070696E67416C6C6F776564223A66616C73652C22676F5769746848616C74223A66616C73652C226D616E65757665724C656674416C6C6F776564223A66616C73652C226D616E6575766572555475726E416C6C6F776564223A66616C73652C226D616E65757665724C6566745475726E4F6E526564416C6C6F776564223A66616C73652C22726573657276656431223A66616C73652C226D616E65757665725269676874416C6C6F776564223A66616C73652C226D616E65757665724C616E654368616E6765416C6C6F776564223A66616C73652C227969656C64416C6C776179735265717569726564223A66616C73652C226D616E657576657252696768745475726E4F6E526564416C6C6F776564223A66616C73652C2263617574696F6E223A66616C73657D7D7D5D7D2C226C616E654944223A312C22656772657373417070726F616368223A6E756C6C2C226C616E6541747472696275746573223A7B22646972656374696F6E616C557365223A7B22696E677265737350617468223A747275652C2265677265737350617468223A66616C73657D2C22736861726557697468223A7B2262757356656869636C6554726166666963223A66616C73652C22747261636B656456656869636C6554726166666963223A66616C73652C22696E646976696475616C4D6F746F72697A656456656869636C6554726166666963223A66616C73652C227461786956656869636C6554726166666963223A66616C73652C226F7665726C617070696E674C616E654465736372697074696F6E50726F7669646564223A66616C73652C226379636C69737456656869636C6554726166666963223A66616C73652C226F746865724E6F6E4D6F746F72697A6564547261666669635479706573223A66616C73652C226D756C7469706C654C616E65735472656174656441734F6E654C616E65223A66616C73652C227065646573747269616E54726166666963223A66616C73652C227065646573747269616E7354726166666963223A66616C73657D2C226C616E6554797065223A7B227369646577616C6B223A6E756C6C2C227061726B696E67223A6E756C6C2C2263726F737377616C6B223A6E756C6C2C226D656469616E223A6E756C6C2C227374726970696E67223A6E756C6C2C2262696B654C616E65223A6E756C6C2C22747261636B656456656869636C65223A6E756C6C2C2276656869636C65223A7B22697356656869636C655265766F6361626C654C616E65223A66616C73652C22697356656869636C65466C794F7665724C616E65223A66616C73652C227065726D697373696F6E4F6E52657175657374223A66616C73652C226861734952626561636F6E436F766572616765223A66616C73652C2272657374726963746564546F427573557365223A66616C73652C2272657374726963746564546F54617869557365223A66616C73652C" + }, + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray" + } + } + } + ] +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-bsm.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-bsm.json new file mode 100644 index 000000000..1929433af --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-bsm.json @@ -0,0 +1,37 @@ +{ + "metadata": { + "bsmSource": "EV", + "recordType": "bsmTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "locationData": { + "latitude": "unavailable", + "longitude": "unavailable", + "elevation": "unavailable", + "speed": "unavailable", + "heading": "unavailable" + }, + "rxSource": "RSU" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "be071349-9bb6-4b66-b1c7-8df1f9e0cb74", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-03-15T16:46:45.297174600Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "OBU", + "sanitized": false, + "originIp": "192.168.0.1" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "03810040038081B1001480AD4644A9EA5442BC26E97C7496576E052569B214000070007050FD7D0FA1007FFF8000681250020214C1C0FF64BFFA0FB84F720FF71BFF9500DFFFC0FF564006D001FFFC0FF5BBFE5B031FFFC0FF573FF73075FFFC0FF973FFB708FFFFC0FFEFC00B50B5FFFC0FFF0401150BBFFFC0FFDF4015D0C1FFFC0FFB9C01690C7FFFC0FFC0401550C9FFFC0FFBAC014F0C9FFFC0FFBBC01530CBFFFC0FFBB400B30E7FFFC100383FFCD0E3FFFCFFFEC800400120000243450D45B978805B073A8672E91E9D80824A65C65F85E35B61502149263F000FE804E6B84AF66507D51690DE76F30D1468A68F8986B58E6AECB2C5FC4766C223F0B977E87678DDF714FE123C483622CC7500" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-psm.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-psm.json new file mode 100644 index 000000000..5834ce595 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-psm.json @@ -0,0 +1,27 @@ +{ + "metadata": { + "recordType": "psmTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "fa3dfe1b-80cd-45cb-ae2c-c604a214fe56", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-03-15T19:16:35.212860500Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "UNKNOWN", + "sanitized": false, + "psmSource": "RSU", + "originIp": "192.168.0.1" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC79860100" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-spat.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-spat.json new file mode 100644 index 000000000..acfb705ab --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-spat.json @@ -0,0 +1,28 @@ +{ + "metadata": { + "recordType": "spatTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "5ec410a3-bec6-4724-9601-1e08778e1dfc", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-03-15T19:43:22.604870100Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "RSU", + "sanitized": false, + "spatSource": "RSU", + "originIp": "192.168.0.1", + "isCertPresent": false + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "0381004003807C00134700081132000000E437070010434257925790010232119A11CE800C10D095E495E400808684AF24AF20050434257925790030232119A11CE801C10D095E495E401008684AF24AF200" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-srm.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-srm.json new file mode 100644 index 000000000..17deddea2 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-srm.json @@ -0,0 +1,27 @@ +{ + "metadata": { + "recordType": "srmTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "190cbd65-d1e2-488a-ba42-b7d3f03a5c69", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-03-15T19:24:04.113614500Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "OBU", + "sanitized": false, + "originIp": "192.168.0.1", + "srmSource": "RSU" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "0381004003807C001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C000" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-ssm.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-ssm.json new file mode 100644 index 000000000..d7659783e --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-ssm.json @@ -0,0 +1,27 @@ +{ + "metadata": { + "recordType": "ssmTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "c4e4e92d-dccc-45f5-813f-7d36795529a0", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-03-15T19:31:02.907835400Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "RSU", + "sanitized": false, + "originIp": "192.168.0.1", + "ssmSource": "RSU" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "0381004003807C001E120000000005E9C04071A26614C06000040BA000" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-tim.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-tim.json new file mode 100644 index 000000000..69cbf038e --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/decoder-input-tim.json @@ -0,0 +1,26 @@ +{ + "metadata": { + "recordType": "timMsg", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "9952caf6-81bd-490d-ad95-47dee31c3ba8", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-03-15T19:38:48.578500100Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "RSU", + "sanitized": false, + "originIp": "192.168.0.1" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "0381004003807C001F79201000000000012AA366D080729B8987D859717EE22001FFFE4FD0011589D828007E537130FB0B2E2FDC440001F46FFFF002B8B2E46E926E27CE6813D862CB90EDC9B89E11CE2CB8E98F9B89BCC4050518B2E365B66E26AE3B8B2E291A66E2591D8141462CB873969B89396C62CB86AFE9B89208E00000131560018300023E43A6A1351800023E4700EFC51881010100030180C620FB90CAAD3B9C5082080E1DDC905E10168E396921000325A0D73B83279C83010180034801090001260001808001838005008001F0408001828005008001304000041020407E800320409780050080012040000320409900018780032040958005000001E0408183E7139D7B70987019B526B8A950052F5C011D3C4B992143E885C71F95DA6071658082346CC03A50D66801F65288C30AB39673D0494536C559047E457AD291C99C20A7FB1244363E993EE3EE98C78742609340541DA01545A0F7339C26A527903576D300" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-bsm.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-bsm.xml new file mode 100644 index 000000000..0d06ee3a2 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-bsm.xml @@ -0,0 +1 @@ +EVbsmTxsuccessunavailableunavailableunavailableunavailableunavailableRSUunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadbe071349-9bb6-4b66-b1c7-8df1f9e0cb7410002024-03-15T16:46:45.297174600Z80OBUfalse192.168.0.1us.dot.its.jpo.ode.model.OdeHexByteArray001480AD4644A9EA5442BC26E97C7496576E052569B214000070007050FD7D0FA1007FFF8000681250020214C1C0FF64BFFA0FB84F720FF71BFF9500DFFFC0FF564006D001FFFC0FF5BBFE5B031FFFC0FF573FF73075FFFC0FF973FFB708FFFFC0FFEFC00B50B5FFFC0FFF0401150BBFFFC0FFDF4015D0C1FFFC0FFB9C01690C7FFFC0FFC0401550C9FFFC0FFBAC014F0C9FFFC0FFBBC01530CBFFFC0FFBB400B30E7FFFC100383FFCD0E3FFFCFFFEC800400120000243450D45B978805B073A8672E91E9D80824A65C65F85E35B61502149263F000FE804E6B84AF66507D51690DE76F30D1468A68F8986B58E6AECB2C5FC4766C223F0B977E87678DDF714FE123C483622CC7500 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-psm.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-psm.xml new file mode 100644 index 000000000..18c3af04c --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-psm.xml @@ -0,0 +1 @@ +psmTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadfa3dfe1b-80cd-45cb-ae2c-c604a214fe5610002024-03-15T19:16:35.212860500Z80UNKNOWNfalseRSU192.168.0.1us.dot.its.jpo.ode.model.OdeHexByteArray00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC79860100 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-spat.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-spat.xml new file mode 100644 index 000000000..4c1b3f663 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-spat.xml @@ -0,0 +1 @@ +spatTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload5ec410a3-bec6-4724-9601-1e08778e1dfc10002024-03-15T19:43:22.604870100Z80RSUfalseRSU192.168.0.1falseus.dot.its.jpo.ode.model.OdeHexByteArray00134700081132000000E437070010434257925790010232119A11CE800C10D095E495E400808684AF24AF20050434257925790030232119A11CE801C10D095E495E401008684AF24AF200 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-srm.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-srm.xml new file mode 100644 index 000000000..091ffc3e9 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-srm.xml @@ -0,0 +1 @@ +srmTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload190cbd65-d1e2-488a-ba42-b7d3f03a5c6910002024-03-15T19:24:04.113614500Z80OBUfalse192.168.0.1RSUus.dot.its.jpo.ode.model.OdeHexByteArray001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C000 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-ssm.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-ssm.xml new file mode 100644 index 000000000..13f11925b --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-ssm.xml @@ -0,0 +1 @@ +ssmTxsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payloadc4e4e92d-dccc-45f5-813f-7d36795529a010002024-03-15T19:31:02.907835400Z80RSUfalse192.168.0.1RSUus.dot.its.jpo.ode.model.OdeHexByteArray001E120000000005E9C04071A26614C06000040BA000 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-tim.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-tim.xml new file mode 100644 index 000000000..fa1b38750 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/kafka/listeners/asn1/expected-tim.xml @@ -0,0 +1 @@ +timMsgsuccessunsecuredDataMessageFrameUPERus.dot.its.jpo.ode.model.OdeAsn1Payload9952caf6-81bd-490d-ad95-47dee31c3ba810002024-03-15T19:38:48.578500100Z80RSUfalse192.168.0.1us.dot.its.jpo.ode.model.OdeHexByteArray001F79201000000000012AA366D080729B8987D859717EE22001FFFE4FD0011589D828007E537130FB0B2E2FDC440001F46FFFF002B8B2E46E926E27CE6813D862CB90EDC9B89E11CE2CB8E98F9B89BCC4050518B2E365B66E26AE3B8B2E291A66E2591D8141462CB873969B89396C62CB86AFE9B89208E00000131560018300023E43A6A1351800023E4700EFC51881010100030180C620FB90CAAD3B9C5082080E1DDC905E10168E396921000325A0D73B83279C83010180034801090001260001808001838005008001F0408001828005008001304000041020407E800320409780050080012040000320409900018780032040958005000001E0408183E7139D7B70987019B526B8A950052F5C011D3C4B992143E885C71F95DA6071658082346CC03A50D66801F65288C30AB39673D0494536C559047E457AD291C99C20A7FB1244363E993EE3EE98C78742609340541DA01545A0F7339C26A527903576D300 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-bsm.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-bsm.xml new file mode 100644 index 000000000..89bf3715d --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-bsm.xml @@ -0,0 +1,235 @@ + + + + EV + + bsmTx + success + + + unavailable + unavailable + unavailable + unavailable + unavailable + + RSU + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + 71406f1b-d33c-4e90-ace9-6ab9f8d116d0 + 1 + 0 + 0 + 0 + + 2024-12-10T17:30:48.095Z + 8 + 0 + + OBU + false + + + + 001480B8494C4C950CD8CDE6E9651116579F22A424DD78FFFFF00761E4FD7EB7D07F7FFF80005F11D1020214C1C0FFC7C016AFF4017A0FF65403B0FD204C20FFCCC04F8FE40C420FFE6404CEFE60E9A10133408FCFDE1438103AB4138F00E1EEC1048EC160103E237410445C171104E26BC103DC4154305C2C84103B1C1C8F0A82F42103F34262D1123198103DAC25FB12034CE10381C259F12038CA103574251B10E3B2210324C23AD0F23D8EFFFE0000209340D10000004264BF00 + + 172.18.0.1 + + + MessageFrame + + + 20 + + + + 37 + 31325433 + 25399 + 405659938 + -1050317754 + 14409 + + 186 + 241 + 65535 + + + + + 14 + 25060 + 127 + + 27 + 0 + 0 + 0 + + + 10000 + + + + + + + + + + + + + + + + + + 190 + 570 + + + + + 0 + + + + + + -113 + 181 + -6 + 190 + + + -310 + 472 + -23 + 610 + + + -103 + 636 + -14 + 1570 + + + -52 + 615 + -13 + 1870 + + + 614 + 1150 + -17 + 2589 + + + 1878 + 2503 + 7 + 3959 + + + 2333 + 2816 + 31 + 4539 + + + 2187 + 2952 + 39 + 4959 + + + 1976 + 2721 + 46 + 5699 + + + 1891 + 3655 + 84 + 6050 + + + 2022 + 4886 + 137 + 6349 + + + 1973 + 4861 + 144 + 6760 + + + 1795 + 4815 + 144 + 7270 + + + 1710 + 4749 + 135 + 7570 + + + 1609 + 4566 + 121 + 7880 + + + + + 32767 + 0 + + + + + + 2 + + + + 0 + + + + + + + 0 + + + 38 + + + 191 + + + + + + + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-map.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-map.xml new file mode 100644 index 000000000..0a9f920c1 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-map.xml @@ -0,0 +1,1707 @@ + + + + + mapTx + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + 2bc6b4d1-8534-482c-9004-18a4d2613622 + 1 + 0 + 0 + 0 + + 2024-12-10T17:32:22.024Z + 8 + 0 + + RSU + false + + + + 001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00 + + RSU + 172.18.0.1 + + + MessageFrame + + + 18 + + + 0 + + + + 0 + + + + 12110 + + 0 + + 395952649 + -1050914122 + 16770 + + 366 + + + 2 + 1 + + 10 + 0000000000 + + 00000000 + + + 100000000000 + + + + + + 2225 + 808 + + + + -10 + + + + + + 10517 + -161 + + + + -60 + + + + + + 2769 + 112 + + + + -10 + + + + + + 6142 + -180 + + + + -30 + + + + + + 6636 + -12 + + + + -20 + + + + + + 3804 + -7 + + + + + + + + + 19 + 100000000000 + + 4 + 1 + + + + + 3 + 1 + + 10 + 0000000000 + + 00000000 + + + 100000000000 + + + + + + 2222 + 515 + + + + -10 + + + + + + 2933 + -82 + + + + -10 + + + + + + 6259 + -85 + + + + -40 + + + + + + 3416 + -98 + + + + -20 + + + + + + 6867 + -39 + + + + -30 + + + + + + 2657 + -55 + + + + -10 + + + + + + 4259 + 67 + + + + -10 + + + + + + 3481 + 0 + + + + + + + + + 18 + 100000000000 + + 4 + 1 + + + + + 1 + 1 + + 10 + 0000000000 + + 00000000 + + + 001000000000 + + + + + + 2215 + 1218 + + + + + + + 10451 + -223 + + + + -70 + + + + + + 1852 + -108 + + + + -10 + + + + + + + + 28 + 001000000000 + + 1 + + + + + 4 + 1 + + 10 + 0000000000 + + 00000000 + + + 010000000000 + + + + + + 2213 + -124 + + + + -10 + + + + + + 7187 + 20 + + + + -40 + + + + + + 541 + 40 + + + + -10 + + + + + + 1298 + 229 + + + + + + + + + 12 + 010000000000 + + 7 + 1 + + + + + 6 + 2 + + 01 + 0000000000 + + 00000000 + + + + + + + + 2267 + -1019 + + + + -10 + + + + + + 365 + 7 + + + + + + + + 5 + 2 + + 01 + 0000000000 + + 00000000 + + + + + + + + 2267 + -662 + + + + -10 + + + + + + 338 + 0 + + + + + + + + 7 + 2 + + 01 + 0000000000 + + 00000000 + + + + + + + + 2294 + -1463 + + + + -10 + + + + + + 365 + 27 + + + + + + + + 12 + 4 + + 01 + 0000000000 + + 00000000 + + + + + + + + -952 + -1898 + + + + + + + 0 + -377 + + + + + + + + 13 + 4 + + 01 + 0000000000 + + 00000000 + + + + + + + + -1440 + -1898 + + + + + + + 7 + -390 + + + + + + + 0 + 0 + + + + + + + 0 + 7 + + + + + + + + 10 + 3 + + 10 + 0000000000 + + 00000000 + + + 100000000000 + + + + + + 705 + -1919 + + + + + + + -1 + -7515 + + + + -40 + + + + + + -41 + -5272 + + + + 10 + + + + + + -17 + -11337 + + + + + + + 17 + -5938 + + + + 10 + + + + + + 0 + 0 + + + + + + + -7 + -7 + + + + + + + + + 26 + 100000000000 + + 6 + 1 + + + + + 9 + 3 + + 10 + 0000000000 + + 00000000 + + + 100000000000 + + + + + + 1090 + -1930 + + + + -10 + + + + + + 9 + -4764 + + + + -10 + + + + + + -20 + -6402 + + + + -20 + + + + + + -34 + -7953 + + + + -10 + + + + + + 16 + -10940 + + + + 20 + + + + + + + + 27 + 100000000000 + + 6 + 1 + + + + + 11 + 3 + + 10 + 0000000000 + + 00000000 + + + 010000000000 + + + + + + 350 + -1925 + + + + + + + -32 + -6698 + + + + -30 + + + + + + 156 + -2616 + + + + + + + + + 18 + 010000000000 + + 1 + 1 + + + + + 8 + 3 + + 10 + 0000000000 + + 00000000 + + + 001000000000 + + + + + + 1557 + -1956 + + + + -10 + + + + + + -101 + -1956 + + + + + + + -5 + -7393 + + + + -40 + + + + + + -121 + -1636 + + + + + + + + + 7 + 001000000000 + + 1 + + + + + 15 + 5 + + 10 + 0000000000 + + 00000000 + + + 100000000000 + + + + + + -2405 + -1018 + + + + 10 + + + + + + -9339 + 26 + + + + 30 + + + + + + -11895 + -38 + + + + 50 + + + + + + -8814 + 13 + + + + + + + + + 6 + 100000000000 + + 8 + 1 + + + + + 16 + 5 + + 10 + 0000000000 + + 00000000 + + + 100000000000 + + + + + + -2337 + -656 + + + + 10 + + + + + + -12229 + 15 + + + + 50 + + + + + + -11362 + -37 + + + + 30 + + + + + + -6537 + 1 + + + + + + + + + 5 + 100000000000 + + 8 + 1 + + + + + 17 + 5 + + 10 + 0000000000 + + 00002024-12-10T17:32:22.099782646Z 0000 + + + 010000000000 + + + + + + -2338 + -284 + + + + 10 + + + + + + -8892 + -18 + + + + 30 + + + + + + -11959 + -2 + + + + 50 + + + + + + -1564 + -180 + + + + + + + + + 26 + 010000000000 + + 3 + 1 + + + + + 14 + 5 + + 10 + 0000000000 + + 00000000 + + + 001000000000 + + + + + + -2401 + -1380 + + + + 10 + + + + + + -19947 + 8 + + + + 80 + + + + + + -10108 + -7 + + + + + + + + + 13 + 001000000000 + + 1 + + + + + 18 + 6 + + 01 + 0000000000 + + 00000000 + + + + + + + + -2264 + 479 + + + + 20 + + + + + + -580 + -14 + + + + + + + + 19 + 6 + + 01 + 0000000000 + + 00000000 + + + + + + + + -2257 + 796 + + + + 20 + + + + + + -518 + 0 + + + + + + + + 20 + 6 + + 01 + 0000000000 + + 00000000 + + + + + + + + -2236 + 1229 + + + + 20 + + + + + + -484 + 0 + + + + + + + + 23 + 7 + + 10 + 0000000000 + + 00000000 + + + 100000000000 + + + + + + -914 + 1903 + + + + 20 + + + + + + 225 + 12288 + + + + 30 + + + + + + 40 + 9634 + + + + -20 + + + + + + 32 + 8035 + + + + -30 + + + + + + 0 + 0 + + + + + + + -7 + 28 + + + + + + + + + 12 + 100000000000 + + 2 + 1 + + + + + 22 + 7 + + 10 + 0000000000 + + 00000000 + + + 100000000000 + + + + + + -1221 + 1914 + + + + 20 + + + + + + 92 + 10475 + + + + 30 + + + + + + 89 + 11582 + + + + -20 + + + + + + 48 + 7912 + + + + -30 + + + + + + + + 13 + 100000000000 + + 2 + 1 + + + + + 21 + 7 + + 10 + 0000000000 + + 00000000 + + + 001000000000 + + + + + + -1649 + 1935 + + + + 20 + + + + + + 16 + 3182 + + + + 10 + + + + + + 21 + 5991 + + + + 20 + + + + + + 102 + 4810 + + + + + + + 85 + 11803 + + + + -30 + + + + + + 19 + 4161 + + + + -20 + + + + + + + + 20 + 001000000000 + + 1 + + + + + 24 + 7 + + 10 + 0000000000 + + 00000000 + + + 010000000000 + + + + + + -535 + 1926 + + + + 20 + + + + + + 28 + 4582 + + + + 10 + + + + + + 88 + 3793 + + + + 10 + + + + + + -143 + 1866 + + + + 10 + + + + + + + + 6 + 010000000000 + + 5 + 1 + + + + + 25 + 7 + + 10 + 0000000000 + + 00000000 + + + 010000000000 + + + + + + -213 + 1913 + + + + 20 + + + + + + 14 + 4594 + + + + 10 + + + + + + -91 + 2238 + + + + 10 + + + + + + + + 5 + 010000000000 + + 5 + 1 + + + + + 26 + 8 + + 01 + 0000000000 + + 00000000 + + + + + + + + 724 + 1902 + + + + 10 + + + + + + -7 + 352 + + + + 10 + + + + + + + 27 + 8 + + 01 + 0000000000 + + 00000000 + + + + + + + + 1105 + 1888 + + + + 10 + + + + + + -7 + 332 + + + + 10 + + + + + + + 28 + 8 + + 01 + 0000000000 + + 00000000 + + + + + + + + 1591 + 1874 + + + + 10 + + + + + + -14 + 346 + + + + + + + 0 + 7 + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-psm.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-psm.xml new file mode 100644 index 000000000..26a4985f9 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-psm.xml @@ -0,0 +1,65 @@ + + + + + psmTx + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + 9219cf4d-66e3-4b65-8981-b56b50688023 + 1 + 0 + 0 + 0 + + 2024-12-10T17:33:49.421Z + 8 + 0 + + UNKNOWN + false + + + 00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC79860100 + + RSU + 172.18.0.1 + + + MessageFrame + + + 32 + + + + + + 3564 + 26 + 24779D7E + + 402397377 + -742761437 + + + 20 + 20 + 8191 + + 0 + 8898 + + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-spat.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-spat.xml new file mode 100644 index 000000000..7b6884dd5 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-spat.xml @@ -0,0 +1,146 @@ + + + + + spatTx + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + a80d7125-d548-4114-b435-ce890b8906d3 + 1 + 0 + 0 + 0 + + 2024-12-10T17:34:40.359Z + 8 + 0 + + RSU + false + + + + 001338000817A780000089680500204642B342B34802021A15A955A940181190ACD0ACD20100868555C555C00104342AAE2AAE002821A15571557000 + + RSU + 172.18.0.1 + false + + + MessageFrame + + + 19 + + + + + + 12111 + + 0 + 0000000000000000 + 35176 + + + 2 + + + + + + + 22120 + 22121 + + + + + + 4 + + + + + + + 22181 + 22181 + + + + + + 6 + + + + + + + 22120 + 22121 + + + + + + 8 + + + + + + + 21852 + 21852 + + + + + + 1 + + + + + + + 21852 + 21852 + + + + + + 5 + + + + + + + 21852 + 21852 + + + + + + + + + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-srm.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-srm.xml new file mode 100644 index 000000000..a868f2a9d --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-srm.xml @@ -0,0 +1,87 @@ + + + + + srmTx + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + 48e23a19-c438-4e97-a54e-150cdf10afe1 + 1 + 0 + 0 + 0 + + 2024-12-10T17:35:36.923Z + 8 + 0 + + OBU + false + + + 001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C000 + 172.18.0.1 + RSU + + + MessageFrame + + + 29 + + + 0 + 1 + + + + + 12109 + + 4 + + + + + 13 + + + 4 + + + 10979 + + + + + 2366845094 + + + + + + + + + 395904915 + -1050913829 + 16854 + + 14072 + + + + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-ssm.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-ssm.xml new file mode 100644 index 000000000..1da1020b5 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-ssm.xml @@ -0,0 +1,78 @@ + + + + + ssmTx + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + b04f6d45-d1f2-4cfb-8a6c-f542bbd0aa51 + 1 + 0 + 0 + 0 + + 2024-12-10T17:36:31.804Z + 8 + 0 + + RSU + false + + + 001E120000000005E9C04071A26614C06000040BA000 + 172.18.0.1 + RSU + + + MessageFrame + + + 30 + + + 0 + + + 0 + + 12110 + + + + + + 2366845094 + + 3 + 0 + + + + + + + + 23 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-tim.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-tim.xml new file mode 100644 index 000000000..93b5b63d9 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/decoder-output-tim.xml @@ -0,0 +1,214 @@ + + + + + timMsg + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + d1475b66-9f6d-4a85-a4bd-bc54a825fb0f + 1 + 0 + 0 + 0 + + 2024-12-10T17:20:48.699Z + 8 + 0 + + RSU + false + + + + 03810040038081D4001F80D07016DA410000000000000BBC2B0F775D9B0309C271431FA166EE0A27FFF93F136B8205A0A107FB2EF979F4C5BFAEEC97E4AD70C2FB36CD9730BECDB355CC2FD2A7556B160B98B46AB98AE62C185FA55EFB468D5B4000000004E2863F42CDDC144FF7980040401262CDD7B809C509F5C62CDD35519C507B9062CDCEE129C505CF262CDCA5FF9C50432C62CDC5D3D9C502E3E62CDC13E79C501E9262CDBCA2D9C5013EE62CDB80359C500E6A62CDB36299C500BC862CDAEC1D9C50093C62CDAA2109C5006EA1080203091A859EEEBB36006001830001AAD27F4FF7580001AAD355E39B5880A30029D6585009EF808332D8D9F80C3855151B38C772F765007967EC1170BCB7937F5CB880A25A52863493BCB87570DBCB5ABC6BFB2FAEC606CFA34EB95A24790B2017366D3AABE7729E00 + + 172.18.0.1 + + + MessageFrame + + + 31 + + + 1 + 449089 + 0000000000000BBC2B + null + + + 0 + + + + + + + 411269876 + -1047269563 + + 1111111111111111 + + + + + + 2018 + 448260 + 1440 + 5 + 0 + + + westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456 + + 0 + 0 + + + 411269876 + -1047269563 + + 32700 + + + + + + + 0000000000010000 + + + 0 + + + + + + + -1047287423 + 411264686 + + + + + + + -1047305390 + 411260104 + + + + + + + -1047323629 + 411256185 + + + + + + + -1047342080 + 411252886 + + + + + + + -1047360706 + 411250207 + + + + + + + -1047379480 + 411248201 + + + + + + + -1047398354 + 411246839 + + + + + + + -1047417290 + 411246133 + + + + + + + -1047436246 + 411245796 + + + + + + + -1047455202 + 411245470 + + + + + + + -1047474159 + 411245173 + + + + + + + + + + + 0 + 0 + + + + + 777 + + + + + 13579 + + + + + null + + + + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-bsm.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-bsm.json new file mode 100644 index 000000000..12eee6d75 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-bsm.json @@ -0,0 +1,83 @@ +{ + "metadata": { + "bsmSource": "EV", + "logFileName": "", + "recordType": "bsmLogDuringEvent", + "securityResultCode": "success", + "receivedMessageDetails": { + "locationData": { + "latitude": "unavailable", + "longitude": "unavailable", + "elevation": "unavailable", + "speed": "unavailable", + "heading": "unavailable" + }, + "rxSource": "RSU" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeBsmPayload", + "serialId": { + "streamId": "71406f1b-d33c-4e90-ace9-6ab9f8d116d0", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-12-10T17:30:48.095Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedAt": "", + "recordGeneratedBy": "OBU", + "sanitized": false, + "odePacketID": "", + "odeTimStartDateTime": "", + "asn1": "001480B8494C4C950CD8CDE6E9651116579F22A424DD78FFFFF00761E4FD7EB7D07F7FFF80005F11D1020214C1C0FFC7C016AFF4017A0FF65403B0FD204C20FFCCC04F8FE40C420FFE6404CEFE60E9A10133408FCFDE1438103AB4138F00E1EEC1048EC160103E237410445C171104E26BC103DC4154305C2C84103B1C1C8F0A82F42103F34262D1123198103DAC25FB12034CE10381C259F12038CA103574251B10E3B2210324C23AD0F23D8EFFFE0000209340D10000004264BF00", + "originIp": "172.18.0.1" + }, + "payload": { + "data": { + "coreData": { + "msgCnt": 37, + "id": "31325433", + "secMark": 25399, + "position": { + "latitude": 40.5659938, + "longitude": -105.0317754, + "elevation": 1440.9 + }, + "accelSet": { + "accelLat": 0.00, + "accelLong": 0.27, + "accelVert": 0.00, + "accelYaw": 0.00 + }, + "accuracy": { + "semiMajor": 9.30, + "semiMinor": 12.05 + }, + "transmission": "UNAVAILABLE", + "speed": 0.28, + "heading": 313.2500, + "brakes": { + "wheelBrakes": { + "leftFront": false, + "rightFront": false, + "unavailable": true, + "leftRear": false, + "rightRear": false + }, + "traction": "unavailable", + "abs": "unavailable", + "scs": "unavailable", + "brakeBoost": "unavailable", + "auxBrakes": "unavailable" + }, + "size": { + "width": 190, + "length": 570 + } + }, + "partII": [] + }, + "dataType": "us.dot.its.jpo.ode.plugin.j2735.J2735Bsm" + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-map.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-map.json new file mode 100644 index 000000000..13c9658c8 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-map.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"mapTx","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdeMapPayload","serialId":{"streamId":"2bc6b4d1-8534-482c-9004-18a4d2613622","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-10T17:32:22.024Z","schemaVersion":8,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"RSU","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E00","mapSource":"RSU","originIp":"172.18.0.1"},"payload":{"data":{"msgIssueRevision":0,"layerType":"intersectionData","layerID":0,"intersections":{"intersectionGeometry":[{"id":{"id":12110},"revision":0,"refPoint":{"latitude":39.5952649,"longitude":-105.0914122,"elevation":1677.0},"laneWidth":366,"laneSet":{"GenericLane":[{"laneID":2,"ingressApproach":1,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":2225,"y":808}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":10517,"y":-161}},"attributes":{"dElevation":-60}},{"delta":{"nodeXY6":{"x":2769,"y":112}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":6142,"y":-180}},"attributes":{"dElevation":-30}},{"delta":{"nodeXY6":{"x":6636,"y":-12}},"attributes":{"dElevation":-20}},{"delta":{"nodeXY6":{"x":3804,"y":-7}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":19,"maneuver":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":4,"connectionID":1}]}},{"laneID":3,"ingressApproach":1,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":2222,"y":515}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":2933,"y":-82}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":6259,"y":-85}},"attributes":{"dElevation":-40}},{"delta":{"nodeXY6":{"x":3416,"y":-98}},"attributes":{"dElevation":-20}},{"delta":{"nodeXY6":{"x":6867,"y":-39}},"attributes":{"dElevation":-30}},{"delta":{"nodeXY6":{"x":2657,"y":-55}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":4259,"y":67}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":3481,"y":0}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":18,"maneuver":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":4,"connectionID":1}]}},{"laneID":1,"ingressApproach":1,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":true,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":2215,"y":1218}}},{"delta":{"nodeXY6":{"x":10451,"y":-223}},"attributes":{"dElevation":-70}},{"delta":{"nodeXY6":{"x":1852,"y":-108}},"attributes":{"dElevation":-10}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":28,"maneuver":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":true,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"connectionID":1}]}},{"laneID":4,"ingressApproach":1,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":2213,"y":-124}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":7187,"y":20}},"attributes":{"dElevation":-40}},{"delta":{"nodeXY6":{"x":541,"y":40}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":1298,"y":229}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":12,"maneuver":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":7,"connectionID":1}]}},{"laneID":6,"egressApproach":2,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":2267,"y":-1019}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":365,"y":7}}}]}},{"laneID":5,"egressApproach":2,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":2267,"y":-662}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":338,"y":0}}}]}},{"laneID":7,"egressApproach":2,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":2294,"y":-1463}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":365,"y":27}}}]}},{"laneID":12,"egressApproach":4,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-952,"y":-1898}}},{"delta":{"nodeXY6":{"x":0,"y":-377}}}]}},{"laneID":13,"egressApproach":4,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-1440,"y":-1898}}},{"delta":{"nodeXY6":{"x":7,"y":-390}}},{"delta":{"nodeXY6":{"x":0,"y":0}}},{"delta":{"nodeXY6":{"x":0,"y":7}}}]}},{"laneID":10,"ingressApproach":3,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":705,"y":-1919}}},{"delta":{"nodeXY6":{"x":-1,"y":-7515}},"attributes":{"dElevation":-40}},{"delta":{"nodeXY6":{"x":-41,"y":-5272}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-17,"y":-11337}}},{"delta":{"nodeXY6":{"x":17,"y":-5938}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":0,"y":0}}},{"delta":{"nodeXY6":{"x":-7,"y":-7}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":26,"maneuver":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":6,"connectionID":1}]}},{"laneID":9,"ingressApproach":3,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":1090,"y":-1930}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":9,"y":-4764}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":-20,"y":-6402}},"attributes":{"dElevation":-20}},{"delta":{"nodeXY6":{"x":-34,"y":-7953}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":16,"y":-10940}},"attributes":{"dElevation":20}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":27,"maneuver":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":6,"connectionID":1}]}},{"laneID":11,"ingressApproach":3,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":350,"y":-1925}}},{"delta":{"nodeXY6":{"x":-32,"y":-6698}},"attributes":{"dElevation":-30}},{"delta":{"nodeXY6":{"x":156,"y":-2616}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":18,"maneuver":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":1,"connectionID":1}]}},{"laneID":8,"ingressApproach":3,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":true,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":1557,"y":-1956}},"attributes":{"dElevation":-10}},{"delta":{"nodeXY6":{"x":-101,"y":-1956}}},{"delta":{"nodeXY6":{"x":-5,"y":-7393}},"attributes":{"dElevation":-40}},{"delta":{"nodeXY6":{"x":-121,"y":-1636}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":7,"maneuver":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":true,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"connectionID":1}]}},{"laneID":15,"ingressApproach":5,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-2405,"y":-1018}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-9339,"y":26}},"attributes":{"dElevation":30}},{"delta":{"nodeXY6":{"x":-11895,"y":-38}},"attributes":{"dElevation":50}},{"delta":{"nodeXY6":{"x":-8814,"y":13}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":6,"maneuver":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":8,"connectionID":1}]}},{"laneID":16,"ingressApproach":5,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-2337,"y":-656}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-12229,"y":15}},"attributes":{"dElevation":50}},{"delta":{"nodeXY6":{"x":-11362,"y":-37}},"attributes":{"dElevation":30}},{"delta":{"nodeXY6":{"x":-6537,"y":1}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":5,"maneuver":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":8,"connectionID":1}]}},{"laneID":17,"ingressApproach":5,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-2338,"y":-284}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-8892,"y":-18}},"attributes":{"dElevation":30}},{"delta":{"nodeXY6":{"x":-11959,"y":-2}},"attributes":{"dElevation":50}},{"delta":{"nodeXY6":{"x":-1564,"y":-180}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":26,"maneuver":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":3,"connectionID":1}]}},{"laneID":14,"ingressApproach":5,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":true,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-2401,"y":-1380}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-19947,"y":8}},"attributes":{"dElevation":80}},{"delta":{"nodeXY6":{"x":-10108,"y":-7}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":13,"maneuver":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":true,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"connectionID":1}]}},{"laneID":18,"egressApproach":6,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-2264,"y":479}},"attributes":{"dElevation":20}},{"delta":{"nodeXY6":{"x":-580,"y":-14}}}]}},{"laneID":19,"egressApproach":6,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-2257,"y":796}},"attributes":{"dElevation":20}},{"delta":{"nodeXY6":{"x":-518,"y":0}}}]}},{"laneID":20,"egressApproach":6,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-2236,"y":1229}},"attributes":{"dElevation":20}},{"delta":{"nodeXY6":{"x":-484,"y":0}}}]}},{"laneID":23,"ingressApproach":7,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-914,"y":1903}},"attributes":{"dElevation":20}},{"delta":{"nodeXY6":{"x":225,"y":12288}},"attributes":{"dElevation":30}},{"delta":{"nodeXY6":{"x":40,"y":9634}},"attributes":{"dElevation":-20}},{"delta":{"nodeXY6":{"x":32,"y":8035}},"attributes":{"dElevation":-30}},{"delta":{"nodeXY6":{"x":0,"y":0}}},{"delta":{"nodeXY6":{"x":-7,"y":28}}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":12,"maneuver":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":2,"connectionID":1}]}},{"laneID":22,"ingressApproach":7,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-1221,"y":1914}},"attributes":{"dElevation":20}},{"delta":{"nodeXY6":{"x":92,"y":10475}},"attributes":{"dElevation":30}},{"delta":{"nodeXY6":{"x":89,"y":11582}},"attributes":{"dElevation":-20}},{"delta":{"nodeXY6":{"x":48,"y":7912}},"attributes":{"dElevation":-30}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":13,"maneuver":{"maneuverStraightAllowed":true,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":2,"connectionID":1}]}},{"laneID":21,"ingressApproach":7,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":true,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-1649,"y":1935}},"attributes":{"dElevation":20}},{"delta":{"nodeXY6":{"x":16,"y":3182}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":21,"y":5991}},"attributes":{"dElevation":20}},{"delta":{"nodeXY6":{"x":102,"y":4810}}},{"delta":{"nodeXY6":{"x":85,"y":11803}},"attributes":{"dElevation":-30}},{"delta":{"nodeXY6":{"x":19,"y":4161}},"attributes":{"dElevation":-20}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":20,"maneuver":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":false,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":true,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"connectionID":1}]}},{"laneID":24,"ingressApproach":7,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-535,"y":1926}},"attributes":{"dElevation":20}},{"delta":{"nodeXY6":{"x":28,"y":4582}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":88,"y":3793}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-143,"y":1866}},"attributes":{"dElevation":10}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":6,"maneuver":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":5,"connectionID":1}]}},{"laneID":25,"ingressApproach":7,"laneAttributes":{"directionalUse":{"ingressPath":true,"egressPath":false},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"maneuvers":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":-213,"y":1913}},"attributes":{"dElevation":20}},{"delta":{"nodeXY6":{"x":14,"y":4594}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-91,"y":2238}},"attributes":{"dElevation":10}}]},"connectsTo":{"connectsTo":[{"connectingLane":{"lane":5,"maneuver":{"maneuverStraightAllowed":false,"maneuverNoStoppingAllowed":false,"goWithHalt":false,"maneuverLeftAllowed":true,"maneuverUTurnAllowed":false,"maneuverLeftTurnOnRedAllowed":false,"reserved1":false,"maneuverRightAllowed":false,"maneuverLaneChangeAllowed":false,"yieldAllwaysRequired":false,"maneuverRightTurnOnRedAllowed":false,"caution":false}},"signalGroup":5,"connectionID":1}]}},{"laneID":26,"egressApproach":8,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":724,"y":1902}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-7,"y":352}},"attributes":{"dElevation":10}}]}},{"laneID":27,"egressApproach":8,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":1105,"y":1888}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-7,"y":332}},"attributes":{"dElevation":10}}]}},{"laneID":28,"egressApproach":8,"laneAttributes":{"directionalUse":{"ingressPath":false,"egressPath":true},"shareWith":{"busVehicleTraffic":false,"trackedVehicleTraffic":false,"individualMotorizedVehicleTraffic":false,"taxiVehicleTraffic":false,"overlappingLaneDescriptionProvided":false,"cyclistVehicleTraffic":false,"otherNonMotorizedTrafficTypes":false,"multipleLanesTreatedAsOneLane":false,"pedestrianTraffic":false,"pedestriansTraffic":false},"laneType":{"vehicle":{"isVehicleRevocableLane":false,"isVehicleFlyOverLane":false,"permissionOnRequest":false,"hasIRbeaconCoverage":false,"restrictedToBusUse":false,"restrictedToTaxiUse":false,"restrictedFromPublicUse":false,"hovLaneUseOnly":false}}},"nodeList":{"nodes":[{"delta":{"nodeXY6":{"x":1591,"y":1874}},"attributes":{"dElevation":10}},{"delta":{"nodeXY6":{"x":-14,"y":346}}},{"delta":{"nodeXY6":{"x":0,"y":7}}}]}}]}}]}},"dataType":"us.dot.its.jpo.ode.plugin.j2735.J2735MAP"}} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-psm.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-psm.json new file mode 100644 index 000000000..4ce5ed073 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-psm.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"psmTx","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdePsmPayload","serialId":{"streamId":"9219cf4d-66e3-4b65-8981-b56b50688023","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-10T17:33:49.421Z","schemaVersion":8,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"UNKNOWN","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC79860100","psmSource":"RSU","originIp":"172.18.0.1"},"payload":{"data":{"basicType":"aPEDESTRIAN","secMark":3564,"msgCnt":26,"id":"24779D7E","position":{"latitude":40.2397377,"longitude":-74.2761437},"accuracy":{"semiMajor":1.00,"semiMinor":1.00,"orientation":44.9951935489},"speed":0,"heading":8898},"dataType":"us.dot.its.jpo.ode.plugin.j2735.J2735PSM"}} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-spat.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-spat.json new file mode 100644 index 000000000..45f48c796 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-spat.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"spatTx","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdeSpatPayload","serialId":{"streamId":"a80d7125-d548-4114-b435-ce890b8906d3","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-10T17:34:40.359Z","schemaVersion":8,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"RSU","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"001338000817A780000089680500204642B342B34802021A15A955A940181190ACD0ACD20100868555C555C00104342AAE2AAE002821A15571557000","spatSource":"RSU","originIp":"172.18.0.1","isCertPresent":false},"payload":{"data":{"intersectionStateList":{"intersectionStatelist":[{"id":{"id":12111},"revision":0,"status":{"failureFlash":false,"noValidSPATisAvailableAtThisTime":false,"fixedTimeOperation":false,"standbyOperation":false,"trafficDependentOperation":false,"manualControlIsEnabled":false,"off":false,"stopTimeIsActivated":false,"recentChangeInMAPassignedLanesIDsUsed":false,"recentMAPmessageUpdate":false,"failureMode":false,"noValidMAPisAvailableAtThisTime":false,"signalPriorityIsActive":false,"preemptIsActive":false},"timeStamp":35176,"states":{"movementList":[{"signalGroup":2,"state_time_speed":{"movementEventList":[{"eventState":"PROTECTED_MOVEMENT_ALLOWED","timing":{"minEndTime":22120,"maxEndTime":22121}}]}},{"signalGroup":4,"state_time_speed":{"movementEventList":[{"eventState":"STOP_AND_REMAIN","timing":{"minEndTime":22181,"maxEndTime":22181}}]}},{"signalGroup":6,"state_time_speed":{"movementEventList":[{"eventState":"PROTECTED_MOVEMENT_ALLOWED","timing":{"minEndTime":22120,"maxEndTime":22121}}]}},{"signalGroup":8,"state_time_speed":{"movementEventList":[{"eventState":"STOP_AND_REMAIN","timing":{"minEndTime":21852,"maxEndTime":21852}}]}},{"signalGroup":1,"state_time_speed":{"movementEventList":[{"eventState":"STOP_AND_REMAIN","timing":{"minEndTime":21852,"maxEndTime":21852}}]}},{"signalGroup":5,"state_time_speed":{"movementEventList":[{"eventState":"STOP_AND_REMAIN","timing":{"minEndTime":21852,"maxEndTime":21852}}]}}]}}]}},"dataType":"us.dot.its.jpo.ode.plugin.j2735.J2735SPAT"}} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-srm.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-srm.json new file mode 100644 index 000000000..7717c67ab --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-srm.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"srmTx","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdeSrmPayload","serialId":{"streamId":"48e23a19-c438-4e97-a54e-150cdf10afe1","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-10T17:35:36.923Z","schemaVersion":8,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"OBU","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C000","originIp":"172.18.0.1","srmSource":"RSU"},"payload":{"data":{"second":0,"sequenceNumber":1,"requests":{"signalRequestPackage":[{"request":{"id":{"id":12109},"requestID":4,"requestType":"priorityRequest","inBoundLane":{"lane":13},"outBoundLane":{"lane":4}},"duration":10979}]},"requestor":{"id":{"stationID":2366845094},"type":{"role":"publicTransport"},"position":{"position":{"latitude":39.5904915,"longitude":-105.0913829,"elevation":1685.4},"heading":175.9000}}},"dataType":"us.dot.its.jpo.ode.plugin.j2735.J2735SRM"}} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-ssm.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-ssm.json new file mode 100644 index 000000000..47a5d9d6e --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-ssm.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"ssmTx","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdeSsmPayload","serialId":{"streamId":"b04f6d45-d1f2-4cfb-8a6c-f542bbd0aa51","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-10T17:36:31.804Z","schemaVersion":8,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"RSU","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"001E120000000005E9C04071A26614C06000040BA000","originIp":"172.18.0.1","ssmSource":"RSU"},"payload":{"data":{"second":0,"status":{"signalStatus":[{"sequenceNumber":0,"id":{"id":12110},"sigStatus":{"signalStatusPackage":[{"requester":{"id":{"stationID":2366845094},"request":3,"sequenceNumber":0,"typeData":{"role":"publicTransport"}},"inboundOn":{"lane":23},"status":"granted"}]}}]}},"dataType":"us.dot.its.jpo.ode.plugin.j2735.J2735SSM"}} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-tim-specific.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-tim-specific.xml new file mode 100644 index 000000000..f5adf6909 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-tim-specific.xml @@ -0,0 +1,214 @@ + + + + + dnMsg + success + + + + unsecuredData + MessageFrame + UPER + + + us.dot.its.jpo.ode.model.OdeAsn1Payload + + d1475b66-9f6d-4a85-a4bd-bc54a825fb0f + 1 + 0 + 0 + 0 + + 2024-12-10T17:20:48.699Z + 8 + 0 + + RSU + false + + + + 03810040038081D4001F80D07016DA410000000000000BBC2B0F775D9B0309C271431FA166EE0A27FFF93F136B8205A0A107FB2EF979F4C5BFAEEC97E4AD70C2FB36CD9730BECDB355CC2FD2A7556B160B98B46AB98AE62C185FA55EFB468D5B4000000004E2863F42CDDC144FF7980040401262CDD7B809C509F5C62CDD35519C507B9062CDCEE129C505CF262CDCA5FF9C50432C62CDC5D3D9C502E3E62CDC13E79C501E9262CDBCA2D9C5013EE62CDB80359C500E6A62CDB36299C500BC862CDAEC1D9C50093C62CDAA2109C5006EA1080203091A859EEEBB36006001830001AAD27F4FF7580001AAD355E39B5880A30029D6585009EF808332D8D9F80C3855151B38C772F765007967EC1170BCB7937F5CB880A25A52863493BCB87570DBCB5ABC6BFB2FAEC606CFA34EB95A24790B2017366D3AABE7729E00 + + 172.18.0.1 + + + MessageFrame + + + 31 + + + 1 + 449089 + 0000000000000BBC2B + null + + + 1 + + + + + + + 411269876 + -1047269563 + + 1111111111111111 + + + + + + 2018 + 448260 + 1440 + 5 + 1 + + + westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456 + + 0 + 0 + + + 411269876 + -1047269563 + + 32700 + + + + + + + 0000000000010000 + + + 0 + + + + + + + -1047287423 + 411264686 + + + + + + + -1047305390 + 411260104 + + + + + + + -1047323629 + 411256185 + + + + + + + -1047342080 + 411252886 + + + + + + + -1047360706 + 411250207 + + + + + + + -1047379480 + 411248201 + + + + + + + -1047398354 + 411246839 + + + + + + + -1047417290 + 411246133 + + + + + + + -1047436246 + 411245796 + + + + + + + -1047455202 + 411245470 + + + + + + + -1047474159 + 411245173 + + + + + + + + + + + 1 + 1 + + + + + 777 + + + + + 13579 + + + + + null + + + + + + + + \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-tim.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-tim.json new file mode 100644 index 000000000..0b8d8bc40 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/services/asn1/expected-tim.json @@ -0,0 +1 @@ +{"metadata":{"logFileName":"","recordType":"dnMsg","securityResultCode":"success","receivedMessageDetails":{"rxSource":"NA"},"payloadType":"us.dot.its.jpo.ode.model.OdeTimPayload","serialId":{"streamId":"d1475b66-9f6d-4a85-a4bd-bc54a825fb0f","bundleSize":1,"bundleId":0,"recordId":0,"serialNumber":0},"odeReceivedAt":"2024-12-10T17:20:48.699Z","schemaVersion":8,"maxDurationTime":0,"recordGeneratedAt":"","recordGeneratedBy":"RSU","sanitized":false,"odePacketID":"","odeTimStartDateTime":"","asn1":"03810040038081D4001F80D07016DA410000000000000BBC2B0F775D9B0309C271431FA166EE0A27FFF93F136B8205A0A107FB2EF979F4C5BFAEEC97E4AD70C2FB36CD9730BECDB355CC2FD2A7556B160B98B46AB98AE62C185FA55EFB468D5B4000000004E2863F42CDDC144FF7980040401262CDD7B809C509F5C62CDD35519C507B9062CDCEE129C505CF262CDCA5FF9C50432C62CDC5D3D9C502E3E62CDC13E79C501E9262CDBCA2D9C5013EE62CDB80359C500E6A62CDB36299C500BC862CDAEC1D9C50093C62CDAA2109C5006EA1080203091A859EEEBB36006001830001AAD27F4FF7580001AAD355E39B5880A30029D6585009EF808332D8D9F80C3855151B38C772F765007967EC1170BCB7937F5CB880A25A52863493BCB87570DBCB5ABC6BFB2FAEC606CFA34EB95A24790B2017366D3AABE7729E00","originIp":"172.18.0.1"},"payload":{"data":{"msgCnt":1,"timeStamp":449089,"packetID":"0000000000000BBC2B","urlB":"null","dataFrames":[{"doNotUse1":0,"frameType":"advisory","msgId":{"roadSignID":{"position":{"lat":411269876,"long":-1047269563},"viewAngle":{"from000-0to022-5degrees":true,"from022-5to045-0degrees":true,"from045-0to067-5degrees":true,"from067-5to090-0degrees":true,"from090-0to112-5degrees":true,"from112-5to135-0degrees":true,"from135-0to157-5degrees":true,"from157-5to180-0degrees":true,"from180-0to202-5degrees":true,"from202-5to225-0degrees":true,"from225-0to247-5degrees":true,"from247-5to270-0degrees":true,"from270-0to292-5degrees":true,"from292-5to315-0degrees":true,"from315-0to337-5degrees":true,"from337-5to360-0degrees":true},"mutcdCode":"warning"}},"startYear":2018,"startTime":448260,"durationTime":1440,"priority":5,"doNotUse2":0,"regions":[{"name":"westbound_I-80_366.0_365.0_RSU-10.145.1.100_RW_4456","id":{"region":0,"id":0},"anchor":{"lat":411269876,"long":-1047269563},"laneWidth":32700,"directionality":"both","closedPath":false,"direction":{"from000-0to022-5degrees":false,"from022-5to045-0degrees":false,"from045-0to067-5degrees":false,"from067-5to090-0degrees":false,"from090-0to112-5degrees":false,"from112-5to135-0degrees":false,"from135-0to157-5degrees":false,"from157-5to180-0degrees":false,"from180-0to202-5degrees":false,"from202-5to225-0degrees":false,"from225-0to247-5degrees":false,"from247-5to270-0degrees":true,"from270-0to292-5degrees":false,"from292-5to315-0degrees":false,"from315-0to337-5degrees":false,"from337-5to360-0degrees":false},"description":{"path":{"scale":0,"offset":{"xy":{"nodes":[{"delta":{"node-LatLon":{"lon":-1047287423,"lat":411264686}}},{"delta":{"node-LatLon":{"lon":-1047305390,"lat":411260104}}},{"delta":{"node-LatLon":{"lon":-1047323629,"lat":411256185}}},{"delta":{"node-LatLon":{"lon":-1047342080,"lat":411252886}}},{"delta":{"node-LatLon":{"lon":-1047360706,"lat":411250207}}},{"delta":{"node-LatLon":{"lon":-1047379480,"lat":411248201}}},{"delta":{"node-LatLon":{"lon":-1047398354,"lat":411246839}}},{"delta":{"node-LatLon":{"lon":-1047417290,"lat":411246133}}},{"delta":{"node-LatLon":{"lon":-1047436246,"lat":411245796}}},{"delta":{"node-LatLon":{"lon":-1047455202,"lat":411245470}}},{"delta":{"node-LatLon":{"lon":-1047474159,"lat":411245173}}}]}}}}}],"doNotUse3":0,"doNotUse4":0,"content":{"advisory":[{"item":{"itis":777}},{"item":{"itis":13579}}]},"url":"null"}]},"dataType":"us.dot.its.jpo.ode.plugin.j2735.travelerinformation.TravelerInformation"}} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/aemInputContainingCircleGeometry.xml b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/aemInputContainingCircleGeometry.xml new file mode 100644 index 000000000..f0ed3ca7f --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/aemInputContainingCircleGeometry.xml @@ -0,0 +1,145 @@ + + + us.dot.its.jpo.ode.model.OdeTimPayload + + testStreamId + 1 + 0 + 0 + 0 + + 2024-11-05T16:51:14.473Z + 8 + 8640 + 2024-09-25T10:00:00.000Z + TMC + false + 8D442FF4020C6B1A01 + 2024-09-25T10:00:00.000Z + + + 3 + PUT + + + + 172.0.0.1 + username + password + 3 + 5000 + 21 + NTCIP1218 + + + + 83 + 31 + 1 + 183 + 1000 + 2024-09-25T10:00:00.0Z + 2024-09-30T10:00:00.0Z + 1 + 4 + + + + + MessageFrame + MessageFrame + UPER + + + + + + + 31 + + + 1 + 386520 + 8D442FF4020C6B1A01 + null + + + 0 + + + + + + + 411535930 + -1046557850 + + 1111111111111111 + + + + + + 2024 + 386520 + 8640 + 5 + 0 + + + myregionname + + 0 + 0 + + + 411535930 + -1046557850 + + + + + + + + 1111000011110000 + + + 1111000011110000 + 0 + +
+ 411535930 + -1046557850 + 18240 +
+ 50 + + + +
+
+
+
+
+ 0 + 0 + + + + + 4868 + + + + + null +
+
+
+
+
+
+ MessageFrame +
+
\ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/timRequestContainingCircleGeometry.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/timRequestContainingCircleGeometry.json new file mode 100644 index 000000000..2f35fe64d --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/traveler/timRequestContainingCircleGeometry.json @@ -0,0 +1,83 @@ +{ + "request": { + "rsus": [ + { + "rsuIndex": "21", + "rsuTarget": "172.0.0.1", + "rsuUsername": "username", + "rsuPassword": "password", + "rsuRetries": "3", + "rsuTimeout": "5000" + } + ], + "snmp": { + "rsuid": "83", + "msgid": "31", + "mode": "1", + "channel": "183", + "interval": "1000", + "deliverystart": "2024-09-25T10:00:00.0Z", + "deliverystop": "2024-09-30T10:00:00.0Z", + "enable": "1", + "status": "4" + } + }, + "tim": { + "msgCnt": "1", + "timeStamp": "2024-09-25T10:00:00.0Z", + "packetID": "8D442FF4020C6B1A01", + "urlB": "null", + "dataframes": [ + { + "startDateTime": "2024-09-25T10:00:00.000Z", + "durationTime": 8640, + "doNotUse1": 0, + "frameType": "advisory", + "msgId": { + "roadSignID": { + "mutcdCode": "warning", + "viewAngle": "1111111111111111", + "position": { + "latitude": "41.153593", + "longitude": "-104.655785" + } + } + }, + "priority": "5", + "sspLocationRights": "0", + "regions": [ + { + "name": "myregionname", + "anchorPosition": { + "latitude": "41.153593", + "longitude": "-104.655785" + }, + "directionality": "3", + "closedPath": "false", + "description": "geometry", + "geometry": { + "direction": "1111000011110000", + "circle": { + "center": { + "latitude": "41.153593", + "longitude": "-104.655785", + "elevation": "1824" + }, + "radius": "50", + "units": "3" + } + }, + "direction": "1111000011110000" + } + ], + "doNotUse4": 0, + "doNotUse3": 0, + "content": "advisory", + "items": [ + "4868" + ], + "url": "null" + } + ] + } +} diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM.txt b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM.txt new file mode 100644 index 000000000..dcac543c5 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM.txt @@ -0,0 +1 @@ +0022e12d18466c65c1493800000e00e4616183e85a8f0100c000038081bc001480b8494c4c950cd8cde6e9651116579f22a424dd78fffff00761e4fd7eb7d07f7fff80005f11d1020214c1c0ffc7c016aff4017a0ff65403b0fd204c20ffccc04f8fe40c420ffe6404cefe60e9a10133408fcfde1438103ab4138f00e1eec1048ec160103e237410445c171104e26bc103dc4154305c2c84103b1c1c8f0a82f42103f34262d1123198103dac25fb12034ce10381c259f12038ca103574251b10e3b2210324c23ad0f23d8efffe0000209340d10000004264bf00 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM_expected.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM_expected.json new file mode 100644 index 000000000..d6e17f831 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/bsm/BsmReceiverTest_ValidBSM_expected.json @@ -0,0 +1,38 @@ +{ + "metadata": { + "bsmSource": "EV", + "recordType": "bsmTx", + "securityResultCode": "success", + "receivedMessageDetails": { + "locationData": { + "latitude": "unavailable", + "longitude": "unavailable", + "elevation": "unavailable", + "speed": "unavailable", + "heading": "unavailable" + }, + "rxSource": "RSU" + }, + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "de02c4a6-9ae3-4417-8bbc-636119ac0767", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-26T23:53:21.120Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "OBU", + "sanitized": false, + "asn1": "001480B8494C4C950CD8CDE6E9651116579F22A424DD78FFFFF00761E4FD7EB7D07F7FFF80005F11D1020214C1C0FFC7C016AFF4017A0FF65403B0FD204C20FFCCC04F8FE40C420FFE6404CEFE60E9A10133408FCFDE1438103AB4138F00E1EEC1048EC160103E237410445C171104E26BC103DC4154305C2C84103B1C1C8F0A82F42103F34262D1123198103DAC25FB12034CE10381C259F12038CA103574251B10E3B2210324C23AD0F23D8EFFFE0000209340D10000004264BF00", + "originIp": "127.0.0.1" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "001480B8494C4C950CD8CDE6E9651116579F22A424DD78FFFFF00761E4FD7EB7D07F7FFF80005F11D1020214C1C0FFC7C016AFF4017A0FF65403B0FD204C20FFCCC04F8FE40C420FFE6404CEFE60E9A10133408FCFDE1438103AB4138F00E1EEC1048EC160103E237410445C171104E26BC103DC4154305C2C84103B1C1C8F0A82F42103F34262D1123198103DAC25FB12034CE10381C259F12038CA103574251B10E3B2210324C23AD0F23D8EFFFE0000209340D10000004264BF00" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/map/MapReceiverTest_ValidMAP.txt b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/map/MapReceiverTest_ValidMAP.txt new file mode 100644 index 000000000..30fe576df --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/map/MapReceiverTest_ValidMAP.txt @@ -0,0 +1 @@ +001283c138003000205e9c014d3eab092ca624b5518202dc3658042800000400023622c60ca009f66d48abfaf81388d8ad18070027d9b2ffcfe9804f13667b1ffd009ec2c76e3ffc82c4e0001004b00c5000000800066c4574101813ecd8b757fae027d9b30e6ff5604ec363561fe7809ec6cd69bfec813c4d8a617fc9027d9b2147008604fb163666000016250000802580228000001000096229e1309b51a6fe4204dd361cf1fe5009f6018e1000096020a00000080004d88a57f84027d9b3827002804ec36087600a009f62c289407282c310001c0440188800000006c46dbe02813ec5816d800710052200000001b11b6fad404fb16054a0000401c8800000006c47b3d24813ec5816d801b100c4200000000af890f12c580007e87100d4200000008af4c0f12c580077e7a2c0004000160002001cb028d000000800052c160bc40b5fffd8a9409d86bfebb5b40141457fef53b76c008b467014145800080002bffcbffc82c6a0001804b024d000000800036c2213c3b013ecd80096d64027d9affd8cdfc04f635ff7983bc09f66c0082aa2014280b1b80006012c0b3400000100004b02bcf0f6d7fe065d602788b0138eb900b1240001012c083400000080009b0c2af0b804fb15fe6de171afff6c63e04ec15fe1de670060e40002581ea8000004000135da6df0180a0a6adc2c00d0143cd51897fda028c8abb25001a0b0680008012c105400000200009aedbefae005053540ee003c0a326a9cf3fed8143c5667780010582c0004009608aa00000080004d76de7ee402829aba88ffdc050f354525fff80a322bcf23fa602c690000c04b0395000000200016bb4fbd4e01414d3215800802940ab108fff2030d2000110126200000001aee5103be050a15f6f1ffc8404d8800000006bb97c18e0142857dfa800010146200000001aee89099a050a15f8720000b05dd000000800046be3743b781428d80e1b00002879b00514b4404f63600827d8c09e22c000400015ffe6007016190000402582ce8000004000135ecee1de80a146c02e54758143cd8059ad3e027b1b00613dd004f102c360000804b055d000000200046bcc7c3c781428d80108c6e02829b002b2ece050a16019a4b29b00ab5c3604f136004e410409ec018a10000960c3a00000080004d7de9878602851b003923cc05053601623b440a0a6bfb8c3a5014140b0640005012c197400000100005afe570ef2050a36003a47c80a0a6bfd2c45f014140b054000501101a8200000001b05a90edc050535ffe605800a0a101b8200000001b08a30ec0050535ffe605300a0a101c8200000005b0c6f0ea4050515ffca0568b0001000e \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/map/MapReceiverTest_ValidMAP_expected.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/map/MapReceiverTest_ValidMAP_expected.json new file mode 100644 index 000000000..400898b87 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/map/MapReceiverTest_ValidMAP_expected.json @@ -0,0 +1,28 @@ +{ + "metadata" : { + "recordType" : "mapTx", + "securityResultCode" : "success", + "payloadType" : "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId" : { + "streamId" : "f32a9c67-1b6c-4835-b69f-ae2eacc5caea", + "bundleSize" : 1, + "bundleId" : 0, + "recordId" : 0, + "serialNumber" : 0 + }, + "odeReceivedAt": "2024-11-26T23:53:21.120Z", + "schemaVersion" : 8, + "maxDurationTime" : 0, + "recordGeneratedBy" : "RSU", + "sanitized" : false, + "asn1" : "001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E", + "mapSource" : "RSU", + "originIp" : "127.0.0.1" + }, + "payload" : { + "dataType" : "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data" : { + "bytes" : "001283C138003000205E9C014D3EAB092CA624B5518202DC3658042800000400023622C60CA009F66D48ABFAF81388D8AD18070027D9B2FFCFE9804F13667B1FFD009EC2C76E3FFC82C4E0001004B00C5000000800066C4574101813ECD8B757FAE027D9B30E6FF5604EC363561FE7809EC6CD69BFEC813C4D8A617FC9027D9B2147008604FB163666000016250000802580228000001000096229E1309B51A6FE4204DD361CF1FE5009F6018E1000096020A00000080004D88A57F84027D9B3827002804EC36087600A009F62C289407282C310001C0440188800000006C46DBE02813EC5816D800710052200000001B11B6FAD404FB16054A0000401C8800000006C47B3D24813EC5816D801B100C4200000000AF890F12C580007E87100D4200000008AF4C0F12C580077E7A2C0004000160002001CB028D000000800052C160BC40B5FFFD8A9409D86BFEBB5B40141457FEF53B76C008B467014145800080002BFFCBFFC82C6A0001804B024D000000800036C2213C3B013ECD80096D64027D9AFFD8CDFC04F635FF7983BC09F66C0082AA2014280B1B80006012C0B3400000100004B02BCF0F6D7FE065D602788B0138EB900B1240001012C083400000080009B0C2AF0B804FB15FE6DE171AFFF6C63E04EC15FE1DE670060E40002581EA8000004000135DA6DF0180A0A6ADC2C00D0143CD51897FDA028C8ABB25001A0B0680008012C105400000200009AEDBEFAE005053540EE003C0A326A9CF3FED8143C5667780010582C0004009608AA00000080004D76DE7EE402829ABA88FFDC050F354525FFF80A322BCF23FA602C690000C04B0395000000200016BB4FBD4E01414D3215800802940AB108FFF2030D2000110126200000001AEE5103BE050A15F6F1FFC8404D8800000006BB97C18E0142857DFA800010146200000001AEE89099A050A15F8720000B05DD000000800046BE3743B781428D80E1B00002879B00514B4404F63600827D8C09E22C000400015FFE6007016190000402582CE8000004000135ECEE1DE80A146C02E54758143CD8059AD3E027B1B00613DD004F102C360000804B055D000000200046BCC7C3C781428D80108C6E02829B002B2ECE050A16019A4B29B00AB5C3604F136004E410409EC018A10000960C3A00000080004D7DE9878602851B003923CC05053601623B440A0A6BFB8C3A5014140B0640005012C197400000100005AFE570EF2050A36003A47C80A0A6BFD2C45F014140B054000501101A8200000001B05A90EDC050535FFE605800A0A101B8200000001B08A30EC0050535FFE605300A0A101C8200000005B0C6F0EA4050515FFCA0568B0001000E" + } + } +} diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM.txt b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM.txt new file mode 100644 index 000000000..7a9270e7e --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM.txt @@ -0,0 +1 @@ +011d0000201a0000021bd86891de75f84da101c13f042e2214141fff00022c2000270000000163b2cc7986010000 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM_expected.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM_expected.json new file mode 100644 index 000000000..134f38c99 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/psm/PsmReceiverTest_ValidPSM_expected.json @@ -0,0 +1,28 @@ +{ + "metadata" : { + "recordType" : "psmTx", + "securityResultCode" : "success", + "payloadType" : "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId" : { + "streamId" : "33efc65d-f138-4c77-972c-1584d936e63e", + "bundleSize" : 1, + "bundleId" : 0, + "recordId" : 0, + "serialNumber" : 0 + }, + "odeReceivedAt" : "2024-11-26T23:53:21.120Z", + "schemaVersion" : 8, + "maxDurationTime" : 0, + "recordGeneratedBy" : "UNKNOWN", + "sanitized" : false, + "asn1" : "00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC7986010000", + "psmSource" : "RSU", + "originIp" : "127.0.0.1" + }, + "payload" : { + "dataType" : "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data" : { + "bytes" : "00201A0000021BD86891DE75F84DA101C13F042E2214141FFF00022C2000270000000163B2CC7986010000" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT.txt b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT.txt new file mode 100644 index 000000000..ee8384cb7 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT.txt @@ -0,0 +1 @@ +001338000817a780000089680500204642b342b34802021a15a955a940181190acd0acd20100868555c555c00104342aae2aae002821a155715570 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT_expected.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT_expected.json new file mode 100644 index 000000000..477d45e9f --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/spat/SpatReceiverTest_ValidSPAT_expected.json @@ -0,0 +1,29 @@ +{ + "metadata" : { + "recordType" : "spatTx", + "securityResultCode" : "success", + "payloadType" : "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId" : { + "streamId" : "38337a4b-9972-4c9e-86dd-ce18c4d0830c", + "bundleSize" : 1, + "bundleId" : 0, + "recordId" : 0, + "serialNumber" : 0 + }, + "odeReceivedAt" : "2024-11-26T23:53:21.120Z", + "schemaVersion" : 8, + "maxDurationTime" : 0, + "recordGeneratedBy" : "RSU", + "sanitized" : false, + "asn1" : "001338000817A780000089680500204642B342B34802021A15A955A940181190ACD0ACD20100868555C555C00104342AAE2AAE002821A155715570", + "spatSource" : "RSU", + "originIp" : "127.0.0.1", + "isCertPresent" : false + }, + "payload" : { + "dataType" : "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data" : { + "bytes" : "001338000817A780000089680500204642B342B34802021A15A955A940181190ACD0ACD20100868555C555C00104342AAE2AAE002821A155715570" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ExpectedOutput.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ExpectedOutput.json new file mode 100644 index 000000000..2e24f4a0a --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ExpectedOutput.json @@ -0,0 +1,28 @@ +{ + "metadata" : { + "securityResultCode" : "success", + "recordGeneratedBy" : "OBU", + "schemaVersion" : 8, + "payloadType" : "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId" : { + "recordId" : 0, + "serialNumber" : 0, + "streamId" : "40fcefc3-0b58-4b8d-aff1-624afad55951", + "bundleSize" : 1, + "bundleId" : 0 + }, + "sanitized" : false, + "recordType" : "srmTx", + "asn1" : "001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C0", + "srmSource" : "RSU", + "maxDurationTime" : 0, + "odeReceivedAt": "2024-11-26T23:53:21.120Z", + "originIp" : "127.0.0.1" + }, + "payload" : { + "data" : { + "bytes" : "001D2130000010090BD341080D00855C6C0C6899853000A534F7C24CB29897694759B7C0" + }, + "dataType" : "us.dot.its.jpo.ode.model.OdeHexByteArray" + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ValidData.txt b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ValidData.txt new file mode 100644 index 000000000..865085205 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/srm/SrmReceiverTest_ValidData.txt @@ -0,0 +1 @@ +001d2130000010090bd341080d00855c6c0c6899853000a534f7c24cb29897694759b7c0 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM.txt b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM.txt new file mode 100644 index 000000000..e05e4fd40 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM.txt @@ -0,0 +1 @@ +001e120000000005e9c04071a26614c06000040ba0 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM_expected.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM_expected.json new file mode 100644 index 000000000..5dfb881ef --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/ssm/SsmReceiverTest_ValidSSM_expected.json @@ -0,0 +1,28 @@ +{ + "metadata": { + "recordType": "ssmTx", + "securityResultCode": "success", + "payloadType": "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId": { + "streamId": "db41bd96-51f6-40d7-a395-dee198042e5a", + "bundleSize": 1, + "bundleId": 0, + "recordId": 0, + "serialNumber": 0 + }, + "odeReceivedAt": "2024-11-26T23:53:21.120Z", + "schemaVersion": 8, + "maxDurationTime": 0, + "recordGeneratedBy": "RSU", + "sanitized": false, + "asn1": "001E120000000005E9C04071A26614C06000040BA0", + "originIp": "127.0.0.1", + "ssmSource": "RSU" + }, + "payload": { + "dataType": "us.dot.its.jpo.ode.model.OdeHexByteArray", + "data": { + "bytes": "001E120000000005E9C04071A26614C06000040BA0" + } + } +} \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM.txt b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM.txt new file mode 100644 index 000000000..b428028ec --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM.txt @@ -0,0 +1 @@ +001F80A97014B901EC9C236B00000000000F775D9B0301EA73E452D1539716C99E9D555100003F0A59B080010007F8AA9979F4D3BB3A0A9266C000000854E3B2C47291F21E85EEF057980028422C1FFE0001FFFC00017FFF80000FFFFF000009FFFFF8000005FFFFFF00000007FF80007FFF00005FFFE00003FFFFC000027FFFFE0000017FFFFFC000000C523E43D138ECB11C6200C00FB0473DFB72A0E997C74007D408E5C376CD4F775D9B00 \ No newline at end of file diff --git a/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM_expected.json b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM_expected.json new file mode 100644 index 000000000..78665f1f0 --- /dev/null +++ b/jpo-ode-svcs/src/test/resources/us/dot/its/jpo/ode/udp/tim/TimReceiverTest_ValidTIM_expected.json @@ -0,0 +1,27 @@ +{ + "metadata" : { + "securityResultCode" : "success", + "recordGeneratedBy" : "RSU", + "schemaVersion" : 8, + "payloadType" : "us.dot.its.jpo.ode.model.OdeAsn1Payload", + "serialId" : { + "recordId" : 0, + "serialNumber" : 0, + "streamId" : "8006adcf-9fd7-447a-9d02-33005f703d08", + "bundleSize" : 1, + "bundleId" : 0 + }, + "sanitized" : false, + "recordType" : "timMsg", + "asn1" : "001F80A97014B901EC9C236B00000000000F775D9B0301EA73E452D1539716C99E9D555100003F0A59B080010007F8AA9979F4D3BB3A0A9266C000000854E3B2C47291F21E85EEF057980028422C1FFE0001FFFC00017FFF80000FFFFF000009FFFFF8000005FFFFFF00000007FF80007FFF00005FFFE00003FFFFC000027FFFFE0000017FFFFFC000000C523E43D138ECB11C6200C00FB0473DFB72A0E997C74007D408E5C376CD4F775D9B00", + "maxDurationTime" : 0, + "odeReceivedAt" : "2024-11-26T23:53:21.120Z", + "originIp" : "127.0.0.1" + }, + "payload" : { + "data" : { + "bytes" : "001F80A97014B901EC9C236B00000000000F775D9B0301EA73E452D1539716C99E9D555100003F0A59B080010007F8AA9979F4D3BB3A0A9266C000000854E3B2C47291F21E85EEF057980028422C1FFE0001FFFC00017FFF80000FFFFF000009FFFFF8000005FFFFFF00000007FF80007FFF00005FFFE00003FFFFC000027FFFFE0000017FFFFFC000000C523E43D138ECB11C6200C00FB0473DFB72A0E997C74007D408E5C376CD4F775D9B00" + }, + "dataType" : "us.dot.its.jpo.ode.model.OdeHexByteArray" + } +} \ No newline at end of file diff --git a/jpo-utils b/jpo-utils index 99c36526a..6699a425d 160000 --- a/jpo-utils +++ b/jpo-utils @@ -1 +1 @@ -Subproject commit 99c36526af8c349e6ec92440cc017fffbf2c5652 +Subproject commit 6699a425d00b0ccb6acd36ef9b8197cc8e299091 diff --git a/pom.xml b/pom.xml index 09e8bc134..a1e5768bd 100644 --- a/pom.xml +++ b/pom.xml @@ -11,12 +11,12 @@ scm:git:https://github.com/usdot-jpo-ode/jpo-ode.git - jpo-ode-3.0.0-SNAPSHOT + jpo-ode-4.0.0 usdot.jpo.ode jpo-ode - 3.0.0-SNAPSHOT + 4.0.0 pom jpo-ode-common @@ -25,11 +25,6 @@ jpo-ode-svcs - - - - UTF-8 UTF-8 @@ -42,6 +37,7 @@ 21 usdot-jpo-ode https://sonarcloud.io + 3.6.0 0.8.11 jacoco @@ -93,6 +89,22 @@ 5.9.3 test + + org.projectlombok + lombok + 1.18.30 + provided + + + org.springframework.boot + spring-boot-devtools + runtime + + + org.springframework.boot + spring-boot-configuration-processor + provided + @@ -160,9 +172,44 @@ maven-release-plugin 3.0.1 + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle-maven-plugin.version} + + checkstyle.xml + checkstyle-suppressions.xml + UTF-8 + UTF-8 + true + true + false + + + + validate + validate + + check + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${checkstyle-maven-plugin.version} + + checkstyle.xml + + + + github diff --git a/ppm.properties b/ppm.properties index 522ccf343..e69de29bb 100644 --- a/ppm.properties +++ b/ppm.properties @@ -1,35 +0,0 @@ -# Configuration details for the velocity filter. -# min and max velocity values are in units m/s per the J2735 specification. -privacy.filter.velocity=ON -privacy.filter.velocity.min=2.235 -privacy.filter.velocity.max=35.763 - -# Configuration details for privacy ID redaction. -privacy.redaction.id=ON -privacy.redaction.id.value=FFFFFFFF -privacy.redaction.id.inclusions=ON -privacy.redaction.id.included=BEA10000,BEA10001 - -# Configuration details for geofencing. -privacy.filter.geofence=ON -privacy.filter.geofence.mapfile=/ppm_data/road_file.csv -privacy.filter.geofence.sw.lat=40.997 -privacy.filter.geofence.sw.lon=-111.041 -privacy.filter.geofence.ne.lat=42.085 -privacy.filter.geofence.ne.lon=-104.047 - -# ODE / PPM Kafka topics. -privacy.topic.consumer=topic.OdeBsmJson -privacy.topic.producer=topic.FilteredOdeBsmJson - -group.id=0 - -# For testing purposes, use one partition. -privacy.kafka.partition=0 - -# The host ip address for the Broker. -metadata.broker.list=your.docker.host.ip:9092 - -# specify the compression codec for all data generated: none, gzip, snappy, lz4 -compression.type=none - diff --git a/sample.env b/sample.env index 9cbb1645f..5e7bfa46a 100644 --- a/sample.env +++ b/sample.env @@ -15,7 +15,7 @@ #################### # General Properties -# (Required) The IP address of Docker host machine which can be found by running "ifconfig" +# (Required) The IP address of Docker host machine which can be found by running "ip -4 addr" # Hint: look for "inet addr:" within "eth0" or "en0" for OSX DOCKER_HOST_IP= @@ -65,6 +65,7 @@ DEFAULT_SNMP_PROTOCOL= # The type of Kafka broker to connect to. If set to "CONFLUENT", the broker will be Confluent Cloud. Otherwise, it will be a local Kafka broker. KAFKA_TYPE= +KAFKA_LINGER_MS=1 # Confluent Cloud API access credentials (only required if KAFKA_TYPE is set to "CONFLUENT") CONFLUENT_KEY= @@ -103,4 +104,10 @@ AEM_LOG_TO_FILE=false AEM_LOG_LEVEL=INFO ADM_LOG_TO_FILE=false ADM_LOG_TO_CONSOLE=true -ADM_LOG_LEVEL=INFO \ No newline at end of file +ADM_LOG_LEVEL=INFO + +# ODE Monitoring +ODE_TIM_INGEST_MONITORING_ENABLED=true +# The interval is measured in seconds. 60 seconds is a sane default for local monitoring, but you may want to increase +# the interval to 3600 (1 hour) or more for production monitoring to reduce the noise in logs for healthy systems +ODE_TIM_INGEST_MONITORING_INTERVAL=60 \ No newline at end of file diff --git a/scripts/tests/udpsender_tim.py b/scripts/tests/udpsender_tim.py old mode 100644 new mode 100755 index afc542385..da5034f55 --- a/scripts/tests/udpsender_tim.py +++ b/scripts/tests/udpsender_tim.py @@ -5,7 +5,15 @@ # Currently set to oim-dev environment's ODE UDP_IP = os.getenv('DOCKER_HOST_IP') UDP_PORT = 47900 -MESSAGE = "005f498718cca69ec1a04600000100105d9b46ec5be401003a0103810040038081d4001f80d07016da410000000000000bbc2b0f775d9b0309c271431fa166ee0a27fff93f136b8205a0a107fb2ef979f4c5bfaeec97e4ad70c2fb36cd9730becdb355cc2fd2a7556b160b98b46ab98ae62c185fa55efb468d5b4000000004e2863f42cddc144ff7980040401262cdd7b809c509f5c62cdd35519c507b9062cdcee129c505cf262cdca5ff9c50432c62cdc5d3d9c502e3e62cdc13e79c501e9262cdbca2d9c5013ee62cdb80359c500e6a62cdb36299c500bc862cdaec1d9c50093c62cdaa2109c5006ea1080203091a859eeebb36006001830001aad27f4ff7580001aad355e39b5880a30029d6585009ef808332d8d9f80c3855151b38c772f765007967ec1170bcb7937f5cb880a25a52863493bcb87570dbcb5abc6bfb2faec606cfa34eb95a24790b2017366d3aabe7729e" + +# Normal TIM message +#MESSAGE = "001F80A97014B901EC9C236B00000000000F775D9B0301EA73E452D1539716C99E9D555100003F0A59B080010007F8AA9979F4D3BB3A0A9266C000000854E3B2C47291F21E85EEF057980028422C1FFE0001FFFC00017FFF80000FFFFF000009FFFFF8000005FFFFFF00000007FF80007FFF00005FFFE00003FFFFC000027FFFFE0000017FFFFFC000000C523E43D138ECB11C6200C00FB0473DFB72A0E997C74007D408E5C376CD4F775D9B00" + +# Complex random example (with computed lanes) +MESSAGE = "001F83A175D472274F43544554205354520A4C16B18193D0D1F9CDF54733FB1BFC0C983FCFC48D24FF97A474B8A754A9112A6F690200192EFCB5FF96D90FA32D4E83FC0C9830B5F5FC150A5059C545235AC20227C697080018815F84759CB3BF452C850424643A30E028544E9C511560A9DD8C2629F0D4470DBB3DDB4316096FC100800809BC746A108C8F26FC4C3208DA0E61091B7429182D3BFC0C98359EA8B4B454C16E606F037AE007A1CDE32000152E6C0ECDF612A90558D403FC049BF003734AC1C240EC930B39E850A7990A808008C033EFC47606FDDFA252B4A9942280C1020C9D818700EC4B4A76680C001D9F981240013111914408214602F8173D850A0D48F09F5D75264929260B5A7D27260B5A65260B56744F43999104E394B5204FF09260B5A7D3E32C5F74A0DB09EA975B8C1724DC92D9201005800092D84A89EF67BC1B27429C710979A5FE0E4C16B4F5EE874A08F2404C40AA60E2A09E79F91602003E5DB0AA9B32A2E0A6F36507F829305ACEE93E6B134C1CCC3C2EF3FA5CB5D02ECE000142002950BD8FB7D02D26BB6CAFCB848BE4A9260B5A7D29260B5A7D19D28125C17566972EA98F7172471344010153D0C21C1D69E158731BFC1C982D69E2E4FEDB544A012D60EDDB5D7569995CCC001CB02000CB8B449E02D39DB1072106F80B79BFC14982D666D178E4A198A3579B12B09915D01723B0000A10002A973AEAF40B82284427D9124DFE024F9230F8DD6AD73490518F80A3B259CF3FC40014001266976FBC88CB08E20EE8AD087EC16463A2B7AC5E62CB83FC9C830B7275F28A3128CDB2491AFF05260B580BDABD3249C784B718EFDC1906727B228001160002B10C89FAF5F0E9BA4F0AC74920F4947402561EBFB6201930424BF9E8112A39CA22519425D8E01001A7A1E0222723B864CB17F849305AD3E92E6884164E2CE7F0A6BD84FE4E38949D300081A01A290029F8111120048308876C910829B04B5148014FC9621814460542FAA24A460FBF82D2CF1A8CE66032A7E6A0807028A04283228610217947C12CE3FFF20CA031F809A2007D242408F0B4510F23D2A2646294D48A41F4F8494C87B58CCFE2983829A707069C17A4BBF23992859B3A528C03ACD3506FF07260B5A7BBA7391E53AAABAA44EA1584A857727A910002C0020391DD0DEDC78D916CBD8D839D52DABDB084919305C975AABA210D2D0CDF7A0ABC1000D3D0D9D071298F916D83FC049B2CFCF26A78A5951B5CC28075CAF1EAC780042808048EB0ADE229537A0161356A3A68175E5809621740382083BEDD5810921240" + +# Complex random example +#MESSAGE = "001F830A752544F94F4354455420535452124C16B4FA27D64F431A94AC28F232828FF05260B5CA82DDFB227A687CA09CFDE87C4B0ED1C8800280204A865BB2C265D1E4F5D3A877C07F8093FC3D820142C4EB15C7AC09CE3356F45A90200118358186A148D3F13220B227C18569099E2D1232A28B5F2579208E479151D45D438BEFF80DB0C08CED3F45A50103103102088C1A44A152889AFA7F62218940E831C20F35EA1232777BF31146022C71408809E5EB7BA1D52835D8A040D83367520C4AB397658B07E21393A041060D049E825C15FCF56AFF05260B58E40024126EDBD550F6D519709FDE4CF880201602008CEE4ACA5DE274975513846DD7AD77F839305AD383175AA8A497954C284E668FFE4F0710D80802810030EAC2535BCD6AE047899B1CE75405C8E6936419C672A85F8900C50B428CA3188CA4E1101B485DEE47349B20CE339542FC5654852A1484C9C0A0B6DEBB81DB91CD26C8338CE550BF31188B6041101F08134A407147800DFCF8E5FE0A4C16B2BF3A3A253269429B3B8198F71B71F8C902002C008005DD1174A86649950714134C54C82F4C0012B9C982D69B5BEADBF1C99BEFD660C6A4200201A7A1ECCA540B60B0AA27F8093AC4BF831472A28ECD2E0203575E8F15F5000818817507D68CC505CF4497E8219CA2288A03C81503120AEB852B7507D68CC505CF4497E2121346A090E8061520293D37841E41530E9BF4214E93C326CF8502830F0C081FF9D71FE064C1BAA780A12351A24D300B6FD25F085703880101600022BE028AC1105C1D5CB0F0E001A42F7F849305AD3E9B408EB43464DC861E6234918C8667857300022C400087E511D765E294CF3507435289D7EBBC2849A4982D69F494982D524C16B4FA36827A1D6C31DFDBE55A627F819307EA49F19AA77C773D119EA690CE094883E0100588001E1832A00950E876B85589726EF3EDFE0E4C16B4F8EB0ECDE8A23F3F9E839831CE316170D2000858080178162BF959EDACD55B2CD3721A1EDFE064C1AEC1B3F02442FEC92E119DFAF82D6EC3884002C0004A9FEDD617613A307F791C6D74FB1A27C451F6139305AD394982D582367260B5A6" print("UDP target IP:", UDP_IP) print("UDP target port:", UDP_PORT)