Message posté par : lylambda
----------------------------------------
Bonjour,
En fin de message, vous trouverez un code action fonctionnel pour QGIS3. Il permet
d'ouvrir ET de fermer au clic, une dalle raster à partir d'un quadrillage vecteur.
Le code est à insérer dans "Propriétés de la couche" > "Actions"
(type Python).
Typiquement, les couches "dalles.shp" des dossiers par départements (ex :
"OHR_RVB_0M20_JP2-E080_LAMB93_D75-2014") de "3_SUPPLEMENTS_LIVRAISON"
de la BDORTHO de l'IGN peuvent faire l'objet de ce code pour ouvrir/fermer les jp2
livrés dans les dossiers par départements homonymes de "1_DONNEES_LIVRAISON".
A noter que "DOSSIER" et "NOM2" sont des variables à adapter.
Dans mon cas, ce sont des champs virtuels générés par la calculatrice de champs, pour une
utilisation en relatif :
- DOSSIER : chemin du dossier où sont situées les dalles raster. Exemple indiquant le
chemin du dossier dans lequel est contenu "dalles.shp" :
-----------------
Code :
replace((layer_property(@layer_id,'source')),
array('3_SUPPLEMENTS_LIVRAISON','dalles.shp'),
array('1_DONNEES_LIVRAISON',''))
-----------------
]
- NOM2 : nom de la dalle raster à afficher. Exemple basé sur le champ "NOM" déjà
inclus dans la table attributaire de "dalles.shp" :
-----------------
Code :
replace ( "NOM" , './', '' )
-----------------
En espérant que cela réponde à votre besoin !
-----------------
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)
-----------------
----------------------------------------
Le message est situé
https://georezo.net/forum/viewtopic.php?pid=321243#p321243
Pour y répondre : qgis_fr(a)ml.georezo.net ou reply de votre messagerie
Pour vous désabonner connectez-vous sur le forum puis Profil / Abonnement
--
Association GeoRezo - le portail géomatique
https://georezo.net