From 955f5b80ae166d5cd47a58208f56045aba25f85b Mon Sep 17 00:00:00 2001 From: "benjamin.jakimow@geo.hu-berlin.de" <q8DTkxUg-BB> Date: Thu, 10 Aug 2017 21:05:26 +0200 Subject: [PATCH] fixed handling of vector layers after vector overlay change added __main__.py (in progress) added option to load center pixel automatically --- timeseriesviewer/__main__.py | 39 +++++++++++++ timeseriesviewer/main.py | 28 +++++---- timeseriesviewer/mapcanvas.py | 21 +++---- timeseriesviewer/mapvisualization.py | 5 +- timeseriesviewer/pixelloader.py | 1 + timeseriesviewer/ui/renderingdock.ui | 87 ++++++++++++++++++---------- 6 files changed, 130 insertions(+), 51 deletions(-) create mode 100644 timeseriesviewer/__main__.py diff --git a/timeseriesviewer/__main__.py b/timeseriesviewer/__main__.py new file mode 100644 index 00000000..21294df5 --- /dev/null +++ b/timeseriesviewer/__main__.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- + +""" +*************************************************************************** + + --------------------- + Date : 10.08.2017 + Copyright : (C) 2017 by Benjamin Jakimow + Email : benjamin jakimow at geo dot hu-berlin dot 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. * +* * +*************************************************************************** +""" +from __future__ import absolute_import +import sys + +class run(): + + # add site-packages to sys.path as done by enmapboxplugin.py + + from timeseriesviewer.sandbox import initQgisEnvironment + qgsApp = initQgisEnvironment() + from timeseriesviewer.main import TimeSeriesViewer + S = TimeSeriesViewer(None) + S.ui.show() + S.run() + + #close QGIS + qgsApp.exec_() + qgsApp.exitQgis() + +if __name__ == '__main__': + from timeseriesviewer.main import __main__ + __main__() diff --git a/timeseriesviewer/main.py b/timeseriesviewer/main.py index 333c1ff6..b2b441b4 100644 --- a/timeseriesviewer/main.py +++ b/timeseriesviewer/main.py @@ -20,10 +20,12 @@ """ # noinspection PyPep8Naming from __future__ import absolute_import +from qgis.core import * import os, sys, re, fnmatch, collections, copy, traceback, six import logging logger = logging.getLogger(__name__) -from qgis.core import * + + import qgis.utils from timeseriesviewer.utils import * @@ -154,11 +156,12 @@ class QgisTsvBridge(QObject): sigQgisProjectClosed = pyqtSignal() - def __init__(self): + def __init__(self, parent=None): assert QgisTsvBridge._instance is None, 'Can not instantiate QgsTsvBridge twice' + super(QgisTsvBridge, self).__init__(parent) self.TSV = None - - + self.ui = None + self.SpatTempVis = None def isValid(self): return isinstance(self.iface, QgisInterface) and isinstance(self.TSV, TimeSeriesViewer) @@ -220,7 +223,8 @@ class QgisTsvBridge(QObject): center = center.toCrs(extTsv.crs()) if center: self.TSV.spatialTemporalVis.setSpatialCenter(center) - + if self.ui.dockRendering.cbLoadCenterPixelProfile.isChecked(): + self.TSV.spectralTemporalVis.loadCoordinate(center) if request == 'tsvExtent2qgsExtent': extent = extTsv.toCrs(extQgs.crs()) @@ -232,6 +236,8 @@ class QgisTsvBridge(QObject): extent = extQgs.toCrs(extTsv.crs()) if extent: self.TSV.spatialTemporalVis.setSpatialExtent(extent) + if self.ui.dockRendering.cbLoadCenterPixelProfile.isChecked(): + self.TSV.spectralTemporalVis.loadCoordinate(extent.spatialCenter()) class TimeSeriesViewerUI(QMainWindow, @@ -638,15 +644,17 @@ def disconnect_signal(signal): break - -if __name__ == '__main__': - +def main(): # add site-packages to sys.path as done by enmapboxplugin.py from timeseriesviewer.sandbox import initQgisEnvironment, sandboxGui qgsApp = initQgisEnvironment() sandboxGui() - #close QGIS + # close QGIS qgsApp.exec_() - qgsApp.exitQgis() \ No newline at end of file + qgsApp.exitQgis() + +if __name__ == '__main__': + + main() \ No newline at end of file diff --git a/timeseriesviewer/mapcanvas.py b/timeseriesviewer/mapcanvas.py index c36a7284..7f106bb5 100644 --- a/timeseriesviewer/mapcanvas.py +++ b/timeseriesviewer/mapcanvas.py @@ -135,17 +135,18 @@ class MapCanvas(QgsMapCanvas): return self.mLayers - def addLazyRasterSources(self, sources): + def setLazyRasterSources(self, sources): + del self.mLazyRasterSources[:] assert isinstance(sources, list) self.mLazyRasterSources.extend(sources[:]) - def addLazyVectorSources(self, sourceLayers): + def setLazyVectorSources(self, sourceLayers): assert isinstance(sourceLayers, list) + del self.mLazyVectorSources[:] for lyr in sourceLayers: assert isinstance(lyr, QgsVectorLayer) self.mLazyVectorSources.append((lyr, lyr.source(), lyr.name(), lyr.providerType())) - def mapSummary(self): from PyQt4.QtXml import QDomDocument dom = QDomDocument() @@ -166,14 +167,14 @@ class MapCanvas(QgsMapCanvas): def setLayers(self, mapLayers): - oldLayerSet = set(self.layers()) - newLayerSet = set(mapLayers) - diffLayers = len(oldLayerSet.symmetric_difference(newLayerSet)) > 0 - if diffLayers: + oldLayers = self.layers() + newLayers = [l for l in mapLayers if l not in oldLayers] + + if len(newLayers) > 0: reg = QgsMapLayerRegistry.instance() - reg.addMapLayers(mapLayers, False) - self.mLayers = mapLayers[:] - super(MapCanvas, self).setLayerSet([QgsMapCanvasLayer(l) for l in self.mLayers]) + reg.addMapLayers(newLayers, False) + self.mLayers = mapLayers[:] + super(MapCanvas, self).setLayerSet([QgsMapCanvasLayer(l) for l in self.mLayers]) #self.refresh() diff --git a/timeseriesviewer/mapvisualization.py b/timeseriesviewer/mapvisualization.py index bd3b03f1..87387d0e 100644 --- a/timeseriesviewer/mapvisualization.py +++ b/timeseriesviewer/mapvisualization.py @@ -100,7 +100,8 @@ class MapView(QObject): for mapCanvas in self.mapCanvases(): assert isinstance(mapCanvas, MapCanvas) - mapCanvas.addLazyVectorSources([lyr]) + mapCanvas.setLayers([l for l in mapCanvas.layers() if isinstance(l, QgsRasterLayer)]) + mapCanvas.setLazyVectorSources([lyr]) mapCanvas.refresh() else: @@ -740,7 +741,7 @@ class DatumView(QObject): from timeseriesviewer.mapcanvas import MapCanvas assert isinstance(mapCanvas, MapCanvas) self.mapCanvases[mapView] = mapCanvas - mapCanvas.addLazyRasterSources([self.TSD.pathImg]) + mapCanvas.setLazyRasterSources([self.TSD.pathImg]) #mapCanvas.setLayers([QgsRasterLayer(self.TSD.pathImg)]) self.L.insertWidget(self.wOffset + len(self.mapCanvases), mapCanvas) self.ui.update() diff --git a/timeseriesviewer/pixelloader.py b/timeseriesviewer/pixelloader.py index 44950183..22848262 100644 --- a/timeseriesviewer/pixelloader.py +++ b/timeseriesviewer/pixelloader.py @@ -30,6 +30,7 @@ import numpy as np from timeseriesviewer.utils import SpatialPoint, SpatialExtent, geo2px, px2geo from osgeo import gdal, gdal_array, osr import multiprocessing as mp +#mp.freeze_support() from timeseriesviewer.sandbox import initQgisEnvironment DEBUG = False diff --git a/timeseriesviewer/ui/renderingdock.ui b/timeseriesviewer/ui/renderingdock.ui index f487e4b7..9e84e850 100644 --- a/timeseriesviewer/ui/renderingdock.ui +++ b/timeseriesviewer/ui/renderingdock.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>220</width> - <height>387</height> + <height>336</height> </rect> </property> <property name="windowTitle"> @@ -236,7 +236,7 @@ <item> <widget class="QGroupBox" name="gbSyncQgs"> <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> @@ -244,7 +244,7 @@ <property name="minimumSize"> <size> <width>0</width> - <height>25</height> + <height>0</height> </size> </property> <property name="maximumSize"> @@ -259,7 +259,7 @@ <property name="flat"> <bool>false</bool> </property> - <layout class="QGridLayout" name="gridLayout_2" rowstretch="1,0,0"> + <layout class="QGridLayout" name="gridLayout_2" rowstretch="1,0,0,0,0"> <property name="sizeConstraint"> <enum>QLayout::SetMinimumSize</enum> </property> @@ -269,17 +269,7 @@ <property name="spacing"> <number>2</number> </property> - <item row="0" column="1"> - <widget class="QToolButton" name="btnSetQGISCenter"> - <property name="toolTip"> - <string>Set QGIS Map to the same map center</string> - </property> - <property name="text"> - <string>Set Center</string> - </property> - </widget> - </item> - <item row="1" column="1"> + <item row="2" column="1"> <widget class="QToolButton" name="btnGetQGISCenter"> <property name="toolTip"> <string>Take the map center from QGIS</string> @@ -289,17 +279,7 @@ </property> </widget> </item> - <item row="0" column="2"> - <widget class="QToolButton" name="btnSetQGISExtent"> - <property name="toolTip"> - <string>Try to set the QGIS map extent to the same spatial extent</string> - </property> - <property name="text"> - <string>Set Extent</string> - </property> - </widget> - </item> - <item row="0" column="3"> + <item row="1" column="3"> <spacer name="horizontalSpacer"> <property name="orientation"> <enum>Qt::Horizontal</enum> @@ -312,7 +292,7 @@ </property> </spacer> </item> - <item row="1" column="2"> + <item row="2" column="2"> <widget class="QToolButton" name="btnGetQGISExtent"> <property name="toolTip"> <string>Take the spatial map extent from QGIS</string> @@ -322,8 +302,44 @@ </property> </widget> </item> - <item row="2" column="0" colspan="4"> + <item row="1" column="2"> + <widget class="QToolButton" name="btnSetQGISExtent"> + <property name="toolTip"> + <string>Try to set the QGIS map extent to the same spatial extent</string> + </property> + <property name="text"> + <string>Set Extent</string> + </property> + </widget> + </item> + <item row="1" column="1"> + <widget class="QToolButton" name="btnSetQGISCenter"> + <property name="toolTip"> + <string>Set QGIS Map to the same map center</string> + </property> + <property name="text"> + <string>Set Center</string> + </property> + </widget> + </item> + <item row="0" column="1" colspan="2"> + <widget class="QCheckBox" name="cbLoadCenterPixelProfile"> + <property name="toolTip"> + <string>Loads the temporal profile of the map center pixel</string> + </property> + <property name="text"> + <string>Load center profile</string> + </property> + </widget> + </item> + <item row="3" column="0" colspan="4"> <widget class="QgsCollapsibleGroupBox" name="gbQgsVectorLayer"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="title"> <string>Show Vector Overlay</string> </property> @@ -357,7 +373,7 @@ <property name="minimumSize"> <size> <width>0</width> - <height>23</height> + <height>0</height> </size> </property> </widget> @@ -365,6 +381,19 @@ </layout> </widget> </item> + <item row="4" column="0"> + <spacer name="verticalSpacer_2"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>0</height> + </size> + </property> + </spacer> + </item> </layout> </widget> </item> -- GitLab