[general]
name=FortyGuard Temperature Intelligence Layer
qgisMinimumVersion=3.34
qgisMaximumVersion=3.99
description=Hyper-local temperature intelligence for a selected site or asset, as styled QGIS layers: temperature (°C), exceedance and persistence hours above a threshold, and peak temperature time, from the FortyGuard Temperature API.
about=FortyGuard Temperature Intelligence Layer brings the FortyGuard Temperature API into QGIS: hyper-local temperature for one site, asset or block, as styled map layers.

    WHAT YOU GET
    - Temperature / Snapshot: tile temperatures in degrees Celsius (mean, minimum or maximum for daily windows).
    - Exceedance: hours above a temperature threshold you choose.
    - Persistence: longest continuous run of hours above that threshold.
    - Peak temperature time: hour of day (UTC) when each tile is hottest.
    - Each result is a styled layer plus the saved GeoJSON tiles; by default a smooth interpolated surface is shown on top with the exact tiles kept underneath.

    HOW IT WORKS
    1. Paste your own FortyGuard API key and click "Check key and credits".
    2. Select one polygon in your project (United States coverage).
    3. Choose the analysis, the time window (hour, range of hours, day, range of days or calendar month) and the resolution (60, 80 or 100 m).
    4. Click Generate Heatmap. The plugin checks the area, dates and duplicates before anything is charged, sends one request, polls the job without blocking QGIS, saves the result and adds the layer.

    EXAMPLE: A DATA CENTER SITE
    Draw the site boundary with the surrounding blocks. A single-day Temperature layer shows which side sits in the hottest tiles; Exceedance with a 35 degree threshold over a summer month counts the hours above that limit; Persistence shows the longest hot spell. Together they inform cooling load, capacity margins and operating constraints.

    GOOD TO KNOW
    - Credits: every completed request consumes credits of your plan; rejected and failed requests are free.
    - Data for the most recent one to two weeks is usually not available yet; the dialog defaults to two weeks ago. Coverage inside the United States depends on the location and date; a verified sample area (Phoenix) is one click away.
    - Coverage: United States. Areas outside it are stopped before they are charged.
    - Demo Mode (optional) replays clearly labelled synthetic data offline, with no key and no credits.
    - No external Python dependencies. Tested on macOS, Windows and Ubuntu with QGIS 3.40 to 3.44; QGIS 4 (Qt 6) is not supported yet.

    ABOUT FORTYGUARD
    FortyGuard is a temperature intelligence layer for the physical world: it estimates the local thermal state of a site, an asset or a route instead of the nearest weather station. One foundation powers the Temperature Dashboard, Temperature API, Temperature MCP and Temperature Enterprise products. API key: https://www.fortyguard.com/api-pricing - Documentation: https://docs-api.fortyguard.com/docs/introduction
version=0.5.4
author=FortyGuard
email=support@fortyguard.com
tracker=https://github.com/FortyGuard-Tech/qgis-fortyguard-heatmap/issues
repository=https://github.com/FortyGuard-Tech/qgis-fortyguard-heatmap
homepage=https://github.com/FortyGuard-Tech/qgis-fortyguard-heatmap#readme
tags=temperature,heatmap,climate,urban heat,heat island,fortyguard,api,vector,geojson,weather
category=Plugins
icon=resources/icon.png
experimental=False
deprecated=False
hasProcessingProvider=no
server=False
changelog=0.5.4 - Research re-check against the FortyGuard documentation, pricing page, quickstart and production API: default date is now two weeks back (the data feed had not advanced for 13 days); a verified sample live area (Phoenix, AZ) can be added with one click because the API no longer covers the lower-Manhattan demo area; the "outside supported U.S. coverage" answer is explained; dates before 2021 (catalog start) get a warning; the new Basic and Pro plan names map to the documented allowances.
    0.5.3 - Independent code review before the next test round: Check Again on an earlier activity restores that request's own analysis type, threshold and area (a stopped Exceedance fetched after a Temperature run is styled as Exceedance); the analysis type of any result is taken from the API's stats_data; a cancelled or blocked request no longer replaces the context of the previous job; results are saved to disk before styling, so a paid result is never lost; Restyle survives a removed layer and rebuilds the smooth surface for the new measure; legend classes never contain an empty zero-width class; 3-D (Z/M) polygons are sent as 2-D; date pickers end today; Enter in a text field no longer triggers Generate; Check Again refuses demo activities and uses the key currently in the field; very large areas get a coarser smooth surface instead of an error.
    0.5.2 - Second internal testing round (Windows): legend classes are computed from numeric values only (a tile without a value no longer stretches the lowest class to 0); the default output folder is the Documents folder reported by the system (OneDrive-redirected Documents on Windows); Check Again accepts any activity ID pasted into the Activity ID field, so a stopped request can be fetched after later requests; the status line updates in place instead of repeating "Processing" in the log; gateway errors (HTTP 502/503/504) while submitting are explained as server-side and uncertain, not as a key problem; the Appearance option no longer refers to the dashboard; the API environment selector is hidden in the public build; the plugin description is split into short sections.
    0.5.1 - Legend classes option (3 to 20, default 10, remembered) so the tiles layer can show finer temperature differences; identical classes are still merged. Requested after the first report review.
    0.5.0 - Fixes from the FortyGuard internal testing round (macOS, Windows, Linux). Dates: defaults to one week ago because the API has no data for the most recent days; the HTTP 400 "Temperature data is unavailable" answer is explained in plain words (free of charge); Calendar month clips to the available days; Range of days counts both dates (1st to 1st of the next month is rejected before a 7-minute server failure). Credits: "Check key and credits" shows the live balance (total remaining) instead of a frozen billing-cycle figure; the confirmation states the cost for your plan. Pre-checks before a paid request: areas outside the United States are blocked (they completed with 0 tiles and were charged), areas smaller than one tile or above the plan allowance are warned about, areas above 500 square miles are blocked (never finished, charged), an identical request already completed in this session or found in the output folder is warned about, and a previous unfinished activity is pointed out. Empty "Completed" results are reported as charged and a record file is kept. Legends: label precision follows the data spread (no more identical "21.9 - 21.9" classes), uniform results get one class, Peak temperature time hours 4/8/12/16/20 fall in the right class, the smooth surface legend is titled with the quantity and unit and spans at least 1 degree. Robustness: Stop Waiting during submission keeps the activity ID, a cut-off status answer is retried, a 404 on an old activity stops after 3 checks with a clear message, NaN values are saved as null, file names are shortened and sidecars are never overwritten. UI: Getting started steps on separate lines, no orphan Start date label in month mode, Demo Mode stop message, analysis settings remembered, narrow windows wrap instead of clipping. No longer marked experimental.
    0.4.3 - Re-upload through the main upload form so the listing title changes to FortyGuard Temperature Intelligence Layer. No code change.
    0.4.2 - Renamed to FortyGuard Temperature Intelligence Layer. No functional change.
    0.4.1 - Security-scan fix (one try/except/pass in the legend code); no functional change.
    0.4.0 - Smooth surface appearance (default): the API tiles are interpolated into a fine raster with a continuous colour ramp, clipped to the area, like the FortyGuard dashboard; the tiles layer is kept hidden for exact values. Tiles-only option remains. Not applied to Peak temperature time (cyclic hours).
    0.3.6 - Renamed to FortyGuard Temperature Intelligence Layer; new description and about text (FortyGuard products, data-center example, API documentation link). No functional change.
    0.3.5 - Getting-started text readable in dark themes.
    0.3.4 - Dialog fits laptop screens: settings scroll, Generate/Stop/status stay visible at the bottom; window is resizable and maximisable.
    0.3.3 - Passes the plugins.qgis.org security scan: removed try/except/pass blocks (contextlib.suppress) and a help-text wording that matched a SQL-injection pattern; no functional change.
    0.3.2 - Fixed metadata.txt parsing on plugins.qgis.org (a percent sign in the changelog); no code change.
    0.3.1 - Time zones confirmed by FortyGuard: start/end times are the local time of the area, peak temperature hours are UTC; dialog text and docs updated.
    0.3.0 - Heat-analysis modes from the FortyGuard Forma extension: Temperature/Snapshot, Exceedance (total hours above a threshold), Persistence (longest continuous run above it) and Peak temperature time (hour of day, UTC), each as its own styled layer with the right legend units; threshold input in °C (default 35, sent with direction "above"); Calendar month time option (submitted as a range of days, leap years and partial months handled); analysis-specific summaries (valid tiles, share of valid tiles above 0 h, maximum duration, most common peak hour); synthetic demo fixtures for all modes.
    0.2.0 - Release candidate for external users: FortyGuard icon, getting-started help with documentation links, "Check key and credits" button, production API by default with the development environment moved to a separate Developer settings section (key is cleared when the environment changes), safer default output folder, clearer error and credit messages, real dialog request verified. Icon now PNG.
    0.1.0 - First prototype: live request path (submit + bounded polling), Demo Mode, graduated styling, encrypted optional key storage.
