rok4 / core-python

Librairies Python génériques du projet ROK4
https://rok4.github.io/core-python/
Other
1 stars 1 forks source link

Classe RasterSet : chargement d'un jeu de données raster #20

Closed Dolite closed 1 year ago

Dolite commented 1 year ago

RasterSet

Classe : RasterSet

Fichier concerné : Raster.py

Le but est de charger des informations sur un jeu de données raster et de la manipuler. Il y aura deux constructeurs

Constructeur from_list

Prend en entrée un chemin (fichier ou objet) vers une liste et un SRS (string) : la liste en entrée contient des chemins (fichier ou objet) vers des images. La fonction va récupérer pour chaque image de la liste les informations suivantes (a priori fait par la classe Raster) :

Elle tiendra à jour la liste des caractéristiques distinctes rencontrées (si toutes les images ont les mêmes, un seul élément) et la bbox globale.

Constructeur from_descriptor

Juste à partir du descripteur qui est écrit par la méthode d'instance, recharge toutes les informations. Il faut ajouter un constructeur de Raster à partir des informations sans lire le fichier source (si plusieurs descripteur, respecter la logique mise en place dans Pyramid ou Layer : from_descriptor, from_path, from_parameters, from_other pour un clone...)

Attributs

Méthode d'instance

Enrichissement

XavDmz commented 1 year ago

la bbox globale (attention, en 4326 on veut les latitudes en premier, ce que GDAL retourne de toute manière)

L'ordre des coordonnées dans la bbox globale en fonction du CRS risque d'être compliqué à gérer. Je n'ai pas encore trouvé comment avoir cette information grâce au module python osgeo.gdal.

Pour exemple, voici le retour de la fonction osgeo.gdal.Dataset.GetGeoTransform() selon la projection pour une même image :

XavDmz commented 1 year ago

Suite du commentaire précédent.

Les fonctions osgeo.gdal.Dataset.GetProjection(), osgeo.gdal.Dataset.GetProjectionRef(), et osgeo.gdal.Dataset.GetSpatialRef() retournent toutes trois une chaîne de caractère contenant des informations similaires sur le SRS ou CRS de la donnée. Parmis ces informations se trouvent les descriptions des axes du référentiel, dans l'ordre des coordonnées. Ça peut être un moyen de connaître l'ordre attendu, mais ce n'est pas idéal.

Exemple de substring décrivant les axes en retour de GetProjection() :

Le hic, c'est que ces informations concernent le CRS isolé de l'image. Comment utiliser les retours de GetGeoTransform() et GetProjection() pour savoir dans quel ordre exprimer la bbox ? Je ne sais pas.

XavDmz commented 1 year ago

J'ai une incertitude sur l'une des attributs de la classe, le tableau des caractéristiques des canaux.

Je vois ce tableau comme une liste dont chaque élement est un dictionnaire {'bands': int, 'format': ColorFormat}, mais je ne sais pas ce que doivent représenter les éléments dans le cas d'un set hétérogène. Doivent-ils représenter :

Dans tous ces cas, si le set est homogène la liste ne contient qu'un seul élément. Peut-être que j'ai mal compris et qu'aucune de ces propositions ne convient, mais j'ai de toute façon besoin de précisions sur ce point.

EDIT:

Effectivement, en relisant:

Elle tiendra à jour la liste des caractéristiques distinctes rencontrées (si toutes les images ont les mêmes, un seul élément) et la bbox globale.

Donc le dernier cas dans mes propositions.