banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Tue 19 December 2023 01:55

GuillaumeL7
Juste Inscrit !
Date d'inscription: 18 Dec 2023
Messages: 1

QGIS: Extraction d'images PNG, depuis Geotiff pour creation database

Bonjour,

J'ai un grand nombre de cibles (environ 500 à 1500 par projet). Ces points sont référencés dans un .shp. Je dois enregistrer pour chaque contact une imagette, extraite d'un Géotiff. Pour le moment je le fait de maniére manuelle, ce qui est extrémement fastidieux. Je cherche donc le moyen d'automatiser le process sur Qgis.

Les contraintes sont:
- Imagettes centrées sur le point du .SHP
- Imagettes nommées selon le champ "ID_Unique" de la table attributaire du .shp
- Imagettes de format 500x400 px
- Imagettes au format .png

Au cours de mes recherches, je n'ai pas trouvé d'outil directement disponible pour faire ces extraits et me suis donc tourné vers python.

Mon code actuel:

from qgis.core import QgsVectorLayer, QgsRasterLayer, QgsProject
import geopandas as gpd
import rasterio
from rasterio.transform import from_origin
from PIL import Image
import numpy as np

# Fonction pour extraire et enregistrer les images
def extract_and_save_images(raster_path, shapefile_path, id_field_name, output_directory, width, height):
    raster_dataset = rasterio.open(raster_path)
    vector_layer = QgsVectorLayer(shapefile_path, "vector_layer", "ogr")

    for feature in vector_layer.getFeatures():
        geom = feature.geometry()
        bbox = geom.boundingBox()

        min_x, min_y, max_x, max_y = bbox.xMinimum(), bbox.yMinimum(), bbox.xMaximum(), bbox.yMaximum()
        window = raster_dataset.window(min_x, min_y, max_x, max_y)

        # Lecture des données raster dans la fenêtre spécifiée
        data = raster_dataset.read(window=window)

        # Conversion des données en tableau NumPy
        data_np = np.array(data)

        # Création d'une nouvelle image avec Pillow
        image = Image.fromarray(data_np)

        # Redimensionnement de l'image à la taille spécifiée
        resized_image = image.resize((width, height))

        # Enregistrement de l'image redimensionnée
        output_file = output_directory + f"\{feature[id_field_name]}.png"
        resized_image.save(output_file)

raster_path = "D:\TestImages\Merge_SSS_08+11.tif"
shapefile_path = "D:\TestImages\a.shp"
id_field_name = "ID_Unique"
output_directory = "D:\TestImages\output\"
width, height = 500, 400

# Appeler la fonction pour extraire et enregistrer les images
extract_and_save_images(raster_path, shapefile_path, id_field_name, output_directory, width, height)


J'enregistre ensuite ce code au format .py, puis l'appel dans la console Python avec:

exec(open('D:\Image_RasterioI.py').read())


Cette version est la 9ème de mon code et fait appel à de plus en plus de librarie, je suis probablement entrain de faire fausse route. Pourriez vous me conseiller sur la direction à prendre? ou tout simplement m'indiquer si un outil existe et que je l'ai raté?

En vous remerciant et vous souhaitant une excellente Journée,

Guillaume

Hors ligne

 

Pied de page des forums

Powered by FluxBB