Mais

Python-gdal cria geotiff da matriz com mapeamento de cores

Python-gdal cria geotiff da matriz com mapeamento de cores


Estou criando arquivos geotiff em tons de cinza de canal único a partir de matrizes numpy com o módulo abaixo, mas gostaria de aplicar um mapa de cores padrão aos dados. Tentei três canais de R, B e G e não tive sucesso se produzisse algo que parecesse correto. Estou pensando que minha abordagem, em geral, é falha.

Como posso ir de tons de cinza para geotiffs coloridos?

def geotiff_output (outfile, mag_grid, lons, lats): # ********************* Teste *************** ************ de 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,) # isso assume que a projeção é Geográfica lat / lon 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 sem pontos de dados… mag_grid1 = np.ma. masked_where (mag_grid == - 99., mag_grid) #assign valores de dados reais para inclusão em metadados outband.SetStatistics (np.round (np.min (mag_grid1), decimais = 4), np.round (np.max (mag_grid1) , decimais = 4), np.round (np.mean (mag_grid1), decimais = 4), np.round (np.std (mag_grid1), decimais = 4)) #normalize a matriz y para uma escala de 0-255 se np.min (mag_grid1) <0: mag_grid1 = mag_grid1 + np.abs (np.min (mag_grid1)) #Normalize a matriz para uma escala de 0-255 para o canal raster mag_grid2 = ((mag_grid1 - np.min (mag_grid1)) / (np.max (mag_grid1) - np.min (mag_grid1))) * 256 outband.WriteArray (mag_grid2) ds = Nenhum

Seguindo o link no comentário de @kersten, encontrei este https://svn.osgeo.org/gdal/trunk/autotest/gcore/tiff_write.py com muitos trechos interessantes. Acho que o que você quer fazer é o seguinte:

… Ct = gdal.ColorTable () # Alguns exemplos 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)) # Defina a tabela de cores para sua banda de saída de banda.SetColorTable (color_table)…

Além disso, você pode querer usar CreateColorRamp


Assista o vídeo: Baixar raster de uso e cobertura do Mapbiomas e abrir no QGIS