diff --git a/public_html/index.html b/public_html/index.html index f02857a..d06b99e 100644 --- a/public_html/index.html +++ b/public_html/index.html @@ -234,6 +234,17 @@
+
+ +
+ + + to + + +
+
+
diff --git a/public_html/planeObject.js b/public_html/planeObject.js index a02c2ac..9e15fa1 100644 --- a/public_html/planeObject.js +++ b/public_html/planeObject.js @@ -103,7 +103,7 @@ function PlaneObject(icao) { } if (this.selected) { - refreshSelected(); + refreshSelected(); } }.bind(this)); } @@ -112,7 +112,7 @@ PlaneObject.prototype.isFiltered = function() { // aircraft type filter if (this.filter.aircraftTypeCode) { if (this.icaotype === null || (typeof this.icaotype === 'string' && !this.icaotype.toUpperCase().trim().match(this.filter.aircraftTypeCode))) { - return true; + return true; } } @@ -136,23 +136,38 @@ PlaneObject.prototype.isFiltered = function() { if (this.filter.minAltitude !== undefined && this.filter.maxAltitude !== undefined) { if (this.altitude === null || this.altitude === undefined) { - return true; + return true; } + var planeAltitude = this.altitude === "ground" ? 0 : convert_altitude(this.altitude, this.filter.altitudeUnits); - return planeAltitude < this.filter.minAltitude || planeAltitude > this.filter.maxAltitude; + var isFilteredByAltitude = planeAltitude < this.filter.minAltitude || planeAltitude > this.filter.maxAltitude; + if (isFilteredByAltitude) { + return true; + } + } + if (this.filter.minSpeedFilter !== undefined && this.filter.maxSpeedFilter !== undefined) { + if (this.speed === null || this.speed === undefined) { + return true; + } + + var convertedSpeed = convert_speed(this.speed, this.filter.speedUnits) + var isFilteredBySpeed = convertedSpeed < this.filter.minSpeedFilter || convertedSpeed > this.filter.maxSpeedFilter; + if (isFilteredBySpeed) { + return true; + } } // filter out ground vehicles if (typeof this.filter.groundVehicles !== 'undefined' && this.filter.groundVehicles === 'filtered') { if (typeof this.category === 'string' && this.category.startsWith('C')) { - return true; + return true; } } // filter out blocked MLAT flights if (typeof this.filter.blockedMLAT !== 'undefined' && this.filter.blockedMLAT === 'filtered') { if (typeof this.icao === 'string' && this.icao.startsWith('~')) { - return true; + return true; } } @@ -483,17 +498,16 @@ PlaneObject.prototype.updateIcon = function() { // Update our data PlaneObject.prototype.updateData = function(receiver_timestamp, data) { - // Update all of our data - this.messages = data.messages; - this.rssi = data.rssi; - this.last_message_time = receiver_timestamp - data.seen; + // Update all of our data + this.messages = data.messages; + this.rssi = data.rssi; + this.last_message_time = receiver_timestamp - data.seen; // simple fields - var fields = ["alt_baro", "alt_geom", "gs", "ias", "tas", "track", "track_rate", "mag_heading", "true_heading", "mach", - "roll", "nav_heading", "nav_modes", - "nac_p", "nac_v", "nic_baro", "sil_type", "sil", + "roll", "nav_heading", "nav_modes", + "nac_p", "nac_v", "nic_baro", "sil_type", "sil", "nav_qnh", "baro_rate", "geom_rate", "rc", "squawk", "category", "version"]; @@ -580,38 +594,38 @@ PlaneObject.prototype.updateTick = function(receiver_timestamp, last_timestamp) this.seen = receiver_timestamp - this.last_message_time; this.seen_pos = (this.last_position_time === null ? null : receiver_timestamp - this.last_position_time); - // If no packet in over 58 seconds, clear the plane. - if (this.seen > 58) { + // If no packet in over 58 seconds, clear the plane. + if (this.seen > 58) { if (this.visible) { //console.log("hiding " + this.icao); this.clearMarker(); this.visible = false; - if (SelectedPlane == this.icao) + if (SelectedPlane == this.icao) selectPlaneByHex(null,false); } - } else { + } else { if (this.position !== null && (this.selected || this.seen_pos < 60)) { - this.visible = true; - if (this.updateTrack(receiver_timestamp, last_timestamp)) { + this.visible = true; + if (this.updateTrack(receiver_timestamp, last_timestamp)) { this.updateLines(); this.updateMarker(true); } else { this.updateMarker(false); // didn't move } } else { - this.clearMarker(); - this.visible = false; - } - } + this.clearMarker(); + this.visible = false; + } + } }; PlaneObject.prototype.clearMarker = function() { - if (this.marker) { + if (this.marker) { PlaneIconFeatures.remove(this.marker); PlaneIconFeatures.remove(this.markerStatic); /* FIXME google.maps.event.clearListeners(this.marker, 'click'); */ this.marker = this.markerStatic = null; - } + } }; // Update our marker on the map diff --git a/public_html/script.js b/public_html/script.js index 655ffb8..b2edbd9 100644 --- a/public_html/script.js +++ b/public_html/script.js @@ -53,6 +53,7 @@ var layers; var layerGroup; var altitude_slider = null; +var speed_slider = null; // piaware vs flightfeeder var isFlightFeeder = false; @@ -342,6 +343,44 @@ function initialize() { customAltitudeColors = false; } + speed_slider = document.getElementById('speed_slider'); + + noUiSlider.create(speed_slider, { + start: [0, 1000], + connect: true, + range: { + 'min': 0, + 'max': 1000 + }, + step: 5, + format: { + // 'to' the formatted value. Receives a number. + to: function (value) { + return value; + }, + // 'from' the formatted value. + // Receives a string, should return a number. + from: function (value) { + return value; + } + } + }); + + var minSpeedInput = document.getElementById('minSpeedText'), + maxSpeedInput = document.getElementById('maxSpeedText'); + + speed_slider.noUiSlider.on('update', function (values, handle) { + if (handle) { + maxSpeedInput.innerHTML = values[handle]; + } else { + minSpeedInput.innerHTML = values[handle]; + } + }); + + speed_slider.noUiSlider.on('set', function (values, handle) { + onFilterBySpeed(); + }); + $("#aircraft_type_filter_form").submit(onFilterByAircraftType); $("#aircraft_type_filter_reset_button").click(onResetAircraftTypeFilter); @@ -2037,6 +2076,11 @@ function onFilterByAltitude() { } } +function onFilterBySpeed() { + updatePlaneFilter(); + refreshTableInfo(); +} + function onFilterByAircraftType(e) { e.preventDefault(); updatePlaneFilter(); @@ -2128,21 +2172,29 @@ function toggleAltitudeChart(switchToggle) { } function updatePlaneFilter() { + // Get min/max altitude values from slider var minAltitude = document.getElementById('minAltitudeText').innerHTML.trim(); var maxAltitude = document.getElementById('maxAltitudeText').innerHTML.trim(); - console.log("minAltitude: " + minAltitude); - console.log("maxAltitude: " + maxAltitude); - PlaneFilter.minAltitude = minAltitude; PlaneFilter.maxAltitude = maxAltitude; PlaneFilter.altitudeUnits = DisplayUnits; + // Get min/max speed values from slider + var minSpeedFilter = document.getElementById('minSpeedText').innerHTML.trim(); + var maxSpeedFilter = document.getElementById('maxSpeedText').innerHTML.trim(); + + PlaneFilter.minSpeedFilter = minSpeedFilter; + PlaneFilter.maxSpeedFilter = maxSpeedFilter; + PlaneFilter.speedUnits = DisplayUnits; + + // Get aircraft type code filter from input box var aircraftTypeCode = $("#aircraft_type_filter").val().trim().toUpperCase() if (aircraftTypeCode === "") { aircraftTypeCode = undefined } + // Get aircraft ident filter from input box var aircraftIdent = $("#aircraft_ident_filter").val().trim().toUpperCase() if (aircraftIdent === "") { aircraftIdent = undefined diff --git a/public_html/style.css b/public_html/style.css index 4793621..5bf884b 100644 --- a/public_html/style.css +++ b/public_html/style.css @@ -888,7 +888,7 @@ select.error, textarea.error, input.error { grid-template-columns: repeat(3, 1fr); } -#altitude_slider { +#altitude_slider, #speed_slider { position: relative; display: block; margin-left: 10px;