From 2bec1389b3137182901bd4ccc3ad73ba78573ec7 Mon Sep 17 00:00:00 2001 From: Gitea Date: Mon, 6 Sep 2021 22:54:59 +0200 Subject: [PATCH] Putting this on Gitea so I don't lose it --- .gitignore | 1 + README.md | 2 + css/index.css | 101 +++++++++++++++++++++++++++++++++++++++ fonts/Ozone.ttf | Bin 0 -> 174172 bytes getVMS.sh | 12 +++++ index.html | 40 ++++++++++++++++ js/DRIPS.js | 124 ++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 280 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 css/index.css create mode 100644 fonts/Ozone.ttf create mode 100644 getVMS.sh create mode 100644 index.html create mode 100644 js/DRIPS.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dce0efa --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +xml/*.* diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fe4fae --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# DRIP Reader +This tool shows the information currently being displayed on the Variable Message Signs (Dynamisch Route-informatiepaneel) next to the Dutch highways. The data being used is provided by the Nederlandse Database Wegverkeersgegevens. diff --git a/css/index.css b/css/index.css new file mode 100644 index 0000000..a31f0b6 --- /dev/null +++ b/css/index.css @@ -0,0 +1,101 @@ +body { + margin: 0; + font-family: "Open Sans", sans-serif; +} + +div#map { + position: absolute; + top: 8em; + bottom: 0; + width: 100%; +} + +div.appInfo { + width: calc(100% - 2em); + position: absolute; + height: 4em; + top: 0; + left: 0; + z-index: 1000; + padding: 1em; + background-color: white; + display: grid; + grid-template-areas: + "title updated" + "info info" + ; +} + +div.appInfo span { + font-size: 12px; +} + +div.appInfo span:nth-of-type(1) { + font-family: 'Codystar', cursive; + font-size: 2em; + grid-area: title; +} + +div.appInfo span:nth-of-type(2) { + text-align: right; + grid-area: updated; +} + +div.appInfo span:nth-of-type(3) { + grid-area: info; +} + +img.vmsImage { + border: 5px solid black; + margin: 0 auto; +} + +.mapboxgl-popup-content { + background: black !important; + color: white; + width: max-content !important; +} + +.mapboxgl-popup-close-button { + color: white !important; +} + +.mapboxgl-popup-anchor-bottom .mapboxgl-popup-tip { + border-top-color: black !important; +} + +@media only screen and (max-width: 750px) { + div#map { + top: 6em; + } + + div.appInfo { + height: 2em; + display: grid; + grid-template-areas: + "title updated" + ; + } + + div.appInfo span:nth-of-type(3) { + display: none; + } +} + +@media only screen and (max-width: 500px) { + div#map { + top: 7em; + } + + div.appInfo { + height: 3em; + display: grid; + grid-template-areas: + "title" + "updated"; + } + + div.appInfo span:nth-of-type(2) { + text-align: left; + } +} \ No newline at end of file diff --git a/fonts/Ozone.ttf b/fonts/Ozone.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2c780ad2d1bf16a3eb4e1d949a90ffc615eb14de GIT binary patch literal 174172 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 O*v9)fh>s7kboTG-SYVR? literal 0 HcmV?d00001 diff --git a/getVMS.sh b/getVMS.sh new file mode 100644 index 0000000..7608774 --- /dev/null +++ b/getVMS.sh @@ -0,0 +1,12 @@ +wget http://opendata.ndw.nu/DRIPS.xml.gz +wget http://opendata.ndw.nu/LocatietabelDRIPS.xml.gz + +gunzip -f DRIPS.xml.gz +gunzip -f LocatietabelDRIPS.xml.gz + +mv DRIPS.xml xml/ +mv LocatietabelDRIPS.xml xml/ + +rm DRIPS.xml.gz.* +rm LocatietabelDRIPS.xml.gz.* + diff --git a/index.html b/index.html new file mode 100644 index 0000000..449e09f --- /dev/null +++ b/index.html @@ -0,0 +1,40 @@ + + + + + + + + DRIP Reader 2000 + + + + + + + + + + + +
+ + DRIP Reader 2000 + + + + This tool shows the information currently being displayed on the Variable Message Signs (Dynamisch + Route-informatiepaneel) next to the Dutch highways. The data being used is provided by the Nederlandse + Database Wegverkeersgegevens. + + +
+ + +
+ + + + + + \ No newline at end of file diff --git a/js/DRIPS.js b/js/DRIPS.js new file mode 100644 index 0000000..49bb7dc --- /dev/null +++ b/js/DRIPS.js @@ -0,0 +1,124 @@ +// Setup XML requester +var request = new XMLHttpRequest(); + +// Setup mapbox +mapboxgl.accessToken = 'pk.eyJ1IjoidGhlLXJlYWwtbWNhcm4iLCJhIjoiY2p5bXo1dXJsMG1oNzNvbzU0dW84NmlmaSJ9.RiPJ7xRtmO6y4daFXB4Byg'; +var map = new mapboxgl.Map({ + container: 'map', + style: 'mapbox://styles/mapbox/streets-v11', + center: [5.46, 52.1], + zoom: 6 +}); + +map.addControl(new mapboxgl.NavigationControl()); + +// Open xml file containing the statuses of the VMS units +request.open("GET", "xml/DRIPS.xml", false); +request.send(); +var xmlContents = request.responseXML; +document.getElementById("updated").innerHTML = `Last updated: ${request.responseXML.lastModified}`; + +// Open xml file containing the locations of the VMS units +request.open("GET", "xml/LocatietabelDRIPS.xml", false); +request.send(); +var xmlLocation = request.responseXML; + +// Create array of VMS Id's using the status xml file +var unitArray = xmlContents.getElementsByTagName('vmsUnit'); +var statusArray = []; + +for (let index = 0; index < unitArray.length; index++) { + statusArray.push(unitArray[index].childNodes[1].getAttribute('id')); +} + +// Create array of VMS Id's using the locations xml file +var recordArray = xmlLocation.getElementsByTagName('vmsUnitRecord'); +var referenceArray = []; + +for (let index = 0; index < recordArray.length; index++) { + referenceArray.push(recordArray[index].getAttribute('id')); +} + +// Remove VMS units which do not have fixed location +// var dripsArray = []; + +for (let referenceIndex = 0; referenceIndex < referenceArray.length; referenceIndex++) { + var referenceId = referenceArray[referenceIndex]; + if (statusArray.includes(referenceId)) { + var statusIndex = statusArray.indexOf(referenceId); + var statusId = statusArray[statusIndex]; + + // Check if the VMS unit has a fixed location + if (xmlLocation.querySelectorAll('vmsUnitRecord[id="' + referenceId + '"] > vmsRecord > vmsRecord > vmsLocation > locationForDisplay')[0]) { + // Add the needed data to the array set + const latitude = xmlLocation.querySelectorAll('vmsUnitRecord[id="' + referenceId + '"] > vmsRecord > vmsRecord > vmsLocation > locationForDisplay > latitude')[0].innerHTML; + const longitude = xmlLocation.querySelectorAll('vmsUnitRecord[id="' + referenceId + '"] > vmsRecord > vmsRecord > vmsLocation > locationForDisplay > longitude')[0].innerHTML; + const type = xmlLocation.querySelectorAll('vmsUnitRecord > vmsRecord > vmsRecord > vmsType')[referenceIndex].innerHTML; + + // Check wether VMS unit is dislaying text or an image + var vmsElement = xmlContents.querySelectorAll('vmsUnit > vmsUnitReference[id="' + statusId + '"]')[0].parentElement; + + if (vmsElement.querySelectorAll('vms > vms > vmsMessage > vmsMessage > vmsMessageExtension > vmsMessageExtension > vmsImage > imageData > binary').length) { + const base64Image = vmsElement.querySelectorAll('vms > vms > vmsMessage > vmsMessage > vmsMessageExtension > vmsMessageExtension > vmsImage > imageData > binary')[0].innerHTML; + var content = '' + statusId + ''; + } else if (vmsElement.querySelectorAll('vms > vms > vmsMessage > vmsMessage > textPage > vmsText > vmsTextLine').length) { + var content = '' + var textLines = vmsElement.querySelectorAll('vms > vms > vmsMessage > vmsMessage > textPage > vmsText > vmsTextLine > vmsTextLine > vmsTextLine'); + for (let index = 0; index < textLines.length; index++) { + if (textLines[index].innerHTML == '' && index == 0) { + content = 'No data
'; + } else { + content += textLines[index].innerHTML + '
'; + } + } + } else { + var content = 'No data' + } + + // Push VMS Id to array + addMarker([longitude, latitude], content); + // dripsArray.push({ + // statusId, + // longitude, + // latitude, + // type, + // content + // }); + } else { + console.log('Location not Found'); + } + } else { + console.log('VMS ID not found'); + } +} + +//// Add markers to the map +async function addMarker(coordinates, content) { + var popup = new mapboxgl.Popup({ + offset: 25 + }) + // .setHTML(contentArray[index]); + .setHTML(content) + + new mapboxgl.Marker() + .setLngLat(coordinates) + .setPopup(popup) + .addTo(map); +} + +// for (let index = 0; index < dripsArray.length; index++) { +// const coordinates = [ +// dripsArray[index]['longitude'], +// dripsArray[index]['latitude'] +// ]; +// var popup = new mapboxgl.Popup({ +// offset: 25 +// }) +// // .setHTML(contentArray[index]); +// .setHTML(dripsArray[index]['content']) + +// new mapboxgl.Marker() +// .setLngLat(coordinates) +// .setPopup(popup) +// .addTo(map); +// } \ No newline at end of file