def __init__(self, parent=None): """ QGISCellWidget(parent: QWidget) -> QGISCellWidget Initialize the widget with its central layout """ QCellWidget.__init__(self, parent) centralLayout = QtGui.QVBoxLayout() self.setLayout(centralLayout) centralLayout.setMargin(0) centralLayout.setSpacing(0) # self.setAnimationEnabled(True) self.Frame = QtGui.QFrame() self.ui = Ui_Frame() self.ui.setupUi(self.Frame) self.toolBarType = SAHMSpatialViewerToolBar self.controlBarType = SAHMSpatialViewerToolBar self.layout().addWidget(self.Frame)
class SAHMSpatialOutputViewerCellWidget(QCellWidget): """ """ def __init__(self, parent=None): """ QGISCellWidget(parent: QWidget) -> QGISCellWidget Initialize the widget with its central layout """ QCellWidget.__init__(self, parent) centralLayout = QtGui.QVBoxLayout() self.setLayout(centralLayout) centralLayout.setMargin(0) centralLayout.setSpacing(0) # self.setAnimationEnabled(True) self.Frame = QtGui.QFrame() self.ui = Ui_Frame() self.ui.setupUi(self.Frame) self.toolBarType = SAHMSpatialViewerToolBar self.controlBarType = SAHMSpatialViewerToolBar self.layout().addWidget(self.Frame) def updateContents(self, inputs): """ updateContents(inputs: dictionary) -> None Update the widget contents based on the input data """ self.canvas = qgis.gui.QgsMapCanvas() self.canvas.show() self.ui.legend_label.setText(QtCore.QString(inputs["model_tag"])) self.toolPan = qgis.gui.QgsMapToolPan(self.canvas) self.canvas.setMapTool(self.toolPan) self.canvas.setWheelAction(2) self.canvas.setCanvasColor(QtCore.Qt.white) self.canvas.enableAntiAliasing(True) self.all_layers = {} self.add_raster(inputs["prob_map"], "prob_map") self.add_raster(inputs["bin_map"], "bin_map") self.add_raster(inputs["res_map"], "res_map") self.add_raster(inputs["mes_map"], "mes_map") self.add_raster(inputs["mod_map"], "mod_map") self.add_vector(inputs['pres_points'], "pres_points", '255,0,0') self.add_vector(inputs['abs_points'], "abs_points", '0,255,0') self.add_vector(inputs['backs_points'], "backs_points", '0,0,0') self.canvas.setExtent(self.all_layers["prob_map"].layer().extent()) self.canvas.setLayerSet([ self.all_layers["pres_points"], self.all_layers["abs_points"], self.all_layers["prob_map"] ]) self.ui.map_frame.layout().addWidget(self.canvas) legend = self.create_legend_ramp("prob_map", None, (0, 1), 6) self.ui.legend.layout().addWidget(legend) # Update the new figure canvas self.update() def dumpToFile(self, filename): pass def saveToPDF(self, filename): pass def add_raster(self, path, tag): if os.path.exists(path): fileInfo = QtCore.QFileInfo(path) baseName = fileInfo.baseName() raster = qgis.core.QgsRasterLayer(path, baseName) if tag == "res_map": min_max = getrasterminmax(path) else: min_max = None self.set_color_ramp(tag, raster) qgis.core.QgsMapLayerRegistry.instance().addMapLayer(raster) self.all_layers[tag] = qgis.gui.QgsMapCanvasLayer(raster) else: print "The file " + path + " could not be found on the file system." print " tag will not be enabled" def set_color_ramp(self, layer_type, raster, min_max=None): QgsColorRampShader = qgis.core.QgsColorRampShader if layer_type == "mod_map": #raster.setDrawingStyle(qgis.core.QgsRasterLayer.PalettedColor) raster.setDrawingStyle( qgis.core.QgsRasterLayer.SingleBandPseudoColor) raster.setColorShadingAlgorithm( qgis.core.QgsRasterLayer.PseudoColorShader) #raster.setColorShadingAlgorithm(qgis.core.QgsRasterLayer.ColorRampShader) # raster.setDrawingStyle(qgis.core.QgsRasterLayer.SingleBandGray) return None else: raster.setDrawingStyle( qgis.core.QgsRasterLayer.SingleBandPseudoColor) csv_file = os.path.abspath( os.path.join(os.path.dirname(__file__), "ColorBreaks.csv")) csvfile = open(csv_file, "r") reader = csv.reader(csvfile) header = reader.next() #skip the header color_ramp_items = [] for row in reader: if row[0] == layer_type: r, g, b = [int(val) for val in row[2:5]] cur_color = QtGui.QColor(r, g, b) cur_val = float(row[1]) color_item = QgsColorRampShader.ColorRampItem( cur_val, cur_color) color_ramp_items.append(color_item) raster.setColorShadingAlgorithm( qgis.core.QgsRasterLayer.ColorRampShader) fcn = raster.rasterShader().rasterShaderFunction() fcn.setColorRampType(QgsColorRampShader.INTERPOLATED) fcn.setColorRampItemList(color_ramp_items) if hasattr(raster, "setCacheImage"): raster.setCacheImage(None) raster.triggerRepaint() qgis.core.QgsMapLayerRegistry.instance().addMapLayer(raster) csvfile.close() return None def create_legend_ramp(self, layer_type, raster, min_max, num_tags): legend = QtGui.QFrame() legend.setObjectName(QtCore.QString.fromUtf8("legend")) mainlayout = QtGui.QVBoxLayout(legend) mainlayout.setSpacing(0) mainlayout.setMargin(0) frame_colorbar = QtGui.QFrame(legend) frame_colorbar.setObjectName(QtCore.QString.fromUtf8("frame_colorbar")) layout_colorbar = QtGui.QHBoxLayout(frame_colorbar) layout_colorbar.setSpacing(0) layout_colorbar.setContentsMargins(-1, 2, -1, 0) frame_ticks = QtGui.QFrame(legend) frame_ticks.setFrameShape(QtGui.QFrame.StyledPanel) frame_ticks.setFrameShadow(QtGui.QFrame.Raised) frame_ticks.setObjectName(QtCore.QString.fromUtf8("frame_ticks")) layout_ticks = QtGui.QHBoxLayout(frame_ticks) layout_ticks.setSpacing(0) layout_ticks.setContentsMargins(-1, 0, -1, 0) frame_labels = QtGui.QFrame(legend) frame_labels.setObjectName(QtCore.QString.fromUtf8("frame_labels")) layout_labels = QtGui.QHBoxLayout(frame_labels) layout_labels.setSpacing(0) layout_labels.setContentsMargins(4, 0, 4, 0) csv_file = os.path.abspath( os.path.join(os.path.dirname(__file__), "ColorBreaks.csv")) csvfile = open(csv_file, "r") reader = csv.reader(csvfile) header = reader.next() #skip the header color_ramp_items = [] prev_color = None for row in reader: if row[0] == layer_type: cur_color = ", ".join(row[2:5]) if prev_color: color_label = QtGui.QLabel(frame_colorbar) sizePolicy = QtGui.QSizePolicy( QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( color_label.sizePolicy().hasHeightForWidth()) color_label.setSizePolicy(sizePolicy) color_label.setMinimumSize(QtCore.QSize(0, 4)) stylesheet = "background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(" stylesheet += prev_color stylesheet += ", 255), stop:1 rgba(" stylesheet += cur_color stylesheet += ", 255));" color_label.setStyleSheet( QtCore.QString.fromUtf8(stylesheet)) color_label.setText(QtCore.QString.fromUtf8("")) layout_colorbar.addWidget(color_label) prev_color = cur_color min = min_max[0] max = min_max[1] step = float(max - min) / num_tags curStep = min while curStep <= max: line = QtGui.QFrame(frame_ticks) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(line.sizePolicy().hasHeightForWidth()) line.setSizePolicy(sizePolicy) line.setMinimumSize(QtCore.QSize(0, 4)) line.setSizeIncrement(QtCore.QSize(0, 0)) line.setFrameShadow(QtGui.QFrame.Plain) line.setFrameShape(QtGui.QFrame.VLine) line.setFrameShadow(QtGui.QFrame.Sunken) line.setObjectName(QtCore.QString.fromUtf8("line")) layout_ticks.addWidget(line) spacerItem = QtGui.QSpacerItem(133, 2, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) layout_ticks.addItem(spacerItem) lbl = QtGui.QLabel(frame_labels) lbl.setMinimumSize(QtCore.QSize(0, 10)) txt = "%.1f" % curStep lbl.setText(QtCore.QString.fromUtf8(txt)) lbl.setAlignment(QtCore.Qt.AlignCenter) #lbl.setObjectName(QtCore.QString.fromUtf8("lbl")) layout_labels.addWidget(lbl) spacerItem2 = QtGui.QSpacerItem(5, 5, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) layout_labels.addItem(spacerItem2) curStep += step layout_ticks.removeItem(spacerItem) layout_labels.removeItem(spacerItem2) mainlayout.addWidget(frame_colorbar) mainlayout.addWidget(frame_ticks) mainlayout.addWidget(frame_labels) return legend def add_vector(self, path, tag, strcolor): fileInfo = QtCore.QFileInfo(path) baseName = fileInfo.baseName() points_layer = qgis.core.QgsVectorLayer(path, baseName, "ogr") props = {'color': strcolor, 'radius': '3'} s = qgis.core.QgsMarkerSymbolV2.createSimple(props) points_layer.setRendererV2(qgis.core.QgsSingleSymbolRendererV2(s)) qgis.core.QgsMapLayerRegistry.instance().addMapLayer(points_layer) self.all_layers[tag] = qgis.gui.QgsMapCanvasLayer(points_layer)
class SAHMSpatialOutputViewerCellWidget(QCellWidget): """ """ def __init__(self, parent=None): """ QGISCellWidget(parent: QWidget) -> QGISCellWidget Initialize the widget with its central layout """ QCellWidget.__init__(self, parent) centralLayout = QtGui.QVBoxLayout() self.setLayout(centralLayout) centralLayout.setMargin(0) centralLayout.setSpacing(0) # self.setAnimationEnabled(True) self.Frame = QtGui.QFrame() self.ui = Ui_Frame() self.ui.setupUi(self.Frame) self.toolBarType = SAHMSpatialViewerToolBar self.controlBarType = SAHMSpatialViewerToolBar self.layout().addWidget(self.Frame) def updateContents(self, inputs): """ updateContents(inputs: dictionary) -> None Update the widget contents based on the input data """ self.canvas = qgis.gui.QgsMapCanvas() self.canvas.show() self.ui.legend_label.setText(QtCore.QString(inputs["model_tag"])) self.toolPan = qgis.gui.QgsMapToolPan(self.canvas) self.canvas.setMapTool(self.toolPan) self.canvas.setWheelAction(2) self.canvas.setCanvasColor(QtCore.Qt.white) self.canvas.enableAntiAliasing(True) self.all_layers = {} self.add_raster(inputs["prob_map"], "prob_map") self.add_raster(inputs["bin_map"], "bin_map") self.add_raster(inputs["res_map"], "res_map") self.add_raster(inputs["mes_map"], "mes_map") self.add_raster(inputs["mod_map"], "mod_map") self.add_vector(inputs['pres_points'], "pres_points", '255,0,0') self.add_vector(inputs['abs_points'], "abs_points", '0,255,0') self.add_vector(inputs['backs_points'], "backs_points", '0,0,0') self.canvas.setExtent(self.all_layers["prob_map"].layer().extent()) self.canvas.setLayerSet([self.all_layers["pres_points"], self.all_layers["abs_points"], self.all_layers["prob_map"]]) self.ui.map_frame.layout().addWidget(self.canvas) legend = self.create_legend_ramp("prob_map", None, (0, 1), 6) self.ui.legend.layout().addWidget(legend) # Update the new figure canvas self.update() def dumpToFile(self, filename): pass def saveToPDF(self, filename): pass def add_raster(self, path, tag): if os.path.exists(path): fileInfo = QtCore.QFileInfo(path) baseName = fileInfo.baseName() raster = qgis.core.QgsRasterLayer(path, baseName) if tag=="res_map": min_max = getrasterminmax(path) else: min_max = None self.set_color_ramp(tag, raster) qgis.core.QgsMapLayerRegistry.instance().addMapLayer(raster) self.all_layers[tag] = qgis.gui.QgsMapCanvasLayer(raster) else: print "The file " + path + " could not be found on the file system." print " tag will not be enabled" def set_color_ramp(self, layer_type, raster, min_max=None): QgsColorRampShader = qgis.core.QgsColorRampShader if layer_type == "mod_map": #raster.setDrawingStyle(qgis.core.QgsRasterLayer.PalettedColor) raster.setDrawingStyle(qgis.core.QgsRasterLayer.SingleBandPseudoColor) raster.setColorShadingAlgorithm(qgis.core.QgsRasterLayer.PseudoColorShader) #raster.setColorShadingAlgorithm(qgis.core.QgsRasterLayer.ColorRampShader) # raster.setDrawingStyle(qgis.core.QgsRasterLayer.SingleBandGray) return None else: raster.setDrawingStyle(qgis.core.QgsRasterLayer.SingleBandPseudoColor) csv_file = os.path.abspath(os.path.join(os.path.dirname(__file__), "ColorBreaks.csv")) csvfile = open(csv_file, "r") reader = csv.reader(csvfile) header = reader.next() #skip the header color_ramp_items = [] for row in reader: if row[0] == layer_type: r, g, b = [int(val) for val in row[2:5]] cur_color = QtGui.QColor(r, g, b) cur_val = float(row[1]) color_item = QgsColorRampShader.ColorRampItem(cur_val, cur_color) color_ramp_items.append(color_item) raster.setColorShadingAlgorithm(qgis.core.QgsRasterLayer.ColorRampShader) fcn = raster.rasterShader().rasterShaderFunction() fcn.setColorRampType(QgsColorRampShader.INTERPOLATED) fcn.setColorRampItemList(color_ramp_items) if hasattr(raster, "setCacheImage"): raster.setCacheImage(None) raster.triggerRepaint() qgis.core.QgsMapLayerRegistry.instance().addMapLayer(raster) csvfile.close() return None def create_legend_ramp(self, layer_type, raster, min_max, num_tags): legend = QtGui.QFrame() legend.setObjectName(QtCore.QString.fromUtf8("legend")) mainlayout = QtGui.QVBoxLayout(legend) mainlayout.setSpacing(0) mainlayout.setMargin(0) frame_colorbar = QtGui.QFrame(legend) frame_colorbar.setObjectName(QtCore.QString.fromUtf8("frame_colorbar")) layout_colorbar = QtGui.QHBoxLayout(frame_colorbar) layout_colorbar.setSpacing(0) layout_colorbar.setContentsMargins(-1, 2, -1, 0) frame_ticks = QtGui.QFrame(legend) frame_ticks.setFrameShape(QtGui.QFrame.StyledPanel) frame_ticks.setFrameShadow(QtGui.QFrame.Raised) frame_ticks.setObjectName(QtCore.QString.fromUtf8("frame_ticks")) layout_ticks = QtGui.QHBoxLayout(frame_ticks) layout_ticks.setSpacing(0) layout_ticks.setContentsMargins(-1, 0, -1, 0) frame_labels = QtGui.QFrame(legend) frame_labels.setObjectName(QtCore.QString.fromUtf8("frame_labels")) layout_labels = QtGui.QHBoxLayout(frame_labels) layout_labels.setSpacing(0) layout_labels.setContentsMargins(4, 0, 4, 0) csv_file = os.path.abspath(os.path.join(os.path.dirname(__file__), "ColorBreaks.csv")) csvfile = open(csv_file, "r") reader = csv.reader(csvfile) header = reader.next() #skip the header color_ramp_items = [] prev_color = None for row in reader: if row[0] == layer_type: cur_color = ", ".join(row[2:5]) if prev_color: color_label = QtGui.QLabel(frame_colorbar) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.MinimumExpanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(color_label.sizePolicy().hasHeightForWidth()) color_label.setSizePolicy(sizePolicy) color_label.setMinimumSize(QtCore.QSize(0, 4)) stylesheet = "background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:0, stop:0 rgba(" stylesheet += prev_color stylesheet += ", 255), stop:1 rgba(" stylesheet += cur_color stylesheet += ", 255));" color_label.setStyleSheet(QtCore.QString.fromUtf8(stylesheet)) color_label.setText(QtCore.QString.fromUtf8("")) layout_colorbar.addWidget(color_label) prev_color = cur_color min = min_max[0] max = min_max[1] step = float(max - min) / num_tags curStep = min while curStep <= max: line = QtGui.QFrame(frame_ticks) sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Minimum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(line.sizePolicy().hasHeightForWidth()) line.setSizePolicy(sizePolicy) line.setMinimumSize(QtCore.QSize(0, 4)) line.setSizeIncrement(QtCore.QSize(0, 0)) line.setFrameShadow(QtGui.QFrame.Plain) line.setFrameShape(QtGui.QFrame.VLine) line.setFrameShadow(QtGui.QFrame.Sunken) line.setObjectName(QtCore.QString.fromUtf8("line")) layout_ticks.addWidget(line) spacerItem = QtGui.QSpacerItem(133, 2, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) layout_ticks.addItem(spacerItem) lbl = QtGui.QLabel(frame_labels) lbl.setMinimumSize(QtCore.QSize(0, 10)) txt = "%.1f" %curStep lbl.setText(QtCore.QString.fromUtf8(txt)) lbl.setAlignment(QtCore.Qt.AlignCenter) #lbl.setObjectName(QtCore.QString.fromUtf8("lbl")) layout_labels.addWidget(lbl) spacerItem2 = QtGui.QSpacerItem(5, 5, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum) layout_labels.addItem(spacerItem2) curStep += step layout_ticks.removeItem(spacerItem) layout_labels.removeItem(spacerItem2) mainlayout.addWidget(frame_colorbar) mainlayout.addWidget(frame_ticks) mainlayout.addWidget(frame_labels) return legend def add_vector(self, path, tag, strcolor): fileInfo = QtCore.QFileInfo(path) baseName = fileInfo.baseName() points_layer = qgis.core.QgsVectorLayer(path, baseName, "ogr") props = {'color':strcolor, 'radius':'3' } s = qgis.core.QgsMarkerSymbolV2.createSimple(props) points_layer.setRendererV2( qgis.core.QgsSingleSymbolRendererV2( s ) ) qgis.core.QgsMapLayerRegistry.instance().addMapLayer(points_layer) self.all_layers[tag] = qgis.gui.QgsMapCanvasLayer(points_layer)