banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

State Of The Map 2024

#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: 3824

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

 

Pied de page des forums

Powered by FluxBB