[general]
name=Earth Engine Catalog Query
qgisMinimumVersion=3.22
qgisMaximumVersion=4.99
description=Search the Google Earth Engine Data Catalog from QGIS -- Sentinel-5P and 1,100+ other datasets -- filter it, then extract data onto the map, auto-scaling large areas into H3 tiles.
version=1.1.1
author=Brandon Crosbie
email=bcrosb31@gmail.com

about=Browse all 1,100+ datasets in Google's Earth Engine Data Catalog without leaving QGIS and without copying dataset ids out of web pages. Search by id, title, publisher, tag or band name, then narrow by dataset type, provider, tags, date range and area of interest. The dataset list ships with the plugin, so browsing works offline, and can be refreshed from Google's published STAC catalog in a few seconds. For a chosen dataset the plugin shows bands with units and value ranges, availability and update cadence, licence and citation, and Google's own suggested colour palette. Extractions are estimated locally before being sent, so an over-large request is caught -- with a suggested resolution that would fit -- instead of failing after a long wait. Results are written as GeoJSON, CSV or JSON and loaded straight onto the map. Image collections, single images and feature collections are all supported. Areas too large for a single Earth Engine call are handled for you: the plugin works out a tiling of H3 hexagons coarse enough to keep the request count down and fine enough that each tile is accepted, shows you how many requests that is and how long it will take, and then fetches them -- sequentially, or several at once with a worker count capped at half your CPUs. Every extracted row carries its H3 index, so results can be joined against anything else keyed by H3. Tiles that Earth Engine still refuses are split finer and retried, and rate limiting is absorbed with backoff rather than failing the job. Requires the separate "Google Earth Engine" plugin, which provides the Earth Engine Python API and authentication; the catalog browser works without it. The optional h3 package gives real H3 indexes -- without it the plugin tiles with an equivalent latitude/longitude grid instead.

tracker=https://github.com/blcrosbie/ee_s5p_plugin/issues
repository=https://github.com/blcrosbie/ee_s5p_plugin
homepage=https://github.com/blcrosbie/ee_s5p_plugin

category=Web
icon=icon.png
tags=earth engine,google,sentinel,sentinel-5p,tropomi,remote sensing,satellite,raster,vector,landsat,modis,atmosphere,air quality,climate,stac,catalog,download,h3,hexagon

experimental=False
deprecated=False
hasProcessingProvider=no
server=False

changelog=1.1.1 (2026-10-02)
    Passes the plugins.qgis.org security scan.
    - Bandit flagged two try/except/pass blocks and an unguarded urllib call,
      which blocks a plugin from approval. All three are now fixed rather than
      silenced: the swallowed exceptions are logged, and the crawler refuses any
      URL that is not http or https, so a tampered catalog cannot make it read
      local files through file:// -- which is the actual risk B310 describes.
    - Bandit's rules now run locally as part of lint and in the pre-upload check,
      so a blocking finding fails here instead of at the upload form.

    1.1.0 (2026-10-01)
    Verified on Qt 5 and Qt 6, and an important area-of-interest fix.
    - Runs unchanged on QGIS 3.22, 3.40, 3.44 LTR and 4.2, across PyQt 5.15.6 to
      6.11.0 and Python 3.10 to 3.12. Every Qt import goes through qgis.PyQt and
      every enum uses the scoped spelling, which is all Qt6 requires; a test
      enforces both so it cannot regress.
    - Fixed: "Use selection" only looked at the active layer, so selecting
      features on one layer while another was highlighted left the area of
      interest unset and extracted the dataset's whole footprint. The selection is
      now taken from any layer that has one, each reprojected with its own CRS.
    - Extracting with no area now warns what would actually be downloaded, naming
      the dataset; for tables it says this means every feature and that Earth
      Engine truncates at 5,000 without warning.
    - A missing Earth Engine session is explained with the sign-in steps instead
      of raising a traceback, including the fact that authenticating clears the
      Cloud project the Earth Engine plugin stores in the same file.
    - Live status panel: position, records, throughput, time remaining, Cancel.

    1.0.2 (2026-10-01)
    Live progress feedback for heavy downloads.
    - A status panel under the results list reports position, records fetched,
      throughput and remaining time, and a Cancel button to stop the job.
    - The remaining-time estimate is measured as the job runs, so it corrects
      itself instead of repeating a figure guessed before it started.
    - Rate limiting is shown as "rate limited, backing off" rather than a bar
      that appears to stall, and splitting an oversized tile is reported.
    - A single opaque request gets a busy bar with a ticking elapsed time, so a
      heavy feature collection looks alive rather than hung.
    - Redraws are throttled to five a second, so a 500 tile job does not repaint
      the dock faster than it fetches.
    - No new dependencies: plain Qt widgets.

    1.0.1 (2026-10-01)
    Auto-scaling for large areas.
    - Areas too large for one Earth Engine call are tiled into H3 hexagons. The
      tiling is chosen arithmetically from the request limit, so planning is
      instant and costs no quota; the dialog shows the tile count, size and
      estimated time before anything is sent.
    - Optional parallel fetching, capped at half the machine's CPUs, with a live
      speed-up estimate per worker count. Sequential remains the default and
      cannot be rate limited.
    - HTTP 429 and quota errors are absorbed with exponential backoff and jitter,
      and concurrency narrows itself while the server is pushing back, so a job
      slows down instead of failing.
    - Tiles Earth Engine still refuses are subdivided one resolution finer and
      retried, up to three times.
    - Every extracted row carries its h3_index and tile_resolution, so output can
      be joined against anything else keyed by H3.
    - h3 is optional: without it, tiling falls back to an equivalent
      latitude/longitude grid and says so.
    - Collection presets, led by Sentinel-5P / TROPOMI.

    1.0.0 (2026-10-01)
    Rewritten for modern QGIS.
    - Covers the entire Earth Engine Data Catalog (1,155 datasets) instead of a
      92-dataset subset, sourced from Google's published STAC catalog rather than
      by scraping HTML. No BeautifulSoup dependency.
    - Runs on Qt 6 as well as Qt 5, so it works on QGIS 4.x builds.
    - Catalog refresh, dataset reads and extractions run as background tasks:
      QGIS no longer freezes, and they can be cancelled.
    - Request size is estimated before sending, with a suggested resolution when
      a request would exceed the Earth Engine limit.
    - Dock is fully layout-managed and resizable; results are a sortable,
      searchable table.
    - Areas of interest are reprojected to WGS84, so selections on projected
      layers no longer land in the wrong place.
    - Fixed: CSV columns misaligned for rows with differing fields; pixel
      footprint polygons about a third too small; hex colour palettes never
      recognised.
    - Full unit test suite and CI.

    0.1 (2020-12)
    Initial release: Sentinel-5P and selected collections, QGIS 3 / Qt 5.
