Merge 1090 and UAT aircraft into one map
Squashed commit of the following:
commit ef61cba13698090b85fea3136bc77e320eab3d0d
Author: eric1tran <eric1tran@gmail.com>
Date: Thu Feb 25 04:39:22 2021 +0000
Remove unused receiver clock code
commit 809cf656b5a098948fbfc5ce2b5f60f753fb4043
Author: eric1tran <eric1tran@gmail.com>
Date: Thu Feb 25 04:35:32 2021 +0000
Avoid calling getDataSource() so many times and cleanup spacing
commit a0000b942bb5aa5f8061db0ca9d405461c6eea07
Author: eric1tran <eric1tran@gmail.com>
Date: Thu Feb 25 04:19:11 2021 +0000
Copy paste bug
commit ccc3cd3964bddcd86e8faf45c06e577309cffb02
Author: eric1tran <eric1tran@gmail.com>
Date: Thu Feb 25 04:17:14 2021 +0000
Filter UAT logic
commit 34dc860a16e1c57cdc3563ec31c45f9b1b133d4c
Author: eric1tran <eric1tran@gmail.com>
Date: Thu Feb 25 03:24:56 2021 +0000
Reorder message rate text
commit 25db80799a2a6dc8e33835cb2ed43c305c87a4d8
Author: eric1tran <eric1tran@gmail.com>
Date: Thu Feb 25 00:56:43 2021 +0000
Track 1090 and 978 message rate separately
commit a2031d13e4a447ad0f8de61eada75f0da019d1c2
Author: eric1tran <eric1tran@gmail.com>
Date: Thu Feb 25 00:27:25 2021 +0000
UAT classification logic
commit 5482274016eecfbc27f2b5de6779c032803ca177
Author: eric1tran <eric1tran@gmail.com>
Date: Wed Feb 24 23:13:39 2021 +0000
Spacing
commit 2fc4408e6437ec5e0db2329d46a68fc6538abc45
Author: eric1tran <eric1tran@gmail.com>
Date: Wed Feb 24 22:57:05 2021 +0000
Load UAT history.json files if UAT is enabled
commit 9ccf4eba7590b1f38c78aeb73209b48cb8e0c34f
Author: eric1tran <eric1tran@gmail.com>
Date: Wed Feb 24 22:24:23 2021 +0000
ajax calls to fetch UAT aircraft json if enabled
commit d8f0c1c042bdba8ae1348a513df7dcca6ebc23fc
Author: eric1tran <eric1tran@gmail.com>
Date: Wed Feb 24 21:29:01 2021 +0000
Read skyaware978 config files on initialization
commit 0245fa7449e92555b7631ab0365e43fb38e1c221
Author: eric1tran <eric1tran@gmail.com>
Date: Wed Feb 24 20:15:09 2021 +0000
Change SkyAware url to /skyaware to genericize it for dual mode
commit 9384364b2473f8c73d3f165d7f5192c1995457a5
Author: eric1tran <eric1tran@gmail.com>
Date: Wed Feb 24 19:46:06 2021 +0000
Add UAT toggle and description (non-functional)
commit 9b65a55c0ceb7c3da3b3515d26f0d5d42192f658
Author: eric1tran <eric1tran@gmail.com>
Date: Wed Feb 24 19:32:54 2021 +0000
Removed unused css
This commit is contained in:
parent
9f07a81dfa
commit
74b1a39aa0
|
|
@ -21,19 +21,23 @@
|
||||||
# server.modules += ( "mod_alias" )
|
# server.modules += ( "mod_alias" )
|
||||||
|
|
||||||
alias.url += (
|
alias.url += (
|
||||||
"/dump1090-fa/data/" => "/run/dump1090-fa/",
|
"/skyaware/data-1090/" => "/run/dump1090-fa/",
|
||||||
"/dump1090-fa/" => "/usr/share/dump1090-fa/html/"
|
"/skyaware/data-978/" => "/run/skyaware978/",
|
||||||
|
"/skyaware/" => "/usr/share/dump1090-fa/html/"
|
||||||
)
|
)
|
||||||
|
|
||||||
# redirect the slash-less URL
|
# redirect the slash-less URL
|
||||||
url.redirect += (
|
url.redirect += (
|
||||||
"^/dump1090-fa$" => "/dump1090-fa/"
|
"^/skyaware$" => "/skyaware/",
|
||||||
|
"^/dump1090-fa$" => "/skyaware/",
|
||||||
|
"^/dump1090-fa/" => "/skyaware/"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Listen on port 8080 and serve the map there, too.
|
# Listen on port 8080 and serve the map there, too.
|
||||||
$SERVER["socket"] == ":8080" {
|
$SERVER["socket"] == ":8080" {
|
||||||
alias.url += (
|
alias.url += (
|
||||||
"/data/" => "/run/dump1090-fa/",
|
"/data-1090/" => "/run/dump1090-fa/",
|
||||||
|
"/data-978/" => "/run/skyaware978/",
|
||||||
"/" => "/usr/share/dump1090-fa/html/"
|
"/" => "/usr/share/dump1090-fa/html/"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -234,6 +234,8 @@ function format_latlng(p) {
|
||||||
|
|
||||||
function format_data_source(source) {
|
function format_data_source(source) {
|
||||||
switch (source) {
|
switch (source) {
|
||||||
|
case 'uat':
|
||||||
|
return "UAT";
|
||||||
case 'mlat':
|
case 'mlat':
|
||||||
return "MLAT";
|
return "MLAT";
|
||||||
case 'adsb_icao':
|
case 'adsb_icao':
|
||||||
|
|
|
||||||
|
|
@ -213,12 +213,15 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="infoblock_body">
|
<tr class="infoblock_body">
|
||||||
<td><span class="infoBlockTitleText">Total Aircraft:</span> <span id="dump1090_total_ac">n/a</span></td>
|
<td><span class="infoBlockTitleText">Total Aircraft:</span> <span id="dump1090_total_ac">n/a</span></td>
|
||||||
<td><span class="infoBlockTitleText">Messages:</span> <span id="dump1090_message_rate">n/a</span>/sec</td>
|
<td><span class="infoBlockTitleText">ADS-B Message Rate:</span> <span id="dump1090_message_rate">n/a</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr class="infoblock_body">
|
<tr class="infoblock_body">
|
||||||
<td><span class="infoBlockTitleText">With Positions:</span> <span id="dump1090_total_ac_positions">n/a</span></td>
|
<td><span class="infoBlockTitleText">With Positions:</span> <span id="dump1090_total_ac_positions">n/a</span></td>
|
||||||
<td><span class="infoBlockTitleText">History:</span> <span id="dump1090_total_history">n/a</span> positions</td>
|
<td><span class="infoBlockTitleText">UAT Message Rate:</span> <span id="uat_message_rate">n/a</span></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="infoblock_body">
|
||||||
|
<td><span class="infoBlockTitleText">Position History:</span> <span id="dump1090_total_history">n/a</span></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
</div> <!-- dump1090_infoblock -->
|
</div> <!-- dump1090_infoblock -->
|
||||||
|
|
@ -418,6 +421,8 @@
|
||||||
<div class="legend">
|
<div class="legend">
|
||||||
<div class="sourceCheckbox" id="adsb_datasource_checkbox"></div>
|
<div class="sourceCheckbox" id="adsb_datasource_checkbox"></div>
|
||||||
<div class="legendTitle vPosition">ADS-B</div>
|
<div class="legendTitle vPosition">ADS-B</div>
|
||||||
|
<div class="sourceCheckbox" id="uat_datasource_checkbox"></div>
|
||||||
|
<div class="legendTitle uat">UAT</div>
|
||||||
<div class="sourceCheckbox" id="mlat_datasource_checkbox"></div>
|
<div class="sourceCheckbox" id="mlat_datasource_checkbox"></div>
|
||||||
<div class="legendTitle mlat">MLAT</div>
|
<div class="legendTitle mlat">MLAT</div>
|
||||||
<div class="sourceCheckbox" id="other_datasource_checkbox"></div>
|
<div class="sourceCheckbox" id="other_datasource_checkbox"></div>
|
||||||
|
|
@ -703,6 +708,14 @@
|
||||||
<span id="selected_version">n/a</span>
|
<span id="selected_version">n/a</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="infoRowLine">
|
||||||
|
<div class="infoHeading infoRowFluid fourColumnSection1">
|
||||||
|
<span title="For UAT-equipped aircraft, the version of UAT ADS-B to which the aircraft conforms, as reported by the aircraft.">UAT Version</span>:
|
||||||
|
</div>
|
||||||
|
<div class="infoData infoRowFluid fourColumnSection2">
|
||||||
|
<span id="selected_uat_version">n/a</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="infoRowLine">
|
<div class="infoRowLine">
|
||||||
<div class="infoHeading infoRowFluid fourColumnSection1">
|
<div class="infoHeading infoRowFluid fourColumnSection1">
|
||||||
<span title="Indicated signal strength of the signal received by your ADS-B site from the aircraft.">RSSI</span>:
|
<span title="Indicated signal strength of the signal received by your ADS-B site from the aircraft.">RSSI</span>:
|
||||||
|
|
@ -827,6 +840,11 @@
|
||||||
<span id="update_error_detail"></span><br>
|
<span id="update_error_detail"></span><br>
|
||||||
The displayed map data will be out of date.
|
The displayed map data will be out of date.
|
||||||
</div>
|
</div>
|
||||||
|
<div id="uat_update_error" class="hidden">
|
||||||
|
<b>Problem fetching data from SkyAware978.</b><br>
|
||||||
|
<span id="uat_update_error_detail"></span><br>
|
||||||
|
The displayed map data will be out of date.
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="container_splitter"></div>
|
<div id="container_splitter"></div>
|
||||||
</body>
|
</body>
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ function PlaneObject(icao) {
|
||||||
this.vert_rate = null;
|
this.vert_rate = null;
|
||||||
|
|
||||||
this.version = null;
|
this.version = null;
|
||||||
|
this.uat_version = null;
|
||||||
|
|
||||||
this.prev_position = null;
|
this.prev_position = null;
|
||||||
this.prev_position_time = null;
|
this.prev_position_time = null;
|
||||||
|
|
@ -84,6 +85,10 @@ function PlaneObject(icao) {
|
||||||
this.typeDescription = null;
|
this.typeDescription = null;
|
||||||
this.wtc = null;
|
this.wtc = null;
|
||||||
|
|
||||||
|
this.heard_on_1090 = false;
|
||||||
|
this.heard_on_978 = false;
|
||||||
|
this.heard_on_tisb = false;
|
||||||
|
|
||||||
// request metadata
|
// request metadata
|
||||||
getAircraftData(this.icao).done(function(data) {
|
getAircraftData(this.icao).done(function(data) {
|
||||||
if ("r" in data) {
|
if ("r" in data) {
|
||||||
|
|
@ -124,7 +129,9 @@ PlaneObject.prototype.isFiltered = function() {
|
||||||
}
|
}
|
||||||
|
|
||||||
var dataSource = this.getDataSource();
|
var dataSource = this.getDataSource();
|
||||||
if (dataSource === 'adsb_icao') {
|
if (dataSource === 'uat') {
|
||||||
|
if (!this.filter.UAT) return true;
|
||||||
|
} else if (dataSource === 'adsb_icao') {
|
||||||
if (!this.filter.ADSB) return true;
|
if (!this.filter.ADSB) return true;
|
||||||
} else if (dataSource === 'mlat') {
|
} else if (dataSource === 'mlat') {
|
||||||
if (!this.filter.MLAT) return true;
|
if (!this.filter.MLAT) return true;
|
||||||
|
|
@ -319,6 +326,11 @@ PlaneObject.prototype.getDataSource = function() {
|
||||||
return 'mlat';
|
return 'mlat';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Classify as UAT if we heard it on 978 Mhz until we hear it from another source
|
||||||
|
if (this.heard_on_978 && !this.heard_on_1090 && !this.heard_on_tisb) {
|
||||||
|
return 'uat';
|
||||||
|
}
|
||||||
|
|
||||||
// Not MLAT, but position reported - ADSB or variants
|
// Not MLAT, but position reported - ADSB or variants
|
||||||
if (this.position !== null) {
|
if (this.position !== null) {
|
||||||
return this.addrtype;
|
return this.addrtype;
|
||||||
|
|
@ -538,19 +550,25 @@ PlaneObject.prototype.updateIcon = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Update our data
|
// Update our data
|
||||||
PlaneObject.prototype.updateData = function(receiver_timestamp, data) {
|
PlaneObject.prototype.updateData = function(receiver_timestamp, data, receiver_source) {
|
||||||
// Update all of our data
|
// Update all of our data
|
||||||
this.messages = data.messages;
|
this.messages = data.messages;
|
||||||
this.rssi = data.rssi;
|
this.rssi = data.rssi;
|
||||||
this.last_message_time = receiver_timestamp - data.seen;
|
this.last_message_time = receiver_timestamp - data.seen;
|
||||||
|
|
||||||
|
if (receiver_source == "dump1090-fa") {
|
||||||
|
this.heard_on_1090 = true;
|
||||||
|
} else if (receiver_source == "skyaware978") {
|
||||||
|
this.heard_on_978 = true;
|
||||||
|
}
|
||||||
|
|
||||||
// simple fields
|
// simple fields
|
||||||
var fields = ["alt_baro", "alt_geom", "gs", "ias", "tas", "track",
|
var fields = ["alt_baro", "alt_geom", "gs", "ias", "tas", "track",
|
||||||
"track_rate", "mag_heading", "true_heading", "mach",
|
"track_rate", "mag_heading", "true_heading", "mach",
|
||||||
"roll", "nav_heading", "nav_modes",
|
"roll", "nav_heading", "nav_modes",
|
||||||
"nac_p", "nac_v", "nic_baro", "sil_type", "sil",
|
"nac_p", "nac_v", "nic_baro", "sil_type", "sil",
|
||||||
"nav_qnh", "baro_rate", "geom_rate", "rc",
|
"nav_qnh", "baro_rate", "geom_rate", "rc",
|
||||||
"squawk", "category", "version"];
|
"squawk", "category", "version", "uat_version"];
|
||||||
|
|
||||||
for (var i = 0; i < fields.length; ++i) {
|
for (var i = 0; i < fields.length; ++i) {
|
||||||
if (fields[i] in data) {
|
if (fields[i] in data) {
|
||||||
|
|
@ -567,6 +585,10 @@ PlaneObject.prototype.updateData = function(receiver_timestamp, data) {
|
||||||
else
|
else
|
||||||
this.addrtype = 'adsb_icao';
|
this.addrtype = 'adsb_icao';
|
||||||
|
|
||||||
|
if (this.addrtype == "tisb_trackfile" || this.addrtype == "tisb_icao" || this.addrtype == "tisb_other") {
|
||||||
|
this.heard_on_tisb = true;
|
||||||
|
}
|
||||||
|
|
||||||
// don't expire callsigns
|
// don't expire callsigns
|
||||||
if ('flight' in data)
|
if ('flight' in data)
|
||||||
this.flight = data.flight;
|
this.flight = data.flight;
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,9 @@ var infoBoxOriginalPosition = {};
|
||||||
var customAltitudeColors = true;
|
var customAltitudeColors = true;
|
||||||
var myAdsbStatsSiteUrl = null;
|
var myAdsbStatsSiteUrl = null;
|
||||||
|
|
||||||
|
var ADSB_Enabled = true;
|
||||||
|
var UAT_Enabled = false;
|
||||||
|
|
||||||
var SpecialSquawks = {
|
var SpecialSquawks = {
|
||||||
'7500' : { cssClass: 'squawk7500', markerColor: 'rgb(255, 85, 85)', text: 'Aircraft Hijacking' },
|
'7500' : { cssClass: 'squawk7500', markerColor: 'rgb(255, 85, 85)', text: 'Aircraft Hijacking' },
|
||||||
'7600' : { cssClass: 'squawk7600', markerColor: 'rgb(0, 255, 255)', text: 'Radio Failure' },
|
'7600' : { cssClass: 'squawk7600', markerColor: 'rgb(0, 255, 255)', text: 'Radio Failure' },
|
||||||
|
|
@ -38,14 +41,16 @@ var TrackedHistorySize = 0;
|
||||||
|
|
||||||
var SitePosition = null;
|
var SitePosition = null;
|
||||||
|
|
||||||
var ReceiverClock = null;
|
|
||||||
|
|
||||||
var LastReceiverTimestamp = 0;
|
var LastReceiverTimestamp = 0;
|
||||||
var StaleReceiverCount = 0;
|
var StaleReceiverCount = 0;
|
||||||
var FetchPending = null;
|
var FetchPending = null;
|
||||||
|
var FetchPending_UAT = null;
|
||||||
|
|
||||||
var MessageCountHistory = [];
|
var MessageCountHistory = [];
|
||||||
|
var MessageCountHistory_UAT = [];
|
||||||
|
|
||||||
var MessageRate = 0;
|
var MessageRate = 0;
|
||||||
|
var UatMessageRate = 0;
|
||||||
|
|
||||||
var NBSP='\u00a0';
|
var NBSP='\u00a0';
|
||||||
|
|
||||||
|
|
@ -92,22 +97,38 @@ var DefaultMinMaxFilters = {
|
||||||
'imperial' : {min: 0, maxSpeed: 600, maxAltitude: 65000} // mph, ft
|
'imperial' : {min: 0, maxSpeed: 600, maxAltitude: 65000} // mph, ft
|
||||||
};
|
};
|
||||||
|
|
||||||
function processReceiverUpdate(data) {
|
// Update Planes with data in aircraft json
|
||||||
// Loop through all the planes in the data packet
|
// receiver_source will specify where the aircraft.json originated from (dump1090-fa or skyaware978)
|
||||||
|
function processReceiverUpdate(data, receiver_source) {
|
||||||
|
// Loop through all the planes in the data packet
|
||||||
var now = data.now;
|
var now = data.now;
|
||||||
var acs = data.aircraft;
|
var acs = data.aircraft;
|
||||||
|
|
||||||
// Detect stats reset
|
if (receiver_source === "skyaware978") {
|
||||||
if (MessageCountHistory.length > 0 && MessageCountHistory[MessageCountHistory.length-1].messages > data.messages) {
|
// Detect stats reset (i.e. if MessageCountHistory array is > 0 and the latest value > the "messages" field in the data packet)
|
||||||
MessageCountHistory = [{'time' : MessageCountHistory[MessageCountHistory.length-1].time,
|
if (MessageCountHistory_UAT.length > 0 && MessageCountHistory_UAT[MessageCountHistory_UAT.length-1].messages > data.messages) {
|
||||||
'messages' : 0}];
|
MessageCountHistory_UAT = [{'time' : MessageCountHistory_UAT[MessageCountHistory_UAT.length-1].time,
|
||||||
}
|
'messages' : 0}];
|
||||||
|
}
|
||||||
|
|
||||||
// Note the message count in the history
|
// Maintain a 30 second rollinng history of message counts
|
||||||
MessageCountHistory.push({ 'time' : now, 'messages' : data.messages});
|
MessageCountHistory_UAT.push({ 'time' : now, 'messages' : data.messages});
|
||||||
// .. and clean up any old values
|
// .. and clean up any old values
|
||||||
if ((now - MessageCountHistory[0].time) > 30)
|
if ((now - MessageCountHistory_UAT[0].time) > 30)
|
||||||
MessageCountHistory.shift();
|
MessageCountHistory_UAT.shift();
|
||||||
|
} else {
|
||||||
|
// Detect stats reset (i.e. if MessageCountHistory array is > 0 and the latest value > the "messages" field in the data packet)
|
||||||
|
if (MessageCountHistory.length > 0 && MessageCountHistory[MessageCountHistory.length-1].messages > data.messages) {
|
||||||
|
MessageCountHistory = [{'time' : MessageCountHistory[MessageCountHistory.length-1].time,
|
||||||
|
'messages' : 0}];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Maintain a 30 second rollinng history of message counts
|
||||||
|
MessageCountHistory.push({ 'time' : now, 'messages' : data.messages});
|
||||||
|
// .. and clean up any old values
|
||||||
|
if ((now - MessageCountHistory[0].time) > 30)
|
||||||
|
MessageCountHistory.shift();
|
||||||
|
}
|
||||||
|
|
||||||
for (var j=0; j < acs.length; j++) {
|
for (var j=0; j < acs.length; j++) {
|
||||||
var ac = acs[j];
|
var ac = acs[j];
|
||||||
|
|
@ -169,7 +190,7 @@ function processReceiverUpdate(data) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Call the function update
|
// Call the function update
|
||||||
plane.updateData(now, ac);
|
plane.updateData(now, ac, receiver_source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -179,52 +200,77 @@ function fetchData() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
FetchPending = $.ajax({ url: 'data/aircraft.json',
|
FetchPending = $.ajax({ url: 'data-1090/aircraft.json',
|
||||||
timeout: 5000,
|
timeout: 5000,
|
||||||
cache: false,
|
cache: false,
|
||||||
dataType: 'json' });
|
dataType: 'json' });
|
||||||
FetchPending.done(function(data) {
|
FetchPending.done(function(data) {
|
||||||
var now = data.now;
|
process_aircraft_json(data, 'dump1090-fa');
|
||||||
|
|
||||||
processReceiverUpdate(data);
|
|
||||||
|
|
||||||
// update timestamps, visibility, history track for all planes - not only those updated
|
|
||||||
for (var i = 0; i < PlanesOrdered.length; ++i) {
|
|
||||||
var plane = PlanesOrdered[i];
|
|
||||||
plane.updateTick(now, LastReceiverTimestamp);
|
|
||||||
}
|
|
||||||
|
|
||||||
selectNewPlanes();
|
|
||||||
refreshTableInfo();
|
|
||||||
refreshSelected();
|
|
||||||
refreshHighlighted();
|
|
||||||
|
|
||||||
if (ReceiverClock) {
|
|
||||||
var rcv = new Date(now * 1000);
|
|
||||||
ReceiverClock.render(rcv.getUTCHours(),rcv.getUTCMinutes(),rcv.getUTCSeconds());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check for stale receiver data
|
|
||||||
if (LastReceiverTimestamp === now) {
|
|
||||||
StaleReceiverCount++;
|
|
||||||
if (StaleReceiverCount > 5) {
|
|
||||||
$("#update_error_detail").text("The data from dump1090 hasn't been updated in a while. Maybe dump1090 is no longer running?");
|
|
||||||
$("#update_error").css('display','block');
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
StaleReceiverCount = 0;
|
|
||||||
LastReceiverTimestamp = now;
|
|
||||||
$("#update_error").css('display','none');
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
FetchPending.fail(function(jqxhr, status, error) {
|
FetchPending.fail(function(jqxhr, status, error) {
|
||||||
$("#update_error_detail").text("AJAX call failed (" + status + (error ? (": " + error) : "") + "). Maybe dump1090 is no longer running?");
|
$("#update_error_detail").text("AJAX call failed (" + status + (error ? (": " + error) : "") + "). Maybe dump1090 is no longer running?");
|
||||||
$("#update_error").css('display','block');
|
$("#update_error").css('display','block');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Fetch UAT if enabled
|
||||||
|
if (UAT_Enabled) {
|
||||||
|
if (FetchPending_UAT !== null && FetchPending_UAT.state() == 'pending') {
|
||||||
|
// don't double up on fetches, let the last one resolve
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
FetchPending_UAT = $.ajax({ url: 'data-978/aircraft.json',
|
||||||
|
timeout: 5000,
|
||||||
|
cache: false,
|
||||||
|
dataType: 'json' });
|
||||||
|
|
||||||
|
FetchPending_UAT.done(function(data) {
|
||||||
|
// Process UAT aircraft.json here
|
||||||
|
process_aircraft_json(data, 'skyaware978');
|
||||||
|
});
|
||||||
|
|
||||||
|
FetchPending_UAT.fail(function(jqxhr, status, error) {
|
||||||
|
$("#uat_update_error_detail").text("AJAX call failed (" + status + (error ? (": " + error) : "") + "). Maybe skyaware978 is no longer running?");
|
||||||
|
$("#uat_update_error").css('display','block');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process an aircraft.json and update Planes.
|
||||||
|
// receiver_source will specify where the aircraft.json originated from (dump1090-fa or skyaware978)
|
||||||
|
function process_aircraft_json(data, receiver_source) {
|
||||||
|
var now = data.now;
|
||||||
|
|
||||||
|
processReceiverUpdate(data, receiver_source);
|
||||||
|
|
||||||
|
// update timestamps, visibility, history track for all planes - not only those updated
|
||||||
|
for (var i = 0; i < PlanesOrdered.length; ++i) {
|
||||||
|
var plane = PlanesOrdered[i];
|
||||||
|
plane.updateTick(now, LastReceiverTimestamp);
|
||||||
|
}
|
||||||
|
|
||||||
|
selectNewPlanes();
|
||||||
|
refreshTableInfo();
|
||||||
|
refreshSelected();
|
||||||
|
refreshHighlighted();
|
||||||
|
|
||||||
|
// Check for stale receiver data
|
||||||
|
if (LastReceiverTimestamp === now) {
|
||||||
|
StaleReceiverCount++;
|
||||||
|
if (StaleReceiverCount > 5) {
|
||||||
|
$("#update_error_detail").text("The data from dump1090 hasn't been updated in a while. Maybe dump1090 is no longer running?");
|
||||||
|
$("#update_error").css('display','block');
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
StaleReceiverCount = 0;
|
||||||
|
LastReceiverTimestamp = now;
|
||||||
|
$("#update_error").css('display','none');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var PositionHistorySize = 0;
|
var PositionHistorySize = 0;
|
||||||
|
var UatPositionHistorySize = 0;
|
||||||
function initialize() {
|
function initialize() {
|
||||||
// Set page basics
|
// Set page basics
|
||||||
document.title = PageName;
|
document.title = PageName;
|
||||||
|
|
@ -370,6 +416,11 @@ function initialize() {
|
||||||
refreshDataSourceFilters();
|
refreshDataSourceFilters();
|
||||||
})
|
})
|
||||||
|
|
||||||
|
$('#uat_datasource_checkbox').on('click', function() {
|
||||||
|
toggleUATAircraft(true);
|
||||||
|
refreshDataSourceFilters();
|
||||||
|
})
|
||||||
|
|
||||||
$('#mlat_datasource_checkbox').on('click', function() {
|
$('#mlat_datasource_checkbox').on('click', function() {
|
||||||
toggleMLATAircraft(true);
|
toggleMLATAircraft(true);
|
||||||
refreshDataSourceFilters();
|
refreshDataSourceFilters();
|
||||||
|
|
@ -425,19 +476,39 @@ function initialize() {
|
||||||
toggleAircraftLabels(false);
|
toggleAircraftLabels(false);
|
||||||
toggleAllColumns(false);
|
toggleAllColumns(false);
|
||||||
toggleADSBAircraft(false);
|
toggleADSBAircraft(false);
|
||||||
|
toggleUATAircraft(false);
|
||||||
toggleMLATAircraft(false);
|
toggleMLATAircraft(false);
|
||||||
toggleOtherAircraft(false);
|
toggleOtherAircraft(false);
|
||||||
toggleTISBAircraft(false);
|
toggleTISBAircraft(false);
|
||||||
refreshDataSourceFilters();
|
refreshDataSourceFilters();
|
||||||
|
|
||||||
|
// Get 978 receiver metadata if present
|
||||||
|
$.ajax({ url: 'data-978/receiver.json',
|
||||||
|
timeout: 5000,
|
||||||
|
cache: false,
|
||||||
|
dataType: 'json' })
|
||||||
|
|
||||||
|
.done(function(data) {
|
||||||
|
console.log('SkyAware978 enabled')
|
||||||
|
UAT_Enabled = true;
|
||||||
|
UatPositionHistorySize = data.history;
|
||||||
|
})
|
||||||
|
|
||||||
|
.fail(function(data) {
|
||||||
|
console.warn('Error reading SkyAware978 receiver.json. SkyAware978 may be disabled')
|
||||||
|
UAT_Enabled = false;
|
||||||
|
});
|
||||||
|
|
||||||
// Get receiver metadata, reconfigure using it, then continue
|
// Get receiver metadata, reconfigure using it, then continue
|
||||||
// with initialization
|
// with initialization
|
||||||
$.ajax({ url: 'data/receiver.json',
|
$.ajax({ url: 'data-1090/receiver.json',
|
||||||
timeout: 5000,
|
timeout: 5000,
|
||||||
cache: false,
|
cache: false,
|
||||||
dataType: 'json' })
|
dataType: 'json' })
|
||||||
|
|
||||||
.done(function(data) {
|
.done(function(data) {
|
||||||
|
console.log('dump1090-fa enabled');
|
||||||
|
ADSB_Enabled = true;
|
||||||
if (typeof data.lat !== "undefined") {
|
if (typeof data.lat !== "undefined") {
|
||||||
SiteShow = true;
|
SiteShow = true;
|
||||||
SiteLat = data.lat;
|
SiteLat = data.lat;
|
||||||
|
|
@ -451,6 +522,11 @@ function initialize() {
|
||||||
PositionHistorySize = data.history;
|
PositionHistorySize = data.history;
|
||||||
})
|
})
|
||||||
|
|
||||||
|
.fail(function(data) {
|
||||||
|
console.warn('Error reading dump1090-fa receiver.json. dump1090-fa may be disabled');
|
||||||
|
ADSB_Enabled = false;
|
||||||
|
})
|
||||||
|
|
||||||
.always(function() {
|
.always(function() {
|
||||||
initialize_map();
|
initialize_map();
|
||||||
start_load_history();
|
start_load_history();
|
||||||
|
|
@ -556,38 +632,55 @@ function reset_filter_sliders() {
|
||||||
updatePlaneFilter();
|
updatePlaneFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
var CurrentHistoryFetch = null;
|
var CurrentHistoryFetch = 0;
|
||||||
var PositionHistoryBuffer = [];
|
var PositionHistoryBuffer = [];
|
||||||
var HistoryItemsReturned = 0;
|
var HistoryItemsReturned = 0;
|
||||||
|
var TotalPositionHistorySize = 0;
|
||||||
function start_load_history() {
|
function start_load_history() {
|
||||||
let url = new URL(window.location.href);
|
let url = new URL(window.location.href);
|
||||||
let params = new URLSearchParams(url.search);
|
let params = new URLSearchParams(url.search);
|
||||||
if (PositionHistorySize > 0 && params.get('nohistory') !== 'true') {
|
|
||||||
$("#loader_progress").attr('max',PositionHistorySize);
|
// Get total number of history.json files to load
|
||||||
console.log("Starting to load history (" + PositionHistorySize + " items)");
|
TotalPositionHistorySize = PositionHistorySize + UatPositionHistorySize;
|
||||||
//Load history items in parallel
|
if (TotalPositionHistorySize > 0 && params.get('nohistory') !== 'true') {
|
||||||
for (var i = 0; i < PositionHistorySize; i++) {
|
$("#loader_progress").attr('max', TotalPositionHistorySize);
|
||||||
load_history_item(i);
|
console.log("Starting to load history (" + TotalPositionHistorySize + " items)");
|
||||||
}
|
// Load dump1090 history.json files
|
||||||
} else {
|
for (var i = 0; i < PositionHistorySize; i++) {
|
||||||
// Nothing to load
|
load_history_item(i, 'data-1090');
|
||||||
end_load_history();
|
CurrentHistoryFetch++;
|
||||||
}
|
}
|
||||||
|
// Load skyaware978 history.json files
|
||||||
|
for (var i = 0; i < UatPositionHistorySize; i++) {
|
||||||
|
load_history_item(i, 'data-978');
|
||||||
|
CurrentHistoryFetch++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Nothing to load
|
||||||
|
end_load_history();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function load_history_item(i) {
|
// Loads a history json file
|
||||||
console.log("Loading history #" + i);
|
function load_history_item(i, source) {
|
||||||
$("#loader_progress").attr('value',i);
|
var historyfile = 'history_' + i + '.json';
|
||||||
|
console.log('Loading ' + source + ' ' + historyfile);
|
||||||
|
$("#loader_progress").attr('value', CurrentHistoryFetch);
|
||||||
|
|
||||||
$.ajax({ url: 'data/history_' + i + '.json',
|
var receiver_source = (source == "data-978" ? "skyaware978" : "dump1090-fa");
|
||||||
|
|
||||||
|
$.ajax({ url: source + '/' + historyfile,
|
||||||
timeout: 5000,
|
timeout: 5000,
|
||||||
cache: false,
|
cache: false,
|
||||||
dataType: 'json' })
|
dataType: 'json' })
|
||||||
|
|
||||||
.done(function(data) {
|
.done(function(data) {
|
||||||
|
// Tag history.json files with the source we fetched from (data-1090 / data-978)
|
||||||
|
data["source"] = receiver_source;
|
||||||
PositionHistoryBuffer.push(data);
|
PositionHistoryBuffer.push(data);
|
||||||
HistoryItemsReturned++;
|
HistoryItemsReturned++;
|
||||||
if (HistoryItemsReturned == PositionHistorySize) {
|
if (HistoryItemsReturned == TotalPositionHistorySize) {
|
||||||
|
// End load history when all files have been loaded
|
||||||
end_load_history();
|
end_load_history();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
@ -595,9 +688,10 @@ function load_history_item(i) {
|
||||||
.fail(function(jqxhr, status, error) {
|
.fail(function(jqxhr, status, error) {
|
||||||
//Doesn't matter if it failed, we'll just be missing a data point
|
//Doesn't matter if it failed, we'll just be missing a data point
|
||||||
HistoryItemsReturned++;
|
HistoryItemsReturned++;
|
||||||
if (HistoryItemsReturned == PositionHistorySize) {
|
if (HistoryItemsReturned == TotalPositionHistorySize) {
|
||||||
end_load_history();
|
// End load history when all files have been loaded
|
||||||
}
|
end_load_history();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -617,9 +711,9 @@ function end_load_history() {
|
||||||
for (var h = 0; h < PositionHistoryBuffer.length; ++h) {
|
for (var h = 0; h < PositionHistoryBuffer.length; ++h) {
|
||||||
now = PositionHistoryBuffer[h].now;
|
now = PositionHistoryBuffer[h].now;
|
||||||
console.log("Applying history " + (h + 1) + "/" + PositionHistoryBuffer.length + " at: " + now);
|
console.log("Applying history " + (h + 1) + "/" + PositionHistoryBuffer.length + " at: " + now);
|
||||||
processReceiverUpdate(PositionHistoryBuffer[h]);
|
processReceiverUpdate(PositionHistoryBuffer[h], PositionHistoryBuffer[h].source);
|
||||||
|
|
||||||
// update track
|
// Update track
|
||||||
console.log("Updating tracks at: " + now);
|
console.log("Updating tracks at: " + now);
|
||||||
for (var i = 0; i < PlanesOrdered.length; ++i) {
|
for (var i = 0; i < PlanesOrdered.length; ++i) {
|
||||||
var plane = PlanesOrdered[i];
|
var plane = PlanesOrdered[i];
|
||||||
|
|
@ -1194,20 +1288,12 @@ function refreshPageTitle() {
|
||||||
|
|
||||||
// Refresh the detail window about the plane
|
// Refresh the detail window about the plane
|
||||||
function refreshSelected() {
|
function refreshSelected() {
|
||||||
if (MessageCountHistory.length > 1) {
|
updateMessageRates();
|
||||||
var message_time_delta = MessageCountHistory[MessageCountHistory.length-1].time - MessageCountHistory[0].time;
|
refreshPageTitle();
|
||||||
var message_count_delta = MessageCountHistory[MessageCountHistory.length-1].messages - MessageCountHistory[0].messages;
|
|
||||||
if (message_time_delta > 0)
|
|
||||||
MessageRate = message_count_delta / message_time_delta;
|
|
||||||
} else {
|
|
||||||
MessageRate = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
refreshPageTitle();
|
|
||||||
|
|
||||||
var selected = false;
|
var selected = false;
|
||||||
if (typeof SelectedPlane !== 'undefined' && SelectedPlane != "ICAO" && SelectedPlane != null) {
|
if (typeof SelectedPlane !== 'undefined' && SelectedPlane != "ICAO" && SelectedPlane != null) {
|
||||||
selected = Planes[SelectedPlane];
|
selected = Planes[SelectedPlane];
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#dump1090_infoblock').css('display','block');
|
$('#dump1090_infoblock').css('display','block');
|
||||||
|
|
@ -1218,9 +1304,11 @@ function refreshSelected() {
|
||||||
$('#active_filter_count').text(ActiveFilterCount);
|
$('#active_filter_count').text(ActiveFilterCount);
|
||||||
|
|
||||||
if (MessageRate !== null) {
|
if (MessageRate !== null) {
|
||||||
$('#dump1090_message_rate').text(MessageRate.toFixed(1));
|
$('#dump1090_message_rate').text(MessageRate.toFixed(1) + '/sec');
|
||||||
} else {
|
}
|
||||||
$('#dump1090_message_rate').text("n/a");
|
|
||||||
|
if (UatMessageRate !== null) {
|
||||||
|
$('#uat_message_rate').text(UatMessageRate.toFixed(1) + '/sec');
|
||||||
}
|
}
|
||||||
|
|
||||||
setSelectedInfoBlockVisibility();
|
setSelectedInfoBlockVisibility();
|
||||||
|
|
@ -1311,11 +1399,14 @@ function refreshSelected() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected.getDataSource() === "adsb_icao") {
|
var datasource = selected.getDataSource();
|
||||||
|
if (datasource === "uat") {
|
||||||
|
$('#selected_source').text("UAT");
|
||||||
|
} else if (datasource === "adsb_icao") {
|
||||||
$('#selected_source').text("ADS-B");
|
$('#selected_source').text("ADS-B");
|
||||||
} else if (selected.getDataSource() === "tisb_trackfile" || selected.getDataSource() === "tisb_icao" || selected.getDataSource() === "tisb_other") {
|
} else if (datasource === "tisb_trackfile" || datasource === "tisb_icao" || datasource === "tisb_other") {
|
||||||
$('#selected_source').text("TIS-B");
|
$('#selected_source').text("TIS-B");
|
||||||
} else if (selected.getDataSource() === "mlat") {
|
} else if (datasource === "mlat") {
|
||||||
$('#selected_source').text("MLAT");
|
$('#selected_source').text("MLAT");
|
||||||
} else {
|
} else {
|
||||||
$('#selected_source').text("Other");
|
$('#selected_source').text("Other");
|
||||||
|
|
@ -1358,61 +1449,62 @@ function refreshSelected() {
|
||||||
$('#selected_nav_modes').text("n/a");
|
$('#selected_nav_modes').text("n/a");
|
||||||
} else {
|
} else {
|
||||||
$('#selected_nav_modes').text(selected.nav_modes.join());
|
$('#selected_nav_modes').text(selected.nav_modes.join());
|
||||||
}
|
}
|
||||||
if (selected.nic_baro == null) {
|
if (selected.nic_baro == null) {
|
||||||
$('#selected_nic_baro').text("n/a");
|
$('#selected_nic_baro').text("n/a");
|
||||||
} else {
|
} else {
|
||||||
if (selected.nic_baro == 1) {
|
if (selected.nic_baro == 1) {
|
||||||
$('#selected_nic_baro').text("cross-checked");
|
$('#selected_nic_baro').text("cross-checked");
|
||||||
} else {
|
} else {
|
||||||
$('#selected_nic_baro').text("not cross-checked");
|
$('#selected_nic_baro').text("not cross-checked");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#selected_nac_p').text(format_nac_p(selected.nac_p));
|
$('#selected_nac_p').text(format_nac_p(selected.nac_p));
|
||||||
$('#selected_nac_v').text(format_nac_v(selected.nac_v));
|
$('#selected_nac_v').text(format_nac_v(selected.nac_v));
|
||||||
if (selected.rc == null) {
|
if (selected.rc == null) {
|
||||||
$('#selected_rc').text("n/a");
|
$('#selected_rc').text("n/a");
|
||||||
} else if (selected.rc == 0) {
|
} else if (selected.rc == 0) {
|
||||||
$('#selected_rc').text("unknown");
|
$('#selected_rc').text("unknown");
|
||||||
} else {
|
} else {
|
||||||
$('#selected_rc').text(format_distance_short(selected.rc, DisplayUnits));
|
$('#selected_rc').text(format_distance_short(selected.rc, DisplayUnits));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected.sil == null || selected.sil_type == null) {
|
if (selected.sil == null || selected.sil_type == null) {
|
||||||
$('#selected_sil').text("n/a");
|
$('#selected_sil').text("n/a");
|
||||||
} else {
|
} else {
|
||||||
var sampleRate = "";
|
var sampleRate = "";
|
||||||
var silDesc = "";
|
var silDesc = "";
|
||||||
if (selected.sil_type == "perhour") {
|
if (selected.sil_type == "perhour") {
|
||||||
sampleRate = " per flight hour";
|
sampleRate = " per flight hour";
|
||||||
} else if (selected.sil_type == "persample") {
|
} else if (selected.sil_type == "persample") {
|
||||||
sampleRate = " per sample";
|
sampleRate = " per sample";
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (selected.sil) {
|
switch (selected.sil) {
|
||||||
case 0:
|
case 0:
|
||||||
silDesc = "> 1×10<sup>-3</sup>";
|
silDesc = "> 1×10<sup>-3</sup>";
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
silDesc = "≤ 1×10<sup>-3</sup>";
|
silDesc = "≤ 1×10<sup>-3</sup>";
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
silDesc = "≤ 1×10<sup>-5</sup>";
|
silDesc = "≤ 1×10<sup>-5</sup>";
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
silDesc = "≤ 1×10<sup>-7</sup>";
|
silDesc = "≤ 1×10<sup>-7</sup>";
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
silDesc = "n/a";
|
silDesc = "n/a";
|
||||||
sampleRate = "";
|
sampleRate = "";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
$('#selected_sil').html(silDesc + sampleRate);
|
|
||||||
}
|
$('#selected_sil').html(silDesc + sampleRate);
|
||||||
|
}
|
||||||
|
|
||||||
if (selected.version == null) {
|
if (selected.version == null) {
|
||||||
$('#selected_version').text('none');
|
$('#selected_version').text('N/A');
|
||||||
} else if (selected.version == 0) {
|
} else if (selected.version == 0) {
|
||||||
$('#selected_version').text('v0 (DO-260)');
|
$('#selected_version').text('v0 (DO-260)');
|
||||||
} else if (selected.version == 1) {
|
} else if (selected.version == 1) {
|
||||||
|
|
@ -1423,8 +1515,42 @@ function refreshSelected() {
|
||||||
$('#selected_version').text('v' + selected.version);
|
$('#selected_version').text('v' + selected.version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (selected.uat_version == null) {
|
||||||
|
$('#selected_uat_version').text('N/A');
|
||||||
|
} else if (selected.uat_version == 0) {
|
||||||
|
$('#selected_uat_version').text('v0 (DO-282)');
|
||||||
|
} else if (selected.uat_version == 1) {
|
||||||
|
$('#selected_uat_version').text('v1 (DO-282A)');
|
||||||
|
} else if (selected.uat_version == 2) {
|
||||||
|
$('#selected_uat_version').text('v2 (DO-282B)');
|
||||||
|
} else {
|
||||||
|
$('#selected_uat_version').text('v' + selected.uat_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate 1090 and 978 Message rate using the rolling history of Message Counts recorded from processing aircraft.json
|
||||||
|
function updateMessageRates () {
|
||||||
|
if (MessageCountHistory.length > 1) {
|
||||||
|
var message_time_delta = MessageCountHistory[MessageCountHistory.length-1].time - MessageCountHistory[0].time;
|
||||||
|
var message_count_delta = MessageCountHistory[MessageCountHistory.length-1].messages - MessageCountHistory[0].messages;
|
||||||
|
if (message_time_delta > 0)
|
||||||
|
MessageRate = message_count_delta / message_time_delta;
|
||||||
|
} else {
|
||||||
|
MessageRate = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (MessageCountHistory_UAT.length > 1) {
|
||||||
|
var message_time_delta = MessageCountHistory_UAT[MessageCountHistory_UAT.length-1].time - MessageCountHistory_UAT[0].time;
|
||||||
|
var message_count_delta = MessageCountHistory_UAT[MessageCountHistory_UAT.length-1].messages - MessageCountHistory_UAT[0].messages;
|
||||||
|
if (message_time_delta > 0)
|
||||||
|
UatMessageRate = message_count_delta / message_time_delta;
|
||||||
|
} else {
|
||||||
|
UatMessageRate = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function refreshHighlighted() {
|
function refreshHighlighted() {
|
||||||
// this is following nearly identical logic, etc, as the refreshSelected function, but doing less junk for the highlighted pane
|
// this is following nearly identical logic, etc, as the refreshSelected function, but doing less junk for the highlighted pane
|
||||||
var highlighted = false;
|
var highlighted = false;
|
||||||
|
|
@ -1479,11 +1605,14 @@ function refreshHighlighted() {
|
||||||
$('#higlighted_icaotype').text("n/a");
|
$('#higlighted_icaotype').text("n/a");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (highlighted.getDataSource() === "adsb_icao") {
|
var datasource = highlighted.getDataSource();
|
||||||
|
if (datasource === "uat") {
|
||||||
|
$('#highlighted_source').text("UAT");
|
||||||
|
} else if (datasource === "adsb_icao") {
|
||||||
$('#highlighted_source').text("ADS-B");
|
$('#highlighted_source').text("ADS-B");
|
||||||
} else if (highlighted.getDataSource() === "tisb_trackfile" || highlighted.getDataSource() === "tisb_icao" || highlighted.getDataSource() === "tisb_other") {
|
} else if (datasource === "tisb_trackfile" || datasource === "tisb_icao" || datasource === "tisb_other") {
|
||||||
$('#highlighted_source').text("TIS-B");
|
$('#highlighted_source').text("TIS-B");
|
||||||
} else if (highlighted.getDataSource() === "mlat") {
|
} else if (datasource === "mlat") {
|
||||||
$('#highlighted_source').text("MLAT");
|
$('#highlighted_source').text("MLAT");
|
||||||
} else {
|
} else {
|
||||||
$('#highlighted_source').text("Other");
|
$('#highlighted_source').text("Other");
|
||||||
|
|
@ -1515,83 +1644,86 @@ function removeHighlight() {
|
||||||
|
|
||||||
// Refreshes the larger table of all the planes
|
// Refreshes the larger table of all the planes
|
||||||
function refreshTableInfo() {
|
function refreshTableInfo() {
|
||||||
var show_squawk_warning = false;
|
var show_squawk_warning = false;
|
||||||
|
|
||||||
TrackedAircraft = 0
|
TrackedAircraft = 0
|
||||||
TrackedAircraftPositions = 0
|
TrackedAircraftPositions = 0
|
||||||
TrackedHistorySize = 0
|
TrackedHistorySize = 0
|
||||||
|
|
||||||
$(".altitudeUnit").text(get_unit_label("altitude", DisplayUnits));
|
$(".altitudeUnit").text(get_unit_label("altitude", DisplayUnits));
|
||||||
$(".speedUnit").text(get_unit_label("speed", DisplayUnits));
|
$(".speedUnit").text(get_unit_label("speed", DisplayUnits));
|
||||||
$(".distanceUnit").text(get_unit_label("distance", DisplayUnits));
|
$(".distanceUnit").text(get_unit_label("distance", DisplayUnits));
|
||||||
$(".verticalRateUnit").text(get_unit_label("verticalRate", DisplayUnits));
|
$(".verticalRateUnit").text(get_unit_label("verticalRate", DisplayUnits));
|
||||||
|
|
||||||
for (var i = 0; i < PlanesOrdered.length; ++i) {
|
for (var i = 0; i < PlanesOrdered.length; ++i) {
|
||||||
var tableplane = PlanesOrdered[i];
|
var tableplane = PlanesOrdered[i];
|
||||||
TrackedHistorySize += tableplane.history_size;
|
TrackedHistorySize += tableplane.history_size;
|
||||||
if (tableplane.seen >= 58 || tableplane.isFiltered()) {
|
if (tableplane.seen >= 58 || tableplane.isFiltered()) {
|
||||||
tableplane.tr.className = "plane_table_row hidden";
|
tableplane.tr.className = "plane_table_row hidden";
|
||||||
} else {
|
} else {
|
||||||
TrackedAircraft++;
|
TrackedAircraft++;
|
||||||
var classes = "plane_table_row";
|
var classes = "plane_table_row";
|
||||||
|
|
||||||
if (tableplane.position !== null && tableplane.seen_pos < 60) {
|
if (tableplane.position !== null && tableplane.seen_pos < 60) {
|
||||||
++TrackedAircraftPositions;
|
++TrackedAircraftPositions;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tableplane.getDataSource() === "adsb_icao") {
|
var datasource = tableplane.getDataSource();
|
||||||
classes += " vPosition";
|
if (datasource === "uat") {
|
||||||
} else if (tableplane.getDataSource() === "tisb_trackfile" || tableplane.getDataSource() === "tisb_icao" || tableplane.getDataSource() === "tisb_other") {
|
classes += " uat";
|
||||||
classes += " tisb";
|
} else if (datasource === "adsb_icao") {
|
||||||
} else if (tableplane.getDataSource() === "mlat") {
|
classes += " vPosition";
|
||||||
classes += " mlat";
|
} else if (datasource === "tisb_trackfile" || datasource === "tisb_icao" || datasource === "tisb_other") {
|
||||||
} else {
|
classes += " tisb";
|
||||||
classes += " other";
|
} else if (datasource === "mlat") {
|
||||||
|
classes += " mlat";
|
||||||
|
} else {
|
||||||
|
classes += " other";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tableplane.icao == SelectedPlane)
|
||||||
|
classes += " selected";
|
||||||
|
|
||||||
|
if (tableplane.squawk in SpecialSquawks) {
|
||||||
|
classes = classes + " " + SpecialSquawks[tableplane.squawk].cssClass;
|
||||||
|
show_squawk_warning = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ICAO doesn't change
|
||||||
|
if (tableplane.flight) {
|
||||||
|
tableplane.tr.cells[2].innerHTML = getFlightAwareModeSLink(tableplane.icao, tableplane.flight, tableplane.flight);
|
||||||
|
} else {
|
||||||
|
// Show _registration if ident is not present
|
||||||
|
tableplane.tr.cells[2].innerHTML = (tableplane.registration !== null ? getFlightAwareIdentLink(tableplane.registration, '_' + tableplane.registration) : "");
|
||||||
|
}
|
||||||
|
tableplane.tr.cells[3].textContent = (tableplane.registration !== null ? tableplane.registration : "");
|
||||||
|
tableplane.tr.cells[4].textContent = (tableplane.icaotype !== null ? tableplane.icaotype : "");
|
||||||
|
tableplane.tr.cells[5].textContent = (tableplane.squawk !== null ? tableplane.squawk : "");
|
||||||
|
tableplane.tr.cells[6].innerHTML = format_altitude_brief(tableplane.altitude, tableplane.vert_rate, DisplayUnits);
|
||||||
|
tableplane.tr.cells[7].textContent = format_speed_brief(tableplane.gs, DisplayUnits);
|
||||||
|
tableplane.tr.cells[8].textContent = format_vert_rate_brief(tableplane.vert_rate, DisplayUnits);
|
||||||
|
tableplane.tr.cells[9].textContent = format_distance_brief(tableplane.sitedist, DisplayUnits);
|
||||||
|
tableplane.tr.cells[10].textContent = format_track_brief(tableplane.track);
|
||||||
|
tableplane.tr.cells[11].textContent = tableplane.messages;
|
||||||
|
tableplane.tr.cells[12].textContent = tableplane.seen.toFixed(0);
|
||||||
|
tableplane.tr.cells[13].textContent = (tableplane.rssi !== null ? tableplane.rssi : "");
|
||||||
|
tableplane.tr.cells[14].textContent = (tableplane.position !== null ? tableplane.position[1].toFixed(4) : "");
|
||||||
|
tableplane.tr.cells[15].textContent = (tableplane.position !== null ? tableplane.position[0].toFixed(4) : "");
|
||||||
|
tableplane.tr.cells[16].textContent = format_data_source(tableplane.getDataSource());
|
||||||
|
tableplane.tr.cells[17].innerHTML = getAirframesModeSLink(tableplane.icao);
|
||||||
|
tableplane.tr.cells[18].innerHTML = getFlightAwareModeSLink(tableplane.icao, tableplane.flight);
|
||||||
|
tableplane.tr.cells[19].innerHTML = getFlightAwarePhotoLink(tableplane.registration);
|
||||||
|
tableplane.tr.className = classes;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tableplane.icao == SelectedPlane)
|
if (show_squawk_warning) {
|
||||||
classes += " selected";
|
$("#SpecialSquawkWarning").css('display','block');
|
||||||
|
|
||||||
if (tableplane.squawk in SpecialSquawks) {
|
|
||||||
classes = classes + " " + SpecialSquawks[tableplane.squawk].cssClass;
|
|
||||||
show_squawk_warning = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ICAO doesn't change
|
|
||||||
if (tableplane.flight) {
|
|
||||||
tableplane.tr.cells[2].innerHTML = getFlightAwareModeSLink(tableplane.icao, tableplane.flight, tableplane.flight);
|
|
||||||
} else {
|
} else {
|
||||||
// Show _registration if ident is not present
|
$("#SpecialSquawkWarning").css('display','none');
|
||||||
tableplane.tr.cells[2].innerHTML = (tableplane.registration !== null ? getFlightAwareIdentLink(tableplane.registration, '_' + tableplane.registration) : "");
|
|
||||||
}
|
}
|
||||||
tableplane.tr.cells[3].textContent = (tableplane.registration !== null ? tableplane.registration : "");
|
|
||||||
tableplane.tr.cells[4].textContent = (tableplane.icaotype !== null ? tableplane.icaotype : "");
|
|
||||||
tableplane.tr.cells[5].textContent = (tableplane.squawk !== null ? tableplane.squawk : "");
|
|
||||||
tableplane.tr.cells[6].innerHTML = format_altitude_brief(tableplane.altitude, tableplane.vert_rate, DisplayUnits);
|
|
||||||
tableplane.tr.cells[7].textContent = format_speed_brief(tableplane.gs, DisplayUnits);
|
|
||||||
tableplane.tr.cells[8].textContent = format_vert_rate_brief(tableplane.vert_rate, DisplayUnits);
|
|
||||||
tableplane.tr.cells[9].textContent = format_distance_brief(tableplane.sitedist, DisplayUnits);
|
|
||||||
tableplane.tr.cells[10].textContent = format_track_brief(tableplane.track);
|
|
||||||
tableplane.tr.cells[11].textContent = tableplane.messages;
|
|
||||||
tableplane.tr.cells[12].textContent = tableplane.seen.toFixed(0);
|
|
||||||
tableplane.tr.cells[13].textContent = (tableplane.rssi !== null ? tableplane.rssi : "");
|
|
||||||
tableplane.tr.cells[14].textContent = (tableplane.position !== null ? tableplane.position[1].toFixed(4) : "");
|
|
||||||
tableplane.tr.cells[15].textContent = (tableplane.position !== null ? tableplane.position[0].toFixed(4) : "");
|
|
||||||
tableplane.tr.cells[16].textContent = format_data_source(tableplane.getDataSource());
|
|
||||||
tableplane.tr.cells[17].innerHTML = getAirframesModeSLink(tableplane.icao);
|
|
||||||
tableplane.tr.cells[18].innerHTML = getFlightAwareModeSLink(tableplane.icao, tableplane.flight);
|
|
||||||
tableplane.tr.cells[19].innerHTML = getFlightAwarePhotoLink(tableplane.registration);
|
|
||||||
tableplane.tr.className = classes;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (show_squawk_warning) {
|
resortTable();
|
||||||
$("#SpecialSquawkWarning").css('display','block');
|
|
||||||
} else {
|
|
||||||
$("#SpecialSquawkWarning").css('display','none');
|
|
||||||
}
|
|
||||||
|
|
||||||
resortTable();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
@ -2284,6 +2416,7 @@ function refreshDataSourceFilters () {
|
||||||
PlaneFilter.MLAT = (localStorage.getItem('sourceMLATFilter') === 'selected') ? true : false;
|
PlaneFilter.MLAT = (localStorage.getItem('sourceMLATFilter') === 'selected') ? true : false;
|
||||||
PlaneFilter.Other = (localStorage.getItem('sourceOtherFilter') === 'selected') ? true : false;
|
PlaneFilter.Other = (localStorage.getItem('sourceOtherFilter') === 'selected') ? true : false;
|
||||||
PlaneFilter.TISB = (localStorage.getItem('sourceTISBFilter') === 'selected') ? true : false;
|
PlaneFilter.TISB = (localStorage.getItem('sourceTISBFilter') === 'selected') ? true : false;
|
||||||
|
PlaneFilter.UAT = (localStorage.getItem('sourceUATFilter') === 'selected') ? true : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getFlightAwareIdentLink(ident, linkText) {
|
function getFlightAwareIdentLink(ident, linkText) {
|
||||||
|
|
@ -2608,6 +2741,23 @@ function toggleADSBAircraft(switchFilter) {
|
||||||
localStorage.setItem('sourceADSBFilter', sourceADSBFilter);
|
localStorage.setItem('sourceADSBFilter', sourceADSBFilter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function toggleUATAircraft(switchFilter) {
|
||||||
|
if (typeof localStorage['sourceUATFilter'] === 'undefined') {
|
||||||
|
localStorage.setItem('sourceUATFilter','selected');
|
||||||
|
}
|
||||||
|
|
||||||
|
var sourceUATFilter = localStorage.getItem('sourceUATFilter');
|
||||||
|
if (switchFilter === true) {
|
||||||
|
sourceUATFilter = (sourceUATFilter === 'deselected') ? 'selected' : 'deselected';
|
||||||
|
}
|
||||||
|
if (sourceUATFilter === 'deselected') {
|
||||||
|
$('#uat_datasource_checkbox').removeClass('sourceCheckboxChecked');
|
||||||
|
} else {
|
||||||
|
$('#uat_datasource_checkbox').addClass('sourceCheckboxChecked');
|
||||||
|
}
|
||||||
|
localStorage.setItem('sourceUATFilter', sourceUATFilter);
|
||||||
|
}
|
||||||
|
|
||||||
function toggleMLATAircraft(switchFilter) {
|
function toggleMLATAircraft(switchFilter) {
|
||||||
if (typeof localStorage['sourceMLATFilter'] === 'undefined') {
|
if (typeof localStorage['sourceMLATFilter'] === 'undefined') {
|
||||||
localStorage.setItem('sourceMLATFilter','selected');
|
localStorage.setItem('sourceMLATFilter','selected');
|
||||||
|
|
|
||||||
|
|
@ -259,6 +259,7 @@ div#loader { z-index: 99; position: absolute; left: 0; top: 0; bottom: 0; right:
|
||||||
}
|
}
|
||||||
|
|
||||||
.vPosition { background-color: #E5F6FC; }
|
.vPosition { background-color: #E5F6FC; }
|
||||||
|
.uat { background-color: #CDF7D0; }
|
||||||
.mlat { background-color: #FDF2E5; }
|
.mlat { background-color: #FDF2E5; }
|
||||||
.other { background-color: #CCD5F8; }
|
.other { background-color: #CCD5F8; }
|
||||||
.tisb { background-color: #FFF3B8; }
|
.tisb { background-color: #FFF3B8; }
|
||||||
|
|
@ -630,22 +631,6 @@ select.error, textarea.error, input.error {
|
||||||
-webkit-border-radius: 4px;
|
-webkit-border-radius: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#adsbLegendBox {
|
|
||||||
background-color: #E5F6FC;
|
|
||||||
}
|
|
||||||
|
|
||||||
#mlatLegendBox {
|
|
||||||
background-color: #FDF2E5;
|
|
||||||
}
|
|
||||||
|
|
||||||
#otherLegendBox {
|
|
||||||
background-color: #E6E6E6;
|
|
||||||
}
|
|
||||||
|
|
||||||
#tisbLegendBox {
|
|
||||||
background-color: #CCD5DF;
|
|
||||||
}
|
|
||||||
|
|
||||||
.legendTitle {
|
.legendTitle {
|
||||||
line-height: 19px;
|
line-height: 19px;
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue