@@ -1373,7 +1373,7 @@ function updateVehicleInfo(vcallsign, newPosition) {
1373
1373
'<img class="' + ( ( vehicle . vehicle_type == "car" ) ?'car' :'' ) + '" src="' + image + '" />' +
1374
1374
'<span class="vbutton path ' + ( ( vehicle . polyline_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '"' + ' style="top:' + ( vehicle . image_src_size [ 1 ] + 55 ) + 'px">Path</span>' +
1375
1375
( ( 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>' : '' ) +
1377
1377
'<div class="left">' +
1378
1378
'<dl>' ;
1379
1379
//mobile
@@ -1385,7 +1385,7 @@ function updateVehicleInfo(vcallsign, newPosition) {
1385
1385
'<img class="' + ( ( vehicle . vehicle_type == "car" ) ?'car' :'' ) + '" src="' + image + '" />' +
1386
1386
'<span class="vbutton path ' + ( ( vehicle . polyline_visible ) ? 'active' : '' ) + '" data-vcallsign="' + vcallsign + '"' + ' style="top:55px">Path</span>' +
1387
1387
( ( 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>' : '' ) +
1389
1389
'<div class="left">' +
1390
1390
'<dl>' ;
1391
1391
var b = '</dl>' +
@@ -1439,8 +1439,39 @@ function updateVehicleInfo(vcallsign, newPosition) {
1439
1439
return true ;
1440
1440
}
1441
1441
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
+
1442
1471
function generateHysplit ( callsign ) {
1472
+ hideHysplit ( callsign )
1443
1473
var vehicle = vehicles [ callsign ] ;
1474
+ vehicle . prediction_hysplit_visible = true ;
1444
1475
for ( var alt = - 1000 ; alt <= 1000 ; alt += 100 ) {
1445
1476
createHysplit ( callsign , alt ) ;
1446
1477
}
@@ -1469,12 +1500,17 @@ function createHysplit(callsign, adjustment) {
1469
1500
url : url ,
1470
1501
dataType : "json" ,
1471
1502
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 ] ;
1473
1505
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 ) ;
1475
1508
}
1476
1509
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
+ }
1478
1514
}
1479
1515
} ) ;
1480
1516
}
@@ -2389,6 +2425,8 @@ function addPosition(position) {
2389
2425
prediction_launch : null ,
2390
2426
prediction_launch_polyline : null ,
2391
2427
prediction_hysplit : { } ,
2428
+ prediction_hysplit_visible : false ,
2429
+ prediction_hysplit_age : 0 ,
2392
2430
ascent_rate : 0.0 ,
2393
2431
horizontal_rate : 0.0 ,
2394
2432
max_alt : parseFloat ( position . gps_alt ) ,
@@ -2456,6 +2494,9 @@ function addPosition(position) {
2456
2494
if ( map . hasLayer ( vehicle_info [ "prediction_burst" ] ) ) {
2457
2495
map . removeLayer ( vehicle_info [ "prediction_burst" ] ) ;
2458
2496
}
2497
+ for ( var prediction in vehicle_info [ "prediction_hysplit" ] ) {
2498
+ map . removeLayer ( vehicle_info [ "prediction_hysplit" ] [ prediction ] ) ;
2499
+ }
2459
2500
try {
2460
2501
for ( var p in vehicle_info . polyline ) {
2461
2502
map . removeLayer ( vehicle_info . polyline [ p ] ) ;
0 commit comments