From 335f311d299d44a6de98da1424794459f4708fd2 Mon Sep 17 00:00:00 2001 From: Mark Jessop Date: Sat, 13 Oct 2018 22:14:10 +1030 Subject: [PATCH] Add ability to grab other chase car positions from Habitat. --- static/css/chasemapper.css | 18 +++- static/img/car-green-flip.png | Bin 0 -> 11051 bytes static/img/car-green.png | Bin 0 -> 11231 bytes static/img/car-red-flip.png | Bin 0 -> 11028 bytes static/img/car-red.png | Bin 0 -> 11132 bytes static/img/car-yellow-flip.png | Bin 0 -> 11212 bytes static/img/car-yellow.png | Bin 0 -> 11385 bytes static/js/habitat.js | 178 +++++++++++++++++++++++++++++++++ static/js/utils.js | 21 ++++ templates/index.html | 27 ++++- 10 files changed, 240 insertions(+), 4 deletions(-) create mode 100644 static/img/car-green-flip.png create mode 100644 static/img/car-green.png create mode 100644 static/img/car-red-flip.png create mode 100644 static/img/car-red.png create mode 100644 static/img/car-yellow-flip.png create mode 100644 static/img/car-yellow.png create mode 100644 static/js/habitat.js diff --git a/static/css/chasemapper.css b/static/css/chasemapper.css index 769bf39..3cd9212 100644 --- a/static/css/chasemapper.css +++ b/static/css/chasemapper.css @@ -92,4 +92,20 @@ html, body, #map { width:45px; height:45px; font-size:20px; -} \ No newline at end of file +} + + +.custom_label { + background: rgba(0, 0, 0, 0) !important; + border: none !important; + font-size: 12px; + font-weight: bold; + color: black; + text-shadow: + -1px -1px 2px #FFF, + 1px -1px 2px #FFF, + -1px 1px 2px #FFF, + 1px 1px 2px #FFF; + box-shadow: none !important; +} + diff --git a/static/img/car-green-flip.png b/static/img/car-green-flip.png new file mode 100644 index 0000000000000000000000000000000000000000..f1576739152e67cdd0be1192d7bbcdd943366df9 GIT binary patch literal 11051 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 literal 0 HcmV?d00001 diff --git a/static/img/car-green.png b/static/img/car-green.png new file mode 100644 index 0000000000000000000000000000000000000000..7645e785195d6aee9cc7508a2f6af042aee870aa GIT binary patch literal 11231 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 G!u}7D!e0{r literal 0 HcmV?d00001 diff --git a/static/img/car-red-flip.png b/static/img/car-red-flip.png new file mode 100644 index 0000000000000000000000000000000000000000..e9e9474088c0494eb1acabcfe042f04642d97009 GIT binary patch literal 11028 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 Ll0=P|@wfj2vOI|8 literal 0 HcmV?d00001 diff --git a/static/img/car-yellow-flip.png b/static/img/car-yellow-flip.png new file mode 100644 index 0000000000000000000000000000000000000000..bdb84da19d6730c45182d6143f35a857d7b46122 GIT binary patch literal 11212 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 literal 0 HcmV?d00001 diff --git a/static/img/car-yellow.png b/static/img/car-yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..8664f06e2d8182f380dae353553d5a2d3ddbd691 GIT binary patch literal 11385 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 Fe*o`DBIy7C literal 0 HcmV?d00001 diff --git a/static/js/habitat.js b/static/js/habitat.js new file mode 100644 index 0000000..04726ac --- /dev/null +++ b/static/js/habitat.js @@ -0,0 +1,178 @@ +// Habitat data scraping functions + +// URL to scrape recent vehicle position data from. +// TODO: Allow adjustment of the number of positions to request. +var spacenearus_url = "http://spacenear.us/tracker/datanew.php?mode=2hours&type=positions&format=json&max_positions=100&position_id="; +// Record of the last position ID, so we only request new data. +var spacenearus_last_position_id = 0; +// Keep track of whether an asynchronous AJAX request is in progress. +// Not really sure if this is necessary. +var snear_request_running = false; + +// Store for vehicle data. +var habitat_vehicles = {}; +// Only add chase cars which are (initially) within this range limit (km). +var habitat_vehicle_max_range = 800.0; + + +function process_habitat_vehicles(data){ + // Check we have a 'valid' response to process. + if (data === null || + !data.positions || + !data.positions.position || + !data.positions.position.length) { + snear_request_running = false; + return; + } + + data.positions.position.forEach(function(position){ + // Update the highest position ID, so we don't request old data. + if (position.position_id > spacenearus_last_position_id){ + spacenearus_last_position_id = position.position_id; + } + + var vcallsign = position.vehicle; + + // Check this isn't our callsign. + // If it is, don't process it. + if (vcallsign.startsWith(chase_config.habitat_call)){ + return; + } + + // Determine if the vehicle is a chase car. + // This is denoted by _chase at the end of the callsign. + if(vcallsign.search(/(chase)/i) != -1) { + + var v_lat = parseFloat(position.gps_lat); + var v_lon = parseFloat(position.gps_lon); + var v_alt = parseFloat(position.gps_alt); + + // If the vehicle is already known to us, then update it position. + // Update any existing entries (even if the range is above the threshold) + if (habitat_vehicles.hasOwnProperty(vcallsign)){ + + // Only update if the position ID of this position is newer than that last seen. + if (habitat_vehicles[vcallsign].position_id < position.position_id){ + //console.log("Updating: " + vcallsign); + // Update the position ID. + habitat_vehicles[vcallsign].position_id = position.position_id; + + // Since we don't always get a heading with the vehicle position, calculate it. + var old_v_pos = {lat:habitat_vehicles[vcallsign].latest_data[0], + lon: habitat_vehicles[vcallsign].latest_data[1], + alt:habitat_vehicles[vcallsign].latest_data[2]}; + var new_v_pos = {lat: v_lat, lon:v_lon, alt:v_alt}; + habitat_vehicles[vcallsign].heading = calculate_lookangles(old_v_pos, new_v_pos).bearing; + + // Update the position data. + habitat_vehicles[vcallsign].latest_data = [v_lat, v_lon, v_alt]; + + // Update the marker position. + habitat_vehicles[vcallsign].marker.setLatLng(habitat_vehicles[vcallsign].latest_data).update(); + + // Rotate/replace the icon to match the bearing. + var _car_heading = habitat_vehicles[vcallsign].heading - 90.0; + if (_car_heading<=90.0){ + habitat_vehicles[vcallsign].marker.setIcon(habitat_car_icons[habitat_vehicles[vcallsign].colour]); + habitat_vehicles[vcallsign].marker.setRotationAngle(_car_heading); + }else{ + // We are travelling West - we need to use the flipped car icon. + _car_heading = _car_heading - 180.0; + habitat_vehicles[vcallsign].marker.setIcon(habitat_car_icons_flipped[habitat_vehicles[vcallsign].colour]); + habitat_vehicles[vcallsign].marker.setRotationAngle(_car_heading); + } + return; + } + + + // No need to go any further. + + return; + } + + // Otherwise, we need to decide if we're going to add it or not. + // Determine the vehicle distance from our current position. + var v_pos = {lat: v_lat, lon:v_lon, alt:v_alt}; + if (chase_car_position.marker === "NONE"){ + var my_pos = {lat:chase_config.default_lat, lon:chase_config.default_lon, alt:0}; + }else{ + var my_pos = {lat:chase_car_position.latest_data[0], lon:chase_car_position.latest_data[1], alt:chase_car_position.latest_data[2]}; + } + var v_range = calculate_lookangles(my_pos, v_pos).range/1000.0; + + // If the range is less than the threshold, add it to our list of chase vehicles. + if(v_range < habitat_vehicle_max_range){ + //console.log("Adding: " + vcallsign); + habitat_vehicles[vcallsign] = {}; + // Initialise a few default values + habitat_vehicles[vcallsign].heading = 90; + habitat_vehicles[vcallsign].latest_data = [v_lat, v_lon, v_alt]; + habitat_vehicles[vcallsign].position_id = position.position_id; + + // Get an index for the car icon. This is incremented for each vehicle, + // giving each a different colour. + habitat_vehicles[vcallsign].colour = car_colour_values[car_colour_idx]; + car_colour_idx = (car_colour_idx+1)%car_colour_values.length; + + // Create marker + habitat_vehicles[vcallsign].marker = L.marker(habitat_vehicles[vcallsign].latest_data, + {title:vcallsign, + icon: habitat_car_icons[habitat_vehicles[vcallsign].colour], + rotationOrigin: "center center"}) + .addTo(map); + // Keep our own record of if this marker has been added to a map, + // as we shouldn't be using the private _map property of the marker object. + habitat_vehicles[vcallsign].onmap = true; + + // Add tooltip, with custom CSS which removes all tooltip borders, and adds a text shadow. + habitat_vehicles[vcallsign].marker.bindTooltip(vcallsign, + {permanent: true, + direction: 'center', + offset:[0,25], + className:'custom_label'}).openTooltip(); + } + } + + }); + + snear_request_running = false; +} + +// Request the latest 100 vehicle positions from spacenear.us +function get_habitat_vehicles(){ + var snear_request_url = spacenearus_url + spacenearus_last_position_id; + + if(!snear_request_running){ + snear_request_running = true; + $.ajax({ + url: snear_request_url, + dataType: 'json', + timeout: 15000, + async: true, // Yes, this is deprecated... + success: function(data) { + process_habitat_vehicles(data); + } + }); + } +} + + +// Show/Hide all vehicles. +function show_habitat_vehicles(){ + var state = document.getElementById("showOtherCars").checked; + for (_car in habitat_vehicles){ + // Add to map, if its not already on there. + if(state){ + if(!habitat_vehicles[_car].onmap){ + habitat_vehicles[_car].marker.addTo(map); + habitat_vehicles[_car].onmap = true; + } + } else{ + if(habitat_vehicles[_car].onmap){ + habitat_vehicles[_car].marker.remove(); + habitat_vehicles[_car].onmap = false; + } + } + } + +} \ No newline at end of file diff --git a/static/js/utils.js b/static/js/utils.js index f14496a..9c9cf71 100644 --- a/static/js/utils.js +++ b/static/js/utils.js @@ -42,12 +42,14 @@ var burstIcon = L.icon({ iconAnchor: [10,10] }); +// Abort prediction icon (red) var abortIcon = L.icon({ iconUrl: "/static/img/target-red.png", iconSize: [20,20], iconAnchor: [10,10] }); +// Icons for our own chase car. var carIcon = L.icon({ iconUrl: "/static/img/car-blue.png", iconSize: [55,25], @@ -60,6 +62,25 @@ var carIconFlip = L.icon({ iconAnchor: [27,12] // Revisit this }); +// Habitat (or APRS?) sourced chase car icons. +var car_colour_values = ['red', 'green', 'yellow']; +var car_colour_idx = 0; +var habitat_car_icons = {}; +var habitat_car_icons_flipped = {}; +for (_col in car_colour_values){ + habitat_car_icons[car_colour_values[_col]] = L.icon({ + iconUrl: "/static/img/car-"+car_colour_values[_col]+".png", + iconSize: [55,25], + iconAnchor: [27,12] // Revisit this + }); + + habitat_car_icons_flipped[car_colour_values[_col]] = L.icon({ + iconUrl: "/static/img/car-"+car_colour_values[_col]+"-flip.png", + iconSize: [55,25], + iconAnchor: [27,12] // Revisit this + }); +} + // calculates look angles between two points // format of a and b should be {lon: 0, lat: 0, alt: 0} diff --git a/templates/index.html b/templates/index.html index 14fe8e6..b04278e 100644 --- a/templates/index.html +++ b/templates/index.html @@ -30,6 +30,7 @@ + @@ -53,7 +54,8 @@ pred_update_rate: 15, pred_model: 'Disabled', show_abort: true, // Show a prediction of an 'abort' paths (i.e. if the balloon bursts *now*) - offline_tile_layers: [] + offline_tile_layers: [], + habitat_call: 'N0CALL' }; // Object which will contain balloon markers and traces. @@ -87,9 +89,15 @@ // Other markers which may be added. (TBD, probably other chase car positions via the LoRa payload?) var misc_markers = {}; + // Habitat chase cars + var habitat_chase_cars = {}; + var updateSettings; var setChaseCarTrack; + // Leaflet map instance. + var map; + $(document).ready(function() { // Use the 'chasemapper' namespace for all of our traffic namespace = '/chasemapper'; @@ -209,7 +217,7 @@ // Sonde position Map // Setup a basic Leaflet map - var map = L.map('map').setView([chase_config.default_lat, chase_config.default_lon], 8); + map = L.map('map').setView([chase_config.default_lat, chase_config.default_lon], 8); // Add OSM Map. var osm_map = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { @@ -776,6 +784,7 @@ }); + // Data age update. var age_update_rate = 500; window.setInterval(function () { // Update the data age displays. @@ -814,7 +823,16 @@ }else{ $("#pred_age").text("Predictions: " + pred_data_age.toFixed(1)+"s"); } - }, age_update_rate); + }, age_update_rate); + + + // Habitat Chase Car Position Grabber + var habitat_update_rate = 20000; + window.setInterval(function(){ + if(document.getElementById("showOtherCars").checked){ + get_habitat_vehicles(); + } + }, habitat_update_rate); }); @@ -885,6 +903,9 @@

Habitat

+
+ Show Nearby Chase-Cars: +
Enable Chase-Car Position Upload