Commit 108c50a8 authored by Benjamin Jakimow's avatar Benjamin Jakimow
Browse files

documentation

parent ac185151
.. HUB TimeSeriesViewer documentation master file, created by
sphinx-quickstart on Fri Jan 19 11:57:19 2018.
.. EO Time Series Viewer documentation master file
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
......@@ -10,8 +9,6 @@ EO Time Series Viewer
**Welcome to the EO Time Series Viewer Documentation!**
.. seealso:: `EnMAP Box 3 <https://bitbucket.org/hu-geomatics/enmap-box/wiki/Home>`_ - Another QGIS Plugin developed at Humboldt-Universität zu Berlin
About
-----
......@@ -41,19 +38,19 @@ Features
Missing Features / Outlook
~~~~~~~~~~~~~~~~~~~~~~~~~~
* a lot of debugging, making the small errors gone.
* a lot of debugging, making small errors gone.
* 3D plotting for spectral-temporal surfaces
* export temporal profiles
* export spectral libraries
* show location of selected spectra
Feedback
~~~~~~~~
Your feedback (wishes, comments, bugs, ...) is always welcome. Add it to the `issue section <https://bitbucket.org/jakimowb/hub-timeseriesviewer/issues?status=new&status=open>`_
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
License and Use
---------------
......
......@@ -9,19 +9,13 @@ Installation
============
.. warning:: EO Time Series Viewer requires QGIS Version 3.0 +
.. note:: EO Time Series Viewer requires QGIS Version 3.0 +
.. note:: If you have not installed QGIS yet, you can get it `here <https://www.qgis.org/en/site/forusers/download.html>`_.
Windows
-------
.. tip:: On windows we recommend to use the **OSGeo4W Network Installer**!
Standard QGIS 3 Plugin Installation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-----------------------------------
1. Download the most recent zip archive of the EO Time Series Viewer QGIS Plugin from https://bitbucket.org/jakimowb/eo-time-series-viewer/downloads
......@@ -32,24 +26,27 @@ Standard QGIS 3 Plugin Installation
4. Start the EO Time Series Viewer via the |icon| icon. In case of missing requirements you should see an error message. Please install the requested packages.
Developers
~~~~~~~~~~
----------
You really want to use `git <https://en.wikipedia.org/wiki/Git_%28software%29>`_ to install and update the viewer.
1. Please follow http://enmap-box.readthedocs.io/en/latest/dev_section/dev_installation.html to set up your IDE for developing a QGIS python application and ensure that git and git-lfs is installed.
If git is not available in your shell, you can download it from `<https://git-scm.com/downloads>`_. You can install git without admin rights.
Larger binary files, e.g. for exemplary data, are distributed via the Git Large File Storage (lfs) extension `<https://git-lfs.github.com>`_.
2. Clone the eo-time-series-viewer repository and checkout the development branch::
git clone https://bitbucket.org/jakimowb/eo-time-series-viewer.git
git checkout develop
git lfs checkout
1. Open your shell and clone the repository into a local QGIS Python Plugin Folder::
3. Make the repository *eo-time-series-viewer* folder accessible to your python project
cd %USERPROFILE%\.qgis2\python\plugins
git clone https://bitbucket.org/jakimowb/hub-timeseriesviewer.git
4. Call *timeseriesviewer/main.py* or the folliwing code to start the EO Time Series Viewer::
2. Checkout the development branch (this might change with the fist stable master version)::
from timeseriesviewer.utils import initQgisApplication
qgsApp = initQgisApplication()
ts = TimeSeriesViewer(None)
ts.run()
qgsApp.exec_()
qgsApp.exitQgis()
git checkout development
git lfs checkout
.. todo:: add detailed description hot to setup an IDE to run the EO Time Series Viewer without QGIS
\ No newline at end of file
......@@ -5,7 +5,7 @@ News
2018-01-19: Re-written dialog to configure map visualizations ("Map Views"), Vector & Raster layers can be hidden
2017-06-27: `Poster <https://bitbucket.org/jakimowb/hub-timeseriesviewer/downloads/Jakimow.et.al.TimeSeriesViewer.pdf>`_ & demonstration at `Multitemp 2017, Brugges, Belgium <https://multitemp2017.vito.be>`_.
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.
......
.. DEFINE ICONS AND IMAGE HERE
.. |cbc| image:: img/checkbox_checked.PNG
.. |cbu| image:: img/checkbox_unchecked.PNG
.. |ad_ra| image:: img/icons/mActionAddRasterLayer.svg
.. |re_ra| image:: img/icons/mActionRemoveTSD.svg
.. |timeseriesdock| image:: img/timeseriesdock.png
.. |icon_eotsv| image:: img/icons/icon.svg
:width: 30px
.. |icon_zoom_in| image:: img/icons/mActionZoomIn.svg
:width: 30px
.. |icon_zoom_out| image:: img/icons/mActionZoomOut.svg
:width: 30px
.. |icon_zoom_pan| image:: img/icons/mActionPan.svg
:width: 30px
.. |icon_zoom_full| image:: img/icons/mActionZoomFullExtent.svg
:width: 30px
.. |icon_zoom_11| image:: img/icons/mActionZoomActual.svg
:width: 30px
.. |icon_add_map_view| image:: img/icons/mActionAddMapView.svg
:width: 30px
.. |icon_select_ts_profile| image:: img/icons/ActionIdentifyTimeSeries.svg
:width: 30px
.. |icon_refresh| image:: img/icons/mActionRefresh.png
:width: 30px
==========
User Guide
==========
The Interface
-------------
Quick Start
-----------
1. Click |icon_eotsv| in the QGIS Tool Bar or via :menuselection:`Raster --> EO Time Series Viewer` to start the EO Time Series Viewer
2. Click :menuselection:`Files --> Add example` to load an examplary time series of Landsat and RapidEye observations.
3. Open the sensor panel :menuselection:`View --> Panels... --> Sensors / Products` and change the sensor names
============ =========
Default Changed
============ =========
5bands@5.0m RapidEye
6bands@30.0m Landsat
============ =========
4. Use the scroll band and the map tools |icon_zoom_in| |icon_zoom_out| |icon_zoom_pan| to change the temporal and spatial subset shown from the time series.
5. Open the Map View panel, change the map view name from `Map View 1` to `True Color` and set the multiband color render band selection to `RGB = 3-2-1` for both, Landsat and RapidEye images.
.. note:: Use |icon_refresh| to refresh or redraw related maps, spectral profile plots etc.
6. Now we like to Optimize the color stretch. Choose a none-clouded Landsat observation like 2104-06-24 and use the map context menu (right-mouse-click)
to click on :menuselection:`Stretch to current extent ... --> Linear 5%`. Repeat with `Linear` and `Gaussian` stretch as well as for RapidEye images to
see how this changes the band-specific min/max values in the Map View settings.
7. Click |icon_add_map_view| to create a second map view, respectively row of map images. Call it `Short-Wave IR` and the the multiband color render bands to
``Landsat RGB = 4-5-3`` and ``RapidEye RGB = 5-4-3``
8. Expand the `Map Properties` combobox (the first in the Map Views panel), increase the map size to 300x300 pixel and press `Apply`.
9. Bring the Temporal Profile panel :menuselection:`View --> Panels... --> Sensors / Products` and the `2D` page to the front.
Click |icon_select_ts_profile| and select a map location to visualize the temporal profile for.
Each selected map location will be listed in the panels' `Coordinate` page.
Go back to the `2D` plot page and add a second profile with RapidEye data as Sensor source.
Change the expression field to show the Normalized Difference Vegetation Index (NDVI) for both sensors:
======== ================
Sensor Expression NDVI
======== ================
Landsat (b4-b3)/(b4+b3)
RapidEye (b5-b3)/(b5+b3)
======== ================
The Graphical User Interface
----------------------------
.. figure:: img/interface.png
This is what the EO Time Series Viewer's interface looks like when opening it.
.. note:: Just like in QGIS, many parts of the GUI are adjustable panels. Therefore you can arrange them either tabbed or in separate windows.
.. note:: Just like in QGIS, many parts of the GUI are adjustable panels. You can arrange them as tabbed, stacked or separate windows.
Activate/Deactivate panels under :menuselection:`View --> Panels`
Time Series
^^^^^^^^^^^
.. figure:: img/timeseriesdock.png
This window lists the individual input raster files of the time series.
* ``date`` corresponds to the image acquisition date as automatically derived by the TSV from the file name. Checking |cbc| or unchecking |cbu| the box in the date field will include or exclude the respective image from the display
* ``sensor`` shows the name of the sensor as defined in the :ref:`Sensors / Products` tab
* ``ns``: number of samples (pixels in x direction)
* ``nl``: number of lines (pixels in y direction)
* ``nb``: number of bands
* ``image``: path to the raster file
You can *add new rasters* to the time series by clicking |ad_ra| :superscript:`Add image to time series`.
Remove them by selecting the desired rows in the table (click on the row number) and pressing the |re_ra| :superscript:`Remove image from time series` button.
.. tip:: Click :menuselection:`Files --> Add example` to load a small example time series.
Sensors / Products
^^^^^^^^^^^^^^^^^^
.. figure:: img/sensordock.png
The EO Time Series Viewer automatically assesses different characteristics of the input images (number of bands, geometric resolution etc.)
and combines identical ones into sensor groups (or products). Those are listed as follows in the Sensor / Products window:
* ``name`` is automatically generated from the resolution and number of bands (e.g. *6bands@30.m*). This field is adjustable,
i.e. you can change the name by double clicking into the field. The here defined name will be also displayed in the Map View and the Time Series table.
* ``nb``: number of bands
* ``n images``: number of images within the time series attributed to the according sensor
* ``wl``: comma separated string of the (center) wavelength of every band and [unit]
* ``id``: string identifying number of bands, geometric resolution and wavelengths (primary for internal use)
The Toolbar
~~~~~~~~~~~
^^^^^^^^^^^
+---------------------------------------------------+--------------------------------------------------+
| Button |Function |
......@@ -65,23 +179,34 @@ The Toolbar
Map Visualization
^^^^^^^^^^^^^^^^^
.. figure:: img/mapviewdock.png
Map Views Main Window
~~~~~~~~~~~~~~~~~~~~~
Map Properties
..............
In the map properties box you can specify **Width** and **Height**, as well as background **Color** and the **CRS** of the single map canvases.
.. image:: img/maprendering.png
* :guilabel:`Set Center` center the QGIS Map View to the same coordinate as the TSV Map View
* :guilabel:`Get Center` center the TSV Map View to the same coordinate as the QGIS Map View
* :guilabel:`Set Extent` zoom the QGIS Map View to the same extent as the TSV Map View
* :guilabel:`Get Extent` zoom the TSV Map View to the same extent as the QGIS Map View
* ``Load center profile``, when checked |cbc|, the temporal profile of the center pixel will automatically be displayed and updated in the :ref:`Profile View` tab.
|
|
Map Views
^^^^^^^^^
.........
A map view is a row of map canvases that show the time series images of different sensors/product in the same band band combination, e.g. as "True Color bands".
The map view panel allows to add or remove map views and to specifiy how the images of each sensor are to be rendered.
This panel mainly divides into two sections: The upper bar, where you can select/add/remove Map Views and the lower part,
where you can adjust settings (e.g. display style) for every Map View individually.
* You can *add new Map Views* using the |addmapview| button. Remove them via |removemapview|.
* You can *add new Map Views* using the |addmapview| button. This will create a now row of map canvases. Remove a map view via |removemapview|.
* In case the Map View does not refresh correctly, you can 'force' the refresh using the |refresh| button (which will also apply all the render settings).
* Access the settings for individual Map Views via the dropdown menu |mapviewdropdown|
* You can use the |questionmark| button to *highlight the current Map View* selected in the dropdown menu (respective image chips will show red margin for a few seconds).
......@@ -89,8 +214,6 @@ where you can adjust settings (e.g. display style) for every Map View individual
Now, for every Map View you can alter the following settings:
.. image:: img/mapviewsettings.png
* *Hide/Unhide* the Map View via the |hidemapview| :superscript:`Toggle visibility of this map view` button.
* *Activate/Deactivate Crosshair* via the |crosshair| :superscript:`Show/hide a crosshair` button. Press the arrow button next to it to enter
......@@ -133,31 +256,7 @@ Now, for every Map View you can alter the following settings:
.. |paste| image:: img/icons/mActionEditPaste.svg
|
|
Sensors / Products
^^^^^^^^^^^^^^^^^^
The TSV automatically assesses different characteristics of the input images (number of bands, geometric resolution etc.)
and combines identical ones into sensor groups (or products). Those are listed as follows in the Sensor / Products window:
==== == ======== == ==
name nb n images wl id
==== == ======== == ==
==== == ======== == ==
* ``name`` is automatically generated from the resolution and number of bands (e.g. *6bands@30.m*). This field is adjustable,
i.e. you can change the name by double clicking into the field. The here defined name will be also displayed in the Map View and the Time Series table.
* ``nb``: number of bands
* ``n images``: number of images within the time series attributed to the according sensor
* ``wl``: comma separated string of the (center) wavelength of every band and [unit]
* ``id``: string identifying number of bands, geometric resolution and wavelengths (primary for internal use)
|
|
Cursor Location Values
^^^^^^^^^^^^^^^^^^^^^^
......@@ -177,82 +276,33 @@ In case the Map View contains (additional) vector data, location information wil
.. |crs| image:: img/icons/CRS.svg
|
|
Map Rendering
^^^^^^^^^^^^^
In the Map Rendering options you can specify **Width** and **Height**, as well as background **Color** and the **CRS** of the image chips in the Main Map View.
.. image:: img/maprendering.png
* :guilabel:`Set Center` center the QGIS Map View to the same coordinate as the TSV Map View
* :guilabel:`Get Center` center the TSV Map View to the same coordinate as the QGIS Map View
* :guilabel:`Set Extent` zoom the QGIS Map View to the same extent as the TSV Map View
* :guilabel:`Get Extent` zoom the TSV Map View to the same extent as the QGIS Map View
* ``Load center profile``, when checked |cbc|, the temporal profile of the center pixel will automatically be displayed and updated in the :ref:`Profile View` tab.
|
|
Profile View
~~~~~~~~~~~~
Profile Visualization
^^^^^^^^^^^^^^^^^^^^^
|
|
Spectral Library
~~~~~~~~~~~~~~~~
Temporal Profiles
.................
|
|
Time Series Tab
~~~~~~~~~~~~~~~
In this window the individual components (input rasters) of the time series are listed as follows:
===== ====== == == == =====
date sensor ns nl nb image
===== ====== == == == =====
|cbc|
===== ====== == == == =====
where
* ``date`` corresponds to the image acquisition date as automatically derived by the TSV from the file name. Checking |cbc| or unchecking |cbu| the box in the date field will include or exclude the respective image from the display
* ``sensor`` shows the name of the sensor as defined in the :ref:`Sensors / Products` tab
* ``ns``: number of samples (pixels in x direction)
* ``nl``: number of lines (pixels in y direction)
* ``nb``: number of bands
* ``image``: path to the raster file
You can *add new rasters* to the time series by clicking |ad_ra| :superscript:`Add image to time series`.
Remove them by selecting the desired rows in the table (click on the row number) and pressing the |re_ra| :superscript:`Remove image from time series` button.
Spectral Library
................
.. |cbc| image:: img/checkbox_checked.PNG
.. |cbu| image:: img/checkbox_unchecked.PNG
.. |ad_ra| image:: img/icons/mActionAddRasterLayer.svg
.. |re_ra| image:: img/icons/mActionRemoveTSD.svg
|
|
Getting Started
---------------
This section will demonstrate the process of setting up your own time series as a step-by-step guide.
Import Data
~~~~~~~~~~~
[general]
name=EO Time Series Viewer
description=A QGIS Plugin to visualize multi-sensor remote-sensing time-series data.
version=0.5.201805141058
version=0.5.201805141436
qgisMinimumVersion=3.0
author=Benjamin Jakimow, Geomatics Lab, Humboldt-Universität zu Berlin
about=The EO Time Series Viewer is developed at Humboldt-Universität zu Berlin. Born in the SenseCarbon project, it was funded by the German Aerospace Centre (DLR) and granted by the Federal Ministry of Education and Research (BMBF, grant no. 50EE1254). Since 2017 it is developed under contract by the German Research Centre for Geosciences (GFZ) as part of the EnMAP Core Science Team activities (www.enmap.org), funded by DLR and granted by the Federal Ministry of Economic Affairs and Energy (BMWi, grant no. 50EE1529).
......
......@@ -23,7 +23,7 @@
import os, sys, fnmatch, site, re, site
VERSION = '0.5.201805141353'
VERSION = '0.5.201805141436'
LICENSE = 'GNU GPL-3'
TITLE = 'EO Time Series Viewer'
DESCRIPTION = 'A QGIS Plugin to visualize multi-sensor remote-sensing time-series data.'
......@@ -55,7 +55,7 @@ DIR_EXAMPLES = jp(DIR_REPO, 'example')
PATH_EXAMPLE_TIMESERIES = jp(DIR_EXAMPLES,'ExampleTimeSeries.csv')
PATH_LICENSE = jp(DIR_REPO, 'LICENSE.txt')
PATH_CHANGELOG = jp(DIR_REPO, 'CHANGES.txt')
SETTINGS = QSettings(QSettings.UserScope, 'HU Geomatics', 'TimeSeriesViewer')
SETTINGS = QSettings(QSettings.UserScope, 'HU-Berlin', 'EO Time Series Viewer')
DIR_QGIS_RESOURCES = jp(DIR_REPO, 'qgisresources')
......
......@@ -783,28 +783,9 @@ def disconnect_signal(signal):
def main():
# add site-packages to sys.path as done by enmapboxplugin.py
from timeseriesviewer.utils import initQgisApplication
import os
qgsApp = initQgisApplication()
ts = TimeSeriesViewer(None)
ts.run()
#ts.loadExampleTimeSeries()
if False:
from example import exampleEvents
lyr = QgsVectorLayer(exampleEvents, 'Events', 'ogr', True)
lyr2 = QgsVectorLayer(exampleEvents, 'Events2', 'ogr', True)
QgsProject.instance().addMapLayers([lyr, lyr2])
mapView = ts.mapViews()[0]
from timeseriesviewer.mapvisualization import MapView
assert isinstance(mapView, MapView)
#mapView.setVectorLayer(lyr)
# ts.createMapView()
# close QGIS
qgsApp.exec_()
qgsApp.exitQgis()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment