<h1>Changelog</h1>
<h2>EOTSV 2.4 (2026-02-13)</h2>
<ul>
<li>update logo HU-Berlin</li>
<li>fixed naming of release packages to follow PEP 440 <a href="https://github.com/jakimowb/eo-time-series-viewer/issues/55">55</a></li>
<li>fixed changelog formatting</li>
<li>fixed text color formatting in temporal profile plot settings</li>
<li>fixed a bug that could occur when removing a vector layer that was used as a source for a temporal profile plot</li>
<li>fixed layer name of example_profiles.geojson</li>
</ul>
<h2>EOTSV 2.3.1 (2026-02-04)</h2>
<ul>
<li>fixed world-to-pixel coordinate conversion for temporal profile
  extraction <a href="https://github.com/jakimowb/eo-time-series-viewer/issues/52">52</a></li>
<li>smaller updates to Spectral Library Viewer</li>
<li>image sources can be added to the TimeSeries by dropping them onto the empty Map View area</li>
</ul>
<h2>EOTSV 2.3 (2025-11-09)</h2>
<ul>
<li>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 <a href="https://github.com/jakimowb/eo-time-series-viewer/issues/29">29</a>)</li>
<li>the default style of profile candidates can be set in the EOTSV settings</li>
<li>plot styles activate antialias by default</li>
<li>fixed loading of Sentinel-2 images and other datasets with sublayers (
  issue <a href="https://github.com/jakimowb/eo-time-series-viewer/issues/46">46</a>)</li>
<li>EOTSV loads Tanager *.h5 files</li>
</ul>
<h2>EOTSV 2.2 (2025-09-25)</h2>
<ul>
<li>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</li>
<li>faster and asynchronous loading of time series sources
  <a href="https://github.com/jakimowb/eo-time-series-viewer/issues/27">issue #27</a></li>
<li>faster and asynchronous loading of time series raster images
  <a href="https://github.com/jakimowb/eo-time-series-viewer/issues/31">issue #31</a></li>
<li>faster and asynchronous loading of temporal profiles</li>
<li>the initial raster stretch is taken from the first sensor raster</li>
<li>added <code>scripts/load_eotsv_profiles.py</code> to load temporal profiles
  without having the QGIS API installed</li>
<li>some context menus got shorter names and better tooltips</li>
<li>preview for python-code band index expressions</li>
<li>(experimental) user functions allow creating additional profiles
  that are derived from temporal profiles</li>
<li>antialias for spectral and temporal profile plots</li>
<li>fixed a bug that could occur when selecting vector features in a map</li>
<li>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</li>
<li>map canvas context menu option 'Copy &gt; All Maps' now copies maps without other widget boundaries
  to the clipboard</li>
<li>missing / inaccessible sources are highlighted in the time series view</li>
<li>fixed minor issues related to the QGIS processing framework, e.g., with QGIS 3.44</li>
</ul>
<h2>EOTSV 2.1 (2025-06-05)</h2>
<ul>
<li>added a map region window to the temporal profile plot</li>
<li>revised quick labeling tools</li>
<li>revised documentation, added more animated GIFs</li>
<li>temporal profile plot: fixed band matching, added quick label shortcuts</li>
</ul>
<h2>EOTSV 2.0 (2025-04-19)</h2>
<ul>
<li>revised map visualization</li>
<li>
<p>faster image loading by using the QGIS task manager and parallel background threads</p>
</li>
<li>
<p>revised of Temporal Profile (TP) Tool.</p>
<ul>
<li>TPs now consist of full-spectrum time series, loaded in parallel background threads</li>
<li>TPs are stored in vector layer fields</li>
<li>TPs can be loaded for vector layer points using a QGIS processing algorithm</li>
<li>the TP tool visualizes TPs from different vector layers or layer fields</li>
<li>TP tool has shortcuts to visualize spectral indices
  from https://github.com/awesome-spectral-indices/awesome-spectral-indices</li>
</ul>
</li>
<li>
<p>revised of EO Time Series Viewer Settings</p>
<ul>
<li>settings are now stored in the QGIS settings dialog</li>
<li>allows defining the number of parallel reading threads</li>
<li>it allows defining shortcuts to visualize spectral indices in the Temporal Profile tool</li>
</ul>
</li>
<li>
<p>revised of Quick Labeling</p>
<ul>
<li>added customized quick label values that allow defining new values using a QGIS expression</li>
<li>the quick label editor widget allows defining a classification scheme</li>
<li>added quick-labeling shortcuts to the TP tool context menu</li>
</ul>
</li>
<li>
<p>FORCE product import allows filtering data by start and end date</p>
</li>
</ul>
<h2>EOTSV 1.20 (2024-12-08)</h2>
<ul>
<li>added FORCE Product Import</li>
<li>restore / reload EOTSV workbench from QGIS Project, e.g.,
  time series sources, map layer styles (rendering plus symbology),
  map extent, crs and current date</li>
<li>optimized map rendering</li>
<li>background tasks can be canceled in the task manager.</li>
<li>fixed a fatal crash related to a missing QgsRasterDataProvider python ref</li>
</ul>
<h2>EOTSV 1.19 (2024-09-29)</h2>
<ul>
<li>API fixes to run with QGIS 3.34–3.38</li>
<li>updates Spectral Library Module</li>
<li>enabled tooltips in MapCanvas context menu</li>
<li>attribute table: next / previous feature buttons consider order as shown in the table</li>
<li>fixed VRT building</li>
<li>fixed context menu connection in QGIS environments with other languages than English</li>
<li>maps can flash selected features</li>
<li>spectral profiles are now extracted with context information</li>
</ul>
<h2>EOTSV 1.18 (2023-04-07)</h2>
<p><em>Stability Update</em></p>
<ul>
<li>removed several issues related to updates in QGIS and GDAL</li>
<li>updated QPS library, which introduces several updates to the SpectralLibrary handling</li>
</ul>
<h2>EOTSV 1.17 (2021-03-10)</h2>
<ul>
<li>quick raster band selection and GDAL Metadata panel now appear in the QGIS layer properties dialog</li>
<li>fixed smaller issues related to plugin loading and unloading</li>
<li>added bulk loading from time series definition files</li>
<li>fixes to run with QGIS 3.18+</li>
<li>move to the next / previous observation with arrow right/left</li>
<li>move to the next / previous observation window with CTRL + arrow right/left or A/D</li>
<li>move to the last / first observation with End/Pos1 or ALT + A/D</li>
<li>select the next / previous vector feature with arrow downs/up or S/W</li>
<li>added option for exclusive visibility of map views</li>
<li>show the next / previous map view with PageDown/PageUp or ALT + S/W</li>
<li>set map center from/to QGIS with F1/ALT+F1</li>
<li>set map extent from/to QGIS with F2/ALT+F2</li>
<li>modified observation slider, slider shows a range of visible dates</li>
</ul>
<h2>EOTSV 1.16 (2021-02-02)</h2>
<ul>
<li>fixed smaller issues</li>
<li>the forward / backward button to move in time now shifts by the number of opened observation dates/maps</li>
<li>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</li>
<li>faster updates of observation data visibility</li>
</ul>
<h2>EOTSV 1.15 (2020-11-23)</h2>
<ul>
<li>source files can be opened by drag and drop to the time series tree view</li>
<li>maps can be organized in multiple rows per map view (rows x columns)</li>
<li>map descriptions can be defined with QgsExpressions, e.g. '@map_date' to show the date</li>
<li>quick labels: CTRL + right mouse button opens a map menu even when the feature-modified map tool is activated</li>
<li>source visibility update can be run on the entire time series or (new and faster) for the next time steps only</li>
<li>added the "follow current date" option to the time series table to keep focus on the map window date range</li>
<li>added wildcard and regular expression filter to the time series table</li>
<li>smaller bug fixes and improvements</li>
</ul>
<h2>EOTSV 1.14 (2020-11-06)</h2>
<ul>
<li>this version focuses on stability updates and improvements of the "quick label" system</li>
<li>the map canvas menu is now available with a standard map tool (like zoom tool)</li>
<li>introduces label groups to apply quick labeling shortcuts on different sets of vector fields</li>
<li>attribute table allows selecting added features automatically</li>
<li>optimized package imports</li>
<li>improved SpectralLibrary tool</li>
<li>fixed bugs</li>
</ul>
<h2>EOTSV 1.13 (2020-07-23)</h2>
<ul>
<li>time series and map settings can be stored to and reloaded from QGIS Projects</li>
<li>refactored layer styling and default raster stretching</li>
<li>fixed CRS translation bug and other smaller bugs</li>
<li>quick labels can be used to write date / datetime data into vector fields of type QDate or QDateTime</li>
<li>refactored context menus, e.g., in map view layer tree view, fixed #106</li>
</ul>
<h2>EOTSV 1.12 (2020-04-09)</h2>
<ul>
<li>TimeSeries tree view allows changing the visibility of single source images, e.g., to hide clouded observations</li>
<li>several updates to the Spectral Library Widget, e.g., import / export of profiles from ASD, ARTMO, EcoSYS or SPECCHIO</li>
<li>EOTSV allows opening images from sources with subdatasets, e.g., from Sentinel-2 or HDF images.</li>
</ul>
<h2>EOTSV 1.11 (2020-01-23)</h2>
<ul>
<li>revised unit tests for CI pipelines</li>
<li>fixed smaller issues in SensorModel</li>
<li>fixed #103: EOTSV crashed on Linux, caused by an attempt to store an unpickable QgsTextFormat to QSettings</li>
</ul>
<h2>EOTSV 1.10 (2019-11-25)</h2>
<ul>
<li>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</li>
<li>the settings dialog shows known sensor / product specification and allows modifying their default "sensor name"</li>
<li>fixed copying of layer styles to maps of the same sensor and map view type</li>
<li>improved speed of mapping and layer buffering</li>
<li>failed image sources are logged in the EO Time Series Viewer log panel</li>
<li>Spectral Library Viewer better handles large collections of spectral profiles</li>
</ul>
<h2>EOTSV 1.9 (2019-10-02)</h2>
<ul>
<li>includes several smaller updates</li>
<li>fixed error 'shortcutVisibleInContextMenu' error that occurred with Qt &lt; 5.10</li>
<li>enhanced wavelength extraction from GDAL metadata: wavelength can be specified per band</li>
</ul>
<h2>EOTSV 1.8 (2019-09-19)</h2>
<ul>
<li>updated spectral library module</li>
<li>fixed #104: error in case of a wrong spatial extent</li>
<li>by default, CRS is properly shown in map view settings</li>
<li>user-defined CRS visible</li>
</ul>
<h2>EOTSV 1.7 (2019-08-06)</h2>
<ul>
<li>increased contrast for default map view text</li>
<li>improved reading of wavelength information, e.g., from Pleiades, Sentinel-2 and RapidEye data</li>
<li>temporal profile plot: data gaps can be shown by breaks in the profile line, data source information is correctly
  shown for selected points only</li>
<li>current extent can be copied via MapCanvas context menu</li>
<li>fixed #102: move maps to the date of interest selected in a temporal profile plot</li>
</ul>
<h2>EOTSV 1.6 (2019-07-16)</h2>
<ul>
<li>re-design of map visualization: faster and more compact, the number of maps is fixed to n dates x m map views</li>
<li>date, sensor or map view information can be plotted within each map and become available in screenshots</li>
<li>releases map layers that are not required any more</li>
<li>slider + buttons to navigate over time series</li>
<li>fixed preview in the crosshair dialog</li>
</ul>
<h2>EOTSV 1.5 (2019-07-07)</h2>
<ul>
<li>closing the EO Time Series Viewer instance will release all of its resources</li>
<li>added "Lock Map Panel" to avoid unwanted resizing of the central widget</li>
<li>fixed missing updates of the time series tree view when adding / removing source images</li>
<li>the map canvas context menu lists layers with a spatial extent intersecting the cursor position only</li>
<li>fixes feature selection error</li>
<li>added quick label source image to label the path of the raster layer</li>
</ul>
<h2>EOTSV 1.4 (2019-07-02)</h2>
<ul>
<li>adding vector layers with sub-layers will add all sub-layers</li>
<li>map canvas context menu "Focus on Spatial Extent" will hide maps without time series data for the current spatial
  extent</li>
<li>labeling dock allows iterating over vector features. the spatial map extent will be centered to each feature (#26)</li>
<li>added several convenience functions to the TimeSeriesViewer object</li>
<li>fixed a bug that did not allow creating new polygon features</li>
<li>temporal profile visualization: fixed icons to preview selected plot style, coordinate described by <code>&lt;fid&gt; &lt;name&gt;</code>,
  e.g. <code>42 Deforested</code> fixed plot style preview</li>
<li>updated SpectralLibraryViewer</li>
<li>fixed a spelling error in the stacked band input dialog</li>
<li>MapViews can add raster layers that have been opened in QGIS, e.g., XYZ Tile with OpenStreetMap data</li>
</ul>
<h2>EOTSV 1.3 (2019-06-12)</h2>
<ul>
<li>fixed #99: opening example closes QGIS on linux</li>
<li>fixed #96 and #99: docutils not installed error when showing rst/md content</li>
<li>fixed #97: TSV does not start (Linux)</li>
</ul>
<h2>EOTSV 1.2 (2019-05-31)</h2>
<ul>
<li>added SaveAllMapsDialog and menu option to export all maps as image files.</li>
<li>fixed #91: select Temporal Profile / Spectral Profile button activates the required map tools.</li>
<li>fixed #92: map canvas context menu "copy to clipboard" options.</li>
</ul>
<h2>EOTSV 1.1 (2019-05-24)</h2>
<ul>
<li>dates and data sources of the TimeSeries are now shown in a TreeView instead of TableView</li>
<li>observation dates of current visible map canvases are highlighted in the time series tree view</li>
<li>sensor raster layer properties can be opened from MapView layer tree #87. Stats will be related to the center
  mapcanvas.</li>
<li>fixed: StackedInputDialog, MapCanvas context menu, "Save Changes?" labeling dialog (#85),</li>
<li>remove temporal profile (#86), draw new feature error (#84), Crosshair button status (#90) and more ...</li>
</ul>
<h2>EOTSV 1.0 (2019-05-15)</h2>
<ul>
<li>labeling tools to modify vector layers.</li>
<li>quick labeling for time-labels information</li>
<li>synchronization with QGIS Map canvas center</li>
<li>SpectralLibrary can import SpectralProfiles from a raster image based on vector positions</li>
<li>simplified MapView control dock, each MapView has its own layer tree.</li>
<li>improved MapTool organization</li>
<li>removed PyQtGraph from a list of required external python packages</li>
<li>renamed the plugin folder from "timeseriesviewerplugin" to "EOTimeSeriesViewer".</li>
<li>improved SpectraLibrary tool</li>
<li>CI tests with bitbucket pipelines</li>
<li>several bug fixes</li>
</ul>
<h2>EOTSV 0.8 (2019-03-01)</h2>
<ul>
<li>added labeling panel</li>
<li>scheduled map canvas refreshes</li>
<li>multiple images per observationdata &amp; sensor</li>
<li>fixed several bugs</li>
<li>fixed bugs which were caused by CRS changes</li>
<li>fixed macOS QGIS (3.4.1.) crashes caused by QgsMapCanvas constructor</li>
<li>uses QgsTaskManager for background loading</li>
<li>own QgsMapLayerStore to not mix-up with (main) QGIS layers</li>
<li>fixed bugs related to changes in QGIS API</li>
</ul>
<h2>EOTSV 0.7 (2018-06-20)</h2>
<ul>
<li>Visualization of images with stacked temporal information (each band = one observation date)</li>
<li>some bugfixes</li>
<li>Speclib I/O as CSV or ENVI-Spectral Library + CSV table for attributes</li>
<li>temporary VRTs are now created in-memory (gdal VSI mechanism) instead of a disk temp path</li>
<li>Spectral Library: profile coordinate now in the center of the map pixel (issue #66)</li>
<li>Save map canvas to clipboard</li>
<li>The width of plot lines is now scale-independent (issue #64, QPen.setCosmetic(True))</li>
<li>adding fields to a spectral library (issue #61)</li>
</ul>
<h2>EOTSV 0.6 (2018-06-04)</h2>
<p>SpectralLibrary Module</p>
<ul>
<li>now based on in-memory QgsVectorLayer</li>
<li>Locations and values of spectral profile can be exported as vector data set</li>
<li>Locations of spectral profiles can be rendered on MapCanvases</li>
</ul>
<p>Temporal Profile Module</p>
<ul>
<li>now based on in-memory QgsVectorLayer</li>
<li>Locations of temporal profiles can be exported as a vector data set</li>
<li>Band values of temporal profiles can be exported as CSV file</li>
<li>Locations of temporal profiles can be rendered on MapCanvases</li>
</ul>
<h2>EOTSV 0.5 (2018-04-17)</h2>
<ul>
<li>ported to QGIS 3, Qt5 and Python 3.6</li>
<li>improvements in temporal profile visualization</li>
<li>removed several bug</li>
<li>visibility of vector and raster layers can be toggled per map view</li>
<li>improved interaction between QGIS and EOTSV (Buttons to import/export a spatial extent of map canvas or center)</li>
<li>improved definition of individual 2D / 3D charts per sensor and pixel-location</li>
<li>added based OpenGL-based 3D plot features (axis, grids, labels)</li>
<li>changed the name to "EO Time Series Viewer" (EOTSV)</li>
<li>merged updates to temporal profile visualization, e.g.,
  save temporal profiles, compare 2D profiles between different locations, experimental 3D visualization</li>
</ul>
<h2>EOTSV 0.3 (2018-01-31)</h2>
<ul>
<li>added file filters for OpenFileDialog</li>
</ul>
<h2>EOTSV 0.2 (2018-01-19)</h2>
<ul>
<li>initialized Sphinx-based documentation</li>
<li>improved map visualization + map settings</li>
</ul>
<h2>EOTSV 0.2 (2017-05-21)</h2>
<ul>
<li>many changes, done in development branch "develop",</li>
<li>e.g.: QGIS MapCanvases for interactive maps, temporal profiles, ...</li>
</ul>
<h2>EOTSV 0.1 (2017-02-14)</h2>
<ul>
<li>first setup for test users in the recent development branch</li>
</ul>