@ -3226,335 +3226,328 @@ char * get_plane(int * Len)
}
char * get_aprs ( )
{
char Msg [ ] =
" <!DOCTYPE html> \n "
" <html> \n "
" <head> \n "
" <meta charset= \" utf-8 \" > \n "
" <meta name= \" viewport \" content= \" width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no \" /> \n "
" \n "
" <title>G8BPQ APRS Display</title> \n "
" \n "
" <link rel= \" stylesheet \" href= \" https://unpkg.com/leaflet@1.7.1/dist/leaflet.css \" integrity= \" sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A== \" crossorigin= \" \" /> \n "
" <script src= \" https://unpkg.com/leaflet@1.7.1/dist/leaflet.js \" integrity= \" sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA== \" crossorigin= \" \" ></script> \n "
//"<link rel=\"stylesheet\" href=\"http://cdn.leafletjs.com/leaflet/v1.1.0/leaflet.css\" />\n"
//"<script src=\"http://cdn.leafletjs.com/leaflet/v1.1.0/leaflet-src.js\"></script>\n"
" <script src= \" https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js \" ></script> \n "
" <script src= \" leaflet.rotatedMarker.js \" ></script> \n "
" \n "
" <style type= \" text/css \" > \n "
" html, body {height: 100%; width: 100%; margin: 0;} \n "
" #map {position: absolute; top:40px; bottom: 0;width: 100%; margin: 0;} \n "
" .topnav { overflow: hidden; height: 40px; background-color: white; margin: 0;} \n "
" .topnav a {float: left; color: black; text-align: center; padding: 14px 16px; text-decoration: none; font-size: 17px;} \n "
" .topnav form{float: left; color: black; text-align: center; padding: 14px 16px; text-decoration: none; font-size: 17px;} \n "
" .popup {border: 1px solid black;margin: 0; padding: 0; font-size: 12px; min-height:16px; box-shadow: none;} \n "
" .leaflet-tooltip-left.popup::before {border-left-color: transparent;} \n "
" .leaflet-tooltip-right.popup::before {border-right-color: transparent;} \n "
" </style> \n "
" \n "
" <script> \n "
" var map; \n "
" var layergroup; \n "
" var redIcon; \n "
" var greenIcon; \n "
" var blueIcon; \n "
" var whiteIcon; \n "
" var transIcon; \n "
" var navIcon; \n "
" var sarIcon; \n "
" var planeIcon; \n "
" var greenplaneIcon; \n "
" var myLayer; \n "
" var lat = 0; \n "
" var lon = 0; \n "
" var zoom = 2; \n "
" var ais = 0; \n "
" var adsb = 0; \n "
" var aprs = 0; \n var homeLat = 0;var homeLon = 0;var homePoint; "
" \n "
" var url1 = 'http://server1.g8bpq.net:7381/styles/osm-bright/{z}/{x}/{y}.png'; \n "
" \n "
" var myTimeout; \n "
" \n "
" function initialize() \n "
" { \n "
" redIcon = L.icon({iconUrl: 'aisred.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" greenIcon = L.icon({iconUrl: 'aisgreen.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" blueIcon = L.icon({iconUrl: 'aisblue.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" whiteIcon = L.icon({iconUrl: 'aiswhite.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" transIcon = L.icon({iconUrl: 'aistrans.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" navIcon = L.icon({iconUrl: 'aisnavaid.png',iconSize: [21, 21],iconAnchor: [11, 11],popupAnchor: [0, 0]}); \n "
" sarIcon = L.icon({iconUrl: 'helicopter.png',iconSize: [31, 31],iconAnchor: [15, 15],popupAnchor: [0, 0]}); \n "
" planeIcon = L.icon({iconUrl: 'plane.png',iconSize: [39, 39],iconAnchor: [19, 19],popupAnchor: [0, 0]}); \n "
" greenplaneIcon = L.icon({iconUrl: 'greenplane.png',iconSize: [39, 39],iconAnchor: [19, 19],popupAnchor: [0, 0]}); \n "
" \n "
" lat = getCookie( \" Lat \" ); \n "
" lon = getCookie( \" Lng \" ); \n "
" \n "
" if (lat != \" \" ) \n "
" zoom = getCookie( \" Zoom \" ); \n "
" \t \n "
" aprs = getCookie( \" aprs \" ); \n "
" ais = getCookie( \" ais \" ); \n "
" adsb = getCookie( \" adsb \" ); \n "
" \n if (aprs == 0 && ais == 0 && adsb == 0) "
" \n aprs = 1; "
" if (aprs == 1) \n "
" document.getElementById( \" aprsid \" ).checked = true; \n "
" if (ais == 1) \n "
" document.getElementById( \" aisid \" ).checked = true; \n "
" if (adsb == 1) \n "
" document.getElementById( \" adsbid \" ).checked = true; \n "
" \n "
" map = L.map('map', {zoomSnap: 0, zoomDelta: 0.25, wheelPxPerZoomLevel: 180}).setView([lat, lon], zoom); \n "
" \n "
" map.on('moveend zoomend', function() \n "
" { \n "
" clearTimeout(myTimeout); \n "
" myTimeout = setTimeout(Refresh, 500); \n "
" \n "
" }); \n "
" \n "
" myLayer = L.tileLayer(url1, { \n "
" maxZoom: 18, \n "
" attribution: 'Map data © <a href= \" https://www.openstreetmap.org/ \" >OpenStreetMap</a> contributors, ' + \n "
" '<a href= \" https://creativecommons.org/licenses/by-sa/2.0/ \" >CC-BY-SA</a>, ' + \n "
" 'Imagery © <a href= \" https://openmaptiles.org// \" >OpenMapTimes</a>', \n "
" id: 'mapbox.streets' \n "
" }).addTo(map); \n "
" \n "
" myLayer.on('tileerror', function(error, tile) \n "
" { \n "
" url1 = 'http://server2.g8bpq.net:7381/styles/osm-bright/{z}/{x}/{y}.png'; \n "
" \n "
" myLayer = L.tileLayer(url1, \n "
" { \n "
" maxZoom: 18, \n "
" attribution: 'Map data © <a href= \" https://www.openstreetmap.org/ \" >OpenStreetMap</a> \t contributors, ' + \n "
" \t '<a href= \" https://creativecommons.org/licenses/by-sa/2.0/ \" >CC-BY-SA</a>, ' + \n "
" \t 'Imagery © <a href= \" https://openmaptiles.org// \" >OpenMapTimes</a>', \n "
" id: 'mapbox.streets' \n "
" }).addTo(map); \n "
" }); \n "
" \n "
" layergroup = L.layerGroup().addTo(map); \n "
" L.control.scale().addTo(map); "
" myTimeout = setTimeout(Refresh, 100); \n "
" } \n "
" \n "
" function getCookie(cname) \n "
" { \n "
" var name = cname + \" = \" ; \n "
" var decodedCookie = decodeURIComponent(document.cookie); \n "
" var ca = decodedCookie.split(';'); \n "
" \t \n "
" for(var i = 0; i < ca.length; i++) \n "
" { \n "
" var c = ca[i]; \n "
" while (c.charAt(0) == ' ') \n "
" { \n "
" c = c.substring(1); \n "
" } \n "
" if (c.indexOf(name) == 0) \n "
" return c.substring(name.length, c.length); \n "
" } \n "
" return \" \" ; \n "
" } \n "
" \n "
" \n "
" // Refresh map every 60 seconds \n "
" \n "
" setInterval( \" Refresh() \" , 60000 ); \n "
" \n "
" function Refresh( ) \n "
" { \n "
" var latlng = map.getCenter(); \n "
" zoom = map.getZoom(); \n "
" \n "
" lat = latlng.lat; \n "
" lon = latlng.lng \n "
" \n "
" document.cookie = \" Lat= \" + lat; \n "
" document.cookie = \" Lng= \" + lon; \n "
" document.cookie = \" Zoom= \" + zoom; \n "
" \n "
" \t document.cookie = \" aprs= \" + aprs; \n "
" \t document.cookie = \" ais= \" + ais; \n "
" \t document.cookie = \" adsb= \" + adsb; \n "
" \n "
" GetData(); \n "
" } \n "
" \n "
" \n "
" function GetData() \n "
" { \n "
" var N = map.getBounds().getNorth(); \n "
" var S = map.getBounds().getSouth(); \n "
" var W = map.getBounds().getWest(); \n "
" var E = map.getBounds().getEast(); \n "
" $.ajax({url: \" aprsdata.txt? \" + N + '|' + S + '|' + W + '|' + E + '|' + aprs + '|' + ais + '|' + adsb, cache: false}) \n "
" .done(function(Nodes){processData(Nodes);}) \t \n "
" .fail(function(jqXHR, textStatus, errorThrown){alert( \" Failed to load aprs data \" );}) \n "
" ; \n "
" } \n "
" \n "
" function processData(Nodes) \n "
" { \n "
" var i = 0; \n "
" layergroup.clearLayers(); \n "
" \n "
" var lines = Nodes.split( \" | \" ); \n "
" \n "
" while (i < lines.length) \n "
" { \n "
" if (lines[i].length < 5) \n "
" { \n "
" i++; \n "
" continue; \n "
" } \n "
" \t \n "
" var elements = lines[i].split( \" , \" ); \n "
" i++; \t \n "
" \t \n "
" if (elements[0] == \" H \" ) // Home Position \n "
" { "
" homeLat = elements[1]; homeLon = elements[2]; homePoint = L.latLng(homeLat, homeLon); "
" var m = L.circleMarker([elements[1], elements[2]], {radius: 6, color: '#000000', fillOpacity: 0.3}) \n "
" .addTo(layergroup) \n "
" .bindPopup(elements[3]) \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" if (lat == 0 || lat == \" \" ) // Not Set \n "
" map.setView([elements[1], elements[2]], 8); \n } \n \n "
" if (elements[0] == \" N \" ) \t // Navaid \n "
" { \n "
" var m = L.marker([elements[1], elements[2]], {rotationAngle: 0, icon: navIcon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(elements[3]) \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" \n "
" } \n "
" else if (elements[0] == \" A \" ) \t // APRS \n "
" { \n "
" var Icon = L.icon({iconUrl: 'Icon' + elements[5] + '.png',iconSize: [22, 22],iconAnchor: [11, 11],popupAnchor: [0, 0]}); \n "
" \n "
" var m = L.marker([elements[1], elements[2]], {rotationAngle: 0, icon: Icon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(elements[4], {minWidth: 280, maxWidth: 500}) \n "
" .bindTooltip(elements[3], {className: 'popup', permanent: true, direction: 'right', offset: [10, 0]}).openTooltip() \t \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" \n "
" } \n "
" else if (elements[0] == \" V \" ) // Vessel \n "
" { \n "
" var icon; \n "
" \n "
" var dist = homePoint.distanceTo([elements[1], elements[2]]) / 1609.34; \n "
" var popup = elements[3] + '<br>Distance ' + dist.toFixed(0) + ' Miles'; "
" if (elements[6] < 900) \n "
" \t icon = blueIcon; \n "
" else if (elements[6] < 1800) \n "
" \t icon = redIcon; \n "
" else \n "
" \t icon = whiteIcon; \n "
" \t \n "
" var m = L.marker([elements[1], elements[2]], {rotationAngle: elements[4], icon: icon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(popup) \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" } \n "
" \n "
" else if (elements[0] == \" S \" ) // SAR Aircraft \n "
" { \n "
" var m = L.marker([elements[1], elements[2]], {icon: sarIcon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(elements[3]) \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" } \n "
" \n "
" else if (elements[0] == \" P \" ) \n "
" { \n "
" var dist = homePoint.distanceTo([elements[1], elements[2]]) / 1609.34; \n "
" var popup = elements[3] + '<br>Distance ' + dist.toFixed(0) + ' Miles'; "
" var icon; \n "
" \n "
" if (elements[7] < 120) \n "
" \t icon = greenplaneIcon; \n "
" else \n "
" \t icon = planeIcon; \n "
" \n "
" var m = L.marker([elements[1], elements[2]], {rotationAngle: elements[5], icon: icon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(popup) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" } \n "
" \n "
" else if (elements[0] == \" T \" ) \n "
" { \n "
" var points = []; \n "
" var point; \n "
" var n = 1; \n "
" var l = elements.length; \n "
" \n "
" while (n < l) \n "
" { \n "
" \t point = L.latLng(elements[n], elements[n + 1]); \n "
" \t points.push(point); \n "
" \t n += 2; \n "
" } \n "
" points.pop(); \t // null entry on end \n "
" \n "
" L.polyline(points, {color: 'black'}).addTo(layergroup); \n "
" } \n "
" } \n "
" \n "
" } \n "
" function resize() \n "
" {} \n "
" </script> \n "
" </head> \n "
" \n "
" <BODY onload=initialize() onresize='resize()'> \n "
" <div class= \" topnav \" id=menu> \n "
" <a href= \" / \" >Home</a> \n "
" <a href= \" /aprs \" >APRS Pages</a> \n "
" <a href= \" Node/NodeMenu.html \" >Node Menu</a> \n "
" <form> \n "
" <input type= \" checkbox \" id= \" aprsid \" onchange='aprs=this.checked | 0; \t myTimeout = setTimeout(Refresh, 500);'> \n "
" <label for= \" vehicle1 \" > APRS</label> \n "
" <input type= \" checkbox \" id= \" aisid \" onchange='ais=this.checked | 0; myTimeout = setTimeout(Refresh, 500);'> \n "
" <label for= \" vehicle2 \" > AIS</label> \n "
" <input type= \" checkbox \" id= \" adsbid \" onchange='adsb=this.checked | 0; myTimeout = setTimeout(Refresh, 500);'> \n "
" <label for= \" vehicle3 \" > ADSB</label> \n "
" </form> \n "
" </div> \n "
" <div id= \" map \" ></div> \n "
" </body> \n "
" </html> " ;
" <!DOCTYPE html> \n "
" <html> \n "
" <head> \n "
" <meta charset= \" utf-8 \" > \n "
" <meta name= \" viewport \" content= \" width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no \" /> \n "
" \n "
" <title>G8BPQ APRS Display</title> \n "
" \n "
" <link rel= \" stylesheet \" href= \" https://unpkg.com/leaflet@1.7.1/dist/leaflet.css \" integrity= \" sha512-xodZBNTC5n17Xt2atTPuE1HxjVMSvLVW9ocqUKLsCC5CXdbqCmblAshOMAS6/keqq/sMZMZ19scR4PsZChSR7A== \" crossorigin= \" \" /> \n "
" <script src= \" https://unpkg.com/leaflet@1.7.1/dist/leaflet.js \" integrity= \" sha512-XQoYMqMTK8LvdxXYG3nZ448hOEQiglfqkJs1NOQV44cWnUrBc8PkAOcXy20w0vlaXaVUearIOBhiXZ5V3ynxwA== \" crossorigin= \" \" ></script> \n "
" <link href= \" https://unpkg.com/maplibre-gl@2.2.1/dist/maplibre-gl.css \" rel='stylesheet' /> \n "
" <script src= \" https://unpkg.com/maplibre-gl@2.2.1/dist/maplibre-gl.js \" ></script> \n "
" <script src= \" https://unpkg.com/@maplibre/maplibre-gl-leaflet@0.0.17/leaflet-maplibre-gl.js \" ></script> \n "
" \n "
" <script src= \" https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js \" ></script> \n "
" <script src= \" leaflet.rotatedMarker.js \" ></script> \n "
" \n "
" <style type= \" text/css \" > \n "
" html, body {height: 100%; width: 100%; margin: 0;} \n "
" #map {position: absolute; top:40px; bottom: 0;width: 100%; margin: 0;} \n "
" .topnav { overflow: hidden; height: 40px; background-color: white; margin: 0;} \n "
" .topnav a {float: left; color: black; text-align: center; padding: 14px 16px; text-decoration: none; font-size: 17px;} \n "
" .topnav form{float: left; color: black; text-align: center; padding: 14px 16px; text-decoration: none; font-size: 17px;} \n "
" .popup {border: 1px solid black;margin: 0; padding: 0; font-size: 12px; min-height:16px; box-shadow: none;} \n "
" .leaflet-tooltip-left.popup::before {border-left-color: transparent;} \n "
" .leaflet-tooltip-right.popup::before {border-right-color: transparent;} \n "
" </style> \n "
" \n "
" <script> \n "
" var map; \n "
" var layergroup; \n "
" var redIcon; \n "
" var greenIcon; \n "
" var blueIcon; \n "
" var whiteIcon; \n "
" var transIcon; \n "
" var navIcon; \n "
" var sarIcon; \n "
" var planeIcon; \n "
" var greenplaneIcon; \n "
" var lat = 0; \n "
" var lon = 0; \n "
" var zoom = 2; \n "
" var ais = 0; \n "
" var adsb = 0; \n "
" var aprs = 0; \n "
" var homeLat = 0;var homeLon = 0;var homePoint; \n "
" \n "
" var myTimeout; \n "
" \n "
" var server1 = \" http://server1.g8bpq.net:7383 \" \n "
" var server2 = \" http://server2.g8bpq.net:7383 \" \n "
" \n "
" function getMap(p) \n "
" { \n "
" var gl = L.maplibreGL({style: server1 + '/styles/G8BPQ/style.json'}); \n "
" gl.addTo(p); \n "
" var maplibreMap = gl.getMaplibreMap(); \n "
" \n "
" // if load from first server fails, switch to backup \n "
" \n "
" maplibreMap.on('error', e => \n "
" { \n "
" console.log(e.error); \n "
" \n "
" if (e && e.error == 'Error: Failed to fetch') \n "
" { \n "
" console.log('failed to load from ' + server1 + ', trying ' + server2); \n "
" var gl2 = L.maplibreGL({style: server2 + '/styles/G8BPQ/style.json'}); \n "
" p.removeLayer(gl) \n "
" gl2.addTo(p); \n "
" } \n "
" }); \n "
" \n "
" p.attributionControl.addAttribution('Map data from <a href=https://www.openstreetmap.org/copyright>OpenStreetMap</a><a href=https://github.com/maplibre/maplibre-gl-leaflet> using maplibre-gl</a> <a href=https://github.com/mapbox/mapbox-gl-styles>Styles based on Mapbox gl'); \n "
" L.control.scale().addTo(p); \n "
" } \n "
" \n "
" \n "
" function initialize() \n "
" { \n "
" redIcon = L.icon({iconUrl: 'aisred.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" greenIcon = L.icon({iconUrl: 'aisgreen.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" blueIcon = L.icon({iconUrl: 'aisblue.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" whiteIcon = L.icon({iconUrl: 'aiswhite.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" transIcon = L.icon({iconUrl: 'aistrans.png',iconSize: [21, 34],iconAnchor: [11, 17],popupAnchor: [0, 0]}); \n "
" navIcon = L.icon({iconUrl: 'aisnavaid.png',iconSize: [21, 21],iconAnchor: [11, 11],popupAnchor: [0, 0]}); \n "
" sarIcon = L.icon({iconUrl: 'helicopter.png',iconSize: [31, 31],iconAnchor: [15, 15],popupAnchor: [0, 0]}); \n "
" planeIcon = L.icon({iconUrl: 'plane.png',iconSize: [39, 39],iconAnchor: [19, 19],popupAnchor: [0, 0]}); \n "
" greenplaneIcon = L.icon({iconUrl: 'greenplane.png',iconSize: [39, 39],iconAnchor: [19, 19],popupAnchor: [0, 0]}); \n "
" \n "
" lat = getCookie( \" Lat \" ); \n "
" lon = getCookie( \" Lng \" ); \n "
" \n "
" if (lat != \" \" ) \n "
" zoom = getCookie( \" Zoom \" ); \n "
" \t \n "
" aprs = getCookie( \" aprs \" ); \n "
" ais = getCookie( \" ais \" ); \n "
" adsb = getCookie( \" adsb \" ); \n "
" \n "
" if (aprs == 0 && ais == 0 && adsb == 0) \n "
" \t aprs = 1; if (aprs == 1) \n "
" document.getElementById( \" aprsid \" ).checked = true; \n "
" if (ais == 1) \n "
" document.getElementById( \" aisid \" ).checked = true; \n "
" if (adsb == 1) \n "
" document.getElementById( \" adsbid \" ).checked = true; \n "
" \n "
" map = L.map('map', {zoomSnap: 0, zoomDelta: 0.25, wheelPxPerZoomLevel: 180}).setView([lat, lon], zoom); \n "
" \n "
" map.on('moveend zoomend', function() \n "
" { \n "
" clearTimeout(myTimeout); \n "
" myTimeout = setTimeout(Refresh, 500); \n "
" }); \n "
" \n "
" getMap(map) \n "
" layergroup = L.layerGroup().addTo(map); \n "
" } \n "
" \n "
" function getCookie(cname) \n "
" { \n "
" var name = cname + \" = \" ; \n "
" var decodedCookie = decodeURIComponent(document.cookie); \n "
" var ca = decodedCookie.split(';'); \n "
" \t \n "
" for(var i = 0; i < ca.length; i++) \n "
" { \n "
" var c = ca[i]; \n "
" while (c.charAt(0) == ' ') \n "
" { \n "
" c = c.substring(1); \n "
" } \n "
" if (c.indexOf(name) == 0) \n "
" return c.substring(name.length, c.length); \n "
" } \n "
" return \" \" ; \n "
" } \n "
" \n "
" \n "
" // Refresh map every 60 seconds \n "
" \n "
" setInterval( \" Refresh() \" , 60000 ); \n "
" \n "
" function Refresh( ) \n "
" { \n "
" var latlng = map.getCenter(); \n "
" zoom = map.getZoom(); \n "
" \n "
" lat = latlng.lat; \n "
" lon = latlng.lng \n "
" \n "
" document.cookie = \" Lat= \" + lat; \n "
" document.cookie = \" Lng= \" + lon; \n "
" document.cookie = \" Zoom= \" + zoom; \n "
" \n "
" \t document.cookie = \" aprs= \" + aprs; \n "
" \t document.cookie = \" ais= \" + ais; \n "
" \t document.cookie = \" adsb= \" + adsb; \n "
" \n "
" GetData(); \n "
" } \n "
" \n "
" \n "
" function GetData() \n "
" { \n "
" var N = map.getBounds().getNorth(); \n "
" var S = map.getBounds().getSouth(); \n "
" var W = map.getBounds().getWest(); \n "
" var E = map.getBounds().getEast(); \n "
" $.ajax({url: \" aprsdata.txt? \" + N + '|' + S + '|' + W + '|' + E + '|' + aprs + '|' + ais + '|' + adsb, cache: false}) \n "
" .done(function(Nodes){processData(Nodes);}) \t \n "
" .fail(function(jqXHR, textStatus, errorThrown){alert( \" Failed to load aprs data \" );}) \n "
" ; \n "
" } \n "
" \n "
" function processData(Nodes) \n "
" { \n "
" var i = 0; \n "
" layergroup.clearLayers(); \n "
" \n "
" var lines = Nodes.split( \" | \" ); \n "
" \n "
" while (i < lines.length) \n "
" { \n "
" if (lines[i].length < 5) \n "
" { \n "
" i++; \n "
" continue; \n "
" } \n "
" \t \n "
" var elements = lines[i].split( \" , \" ); \n "
" i++; \t \n "
" \t \n "
" if (elements[0] == \" H \" ) \t \t \t \t // Home Position \n "
" { homeLat = elements[1]; homeLon = elements[2]; homePoint = L.latLng(homeLat, homeLon); var m = L.circleMarker([elements[1], elements[2]], {radius: 6, color: '#000000', fillOpacity: 0.3}) \n "
" .addTo(layergroup) \n "
" .bindPopup(elements[3]) \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" if (lat == 0 || lat == \" \" ) \t \t // Not Set \n "
" map.setView([elements[1], elements[2]], 8); \n "
" } \n "
" \n "
" if (elements[0] == \" N \" ) \t // Navaid \n "
" { \n "
" var m = L.marker([elements[1], elements[2]], {rotationAngle: 0, icon: navIcon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(elements[3]) \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" \n "
" } \n "
" else if (elements[0] == \" A \" ) \t // APRS \n "
" { \n "
" var Icon = L.icon({iconUrl: 'Icon' + elements[5] + '.png',iconSize: [22, 22],iconAnchor: [11, 11],popupAnchor: [0, 0]}); \n "
" \n "
" var m = L.marker([elements[1], elements[2]], {rotationAngle: 0, icon: Icon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(elements[4], {minWidth: 280, maxWidth: 500}) \n "
" .bindTooltip(elements[3], {className: 'popup', permanent: true, direction: 'right', offset: [10, 0]}).openTooltip() \t \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" \n "
" } \n "
" else if (elements[0] == \" V \" ) // Vessel \n "
" { \n "
" var icon; \n "
" \n "
" var dist = homePoint.distanceTo([elements[1], elements[2]]) / 1609.34; \n "
" var popup = elements[3] + '<br>Distance ' + dist.toFixed(0) + ' Miles'; if (elements[6] < 900) \n "
" \t icon = blueIcon; \n "
" else if (elements[6] < 1800) \n "
" \t icon = redIcon; \n "
" else \n "
" \t icon = whiteIcon; \n "
" \t \n "
" var m = L.marker([elements[1], elements[2]], {rotationAngle: elements[4], icon: icon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(popup) \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" } \n "
" \n "
" else if (elements[0] == \" S \" ) // SAR Aircraft \n "
" { \n "
" var m = L.marker([elements[1], elements[2]], {icon: sarIcon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(elements[3]) \n "
" .on('click', function (e) {alert(this.getLatLng());}) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" } \n "
" \n "
" else if (elements[0] == \" P \" ) \n "
" { \n "
" var dist = homePoint.distanceTo([elements[1], elements[2]]) / 1609.34; \n "
" var popup = elements[3] + '<br>Distance ' + dist.toFixed(0) + ' Miles'; var icon; \n "
" \n "
" if (elements[7] < 120) \n "
" \t icon = greenplaneIcon; \n "
" else \n "
" \t icon = planeIcon; \n "
" \n "
" var m = L.marker([elements[1], elements[2]], {rotationAngle: elements[5], icon: icon}) \n "
" .addTo(layergroup) \n "
" .bindPopup(popup) \n "
" .on('mouseover', function (e) {this.openPopup();}) \n "
" .on('mouseout', function (e) {this.closePopup();}); \n "
" } \n "
" \n "
" else if (elements[0] == \" T \" ) \n "
" { \n "
" var points = []; \n "
" var point; \n "
" var n = 1; \n "
" var l = elements.length; \n "
" \n "
" while (n < l) \n "
" { \n "
" \t point = L.latLng(elements[n], elements[n + 1]); \n "
" \t points.push(point); \n "
" \t n += 2; \n "
" } \n "
" points.pop(); \t // null entry on end \n "
" \n "
" L.polyline(points, {color: 'black'}).addTo(layergroup); \n "
" } \n "
" } \n "
" \n "
" } \n "
" function resize() \n "
" {} \n "
" </script> \n "
" </head> \n "
" \n "
" <BODY onload=initialize() onresize='resize()'> \n "
" <div class= \" topnav \" id=menu> \n "
" <a href= \" / \" >Home</a> \n "
" <a href= \" /aprs \" >APRS Pages</a> \n "
" <a href= \" Node/NodeMenu.html \" >Node Menu</a> \n "
" <form> \n "
" <input type= \" checkbox \" id= \" aprsid \" onchange='aprs=this.checked | 0; \t myTimeout = setTimeout(Refresh, 500);'> \n "
" <label for= \" vehicle1 \" > APRS</label> \n "
" <input type= \" checkbox \" id= \" aisid \" onchange='ais=this.checked | 0; myTimeout = setTimeout(Refresh, 500);'> \n "
" <label for= \" vehicle2 \" > AIS</label> \n "
" <input type= \" checkbox \" id= \" adsbid \" onchange='adsb=this.checked | 0; myTimeout = setTimeout(Refresh, 500);'> \n "
" <label for= \" vehicle3 \" > ADSB</label> \n "
" </form> \n "
" </div> \n "
" <div id= \" map \" ></div> \n "
" </body> \n "
" </html> " ;
return _strdup ( Msg ) ; ;
}