Version: [4957] Aerodrome_Spatial_Planner 1.2

changelog=
    [1.2] - 2026-09-14

    SECURITY
    - Removed all insecure TLS fallbacks. Six request sites
(Open-Meteo archive
      and forecast, NOAA WMM declination, Overpass airways, climate
data, API
      connectivity test) retried with verify=False after an SSLError,
silencing
      urllib3 warnings and exposing those calls to interception.
Certificate
      verification is now always enforced and
urllib3.disable_warnings() is gone.
    - Output folder is opened via QDesktopServices.openUrl() instead
of
      os.startfile() and subprocess.Popen(['open'/'xdg-open', ...]),
removing
      partial-executable-path resolution and process spawning
entirely.
    - Removed the unused xml.etree.ElementTree import from the engine,
which
      flagged as an untrusted-XML parsing risk despite never being
called.
    - Replaced silent exception handlers. Four "except: pass" blocks
(lighting
      swatch colouring, two AOI centroid derivations, graphics-view
zoom anchors)
      and one bare "except: continue" in compute_runway_slope() now
catch
      Exception explicitly and report through QgsMessageLog, so
failures are
      diagnosable instead of invisible. Slope sampling additionally
reports how
      many chainage points could not be reprojected to the DTM CRS.
    - Illustrative placeholder obstacles in the obstruction map now
use a seeded
      numpy.random.default_rng(42) rather than the random module.

    FIXED
    - Magnetic variation was applied with the wrong sign. Runway
magnetic bearings
      and designators were computed as TRUE + variation instead of
TRUE - variation.
      At sites with East variation this produced a magnetic bearing
greater than
      true (the opposite of correct), and designators off by the full
variation
      doubled. Affected analyze_runway_orientations_icao(),
get_runway_designation(),
      and both runway-designation-point writers. Reported by a user
testing against
      CYET (Edson, AB) and a second North American site.
    - Runway designator rounding used banker's rounding. Python's
round() rounds
      half-to-even, so a magnetic bearing of 345 deg yielded RWY 34
(correct: 35),
      145 deg yielded 14 (correct: 15), and 005 deg yielded 36
(correct: 01). Now
      uses arithmetic round-half-up per ICAO Annex 14 Sec. 5.2.2.
    - Magnetic annual change was double-counted. Declination fetched
from the NOAA
      WMM API is already valid for the current epoch, but the secular
variation was
      then applied again across (current_year - wind_data_mid_year),
adding up to
      ~10 years of spurious drift on top. The variation's source epoch
is now
      tracked and advanced only to an explicit target epoch.

    CHANGED
    - True/magnetic conversion consolidated into true_to_magnetic(),
      magnetic_to_true() and runway_number_from_magnetic() on the
engine class,
      replacing four independent inline copies of the formula.
    - Compliance reports and the analysis log now state variation as
"16.0 deg E"
      rather than a bare signed value, and print the conversion
convention in use.
    - NOAA declination fetch records the epoch of the returned value.
    - Declination button tooltip documents the sign convention.

yes

rahulpandey696

2026-09-14T09:35:18.774580+00:00

3.16.0

4.99.0

None

no

Version management

Plugin details