dump1090-fa/public_html/formatter.js

310 lines
6.6 KiB
JavaScript
Raw Normal View History

// -*- mode: javascript; indent-tabs-mode: t; c-basic-offset: 8 -*-
"use strict";
var NBSP='\u00a0';
var DEGREES='\u00b0'
var UP_TRIANGLE='\u25b2'; // U+25B2 BLACK UP-POINTING TRIANGLE
var DOWN_TRIANGLE='\u25bc'; // U+25BC BLACK DOWN-POINTING TRIANGLE
var TrackDirections = ["North","NE","East","SE","South","SW","West","NW"];
2016-08-22 21:48:17 +00:00
var UnitLabels = {
'altitude': { metric: "m", imperial: "ft", nautical: "ft"},
'speed': { metric: "km/h", imperial: "mph", nautical: "kt" },
'distance': { metric: "km", imperial: "mi", nautical: "NM" },
2018-08-03 23:39:13 +00:00
'verticalRate': { metric: "m/s", imperial: "ft/min", nautical: "ft/min" },
'distanceShort': {metric: "m", imperial: "ft", nautical: "m"}
2016-08-22 21:48:17 +00:00
};
// formatting helpers
2016-08-22 21:48:17 +00:00
function get_unit_label(quantity, systemOfMeasurement) {
var labels = UnitLabels[quantity];
if (labels !== undefined && labels[systemOfMeasurement] !== undefined) {
return labels[systemOfMeasurement];
}
return "";
}
// track in degrees (0..359)
function format_track_brief(track) {
if (track === null){
return "";
}
return Math.round(track) + DEGREES;
}
// track in degrees (0..359)
function format_track_long(track) {
if (track === null){
return "n/a";
}
var trackDir = Math.floor((360 + track % 360 + 22.5) / 45) % 8;
return Math.round(track) + DEGREES + NBSP + "(" + TrackDirections[trackDir] + ")";
}
// alt in feet
2016-08-22 21:48:17 +00:00
function format_altitude_brief(alt, vr, displayUnits) {
var alt_text;
if (alt === null){
return "";
} else if (alt === "ground"){
return "ground";
}
alt_text = Math.round(convert_altitude(alt, displayUnits)).toLocaleString() + NBSP;
// Vertical Rate Triangle
2016-09-12 22:08:22 +00:00
var verticalRateTriangle = "<span class=\"verticalRateTriangle\">";
if (vr > 128){
2016-09-12 22:08:22 +00:00
verticalRateTriangle += UP_TRIANGLE;
} else if (vr < -128){
2016-09-12 22:08:22 +00:00
verticalRateTriangle += DOWN_TRIANGLE;
} else {
2016-09-12 22:08:22 +00:00
verticalRateTriangle += NBSP;
}
2016-09-12 22:08:22 +00:00
verticalRateTriangle += "</span>"
return alt_text + verticalRateTriangle;
}
// alt in feet
2016-08-22 21:48:17 +00:00
function format_altitude_long(alt, vr, displayUnits) {
var alt_text = "";
if (alt === null) {
return "n/a";
} else if (alt === "ground") {
return "on ground";
}
alt_text = Math.round(convert_altitude(alt, displayUnits)).toLocaleString() + NBSP + get_unit_label("altitude", displayUnits);
if (vr > 128) {
return UP_TRIANGLE + NBSP + alt_text;
} else if (vr < -128) {
return DOWN_TRIANGLE + NBSP + alt_text;
} else {
return alt_text;
}
}
// alt ground/airborne
function format_onground (alt) {
if (alt === null) {
return "n/a";
} else if (alt === "ground") {
return "on ground";
} else {
return "airborne";
}
}
// alt in feet
function convert_altitude(alt, displayUnits) {
2016-08-22 21:48:17 +00:00
if (displayUnits === "metric") {
return alt / 3.2808; // feet to meters
}
return alt;
}
// speed in knots
function format_speed_brief(speed, displayUnits) {
if (speed === null) {
return "";
}
2016-08-22 21:48:17 +00:00
return Math.round(convert_speed(speed, displayUnits));
}
// speed in knots
2016-08-22 21:48:17 +00:00
function format_speed_long(speed, displayUnits) {
if (speed === null) {
return "n/a";
}
var speed_text = Math.round(convert_speed(speed, displayUnits)) + NBSP + get_unit_label("speed", displayUnits);
return speed_text;
}
// speed in knots
function convert_speed(speed, displayUnits) {
if (displayUnits === "metric") {
return speed * 1.852; // knots to kilometers per hour
}
else if (displayUnits === "imperial") {
return speed * 1.151; // knots to miles per hour
}
return speed;
}
// dist in meters
2016-08-22 21:48:17 +00:00
function format_distance_brief(dist, displayUnits) {
if (dist === null) {
return "";
}
return convert_distance(dist, displayUnits).toFixed(1);
}
// dist in meters
function format_distance_long(dist, displayUnits, fixed) {
if (dist === null) {
return "n/a";
}
if (typeof fixed === 'undefined') {
fixed = 1;
}
var dist_text = convert_distance(dist, displayUnits).toFixed(fixed) + NBSP + get_unit_label("distance", displayUnits);
2016-08-22 21:48:17 +00:00
return dist_text;
}
2018-08-17 16:31:12 +00:00
function format_distance_short (dist, displayUnits) {
2018-08-03 23:39:13 +00:00
if (dist === null) {
return "n/a";
}
var dist_text = Math.round(convert_distance_short(dist, displayUnits)) + NBSP + get_unit_label("distanceShort", displayUnits);
return dist_text;
}
// dist in meters
function convert_distance(dist, displayUnits) {
if (displayUnits === "metric") {
return (dist / 1000); // meters to kilometers
}
else if (displayUnits === "imperial") {
return (dist / 1609); // meters to miles
}
return (dist / 1852); // meters to nautical miles
}
2018-08-03 23:39:13 +00:00
// dist in meters
// converts meters to feet or just returns meters
function convert_distance_short(dist, displayUnits) {
if (displayUnits === "imperial") {
2018-08-17 16:31:12 +00:00
return (dist / 0.3048); // meters to feet
2018-08-03 23:39:13 +00:00
}
return dist; // just meters
}
2016-08-22 21:48:17 +00:00
// rate in ft/min
function format_vert_rate_brief(rate, displayUnits) {
if (rate === null || rate === undefined) {
2016-08-22 21:48:17 +00:00
return "";
}
return convert_vert_rate(rate, displayUnits).toFixed(displayUnits === "metric" ? 1 : 0);
}
// rate in ft/min
function format_vert_rate_long(rate, displayUnits) {
if (rate === null || rate === undefined) {
return "n/a";
}
var rate_text = convert_vert_rate(rate, displayUnits).toFixed(displayUnits === "metric" ? 1 : 0) + NBSP + get_unit_label("verticalRate", displayUnits);
return rate_text;
}
// rate in ft/min
function convert_vert_rate(rate, displayUnits) {
2016-08-22 21:48:17 +00:00
if (displayUnits === "metric") {
return (rate / 196.85); // ft/min to m/s
2016-08-22 21:48:17 +00:00
}
return rate;
}
2016-07-02 13:44:14 +00:00
// p is a [lon, lat] coordinate
function format_latlng(p) {
2016-07-02 13:44:14 +00:00
return p[1].toFixed(3) + DEGREES + "," + NBSP + p[0].toFixed(3) + DEGREES;
}
function format_data_source(source) {
switch (source) {
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
2021-02-25 05:35:05 +00:00
case 'uat':
return "UAT";
case 'mlat':
return "MLAT";
case 'adsb_icao':
case 'adsb_other':
2016-09-13 21:52:53 +00:00
return "ADS-B";
case 'adsb_icao_nt':
return "ADS-B (non transponder)";
case 'adsr_icao':
case 'adsr_other':
return "ADS-R";
case 'tisb_icao':
case 'tisb_trackfile':
case 'tisb_other':
return "TIS-B";
case 'mode_s':
return "Mode S";
case 'mode_ac':
return "Mode A/C";
}
return "";
}
2018-08-02 18:04:44 +00:00
function format_nac_p (value) {
switch (value) {
case 0:
return "EPU ≥ 18.52 km";
case 1:
return "EPU < 18.52 km";
case 2:
return "EPU < 7.408 km";
case 3:
return "EPU < 3.704 km";
case 4:
return "EPU < 1852 m";
case 5:
return "EPU < 926 m";
case 6:
return "EPU < 555.6 m";
case 7:
return "EPU < 185.2 m";
case 8:
return "EPU < 92.6 m";
case 9:
return "EPU < 30 m";
case 10:
return "EPU < 10 m";
case 11:
return "EPU < 3 m";
default:
return "n/a";
}
}
function format_nac_v (value) {
switch (value) {
case 0:
return "Unknown or 10 m/s";
case 1:
return "< 10 m/s";
case 2:
return "< 3 m/s";
case 3:
return "< 1 m/s";
case 4:
return "< 0.3 m/s";
default:
return "n/a";
}
}