# #110: Finland airports + airport_points from MTK-muut lentokenttaalue #147
No reviewers
Labels
No labels
blocked
claude-wip
map-report
map:is
map:se
needs-review
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
art/ismap!147
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "issue-110-fi-airports"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #110
#110: Finland airports + airport_points from MTK-muut lentokenttaalue
What changed
Finland's
airports(+ derivedairport_points) land from the already-fetchedlentokenttaaluelayer inMTK-muut— no fetch change, only staging + two layers,exactly as the issue scoped it.
fibecomes the third per-country tile source to comeback for this pair (
se#103,pl#106).conf/fimap.yaml
fi_lentokenttastaging — the 835 airport-grounds polygons. kohdeluokka is thearea-type ladder, per MML's kohdemalli (read from the official 2023-01 kohdemalli
workbook): 32411/32412 paved/unpaved runways, 32415–32418 other airport / other
air-traffic areas, paved/unpaved; the delivered counts are in the staging comment.
paallysteis redundant with the ladder (measured, no NULLs).fi_paikannimi_casedgains 32401 — the traffic-area names ("Liikennealueen nimi",airport AND harbour names share the class) — so airport labels go through the shared
R94 display-casing pass, the one copy of the rule. The hyphen-rule's known limit
gains the airport genitive case, documented: HELSINKI-VANTAAN LENTOASEMA →
Helsinki-vantaan lentoasema (the register's own cased convention, cf. its cased twin
Kiuruveden lentokenttä). The pass also marks
regnames AS MATERIALIZEDso thehyphen-rule probes a materialised set instead of re-scanning the register per part.
airportslayer (z10–13, filter_only): all 835 areas — runways plus grounds, thewhole-complex shape Poland's KU* areas give. Names via the register join (R92):
32401 label point within 500 units, Finnish preferred, biggest font first, longer
name on a font tie (Kokkola-Pietarsaari's two same-font rows — the truncated
KRUUNUPYYN LENTOASEMA ELI fragment loses to the full name). airport_class is the
register's own airport tier — LENTOASEMA → 1, LENTOKENTTÄ/KEVYTLENTOPAIKKA → 2 —
the Finnish analogue of Poland's TYPLOTNISKA port-lotniczy ladder, because MTK's
kohdeluokka does not carry a scheduled/other tier (a paved runway is a kohdeluokka,
not a traffic class; measured: every named airport has exactly one runway area).
26 lentoasema airports = Finland's 21 scheduled-service airports + the military
bases (Halli, Utti) + Malmi, Mikkeli, Varkaus; 62 airfields class 2.
airport_points(z8–13, filter_only, z9 keeps class 1): one centroid per namedairport (R140, reads fi_airports_13), 88 labels.
sources: [fi]— the config's first own source (it never had one; every Finlandlayer was shared until now).
no-invalid / class-1-exactly-lentoasema, on both layers, plus an R94 casing test
on airport_points. R105 staging list grows to 17.
importer/staging.go — ANALYZE after staging builds. The cased rebuild exposed a
real landmine: a query-kind staging table reading a just-loaded load-kind table plans
on NO statistics (bulk-loaded tables have none until autoanalyze fires a minute
later), and the planner's no-stats guess for
fi_paikannimi_casedwas a nested loopover the 1.17M-row register — 551k × 308k lower() comparisons, measured: the build
ran over an hour; the same query runs ~5 s once ANALYZEd. Both staging build paths
now end with
ANALYZE, so every downstream query plans on real stats. This would havehit any full
import-fi(and #113's original build); documented in the code commentand docs/architecture.md.
conf/mapsrv.yaml —
sources: [map, is, fi]. html/style.json —fisource +airports_fi+airport_labels_fi(the same two blocksse/plgot). Docs:country-finland.md (catalogue line, known gaps), style.md, workstream-a.md,
country-requirements.md R13, unification.md, architecture.md.
Verification
make build,make test— ok.importer/importer import --layer airports,airport_points conf/fimap.yaml— 22 s(cased staging rebuild now ~6 s), all layer acceptance tests pass.
make acceptance— every config rc 0. fimap tally:acceptance: 40 test(s): 40 passed, 0 failed, 0 skipped, 0 not runfi_airports_13835 rows (107 class-1 / 728 class-2, 345 named /490 unnamed);
fi_airport_points_1388 rows (26 class-1 / 62 class-2); z8/z9 holdthe 26 lentoasema airports. Every register airport name is on the map except
GENBÖLEN (13 km from any grounds — the survey names an airfield it does not map as
airport area) and KRUUNUPYYN LENTOASEMA ELI (a second row for Kokkola-Pietarsaari,
merged by the tie-break).
importer/importer tiles --check conf/fimap.yaml— R121:airportsz10/z13 PASS,airport_pointsz8/z13 PASS, keys [name airport_class country].airports_fipolygons + the label "Helsinki-vantaan lentoasema"; z8/z9 render onlyclass-1 labels (Jyväskylän lentoasema at the cursor), class-2 labels never appear
below z10. Qwen2.5-VL corroborates the z10 screenshot (grey grounds + label).
The only console error is the page's pre-existing
/favicon.ico404.Known limits / left undone
names: Tampere-pirkkalan, Kemi-tornion, …) lose the second town's capital — the
register stores these in caps with no cased twin, and the shared R94 rule's
first-letter fallback is the register's own cased convention (Kiuruveden
lentokenttä). Documented on the casing pass; a register-membership test against
inflected genitives would need a stemmer and is deliberately out of scope.
airportsis a standalone layer drawn over the cover's transport fill, exactly like#106 — folding it into
coveritself is #118's overlay-carve staging kind (stillopen).
airport_classtier is the register's LENTOASEMA/LENTOKENTTÄ vocabulary, not ascheduled-service ledger: Halli, Utti, Malmi, Mikkeli and Varkaus are class 1 though
they have no scheduled traffic (the same over-inclusion Sweden's iata and Poland's
port-lotniczy signals carry). Traficom's airport register would be the exact signal,
and is not on disk.
Merge notes
#106's open PRs (each added the same sentences for its own country) — the final text
names all three and is what the merged tree should say; git will need a small
manual resolution there.
fi_paikannimi_cased(with 32401) and the new layertables; nothing else was touched (places/stations/water_bodies read the cased pass
filtered by their own kohdeluokka and are unchanged — their acceptance tests pass).
Merged through !154
Pull request closed