[general]
name=GEE LULC Toolkit
qgisMinimumVersion=3.22
description=Land-use/land-cover mapping with Google Earth Engine: load Sentinel-1/2 and Landsat composites, compute spectral indices, create and label sample points, run supervised or unsupervised classification with accuracy assessment, and build a print-ready map.
version=1.1.0
author=YAM Sarath
email=yamsarath168@gmail.com
about=An end-to-end land-use/land-cover (LULC) classification workflow powered by Google Earth Engine inside QGIS. One combined window guides you from image loading to a finished map: composites and spectral indices, stratified sample points, point labeling (LULC, ESA WorldCover, or custom schemes) with a 4-view labeling window, Random Forest / GBT / CART / SVM or unsupervised clustering, Olofsson area-adjusted accuracy with 95 percent confidence intervals, Jeffries-Matusita separability, and a map layout builder. Requires the earthengine-api Python package in the QGIS Python environment and a Google Cloud project registered for Earth Engine.
tracker=https://github.com/khgeo/gee-lulc-toolkit/issues
repository=https://github.com/khgeo/gee-lulc-toolkit
homepage=https://github.com/khgeo/gee-lulc-toolkit
tags=earth engine,google earth engine,lulc,land cover,classification,random forest,remote sensing,sentinel,landsat,accuracy assessment
category=Raster
license=GPL-2.0-or-later
experimental=False
deprecated=False
icon=icons/icon.png
changelog=1.1.0 - update from 1.0.7
    SETUP AND MENU
    - NEW "Setup: connect to Earth Engine" in the plugin menu, with the same
      icon QGIS uses for the Processing Toolbox. Four guided checks for
      first-time users: earthengine-api installed, Google sign-in, Cloud
      project ID, and a live test call to Google's servers. It also holds
      the boundary-data setting.
    - Raw Earth Engine errors are translated into plain guidance: account
      not registered, project ID vs display name, API not enabled on the
      project, expired credentials, proxy and network problems.
    - Removed "Settings: GEE project ID" and "Check Earth Engine
      connection"; both are now covered by the Setup entry.

    WORLDWIDE USE
    - FIX the Admin 0-3 boundary support could never run. The bundled
      Cambodia shapefiles always exist, so the "if _has_cambodia" branch
      always won and the global branch was unreachable; two lines also
      indexed ACTIVE_ADMIN["province"]/["district"] directly, which would
      have raised KeyError had it ever activated.
    - The boundary source is now switchable at runtime from Setup: bundled
      Cambodia, or any folder of admin polygons. Name, code and parent-code
      fields are auto-detected, so GADM, FAO GAUL and OCHA COD downloads
      work untouched, and the detection report is shown before you commit.
    - Inset auto-configuration and cascade labels follow the ACTIVE source
      instead of hardcoded KH_ layer names and Name_EN fields, so the same
      layout style applies anywhere in the world.

    TOOL 1 - LOAD DATA
    - Removed the stray "2 - " ordinal from the Area of interest heading,
      and "paper style" from the important-bands preset label.
    - NEW user-defined bands. "Custom index ..." adds your own band math to
      the stack; "Custom temporal metrics ..." evaluates an expression on
      every image in the date range and reduces it through time (mean,
      median, min, max, std-dev, percentile, amplitude). Expressions are
      validated against the sensor's tokens before running, are re-checked
      when the sensor changes, and are appended last so neither the
      "important bands" preset nor band trimming can drop them.

    TOOL 2 - SAMPLE POINTS
    - Allocation uses largest-remainder rounding, so the split sums to
      exactly the Cochran n before the per-class floor is applied.
    - The run report reconciles Cochran n -> allocated -> requested ->
      created. Only a genuine shortfall is reported after a run, since a
      total above the Cochran n is the per-class floor working as designed;
      a live hint above the Run button explains it beforehand instead.
      "Min per class" can now be set to 0 to see the pure proportional
      split.

    TOOL 3 - LABEL POINTS
    - NEW "?" button to the left of "Load GCP shapefile" showing the
      expected sample-point and GCP attribute tables, which column to fill
      in, and how to choose the GCP match radius.

    TOOL 4 - CLASSIFY
    - Switching between Supervised and Unsupervised now hides whole form
      rows including their labels, instead of leaving orphaned labels such
      as "Cluster algorithm:" with nothing beside them.
    - "Number of trees" appears only for Random Forest and Gradient Tree
      Boost. "Active scheme" stays visible in both modes because cluster
      reclassification uses it.

    TOOL 6 - MAP LAYOUT
    - FIX "Label highlighted only" now really labels only the highlighted
      feature in inset maps. The data-defined label filter referenced a
      non-existent enum (QgsProperty.Property.Show), the resulting
      AttributeError was swallowed, and every feature was labelled instead.
      Filtered labels now go through QgsRuleBasedLabeling, which works on
      all QGIS 3.x and is honoured by the layout renderer.
    - NEW Esri Shaded Relief basemap beside Google Satellite, selected by
      default. Works worldwide, capped at its native zoom 13. With both on,
      imagery draws over the relief. Basemap attribution is appended to the
      data-sources line automatically.
    - The accuracy line's white background now hugs its text instead of
      painting a fixed 120 mm bar, sits 2 mm lower, and is trimmed by a
      further 4 mm.
    - "Projection / Created" gained a white background with no outline,
      placed at x 273.7, y 269.0, 31.31 x 8.0 mm.
    - NEW white panel behind the scale bar and the numeric scale, so both
      stay readable over dark imagery. No outline. Placed at x 26.5,
      y 256.5, 55.0 x 20.4 mm; the accuracy box is a fixed 75 mm. Both
      placements are exact for the A3 landscape sheet and fall back to
      computed positions on other sizes.
    - FIX insets highlighted every unit sharing a name. Highlighting matched
      on the NAME field, and 364 commune features plus 98 district features
      in the bundled data share a name with a different unit - Samraong
      alone is 10 separate communes, and 33 communes have no name at all.
      Insets now match on the unique admin CODE and label with the name, so
      only the intended unit is highlighted. Units stored as several
      polygons (the island district Kaoh Rong is 22 rows sharing code 1805)
      still highlight in full, because all their parts share one code. In
      the Map Layout dialog the highlight-value list now reads
      "code - Name" and stores the code.
    - Inset 2 presets changed: primary highlight #797979 with a Dense 6
      fill, second highlight #ff7f00 with a Diagonal X fill. Applied both
      to the dialog defaults and to the automatic configuration.
    - Data sources are now pre-filled with the sensor and date range used
      to build the stack, plus "MLMUPC: Administrative Boundary" when the
      bundled Cambodian boundaries are active. Anything already typed is
      kept and the entries are never duplicated on re-open.
    - Grid lines widened from 0.10 to 0.18 mm; 0.10 mm was at the limit of
      what prints reliably at A3.
    - FIX the bundled Sea layer overlapped land: 386 km2 of it sat on
      Cambodian territory across 166 patches, mostly along the Koh Kong to
      Kampot coast, plus 37,553 km2 on neighbouring countries. The layer
      has been rebuilt with all land erased, so it now meets the coastline
      exactly (0 km2 overlap) while still filling the Gulf of Thailand.

    WINDOWING
    - FIX the tool window had no taskbar button and could not be alt-tabbed
      to. It carried the Qt.Window flag but was still owned by the QGIS
      main window, and an owned window never gets its own taskbar entry on
      Windows. It is now a genuine top-level window, like the Print Layout
      designer, and re-opening it restores it if minimised.
