2014-06-26 8 views
1

J'essaie d'enregistrer une sortie de tableau numérique sous forme de GeoTiff, et le code s'exécute généralement avec succès, mais l'image de sortie a une échelle sépia pour les données (au lieu d'un schéma de couleurs normal comme mon code produit pour l'image), et un fond noir (au lieu du fond blanc/sans données que mon code produit pour l'image).Enregistrement de GeoTiff avec le schéma de couleurs

Voici le code pour enregistrer mon tableau dans un GeoTiff. Puis-je ajouter une ligne quelque part sur la façon de faire no-data = 0, et de faire colorer le schéma de données?

from osgeo import gdal, osr, ogr, os 
from gdalconst import * 

def array2raster(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,array): 

    cols = array.shape[1] 
    rows = array.shape[0] 
    originX = rasterOrigin[0] 
    originY = rasterOrigin[1] 

    driver = gdal.GetDriverByName('GTiff') 
    outRaster = driver.Create(newRasterfn, cols, rows, 1, gdal.GDT_Float32) 
    outRaster.SetGeoTransform((originX, pixelWidth, 0, originY, 0, pixelHeight)) 
    outband = outRaster.GetRasterBand(1) 
    outband.WriteArray(array) 
    # outRaster = driver.Create('CORDC_GTIFF/working_CA.tiff', 300, 300, 1,  gdal.GDT_Int32) 
    proj = osr.SpatialReference() 
    proj.ImportFromEPSG(4326) 
    outRaster.SetProjection(proj.ExportToWkt()) 
    # geotransform = (1,0.1,0,40,0,0.1) 


rasterOrigin = (-127,42) 
pixelWidth = .01 
pixelHeight = .01 
newRasterfn = 'CORDC_GTIFF/cordc_working_CA.tif' 
array = np.array(spd) 


reversed_arr = array[::-1] # reverse array so the tif looks like the array 
array2raster(newRasterfn,rasterOrigin,pixelWidth,pixelHeight,reversed_arr) # convert array to raster 
+0

Il pourrait être utile si vous pouviez ajouter l'image correcte et l'image avec le mauvais schéma de couleurs. De cette façon, même les utilisateurs sans la possibilité d'exécuter votre code pourraient être en mesure d'identifier ce qui ne va pas. – DrV

Répondre

1

Vous pouvez définir la valeur no de données en utilisant la méthode de la bande SetNoDataValue:

outband = outRaster.GetRasterBand(1) 
outband.SetNoDataValue(0) 
outband.WriteArray(array) 

zones correspondant à la valeur no de données doivent alors être affichés sous forme transparente

+0

Merci! SetNoDataValue a semblé faire l'affaire (je l'avais déjà fait auparavant, mais je n'avais pas dû régler quelque chose correctement, parce que ça ne fonctionnait pas. – user3495045

Questions connexes