#1 Mon 26 October 2020 10:32
- Bamakus
- Participant occasionnel
- Date d'inscription: 14 Jun 2019
- Messages: 15
QGIS: Astuce ouverture raster avec dalles
Bonjour,
Je recherche une astuce pour gagner du temps quant à l'ouverture d'un raster type BD Ortho, Scan 25, etc. sur Qgis (3.10.0)
Prenons l'exemple avec une orthophoto de l'IGN. Dans mes données livraison, j'ai un grand nombre de tuiles en format jp2 (échelle régionale). Je souhaite ouvrir les tuiles dont j'ai besoin, selon un périmètre d'étude précis. Or, c'est extrêmement chronophage d'ouvrir les tuiles une par une.
Voici ce dont à quoi j'ai pensé :
J'ai un périmètre d'étude à cheval sur deux régions. J'ai donc énormément de tuiles jp2 : tuiles sur la région 1 et tuiles sur la région 2. Je dispose également de dalles et de mosaïques en format .shape correspondant à l'emprise des tuiles de format jp2 des deux régions. Ces dalles et mosaïques sont fournies avec les tuiles jp2.
Après avoir supprimé les dalles/mosaïques ne correspondant pas à mon périmètre d'étude, j'aimerais ouvrir mes fichier raster jp2, selon les dalles/mosaïqes préalablement sélectionnées.
Cela est il possible ? Si oui, la marche à suivre est elle la bonne et comment faire ?
Dans un second temps, je peux soit fusionner les tuiles raster soit créer un fichier vrt. Sachant que je vais mettre cette couche de raster assemblée sur PgAdmin, qu'elle choix d'assemblage devrais-je choisir ?
Merci de vos conseils
Bonne journée !
Hors ligne
#2 Mon 26 October 2020 12:44
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 412
Re: QGIS: Astuce ouverture raster avec dalles
Bonjour,
Il y a plusieurs sujets dans votre message :
- gagner du temps à l'ouverture de rasters
- ouvrir les raster correspondant à des emprises vecteur sélectionnées à la main
- fusionner les raster ou vrt pour stocker les raster dans une base postgres
Pour ce qui est de gagner du temps, j'ai testé récemment la méthode de Klas Karlsson expliquée dans la vidéo suivante pour les tuiles d'un département (132 tuiles SCAN25 pour ~5,8Go de base) : https://www.youtube.com/watch?v=cRgkJzbx8gc
L'idée est de stocker et tuiler + construire des pyramides pour les rasters, dans un gpkg.
L'affichage est ensuite très fluide et comme on compresse au passage, on réduit la taille nécessaire, au dépit d'une perte en qualité qu'il faut essayer de limité par rapport à son besoin.
Résumé des actions :
1- Ouvrir tous les fichiers raster dans QGIS
2- Créer un raster virtuel .vrt avec le menu de QGIS Raster > Divers > Contruire un raster virtuel (qui se base sur la commande gdalbuildvrt)
Ne PAS cocher "Place each input file into a separate band"
Préciser le SCR correspondant aux tuiles dans "Override projection", dans mon cas 2154 Lambert 93
3- Exporter le vrt en gpkg avec compression
Clic droit sur la couche du vrt > Exporter > Enregistrer sous
Choisir Geopackage et préciser l'emplacement et le nom du fichier souhaité
Cocher Pyramides
Pour Format de pyramide, choisir Interne (si possible)
Cocher Niveaux personnalisés et indiquer dans le champ texte : 2 4 8 16 32 64 128 256
Dans Profil, choisir compression JPEG
Modifier dans le champ texte en-dessous la valeur de la compression en 50 au lieu de 75 par défaut "JPEG_QUALITY_OVERVIEW=50"
La création va prendre assez longtemps, surtout si comme pour le SCAN25 il y a beaucoup de rasters à la base.
Concernant l'ouverture de raster par rapport aux emprises sélectionnées, je ne sais pas comment faire, peut-être via une action ou un bout de code python ?
Concernant la fusion des raster, vrt en vue du stockage dans une base postgres, j'avoue ne pas trop comprendre votre question ?
Dernière modification par p.jeremie (Mon 26 October 2020 12:44)
Hors ligne
#3 Mon 26 October 2020 14:09
- EmilieDB
- Participant occasionnel
- Date d'inscription: 23 Jan 2007
- Messages: 23
Re: QGIS: Astuce ouverture raster avec dalles
Bonjour,
pour charger plusieurs dalles raster dans un projet qgis, j'utilise une action Python sur le shape contenant l'emprise des dalles. La table attributaire du shape contient un champ (dans l'exemple ci-après, "NOM_FICHIE") contenant lui même le nom du fichier raster (par exemple RGEALTI_FXX_0665_6640_MNT_LAMB93_IGN69.asc).
Au click sur la dalle avec l'icône "exécuter l'action", les dalles cliquées se chargent automatiquement. Si je clique à l'intersection de plusieurs dalles, plusieurs dalles se chargent.
Voici le code python, il doit être possible de l'adapter pour que les dalles à charger correspondent à la selection et non au click :
Code:
chemin = os.path.dirname( unicode( qgis.utils.iface.activeLayer().dataProvider().dataSourceUri() ) ) fic = chemin + "/" + "[% "NOM_FICHIE" %]" layer = qgis.utils.iface.activeLayer() qgis.utils.iface.addRasterLayer(fic,"[% "NOM_FICHIE" %]") qgis.utils.iface.setActiveLayer(layer)
Dans ce bout de code, le shape est stocké dans le même répertoire que les dalles raster.
En espérant que mes explications soient claires,
Emilie
Hors ligne
#4 Mon 26 October 2020 15:38
- lylambda
- Participant actif
- Date d'inscription: 31 Aug 2016
- Messages: 127
Re: QGIS: Astuce ouverture raster avec dalles
Bonjour,
Ci-dessous, un autre code pour une action python répondant au besoin exprimé de :
- gagner du temps à l'ouverture de rasters
- ouvrir les raster correspondant à des emprises vecteur sélectionnées à la main
https://georezo.net/forum/viewtopic.php … 43#p321243
L'avantage de ce code versus celui d'EmilieDB, est de permettre :
- l'ouverture et la fermeture au clic sur la dalle d'emprise
- l'utilisation de variable pour déterminer, en absolu ou en relatif, le chemin d’accès vers les dalles.
Hors ligne
#5 Mon 26 October 2020 16:42
- Bamakus
- Participant occasionnel
- Date d'inscription: 14 Jun 2019
- Messages: 15
Re: QGIS: Astuce ouverture raster avec dalles
Merci pour ces réponses.
En effet, il y a plusieurs sujets dans mon message.
Le premier étant d'ouvrir les fichier raster selon mes dalles déjà préparées (suppression des dalles inutiles). A la suite de quoi, je dois exporter mon raster pour le partager.
J'ai testé les deux codes python en vain. Surement une erreur de ma part (première fois que j'utilise cette fonctionnalité). Je pense que l'erreur est la même pour le code d'Emilie.
Lylambda voici mon 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=V:/DALLES_REG1/DALLE_SELEC_R1.shp.replace([%NOM%])
instRegistry = QgsProject.instance()
macouche = instRegistry.mapLayersByName([%NOM%])
courant=qgis.utils.iface.mapCanvas().currentLayer()
raster_ouvert=getVectorLayerByName([%NOM%])
if raster_ouvert is not None:
QgsProject.instance().removeMapLayer(raster_ouvert.id())
qgis.utils.iface.mapCanvas().refresh()
else:
qgis.utils.iface.addRasterLayer(mypath,[%NOM%])
qgis.utils.iface.setActiveLayer(courant)
Pour éviter les erreurs de frappes, j'ai cliqué sur l’icône "Dossier" pour créer mon chemin d'accès et cliqué sur "Insérer" pour déterminer l'attribut "NOM" de ma couche dalle. Mes fichiers raster jp2 se trouvent dans le même dossier "DALLES_REG1"
Merci !
Dernière modification par Bamakus (Mon 26 October 2020 16:50)
Hors ligne
#6 Tue 27 October 2020 08:53
Re: QGIS: Astuce ouverture raster avec dalles
Sujet déplacé sur cette liste, donc.
Hors ligne
#7 Tue 27 October 2020 19:03
- lylambda
- Participant actif
- Date d'inscription: 31 Aug 2016
- Messages: 127
Re: QGIS: Astuce ouverture raster avec dalles
Sans trop creuser vos modifs du code, la variable "mypath" me parait incorrect :
originel :
Code:
mypath="[% "DOSSIER" %]".replace("\\","/")+ "[% "NOM2" %]"
> appel de la variable DOSSIER, qui est un chemin vers le dossier contenant la tuile, avec les \ (doublé pour échappement) remplacer par des / auquel est ajouté (+) la variable NOM2, qui est le nom du ficher jp2 de la tuile correspondant à l'emprise de la dalle
modifié :
Code:
mypath=V:/DALLES_REG1/DALLE_SELEC_R1.shp.replace([%NOM%])
> V:/DALLES_REG1/DALLE_SELEC_R1.shp est un chemin de fichier shp, et non un chemin vers un dossier. Il est écrit en dur et pas encadré de " (pas certain que ce soit nécessaire mais à tester). La fonction de remplacement veut y échanger la variable NOM sans préciser quoi.
Ce qui génère un chemin qui n'a pas de sens pour appeler une tuile.
Pour vous proposer une correction, je vais supposer :
- que V:/DALLES_REG1 est le dossier ...
- ...contenant votre couche de dallage DALLE_SELEC_R1.shp...
- ... et les dalles raster
- que la variable NOM est un attribut de la couche de dallage renseignant le nom des dalles sous la forme /XXXX.jp2 et rien d'autre
L'action à activer au clic doit donc avoir la ligne suivante :
Code:
mypath="V:/DALLES_REG1"+ "[% "NOM" %]"
> Cela permettra de générer pour chaque emprise, le lien d'appel suivant : V:/DALLES_REG1/XXXX.jp2
A adapter selon votre champ NOM et la véritable localisation du shp vis à vis des tuiles jp2.
Dernière modification par lylambda (Tue 27 October 2020 19:11)
Hors ligne
#8 Mon 09 November 2020 11:44
- Bamakus
- Participant occasionnel
- Date d'inscription: 14 Jun 2019
- Messages: 15
Re: QGIS: Astuce ouverture raster avec dalles
Désolé pour la réponse tardive.
Merci pour toutes ces infos mais je n'arrive toujours pas à ouvrir mes fichiers raster selon des dalles prédéfinies...
Je continue de chercher !
Dernière modification par Bamakus (Mon 09 November 2020 11:44)
Hors ligne