[general]
name=HDF-EOS Explorer
qgisMinimumVersion=3.16
description=Explore hyperspectral HDF-EOS5 cubes: click a pixel and see its spectrum.
version=2.21
author=Carlo Soto Castro
email=carlo.soto.castro@gmail.com

about=A hyperspectral cube is three things at once: a place, a picture and
    a spectrum. This plugin links the three on the original HDF-EOS5 file
    (Planet Tanager and similar), without converting anything first.

    - Click a pixel and its full spectral signature appears at once.
    - Drag a sampling line and the plot follows every pixel it crosses.
    - Drag a rectangle for the area mean, with its per-band deviation.
    - The side faces follow the crosshair: dragging travels the data.
    - RGB is chosen by wavelength, so presets work on any sensor.
    - Bad bands stay out of the statistics, not just out of the plot.
    - Name signatures, compare them by spectral angle, export to CSV.
    - An n-D cloud of the signatures, projected on a rotating plane.
    - Classes that overlap in one band pair come apart as it turns.
    - Every signature knows where it was taken: points and polygons.
    - Those layers keep themselves current and export to GeoJSON.
    - Send the visible view to the map as a georeferenced layer.
    - Link the cube's navigation with the QGIS map canvas.
    - Processing algorithm "HDF-EOS5 to ENVI", with wavelengths and FWHM.

    No mandatory dependencies: only numpy and GDAL, both bundled with
    QGIS. h5py and pyqtgraph are used when present. Nothing is downloaded
    and no remote service is contacted.

    ESPANOL: abre cubos hiperespectrales HDF-EOS5 y enlaza en tiempo real
    la posicion, la imagen y la firma espectral, sin convertir nada antes.
    Tambien los extrae al formato nativo de ENVI, por lotes y desde el
    modelador.
icon=icon.png
tags=hyperspectral,hdf5,hdf-eos,envi,tanager,planet,remote sensing,spectral,spectra,signature,reflectance,raster,imagery,processing,analysis,spectral library,datacube

changelog=2.21 - EVERY SIGNATURE NOW KNOWS WHERE IT WAS TAKEN. The data was already there: a signature has kept the full list of (x, y) pixels since the first version, and nothing used it. Signatures > File > Footprints to map turns that list into geometry and adds two layers to the project: one for points -single pixels and scattered pixel sets- and one for polygons -rectangular areas, as the outline of their outer edge-. Two layers and not one because hardly any tool will open a layer of mixed geometry. Each footprint carries the colour of its curve in the plot, which ties the map to the spectral profile without reading any legend, plus a table with the name, type, pixel count, date, source, notes and spectral range. Add them once and they keep themselves up to date: every new signature shows up on the map without asking again, and if you remove the layers the plugin lets go and does not hand them back, because removing them is your decision. Scattered pixels go out as several points and NOT as their bounding box: that box would paint hectares nobody measured. A signature read from someone else's CSV has no pixels, so it stays out and the count is reported rather than given an invented position. Footprints to GeoJSON writes the same thing to two files, reprojected to longitude/latitude, because that is what the format means: RFC 7946 fixes WGS84 and dropped the member that used to declare anything else.
    2.20 - N-DIMENSIONAL CLOUD, in a window you turn on and off. A two-band scatter plot lies by omission: two classes that are clearly apart across the full spectrum can land on top of each other in the band pair you happened to pick. The way out is not to look at more pairs -426 bands make ninety thousand of them- but to look at the whole cloud and make it TURN: an n-dimensional cloud projected onto a rotating plane shows a different shadow every instant, and the eye separates moving groups far better than still ones. Every pixel of every saved signature is a point, coloured by its signature -not the mean, which cannot show whether an area was one group or two-. The labelled spokes are each band's axis: one pointing where a group stretches is the band that separates it, and spokes fade as they turn edge-on, which is information too. Drag to turn it by hand, switch a class off to see the one it was hiding, and the lasso brings a group back to the library as a new signature with its pixels, comparable by spectral angle. The rotation is a product of Givens rotations at incommensurate frequencies, so the basis stays orthonormal by construction and the tour never repeats a view; it is applied to the two basis vectors only, O(n) per frame instead of O(n squared). Drawn with QPainter: no new dependencies, as always.
    2.19 - The plugin page now reads as a list instead of a block. Checked against the HTML the QGIS Plugin Manager actually builds: it turns every line break in the about text into a <br/>, and it puts the description in a heading. So the description is now one short headline, and each capability fits a single line. No functional changes.
    2.18 - Clearer documentation. The plugin page and the repository README now say what the plugin does and how to install it; the reasoning behind each decision moved to NOTAS.md, where whoever touches the code looks for it. No functional changes.
    2.17 - Shorter, clearer plugin page. No functional changes.
    2.16 - Much quicker on heavy cubes: bands, transects and spectra are cached, and dragging no longer queues up work. Returning to a pixel you already visited is immediate.
    2.15 - The "Spectral profile" and "Saved signatures" sections fold away when you click their name, giving the height to the cube.
    2.14 - Fixes an unexpected QGIS crash on macOS when detaching and re-docking the cube window.
    2.13 - Closing the panel no longer closes the scene, and the detached cube window comes back when you close it.
    2.12 - New "Link with the map": the cube and the QGIS canvas navigate together.
    2.11 - Security and import fixes required by the plugin repository.
    2.10 - Fixes a loading failure in 2.9: a module was missing from the ZIP.
    2.9 - Qt6 compatible.
    2.8 - Fixes the georeference when the scene is read through GDAL: it used to land far from its place.
    2.7 - Verified corner to corner against a real Tanager product.
    2.6 - GDAL is also asked for the georeference when it does not turn up any other way.
    2.5 - Orthorectified products place themselves, reading the HDF-EOS grid. Extraction to ENVI keeps the georeference.
    2.4 - The view sent to QGIS carries the file's own georeference, with rotation and transparency. Cube and spectrum move into the same panel.
    2.3 - The cube gets its own window, and "Send view to QGIS" appears.
    2.2 - Colour bar with the data scale, zoom, "Fit to data" and a multi-pixel mode.
    2.1 - Bad bands: the file's bbl, the water vapour windows, the noisy ends and hand-written ranges are kept out of the analysis.
    2.0 - Extractor and explorer become a single plugin, with a dockable panel and a signature library.
    1.0 - First release: "HDF-EOS5 to ENVI" algorithm in the Processing toolbox.

tracker=https://github.com/csoto666/qgis-hdfeos-extractor/issues
repository=https://github.com/csoto666/qgis-hdfeos-extractor
homepage=https://github.com/csoto666/qgis-hdfeos-extractor

category=Raster
hasProcessingProvider=yes
experimental=False
deprecated=False
