diff --git a/html/index.html b/html/index.html
index 95b6895..cd249ef 100644
--- a/html/index.html
+++ b/html/index.html
@@ -147,8 +147,8 @@
-
-
+
+
diff --git a/html/planeObject.js b/html/planeObject.js
index f5f9a8c..1dc2d54 100644
--- a/html/planeObject.js
+++ b/html/planeObject.js
@@ -925,6 +925,13 @@ PlaneObject.prototype.processTrace = function(show) {
this.visible = true;
this.updated = true;
}
+
+ now = new Date().getTime()/1000;
+ this.updateFeatures(now, _last);
+
+ if (showTrace && this.position && !inView(this, OLMap.getView().calculateExtent(OLMap.getSize())))
+ FollowSelected = true;
+
this.updateMarker(true);
this.updateLines();
refreshSelected();
@@ -1379,7 +1386,7 @@ PlaneObject.prototype.altitudeLines = function(segment) {
// Update our planes tail line,
PlaneObject.prototype.updateLines = function() {
- if (!this.visible || (!this.selected && !SelectedAllPlanes) || this.isFiltered())
+ if (!this.visible || this.position == null || (!this.selected && !SelectedAllPlanes) || this.isFiltered())
return this.clearLines();
if (this.track_linesegs.length == 0)
diff --git a/html/script.js b/html/script.js
index 26a445c..b7c3b48 100644
--- a/html/script.js
+++ b/html/script.js
@@ -2143,6 +2143,10 @@ function selectPlaneByHex(hex, options) {
if (SelectedAllPlanes) {
deselectAllPlanes();
}
+ if (showTrace || options.redraw) {
+ processAircraft({hex: hex, });
+ SelectedPlane = null;
+ }
// already selected plane
var oldPlane = SelectedPlane;
// plane to be selected
@@ -2159,6 +2163,20 @@ function selectPlaneByHex(hex, options) {
URL1 = null;
URL2 = 'globe_history/' + traceDateString + '/traces/' + hex.slice(-2) + '/trace_full_' + hex + '.json.gz';
}
+ if (newPlane && (showTrace || options.redraw)) {
+ newPlane.trace = [];
+ newPlane.recentTrace = null;
+ newPlane.fullTrace = null;
+ newPlane.position = null;
+ newPlane.callsign = null;
+ newPlane.track = null;
+ newPlane.rotation = null;
+ newPlane.altitude = null;
+ newPlane.seen = NaN;
+ newPlane.last_message_time = NaN;
+ newPlane.seen_pos = NaN;
+ newPlane.position_time = NaN;
+ }
if (URL1) {
var req1 = $.ajax({ url: URL1,
@@ -2188,9 +2206,7 @@ function selectPlaneByHex(hex, options) {
} else {
if (req1) {
req1.done(function(data) {
- var ac = {};
- ac.hex = data.icao;
- processAircraft(ac);
+ processAircraft({hex: data.icao, });
Planes[data.icao].recentTrace = data;
Planes[data.icao].processTrace();
//console.log(Planes[data.icao]);
@@ -2203,9 +2219,7 @@ function selectPlaneByHex(hex, options) {
});
}
req2.done(function(data) {
- var ac = {};
- ac.hex = data.icao;
- processAircraft(ac);
+ processAircraft({hex: data.icao, });
Planes[data.icao].fullTrace = data;
Planes[data.icao].processTrace();
var options = {
@@ -2332,6 +2346,8 @@ function deselectAllPlanes() {
function toggleFollowSelected() {
FollowSelected = !FollowSelected;
+ if (FollowSelected && (!SelectedPlane || !SelectedPlane.position))
+ FollowSelected = false;
if (!SelectedPlane && FollowSelected)
FollowSelected = false;
if (FollowSelected && OLMap.getView().getZoom() < 8)
@@ -2714,11 +2730,12 @@ function followRandomPlane() {
var tired = 0;
do {
this_one = PlanesOrdered[Math.floor(Math.random()*PlanesOrdered.length)];
- if (tired++ > 1000)
+ if (!this_one || tired++ > 1000)
break;
} while (this_one.isFiltered() || !this_one.position || (now - this_one.position_time > 30));
//console.log(this_one.icao);
- selectPlaneByHex(this_one.icao, {follow: true});
+ if (this_one)
+ selectPlaneByHex(this_one.icao, {follow: true});
}
function toggleTableInView(switchOn) {
@@ -3450,17 +3467,20 @@ function refreshInt() {
function toggleShowTrace() {
if (!showTrace) {
showTrace = true;
- toggleIsolation("on", false);
+ toggleIsolation("on", null);
shiftTrace();
$('#history_collapse')[0].style.display = "block";
$('#show_trace').addClass("active");
} else {
showTrace = false;
- toggleIsolation(false, "off");
+ toggleIsolation(null, "off");
var string = pathName + '?icao=' + SelectedPlane.icao;
window.history.replaceState("object or string", "Title", string);
$('#history_collapse')[0].style.display = "none";
$('#show_trace').removeClass("active");
+ const hex = SelectedPlane.icao;
+ SelectedPlane = null;
+ selectPlaneByHex(hex, {follow: true, zoom: ZoomLvl, redraw: true,});
}
}
@@ -3488,16 +3508,9 @@ function shiftTrace(offset) {
window.history.replaceState("object or string", "Title", string);
- if (offset) {
- var plane = Planes[hex];
- if (plane) {
- plane.trace = [];
- plane.recentTrace = null;
- plane.fullTrace = null;
- }
- var selectOptions = {follow: true, zoom: ZoomLvl};
- selectPlaneByHex(hex, selectOptions);
- }
+ var plane = Planes[hex];
+ var selectOptions = {follow: true, zoom: ZoomLvl};
+ selectPlaneByHex(hex, selectOptions);
}
function getDateString(date) {