Repository navigation
Frequency Changes
🇮🇱 עברית
NavAid can mark reporting points where an ATC frequency change is expected and can attach an editable frequency callout to matching route waypoints.
Use Map → Show/Add Freq Changes.
- The layer is on by default.
- A frequency change is announced by its lightning callout, which carries the frequency. The red ring the points once wore is off (
commChangeRings): a ringed circle now means a hotspot. - A frequency-change point carries the chart's magenta dot (
commChangeDot,commChangeDotColor), on the CVFR and Low Alt charts alike. - Zoomed out, the ring, arrow and text can shrink with the other chart symbols, and the layer can be hidden below a zoom of its own (
commChangeMinZoom). See The map. - Turning the layer off hides the linked callouts without deleting route data.
- Turning it back on restores existing callouts and seeds missing callouts for matching route waypoints.
When a route waypoint is snapped to, or within about 18 px of, a known comm-change point, NavAid creates a large black lightning-style callout:
- The pointed end sits outside the waypoint circle so the waypoint remains selectable independently.
- The far tail can be dragged around the waypoint to rotate the callout and move it nearer or farther.
- The call sign is drawn above the line and the frequency below it, aligned to the callout rotation.
- Deleting the route waypoint deletes its linked frequency callout.
- Deleting the frequency callout does not delete the route waypoint.
- Moving the waypoint away from the known comm-change location removes the linked callout.
These callouts are saved inside navaid.route as note entries tagged with cc, plus editable freqName and freq fields.
A point served by two stations names the one for the direction flown, from the waypoint drawn
next (its routeHints). That holds even when the published corridor to that waypoint crosses
another comm-change point on the way — NMASD southbound (next NITZA, via ZDAFA) is Hagav North
128.35, northbound (next ZASHD) Palmachim 135.55. Before October 2026 the corridor's
in-between point cut the look-ahead short, and southbound fell to Palmachim, the frequency already
in use since TYONA.
Reverse works every callout out again for the new direction, because the station a point calls depends on which way it is flown (reversing LLIB → LLHZ gives ZMGID Pluto East, not the southbound Pluto West). A station you picked by hand stays exactly as you chose it.
A callout marks a radio call you actually make, so two cases stay silent:
- The frequency is already in effect from an earlier point on the route — however many waypoints back that was. Crossing another point served by the same station calls for nothing on the radio. A callout you hand-edited counts as what is in effect, exactly as it reads on screen; suppressing one by hand hides the note, not the frequency, so later points still compare against it. This applies where the station at the point is certain: a direction hint matches the leg flown, or the point publishes only one station. At a point with several stations and no matching hint the app's pick is a guess, and it is shown rather than hidden.
-
The turning point — you leave on the frequency you arrived on, so none is seeded and none can be added there: Add frequency change is dimmed with that reason on it, and
Zdoes nothing.
Select a frequency callout to edit it in the inspector.
| Field | Meaning |
|---|---|
| Waypoint | The reporting point / route waypoint name. |
| Call sign | Dropdown of allowed call signs for that waypoint. |
| Frequency | Editable frequency. Choosing a call sign fills the default primary frequency, but you can override it. A Default row shows the catalog default whenever the current value differs, and a ↻ button resets the field back to that default. |
The frequency field is a validated numeric MHz input: it accepts 118.000 – 136.975 (3-digit MHz, up to 3 decimals) and flags anything out of range as invalid instead of saving it.
In Hebrew, call-sign choices use the Hebrew label from the catalog when available.
When an active NOTAM states a new frequency in so many words, NavAid uses it. Not in a row beside the published one — in the field's own row, ringed red:
Primary 125.60 ↻ ← ringed; title: NOTAM C1574/26 · AIP 122.20
Clearance 118.55 ↻ ← ringed; title: NOTAM C1574/26 · AIP 121.70
Two rows for one frequency is two answers to one question, and the pilot has to work out which to call. One row, ringed, is the answer — marked as not the published one. The published value is not lost: it is in the row's tooltip, beside the NOTAM id.
It behaves like every other frequency in the app. Type over it, reset it — and reset returns to the frequency in force, not the one the NOTAM superseded.
It can create a row that has none. Haifa publishes no clearance frequency at all, so
there is nothing to substitute into; A0685/26 installed one and the row simply appears, its
tooltip reading NOTAM A0685/26 · not published in the AIP.
It follows the call sign, not the panel. The airfield inspector is not where a pilot reads the frequency they are about to call — a waypoint's comm-change is, and it seeds itself from the airfield's call sign. So the change is applied at the call sign's template, and everything follows from one definition: the waypoint inspector, the Freq column, the map callouts, the airfield row, and every reset button among them. With C1574/26 in force, Bnei Dror and Deror offer 125.60, ringed, not 122.20.
Nothing is stored. The value is computed each time the panel is drawn, so when the NOTAM
leaves the feed the frequency returns to the AIP's on its own — no file to edit back, no
stale number outliving the reason it was true. That is the difference between this and
copying the number into airfields.json, which is what used to happen and went stale within
weeks: A0680/26's 121.80 was replaced by A0685/26's 127.80 and only a person reading the
feed would have known.
The parser is narrow on purpose, because a mis-parse puts a pilot on the wrong frequency. Each pattern must name its service and its frequency in one match:
| NOTAM text | Read as |
|---|---|
NEW FREQ INSTL FOR CLEARANCE … 127.800MHZ |
clearance 127.80 |
TWR FREQ TEMPO CHG TO 125.600MHZ |
tower 125.60 |
CLEARANCE (CPT) FREQ CHG TO 118.550MHZ |
clearance 118.55 |
TWR FREQ 122.10MHZ U/S |
nothing |
CTC TWR ON 122.100MHZ FOR TAXI |
nothing |
CLEARANCE FREQ 118.550MHZ NOT AVBL |
nothing |
TWR FREQ CHG TO BE PUBLISHED AT A LATER DATE |
nothing |
Anything not matched yields no value and keeps the older behaviour — a pointer badge that names the NOTAM and opens it, so you read and decide:
⚠ Frequency NOTAM: C1574/26 ← opens that NOTAM
The badge is unaffected by any of this, and stays even when a frequency was read.
featureNotamFreqRows in the tuning gist turns the applied frequencies off; the badge
remains.
The 📡 Freq table button in the toolbar Settings section opens a standalone editor for your local frequency defaults — handy when a station's published frequency differs from the shipped catalog.
- One list, grouped and sorted by ICAO, and within a code by kind: the call sign first, then Clearance and ATIS. Each row is named for its field and its service — Herzliya Tower, Herzliya Clearance — with the ICAO underneath, the way the charts window names a field.
- The table scrolls sideways on a narrow screen, and says so: a fade appears on whichever side still has more of it. A row with no aerodrome of its own — area control, a VOR — sorts after every airport rather than in among them.
- Columns are Override, Source, Default — the value in force first, because that is what you read and what you edit, then where it came from, then what the book says it was.
- A search box and an aerodrome dropdown beside it, the same control the NOTAM list has: every code that has rows, with its count, All first.
- Type a new MHz value to override a call sign everywhere it is used on the map; overridden rows are highlighted and the override persists in
localStorageundernavaid.commFreqOverrides. - Each row has a ↻ reset, and Restore originals clears every override at once (call-sign, airfield Clearance/ATIS, and VOR).
- Overrides are validated against the same 118 – 136.975 MHz range; invalid entries are marked and not saved.
- Because overrides are keyed by call sign (not by waypoint), changing one here updates every callout that uses that station.
A frequency a NOTAM states outright is the value in force, and the table shows it that way:
| Default | Source | Override | |
|---|---|---|---|
| LLHZ Primary | 122.20 | NOTAM | 125.60 |
| LLHZ Clearance | 121.70 | NOTAM | 118.55 |
| LLHA Clearance | (none published) | NOTAM | 127.80 |
| LLBG Clearance | 121.55 | AIP | 121.55 |
- Default never moves. A NOTAM is a change in force today, not a new published default — so the column keeps what the AIP or the catalog says, and you can see what the change replaced. Where a NOTAM created the row (Haifa publishes no clearance at all) the column is blank rather than echoing the NOTAM back as if the AIP had said it.
-
Source says where the value in force came from:
AIPfor anything published — the aerodrome packs, the call-sign catalog, ENR 4.1 for the VORs — orNOTAM, with the id in its tooltip. It is text, so it survives a print or an export. In Hebrew the AIP is פמ״ת. -
Clicking
NOTAMopens that NOTAM, and only that one. The Freq table stays open behind it, so closing the NOTAM puts you back where you were. - Reset undoes your edit, not the NOTAM. ↻ returns the row to the frequency in force, which is the NOTAM's while one is in force.
- Nothing is stored: when the NOTAM leaves the feed the row returns to the published value on its own, and a row a NOTAM created stops existing.
The CVFR data lives in docs/data/cvfr-route-graph.json; LSA and helicopter
layers use their matching prefixed graphs. Comm-change points are carried on the
graph's nodes (commChange plus callSigns) and projected into the shape the app
consumes at run time. The graph contains:
- A call-sign catalog with primary / secondary frequencies.
- A per-waypoint list of allowed call signs.
- 52 current comm-change points on the CVFR graph.
The Low Alt (LSA) graph has its own: 28 frequency-change points read off the LSA chart (the legend's black triangle with a magenta dot), with the call signs from the magenta labels at each, so frequencies resolve on Low Alt too. 19 of its points are also marked compulsory.
The repo also keeps human-readable summaries:
The callout's label sits away from its waypoint at a fixed angle from the leg's track —
-230° by default (commCalloutAngleDeg, positive is left of track): behind and to the left,
clear of the quarter the cumulative-time kite occupies and of the nav kite ahead. Drag a callout and
it stays where you put it; the angle only decides where an untouched one starts.
While the waypoint it points at is being dragged, the callout is hidden — its arrow otherwise sweeps a heavy line across the very ground the point is being dragged towards. Dragging the label itself keeps it drawn, because that is the thing being aimed. It returns the moment the drag ends.
Open the app with ?tune=1 to preview visual constants without saving them. The frequency-callout constants include the (off by default) ring size, lightning line width, lightning bend positions, lightning rotation, arrow/tail gap, text sizes, text gap, halo settings, and the callout angle above.
For pilots
- Quick Start
- Video tutorials · סרטונים
- Features
- The Map
- Auto zoom
- Toolbar
- Phone layout
- Safety notice
- Route and Legs
- Waypoints and Notes
- Inspector
- AI Assistant
- User Guide
- Frequency Changes
- VOR and Radial/DME
- Map Layers
- Bearing dial
- Extra Layers
- Airport charts
- Flight Plan
- Route check
- Flight planning form
- Submit a flight plan
- Fuel
- Print and Export
- Simulator Connect
- Google Earth
- GPS Track Recording
- Comm failure
- Follow me
- Bilingual UI
- Offline and PWA
- Settings and Persistence
- Keyboard and Touch
- FAQ and Troubleshooting
For developers
- Architecture
- Directory Structure
- Tuning Panel
- Hidden Tools
- LocalStorage Schema
- Nav-waypoints dataset
- Airfields dataset
- Service Worker
- Deployment
- Contributing
- Changelog
🇮🇱 עברית
לטייסים
- התחלה מהירה
- תכונות
- עוזר AI
- מדריך למשתמש
- זום אוטומטי
- שינויי תדר
- VOR ו-Radial/DME
- סרגל הכלים
- פריסת הטלפון
- הודעת הבטיחות
- שכבות מפה
- שכבות נוספות
- תוכנית טיסה
- בדיקת מסלול
- טופס תכנון טיסה
- הגשת תוכנית טיסה
- הדפסה וייצוא
- חיבור סימולטור
- Google Earth
- הקלטת מסלול GPS
- תקלת קשר
- עקבו אחריי
- ממשק דו-לשוני
- לא מקוון ו-PWA
- הגדרות ושמירה
- מקלדת ומגע
- שאלות נפוצות ופתרון תקלות
למפתחים
🌐 Live 🧪 Staging 📦 Repo 💡 Ideas / bugs