Suite

Comment extraire les coordonnées d'un raster dans QGIS


J'ai la base de données mondiale harmonisée des sols au format raster (tif). Je souhaite extraire les coordonnées (centres des cellules en lon/lat) ainsi que la valeur du champ afin de les lier aux données de sol contenues dans le fichier mdb.

Existe-t-il un moyen d'extraire les coordonnées d'un fichier raster ?


Oui, il est possible d'extraire un shapefile mais il est très difficile à manipuler car il faut beaucoup de mémoire. Il est préférable de "graver" ces coordonnées en deux raster (un pour chaque valeurs de coordonnées ; x et y).

Cependant, j'ai essayé de produire le "shapefile" (en fait un "thème d'événement" à partir d'un fichier texte) avec l'approche suivante. Tout d'abord, j'ai sélectionné une zone arbitraire (au Brésil) avec votre numéro de cellule exact (2105x1388) et j'ai aidé avec mes deux plugins (comme on peut le voir sur l'image suivante).

Avec le prochain code exécuté sur la console Python de QGIS, j'ai obtenu un fichier texte à charger dans QGIS.

layer = iface.activeLayer() extend = layer.extent() xmin = extend.xMinimum() ymax = extend.yMaximum() rows = layer.height() colonnes = layer.width() xsize = layer.rasterUnitsPerPixelX() ysize = layer.rasterUnitsPerPixelY() k = 1 xinit = xmin + xsize/2 yinit = ymax - ysize/2 pfile = open('points.txt', 'w') pfile.write('id xy 
') print " Traitement… " for i in range(rows): for j in range(columns): x = xinit + j*xsize y = yinit pfile.write(str(k) + " " + str(x) + " " + str (y) + "
") k +=1 xinit = xmin + xsize/2 yinit -= ysize pfile.close()

Sur l'image suivante, vous pouvez observer une couche de points (centres de cellules en lon/lat) créée sous forme de fichier texte délimité mais, elle est très difficile à manipuler. C'est possible mais peu pratique.

Remarque sur l'édition :

Le code suivant ajoute les valeurs raster au fichier texte :

depuis osgeo import gdal import os layer = iface.activeLayer() provider = layer.dataProvider() my_path = provider.dataSourceUri() dataset = gdal.Open(my_path) band = dataset.GetRasterBand(1) data = band.ReadAsArray(0 , 0, band.XSize, band.YSize) extent = layer.extent() xmin = extend.xMinimum() ymax = extend.yMaximum() rows = layer.height() Columns = layer.width() xsize = layer. rasterUnitsPerPixelX() ysize = layer.rasterUnitsPerPixelY() k = 1 xinit = xmin + xsize/2 yinit = ymax - ysize/2 pfile = open('points.txt', 'w') pfile.write('id xy 
 ') print "Processing… " for i in range(rows): for j in range(columns): x = xinit + j*xsize y = yinit pfile.write(str(k) + " " + str(x) + " " + str(y) + " " + str(data[i][j]) + "
") k +=1 xinit = xmin + xsize/2 yinit -= ysize pfile.close() dataset = Aucun impression "Terminé !"


Voir la vidéo: télécharger les fichiers de formes Shapefiles de quel zone de monde (Octobre 2021).