Annonce
Pour sa 21ème année, l’association GeoRezo a toujours besoin de vous !
10€ = 1 mois de frais bancaires ; 15€ = 12 mois de nom de domaine ; 30€ = 1 semaine de location des serveurs …
Retrouver nos membres bienfaiteurs
#1 Wed 18 November 2015 16:46
- Pascal153
- Juste Inscrit !
- Lieu: Bouilly
- Date d'inscription: 31 Oct 2010
- Messages: 3
QGIS : Action ouverture et application d'un style
Bonjour à toute la communauté,
je cherche à créer une action permettant d'ouvrir le document d'urbanisme d'une commune pour chaque commune d'un département.
Un document d'urbanisme peut se composer de 4 fichiers vectoriels ; il existe des styles à adopter pour représenter leurs entités.
Je dispose des 4 fichiers style et je sais ouvrir les couches par "action".
Comme j'ai à peu près 200 communes, j'aimerais trouver une solution qui me permette d'associer mes fichiers styles à tous les fichiers des documents d'urbanisme qui leur correspondent sans avoir à faire la manip des les y associer après ouverture.
Chez moi la commande d'ouverture d'un des fichiers, par exemple, se présente ainsi (QGIS 2.6) :
qgis.utils.iface.addVectorLayer("S:/AMENAGEMENT_URBANISME/N_ZONAGES_PLANIFICATION/[% "tabl_suivi_doc_urba_field_3" %]/N_ZONE_URBA_"+"[% "INSEE_Commune" %]"+"_010.tab","Zonage","ogr")
Est ce qu'il existe une commande permettant d'ouvrir et en même temps d'associer une couche vectorielle à un fichier style ?
Ou peut-on compléter la précédente ?
Merci pour votre attention et vos réponses éventuelles
Pascal
Hors ligne
#2 Wed 18 November 2015 18:43
- SANTANNA
- Moderateur
- Lieu: Angers
- Date d'inscription: 18 Jan 2008
- Messages: 3948
Re: QGIS : Action ouverture et application d'un style
Bonjour,
Vous pouvez associer un style par défaut à une couche. C'est ce style qui apparaîtra à chaque ouverture de la couche. Il suffit d'aller dans les propriétés de la couche, la mettre en forme et en bas de la fenêtre, Style > Enregistrer le style sous. Si vous utilisez du shapefile, il créera un fichier .qml à côté.
Après, je pense qu'une fois que l'action appellera la couche, elle devrait s'ouvrir avec ledit style.
Hors ligne
#3 Wed 18 November 2015 20:18
- Pascal153
- Juste Inscrit !
- Lieu: Bouilly
- Date d'inscription: 31 Oct 2010
- Messages: 3
Re: QGIS : Action ouverture et application d'un style
Bonsoir Santanna,
et merci de vous pencher sur mon cas.
Oui, mais pour cela je pense que je devrais ouvrir la couche en question pour pouvoir définir le style par défaut. Et je souhaite justement ne pas avoir à faire cette opération vu le nombre important de couches en jeu (200 communes par 4 couches : à peu près 800 donc).
C'est pour cela que je pensais à une instruction python à inclure avec ou après l'instruction d'ouverture du fichier.
Bonne soirée,
Pascal
Hors ligne
#4 Tue 21 April 2020 15:44
- lylambda
- Participant actif
- Date d'inscription: 31 Aug 2016
- Messages: 127
Re: QGIS : Action ouverture et application d'un style
Bonjour,
Ayant un besoin similaire à Pascal153, je me permets de déterrer ce fil.
J'utilise une action python qui importe une dalle raster d'un Modèle Numérique de terrain (MNT, à savoir le RGE-ALTI) à partir d'un quadrillage Shapefile.
Par défaut, le style d'une dalle de MNT se base sur un dégradé de gris en fonction de l’élévation minimum et maximum au sein de la dalle.
Ainsi, en important plusieurs dalles, chacune aura son propre dégradé de gris et l'affichage globale ne sera pas cohérent.
Je souhaite donc que mon action python importe la dalle ET applique un style à la volée à partir d'un qml que j'ai préparé.
C'est sur cette seconde partie que je sollicite une aide du forum.
Deux alternatives existent à la solution que je recherche. Je les ai écarté pour l'instant :
- Copier et renommer mon qml autant de fois que j'ai de dalles. Vu leur nombre, cela ne me semble pas une bonne solution.
- Réaliser un VRT. Cette option est trop lente à grande échelle pour un usage efficace.
Voici le script en question :
Code:
import os def getVectorLayerByName(NomCouche): layermap=QgsProject.instance().mapLayers() for name, layer in layermap.items(): if layer.name()==NomCouche: if layer.isValid(): return layer else: return None mypath="[% "DOSSIER" %]".replace("\\","/")+ "[% "NOM2" %]" instRegistry = QgsProject.instance() macouche = instRegistry.mapLayersByName( "[% "NOM2" %]") courant=qgis.utils.iface.mapCanvas().currentLayer() raster_ouvert=getVectorLayerByName("[% "NOM2" %]") if raster_ouvert is not None: QgsProject.instance().removeMapLayer(raster_ouvert.id()) qgis.utils.iface.mapCanvas().refresh() else: qgis.utils.iface.addRasterLayer(mypath,"[% "NOM2" %]") qgis.utils.iface.setActiveLayer(courant)
Cette action permet donc d'ouvrir ou fermer une dalle raster en fonction d'un carroyage vecteur et des Champs virtuels "DOSSIER" et "NOM2".
DOSSIER:
Code:
replace((layer_property(@layer_id,'source')), array('3_SUPPLEMENTS_LIVRAISON','dalles.shp'), array('1_DONNEES_LIVRAISON',''))
NOM2:
Code:
"NOM_DALLE" || '.asc'
L'action est idéale pour l'Orthophoto HD, qui est trop lourde pour en faire un VRT (cf ce message).
Pour l'utiliser sur les dalles du RGE-ALTI, je souhaite ajouter une fonction supplémentaire : l'application d'un style à la volée (stocké en qml) à la dalle ouverte .
En fouillant le web, je trouve des indications sur l'utilisation de fonction tel que "layer.loadNamedStyle(CHEMIN/STYLE.qml)". Mais je n'ai pas su les mettre en application, mes essais se concluant par de belles erreurs.
Un habitué de python saurait-il m'aider ?
Dernière modification par lylambda (Tue 21 April 2020 15:50)
Hors ligne