#1 Tue 14 May 2019 07:35
- vulcain
- Juste Inscrit !
- Lieu: sées
- Date d'inscription: 13 May 2019
- Messages: 6
QGIS: Dalles pour ouvrir des rasters
Bonjour,
Depuis plusieurs heures, je tente de créer un lien entre un shape (dalles) et des données raster (Bd Ortho de l'IGN et jpg2). En effet, j'ai environ 300 dalles pour un département, et aller chercher les fichiers manuellement est barbant. Je me permet de développer un peux mes recherche et mon avancement afin que vous puissiez m'indiquer si j'ai fait des erreurs (je m'excuse si c'est un peu long.).
Après de nombreuses recherches, j'ai trouvé une méthode décrite notamment ici : http://www.geoinformations.developpemen … 7796e3.pdf. Néanmoins, cette technique utilise le plugin Image Boundary qui n'existe plus. J'ai semble t-il trouvé l'équivalent dans les versions les plus récentes de qgis qui est l'index des tuiles rasters. Le problème étant que ce dernier me donne un message d'erreur quand je le lance : "Le processus n'a pu être lancé. Soit le programme requis est manquant, soit vous n'avez pas les droits nécessaires pour l'utiliser."
Sur différents forum, j'ai vu que cela pouvait venir du chemin d'accès trop long ou avec des espaces/caracteres spéciaux. J'ai donc déplacé les raster sur D avec ce chemin "D:BDORTHO1_DONNEES_LIVRAISON_2016-12-00191BDO_RVB_0M50_JP2-E080_LAMB93_D61-2016".
J'ai également vu sur des forums que le chemin d'accès vers GDAL était naturellement erroné sur Windows, j'ai donc tenté de le refaire sous le menu "paramètre de Gdal tools" sous Qgis 2.18.
Mais rien y fait, je reçois toujours ce message d'erreur.
J'aurais également une autre question.À travers mes recherches j'ai également rencontré le fait de créer un catalogue VRT, ce dernier stock également les raster dans son fichier ? Contrairement à la méthode si dessus qui ne va que les chercher ?
Étant un débutant dans qgis, je dispose de deux versions : 2.18 et 3.4 (quand je ne trouve pas d'un coté, je vais voir de l'autre )
Merci beaucoup de votre attention.
Hors ligne
#2 Tue 14 May 2019 09:31
Re: QGIS: Dalles pour ouvrir des rasters
bonjour,
Imaginons qu'une colonne location localise dans votre tableau d'assemblage l'emplacement de la dalle, alors cette action ouvrira la dalle ou l'enlèvera si elle est déjà présente. Pour créer une action sur une couche : couche > propriétés > action (code python)
Ce code fonctionne sous QGIS 2, mais il est à adapter pour QGIS 3
Code:
iface = qgis.utils.iface layers = iface.legendInterface().layers() location = '[%location%]' displayName = os.path.basename(os.path.splitext(location)[0]) if displayName in map(lambda x : x.name(), layers) : theLayers = filter(lambda x: x.name() == displayName, layers) for layer in theLayers : QgsMapLayerRegistry.instance().removeMapLayer(layer.id()) else : iface.addRasterLayer(location,displayName)
geodata au cerema et petits billets en géomatique
Hors ligne
#3 Tue 14 May 2019 10:29
- vulcain
- Juste Inscrit !
- Lieu: sées
- Date d'inscription: 13 May 2019
- Messages: 6
Re: QGIS: Dalles pour ouvrir des rasters
Merci pour votre réponse, mais je n'arrive justement pas a crée le shape avec la colonne location. Je possède néanmoins un shape livrée par IGN qui comporte le nom des rasters.
Donc je pense qu'il existe 2 solutions, soit réussir à faire ce fameux shape avec les chemins d'accès ( ce que je préférerais).
Soi utilisé des chemins relatifs et mettre le shape dans le même dossier que les rasters. Dans quel cas, seul nom des fichiers suffirait ?
Hors ligne
#4 Tue 14 May 2019 14:40
Re: QGIS: Dalles pour ouvrir des rasters
Bonjour,
Ce code est fait pour fonctionner avec des chemins absolus. Pour des chemins relatifs, il vous faudra récupérer le chemin, soit du projet, soit de votre ta selon ce qui fait référence
Pour créer ce tableau d'assemblage : raster > divers > index des tuiles
geodata au cerema et petits billets en géomatique
Hors ligne
#5 Wed 15 May 2019 09:31
- vulcain
- Juste Inscrit !
- Lieu: sées
- Date d'inscription: 13 May 2019
- Messages: 6
Re: QGIS: Dalles pour ouvrir des rasters
Bonjour,
C'est justement cet outil : raster > divers > index des tuiles, que je n'arrive pas a faire fonctionner. En effet ce dernier me renvoie toujours l'erreur suivante ( dans les deux versions de Qgis) :
"Le processus n'a pu être lancé. Soit le programme requis est manquant, soit vous n'avez pas les droits nécessaires pour l'utiliser."
Hors ligne
#7 Wed 15 May 2019 16:21
- vulcain
- Juste Inscrit !
- Lieu: sées
- Date d'inscription: 13 May 2019
- Messages: 6
Re: QGIS: Dalles pour ouvrir des rasters
Non, malheureusement ce serrait trop simple
Hors ligne
#8 Thu 16 May 2019 11:58
- michel56
- Participant assidu
- Lieu: Lorient
- Date d'inscription: 14 Jul 2012
- Messages: 474
Re: QGIS: Dalles pour ouvrir des rasters
Bonjour,
Avec un fichier VRT pour l'ensemble du département, je pense que c'est le plus simple à utiliser par la suite. Tu auras tous sur le même calque.
Il y a eu pas mal de discussions à ce sujet.
Cordialement.
https://georezo.net/forum/viewtopic.php … amp;hl=vrt
Dernière modification par michel56 (Thu 16 May 2019 12:07)
Opérateur cartographique & DAO & PHP.
Hors ligne
#9 Thu 16 May 2019 18:19
- vulcain
- Juste Inscrit !
- Lieu: sées
- Date d'inscription: 13 May 2019
- Messages: 6
Re: QGIS: Dalles pour ouvrir des rasters
Bonjour,
Merci beaucoup, en effet cela fonctionne. J'avais déjà tenté la chose et le même message d'erreur (cité au dessus. Signe qu'il ne peux pas gérer plus de X fichiers ?) m’était apparût. En le fessant en 2 fois pas de message d'erreur... Ce serait plus pratique avec 1 seul fichier mais bon ... C'est mieux que rien.
Autre choses, a une grande échelle, les temps de chargement sont très long. J'ai vu sur votre lien qu'il parlaient d'un fichier unique qui serrait plus optimisé au codage même du Jpg2. Le fait d'avoir un fichier unique serait-il donc utile dans on cas ? De plus cela me permettrait de créer le VRT en 1 fois et donc d'avoir un seul fichier.
Et dernier point, le fichier VRT crée des "dalles noires" autours des Rasters, est il possible de ne pas les créer ou les supprimer ?
Hors ligne
#10 Thu 16 May 2019 18:20
- vulcain
- Juste Inscrit !
- Lieu: sées
- Date d'inscription: 13 May 2019
- Messages: 6
Re: QGIS: Dalles pour ouvrir des rasters
Bonjour,
Merci beaucoup, en effet cela fonctionne. J'avais déjà tenté la chose et le même message d'erreur (cité au dessus. Signe qu'il ne peux pas gérer plus de X fichiers ?) m’était apparût. En le fessant en 2 fois pas de message d'erreur... Ce serait plus pratique avec 1 seul fichier mais bon ... C'est mieux que rien.
Autre choses, a une grande échelle, les temps de chargement sont très long. J'ai vu sur votre lien qu'il parlaient d'un fichier unique qui serrait plus optimisé au codage même du Jpg2. Le fait d'avoir un fichier unique serait-il donc utile dans on cas ? De plus cela me permettrait de créer le VRT en 1 fois et donc d'avoir un seul fichier.
Et dernier point, le fichier VRT crée des "dalles noires" autours des Rasters, est il possible de ne pas les créer ou les supprimer ?
Hors ligne
#11 Fri 17 May 2019 00:04
- lylambda
- Participant actif
- Date d'inscription: 31 Aug 2016
- Messages: 127
Re: QGIS: Dalles pour ouvrir des rasters
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 (ajouté manuellement ou via l'application d'un style) 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 à partir de celui 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" , './', '' )
L'avantage vis à vis d'un VRT ou d'un projet incluant déjà les jp2 est l'ouverture bien plus rapide (seule les couches "dalle.shp" sont chargées). Les jp2 sont appelés au cas par cas selon les besoin, mais cela nécessite évidement une activation par l'utilisateur (le clic pour activer l'action).
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)
Dernière modification par lylambda (Fri 17 May 2019 00:22)
Hors ligne
#12 Fri 17 May 2019 09:40
- michel56
- Participant assidu
- Lieu: Lorient
- Date d'inscription: 14 Jul 2012
- Messages: 474
Re: QGIS: Dalles pour ouvrir des rasters
Bonjour,
Code:
Autre choses, a une grande échelle, les temps de chargement sont très long.
Personnellement je n'affiche pas l'orthophoto à grande échelle, j'utilise le Scan25. Tu peux définir l'échelle de visibilité dans les propriétés de la couche pour qu'elle n’apparaisse pas à grande échelle.
Code:
Le fait d'avoir un fichier unique serait-il donc utile dans on cas ?
Pour le fichier unique, je ne peux pas vous répondre.
Code:
Et dernier point, le fichier VRT crée des "dalles noires" autours des Rasters,
Pour les dalles noires tu les supprimes en ajoutant une couleur de transparence dans les propriétés de la couche.
Cordialement.
Dernière modification par michel56 (Fri 17 May 2019 09:46)
Opérateur cartographique & DAO & PHP.
Hors ligne
#13 Fri 17 May 2019 10:28
- lylambda
- Participant actif
- Date d'inscription: 31 Aug 2016
- Messages: 127
Re: QGIS: Dalles pour ouvrir des rasters
Pour les dalles noires tu les supprimes en ajoutant une couleur de transparence dans les propriétés de la couche.
Un bémol pour cette méthode, les pixels noirs de l'orthophoto deviendront aussi transparents.
Hors ligne
#14 Fri 17 May 2019 12:16
- michel56
- Participant assidu
- Lieu: Lorient
- Date d'inscription: 14 Jul 2012
- Messages: 474
Re: QGIS: Dalles pour ouvrir des rasters
C'est vrai.
Sur ce poste il y a une méthode. A tester.
https://georezo.net/forum/viewtopic.php?id=85362
Opérateur cartographique & DAO & PHP.
Hors ligne
#15 Fri 10 January 2020 14:19
- guillaume
- Participant actif
- Date d'inscription: 5 Sep 2005
- Messages: 66
Re: QGIS: Dalles pour ouvrir des rasters
Bonjour,
j'essaye d'exploiter le code fourni par lylambda, mais sans résultats.
Ma dalle shp contient les champs : Img_2010, ex 18-2010-0630-6670-LA93.ecw et
Path_2010, ex \\cen-linda\gb_ref\BDORTHO\N_ORTHO_COUL\N_ORTHO_COUL_DALLES\N_ORTHO_COUL_018_2010_DALLES
J'ai personnalisé le code :
# le chemin du fichier à afficher:
fichier=r"[% c %]\[% Img_2010 %]"
# Nom à afficher dans la legende de Qgis:
titre="[% Img_2010 %]"
# nom du groupe où seront placées les dalles:
nomDuGroupe=u"Dalles"
lay=qgis.utils.iface.activeLayer()
titre=titre.decode('utf8')
fichier=fichier.decode('utf8')
if not os.path.exists(fichier):
from PyQt4.QtGui import QMessageBox
QMessageBox.information(qgis.utils.iface.mainWindow(), u"Attention la dalle ci-dessous est introuvable", fichier)
else:
raster=qgis.utils.iface.addRasterLayer( fichier, titre )
# Si le groupe voulu n'existe pas, il faut le créer puis déplacer la nouvelle dalle dans ce groupe :
li = qgis.utils.iface.legendInterface()
i = 0
index = -1
import qgis.core
if QGis.QGIS_VERSION_INT>10800:
for grp in li.groups():
if grp ==nomDuGroupe: index = i
i = i + 1
else:
for item in li.groupLayerRelationship():
if item[0] == nomDuGroupe: index = i
i = i + 1
if index == -1: index = li.addGroup( nomDuGroupe )
li.moveLayer(raster, index)
# Redonner le statut 'Active' à la couche (pour continuer à utiliser cette Action) :
qgis.utils.iface.setActiveLayer(lay)
MAIS QGIS 3.4.5 affiche une fenêtre Erreur Python (voir PJ)
D'avance merci
Cordialement
gerard
Hors ligne