@@ -28,7 +28,7 @@ var map = null;
2828/////var lastObj = { obj: null, marker: null, /*no longer used: */pred: null, land: null };
2929var lastMarker = null ;
3030
31- var mypos = { lat : 48.56 , lon : 13.43 , hdop : 25 } ;
31+ var mypos = { lat : 48.56 , lon : 13.43 , hdop : 25 , alt : 480 } ;
3232var myposMarker = null ;
3333
3434var ballonIcon , landIcon , burstIcon ;
@@ -380,17 +380,19 @@ function onDeviceReady() {
380380 ttgoStatus = L . easyButton ( {
381381 ttgourl : "http://192.168.42.1" ,
382382 states : [ { stateName : 'offline' ,
383- icon : '<span class="ttgostatus">' + crossMark + '</span>'
383+ //icon: '<span class="ttgostatus">' + crossMark + '</span>'
384+ icon : '<img width=24 height=24 src="img/ttgooff.png"/>'
384385 , onClick : function ( btn , map ) { /* just for testing btn.state('online');*/ }
385386 } ,
386387 { stateName : 'online' ,
387- icon : '<span style="color: transparent; text-shadow: 0 0 0 #009900; font-size:15pt" class="ttgostatus">' + checkMark + '</span>' ,
388+ //icon: '<span style="color: transparent; text-shadow: 0 0 0 #009900; font-size:15pt" class="ttgostatus">' + checkMark + '</span>',
389+ icon : '<img width=24 height=24 src="img/ttgoon.png"/>' ,
388390 onClick : function ( btn , map ) {
389391 var app = cordova . InAppBrowser . open ( btn . ttgourl , '_blank' , "location=yes,beforeload=yes" ) ;
390392 app . addEventListener ( "loadstart" , function ( e ) {
391393 if ( e . url . startsWith ( "geo:" ) ) {
392394 //alert("external: "+e.url);
393- RdzWx . showmap ( e . url ) ;
395+ RdzWx . showmap ( e . url , function ( ) { } ) ;
394396 app . close ( ) ;
395397 }
396398 } ) ;
@@ -402,7 +404,6 @@ function onDeviceReady() {
402404 ttgoStatus . state ( 'offline' ) ;
403405 ttgoStatus . addTo ( map ) ;
404406
405- // '<span class="ttgosttus">✅</span>', )
406407 L . control . mousePosition ( { position : 'bottomleft' , emptyString : '' } ) . addTo ( map ) ;
407408
408409
@@ -444,6 +445,15 @@ function onDeviceReady() {
444445 } ) ;
445446 myposMarker . addTo ( map ) ;
446447 updateMypos ( mypos ) ;
448+ myposMarker . bindPopup ( function ( lay ) {
449+ var alt = lay . getLatLng ( ) . alt ;
450+ if ( ! alt ) alt = 0 ;
451+ return '<div class="pop-header"><img src="css/images/marker-icon.png"/><h4> Current position </h4></div>' +
452+ '<p>Lat: ' + lay . getLatLng ( ) . lat . toFixed ( 5 ) + '<br>' +
453+ 'Lon: ' + lay . getLatLng ( ) . lng . toFixed ( 5 ) + '<br>' +
454+ 'Altutide: ' + alt + '</p>' +
455+ '<p>HDOP: ' + ( lay . hdop > 0 ? lay . hdop : 'no GPS fix' ) + '</p>' ;
456+ } ) ;
447457
448458 document . addEventListener ( "pause" , onPause ) ;
449459 document . addEventListener ( "resume" , onResume ) ;
@@ -466,7 +476,7 @@ function onPause() {
466476 if ( ttgoStatus . state ( ) == 'offline' ) {
467477 console . log ( "onPause(): TTGO is offline, stopping all activities" ) ;
468478 window . localStorage . setItem ( 'lastgps' , JSON . stringify ( mypos ) ) ;
469- RdzWx . stop ( function ( ) { } ) ;
479+ RdzWx . stop ( "" , function ( ) { } ) ;
470480 } else {
471481 console . log ( "onPause(): TTGO is online, keeping activities running in background" ) ;
472482 }
@@ -481,7 +491,7 @@ function onResume() {
481491function onBackButton ( ) {
482492 console . log ( "onBackButton(): Exit" ) ;
483493 window . localStorage . setItem ( 'lastgps' , JSON . stringify ( mypos ) ) ;
484- RdzWx . stop ( function ( ) { } ) ;
494+ RdzWx . stop ( "" , function ( ) { } ) ;
485495 navigator . app . exitApp ( ) ; // note: this will also call onPause()
486496}
487497
@@ -545,11 +555,11 @@ function getPrediction(refobj) {
545555 var tParams = {
546556 "launch_latitude" : refobj . obj . lat ,
547557 "launch_longitude" : refobj . obj . lon ,
548- "launch_altitude" : refobj . obj . alt ,
558+ "launch_altitude" : refobj . obj . alt . toFixed ( 1 ) ,
549559 "launch_datetime" : new Date ( ) . toISOString ( ) . split ( '.' ) [ 0 ] + 'Z' ,
550560 "ascent_rate" : asc ,
551561 "descent_rate" : desc ,
552- "burst_altitude" : refobj . obj . alt + 2 ,
562+ "burst_altitude" : ( refobj . obj . alt + 2 ) . toFixed ( 1 ) ,
553563 "profile" : "standard_profile" ,
554564 }
555565 var vs = refobj . obj . vs ;
@@ -593,7 +603,7 @@ function getPrediction(refobj) {
593603 separator : true
594604 } , {
595605 text : "Export to map app" ,
596- callback : function ( e ) { ll = refobj . land . getLatLng ( ) ; uri = "geo:0:0?q=" + ll . lat + "," + ll . lng + "(X-" + refobj . obj . id + ")" ; RdzWx . showmap ( uri ) ; }
606+ callback : function ( e ) { ll = refobj . land . getLatLng ( ) ; uri = "geo:0:0?q=" + ll . lat + "," + ll . lng + "(X-" + refobj . obj . id + ")" ; RdzWx . showmap ( uri , function ( ) { } ) ; }
597607 } ]
598608 } ) ;
599609 refobj . land . addTo ( map ) ;
@@ -647,7 +657,7 @@ function updateMypos(obj) {
647657 return ;
648658 }
649659 mypos = obj ;
650- var pos = [ obj . lat , obj . lon ] ;
660+ var pos = [ obj . lat , obj . lon , obj . alt ] ;
651661 myposMarker . setLatLng ( pos ) ;
652662 myposMarker . update ( ) ;
653663 if ( myposMarker . hdop ) {
@@ -740,6 +750,7 @@ function updateMarkerTooltip(marker, obj) {
740750 marker . tt . setContent ( tt ) ;
741751 marker . setLatLng ( new L . LatLng ( obj . lat , obj . lon ) ) ;
742752 marker . obj = obj ;
753+ marker . getPopup ( ) . update ( ) ;
743754 marker . update ( ) ;
744755}
745756function createNewMarker ( obj ) {
@@ -765,7 +776,7 @@ function createNewMarker(obj) {
765776 separator : true
766777 } , {
767778 text : "Export to map app" ,
768- callback : function ( e ) { uri = "geo:0:0?q=" + marker . obj . lat + "," + marker . obj . lon + "(" + marker . obj . id + ")" ; RdzWx . showmap ( uri ) ; }
779+ callback : function ( e ) { uri = "geo:0:0?q=" + marker . obj . lat + "," + marker . obj . lon + "(" + marker . obj . id + ")" ; RdzWx . showmap ( uri , function ( ) { } ) ; }
769780 } , {
770781 separator : true
771782 } , {
@@ -777,13 +788,34 @@ function createNewMarker(obj) {
777788 marker . path = poly ;
778789 marker . addTo ( map ) ;
779790 poly . addTo ( map ) ;
780- var tooltip = L . tooltip ( { direction : 'right' , permanent : true , className : 'sondeTooltip' , offset : [ 10 , - 16 ] , interactive : false , opacity : 0.6 } ) ;
791+ var tooltip = L . tooltip ( { direction : 'right' , permanent : true , className : 'sondeTooltip' , offset : [ 10 , - 16 ] , interactive : true , opacity : 0.6 } ) ;
792+
781793 marker . bindTooltip ( tooltip ) ;
782794 marker . tt = tooltip ;
783795 marker . vsavg = obj . vs ;
784796 marker . obj = obj ;
797+
798+ marker . bindPopup ( function ( lay ) {
799+ var alt = lay . getLatLng ( ) . alt ;
800+ if ( ! alt ) alt = 0 ;
801+ return '<div class="pop-header"><img src="img/ballon.png"/><h4> ' + lay . obj . id + '</h4></div>' +
802+ '<p>Serial: ' + lay . obj . ser + '<br>' +
803+ '' + ( new Date ( 1000 * lay . obj . time ) ) . toString ( ) . split ( " (" ) [ 0 ] + '<br/>' +
804+ '(' + formathms ( new Date ( ) . valueOf ( ) / 1000 - lay . obj . time ) + ' ago) <br/>' +
805+ 'Frame #' + lay . obj . frame + ', Sats=' + lay . obj . sats + '<br/>' +
806+ 'burstKT=' + formathms ( lay . obj . burstKT ) + '<br>launchKT=' + formathms ( lay . obj . launchKT ) + '<br>countdown=' + formathms ( lay . obj . countKT + lay . obj . crefKT - lay . obj . frame ) + '<br/>' +
807+ '</p>' ;
808+ } ) ;
809+
785810 return marker ;
786811}
812+ function formathms ( ts ) {
813+ if ( typeof ts === "undefined" ) { return "<undef>" ; }
814+ var h = Math . floor ( ts / 3600 ) ; ts -= h * 3600 ;
815+ var m = Math . floor ( ts / 60 ) ; ts = Math . floor ( ts - m * 60 ) ;
816+ return ( "0" + h ) . slice ( - 2 ) + ":" + ( "0" + m ) . slice ( - 2 ) + ":" + ( "0" + ts ) . slice ( - 2 ) ;
817+ }
818+
787819function deleteMarker ( m ) {
788820 removePrediction ( m ) ;
789821 m . unbindTooltip ( ) ;
0 commit comments