diff --git a/CHANGELOG b/CHANGELOG index fd3d1614731e89b37f04622ece6ac5de4bf9fff6..f51250bfdfad1c393d3ed8bbb5f89aa80606fdac 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -2,7 +2,9 @@ Changelog ============== 2019-07-04 (version 1.5): - * + * fixed missing updates of time series tree view when adding / removing source images + * map canvas context menu lists layers with spatial extent intersecting the cursor position only + * fixes feature selection error 2019-07-02 (version 1.4): * adding vector layers with sublayers will add all sublayers diff --git a/eotimeseriesviewer/labeling.py b/eotimeseriesviewer/labeling.py index af046d372ca5e40084129dabc5fed1863662513f..6ee943f6b6f80680a78ea9f30c8d2781b73bb077 100644 --- a/eotimeseriesviewer/labeling.py +++ b/eotimeseriesviewer/labeling.py @@ -12,7 +12,7 @@ from eotimeseriesviewer.utils import loadUI, qgisInstance from eotimeseriesviewer.externals.qps.classification.classificationscheme \ import ClassificationSchemeWidget, ClassificationScheme, ClassInfo, ClassificationSchemeComboBox -from eotimeseriesviewer.timeseries import TimeSeriesDate +from eotimeseriesviewer.timeseries import TimeSeriesDate, TimeSeriesSource #the QgsProject(s) and QgsMapLayerStore(s) to search for QgsVectorLayers MAP_LAYER_STORES = [QgsProject.instance()] @@ -28,6 +28,7 @@ class LabelShortcutType(enum.Enum): Year = 'Year' DecimalYear = 'Decimal Year' Sensor = 'Sensor Name' + SourceImage = 'Source Image' #Classification = 'Classification' def shortcuts(field:QgsField): @@ -38,7 +39,7 @@ def shortcuts(field:QgsField): """ assert isinstance(field, QgsField) - shortCutsString = [LabelShortcutType.Sensor, LabelShortcutType.Date] + shortCutsString = [LabelShortcutType.Sensor, LabelShortcutType.Date, LabelShortcutType.SourceImage] shortCutsInt = [LabelShortcutType.Year, LabelShortcutType.DOY] shortCutsFloat = [LabelShortcutType.Year, LabelShortcutType.DOY, LabelShortcutType.DecimalYear] @@ -136,14 +137,14 @@ def quickLabelLayers()->list: break return layers -def setQuickTSDLabelsForRegisteredLayers(tsd:TimeSeriesDate): +def setQuickTSDLabelsForRegisteredLayers(tsd:TimeSeriesDate, tss:TimeSeriesSource): """ :param tsd: TimeSeriesDate :param classInfos: """ for layer in quickLabelLayers(): assert isinstance(layer, QgsVectorLayer) - setQuickTSDLabels(layer, tsd) + setQuickTSDLabels(layer, tsd, tss) def setQuickClassInfo(vectorLayer:QgsVectorLayer, field, classInfo:ClassInfo): """ @@ -177,10 +178,10 @@ def setQuickClassInfo(vectorLayer:QgsVectorLayer, field, classInfo:ClassInfo): vectorLayer.changeAttributeValue(feature.id(), idx, value, oldValue) vectorLayer.endEditCommand() -def setQuickTSDLabels(vectorLayer:QgsVectorLayer, tsd:TimeSeriesDate): +def setQuickTSDLabels(vectorLayer:QgsVectorLayer, tsd:TimeSeriesDate, tss:TimeSeriesSource): """ Labels selected features with information related to TimeSeriesDate tsd, according to - the settings specified in this model. + the settings specified in this model. Note: this will not the any ClassInfo or the source image values :param tsd: TimeSeriesDate :param classInfos: """ @@ -209,6 +210,8 @@ def setQuickTSDLabels(vectorLayer:QgsVectorLayer, tsd:TimeSeriesDate): value = str(tsd.date()) elif labelType == LabelShortcutType.DecimalYear: value = tsd.decimalYear() + elif labelType == LabelShortcutType.SourceImage and isinstance(tss, TimeSeriesSource): + value = tss.uri() #elif labelType == LabelShortcutType.Classification: # pass diff --git a/eotimeseriesviewer/main.py b/eotimeseriesviewer/main.py index 744337285d4c9e6ae5852f3d6a0f462125278618..d8b5486160755cbe00438cbe1466f4a8a76e634c 100644 --- a/eotimeseriesviewer/main.py +++ b/eotimeseriesviewer/main.py @@ -923,7 +923,7 @@ class TimeSeriesViewer(QgisInterface, QObject): self.clearTimeSeries() progressDialog = QProgressDialog(self.ui) progressDialog.setWindowTitle('Image Loading') - progressDialog.setMinimumDuration(2000) + progressDialog.setMinimumDuration(1000) self.mTimeSeries.loadFromFile(path, n_max=n_max, progressDialog=progressDialog) @@ -1168,9 +1168,10 @@ class TimeSeriesViewer(QgisInterface, QObject): s.setValue('dir_datasources', dn) if files: - progressDialog = QProgressDialog('Images Loading', 'Cancel', 0, len(files), parent=self.ui) + progressDialog = QProgressDialog('Image Loading', 'Cancel', 0, len(files), parent=self.ui) progressDialog.setLabelText('Start loading {} images....'.format(len(files))) - progressDialog.setMinimumDuration(2000) + progressDialog.setWindowTitle('Image Loading') + progressDialog.setMinimumDuration(1000) progressDialog.setValue(0) if loadAsync: diff --git a/eotimeseriesviewer/mapcanvas.py b/eotimeseriesviewer/mapcanvas.py index aba988875dcfea670d7fed67f4ecc766c29d4960..751beec2f4de36cba9b8e86c1168ed87eec9f775 100644 --- a/eotimeseriesviewer/mapcanvas.py +++ b/eotimeseriesviewer/mapcanvas.py @@ -599,11 +599,11 @@ class MapCanvas(QgsMapCanvas): from .main import TimeSeriesViewer eotsv = TimeSeriesViewer.instance() - viewPortRasterLayers = [l for l in self.layers() if isinstance(l, QgsRasterLayer) - and SpatialExtent.fromLayer(l).toCrs(self.crs()).contains(pointGeo)] - viewPortSensorLayers = [l for l in viewPortRasterLayers if isinstance(l, SensorProxyLayer)] + viewPortMapLayers = [l for l in self.layers() if isinstance(l, QgsMapLayer)] - viewPortVectorLayers = [l for l in self.layers() if isinstance(l, QgsVectorLayer)] + viewPortRasterLayers = [l for l in viewPortMapLayers if isinstance(l, QgsRasterLayer) and SpatialExtent.fromLayer(l).toCrs(self.crs()).contains(pointGeo)] + viewPortSensorLayers = [l for l in viewPortRasterLayers if isinstance(l, SensorProxyLayer)] + viewPortVectorLayers = [l for l in viewPortMapLayers if isinstance(l, QgsVectorLayer)] refSensorLayer = None refRasterLayer = None @@ -616,6 +616,12 @@ class MapCanvas(QgsMapCanvas): menu = QMenu() if isinstance(self.tsd(), TimeSeriesDate): + tss = None + sourceUris = self.tsd().sourceUris() + for sl in viewPortSensorLayers: + if sl.source() in sourceUris: + tss = self.tsd()[sourceUris.index(sl.source())] + break lyrWithSelectedFeatures = [l for l in quickLabelLayers() if l.isEditable() and l.selectedFeatureCount() > 0] @@ -627,7 +633,7 @@ class MapCanvas(QgsMapCanvas): a = m.addAction('Set Date/Sensor attributes') a.setToolTip('Writes the date ate and sensor quick labels of selected features in {}.'.format(layerNames)) - a.triggered.connect(lambda *args, tsd = self.tsd(): setQuickTSDLabelsForRegisteredLayers(tsd)) + a.triggered.connect(lambda *args, tsd = self.tsd(), tss=tss: setQuickTSDLabelsForRegisteredLayers(tsd, tss)) from .labeling import EDITOR_WIDGET_REGISTRY_KEY as QUICK_LABEL_KEY from .labeling import CONFKEY_CLASSIFICATIONSCHEME, layerClassSchemes, setQuickClassInfo diff --git a/tests/test_labeling.py b/tests/test_labeling.py index f1553bdbf20c000f989ff16bc5e7f45fc7fd9bf2..838cd475e8e8c32bf0f5011f16bc8f90da3d5625 100644 --- a/tests/test_labeling.py +++ b/tests/test_labeling.py @@ -348,7 +348,7 @@ class testclassLabelingTest(unittest.TestCase): - setQuickTSDLabels(lyr, tsd) + setQuickTSDLabels(lyr, tsd, None) fields = lyr.fields() setQuickClassInfo(lyr, fields.lookupField('class1l'), classInfo1) setQuickClassInfo(lyr, fields.lookupField('class1n'), classInfo1) diff --git a/tests/test_timeseries.py b/tests/test_timeseries.py index 68b96af6b82a0a6b8e3b89cfe9a394eef18e281f..130afb11c2c6d74480b56cdc04d7f1668048e8ba 100644 --- a/tests/test_timeseries.py +++ b/tests/test_timeseries.py @@ -279,9 +279,6 @@ class TestInit(unittest.TestCase): while QgsApplication.taskManager().countActiveTasks() > 0 or len(TS.mTasks) > 0: QCoreApplication.processEvents() - #self.assertTrue(len(TS) > 0) - #self.assertTrue(len(TS) == len(files)) - if SHOW_GUI: QAPP.exec_()