#1 Wed 03 May 2023 10:01
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
QGIS/PyQgis: ouvrir HDF5
Bonjour,
J'essaie d'ouvrir un fichier HDF5 avec PyQGIS et GDAL.
Code:
hdf_path = f'HDF5:{self.file}://path/vers/le/layer' hdflayer = gdal.Open(hdf_path, gdal.GA_ReadOnly) print(hdflayer.RasterXSize) print(hdflayer.RasterYSize) print(hdflayer.RasterCount)
En résultat, j'ai bien la taille de la grille :
Code:
3317 1754 1
Mais quand je veux accéder aux données de la grille, j'ai comme résultat None :
Code:
band = hdflayer.GetRasterBand(1) print(band.ReadAsArray())
Qu'est ce qui cloche?
Merci, Nico
Hors ligne
#2 Thu 04 May 2023 07:33
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: QGIS/PyQgis: ouvrir HDF5
Est-ce qu'il faut installer numpy en plus, ou est-ce que c'est installé avec GDAL?
Nico
Hors ligne
#3 Thu 04 May 2023 08:07
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: QGIS/PyQgis: ouvrir HDF5
Si j'exécute le code dans un 'vrai' logiciel de dev Python (et pas dans la console de QGIS), j'ai des messages d'erreur qui apparaissent:
Si j'exécute :
Code:
hdf_path = f'HDF5:/chemin/du/fichier/hdf5://path/vers/le/dataset' hdflayer = gdal.Open(hdf_path, gdal.GA_ReadOnly) print(hdflayer.RasterXSize) print(hdflayer.RasterYSize) print(hdflayer.RasterCount) bnd = hdflayer.GetRasterBand(1) print(bnd.XSize, bnd.YSize) print(type(bnd)) print(bnd) print(gdal.GetDataTypeName(bnd.DataType)) print('*** ', bnd.ReadAsArray())
J'ai à l'affichage :
Code:
3317 1754 1 3317 1754 <class 'osgeo.gdal.Band'> <osgeo.gdal.Band; proxy of <Swig Object of type 'GDALRasterBandShadow *' at 0x00000224F19C9810> > Unknown *** None ERROR 1: HDF5:/chemin/du/fichier/hdf5://path/vers/le/dataset, band 1: Invalid data type ERROR 1: GetBlockRef failed at X block offset 0, Y block offset 0: HDF5:/chemin/du/fichier/hdf5://path/vers/le/dataset, band 1: Invalid data type
une idée?
Quand on ouvre le fichier hdf5, ou dans l'instruction ReadAsArray, est-ce qu'il y a un moyen de forcer le type de données qu'on lui demande de lire ?
Nico
Dernière modification par nico-29 (Thu 04 May 2023 08:18)
Hors ligne
#4 Mon 15 May 2023 15:40
- nico-29
- Participant assidu
- Lieu: Brest
- Date d'inscription: 2 Jun 2006
- Messages: 185
Re: QGIS/PyQgis: ouvrir HDF5
si j'exécute :
Code:
uri = HDF5:/chemin/du/fichier/hdf5://path/vers/le/dataset rlayer = QgsRasterLayer(uri, 'monlayer', 'gdal') QgsProject.instance().addMapLayer(rlayer, True)
J'ai une nouvelle couche qui se crée dans QGIS, et dans la légende, j'ai l'image en pièce jointe.
Pour les bornes de la légende, je pense que ça correspond aux valeurs du raster lus 'en brut' dans le fichier, donc il a bien réussi à lire quelquechose...
Nico
Hors ligne