Organisez vos notes. Le code suppose un shell interactif.
read_tif.py
import numpy as np
from osgeo import gdal, gdalconst, gdal_array
src = gdal.Open('inputfilepath', gdalconst.GA_ReadOnly) #Lire tif(read only)
type(src) # "osgeo.gdal.Dataset"
src.RasterXSize #Nombre de pixels horizontaux
src.RasterYSize #Nombre de pixels verticaux
src.RasterCount #Nombre de bandes
b1 = src.GetRasterBand(1).ReadAsArray() #Tableau numpy 1ère bande
b2 = src.GetRasterBand(2).ReadAsArray() #Tableau numpy 2e bande
b3 = src.GetRasterBand(3).ReadAsArray() #Tableau numpy 3ème bande
dtid = src.GetRasterBand(1).DataType #Numéro de modèle(ex: 6 -> numpy.float32)
gdal_array.GDALTypeCodeToNumericTypeCode(dtid) #Numéro de modèle->Conversion de nom de type
# others...
src.GetRasterBand(1).GetNoDataValue()
src.GetRasterBand(1).GetMinimum()
src.GetRasterBand(1).GetMaximum()
src.GetRasterBand(1).GetScale()
src.GetRasterBand(1).GetUnitType()
Pour les 5 derniers éléments, rien n'a été renvoyé du fichier que j'avais. Il peut s'agir de la valeur stockée dans l'adresse sous forme de métadonnées à l'avance. Bien sûr, il existe de nombreux cas où le traitement numpy après ReadAsArray () peut être géré.
read_info.py
src.GetDescription() #nom de fichier
src.GetGeoTransform() #6 nombres liés aux coordonnées(Voir ci-dessous)
src.GetProjection() #Coordonnées du système d'information
La signification de la séquence de nombres sortie par GetGeoTransform () est [Point de départ longitude de fin, Résolution ouest-est, Rotation (0 vers nord-sud), Latitude de fin du point de départ, Rotation (0 vers nord-sud), Résolution nord-sud (négative dans le sens nord-sud)].
Pour rechercher des concepts et des éléments de métadonnées dans Tiff, voir ci-dessous, par exemple. Pour les métadonnées principales, récupérez les métadonnées en utilisant le nom de la balise écrit ici. Format TIFF (1) | JProgramer Présentation du fichier CG, chapitre 5, section 1 GTiff -- GeoTIFF File Format
read_meta.py
src.GetMetadata() #Tableau de métadonnées de type dictionnaire
src.GetMetadataItem('itemname') #Spécification d'article(ex: 'TIFFTAG_XRESOLUTION', 'TIFFTAG_DATETIME', ..)
Suivez GTiff --GeoTIFF File Format. En particulier, veuillez noter que l'opération correcte peut ne pas être effectuée lors de l'utilisation de l'image par la suite, à moins que les paramètres ne soient correctement définis, y compris ceux spécifiés comme options. Par exemple, lors du traitement de l'image de sortie à l'aide d'un logiciel, ce logiciel peut se référer à certaines des métadonnées (balises) comme informations de base. Si les informations sont manquantes, cela peut ne pas fonctionner comme prévu et la cause doit être identifiée à chaque fois, sauf pour une compréhension approfondie du logiciel à l'avance. (La raison pour laquelle RVB est entré dans la balise d'interprétation photométrique dans le code ci-dessous est que je m'attendais à ce qu'elle soit dessinée comme une image couleur dans le logiciel utilisé, mais il y a un problème car il devient un affichage monochrome en utilisant la valeur de bande de la première couche. Parce qu'il y en avait.)
write_data.py
from osgeo import osr #Module de référence spatiale
dtype = gdal.GDT_Float32 #others: gdal.GDT_Byte, ...
band = 3 #Nombre de bandes
output = gdal.GetDriverByName('GTiff').Create('outputfilepath', xsize, ysize, band, dtype, options = ['PHOTOMETRIC=RGB']) #Fichier de sortie vide
output.SetGeoTransform((ul_x, h_res, 0, ul_y, 0, -v_res)) #Spécification du système de coordonnées
srs = osr.SpatialReference() #Informations de référence spatiale
srs.ImportFromEPSG(32648) # WGS84 UTM_Spécifiez le système de coordonnées pour 48n
output.SetProjection(srs.ExportToWkt()) #Combinez les informations spatiales
output.GetRasterBand(1).WriteArray(b1) #Exporter la bande rouge (b1 est un tableau 2D numpy)
output.GetRasterBand(2).WriteArray(b2) #Bande verte
output.GetRasterBand(3).WriteArray(b3) #Bande bleue
output.FlushCache() #Écrire sur le disque
output = None
Recommended Posts