diff --git a/CHANGELOG b/CHANGELOG index 0122710593ae3f8bbd53f1de1d60334ada1a37b1..9c37ba8f3ced13fa95ed63a345e95687a068f26b 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,109 +1,99 @@ -2019-05-31 - - increased version to 1.2 - - 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 (#91). - - fixed #92: map canvas context menu "copy to clipboard" options. - -2019-05-24 - - increased version to 1.1 - - Dates and data sources of the TimeSeries are now shown in a TreeView instead TableView - - Observation dates of current visible mapcanvases 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 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 some more - - -2019-05-15 - - increased version to 1.0 - - 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 it's own layer tree. - - improved MapTool organization - - removed PyQtGraph from list of required external python packages - -2019-03-29 - - renamed plugin folder from "timeseriesviewerplugin" to "EOTimeSeriesViewer". - - improved SpectraLibrary tool - - CI tests with bitbucket pipelines - - several bug fixes - -2019-03-01 - - increased version to 0.8 - - added labeling panel - - scheduled map canvas refreshes - - multiple images per observationdata & sensor - - fixed several bugs - -2018-11-13 - - fixed bugs which where caused by CRS changes - - fixed macOS QGIS (3.4.1.) crashes caused by QgsMapCanvas constructor - -2018-11-09 - - uses QgsTaskManager for background loading - - own QgsMapLayerStore to not mix-up with (main) QGIS layers - - fixed bugs related to changes in QGIS API - -2018-06-20 - - increase version to 0.7 - - Visualization of images with stacked temporal information (each band = one observation date) - - some bugfixes - -2018-06-12 - enhancements: - - Speclib I/O as CSV or ENVI-Spectral Library + CSV table for attributes - - temporary VRTs now created in-memory (gdal VSI mechanism) instead in a disk temp path - - fixed bugs: - - Spectral Library: profile coordinate now in center of map pixel (issue #66) - - Save map canvas to clipboard - - Width of plot lines now scale-independent (issue #64, QPen.setCosmetic(True)) - - adding fields to spectral library (issue #61) - -2018-06-04 - - increased version to 0.6 - - 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 vector data set - - Band values of temporal profiles can be exported as CSV file - - Locations of temporal profiles can be rendered on MapCanvases - - - several bug fixes - -2018-04-17 - - increased version to 0.5 - - 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 spatial extent of map canvas or center) - -2018-03-29 - - improved definition of individual 2D / 3D charts per sensor & pixel-location - - added based OpenGL based 3D plot features (axis, grids, labels) - - changed name to "EO Time Series Viewer" (EOTSV) - -2018-02-11 - - merged updates to temporal profile visualization, e.g. +============== +Changelog +============== + +2019-05-31 (version 1.2): + * 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. + +2019-05-24 (version 1.1): + * dates and data sources of the TimeSeries are now shown in a TreeView instead 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 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 some more + +2019-05-15 (version 1.0, major update): + * 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 it's own layer tree. + * improved MapTool organization + * removed PyQtGraph from list of required external python packages + +2019-03-29: + * renamed plugin folder from "timeseriesviewerplugin" to "EOTimeSeriesViewer". + * improved SpectraLibrary tool + * CI tests with bitbucket pipelines + * several bug fixes + +2019-03-01 (version 0.8): + * added labeling panel + * scheduled map canvas refreshes + * multiple images per observationdata & sensor + * fixed several bugs + +2018-11-13: + * fixed bugs which where caused by CRS changes + * fixed macOS QGIS (3.4.1.) crashes caused by QgsMapCanvas constructor + +2018-11-09: + * uses QgsTaskManager for background loading + * own QgsMapLayerStore to not mix-up with (main) QGIS layers + * fixed bugs related to changes in QGIS API + +2018-06-20 (version 0.7): + * Visualization of images with stacked temporal information (each band = one observation date) + * some bugfixes + +2018-06-12: + * Speclib I/O as CSV or ENVI-Spectral Library + CSV table for attributes + * temporary VRTs now created in-memory (gdal VSI mechanism) instead in a disk temp path + * Spectral Library: profile coordinate now in center of map pixel (issue #66) + * Save map canvas to clipboard + * Width of plot lines now scale-independent (issue #64, QPen.setCosmetic(True)) + * adding fields to spectral library (issue #61) + +2018-06-04 (version 0.6): + 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 vector data set + * Band values of temporal profiles can be exported as CSV file + * Locations of temporal profiles can be rendered on MapCanvases + +2018-04-17 (version 0.5): + * 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 spatial extent of map canvas or center) + +2018-03-29: + * improved definition of individual 2D / 3D charts per sensor & pixel-location + * added based OpenGL based 3D plot features (axis, grids, labels) + * changed name to "EO Time Series Viewer" (EOTSV) + +2018-02-11: + * merged updates to temporal profile visualization, e.g. save temporal profiles, compare 2D profiles between different location, experimental 3D visualization -2018-01-31 - - added file filters for OpenFileDialog +2018-01-31: + * added file filters for OpenFileDialog -2018-01-19 - - initialized Sphinx-based documentation - - improved map visualization + map settings +2018-01-19: + * initialized Sphinx-based documentation + * improved map visualization + map settings 2017-05-21: - - many changes, done in development branch "develop", - - e.g: QGIS MapCanvases for interactive maps, temporal profiles, ... + * many changes, done in development branch "develop", + * e.g: QGIS MapCanvases for interactive maps, temporal profiles, ... 2017-02-14: - - first setup for test users in the recent development branch + * first setup for test users in the recent development branch diff --git a/doc/source/changelog.rst b/doc/source/changelog.rst index a61ecf41dba343280e4dab96d85ba1158a2d1ee6..a779ae667037f705becb02f7ea41c45636fbfc8b 100644 --- a/doc/source/changelog.rst +++ b/doc/source/changelog.rst @@ -1,201 +1,99 @@ -========== -User Guide -========== - -Version 1.2 ------------ - -Added menu option to export all maps as image files. - -.. image:: img/changelog.1.2/exportmapimages.png - -.. image:: img/changelog.1.2/exportmapimagesdialog.png - -Fixes: - -* select Temporal Profile / Spectral Profile button activates the required map tools (#91). -* map canvas context menu "copy to clipboard" options (#92). - - -Version 1.1 ------------ - -Time Series data sources are shown in a tree view, which improves the overview in case multiple source images exists per observation date. - -Observation dates of visible Map Canvases are highlighted in the time series tree view. - -.. image:: img/changelog.1.1/visibleobservationdates.png - -Fixes: - -* Sensor raster layer properties can be opened from MapView layer tree (#87). Stats will be related to center mapcanvas. -* StackedInputDialog, MapCanvas context menu, "Save Changes?" labeling dialog (#85), -* remove temporal profile (#86), draw new feature error (#84), Crosshair button status (#90), and some more - - -Version 1.0 ------------ - - -Map Canvas Context Menu -....................... - -The map canvas context menu has been re-organized and enhanced by: - - * zooming to single map layers - * open the properties of single map layers - * the "Set Quick Labels" button (see next feature) - - -Quick Labeling -.............. - - -The map canvas menu entry "Set Quick Labels" can be used to write sensor/product, file and observations-date specific information -into attribute fields of linked vector layers. - -1. open the layer properties of the vector layer you like to label -2. edit the form attributes and use the EOTS Quick Label form to each layer fields, that you like to - label automatically. -3. Each map canvas relates to a raster timeseries sensor/product and observation date. From that we can derive the following label information: - - ============ ========= ============== - Information Data Type Example - ============ ========= ============== - Date String 2014-04-01 - DOY Integer - Decimal Year Double 2014.234 - Sensor Name String Landsat - File Path String image/.... - ============ ========= ============== - - -Labeling Dock -............. - -The Labeling panel can be used to modify vector layers. The editing process is similar to that known from the QGIS -attribute tables. - -1. Use the labeling panels combobox to select the vector layer you like to modify - -2. Press the "Start Editing" button - -3. Make your changes - -4. Save your edits or reject them - - -Toolbar -....... - - -.. image:: img/changelog.1.0/toolbar.old.png - -Old toolbar - -.. image:: img/changelog.1.0/toolbar.new.png - -New toolbar - -The toolbar was enhanced with an button to import vector sources, to select, add and save vector features, and to synchronize -the map canvas center with that of the QGIS main map canvas. - -.. image:: img/changelog.1.0/select_features.png - -Map Views -......... - -.. image:: img/changelog.1.0/mapviewcontrolldock.new.png - -The map view control panel has been reorganized based on the [QToolBox](https://doc.qt.io/qt-5/qtoolbox.html#details) widget. -This way fix a couple of layout issues, where map view settings looked squeezed - * each Map View now has an own map layer tree to specify the visibility and vertical order of map layers - - - -Time Series Model -................. - -.. image:: img/changelog.1.0/timeseriessources.new.png - -The multi-sensor time series allows to add multiple images with same sensor properties and observation date. - - -Version 0.8 ------------ - -- increased version to 0.8 -- added labeling panel -- scheduled map canvas refreshes -- multiple images per observationdata & sensor -- fixed several bugs -- uses QgsTaskManager for background loading -- own QgsMapLayerStore to not mix-up with (main) QGIS layers - -Version 0.7 ------------ - -- Visualization of images with stacked temporal information (each band = one observation date) -- Speclib I/O as CSV or ENVI-Spectral Library + CSV table for attributes -- temporary VRTs now created in-memory (gdal VSI mechanism) instead in a disk temp path - -fixed bugs: - - Spectral Library: profile coordinate now in center of map pixel (issue #66) - - Save map canvas to clipboard - - Width of plot lines now scale-independent (issue #64, QPen.setCosmetic(True)) - - adding fields to spectral library (issue #61) - -Version 0.6 ------------ - -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 vector data set -- Band values of temporal profiles can be exported as CSV file -- Locations of temporal profiles can be rendered on MapCanvases -- several bug fixes - -Version 0.5 and before ----------------------- - -- increased version to 0.5 -- 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 spatial extent of map canvas or center) - -2018-03-29 -- improved definition of individual 2D / 3D charts per sensor & pixel-location -- added based OpenGL based 3D plot features (axis, grids, labels) -- changed name to "EO Time Series Viewer" (EOTSV) - -2018-02-11 - - merged updates to temporal profile visualization, e.g. +============== +Changelog +============== + +2019-05-31 (version 1.2): + * added SaveAllMapsDialog and menu option to export all maps as image files. + * fixed `#91 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/91>`_: select Temporal Profile / Spectral Profile button activates the required map tools. + * fixed `#92 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/92>`_: map canvas context menu "copy to clipboard" options. + +2019-05-24 (version 1.1): + * dates and data sources of the TimeSeries are now shown in a TreeView instead 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 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/87>`_. Stats will be related to center mapcanvas. + * fixed: StackedInputDialog, MapCanvas context menu, "Save Changes?" labeling dialog (`#85 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/85>`_), remove temporal profile (`#86 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/86>`_), draw new feature error (`#84 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/84>`_), Crosshair button status (`#90 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/90>`_), and some more + +2019-05-15 (version 1.0, major update): + * 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 it's own layer tree. + * improved MapTool organization + * removed PyQtGraph from list of required external python packages + +2019-03-29: + * renamed plugin folder from "timeseriesviewerplugin" to "EOTimeSeriesViewer". + * improved SpectraLibrary tool + * CI tests with bitbucket pipelines + * several bug fixes + +2019-03-01 (version 0.8): + * added labeling panel + * scheduled map canvas refreshes + * multiple images per observationdata & sensor + * fixed several bugs + +2018-11-13: + * fixed bugs which where caused by CRS changes + * fixed macOS QGIS (3.4.1.) crashes caused by QgsMapCanvas constructor + +2018-11-09: + * uses QgsTaskManager for background loading + * own QgsMapLayerStore to not mix-up with (main) QGIS layers + * fixed bugs related to changes in QGIS API + +2018-06-20 (version 0.7): + * Visualization of images with stacked temporal information (each band = one observation date) + * some bugfixes + +2018-06-12: + * Speclib I/O as CSV or ENVI-Spectral Library + CSV table for attributes + * temporary VRTs now created in-memory (gdal VSI mechanism) instead in a disk temp path + * Spectral Library: profile coordinate now in center of map pixel (issue `#66 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/66>`_) + * Save map canvas to clipboard + * Width of plot lines now scale-independent (issue `#64 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/64>`_, QPen.setCosmetic(True)) + * adding fields to spectral library (issue `#61 <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/61>`_) + +2018-06-04 (version 0.6): + 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 vector data set + * Band values of temporal profiles can be exported as CSV file + * Locations of temporal profiles can be rendered on MapCanvases + +2018-04-17 (version 0.5): + * 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 spatial extent of map canvas or center) + +2018-03-29: + * improved definition of individual 2D / 3D charts per sensor & pixel-location + * added based OpenGL based 3D plot features (axis, grids, labels) + * changed name to "EO Time Series Viewer" (EOTSV) + +2018-02-11: + * merged updates to temporal profile visualization, e.g. save temporal profiles, compare 2D profiles between different location, experimental 3D visualization -2018-01-31 - - added file filters for OpenFileDialog +2018-01-31: + * added file filters for OpenFileDialog -2018-01-19 - - initialized Sphinx-based documentation - - improved map visualization + map settings +2018-01-19: + * initialized Sphinx-based documentation + * improved map visualization + map settings 2017-05-21: - - many changes, done in development branch "develop", - - e.g: QGIS MapCanvases for interactive maps, temporal profiles, ... + * many changes, done in development branch "develop", + * e.g: QGIS MapCanvases for interactive maps, temporal profiles, ... 2017-02-14: - - first setup for test users in the recent development branch - - + * first setup for test users in the recent development branch diff --git a/doc/source/changelog_visual.rst b/doc/source/changelog_visual.rst new file mode 100644 index 0000000000000000000000000000000000000000..31267035f471259a5c19177efe369229fba50447 --- /dev/null +++ b/doc/source/changelog_visual.rst @@ -0,0 +1,201 @@ +================ +Visual Changelog +================ + + +Version 1.2 +----------- + +Added menu option to export all maps as image files. + +.. image:: img/changelog.1.2/exportmapimages.png + +.. image:: img/changelog.1.2/exportmapimagesdialog.png + +Fixes: + +* select Temporal Profile / Spectral Profile button activates the required map tools (#91). +* map canvas context menu "copy to clipboard" options (#92). + + +Version 1.1 +----------- + +Time Series data sources are shown in a tree view, which improves the overview in case multiple source images exists per observation date. + +Observation dates of visible Map Canvases are highlighted in the time series tree view. + +.. image:: img/changelog.1.1/visibleobservationdates.png + +Fixes: + +* Sensor raster layer properties can be opened from MapView layer tree (#87). Stats will be related to center mapcanvas. +* StackedInputDialog, MapCanvas context menu, "Save Changes?" labeling dialog (#85), +* remove temporal profile (#86), draw new feature error (#84), Crosshair button status (#90), and some more + + +Version 1.0 +----------- + + +Map Canvas Context Menu +....................... + +The map canvas context menu has been re-organized and enhanced by: + + * zooming to single map layers + * open the properties of single map layers + * the "Set Quick Labels" button (see next feature) + + +Quick Labeling +.............. + + +The map canvas menu entry "Set Quick Labels" can be used to write sensor/product, file and observations-date specific information +into attribute fields of linked vector layers. + +1. open the layer properties of the vector layer you like to label +2. edit the form attributes and use the EOTS Quick Label form to each layer fields, that you like to + label automatically. +3. Each map canvas relates to a raster timeseries sensor/product and observation date. From that we can derive the following label information: + + ============ ========= ============== + Information Data Type Example + ============ ========= ============== + Date String 2014-04-01 + DOY Integer + Decimal Year Double 2014.234 + Sensor Name String Landsat + File Path String image/.... + ============ ========= ============== + + +Labeling Dock +............. + +The Labeling panel can be used to modify vector layers. The editing process is similar to that known from the QGIS +attribute tables. + +1. Use the labeling panels combobox to select the vector layer you like to modify + +2. Press the "Start Editing" button + +3. Make your changes + +4. Save your edits or reject them + + +Toolbar +....... + + +.. image:: img/changelog.1.0/toolbar.old.png + +Old toolbar + +.. image:: img/changelog.1.0/toolbar.new.png + +New toolbar + +The toolbar was enhanced with an button to import vector sources, to select, add and save vector features, and to synchronize +the map canvas center with that of the QGIS main map canvas. + +.. image:: img/changelog.1.0/select_features.png + +Map Views +......... + +.. image:: img/changelog.1.0/mapviewcontrolldock.new.png + +The map view control panel has been reorganized based on the [QToolBox](https://doc.qt.io/qt-5/qtoolbox.html#details) widget. +This way fix a couple of layout issues, where map view settings looked squeezed. Each +Map View has now its own map layer tree to specify map layer visibility. + + +Time Series Model +................. + +.. image:: img/changelog.1.0/timeseriessources.new.png + +The multi-sensor time series allows to add multiple images with same sensor properties and observation date. + + +Version 0.8 +----------- + +- increased version to 0.8 +- added labeling panel +- scheduled map canvas refreshes +- multiple images per observationdata & sensor +- fixed several bugs +- uses QgsTaskManager for background loading +- own QgsMapLayerStore to not mix-up with (main) QGIS layers + +Version 0.7 +----------- + +- Visualization of images with stacked temporal information (each band = one observation date) +- Speclib I/O as CSV or ENVI-Spectral Library + CSV table for attributes +- temporary VRTs now created in-memory (gdal VSI mechanism) instead in a disk temp path + +fixed bugs: + - Spectral Library: profile coordinate now in center of map pixel (issue #66) + - Save map canvas to clipboard + - Width of plot lines now scale-independent (issue #64, QPen.setCosmetic(True)) + - adding fields to spectral library (issue #61) + +Version 0.6 +----------- + +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 vector data set +- Band values of temporal profiles can be exported as CSV file +- Locations of temporal profiles can be rendered on MapCanvases +- several bug fixes + +Version 0.5 and before +---------------------- + +- increased version to 0.5 +- 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 spatial extent of map canvas or center) + +2018-03-29 +- improved definition of individual 2D / 3D charts per sensor & pixel-location +- added based OpenGL based 3D plot features (axis, grids, labels) +- changed name to "EO Time Series Viewer" (EOTSV) + +2018-02-11 + - merged updates to temporal profile visualization, e.g. + save temporal profiles, compare 2D profiles between different location, experimental 3D visualization + +2018-01-31 + - added file filters for OpenFileDialog + +2018-01-19 + - initialized Sphinx-based documentation + - improved map visualization + map settings + +2017-05-21: + - many changes, done in development branch "develop", + - e.g: QGIS MapCanvases for interactive maps, temporal profiles, ... + +2017-02-14: + - first setup for test users in the recent development branch + + + diff --git a/doc/source/index.rst b/doc/source/index.rst index 3651b68090ad7a43a8d6b854f514a2efa2f537dd..38581fb96baff9ad6a1a17b913389d7bad9b27c6 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -6,22 +6,14 @@ EO Time Series Viewer ====================== -**Welcome to the EO Time Series Viewer Documentation!** - - -About ------ - -The Earth Observation (EO) Time Series Viewer is a QGIS Plugin to visualize raster based earth observation time series data. - -Its major aims are: +.. image:: img/screenshot1.png -* an integrated visualization and labeling of multi-sensor remote-sensing time-series data, based on `QGIS <http://www.qgis.org>`_ -* to minimize the user-interaction ("mouse-clicks") required to optimize different ways of data representation. -* an (almost) platform independent installation -.. image:: img/screenshot1.png +The Earth Observation Time Series Viewer (EOTSV) is a free-and-open source QGIS Plugin to visualize raster-based earth observation time series data. +* `Online documentation https://eo-time-series-viewer.readthedocs.io/en/latest/ <https://eo-time-series-viewer.readthedocs.io/en/latest/>`_ +* `Source Code https://bitbucket.org/jakimowb/eo-time-series-viewer <https://bitbucket.org/jakimowb/eo-time-series-viewer>`_ +* `Issue tracker https://bitbucket.org/jakimowb/eo-time-series-viewer/issues <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues?status=new&status=open>`_ Features @@ -35,19 +27,6 @@ Features * Spectral-temporal ("time profile") visualisation shows raw or scaled, sensor specific band values. -Missing Features / Outlook -~~~~~~~~~~~~~~~~~~~~~~~~~~ - -* a lot of debugging, making small errors gone. -* 3D plotting for spectral-temporal surfaces -* export temporal profiles - -Feedback -~~~~~~~~ - -Your feedback (wishes, comments, bugs, ...) is always welcome. Add it to the `issue section <https://bitbucket.org/jakimowb/eo-time-series-viewer/issues?status=new&status=open>`_ -or send me an email `benjamin.jakimow@geo.hu-berlin.de <benjamin.jakimow@geo.hu-berlin.de>`_. - .. seealso:: `EnMAP Box 3 <https://bitbucket.org/hu-geomatics/enmap-box/wiki/Home>`_ - Another QGIS Plugin developed at Humboldt-Universität zu Berlin @@ -57,16 +36,17 @@ License and Use This program is free software; you can redistribute it and/or modify it under the terms of the `GNU General Public License Version 3 (GNU GPL-3) <https://www.gnu.org/licenses/gpl-3.0.en.html>`_ , as published by the Free Software Foundation. See also :ref:`License`. +.. note that changelog.rst is autogenerated!!! .. toctree:: :maxdepth: 3 :caption: Contents: - news.rst installation.rst User Guide <user_guide.rst> - gallery.rst + Visual Changelog <changelog_visual.rst> Changelog <changelog.rst> + gallery.rst License <LICENSE.md> diff --git a/doc/source/news.rst b/doc/source/news.rst deleted file mode 100644 index 312b6cb246ff849f8d7091f9b56d8e79e691eb5b..0000000000000000000000000000000000000000 --- a/doc/source/news.rst +++ /dev/null @@ -1,72 +0,0 @@ -==== -News -==== - - -2019-05-31: - - * increased version to 1.2 - * Added menu option to export all maps as image files. - -2019-05-24 - - * increased version to 1.1 - * dates of visible map canvases are highlighted in the time series tree - -2019-05-15: - - * Major update: released version 1.0 with many new features: - * 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 it's own layer tree. - * improved MapTool organization - * removed PyQtGraph from list of required external python packages, no need to run a pip installation first - -2019-03-01: - - * increased version to 0.8 - * several bug fixes - * ready for QGIS 3.6 (at least for windows versions) - - -2018-06-04: - * increased version to 0.6 - * 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 vector data set - - Band values of temporal profiles can be exported as CSV file - - Locations of temporal profiles can be rendered on MapCanvases - * several bug fixes - -2018-04-17: - * Increased version to 0.5, ported to QGIS 3, Qt5 and Python 3.6. - * Improvements in temporal profile visualization. - * Removed several bugs. - * Visibility of vector and raster layers can be toggled per map view. - * Improved interaction between QGIS and EOTSV (Buttons to import/export spatial extent of map canvas or center) - -**2018-03-29:** Improved definition of individual 2D / 3D charts per sensor & pixel-location added based OpenGL based 3D -plot features (axis, grids, labels) changed name to "EO Time Series Viewer" (EOTSV) - -**2018-02-11:** Merged updates to temporal profile visualization, e.g. save temporal profiles, compare 2D profiles between -different location, experimental 3D visualization. - -**2018-01-19:** Re-written dialog to configure map visualizations ("Map Views"), Vector & Raster layers can be hidden. -Initialized Sphinx-based documentation. - -**2017-06-27:** `Poster <https://bitbucket.org/jakimowb/eo-time-series-viewer/downloads/Jakimow.et.al.TimeSeriesViewer.pdf>`_ & demonstration at `Multitemp 2017, Brugges, Belgium <https://multitemp2017.vito.be>`_. - -**2017-05-21:** many changes, done in development branch "develop", e.g. QGIS MapCanvases for interactive maps, temporal profiles and more. - -**2017-02-14:** first setup for test users in the recent development branch qgis_apo - -**2016-12-02:** Work on this project continued. During the last months I focused on the `EnMAP-Box <https://bitbucket.org/hu-geomatics/enmap-box>`_ where I gained a lot of experience in using Qt and QGIS API. \ No newline at end of file diff --git a/eotimeseriesviewer/main.py b/eotimeseriesviewer/main.py index af6571f11d568bf3a548fa6955392dea021f6439..5c9b96b04e6e7463b5c978b30a246444576a901e 100644 --- a/eotimeseriesviewer/main.py +++ b/eotimeseriesviewer/main.py @@ -59,6 +59,64 @@ EXTRA_SPECLIB_FIELDS = [ ] +class AboutDialogUI(QDialog, loadUI('aboutdialog.ui')): + def __init__(self, parent=None): + """Constructor.""" + super(AboutDialogUI, self).__init__(parent) + # Set up the user interface from Designer. + # After setupUI you can access any designer object by doing + # self.<objectname>, and you can use autoconnect slots - see + # http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html + # #widgets-and-dialogs-with-auto-connect + self.setupUi(self) + + self.init() + + def init(self): + self.mTitle = self.windowTitle() + self.listWidget.currentItemChanged.connect(lambda: self.setAboutTitle()) + self.setAboutTitle() + + # page About + from eotimeseriesviewer import PATH_LICENSE, __version__, PATH_CHANGELOG, PATH_ABOUT + self.labelVersion.setText('{}'.format(__version__)) + + def readTextFile(path): + if os.path.isfile(path): + f = open(path, encoding='utf-8') + txt = f.read() + f.close() + else: + txt = 'unable to read {}'.format(path) + return txt + + # page Changed + self.tbAbout.setHtml(readTextFile(PATH_ABOUT)) + + aboutText = readTextFile(PATH_CHANGELOG) + urlPrefix = r'https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/' + aboutText = re.sub(r'(#(\d+))', r'`#\2 <{}\2>`_'.format(urlPrefix), aboutText) + from docutils.core import publish_string + aboutHTML = publish_string(aboutText, writer_name='html') + self.tbChanges.setText(aboutHTML.decode()) + self.tbLicense.setText(readTextFile(PATH_LICENSE)) + + + def setAboutTitle(self, suffix=None): + item = self.listWidget.currentItem() + + if item: + title = '{} | {}'.format(self.mTitle, item.text()) + else: + title = self.mTitle + if suffix: + title += ' ' + suffix + self.setWindowTitle(title) + + + + + class TimeSeriesViewerUI(QMainWindow, loadUI('timeseriesviewer.ui')): @@ -391,7 +449,6 @@ class TimeSeriesViewer(QgisInterface, QObject): # connect buttons with actions - from eotimeseriesviewer.widgets import AboutDialogUI self.ui.actionAbout.triggered.connect(lambda: AboutDialogUI(self.ui).exec_()) self.ui.actionSettings.triggered.connect(self.onShowSettingsDialog) diff --git a/eotimeseriesviewer/ui/aboutdialog.ui b/eotimeseriesviewer/ui/aboutdialog.ui index d3ab036087c26a71a5e0a46c7751f9143b292e0b..5244898190cf4087d61ac8b7e4e47e6006b81e8a 100644 --- a/eotimeseriesviewer/ui/aboutdialog.ui +++ b/eotimeseriesviewer/ui/aboutdialog.ui @@ -189,7 +189,7 @@ <enum>QFrame::NoFrame</enum> </property> <property name="currentIndex"> - <number>0</number> + <number>1</number> </property> <widget class="QWidget" name="pageAbout"> <property name="sizePolicy"> @@ -410,7 +410,11 @@ p, li { white-space: pre-wrap; } <number>0</number> </property> <item> - <widget class="QTextBrowser" name="tbChanges"/> + <widget class="QTextBrowser" name="tbChanges"> + <property name="openExternalLinks"> + <bool>true</bool> + </property> + </widget> </item> </layout> </widget> diff --git a/eotimeseriesviewer/widgets.py b/eotimeseriesviewer/widgets.py deleted file mode 100644 index 60e3e73f2de210ca2386ba30e72df805407340fa..0000000000000000000000000000000000000000 --- a/eotimeseriesviewer/widgets.py +++ /dev/null @@ -1,126 +0,0 @@ -# -*- coding: utf-8 -*- -""" -/*************************************************************************** - EO Time Series Viewer - ------------------- - begin : 2017-08-04 - git sha : $Format:%H$ - copyright : (C) 2017 by HU-Berlin - email : benjamin.jakimow@geo.hu-berlin.de - ***************************************************************************/ - -/*************************************************************************** - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - ***************************************************************************/ -""" -# noinspection PyPep8Naming - -import os, collections -from qgis.core import * -from qgis.gui import * -from qgis.PyQt.QtWidgets import * -from qgis.PyQt import uic -from qgis.PyQt.QtCore import * -from qgis.PyQt.QtGui import * -from qgis.PyQt.QtXml import * - - -import sys, re, os, six -from eotimeseriesviewer import DIR_UI -from eotimeseriesviewer.utils import jp -# widgets defined without UI file - -from eotimeseriesviewer.utils import loadUIFormClass - - -def maxWidgetSizes(layout, onHint=True): - assert isinstance(layout, QBoxLayout) - - p = layout.parentWidget() - m = layout.contentsMargins() - - sizeX = 0 - sizeY = 0 - horizontal = isinstance(layout, QHBoxLayout) - - for item in [layout.itemAt(i) for i in range(layout.count())]: - wid = item.widget() - ly = item.layout() - if wid: - if onHint: - s = wid.sizeHint() - else: - s = wid.size() - elif ly: - continue - else: - continue - if horizontal: - sizeX += s.width() + layout.spacing() - sizeY = max([sizeY, s.height()]) + layout.spacing() - else: - sizeX = max([sizeX, s.width()]) + layout.spacing() - sizeY += s.height() + layout.spacing() - - - return QSize(sizeX + m.left()+ m.right(), - sizeY + m.top() + m.bottom()) - - - - -class AboutDialogUI(QDialog, loadUIFormClass(jp(DIR_UI, 'aboutdialog.ui'))): - def __init__(self, parent=None): - """Constructor.""" - super(AboutDialogUI, self).__init__(parent) - # Set up the user interface from Designer. - # After setupUI you can access any designer object by doing - # self.<objectname>, and you can use autoconnect slots - see - # http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html - # #widgets-and-dialogs-with-auto-connect - self.setupUi(self) - - self.init() - - def init(self): - self.mTitle = self.windowTitle() - self.listWidget.currentItemChanged.connect(lambda: self.setAboutTitle()) - self.setAboutTitle() - - # page About - from eotimeseriesviewer import PATH_LICENSE, __version__, PATH_CHANGELOG, PATH_ABOUT - self.labelVersion.setText('{}'.format(__version__)) - - def readTextFile(path): - if os.path.isfile(path): - f = open(path, encoding='utf-8') - txt = f.read() - f.close() - else: - txt = 'unable to read {}'.format(path) - return txt - - # page Changed - self.tbAbout.setHtml(readTextFile(PATH_ABOUT)) - self.tbChanges.setText(readTextFile(PATH_CHANGELOG)) - self.tbLicense.setText(readTextFile(PATH_LICENSE)) - - - def setAboutTitle(self, suffix=None): - item = self.listWidget.currentItem() - - if item: - title = '{} | {}'.format(self.mTitle, item.text()) - else: - title = self.mTitle - if suffix: - title += ' ' + suffix - self.setWindowTitle(title) - - - diff --git a/make/deploy.py b/make/deploy.py index b6b442272db90dea50e12a3a759121056938dd24..173526d413da0bd5ea1d26347e9fe35d714afb7a 100644 --- a/make/deploy.py +++ b/make/deploy.py @@ -41,10 +41,12 @@ import eotimeseriesviewer DIR_BUILD = jp(DIR_REPO, 'build') DIR_DEPLOY = jp(DIR_REPO, 'deploy') +DIR_DOC_SOURCE = jp(DIR_REPO, *['doc','source']) QGIS_MIN = '3.4' QGIS_MAX = '3.99' PATH_ABOUT_TEXT = jp(DIR_REPO, 'ABOUT_Plugin.html') +PATH_CHANGELOG = jp(DIR_REPO, 'CHANGELOG') REPO = git.Repo(DIR_REPO) currentBranch = REPO.active_branch.name @@ -313,6 +315,9 @@ def build(): f.flush() f.close() + # copy CHANGELOG to doc/source/changelog.rst + updateShpinxChangelog() + # 5. create a zip print('Create zipfile...') @@ -340,6 +345,22 @@ def build(): print('Finished') +def updateShpinxChangelog(): + from eotimeseriesviewer import PATH_CHANGELOG + with open(PATH_CHANGELOG, 'r') as f: + # replace (#1) with (https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/1) + urlPrefix = r'https://bitbucket.org/jakimowb/eo-time-series-viewer/issues/' + lines = f.readlines() + lines = [re.sub(r'(#(\d+))', r'`#\2 <{}\2>`_'.format(urlPrefix), line) for line in lines] + + pathChangelogRst = jp(DIR_DOC_SOURCE, 'changelog.rst') + + with open(pathChangelogRst, 'w', encoding='utf-8') as f2: + f2.writelines(lines) + + s = "" + + def updateRepositoryXML(MD:QGISMetadataFileWriter, path:str=None): """ @@ -549,5 +570,5 @@ def uploadDeveloperPlugin(): if __name__ == "__main__": - - build() \ No newline at end of file + updateShpinxChangelog() + #build() \ No newline at end of file diff --git a/tests/test_main.py b/tests/test_main.py index d1924d4779ab1e4d3c9e22669bfcc44b94535792..a91ec3c8eaf63030ce4de1838a24067fb42d0191 100644 --- a/tests/test_main.py +++ b/tests/test_main.py @@ -105,6 +105,17 @@ class TestInit(TestCase): QGIS_APP.exec_() + def test_AboutDialog(self): + + from eotimeseriesviewer.main import AboutDialogUI + + dialog = AboutDialogUI() + dialog.show() + self.assertIsInstance(dialog, QDialog) + if SHOW_GUI: + QGIS_APP.exec_() + + def test_exportMapsToImages(self): from eotimeseriesviewer.main import TimeSeriesViewer, SaveAllMapsDialog