Suite

Couches de superposition de canevas de carte QGIS

Couches de superposition de canevas de carte QGIS


J'ai construit mon propre canevas de carte dans un plugin dans QGIS et je souhaite ajouter deux couches (une par une) afin de les superposer. j'ai ce code :

fileCI = "… plugins	este	est.shp" fileInfo = QFileInfo(fileCI) layer = QgsVectorLayer(fileCI, fileInfo.baseName(), "ogr") sinon layer.isValid(): return if self.canvas.layerCount ()==0 : # ajouter une couche au registre QgsMapLayerRegistry.instance().addMapLayer(layer, False) # définir l'étendue de l'étendue de notre couche self.canvas.setExtent(layer.extent()) # définir le canevas de la carte ensemble de calques self.canvas.setLayerSet([QgsMapCanvasLayer(calque)]) self.canvas.setVisible(True) else: calques = self.canvas.layers() calques.insert(1, calque) # ajoute un calque au registre QgsMapLayerRegistry. instance().addMapLayers(layers,False) for i in range(0,self.canvas.layerCount()+1): self.canvas.setLayerSet([QgsMapCanvasLayer(layers[i])]) self.canvas.setVisible( True) pour les couches : lay.triggerRepaint()

Mais lorsque j'ajoute le premier fichier vectoriel, ok, lorsque j'ajoute le second, le canevas de la carte reste vide.

Comment faire pour superposer les deux calques ?


Je trouve un moyen de superposer des fichiers vectoriels (s'il y a un fichier vectoriel déjà ouvert) et un fichier raster.

orto = '… image.tif' fileCV = '… /layer1.shp' couches = [] # afficher le fichier dans le canevas fileInfo = QFileInfo(fileCV) layer = QgsVectorLayer(fileCV, fileInfo.baseName(), "ogr") # raster layer rfileInfo = QFileInfo(orto) rlayer = QgsRasterLayer(orto, rfileInfo.baseName()) if self.canvas.layerCount()==0: QgsMapLayerRegistry.instance().addMapLayer(rlayer) self.canvas.setExtent(rlayer.extent ()) # liste des calques append raster cl_raster= QgsMapCanvasLayer(rlayer) layer.append(cl_raster) # ajouter un calque vectoriel sinon layer.isValid(): return QgsMapLayerRegistry.instance().addMapLayer(layer) v_layer = QgsMapCanvasLayer(layer) layer.insert(0, v_layer) # afficher les calques self.canvas.setLayerSet(layers) else: existent_layers = self.canvas.layers() pour i dans existent_layers: if i.type() == QgsMapLayer.VectorLayer: l = QgsMapCanvasLayer (i) couches.insert(0, l) QgsMapLayerRegistry.instance().addMapLayer(rlayer) self.canvas.setExtent(rlayer.extent()) # liste des couches ajouter raster cl_raster= QgsMapCanvasLayer(rlayer ) layer.insert(2,cl_raster) # ajouter une couche au registre QgsMapLayerRegistry.instance().addMapLayer(layer) v_layer = QgsMapCanvasLayer(layer) couches.insert(1, v_layer) # afficher les couches self.canvas.setLayerSet(layers)

Merci pour l'aide!


Je ne sais pas si je comprends, mais… Je ne sais pas pourquoi vous essayez de contrôler canvas layerSet si votre objectif semble uniquement afficher ces calques.

J'essaierais de simplifier la suppression si… autrement et en pensant uniquement :

QgsMapLayerRegistry.instance().addMapLayer(couche)

remarquer que j'ai enlevé leFauxparamètre afin que le même registre émette un événement qui permet à canvas de se mettre à jour automatiquement.

vous pouvez également ajouter la ligne suivante :

self.canvas.setExtent(layer.extent())

pour définir l'étendue de la couche chargée comme vous l'avez fait dans lesidéclaration


Voir la vidéo: Leçon 2 Suite géoref Superposition des couches Raster