[feat](trx-frontend-http): show APRS tracks only for selection

Co-authored-by: OpenAI Codex <codex@openai.com>
Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
2026-03-06 17:11:04 +01:00
parent 7de847b504
commit edaef98522
@@ -3428,6 +3428,7 @@ const APRS_TRACK_MAX_POINTS = 64;
const AIS_TRACK_MAX_POINTS = 64; const AIS_TRACK_MAX_POINTS = 64;
const aisMarkers = new Map(); const aisMarkers = new Map();
const vdesMarkers = new Map(); const vdesMarkers = new Map();
let selectedAprsTrackCall = null;
let selectedAisTrackMmsi = null; let selectedAisTrackMmsi = null;
const HAM_BANDS = [ const HAM_BANDS = [
{ label: "2200m", meters: 2200 }, { label: "2200m", meters: 2200 },
@@ -4060,6 +4061,7 @@ function syncAprsReceiverMarker() {
window.clearMapMarkersByType = function(type) { window.clearMapMarkersByType = function(type) {
if (type === "aprs") { if (type === "aprs") {
selectedAprsTrackCall = null;
stationMarkers.forEach((entry) => { stationMarkers.forEach((entry) => {
if (entry && entry.marker) { if (entry && entry.marker) {
if (aprsMap && aprsMap.hasLayer(entry.marker)) entry.marker.removeFrom(aprsMap); if (aprsMap && aprsMap.hasLayer(entry.marker)) entry.marker.removeFrom(aprsMap);
@@ -4223,6 +4225,13 @@ function initAprsMap() {
const marker = e.popup._source; const marker = e.popup._source;
clearMapRadioPath(); clearMapRadioPath();
setSelectedLocatorMarker(null); setSelectedLocatorMarker(null);
if (selectedAprsTrackCall) {
const prevEntry = stationMarkers.get(String(selectedAprsTrackCall));
if (prevEntry && prevEntry.track && aprsMap && aprsMap.hasLayer(prevEntry.track)) {
prevEntry.track.removeFrom(aprsMap);
}
selectedAprsTrackCall = null;
}
if (selectedAisTrackMmsi) { if (selectedAisTrackMmsi) {
const prevEntry = aisMarkers.get(String(selectedAisTrackMmsi)); const prevEntry = aisMarkers.get(String(selectedAisTrackMmsi));
if (prevEntry && prevEntry.track && aprsMap && aprsMap.hasLayer(prevEntry.track)) { if (prevEntry && prevEntry.track && aprsMap && aprsMap.hasLayer(prevEntry.track)) {
@@ -4244,6 +4253,11 @@ function initAprsMap() {
const entry = stationMarkers.get(marker._aprsCall); const entry = stationMarkers.get(marker._aprsCall);
if (!entry) return; if (!entry) return;
e.popup.setContent(buildAprsPopupHtml(marker._aprsCall, ll.lat, ll.lng, entry.info || "", entry.pkt)); e.popup.setContent(buildAprsPopupHtml(marker._aprsCall, ll.lat, ll.lng, entry.info || "", entry.pkt));
ensureAprsTrack(String(marker._aprsCall), entry);
if (entry.track && aprsMap && mapFilter.aprs && !aprsMap.hasLayer(entry.track)) {
entry.track.addTo(aprsMap);
}
selectedAprsTrackCall = String(marker._aprsCall);
setMapRadioPathTo(ll.lat, ll.lng, "aprs-radio-path"); setMapRadioPathTo(ll.lat, ll.lng, "aprs-radio-path");
return; return;
} }
@@ -4283,6 +4297,13 @@ function initAprsMap() {
aprsMap.on("popupclose", function() { aprsMap.on("popupclose", function() {
clearMapRadioPath(); clearMapRadioPath();
setSelectedLocatorMarker(null); setSelectedLocatorMarker(null);
if (selectedAprsTrackCall) {
const entry = stationMarkers.get(String(selectedAprsTrackCall));
if (entry && entry.track && aprsMap && aprsMap.hasLayer(entry.track)) {
entry.track.removeFrom(aprsMap);
}
selectedAprsTrackCall = null;
}
if (selectedAisTrackMmsi) { if (selectedAisTrackMmsi) {
const entry = aisMarkers.get(String(selectedAisTrackMmsi)); const entry = aisMarkers.get(String(selectedAisTrackMmsi));
if (entry && entry.track && aprsMap && aprsMap.hasLayer(entry.track)) { if (entry && entry.track && aprsMap && aprsMap.hasLayer(entry.track)) {
@@ -4340,6 +4361,13 @@ function initAprsMap() {
if (!key) return; if (!key) return;
if (kind === "source" && Object.prototype.hasOwnProperty.call(mapFilter, key)) { if (kind === "source" && Object.prototype.hasOwnProperty.call(mapFilter, key)) {
mapFilter[key] = !mapFilter[key]; mapFilter[key] = !mapFilter[key];
if (!mapFilter.aprs && selectedAprsTrackCall) {
const entry = stationMarkers.get(String(selectedAprsTrackCall));
if (entry && entry.track && aprsMap && aprsMap.hasLayer(entry.track)) {
entry.track.removeFrom(aprsMap);
}
selectedAprsTrackCall = null;
}
if (!mapFilter.ais && selectedAisTrackMmsi) { if (!mapFilter.ais && selectedAisTrackMmsi) {
const entry = aisMarkers.get(String(selectedAisTrackMmsi)); const entry = aisMarkers.get(String(selectedAisTrackMmsi));
if (entry && entry.track && aprsMap && aprsMap.hasLayer(entry.track)) { if (entry && entry.track && aprsMap && aprsMap.hasLayer(entry.track)) {
@@ -4750,10 +4778,6 @@ function ensureAprsTrack(call, entry) {
track.__trxType = "aprs"; track.__trxType = "aprs";
track._aprsCall = call; track._aprsCall = call;
entry.track = track; entry.track = track;
mapMarkers.add(track);
if (mapFilter.aprs) {
track.addTo(aprsMap);
}
} }
function _aprsAddMarkerToMap(call, entry) { function _aprsAddMarkerToMap(call, entry) {