The old remote pass kept every non-large fixed-wing row with no large airport within 1000 km, so regions without big cities (central Australia, Canada edges) got filled with dozens of tiny strips.
scripts/build-world-airports.mjs now greedily thins the same candidate pool to one special per ~1000 km region: candidates sorted by priority (scheduled service, then type rank medium < small < seaplane, then numeric id), accepted only if at least REMOTE_RADIUS_KM from every already-accepted special. Subsumes and deletes the old 40 km remote clustering; large-airport pass and all guards unchanged.
Regenerated data/airports_world.csv: 1483 → 1161 rows (1119 large unchanged, specials 364 → 42; min pairwise special distance 1001.6 km). New unit test pins the pairwise-sparsity invariant on the committed dataset (lib/airports.test.ts); no runtime code changes in lib/airports.ts.
v0.68.0 — see CHANGELOG.md.
The old remote pass kept every non-large fixed-wing row with no large airport within 1000 km, so regions without big cities (central Australia, Canada edges) got filled with dozens of tiny strips.
`scripts/build-world-airports.mjs` now greedily thins the same candidate pool to one special per ~1000 km region: candidates sorted by priority (scheduled service, then type rank medium < small < seaplane, then numeric id), accepted only if at least `REMOTE_RADIUS_KM` from every already-accepted special. Subsumes and deletes the old 40 km remote clustering; large-airport pass and all guards unchanged.
Regenerated `data/airports_world.csv`: 1483 → 1161 rows (1119 large unchanged, specials 364 → 42; min pairwise special distance 1001.6 km). New unit test pins the pairwise-sparsity invariant on the committed dataset (`lib/airports.test.ts`); no runtime code changes in `lib/airports.ts`.
v0.68.0 — see CHANGELOG.md.
Greedy sparse selection replaces the blanket 1000km-from-large filter that
over-filled central Australia / Canada edges with dozens of tiny strips:
candidates sorted by scheduled service, type rank (medium < small < seaplane),
numeric id; accepted only if >= REMOTE_RADIUS_KM from every already-accepted
special. CSV: 1483 -> 1161 rows (1119 large unchanged, specials 364 -> 42).
New unit test pins the pairwise-sparsity invariant on the committed dataset.
kamilkrzywda
scheduled this pull request to auto merge when all checks succeed 2026-09-23 22:36:37 +02:00
kamilkrzywda
changed title from Special airports re-curation — one per ~1000 km region (ISS-144) to v0.68.0 Special airports re-curation — one per ~1000 km region (ISS-144)2026-09-23 23:20:42 +02:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The old remote pass kept every non-large fixed-wing row with no large airport within 1000 km, so regions without big cities (central Australia, Canada edges) got filled with dozens of tiny strips.
scripts/build-world-airports.mjsnow greedily thins the same candidate pool to one special per ~1000 km region: candidates sorted by priority (scheduled service, then type rank medium < small < seaplane, then numeric id), accepted only if at leastREMOTE_RADIUS_KMfrom every already-accepted special. Subsumes and deletes the old 40 km remote clustering; large-airport pass and all guards unchanged.Regenerated
data/airports_world.csv: 1483 → 1161 rows (1119 large unchanged, specials 364 → 42; min pairwise special distance 1001.6 km). New unit test pins the pairwise-sparsity invariant on the committed dataset (lib/airports.test.ts); no runtime code changes inlib/airports.ts.v0.68.0 — see CHANGELOG.md.
Special airports re-curation — one per ~1000 km region (ISS-144)to v0.68.0 Special airports re-curation — one per ~1000 km region (ISS-144)