Newer
Older
# -*- coding: utf-8 -*-
"""
/***************************************************************************
HUB TimeSeriesViewer
-------------------
begin : 2015-08-20
git sha : $Format:%H$
copyright : (C) 2017 by HU-Berlin
email : benjamin.jakimow@geo.hu-berlin.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. *
* *
***************************************************************************/
"""
# noinspection PyPep8Naming

benjamin.jakimow@geo.hu-berlin.de
committed
import os, sys, re, fnmatch, collections, copy, traceback, six, bisect
import logging
logger = logging.getLogger(__name__)
from qgis.core import *
from PyQt5.QtXml import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

benjamin.jakimow@geo.hu-berlin.de
committed
import numpy as np
from timeseriesviewer.utils import *
from timeseriesviewer.timeseries import SensorInstrument, TimeSeriesDatum, TimeSeries
from timeseriesviewer.ui.docks import TsvDockWidgetBase, loadUI
from timeseriesviewer.main import TsvMimeDataUtils

benjamin.jakimow@geo.hu-berlin.de
committed
from timeseriesviewer.ui.mapviewscrollarea import MapViewScrollArea
from timeseriesviewer.mapcanvas import MapCanvas
class MapViewUI(QFrame, loadUI('mapviewdefinition.ui')):
def __init__(self, parent=None):
super(MapViewUI, self).__init__(parent)
self.setupUi(self)
self.mSensors = collections.OrderedDict()
m = QMenu(self.btnToggleCrosshair)
m.addAction(self.actionSetCrosshairStyle)
#a = m.addAction('Set Crosshair Style')
self.btnToggleCrosshair.setMenu(m)
#connect the QActions with the QgsCollapsibleGroupBoxes
self.connectActionWithGroupBox(self.actionToggleVectorVisibility, self.gbVectorRendering)
self.connectActionWithGroupBox(self.actionToggleRasterVisibility, self.gbRasterRendering)
#self.gbVectorRendering.toggled.connect(self.actionToggleVectorVisibility.toggle)
#self.gbRasterRendering.toggled.connect(self.actionToggleRasterVisibility.toggle)
#self.actionToggleVectorVisibility.toggled.connect(self.gbVectorRendering.setChecked)
#self.actionToggleRasterVisibility.toggled.connect(self.gbRasterRendering.setChecked)
self.btnToggleCrosshair.setDefaultAction(self.actionToggleCrosshairVisibility)
self.btnToggleMapViewVisibility.setDefaultAction(self.actionToggleMapViewHidden)

benjamin.jakimow@geo.hu-berlin.de
committed
self.btnSetVectorStyle.setDefaultAction(self.actionSetVectorStyle)
def connectActionWithGroupBox(self,action, groupBox):
assert isinstance(action, QAction)
assert isinstance(groupBox, QGroupBox)
def addSensor(self, sensor):
assert isinstance(sensor, SensorInstrument)
w = MapViewSensorSettings(sensor)

benjamin.jakimow@geo.hu-berlin.de
committed
#sizePolicy = QSizePolicy(QSize)
#w.ui.
l = self.renderSettingsLayout

benjamin.jakimow@geo.hu-berlin.de
committed
lastWidgetIndex = l.count()-1
l.insertWidget(lastWidgetIndex, w.ui)
self.mSensors[sensor] = w
#self.resize(self.sizeHint())
return w
def removeSensor(self, sensor):
assert isinstance(sensor, SensorInstrument)
sensorSettings = self.mSensors.pop(sensor)
assert isinstance(sensorSettings, MapViewSensorSettings)

benjamin.jakimow@geo.hu-berlin.de
committed
l = self.renderSettingsLayout
l.removeWidget(sensorSettings.ui)
sensorSettings.ui.close()
#self.resize(self.sizeHint())

benjamin.jakimow@geo.hu-berlin.de
committed
class MapView(QObject):
sigRemoveMapView = pyqtSignal(object)
sigMapViewVisibility = pyqtSignal(bool)
#sigVectorVisibility = pyqtSignal(bool)
#sigRasterVisibility = pyqtSignal(bool)

benjamin.jakimow@geo.hu-berlin.de
committed

benjamin.jakimow@geo.hu-berlin.de
committed
sigSensorRendererChanged = pyqtSignal(SensorInstrument, QgsRasterRenderer)

benjamin.jakimow@geo.hu-berlin.de
committed
sigCrosshairStyleChanged = pyqtSignal(CrosshairStyle)
sigShowCrosshair = pyqtSignal(bool)
sigVectorLayerChanged = pyqtSignal()
sigShowProfiles = pyqtSignal(SpatialPoint, MapCanvas, str)

benjamin.jakimow@geo.hu-berlin.de
committed

benjamin.jakimow@geo.hu-berlin.de
committed
def __init__(self, mapViewCollectionDock, name='Map View', recommended_bands=None, parent=None):

benjamin.jakimow@geo.hu-berlin.de
committed
super(MapView, self).__init__()

benjamin.jakimow@geo.hu-berlin.de
committed
assert isinstance(mapViewCollectionDock, MapViewCollectionDock)

benjamin.jakimow@geo.hu-berlin.de
committed
self.ui = MapViewUI(mapViewCollectionDock.stackedWidget)
self.ui.show()
self.ui.cbQgsVectorLayer.setFilters(QgsMapLayerProxyModel.VectorLayer)
self.ui.cbQgsVectorLayer.layerChanged.connect(self.setVectorLayer)
self.ui.tbName.textChanged.connect(self.sigTitleChanged)
from timeseriesviewer.crosshair import getCrosshairStyle
self.ui.actionSetCrosshairStyle.triggered.connect(
lambda : self.setCrosshairStyle(getCrosshairStyle(
parent=self.ui,
crosshairStyle=self.mCrosshairStyle))
)

benjamin.jakimow@geo.hu-berlin.de
committed
self.mapViewCollection = mapViewCollectionDock
self.mSensorViews = collections.OrderedDict()

benjamin.jakimow@geo.hu-berlin.de
committed
self.mVectorLayer = None

benjamin.jakimow@geo.hu-berlin.de
committed
self.setVectorLayer(None)
self.mCrosshairStyle = CrosshairStyle()
self.mShowCrosshair = True
self.ui.actionToggleVectorVisibility.toggled.connect(self.setVectorVisibility)
self.ui.actionToggleRasterVisibility.toggled.connect(self.setRasterVisibility)
self.ui.actionToggleCrosshairVisibility.toggled.connect(self.setShowCrosshair)
self.ui.actionToggleMapViewHidden.toggled.connect(lambda b: self.setIsVisible(not b))
self.ui.actionToggleVectorVisibility.setChecked(False)
self.ui.actionToggleRasterVisibility.setChecked(True)

benjamin.jakimow@geo.hu-berlin.de
committed
self.ui.actionSetVectorStyle.triggered.connect(self.setVectorLayerStyle)
for sensor in self.mapViewCollection.TS.Sensors:
self.addSensor(sensor)
self.setTitle(name)
#forward actions with reference to this band view
def dummy(self, *args):
print(args)
def setIsVisible(self, b):
assert isinstance(b, bool)
for mapCanvas in self.mapCanvases():
assert isinstance(mapCanvas, MapCanvas)
mapCanvas.setVisible(b)
if self.ui.actionToggleMapViewHidden.isChecked() == b:
self.ui.actionToggleMapViewHidden.setChecked(not b)
if changed:
self.sigMapViewVisibility.emit(b)
def isVisible(self):
return not self.ui.actionToggleMapViewHidden.isChecked()
def mapCanvases(self):
m = []
for sensor, sensorView in self.mSensorViews.items():
m.extend(sensorView.mapCanvases())
return m

benjamin.jakimow@geo.hu-berlin.de
committed
def setVectorLayerStyle(self, *args):
if isinstance(self.mVectorLayer, QgsVectorLayer):
d = QgsRendererPropertiesDialog(self.mVectorLayer, QgsStyle.defaultStyle())
d.exec_()
def vectorLayerRenderer(self):
if isinstance(self.mVectorLayer, QgsVectorLayer):

benjamin.jakimow@geo.hu-berlin.de
committed
return self.mVectorLayer.renderer()
Loading
Loading full blame...