diff --git a/timeseriesviewer/mapvisualization.py b/timeseriesviewer/mapvisualization.py index ecc8f6e1d8634b7a3b55b5732374693ee6b9ec88..99e3f256bf4329202e6001dd826503e8b8e85edc 100644 --- a/timeseriesviewer/mapvisualization.py +++ b/timeseriesviewer/mapvisualization.py @@ -34,7 +34,7 @@ class MapView(QObject): super(MapView, self).__init__() assert isinstance(mapViewCollection, MapViewCollection) self.mapViewCollection = mapViewCollection - self.spatTempVis = mapViewCollection.spatTempVis + self.spatTempVis = mapViewCollection.STV self.ui = MapViewDefinitionUI(self, parent=parent) self.ui.create() @@ -102,9 +102,8 @@ class MapView(QObject): assert type(sensor) is SensorInstrument if sensor in self.sensorViews.keys(): w = self.sensorViews.pop(sensor) - from timeseriesviewer.ui.widgets import MapViewSensorSettings assert isinstance(w, MapViewSensorSettings) - l = self.ui.sensorList + l = self.ui.sensorList.layout() l.removeWidget(w.ui) w.ui.close() self.ui.adjustSize() @@ -298,8 +297,8 @@ class MapViewSensorSettings(QObject): colorRampItems.append(QgsColorRampShader.ColorRampItem(value, color)) shaderFunc.setColorRampItemList(colorRampItems) shader = QgsRasterShader() - shader.setMaximumValue(bandStats[0].Min) - shader.setMinimumValue(bandStats[0].Max) + shader.setMaximumValue(bandStats[0].Max) + shader.setMinimumValue(bandStats[0].Min) shader.setRasterShaderFunction(shaderFunc) self.defaultSB.setShader(shader) self.defaultSB.setClassificationMin(shader.minimumValue()) @@ -369,7 +368,6 @@ class MapViewSensorSettings(QObject): self.setLayerRenderer(renderer) def applyStyle(self, *args): - #self.sigSensorRendererChanged.emit(self.layerRenderer()) r = self.layerRenderer() for mapCanvas in self.mMapCanvases: assert isinstance(mapCanvas, MapCanvas) @@ -426,14 +424,11 @@ class MapViewSensorSettings(QObject): self.sensor.wavelengthUnits) self.ui.labelSummary.setText(text) - if MapViewSensorSettings.SignalizeImmediately: - #self.sigSensorRendererChanged.emit(self.layerRenderer()) - self.applyStyle() def setLayerRenderer(self, renderer): ui = self.ui assert isinstance(renderer, QgsRasterRenderer) - + from timeseriesviewer.utils import niceNumberString updated = False if isinstance(renderer, QgsMultiBandColorRenderer): self.ui.cbRenderType.setCurrentIndex(0) @@ -458,8 +453,8 @@ class MapViewSensorSettings(QObject): for i, ce in enumerate([ceRed, ceGreen, ceBlue]): vMin = ce.minimumValue() vMax = ce.maximumValue() - self.multiBandMinValues[i].setText(str(vMin)) - self.multiBandMaxValues[i].setText(str(vMax)) + self.multiBandMinValues[i].setText(niceNumberString(vMin)) + self.multiBandMaxValues[i].setText(niceNumberString(vMax)) idx = self.ceAlgs.values().index(ceRed.contrastEnhancementAlgorithm()) ui.comboBoxContrastEnhancement.setCurrentIndex(idx) @@ -582,8 +577,8 @@ class DatumView(QObject): self.minWidth = 50 self.renderProgress = dict() - assert isinstance(mapViewCollection.spatTempVis, SpatialTemporalVisualization) - self.STV = mapViewCollection.spatTempVis + assert isinstance(mapViewCollection.STV, SpatialTemporalVisualization) + self.STV = mapViewCollection.STV self.TSD = timeSeriesDatum self.scrollArea = timeSeriesDateViewCollection.scrollArea @@ -616,12 +611,20 @@ class DatumView(QObject): if not self.ui.isVisible(): return QSize(0,0) - l = len(self.mapCanvases) - if l == 0: - self.ui.sizeHint() - else: + x = y = 0 + for i in range(self.ui.layout().count()): + item = self.ui.layout().itemAt(i) + w = item.widget() + if isinstance(w, QWidget): + size = item.sizeHint() + x = max([x, size.width()]) + y += size.height() + + size = self.ui.sizeHint() + if len(self.mapCanvases) > 0: baseSize = self.mapCanvases.values()[0].size() - return QSize(baseSize.width(), l*baseSize.height()) + size = QSize(baseSize.width(), size.height()) + return size def removeMapView(self, mapView): @@ -635,7 +638,6 @@ class DatumView(QObject): if self.ui.isVisible(): for c in self.mapCanvases.values(): if c.isVisible(): - #c.refreshAllLayers() c.refresh() def insertMapView(self, mapView): @@ -652,14 +654,14 @@ class DatumView(QObject): # register MapCanvas on STV level self.STV.registerMapCanvas(mapCanvas) mapCanvas.blockSignals(False) - #mapCanvas.refreshAllLayers() - #mapCanvas.refresh() + def registerMapCanvas(self, mapView, mapCanvas): from timeseriesviewer.mapcanvas import MapCanvas assert isinstance(mapCanvas, MapCanvas) self.mapCanvases[mapView] = mapCanvas - mapCanvas.setLayers(QgsRasterLayer(self.TSD.pathImg)) + mapCanvas.addLazyRasterSources([self.TSD.pathImg]) + #mapCanvas.setLayers([QgsRasterLayer(self.TSD.pathImg)]) self.L.insertWidget(self.wOffset + len(self.mapCanvases), mapCanvas) self.ui.update() @@ -673,7 +675,12 @@ class DatumView(QObject): if key == 'hide_date': self.TSD.setVisibility(False) - + if key == 'copy_sensor': + QApplication.clipboard().setText(self.TSD.sensor.name()) + if key == 'copy_date': + QApplication.clipboard().setText(str(self.TSD.date)) + if key == 'copy_path': + QApplication.clipboard().setText(str(self.TSD.pathImg)) def __lt__(self, other): assert isinstance(other, DatumView) @@ -711,8 +718,14 @@ class SpatialTemporalVisualization(QObject): from timeseriesviewer.ui.widgets import TsvScrollArea self.scrollArea = self.ui.scrollAreaSubsets assert isinstance(self.scrollArea, TsvScrollArea) - #self.scrollArea.sigResized.connect(self.refresh) - #self.scrollArea.horizontalScrollBar().valueChanged.connect(lambda:QTimer.singleShot(2000,self.refresh)) + + + self.mRefreshTimer = QTimer(self) + self.mRefreshTimer.setInterval(1000) + self.mRefreshTimer.timeout.connect(self.refresh) + + self.scrollArea.sigResized.connect(self.mRefreshTimer.start) + self.scrollArea.horizontalScrollBar().valueChanged.connect(self.mRefreshTimer.start) self.TSV = timeSeriesViewer @@ -741,6 +754,7 @@ class SpatialTemporalVisualization(QObject): self.setSpatialExtent(self.TS.getMaxSpatialExtent()) #self.setSubsetSize(QSize(100,50)) + def registerMapCanvas(self, mapCanvas): from timeseriesviewer.mapcanvas import MapCanvas assert isinstance(mapCanvas, MapCanvas) @@ -796,9 +810,10 @@ class SpatialTemporalVisualization(QObject): def refresh(self): + #print('STV REFRESH') for tsdView in self.DVC: tsdView.refresh() - + self.mRefreshTimer.stop() def adjustScrollArea(self): #adjust scroll area widget to fit all visible widgets @@ -846,6 +861,7 @@ class SpatialTemporalVisualization(QObject): mapCanvas.setCenter(center) mapCanvas.blockSignals(oldState) self.mBlockCanvasSignals = False + self.sigSpatialExtentChanged.emit(self.mSpatialExtent) @@ -873,6 +889,7 @@ class SpatialTemporalVisualization(QObject): self.mBlockCanvasSignals = False #for mapCanvas in self.mMapCanvases: # mapCanvas.refresh() + self.mRefreshTimer.start() self.sigSpatialExtentChanged.emit(extent) def setBackgroundColor(self, color): @@ -894,7 +911,7 @@ class SpatialTemporalVisualization(QObject): if saveTransform(self.mSpatialExtent, self.mCRS, crs): self.mCRS = crs for mapCanvas in self.mapCanvasIterator(): - print(('STV set CRS {} {}', str(mapCanvas), self.mCRS.description())) + #print(('STV set CRS {} {}', str(mapCanvas), self.mCRS.description())) mapCanvas.setCrs(crs) else: pass @@ -917,6 +934,8 @@ class SpatialTemporalVisualization(QObject): self.scrollArea.ensureWidgetVisible(tsdv.ui) + + def setMapViewVisibility(self, bandView, isVisible): assert isinstance(bandView, MapView) assert isinstance(isVisible, bool) @@ -1077,10 +1096,10 @@ class MapViewCollection(QObject): def __init__(self, spatialTemporalVisualization): assert isinstance(spatialTemporalVisualization, SpatialTemporalVisualization) super(MapViewCollection, self).__init__() - self.spatTempVis = spatialTemporalVisualization - self.spatTempVis.dockMapViews.actionApplyStyles.triggered.connect(self.applyStyles) - self.spatTempVis.TS.sigSensorAdded.connect(self.addSensor) - self.spatTempVis.TS.sigSensorRemoved.connect(self.removeSensor) + self.STV = spatialTemporalVisualization + self.STV.dockMapViews.actionApplyStyles.triggered.connect(self.applyStyles) + self.STV.TS.sigSensorAdded.connect(self.addSensor) + self.STV.TS.sigSensorRemoved.connect(self.removeSensor) self.ui = spatialTemporalVisualization.dockMapViews self.btnList = spatialTemporalVisualization.dockMapViews.BVButtonList self.scrollArea = spatialTemporalVisualization.dockMapViews.scrollAreaMapViews @@ -1137,7 +1156,7 @@ class MapViewCollection(QObject): mapView.sigRemoveMapView.connect(self.removeMapView) mapView.sigShowProfiles.connect(self.sigShowProfiles.emit) - for sensor in self.spatTempVis.TS.Sensors: + for sensor in self.STV.TS.Sensors: mapView.addSensor(sensor) self.mapViewButtons[mapView] = btn