height correction, new defalt

This commit is contained in:
Olaf committed 2026-10-21 09:24:12 +02:00
1 parent 0891cf12a5
commit b692f94122
12 files changed
+792 -205

No files matched your search

+40 -29
View File
@@ -45,9 +45,9 @@ a physical pen plotter.
of the map, validate coordinates, and normalize their order.
- Provide a predefined default rectangular map area that includes the city of
Uithoorn in the Netherlands. Explicitly supplied corners override this default.
- Default southwest corner: latitude 52.232025, longitude 4.784498.
Default northeast corner: latitude 52.253985, longitude 4.863525.
Command-line bounds use longitude first: 4.784498 52.232025 4.863525 52.253985.
- Default southwest corner: latitude 52.232, longitude 4.784.
Default northeast corner: latitude 52.258, longitude 4.864.
Command-line bounds use longitude first: 4.784 52.232 4.864 52.258.
- Store the actual bounds used, including when the default is selected, in the
recording session. Later plotting must use those stored bounds rather than
a potentially changed application default.
@@ -114,31 +114,41 @@ a physical pen plotter.
- Do not smooth across track gaps, on-ground interruptions, or flight changes.
Handle repeated positions without generating invalid curve coordinates.
- Clip the actual curves to the output bounds, not just their sample points,
and use the same curved in-map portions for time and average-height selection.
and use the same curved in-map portions for time and average-altitude selection.
- Extend the visible tracks a little beyond the map boundary using actual
recorded positions from the surrounding area, not fabricated extrapolation.
- Keep the map background within its requested bounds and provide space in the
SVG for the extended tracks and their labels.
- Identify each flight track with its date, time, callsign or flight number when
available, and average height above the map's average ground elevation.
available, and average reported barometric (pressure) altitude in metres.
- Do not present an OpenSky callsign as a verified passenger-facing flight
number. Callsign-to-flight-number lookup is not required for the initial
version.
- Calculate the map's average ground elevation from terrain elevation data
covering the requested map bounds, excluding the surrounding collection area.
for landmass within the requested map bounds, excluding mapped water and the
surrounding collection area. Preserve islands in water multipolygon relations.
Use an area-weighted mean or an equivalent equal-area sampling method.
- Calculate each track's average height as its average aircraft altitude over
the portion inside the requested map bounds minus the map's average ground
elevation. Outside-map extensions must not affect this calculation.
- Use compatible units and a common vertical reference for aircraft altitude
and terrain elevation, applying conversions where needed. Do not subtract
terrain elevation directly from uncorrected barometric pressure altitude.
- Label the result explicitly as average height above the map's average ground
level, with units. This is not height above the terrain directly beneath each
aircraft position and must not be presented as terrain clearance.
- Indicate when the height cannot be calculated because compatible aircraft
altitude or sufficient terrain data is unavailable; do not silently substitute
altitude above sea level or assume zero ground elevation.
- Average valid land samples only. Report the percentage and counts of sampled
land with valid elevations, warn about missing land samples, and never classify
missing terrain as water. Show land coverage in the SVG legend and metadata.
- Obtain AHN DTM height maps automatically through PDOK during plotting for the
Netherlands. Cache validated GeoTIFF subsets persistently and atomically,
record source and NAP reference, and support explicit refresh and disabling
of automatic terrain retrieval. Explicit local terrain inputs take precedence.
- If AHN height maps are unavailable or the area is outside coverage, warn
explicitly and continue rendering with the land-elevation summary unavailable.
Reported aircraft altitude must remain independent of terrain availability.
- Calculate each track's time-weighted average reported barometric altitude
over the portion inside the requested map bounds. Outside-map extensions
must not affect this calculation.
- Do not subtract ground elevation or apply geoid, pressure, or vertical-reference
corrections to aircraft altitude. The average land elevation is a separate,
informational summary only.
- Label aircraft values explicitly as reported barometric altitude with units,
not height above ground, terrain clearance, or verified altitude above sea level.
- Missing barometric altitude on a contributing segment makes that track's
average unavailable, with an explicit warning. Do not fall back to geometric
altitude. Zero and negative reported values are valid.
- Make labels readable and indicate unavailable metadata explicitly.
## Implementation and validation
@@ -148,8 +158,8 @@ a physical pen plotter.
session selection, map generation, configuration, data-source limitations,
and attribution.
- Test coordinate handling, projection, local recording, track selection,
average ground elevation, vertical-reference compatibility, average-height
calculation, missing elevation data, and SVG generation.
average land elevation, average reported barometric altitude, missing altitude
and elevation data, terrain-independent flight labels, and SVG generation.
- Test persistence of session bounds and observation associations, plotting
after collection has stopped, and repeated plotting without changing the
recorded flight data. Verify that collection does not require map or terrain
@@ -172,15 +182,16 @@ a physical pen plotter.
- Default to A4 landscape (297 by 210 mm), 12 mm page margins, a 0.3 mm pen,
and track extensions of up to 4 mm beyond the map border.
- Collect every 30 seconds within a 2,000 m margin around the saved map area.
- Display timestamps in UTC using date and 24-hour time, and heights in metres.
- Accept local terrain GeoTIFFs with a declared vertical reference. For
orthometric terrain, accept a matching geoid-separation raster for converting
ellipsoidal aircraft heights. Require explicit confirmation of the geometric
altitude interpretation before calculating heights; otherwise label them
unavailable. Never silently substitute barometric altitude.
- Estimate average ground elevation using a 64 by 64 equal-area sampling grid.
Any missing terrain sample makes the average unavailable.
- Use time-weighted aircraft altitude with linear interpolation between recorded
- Display timestamps in UTC using date and 24-hour time, and altitudes in metres.
- Use PDOK AHN DTM `dtm_05m` via WCS for Dutch areas, requesting a 512 by 512
nearest-neighbour subset in EPSG:28992, with elevations in metres relative
to NAP. Accept local terrain GeoTIFFs with a declared vertical reference for
the separate land-elevation summary. No geoid or aircraft datum conversion
inputs are required or used.
- Estimate average land elevation using a 64 by 64 equal-area sampling grid.
Exclude mapped water, average available land elevations, and warn about missing
land coverage. No valid land samples makes the average unavailable.
- Use time-weighted reported barometric altitude with linear interpolation between recorded
timestamps, restricted to the smoothed path's portion inside the map. Use
centripetal Catmull-Rom interpolation converted to cubic Bezier curves for
flight paths. Split tracks at changes