# Changelog

## EOTSV 2.3.1 (2026-02-04)

* fixed world-to-pixel coordinate conversion for temporal profile
  extraction [52](https://github.com/jakimowb/eo-time-series-viewer/issues/52)
* smaller updates to Spectral Library Viewer
* image sources can be added to the TimeSeries by dropping them onto the empty Map View area

## EOTSV 2.3 (2025-11-09)

* revision of TimeSeries model. Source images are now loaded and removed much faster (
  issues [27]https://github.com/jakimowb/eo-time-series-viewer/issues/27
  and [29](https://github.com/jakimowb/eo-time-series-viewer/issues/29))
* the default style of profile candidates can be set in the EOTSV settings
* plot styles activate antialias by default
* fixed loading of Sentinel-2 images and other datasets with sublayers (
  issue [46](https://github.com/jakimowb/eo-time-series-viewer/issues/46))
* EOTSV loads Tanager \*.h5 files

## EOTSV 2.2 (2025-09-25)

* multi-sensor time series can be saved as JSON. loading from
  the timeseries from a JSON file is rapid, as it avoids source files access
* faster and asynchronous loading of time series sources
  [issue #27](https://github.com/jakimowb/eo-time-series-viewer/issues/27)
* faster and asynchronous loading of time series raster images
  [issue #31](https://github.com/jakimowb/eo-time-series-viewer/issues/31)
* faster and asynchronous loading of temporal profiles
* the initial raster stretch is taken from the first sensor raster
* added `scripts/load_eotsv_profiles.py` to load temporal profiles
  without having the QGIS API installed
* some context menus got shorter names and better tooltips
* preview for python-code band index expressions
* (experimental) user functions allow creating additional profiles
  that are derived from temporal profiles
* antialias for spectral and temporal profile plots
* fixed a bug that could occur when selecting vector features in a map
* map layers that are not used in any legend (zombie layers) are now removed from the EOTSV project
  to not appear in layer selection widgets
* map canvas context menu option 'Copy > All Maps' now copies maps without other widget boundaries
  to the clipboard
* missing / inaccessible sources are highlighted in the time series view
* fixed minor issues related to the QGIS processing framework, e.g., with QGIS 3.44

## EOTSV 2.1 (2025-06-05)

* added a map region window to the temporal profile plot
* revised quick labeling tools
* revised documentation, added more animated GIFs
* temporal profile plot: fixed band matching, added quick label shortcuts

## EOTSV 2.0 (2025-04-19)

* revised map visualization
* faster image loading by using the QGIS task manager and parallel background threads

* revised of Temporal Profile (TP) Tool.
    * TPs now consist of full-spectrum time series, loaded in parallel background threads
    * TPs are stored in vector layer fields
    * TPs can be loaded for vector layer points using a QGIS processing algorithm
    * the TP tool visualizes TPs from different vector layers or layer fields
    * TP tool has shortcuts to visualize spectral indices
      from https://github.com/awesome-spectral-indices/awesome-spectral-indices

* revised of EO Time Series Viewer Settings
    * settings are now stored in the QGIS settings dialog
    * allows defining the number of parallel reading threads
    * it allows defining shortcuts to visualize spectral indices in the Temporal Profile tool

* revised of Quick Labeling
    * added customized quick label values that allow defining new values using a QGIS expression
    * the quick label editor widget allows defining a classification scheme
    * added quick-labeling shortcuts to the TP tool context menu


* FORCE product import allows filtering data by start and end date

## EOTSV 1.20 (2024-12-08)

* added FORCE Product Import
* restore / reload EOTSV workbench from QGIS Project, e.g.,
  time series sources, map layer styles (rendering plus symbology),
  map extent, crs and current date
* optimized map rendering
* background tasks can be canceled in the task manager.
* fixed a fatal crash related to a missing QgsRasterDataProvider python ref

## EOTSV 1.19 (2024-09-29)

* API fixes to run with QGIS 3.34–3.38
* updates Spectral Library Module
* enabled tooltips in MapCanvas context menu
* attribute table: next / previous feature buttons consider order as shown in the table
* fixed VRT building
* fixed context menu connection in QGIS environments with other languages than English
* maps can flash selected features
* spectral profiles are now extracted with context information

## EOTSV 1.18 (2023-04-07)

_Stability Update_

* removed several issues related to updates in QGIS and GDAL
* updated QPS library, which introduces several updates to the SpectralLibrary handling

## EOTSV 1.17 (2021-03-10)

* quick raster band selection and GDAL Metadata panel now appear in the QGIS layer properties dialog
* fixed smaller issues related to plugin loading and unloading
* added bulk loading from time series definition files
* fixes to run with QGIS 3.18+
* move to the next / previous observation with arrow right/left
* move to the next / previous observation window with CTRL + arrow right/left or A/D
* move to the last / first observation with End/Pos1 or ALT + A/D
* select the next / previous vector feature with arrow downs/up or S/W
* added option for exclusive visibility of map views
* show the next / previous map view with PageDown/PageUp or ALT + S/W
* set map center from/to QGIS with F1/ALT+F1
* set map extent from/to QGIS with F2/ALT+F2
* modified observation slider, slider shows a range of visible dates

## EOTSV 1.16 (2021-02-02)

* fixed smaller issues
* the forward / backward button to move in time now shifts by the number of opened observation dates/maps
* next / previous feature button offers to (i) move to the next feature and (ii)
  update the map dates according to the availability of raster sources for the new map extent
* faster updates of observation data visibility

## EOTSV 1.15 (2020-11-23)

* source files can be opened by drag and drop to the time series tree view
* maps can be organized in multiple rows per map view (rows x columns)
* map descriptions can be defined with QgsExpressions, e.g. '@map_date' to show the date
* quick labels: CTRL + right mouse button opens a map menu even when the feature-modified map tool is activated
* source visibility update can be run on the entire time series or (new and faster) for the next time steps only
* added the "follow current date" option to the time series table to keep focus on the map window date range
* added wildcard and regular expression filter to the time series table
* smaller bug fixes and improvements

## EOTSV 1.14 (2020-11-06)

* this version focuses on stability updates and improvements of the "quick label" system
* the map canvas menu is now available with a standard map tool (like zoom tool)
* introduces label groups to apply quick labeling shortcuts on different sets of vector fields
* attribute table allows selecting added features automatically
* optimized package imports
* improved SpectralLibrary tool
* fixed bugs

## EOTSV 1.13 (2020-07-23)

* time series and map settings can be stored to and reloaded from QGIS Projects
* refactored layer styling and default raster stretching
* fixed CRS translation bug and other smaller bugs
* quick labels can be used to write date / datetime data into vector fields of type QDate or QDateTime
* refactored context menus, e.g., in map view layer tree view, fixed #106

## EOTSV 1.12 (2020-04-09)

* TimeSeries tree view allows changing the visibility of single source images, e.g., to hide clouded observations
* several updates to the Spectral Library Widget, e.g., import / export of profiles from ASD, ARTMO, EcoSYS or SPECCHIO
* EOTSV allows opening images from sources with subdatasets, e.g., from Sentinel-2 or HDF images.

## EOTSV 1.11 (2020-01-23)

* revised unit tests for CI pipelines
* fixed smaller issues in SensorModel
* fixed #103: EOTSV crashed on Linux, caused by an attempt to store an unpickable QgsTextFormat to QSettings

## EOTSV 1.10 (2019-11-25)

* improved matching of source images to sensors: matching can be specified in the settings dialog. Sensor matching
  based on ground sampling distance + number of bands + data type and optionally wavelength and/or sensor name
* the settings dialog shows known sensor / product specification and allows modifying their default "sensor name"
* fixed copying of layer styles to maps of the same sensor and map view type
* improved speed of mapping and layer buffering
* failed image sources are logged in the EO Time Series Viewer log panel
* Spectral Library Viewer better handles large collections of spectral profiles

## EOTSV 1.9 (2019-10-02)

* includes several smaller updates
* fixed error 'shortcutVisibleInContextMenu' error that occurred with Qt < 5.10
* enhanced wavelength extraction from GDAL metadata: wavelength can be specified per band

## EOTSV 1.8 (2019-09-19)

* updated spectral library module
* fixed #104: error in case of a wrong spatial extent
* by default, CRS is properly shown in map view settings
* user-defined CRS visible

## EOTSV 1.7 (2019-08-06)

* increased contrast for default map view text
* improved reading of wavelength information, e.g., from Pleiades, Sentinel-2 and RapidEye data
* temporal profile plot: data gaps can be shown by breaks in the profile line, data source information is correctly
  shown for selected points only
* current extent can be copied via MapCanvas context menu
* fixed #102: move maps to the date of interest selected in a temporal profile plot

## EOTSV 1.6 (2019-07-16)

* re-design of map visualization: faster and more compact, the number of maps is fixed to n dates x m map views
* date, sensor or map view information can be plotted within each map and become available in screenshots
* releases map layers that are not required any more
* slider + buttons to navigate over time series
* fixed preview in the crosshair dialog

## EOTSV 1.5 (2019-07-07)

* closing the EO Time Series Viewer instance will release all of its resources
* added "Lock Map Panel" to avoid unwanted resizing of the central widget
* fixed missing updates of the time series tree view when adding / removing source images
* the map canvas context menu lists layers with a spatial extent intersecting the cursor position only
* fixes feature selection error
* added quick label source image to label the path of the raster layer

## EOTSV 1.4 (2019-07-02)

* adding vector layers with sub-layers will add all sub-layers
* map canvas context menu "Focus on Spatial Extent" will hide maps without time series data for the current spatial
  extent
* labeling dock allows iterating over vector features. the spatial map extent will be centered to each feature (#26)
* added several convenience functions to the TimeSeriesViewer object
* fixed a bug that did not allow creating new polygon features
* temporal profile visualization: fixed icons to preview selected plot style, coordinate described by "<fid> <name>",
  e.g. "42 Deforested" fixed plot style preview
* updated SpectralLibraryViewer
* fixed a spelling error in the stacked band input dialog
* MapViews can add raster layers that have been opened in QGIS, e.g., XYZ Tile with OpenStreetMap data

## EOTSV 1.3 (2019-06-12)

* fixed #99: opening example closes QGIS on linux
* fixed #96 and #99: docutils not installed error when showing rst/md content
* fixed #97: TSV does not start (Linux)

## EOTSV 1.2 (2019-05-31)

* added SaveAllMapsDialog and menu option to export all maps as image files.
* fixed #91: select Temporal Profile / Spectral Profile button activates the required map tools.
* fixed #92: map canvas context menu "copy to clipboard" options.

## EOTSV 1.1 (2019-05-24)

* dates and data sources of the TimeSeries are now shown in a TreeView instead of TableView
* observation dates of current visible map canvases are highlighted in the time series tree view
* sensor raster layer properties can be opened from MapView layer tree #87. Stats will be related to the center
  mapcanvas.
* fixed: StackedInputDialog, MapCanvas context menu, "Save Changes?" labeling dialog (#85),
* remove temporal profile (#86), draw new feature error (#84), Crosshair button status (#90) and more ...

## EOTSV 1.0 (2019-05-15)

* labeling tools to modify vector layers.
* quick labeling for time-labels information
* synchronization with QGIS Map canvas center
* SpectralLibrary can import SpectralProfiles from a raster image based on vector positions
* simplified MapView control dock, each MapView has its own layer tree.
* improved MapTool organization
* removed PyQtGraph from a list of required external python packages
* renamed the plugin folder from "timeseriesviewerplugin" to "EOTimeSeriesViewer".
* improved SpectraLibrary tool
* CI tests with bitbucket pipelines
* several bug fixes

## EOTSV 0.8 (2019-03-01)

* added labeling panel
* scheduled map canvas refreshes
* multiple images per observationdata & sensor
* fixed several bugs
* fixed bugs which were caused by CRS changes
* fixed macOS QGIS (3.4.1.) crashes caused by QgsMapCanvas constructor
* uses QgsTaskManager for background loading
* own QgsMapLayerStore to not mix-up with (main) QGIS layers
* fixed bugs related to changes in QGIS API

## EOTSV 0.7 (2018-06-20)

* Visualization of images with stacked temporal information (each band = one observation date)
* some bugfixes
* Speclib I/O as CSV or ENVI-Spectral Library + CSV table for attributes
* temporary VRTs are now created in-memory (gdal VSI mechanism) instead of a disk temp path
* Spectral Library: profile coordinate now in the center of the map pixel (issue #66)
* Save map canvas to clipboard
* The width of plot lines is now scale-independent (issue #64, QPen.setCosmetic(True))
* adding fields to a spectral library (issue #61)

## EOTSV 0.6 (2018-06-04)

SpectralLibrary Module

* now based on in-memory QgsVectorLayer
* Locations and values of spectral profile can be exported as vector data set
* Locations of spectral profiles can be rendered on MapCanvases

Temporal Profile Module

* now based on in-memory QgsVectorLayer
* Locations of temporal profiles can be exported as a vector data set
* Band values of temporal profiles can be exported as CSV file
* Locations of temporal profiles can be rendered on MapCanvases

## EOTSV 0.5 (2018-04-17)

* ported to QGIS 3, Qt5 and Python 3.6
* improvements in temporal profile visualization
* removed several bug
* visibility of vector and raster layers can be toggled per map view
* improved interaction between QGIS and EOTSV (Buttons to import/export a spatial extent of map canvas or center)
* improved definition of individual 2D / 3D charts per sensor and pixel-location
* added based OpenGL-based 3D plot features (axis, grids, labels)
* changed the name to "EO Time Series Viewer" (EOTSV)
* merged updates to temporal profile visualization, e.g.,
  save temporal profiles, compare 2D profiles between different locations, experimental 3D visualization

## EOTSV 0.3 (2018-01-31)

* added file filters for OpenFileDialog

## EOTSV 0.2 (2018-01-19)

* initialized Sphinx-based documentation
* improved map visualization + map settings

## EOTSV 0.2 (2017-05-21)

* many changes, done in development branch "develop",
* e.g.: QGIS MapCanvases for interactive maps, temporal profiles, ...

## EOTSV 0.1 (2017-02-14)

* first setup for test users in the recent development branch

