Skip to content

Commit 0ec6ef4

Browse files
authored
Merge pull request projecthorus#5 from LukePrior/main
hysplit fixes
2 parents b191d51 + f50ddaf commit 0ec6ef4

File tree

3 files changed

+68
-5
lines changed

3 files changed

+68
-5
lines changed

css/main.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,6 +444,12 @@ header .search form input[type='submit'] {
444444
text-align: center;
445445
}
446446

447+
#main .row .data .sbutton.active {
448+
background-color: #33b5e5;
449+
border: 1px solid #33b5e5;
450+
color: #fff;
451+
}
452+
447453
#main .row .data .vbutton.active {
448454
background-color: #33b5e5;
449455
border: 1px solid #33b5e5;

js/app.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,22 @@ $(window).ready(function() {
523523
}
524524
});
525525

526+
$("#main").on('click','.row .data .sbutton.hysplit', function(event) {
527+
event.stopPropagation();
528+
529+
var elm = $(this);
530+
var name = elm.attr('data-vcallsign');
531+
532+
if(elm.hasClass("active")) {
533+
elm.removeClass('active');
534+
processHysplit(name, false);
535+
}
536+
else {
537+
elm.addClass('active');
538+
processHysplit(name, true);
539+
}
540+
});
541+
526542
// reset nite-overlay and timebox when mouse goes out of the graph box
527543
$("#telemetry_graph").on('mouseout','.holder', function() {
528544
if(plot_crosshair_locked) return;

js/tracker.js

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1373,7 +1373,7 @@ function updateVehicleInfo(vcallsign, newPosition) {
13731373
'<img class="'+((vehicle.vehicle_type=="car")?'car':'')+'" src="'+image+'" />' +
13741374
'<span class="vbutton path '+((vehicle.polyline_visible) ? 'active' : '')+'" data-vcallsign="'+vcallsign+'"' + ' style="top:'+(vehicle.image_src_size[1]+55)+'px">Path</span>' +
13751375
((vehicle.vehicle_type!="car") ? '<span class="sbutton" onclick="shareVehicle(\'' + vcallsign + '\')" style="top:'+(vehicle.image_src_size[1]+85)+'px">Share</span>' : '') +
1376-
((vehicle.vehicle_type!="car" && newPosition.gps_alt > 1000 && vehicle.ascent_rate < 1) ? '<span class="sbutton" onclick="generateHysplit(\'' + vcallsign + '\')" style="top:'+(vehicle.image_src_size[1]+115)+'px">Hysplit</span>' : '') +
1376+
((vehicle.vehicle_type!="car" && newPosition.gps_alt > 1000 && vehicle.ascent_rate < 1) ? '<span class="sbutton hysplit '+((vehicle.prediction_hysplit_visible) ? 'active' : '')+'" data-vcallsign="' + vcallsign + '" style="top:'+(vehicle.image_src_size[1]+115)+'px">Hysplit</span>' : '') +
13771377
'<div class="left">' +
13781378
'<dl>';
13791379
//mobile
@@ -1385,7 +1385,7 @@ function updateVehicleInfo(vcallsign, newPosition) {
13851385
'<img class="'+((vehicle.vehicle_type=="car")?'car':'')+'" src="'+image+'" />' +
13861386
'<span class="vbutton path '+((vehicle.polyline_visible) ? 'active' : '')+'" data-vcallsign="'+vcallsign+'"' + ' style="top:55px">Path</span>' +
13871387
((vehicle.vehicle_type!="car") ? '<span class="sbutton" onclick="shareVehicle(\'' + vcallsign + '\')" style="top:85px">Share</span>' : '') +
1388-
((vehicle.vehicle_type!="car" && newPosition.gps_alt > 1000 && vehicle.ascent_rate < 1) ? '<span class="sbutton" onclick="generateHysplit(\'' + vcallsign + '\')" style="top:115px">Hysplit</span>' : '') +
1388+
((vehicle.vehicle_type!="car" && newPosition.gps_alt > 1000 && vehicle.ascent_rate < 1) ? '<span class="sbutton hysplit '+((vehicle.prediction_hysplit_visible) ? 'active' : '')+'" data-vcallsign="' + vcallsign + '" style="top:115px">Hysplit</span>' : '') +
13891389
'<div class="left">' +
13901390
'<dl>';
13911391
var b = '</dl>' +
@@ -1439,8 +1439,39 @@ function updateVehicleInfo(vcallsign, newPosition) {
14391439
return true;
14401440
}
14411441

1442+
function processHysplit(callsign, show) {
1443+
var vehicle = vehicles[callsign];
1444+
if (show) {
1445+
if (Object.keys(vehicle["prediction_hysplit"]).length > 0 && vehicle["prediction_hysplit_age"] == vehicle.curr_position.gps_time) {
1446+
showHysplit(callsign);
1447+
} else {
1448+
generateHysplit(callsign);
1449+
}
1450+
} else {
1451+
hideHysplit(callsign);
1452+
}
1453+
}
1454+
1455+
function showHysplit(callsign) {
1456+
var vehicle = vehicles[callsign];
1457+
vehicle.prediction_hysplit_visible = true;
1458+
for(var prediction in vehicle["prediction_hysplit"]) {
1459+
map.addLayer(vehicle["prediction_hysplit"][prediction]);
1460+
}
1461+
}
1462+
1463+
function hideHysplit(callsign) {
1464+
var vehicle = vehicles[callsign];
1465+
vehicle.prediction_hysplit_visible = false;
1466+
for(var prediction in vehicle["prediction_hysplit"]) {
1467+
map.removeLayer(vehicle["prediction_hysplit"][prediction]);
1468+
}
1469+
}
1470+
14421471
function generateHysplit(callsign) {
1472+
hideHysplit(callsign)
14431473
var vehicle = vehicles[callsign];
1474+
vehicle.prediction_hysplit_visible = true;
14441475
for (var alt = -1000; alt <= 1000; alt+=100) {
14451476
createHysplit(callsign, alt);
14461477
}
@@ -1469,12 +1500,17 @@ function createHysplit(callsign, adjustment) {
14691500
url: url,
14701501
dataType: "json",
14711502
success: function(data) {
1472-
var path = [[vehicle.curr_position.gps_lat, vehicle.curr_position.gps_lon]];
1503+
var start = new L.LatLng(vehicle.curr_position.gps_lat, vehicle.curr_position.gps_lon);
1504+
var path = [start];
14731505
for (let point in data.prediction[1].trajectory) {
1474-
path.push([data.prediction[1].trajectory[point].latitude, data.prediction[1].trajectory[point].longitude]);
1506+
var position = new L.LatLng(data.prediction[1].trajectory[point].latitude, data.prediction[1].trajectory[point].longitude)
1507+
path.push(position);
14751508
}
14761509
vehicle.prediction_hysplit[adjustment] = new L.Wrapped.Polyline(path);
1477-
vehicle.prediction_hysplit[adjustment].addTo(map)
1510+
vehicle.prediction_hysplit_age = vehicle.curr_position.gps_time;
1511+
if (vehicle.prediction_hysplit_visible) {
1512+
vehicle.prediction_hysplit[adjustment].addTo(map);
1513+
}
14781514
}
14791515
});
14801516
}
@@ -2389,6 +2425,8 @@ function addPosition(position) {
23892425
prediction_launch: null,
23902426
prediction_launch_polyline: null,
23912427
prediction_hysplit: {},
2428+
prediction_hysplit_visible: false,
2429+
prediction_hysplit_age: 0,
23922430
ascent_rate: 0.0,
23932431
horizontal_rate: 0.0,
23942432
max_alt: parseFloat(position.gps_alt),
@@ -2456,6 +2494,9 @@ function addPosition(position) {
24562494
if (map.hasLayer(vehicle_info["prediction_burst"])) {
24572495
map.removeLayer(vehicle_info["prediction_burst"]);
24582496
}
2497+
for(var prediction in vehicle_info["prediction_hysplit"]) {
2498+
map.removeLayer(vehicle_info["prediction_hysplit"][prediction]);
2499+
}
24592500
try {
24602501
for(var p in vehicle_info.polyline) {
24612502
map.removeLayer(vehicle_info.polyline[p]);

0 commit comments

Comments
 (0)