Pages: 1
- Sujet précédent - QGIS: Extraction d'images PNG, depuis Geotiff pour creation database - Sujet suivant
#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
Pages: 1
- Sujet précédent - QGIS: Extraction d'images PNG, depuis Geotiff pour creation database - Sujet suivant