diff --git a/timeseriesviewer/mapvisualization.py b/timeseriesviewer/mapvisualization.py index f46ba9ac76648bb409fa148949eda27098e7e5dc..61cc67ab8a25ff81bb2356e9676f139b5d112887 100644 --- a/timeseriesviewer/mapvisualization.py +++ b/timeseriesviewer/mapvisualization.py @@ -1083,6 +1083,10 @@ class MapView(QObject): def setVectorLayerStyle(self, *args): if isinstance(self.mVectorLayer, QgsVectorLayer): d = QgsRendererPropertiesDialog(self.mVectorLayer, QgsStyle.defaultStyle()) + + mc = self.mapCanvases() + if len(mc) > 0: + d.setMapCanvas(mc[0]) d.exec_() s = "" @@ -1737,6 +1741,8 @@ class DatumView(QObject): mapCanvas.setTSD(self.TSD) self.registerMapCanvas(mapView, mapCanvas) + + # register MapCanvas on MV level mapView.registerMapCanvas(self.mSensor, mapCanvas) # register MapCanvas on STV level diff --git a/timeseriesviewer/plotstyling.py b/timeseriesviewer/plotstyling.py index 8ae9e3190ae9e8cdef6ee333b6d1fcfd2c240296..740002242a1da5ca02d7f8922ec5a5bd6e6f1277 100644 --- a/timeseriesviewer/plotstyling.py +++ b/timeseriesviewer/plotstyling.py @@ -46,6 +46,13 @@ MARKERSYMBOLS = [Option('o', u'Circle'), Option(None, u'No Symbol') ] +MARKERSYMBOLS2QGIS_SYMBOLS = dict() +for o in MARKERSYMBOLS: + name = o.name() + name = name.replace(' ','_') + name = name.lower() + MARKERSYMBOLS2QGIS_SYMBOLS[o.value()] = name + PENSTYLES = [Option(Qt.SolidLine, '___'), Option(Qt.DashLine, '_ _ _'), Option(Qt.DotLine, '. . .'), diff --git a/timeseriesviewer/spectrallibraries.py b/timeseriesviewer/spectrallibraries.py index c43807b26bdcfa471ae6c727a7080fb82bbe5e20..3a3b0203c88984c42333a1c788f0033e06c9de7f 100644 --- a/timeseriesviewer/spectrallibraries.py +++ b/timeseriesviewer/spectrallibraries.py @@ -24,6 +24,7 @@ import os, re, tempfile, pickle, copy, shutil, locale from collections import OrderedDict from qgis.core import * from qgis.gui import * +from qgis.utils import qgsfunction from qgis.PyQt.QtCore import * from qgis.PyQt.QtGui import * from qgis.PyQt.QtWidgets import * @@ -39,7 +40,7 @@ from osgeo import gdal, gdal_array from timeseriesviewer.utils import * from timeseriesviewer.virtualrasters import * from timeseriesviewer.models import * -from timeseriesviewer.plotstyling import PlotStyle, PlotStyleDialog +from timeseriesviewer.plotstyling import PlotStyle, PlotStyleDialog, MARKERSYMBOLS2QGIS_SYMBOLS import timeseriesviewer.mimedata as mimedata FILTERS = 'ENVI Spectral Library (*.esl *.sli);;CSV Table (*.csv)' @@ -76,6 +77,50 @@ def gdalDataset(pathOrDataset, eAccess=gdal.GA_ReadOnly): return pathOrDataset + +@qgsfunction(0, "Spectral Libraries") +def plotStyleSymbolFillColor(values, feature, parent): + if isinstance(feature, QgsFeature): + i = feature.fieldNameIndex(HIDDEN_ATTRIBUTE_PREFIX+'style') + if i >= 0: + style = pickle.loads(feature.attribute(i)) + if isinstance(style, PlotStyle): + r,g,b,a = style.markerBrush.color().getRgb() + return '{},{},{},{}'.format(r,g,b, a) + + return None + +@qgsfunction(0, "Spectral Libraries") +def plotStyleSymbol(values, feature, parent): + if isinstance(feature, QgsFeature): + i = feature.fieldNameIndex(HIDDEN_ATTRIBUTE_PREFIX+'style') + if i >= 0: + style = pickle.loads(feature.attribute(i)) + if isinstance(style, PlotStyle): + symbol = style.markerSymbol + + qgisSymbolString = MARKERSYMBOLS2QGIS_SYMBOLS.get(symbol) + if isinstance(qgisSymbolString, str): + return qgisSymbolString + + return None + +@qgsfunction(0, "Spectral Libraries") +def plotStyleSymbolSize(values, feature, parent): + if isinstance(feature, QgsFeature): + i = feature.fieldNameIndex(HIDDEN_ATTRIBUTE_PREFIX+'style') + if i >= 0: + style = pickle.loads(feature.attribute(i)) + if isinstance(style, PlotStyle): + return style.markerSize + return None + + +QgsExpression.registerFunction(plotStyleSymbolFillColor) +QgsExpression.registerFunction(plotStyleSymbol) +QgsExpression.registerFunction(plotStyleSymbolSize) + + #Lookup table for ENVI IDL DataTypes to GDAL Data Types LUT_IDL2GDAL = {1:gdal.GDT_Byte, 12:gdal.GDT_UInt16, @@ -350,10 +395,15 @@ class SpectralLibraryTableView(QgsAttributeTableView): assert isinstance(menu, QMenu) assert isinstance(index, QModelIndex) - featureIDs = self.mSelectionManager.selectedFeatureIds() - featureIndices = self.fidsToIndices(featureIDs) - if not isinstance(featureIDs, list): - s = "" + featureIDs = self.spectralLibrary().selectedFeatureIds() + + if len(featureIDs) == 0 and index.isValid(): + if isinstance(self.model(), QgsAttributeTableFilterModel): + index = self.model().mapToSource(index) + if index.isValid(): + featureIDs.append(self.model().sourceModel().feature(index).id()) + elif isinstance(self.model(), QgsAttributeTableFilterModel): + featureIDs.append(self.model().feature(index).id()) @@ -434,7 +484,8 @@ class SpectralLibraryTableView(QgsAttributeTableView): refProfile = profiles[0] styleDefault = refProfile.style() refStyle = PlotStyleDialog.getPlotStyle(plotStyle=styleDefault) - refProfile.setStyle(refStyle) + if isinstance(refStyle, PlotStyle): + refProfile.setStyle(refStyle) iStyle = speclib.fields().indexFromName(HIDDEN_ATTRIBUTE_PREFIX+'style') assert iStyle >= 0