Suite

Python-gdal crée geotiff à partir d'un tableau avec mappage des couleurs

Python-gdal crée geotiff à partir d'un tableau avec mappage des couleurs


Je crée des fichiers geotiff à un seul canal en niveaux de gris à partir de tableaux numpy avec le module ci-dessous, mais j'aimerais appliquer une palette de couleurs assez standard aux données. J'ai essayé trois canaux de R, B et G et je n'ai eu aucun succès si je produis quelque chose qui semble correct. Je pense que mon approche, en général, est imparfaite.

Comment passer des niveaux de gris aux géotiffs colorés ?

def geotiff_output(outfile, mag_grid, lons, lats): #*********************Test*************** ************ d'osgeo import gdal, osr, ogr xres = lons[1] - lons[0] yres = lats[1] - lats[0] ysize = len(lats) xsize = len(lons) ulx = lons[0] - (xres / 2.) uly = lats[-1] - (yres / 2.) driver = gdal.GetDriverByName('GTiff') ds = driver.Create(sc_settings.dynamic_folder_script + outfile[:-4] + ".tif", xsize, ysize, 1, gdal.GDT_Byte, ) # cela suppose que la projection est lat/lon géographique WGS 84 srs = osr.SpatialReference() srs.ImportFromEPSG(4326) ds .SetProjection(srs.ExportToWkt()) gt = [ulx, xres, 0, uly, 0, yres ] ds.SetGeoTransform(gt) outband=ds.GetRasterBand(1) #mask pas de points de données… mag_grid1 = np.ma. masked_where(mag_grid==-99.,mag_grid) #attribuer les valeurs de données réelles à inclure dans les métadonnées hors bande.SetStatistics(np.round(np.min(mag_grid1),decimals=4), np.round(np.max(mag_grid1) ,decimals=4), np.round(np.mean(mag_grid1),decimals=4), np.round(np.std(mag_grid1),decimals=4)) #normaliser l'arra y à une échelle de 0-255 si np.min(mag_grid1) < 0 : mag_grid1 = mag_grid1 + np.abs(np.min(mag_grid1)) #Normalize le tableau à une échelle de 0-255 pour le canal raster mag_grid2 = ((mag_grid1 - np.min(mag_grid1))/(np.max(mag_grid1) - np.min(mag_grid1)))*256 hors bande.WriteArray(mag_grid2) ds = Aucun

En suivant le lien dans le commentaire de @kersten, j'ai trouvé ceci https://svn.osgeo.org/gdal/trunk/autotest/gcore/tiff_write.py avec beaucoup d'extraits intéressants. Je pense que ce que tu veux faire c'est ça :

… ct = gdal.ColorTable() # Quelques exemples ct.SetColorEntry( 0, (0, 0, 0, 255) ) ct.SetColorEntry( 1, (0, 255, 0, 255) ) ct.SetColorEntry( 2, ( 255, 0, 0, 255) ) ct.SetColorEntry( 3, (255, 0, 255, 255) ) # Définir la table des couleurs pour votre bande hors-bande.SetColorTable(color_table)…

Vous pouvez également utiliser CreateColorRamp


Voir la vidéo: Read and write raster files with GDAL in Python