[general]
name=Velorona
qgisMinimumVersion=4.0
qgisMaximumVersion=4.99
description=Telecom link evidence, inside QGIS. Explore -> Select -> Analyze -> Evidence -> Export.
version=1.1.7
author=AID Edge Inc.
email=sara.khosravi.ds@gmail.com
license=GPL-2.0-or-later
about=Velorona for QGIS -- Telecom link evidence, inside QGIS. 1. Explore -- Load public telecom infrastructure and your own data. 2. Select -- Choose a site, link, or two endpoints. 3. Analyze -- Run path clearance, microwave weather exposure, or satellite geometry. 4. Evidence -- See what is observed, what is calculated, and what is inferred. 5. Export -- Take the evidence with you as a structured CSV/GeoJSON result. Three analysis engines, all reused unmodified: Terrestrial Path Clearance (aei_link_clearance), Microwave Weather Exposure (aei_mw_exposure), Satellite/Earth-Space look angles (skyfield/SGP4). Requires aei-microwave-link-exposure (0.2.0 or newer), aei-link-clearance (0.2.0 or newer), aei-geo-features, and skyfield to be installed in QGIS's own Python environment.
changelog=1.1.7 - Calmer USA map and a tidier Records tab and Evidence view (appearance only: no calculation, status, data or Canada behaviour changes). USA cluster discs and link lines fade with map scale; link titles lead with the authorization number; Records has a Columns menu; narrow windows lay out cleanly.
    1.1.6 - Friendlier USA data setup. Nothing else changes: no calculation, status, data or Canada behaviour.
    Explore: USA Data Setup... replaces the bare "type a folder path or web address" box that appeared when you pressed Load USA Links in View before USA data was set up. The new window explains that the USA data is a separate download that is not included in the plugin and that Canada works without it, and offers: Choose a folder... (the normal folder picker), Use Velorona's online USA data (reads only the tiles under the map view you ask for), or a web address (https), plus a built-in "How do I get the data?" guide.
    The window shows an honest status: Not set up yet / Ready (with the link count and date taken from the data itself, after the index and one real tile were read) / Problem (what is wrong and what to do: folder missing, index.json not found, damaged or incomplete data, newer data version, address unreachable). "Use this data" stays disabled until a check succeeds. Cancel changes nothing; "Forget the saved setting" removes it. Small slips are forgiven (typing index.json, quotes, choosing the folder above the pack).
    The window opens only when you ask for US data. Starting Velorona, loading Canada and every Canadian analysis never open it. The setting is still saved in the QGIS project (never in your global QGIS settings). US antenna heights are still 30 m and Assumed.
    1.1.5 - Corrected earth curvature, NO DATA instead of guesses, one evidence vocabulary.
    Requires aei-link-clearance 0.2.0 or newer (in QGIS's Python: pip install -U 'aei-link-clearance>=0.2.0,<0.3'). Terrain clearance refuses to run against an older library instead of showing overstated clearance.
    Terrain clearance is lower on longer paths. aei-link-clearance 0.1.x applied the earth's curvature in the wrong direction (it added clearance); 0.2.0 corrects it. At the middle of a path of D km clearance is lower by about D^2 / (4 k R) metres (k = 4/3, R = 6371 km): about 1 m at 6 km, 5 m at 13 km, 15 m at 23 km, 43 m at 38 km. Short paths barely change; long paths can move from CLEAR or WATCH to AT RISK or CRITICAL. This corrects the sign of the curvature term only; it is not a validation of the whole model and no real-world severity rate is claimed. Re-run saved analyses.
    NO DATA instead of a guess. Invalid coordinates, identical endpoints, a missing elevation (never treated as 0 m), an unusable weather interval, an unreachable weather provider, or a weather frequency outside 1-100 GHz now give NO DATA with the reason. About 5 %% of Canadian Fixed Service links (857 of 16,956) publish less than 1 GHz and have no weather result; a dry sub-1 GHz link used to show CLEAR. The reason is shown every time you select such a link.
    Rain rate is now per hour. Open-Meteo reports precipitation as millimetres over 15 minutes and 1.1.4 used that value as mm/h; it is now converted (x4), so for the same rain the rain rate and the weather exposure are higher than in 1.1.4. Snow, freezing and mixed precipitation are not counted as rain and are shown as separate evidence; showers are counted. If the source does not split precipitation by type the weather result is NO DATA (1.1.4 labelled the total as precipitation).
    Status. Near threshold no longer makes a result WATCH; it is a verification note beside the status. Terrain WATCH means a clearance ratio below 1.3, a provisional operational threshold that is neither physics-validated nor operator-validated. Weather is CRITICAL when the predicted rain fade reaches the fade margin. Ask answers with the worst of terrain and weather.
    Evidence types are Observed / Model-derived / Calculated / Inferred / Assumed. Values you enter (antenna heights, frequency, fade margin, polarization) are Assumed, never Observed. When you analyse terrain for two free sites the frequency is yours (Assumed); when you analyse a selected link it is the record's own published frequency (Observed) until you change it.
    United States (FCC ULS microwave links). Explore: USA Data Setup, then Explore: Load USA Links in View loads the links and sites that touch the map view from a Velorona USA data pack (a folder or an https address; the pack is not bundled in the plugin). Views that would load more than 20,000 links are refused with a request to zoom in. The source (FCC ULS, l_micro), the source-file and pack dates and the attribution travel with the layer and every export; it is licensee-reported record data, not a field measurement. A missing, corrupt, unreachable or too-new pack is reported as such, never as NO DATA for a link. US antenna heights stay at 30 m and are Assumed: the FCC's field documentation does not state the unit or reference of its height field, so FCC heights are not used.
    Canadian antenna heights. Each Canadian Fixed Service link now carries the antenna heights its licensee reported (ISED SMS Authorization Data Extract, column 29 'Height above ground level [m]', metres above ground; the bundled snapshot is schema 1.1, shared with Velorona Map). They replace the 30 m assumption: typed Observed while you leave them unchanged, Assumed once you change them. A record height outside 0.1-1000 m gives terrain NO DATA (never clamped); a missing height keeps 30 m (Assumed). ISED does not say whether the height is to the antenna centre or tip, and an endpoint with several values uses the first row in the file (5.8 %% of endpoints have several). Terrain statuses of many Canadian links change: re-run saved analyses.
    Terrain clearance can now start from one selected link: its endpoints and highest published frequency are used, and the frequency is typed Observed while you leave it unchanged (Assumed once you change it). This replaces the known 1.1.5 difference from Velorona Map, where a record's frequency was typed Assumed. The analysis dialog now returns an untouched field exactly (a published 6.22689 GHz was being rounded to 6.23).
    Exports carry product and spec version, library versions, the earth-curvature convention and the data source as comment lines above the table. Rain coefficients: aei-microwave-link-exposure up to 0.1.5 used a table that differs from ITU-R P.838-3 in 21 of 24 rows (it understates rain loss, most at 6-10 GHz); 0.2.0 evaluates the Recommendation's equations. Velorona checks the installed model against the Recommendation's Table 5 at 6, 10 and 38 GHz and shows an open-issue notice on weather results (screen and exports) only while that check fails. No physics is changed by the plugin.
    The package no longer includes the parity test harness.
    1.1.4 - Operational output.
    Results open on a plain-language Summary: a status (CLEAR, WATCH, AT RISK, CRITICAL or NO DATA) with a one-line reason, then the key numbers, each next to what it is compared against. Details shows every value with its comparison and meaning, the weather sources, what changed, the evidence and its limits. Evidence keeps the full Observed / Model-derived / Calculated / Inferred record.
    Clearance is stated as metres available versus metres required, with the margin. Negative clearance is explained as terrain above the line of sight. The critical point is defined as the point with the lowest Fresnel-zone clearance fraction, which is not necessarily the point with the fewest metres of clearance.
    Weather provenance: every Open-Meteo value is labelled Model-derived (a weather-model value at the site coordinates, not a station measurement). The nearest ECCC station, its distance and observation time, and why it was selected are shown separately.
    Rain handling: rain and showers count as rain. Snow is no longer treated as rain, and if the source does not split precipitation by type the value is labelled total precipitation. This changes the rain rate only for hours with snow or showers.
    Adds hourly model weather history per site; each change is stated against an explicit baseline (for example vs 1 hour ago). The history is model data, not station observations.
    Adds an Ask box: rule-based questions answered only from the current result, with the supporting evidence cited. Anything it cannot match is declined rather than guessed.
    Adds Export as Excel (.xlsx) with eight sheets: SUMMARY, LINK ANALYSIS, WEATHER, WEATHER HISTORY, ELEVATION-TERRAIN, EVIDENCE, RAW DATA, DATA DICTIONARY. RAW DATA holds the un-rounded values with unit, source and calculation id.
    The terrain-clearance and microwave weather-exposure calculations and the aei libraries are unchanged, apart from the rain and snow handling above.
    Code-quality: Flake8 E741 naming cleanup in the presentation layer (ambiguous variable name renamed); no functional or engineering calculation changes. The Excel writer no longer ships an XML reader (it is a test helper), so the package contains no XML parsing.
    1.1.3 - Canada data correction: the bundled Canada Fixed Service snapshot had one site (Regina, SK, ised-fixed-50.41056,-104.61722) whose
    station role was stored as the literal text "TX" with quote characters; it is now TX. Nothing else in the snapshot changed: 24,859 sites and 16,956 links,
    same ids and order, ISED file of 2026-09-01.
    1.1.2 - Qt6 compatibility fixes for the QGIS plugin repository scan: scoped enum names
    (Qgis.RenderUnit.Pixels, QgsSymbolLayer.Property.*, QgsMapBoxGlStyleConverter.Result.Success) and
    QMetaType.Type field-spec annotations in place of QVariant.Type. No functional changes.
    1.1.1 - Static-analysis fixes for the QGIS plugin repository scan: narrowed two broad
    exception handlers in the satellite source (CelesTrak requests now catch only requests errors;
    element-set parsing catches only ValueError/ZeroDivisionError, so unexpected errors surface in
    the satellite status message instead of being skipped), replaced two lambda assignments with
    named functions, and renamed an ambiguous loop variable. No other functional changes.
    1.1.0 - Missing-dependency guard. If aei-link-clearance, aei-microwave-link-exposure, aei-geo-features
    or skyfield is not installed in QGIS's Python, the plugin now loads and shows a message-bar and log
    entry naming what to install, instead of failing with an import traceback. Adds requirements.txt
    listing the required packages (aei-link-clearance is now published on PyPI).
    1.0.0 - First production release. The ISED Fixed Service and SatNOGS ground-station
    snapshots are bundled with the plugin, so Explore no longer depends on files outside the plugin
    directory. Qt6/PyQt6 hardening: the Results Dock and both analysis parameter dialogs used
    PyQt5-only idioms that raised AttributeError on first use under QGIS 4, and a checker
    (tools/check_qt6_enums.py) now guards that whole class of defect. Viewport performance: the live
    tower/cellular queries are debounced, skipped entirely while their layers are hidden,
    deduplicated per viewport, and served from a bounded session cache with negative caching, so
    returning to an already-visited extent costs no network. The initial extent is derived from the
    terrestrial home layers instead of the global space layers. Plugin unload is idempotent and
    cleans its own analysis overlays while leaving loaded public data in place.
    0.2.0 - Experimental local development plugin.
tracker=https://github.com/AIDEdgeInc-Lab/velorona-qgis-plugin/issues
repository=https://github.com/AIDEdgeInc-Lab/velorona-qgis-plugin
homepage=https://map.velorona.ai/
experimental=False
category=Vector
hasProcessingProvider=no
