[general]
name=LEE RS Lab
qgisMinimumVersion=3.22
qgisMaximumVersion=3.99
description=A remote sensing teaching lab in QGIS (English / Khmer): free Sentinel-2, Landsat, Sentinel-1, MODIS, DEM and land-cover data without any account or login, and the whole workflow from study area to classification, accuracy, change detection and report.
about=LEE RS Lab is built for teaching and learning remote sensing step by step. Choose a study area from administrative boundaries (any country; Cambodia preset with Khmer names) and the plugin downloads cloud-masked composites of only the pixels inside it from Microsoft Planetary Computer and Earth Search: Sentinel-2, Landsat 5-9, Sentinel-1, MODIS NDVI, Copernicus DEM, ESA WorldCover and JRC surface water. One guided panel then covers band combinations, spectral indices, filters, PCA, K-means / ISODATA, supervised classification (Random Forest, SVM, kNN, Maximum Likelihood, Minimum Distance, SAM, Parallelepiped), accuracy assessment with Cochran sample size and area-adjusted estimates (Olofsson et al. 2014), from-to change detection with a Sankey diagram, map layout and a PDF report. The LEE tab (Local Earth Engine) runs Earth-Engine-style scripts on your own computer, with 32 examples. A Basic / Advanced switch keeps the panel simple for beginners, and a magic wand creates training polygons with one click. Every section has a short lesson, and the whole interface switches between English and Khmer. A 15-lesson Khmer manual with annotated screenshots is at https://khgeo.github.io/lee-rs-lab/ . Optional: Random Forest, SVM and kNN need scikit-learn, which the user can install from 1 Data > Setup (pip, only when the button is pressed).
version=2.4.1
author=YAM Sarath
email=yamsarath168@gmail.com
homepage=https://khgeo.github.io/lee-rs-lab/
repository=https://github.com/khgeo/lee-rs-lab
tracker=https://github.com/khgeo/lee-rs-lab/issues
category=Raster
icon=icon.png
tags=remote sensing,stac,planetary computer,earth search,sentinel-2,landsat,sentinel-1,classification,change detection,teaching,education,cambodia,khmer,no login
experimental=True
deprecated=False
hasProcessingProvider=no
supportsQt6=yes
changelog=2.4.1 Code-safety fixes for the QGIS plugin repository scan: no silent try/except/pass (Planetary Computer token expiry is now checked explicitly and logged), no ambiguous variable names. No change in behaviour.
    2.4.0 Simpler panel: Basic / Advanced switch in the header (Basic is the default and hides filters, PCA, ISODATA, extra algorithms and parameters, signatures, WorldCover training, polygon export and the LEE tab; nothing is removed). Magic wand (click-to-grow) training: pick a class, click a pixel, similar connected pixels become a training polygon (tolerance, max. area, undo, counts per class; the training layer is created automatically).
    2.3.1 Fixes: (1) Map layout scale bar — labels no longer overlap ("2,5005,000 m"): kilometres, 2 segments with a round length (1, 2, 5 × 10^n) of about a quarter of the map width. (2) Change › one-transition map: the layer name, legend and status line use the class names in the current language (Khmer: «តំបន់សំណង់ → ស្រូវ / ដីដំណាំ» instead of "Built-up → Rice / cropland"). (3) Cluster / class spectra charts: when radar bands in dB (VV, VH, e.g. the multi-season stack) are mixed with reflectance or indices, the radar bands get their own panel and dB axis, so the index lines are no longer squashed flat.
    2.3.0 Classify › Unsupervised, from the Land Cover Mapper: "Multi-season stack (local, no login)" builds a 13-band feature stack for the AOI with LEE — Sentinel-2 dry season (Feb–Apr) and green season (Sep–Nov) medians (NDVI, seasonal swing, NDMI, red-edge, MNDWI, NDBI, SWIR, brightness) plus Sentinel-1 VH/VV dry and wet season — so K-means separates evergreen from deciduous trees, paddy from upland crops, permanent from seasonal water and built-up land; the stack is chosen for clustering automatically. The cluster table has a Hint column (also for ordinary images, from NDVI/MNDWI/NDBI); clicking a row zooms to a random pixel of that cluster on Esri imagery (click again for the next one); "Suggest classes from hints" fills empty → class boxes from the active scheme; "Split selected cluster into n" re-clusters a mixed cluster. Khmer: reflectance = ការចាំងផ្លាត.
    2.2.4 Fix: MODIS NDVI/EVI (and any Planetary Computer data) failed with "HTTP response code: 403" for every image. Files are now signed with a token for their own storage container (like the official planetary_computer library) instead of a token by collection name; a rejected or expired token is refreshed and the read retried once; a clear message if the server still refuses.
    2.2.3 The AOI is kept: it is saved in the project and, by default, as a GeoPackage layer "AOI" in the Layers panel, and it comes back automatically after a plugin update, a reload or reopening the project. New imagery: Landsat 1-5 MSS Collection 2 Level-1 (raw DN, 60 m, 1972-2013) from Planetary Computer; choosing it moves the dates into the sensor lifetime.
    2.2.2 More datasets and every LEE layer are now cut to the AOI shape (DEM, slope, hillshade, land cover…), and class statistics count only the AOI; land-cover legends list only the classes found in the AOI (no "Snow and ice" in Cambodia); lee.config(clip=False) and img.clip() for scripts. Band combination: "Apply automatically when a setting changes" (on by default; choosing another image never restyles it by itself).
    2.2.1 First release on plugins.qgis.org (experimental). LICENSE file in the plugin; only http(s) URLs are opened; ignored errors are logged at debug level; Khmer text in charts is drawn by Qt so it is shaped correctly; change detection refuses results made from raw images; PDF report keeps the map on page 1; Help links to the online manual. Khmer terms: plugin = កម្មវិធីជំនួយ, remote sensing = ការយកព័ត៌មានពីចម្ងាយ.
    2.2.0 Renamed LEE RS Lab. One toolbar icon (no basemap arrow; basemaps stay in the panel header). Fix: installing scikit-learn on macOS crashed ("init_sys_streams … text_encoding") — only a Python of the same version as QGIS is used, never with QGIS's standard library; otherwise pip runs inside QGIS; the button shows when scikit-learn is already installed. Fix: "&" in section titles showed as an underline. Khmer: band = ប៊ែន, reflectance = ការចាំផ្លាត. Classify: one shared Classes (legend) section with schemes (RS Lab, LULC level 1, Auto 7, ESA WorldCover), save/open CSV; clusters are labelled with class drop-downs; K-means / ISODATA enable only their own parameters. From the GEE LULC Toolkit: Cochran sample size with proportional / equal allocation and a minimum per class; point labelling with class buttons, next / previous / next unlabelled, zoom and an optional map-class hint; automatic training points from ESA WorldCover (Auto 7, pure pixels); print map layout (title, legend, scale bar, north arrow, sources, accuracy). Change: from → to is the default, with gains / losses per class, the largest transitions, net-change chart, Sankey diagram of the from → to flows (offline HTML, from the GEE LULC Toolkit), date 1 vs date 2 area chart, CSV, map of one chosen transition (e.g. Forest → Cropland) and the tables in the PDF report; codes are now from×1000+to (class ids up to 999, e.g. WorldCover 100). LEE: "Use a result in the other tabs" (Enhance, Classify, Accuracy, Change date 1/2), class maps go to the accuracy/change boxes, and lee.Image.open("layer name" or path) reads project rasters into scripts. 18 new LEE examples (32 in all): indices pack, red-edge chlorophyll, land surface temperature, urban expansion, forest loss / gain, NDVI-drop deforestation, rice calendar from Sentinel-1 VH, radar colour composite, S2 + S1 fusion clustering, dry vs rainy season water, JRC water seasonality, elevation zones, MODIS drought anomaly, Landsat 5 vs today, clear-observation count, haze-free percentile composite, mangroves & wetlands, Image.open. Reversed colour ramps (e.g. "Spectral_r").
    2.1.0 Compact panel: 10 tabs → 5 (1 Data · 2 Enhance · 3 Classify · 4 Change · 5 LEE) with collapsible one-at-a-time sections, lessons inside each section, result tables shown only when there are results, button rows that wrap, combo boxes and form rows that fit a narrow dock (tab bar scrolls on macOS). One toolbar icon: click opens the panel, its arrow lists the basemaps (also in the panel header). New: area-adjusted accuracy and class areas with 95 percent confidence intervals (Olofsson et al. 2014) in the accuracy section, CSV and PDF report; Clean up & export polygons (sieve to a minimum mapping unit, polygonize to GeoPackage with class name and area). Fix: Search scenes / Preview / Download failed (missing scene-parameter helpers).
    2.0.2 Fix a QGIS crash (segmentation fault in QLocale::doubleToString) when styling a layer whose pixels all have one value (e.g. a water or flood mask): colour ramps and legend labels are now built by RS Lab with a guarded min/max.
    2.0.1 Accuracy: points are sampled at their exact pixel; a clear message (and the attribute table opens) when ref_class is still empty, points fall outside the map, or only on unclassified pixels. LEE label: "LEE · Local Earth Engine" tag, tab "9 LEE Script", LEE badge on the icon.
    2.0.0 No Google Earth Engine: everything uses free data without login and runs locally. New tab 9 Script — LEE (Local Earth Engine), GEE-style scripting with 14 examples. More datasets for the AOI: Copernicus DEM, NASADEM, ESA WorldCover, annual land cover, JRC surface water, MODIS NDVI. Setup tab: connection test and cache control.
    1.3.1 Fix: "wrapped C/C++ object of type QToolBar has been deleted" when unloading or reloading the plugin.
    1.3.0 Project CRS follows the AOI (UTM zone at the AOI centre, Web Mercator for very wide AOIs; can be switched off); Auto download CRS shows the detected zone. Basemaps: 10 one-click XYZ basemaps (Esri, Google, EOX Sentinel-2 cloudless, OSM, OpenTopoMap, CARTO) from the toolbar or the Download tab, added under the imagery; attribution goes into the report.
    1.2.0 Renamed RS Lab (was RS Teaching Lab; settings and installed Earth Engine package are reused). Own toolbar. AOI preset to administrative units with a country level for any country (HDX COD-AB → ODC → geoBoundaries → Earth Engine), preset Cambodia; whole-country AOI; boundaries load automatically. Imagery source preset to Microsoft Planetary Computer.
    1.1.2 Fix: panel failed to open when a web basemap (Google Satellite XYZ/WMS) was in the project; image boxes now list only file-based rasters.
    1.1.1 Faster cloud downloads: cloud masks read first so only the clearest scenes over the AOI are downloaded; parallel connections (setting); direct window reads without reprojection when the image is already in the target UTM zone; HTTP/2 and caching. Earth Search tile ids shown.
    1.1.0 Imagery without GEE: Earth Search (AWS) and Microsoft Planetary Computer STAC sources (Sentinel-2 L2A, Landsat 5/7/8/9 L2, Sentinel-1 RTC) with local cloud-masked composites and quick look; local band-set builder for EarthExplorer / Copernicus Browser / SAFE files. Admin boundaries: robust HDX COD-AB reader (both schemas, P-code cascade, Khmer names), ODC fallback, own boundary file, add AOI to map. Language switch now also translates legend class labels and keeps the province/district/commune selection.
    1.0.0 First release.
