Changeset 299 in tmcsimulator for trunk/src/cptms
- Timestamp:
- 03/07/2019 12:15:04 PM (7 years ago)
- Location:
- trunk/src/cptms
- Files:
-
- 2 edited
-
cms_demo.html (modified) (2 diffs)
-
messagefile.txt (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/cptms/cms_demo.html
r298 r299 65 65 float: left; 66 66 } 67 </style> 67 #hideButton { 68 font-size: 40px; 69 margin-right: 9px; 70 background-color: #fff; 71 color: #47476b; 72 cursor: pointer; 73 } </style> 68 74 </head> 69 75 <body> … … 82 88 </div> 83 89 <div id="map"></div> 90 <!--The div element where the show/hide button appears --> 91 <div id="hideButton">👁</div> 92 84 93 <script> 85 var centerPoint = {lat: 33.693385, lng: -117.798937}; 86 var map; 87 var kMapStartupFile = "cmsStatusD12.json"; 88 //var src="http://git.tokomak.net:8888/raw-attachment/ticket/75/dyer1.txt" 89 //var src="https://raw.githubusercontent.com/jdalbey/map-spikes/master/cms_two_signs.kml"; 90 // var src = "https://www.arb.ca.gov/smp/met/kml/faa.kml"; 91 // var src="https://raw.githubusercontent.com/jdalbey/map-spikes/master/la_airports.kml" 92 // var src = 'https://developers.google.com/maps/documentation/javascript/examples/kml/westcampus.kml'; 93 var blueFlag = "icon_cmsBlue.png"; 94 var yellowFlag = "icon_cmsYellow.png"; 95 var messageList; 96 function initMap() { 97 map = new google.maps.Map(document.getElementById('map'), { 98 center: centerPoint, 99 zoom: 11, 100 /* mapTypeId: 'terrain', */ 101 mapTypeControl: false, 102 streetViewControl: false 103 }); 104 getMessage(1); // load the current message file 105 setMarkers(); 106 } 107 108 var cms_info; 109 var markerList = []; 110 111 112 function setMarkers() 113 { 114 var simpleImage = ""; 115 116 loadcmsJSON(function(response) 94 var centerPoint = { 95 lat: 33.693385, 96 lng: -117.798937 97 }; 98 var map; 99 var kMapStartupFile = "cmsStatusD12.json"; 100 //var src="http://git.tokomak.net:8888/raw-attachment/ticket/75/dyer1.txt" 101 //var src="https://raw.githubusercontent.com/jdalbey/map-spikes/master/cms_two_signs.kml"; 102 // var src = "https://www.arb.ca.gov/smp/met/kml/faa.kml"; 103 // var src="https://raw.githubusercontent.com/jdalbey/map-spikes/master/la_airports.kml" 104 // var src = 'https://developers.google.com/maps/documentation/javascript/examples/kml/westcampus.kml'; 105 var blueFlag = "icon_cmsBlue.png"; 106 var yellowFlag = "icon_cmsYellow.png"; 107 var messageList; 108 var cms_info; 109 var markerList = []; 110 var showing = true; 111 112 function initMap() 113 { 114 map = new google.maps.Map(document.getElementById('map'), 115 { 116 center: centerPoint, 117 zoom: 11, 118 /* mapTypeId: 'terrain', */ 119 mapTypeControl: false, 120 streetViewControl: false 121 }); 122 initButton(); 123 getMessage(1); // load the current message file 124 setMarkers(); 125 } 126 // Initialize the center button (to re-center the map) 127 function initButton() 128 { 129 var hideBtnDiv = document.getElementById('hideButton'); 130 map.controls[google.maps.ControlPosition.RIGHT_CENTER].push(hideBtnDiv) 131 hideBtnDiv.title = 'Click to toggle cms view'; 132 133 // Setup the click event listeners: reset center location and zoom factor 134 hideBtnDiv.addEventListener('click', function() { 135 showing = !showing; 136 for (var i = 0; i < markerList.length; i++) 137 { 138 markerList[i].setVisible(showing); 139 } 140 }); 141 } 142 function setMarkers() 143 { 144 var simpleImage = ""; 145 loadcmsJSON(function(response) 146 { 147 // Parse JSON string into object 148 cms_info = JSON.parse(response); 149 console.log(cms_info.data[0].cms); 150 // Process each new marker 151 for (var i = 0; i < cms_info.data.length; i++) 117 152 { 118 // Parse JSON string into object 119 cms_info = JSON.parse(response); 120 console.log(cms_info.data[0].cms); 121 // Process each new marker 122 for (var i = 0; i < cms_info.data.length; i++) 153 var cms = cms_info.data[i].cms; 154 var currLat = Number(cms.location.latitude); 155 var currLong = Number(cms.location.longitude); 156 // load a yellow flag if there's currently no message 157 if (messageList[i] == "||") 158 simpleImage = yellowFlag; 159 else 160 simpleImage = blueFlag; 161 var directionCode = cms.location.direction.charAt(0); 162 var rolloverText = " " + directionCode + " " + cms.location 163 .route + " " + cms.location.postmile + " " + cms 164 .location.locationName 165 markerList[i] = new google.maps.Marker( 123 166 { 124 var cms = cms_info.data[i].cms; 125 var currLat = Number(cms.location.latitude); 126 var currLong = Number(cms.location.longitude); 127 // load a yellow flag if there's currently no message 128 if (messageList[i] == "||") 129 simpleImage = yellowFlag; 130 else 131 simpleImage = blueFlag; 132 var directionCode = cms.location.direction.charAt(0); 133 var rolloverText = " "+ directionCode + " "+cms.location.route + " "+ cms.location.postmile + " " + cms.location.locationName 134 markerList[i] = new google.maps.Marker( 135 { 136 position: {lat: currLat, lng: currLong}, 167 position: 168 { 169 lat: currLat, 170 lng: currLong 171 }, 137 172 map: map, 138 173 icon: simpleImage, 139 174 title: rolloverText, 140 label: ""+i 141 }); 142 console.log("built: "+markerList[i].id+" "+markerList[i].title); 143 // } 144 // for (var i = 0; i < markerList.length; i++) 145 // { 146 google.maps.event.addListener(markerList[i], 'click', function () { 147 //var content = event.featureData.infoWindowHtml; 148 var cmsName = document.getElementById('cms-name'); 149 cmsName.innerHTML = this.getTitle(); // put sign name in display 150 cmsName.style.display = 'block' 151 var cmsMsg = document.getElementById('cms-message'); 152 cmsMsg.style.display = 'block' 153 cmsID = Number(this.getLabel()); 154 getMessage(cmsID); // note: this is async 155 document.getElementById('cmsID').value=cmsID ; 156 var userInput = document.getElementById('userinput'); 157 userInput.style.display = 'block' 175 label: "" + i 176 }); 177 google.maps.event.addListener(markerList[i], 'click', 178 function() 179 { 180 var cmsName = document.getElementById('cms-name'); 181 cmsName.innerHTML = this.getTitle(); // put sign name in display 182 cmsName.style.display = 'block' 183 var cmsMsg = document.getElementById('cms-message'); 184 cmsMsg.style.display = 'block' 185 cmsID = Number(this.getLabel()); 186 getMessage(cmsID); // note: this is async 187 document.getElementById('cmsID').value = cmsID; 188 var userInput = document.getElementById('userinput'); 189 userInput.style.display = 'block' 158 190 }); 159 } 160 }); 161 } 162 function loadcmsJSON(callback) { 163 164 var xobj = new XMLHttpRequest(); 165 xobj.overrideMimeType("application/json"); 166 xobj.open('GET', kMapStartupFile, true); 167 xobj.onreadystatechange = function () { 168 if (xobj.readyState == 4 && xobj.status == "200") { 169 callback(xobj.responseText); 170 } 171 }; 172 // We want ajax to ignore any cached responses 173 xobj.setRequestHeader('If-Modified-Since', 'Sat, 01 Jan 2000 01:01:01 GMT') 174 xobj.send(null); 175 } 176 function handleSubmit() 191 } 192 }); 193 } 194 195 function loadcmsJSON(callback) 196 { 197 var xobj = new XMLHttpRequest(); 198 xobj.overrideMimeType("application/json"); 199 xobj.open('GET', kMapStartupFile, true); 200 xobj.onreadystatechange = function() 201 { 202 if (xobj.readyState == 4 && xobj.status == "200") 177 203 { 178 // hide the display 179 document.getElementById('cms-message').style.display = 'none' 180 document.getElementById('userinput').style.display = 'none' 181 document.getElementById('cms-name').style.display = 'none' 182 // recover the user's response 183 var response1 = document.getElementById('msgcontent1').value; 184 var response2 = document.getElementById('msgcontent2').value; 185 var response3 = document.getElementById('msgcontent3').value; 186 saveMessage(response1+"|"+response2+"|"+response3); 187 } 188 function handleCancel() 204 callback(xobj.responseText); 205 } 206 }; 207 // We want ajax to ignore any cached responses 208 xobj.setRequestHeader('If-Modified-Since', 'Sat, 01 Jan 2000 01:01:01 GMT') 209 xobj.send(null); 210 } 211 212 function handleSubmit() 213 { 214 // hide the display 215 document.getElementById('cms-message').style.display = 'none' 216 document.getElementById('userinput').style.display = 'none' 217 document.getElementById('cms-name').style.display = 'none' 218 // recover the user's response 219 var response1 = document.getElementById('msgcontent1').value; 220 var response2 = document.getElementById('msgcontent2').value; 221 var response3 = document.getElementById('msgcontent3').value; 222 saveMessage(response1 + "|" + response2 + "|" + response3); 223 } 224 225 function handleCancel() 226 { 227 // hide the display 228 document.getElementById('cms-message').style.display = 'none' 229 document.getElementById('userinput').style.display = 'none' 230 document.getElementById('cms-name').style.display = 'none' 231 } 232 233 function handleClear() 234 { 235 document.getElementById('msgcontent1').value = ""; 236 document.getElementById('msgcontent2').value = ""; 237 document.getElementById('msgcontent3').value = ""; 238 document.getElementById('msgcontent1').focus(); 239 } 240 241 function loadJSON(inFile, callback) 242 { 243 var xobj = new XMLHttpRequest(); 244 xobj.overrideMimeType("application/json"); 245 xobj.open('GET', inFile, true); 246 xobj.onreadystatechange = function() 247 { 248 if (xobj.readyState == 4 && xobj.status == "200") 189 249 { 190 // hide the display 191 document.getElementById('cms-message').style.display = 'none' 192 document.getElementById('userinput').style.display = 'none' 193 document.getElementById('cms-name').style.display = 'none' 194 } 195 function handleClear() 196 { 197 document.getElementById('msgcontent1').value=""; 198 document.getElementById('msgcontent2').value=""; 199 document.getElementById('msgcontent3').value=""; 200 document.getElementById('msgcontent1').focus(); 201 } 202 203 function loadJSON(inFile,callback) { 204 205 var xobj = new XMLHttpRequest(); 206 xobj.overrideMimeType("application/json"); 207 xobj.open('GET', inFile, true); 208 xobj.onreadystatechange = function () { 209 if (xobj.readyState == 4 && xobj.status == "200") { 210 callback(xobj.responseText); 211 } 212 }; 213 // We want ajax to ignore any cached responses 214 xobj.setRequestHeader('If-Modified-Since', 'Sat, 01 Jan 2000 01:01:01 GMT') 215 xobj.send(null); 216 } 217 // retrieve the current cms message file 218 function getMessage(cmsID) 219 { 220 loadJSON("messagefile.txt",function(response) 221 { 222 // Parse JSON string into object 223 messageList = JSON.parse(response); 224 // select a message from json for the given cmsID 225 console.log("get by cmsID="+cmsID); 226 var cmsSign = document.getElementById('msgcontent1'); 227 //cmsSign.innerHTML = messageList[cmsID]; 228 messageparts = messageList[cmsID].split("|"); 229 cmsSign.value = messageparts[0]; 230 document.getElementById('msgcontent2').value = messageparts[1]; 231 document.getElementById('msgcontent3').value = messageparts[2]; 232 cmsSign.style.display = 'block' 233 cmsSign.focus(); 234 }); 235 } 236 // Save an updated cms message to the file 237 // NB: cms id's are one-based, json array is zero-based. 238 function saveMessage(outMessage,cmsID) 239 { 240 var cmsID = document.getElementById('cmsID').value; 241 console.log("Saving " + outMessage + " for cmsID " + cmsID) 242 messageList[cmsID] = outMessage; 243 if (outMessage.length < 4) 244 markerList[cmsID].setIcon(yellowFlag); 245 else 246 markerList[cmsID].setIcon(blueFlag); 247 var xhttp = new XMLHttpRequest(); 248 xhttp.open("GET", "/cgi-bin/saveMessage.py?msg="+JSON.stringify(messageList), true); 249 xhttp.send(); 250 251 // Using POST might be a better idea ... haven't tried this yet 252 // var xhr = new XMLHttpRequest(); 253 // xhr.open("POST", "/cgi-bin/saveMessage.py?", true); 254 // xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 255 256 // send the collected data as JSON 257 // xhr.send(JSON.stringify(messageList)); 258 } 259 260 </script> 250 callback(xobj.responseText); 251 } 252 }; 253 // We want ajax to ignore any cached responses 254 xobj.setRequestHeader('If-Modified-Since', 'Sat, 01 Jan 2000 01:01:01 GMT') 255 xobj.send(null); 256 } 257 // retrieve the current cms message file 258 function getMessage(cmsID) 259 { 260 loadJSON("http://localhost:8080/messagefile.txt", function(response) 261 { 262 // Parse JSON string into object 263 messageList = JSON.parse(response); 264 // select a message from json for the given cmsID 265 console.log("get by cmsID=" + cmsID); 266 var cmsSign = document.getElementById('msgcontent1'); 267 //cmsSign.innerHTML = messageList[cmsID]; 268 messageparts = messageList[cmsID].split("|"); 269 cmsSign.value = messageparts[0]; 270 document.getElementById('msgcontent2').value = messageparts[1]; 271 document.getElementById('msgcontent3').value = messageparts[2]; 272 cmsSign.style.display = 'block' 273 cmsSign.focus(); 274 }); 275 } 276 // Save an updated cms message to the file 277 // NB: cms id's are one-based, json array is zero-based. 278 function saveMessage(outMessage, cmsID) 279 { 280 var cmsID = document.getElementById('cmsID').value; 281 console.log("Saving " + outMessage + " for cmsID " + cmsID) 282 messageList[cmsID] = outMessage; 283 // Change icon if something was saved 284 if (outMessage == "||") 285 markerList[cmsID].setIcon(yellowFlag); 286 else 287 markerList[cmsID].setIcon(blueFlag); 288 var xhttp = new XMLHttpRequest(); 289 xhttp.open("GET", "http://localhost:8080/cgi-bin/saveMessage.py?msg=" + JSON 290 .stringify(messageList), true); 291 xhttp.send(); 292 // Using POST might be a better idea ... haven't tried this yet 293 // var xhr = new XMLHttpRequest(); 294 // xhr.open("POST", "/cgi-bin/saveMessage.py?", true); 295 // xhr.setRequestHeader('Content-Type', 'application/json; charset=UTF-8'); 296 // send the collected data as JSON 297 // xhr.send(JSON.stringify(messageList)); 298 } </script> 261 299 <script async defer 262 300 src="https://maps.googleapis.com/maps/api/js?key=AIzaSyD6iTyN0DjP-9OVkAgicyp4tkC10naE_B8&callback=initMap"> -
trunk/src/cptms/messagefile.txt
r298 r299 1 [" ","||","||","||","||","||","||","||","||","||","slow for|work zone|","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","Road Work|10PM - 6AM|","||","||","slow traffic|ahead|","SLOW TRAFFIC||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","caution|debris on road|","||","||","||","||","||","||","||","||","||","||","||","||"]1 ["zero||","||","||","||","||","||","||","||","||","||","slow for|work zone |","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","||","Road Work|10PM - 6AM|","||","||","slow traffic|ahead|","SLOW TRAFFIC||","||","free tomatoes!|U-Pick from |roadway","||","||","||","||","||","||","||","||","||","||","||","||","watch out for|falling rocks|","||","||","||","||","||","||","||","||","||","ABC||","||","||","caution|debris on road|","||","||","||","||","||","||","||","||","||","||","||","||"]
Note: See TracChangeset
for help on using the changeset viewer.
