def add_qgis_raser_layer(raster_layer, canvas, bands = None): index_group = TerreImageConstant().index_group logger.debug("index_group: " + str(index_group)) if bands: if raster_layer.rasterType() == 2: logger.debug(bands) pir = bands['pir'] red = bands['red'] green = bands['green'] logger.debug('pir: ' + str(pir)) logger.debug("red: " + str(red)) logger.debug("green: " + str(green)) if pir and red and green: renderer = raster_layer.renderer() # raster_layer.setDrawingStyle("MultiBandColor") renderer.setRedBand(pir) renderer.setGreenBand(red) renderer.setBlueBand(green) # raster_layer.setRenderer( renderer ) # contrastForRasters( raster_layer, 0, 0, [pir, red, green] ) histogram_stretching(raster_layer, canvas) QgsMapLayerRegistry.instance().addMapLayer(raster_layer) TerreImageConstant().legendInterface.moveLayer(raster_layer, index_group)
def get_raster_layers(): canvas = TerreImageConstant().canvas rasterlayers = [] for i in range(canvas.layerCount()): layer = canvas.layer(i) if layer is not None and layer.isValid() and layer.type() == QgsMapLayer.RasterLayer: rasterlayers.append(layer) return rasterlayers
def display_one_band(layer, keyword, iface): index_group = TerreImageConstant().index_group logger.debug("keyword {}".format(keyword)) corres = { 'red': "_bande_rouge", 'green': "_bande_verte", 'blue': "_bande_bleue", 'pir': "_bande_pir", 'mir': "_bande_mir", "nat": "_couleurs_naturelles" } raster_layer = QgsRasterLayer(layer.get_source(), layer.name() + corres[keyword]) if keyword == 'nat': logger.debug("display on natural colors") band_red = layer.bands['red'] band_green = layer.bands['green'] band_blue = layer.bands['blue'] renderer = raster_layer.renderer() # raster_layer.setDrawingStyle("MultiBandColor") renderer.setRedBand(band_red) renderer.setGreenBand(band_green) renderer.setBlueBand(band_blue) # raster_layer.setRenderer( renderer ) # contrastForRasters( raster_layer, 0, 0, [pir, red, green] ) histogram_stretching(raster_layer, iface.mapCanvas()) QgsMapLayerRegistry.instance().addMapLayer(raster_layer) TerreImageConstant().legendInterface.moveLayer(raster_layer, index_group) return raster_layer else: band = layer.bands[keyword] if band: logger.debug("band num: {}".format(band)) raster_layer.setDrawingStyle("MultiBandSingleBandGray") renderer = raster_layer.renderer() logger.debug(renderer) renderer.setGrayBand(band) # contrastForRasters( raster_layer, 0, 0 ) histogram_stretching(raster_layer, iface.mapCanvas()) QgsMapLayerRegistry.instance().addMapLayer(raster_layer) TerreImageConstant().legendInterface.moveLayer( raster_layer, index_group) return raster_layer
def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface self.constants = TerreImageConstant() self.constants.iface = self.iface self.constants.canvas = self.iface.mapCanvas() self.constants.legendInterface = self.iface.legendInterface()
def addRasterLayerToQGIS(raster, layername, iface=None): """ Add the given raster to qgis and improve contrast between min max Keyword arguments: raster -- raster filename to add to QGIS layername -- name to given to the raster layer for display indexGroup -- index of the QGIS group where to move the layer """ index_group = TerreImageConstant().index_group if not index_group: index_group = 0 logger.debug("index_group: " + str(index_group)) if layername == None: layername = os.path.basename(raster) raster_layer = QgsRasterLayer(raster, layername) histogram_stretching(raster_layer, iface.mapCanvas()) QgsMapLayerRegistry.instance().addMapLayer(raster_layer) TerreImageConstant().legendInterface.moveLayer(raster_layer, index_group) return raster_layer
def get_workinglayer_on_opening(iface): settings = QSettings() last_folder = settings.value("terre_image_last_folder") if last_folder: path = last_folder else: path = QDir.currentPath() file_opened = QFileDialog.getOpenFileName(None, "Selectionner un fichier raster", path) settings.setValue("terre_image_last_folder", os.path.dirname(file_opened)) settings.sync() if file_opened: # try: # str(file_opened) # except UnicodeEncodeError: # QMessageBox.warning( None , "Erreur", u'L\'image que vous essayez d\'ouvrir contient un ou des caractères spéciaux. \ # La version actuelle du plugin ne gère pas ce type de fichiers. \ # Veuillez renommer le fichier et ou les répertoires le contenant.', QMessageBox.Ok ) # return None, None # else: # if file_opened.find(" ") != -1: # QMessageBox.warning( None , "Attention", u'L\'image que vous essayez d\'ouvrir contient un ou plusieurs espaces. Les traitements sur cette image provoqueront une erreur.'.encode('utf8'), QMessageBox.Ok ) if file_opened.endswith(".qgs"): # open new qgis project pass else: raster_layer = manage_QGIS.get_raster_layer(file_opened, os.path.splitext(os.path.basename(file_opened))[0]) type_image = terre_image_processing.get_sensor_id(file_opened) logger.debug("type_image {}".format(type_image)) layer = WorkingLayer(file_opened, raster_layer) layer.set_type(type_image) # self.layer = self.canvas.currentLayer() if layer: # self.define_bands(self.layer) # manage_bands() # self.red, self.green, self.blue, self.pir, self.mir = manage_bands().get_values() red, green, blue, pir, mir = manage_bands(type_image, layer.get_band_number()).get_values() if red != -1 or green != -1 or blue != -1 or pir != -1 or mir != -1: all_set = True bands = {'red': red, 'green': green, 'blue': blue, 'pir': pir, 'mir': mir} for i in range(1, layer.get_band_number() + 1): if i not in bands.values(): all_set = False if all_set: layer.set_bands(bands) logger.debug("{} {} {} {} {}".format(red, green, blue, pir, mir)) cst = TerreImageConstant() cst.index_group = cst.iface.legendInterface().addGroup("Terre Image", True, None) manage_QGIS.add_qgis_raser_layer(raster_layer, iface.mapCanvas(), bands) terre_image_gdal_system.compute_overviews(file_opened) return layer, bands else: QMessageBox.warning(None, "Erreur", u'Il y a un problème dans la définition des bandes spectrales.', QMessageBox.Ok) return None, None else: return None, None else: return None, None
def get_workinglayer_on_opening(iface): settings = QSettings() last_folder = settings.value("terre_image_last_folder") if last_folder: path = last_folder else: path = QDir.currentPath() file_opened = QFileDialog.getOpenFileName( None, "Selectionner un fichier raster", path) settings.setValue("terre_image_last_folder", os.path.dirname(file_opened)) settings.sync() if file_opened: # try: # str(file_opened) # except UnicodeEncodeError: # QMessageBox.warning( None , "Erreur", u'L\'image que vous essayez d\'ouvrir contient un ou des caractères spéciaux. \ # La version actuelle du plugin ne gère pas ce type de fichiers. \ # Veuillez renommer le fichier et ou les répertoires le contenant.', QMessageBox.Ok ) # return None, None # else: # if file_opened.find(" ") != -1: # QMessageBox.warning( None , "Attention", u'L\'image que vous essayez d\'ouvrir contient un ou plusieurs espaces. Les traitements sur cette image provoqueront une erreur.'.encode('utf8'), QMessageBox.Ok ) if file_opened.endswith(".qgs"): # open new qgis project pass else: raster_layer = manage_QGIS.get_raster_layer( file_opened, os.path.splitext(os.path.basename(file_opened))[0]) type_image = terre_image_processing.get_sensor_id(file_opened) logger.debug("type_image {}".format(type_image)) layer = WorkingLayer(file_opened, raster_layer) layer.set_type(type_image) # self.layer = self.canvas.currentLayer() if layer: # self.define_bands(self.layer) # manage_bands() # self.red, self.green, self.blue, self.pir, self.mir = manage_bands().get_values() red, green, blue, pir, mir = manage_bands( type_image, layer.get_band_number()).get_values() if red != -1 or green != -1 or blue != -1 or pir != -1 or mir != -1: all_set = True bands = { 'red': red, 'green': green, 'blue': blue, 'pir': pir, 'mir': mir } for i in range(1, layer.get_band_number() + 1): if i not in bands.values(): all_set = False if all_set: layer.set_bands(bands) logger.debug("{} {} {} {} {}".format( red, green, blue, pir, mir)) cst = TerreImageConstant() cst.index_group = cst.iface.legendInterface().addGroup( "Terre Image", True, None) manage_QGIS.add_qgis_raser_layer( raster_layer, iface.mapCanvas(), bands) terre_image_gdal_system.compute_overviews(file_opened) return layer, bands else: QMessageBox.warning( None, "Erreur", u'Il y a un problème dans la définition des bandes spectrales.', QMessageBox.Ok) return None, None else: return None, None else: return None, None