@@ -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+
14421471function 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