Actualmente estoy aprendiendo SIG en Python a través de bibliotecas como GDAL, etc. Estoy siguiendo el libro Python Geospatial Development. En uno de los ejercicios creamos un ráster lleno de números aleatorios. Sin embargo, cuando luego intento acceder a él con el método readraster, me devuelve un array de ceros. El código exacto es:
para escribir la trama:
from osgeo import gdal
driver = gdal.GetDriverByName("GTIFF")
dstFile = driver.Create("Example Raster.tiff", 360, 180, 1,
gdal.GDT_Int16)
#specifying projection
from gdal import osr
spatialReference = osr.SpatialReference()
spatialReference.SetWellKnownGeogCS("WGS84")
dstFile.SetProjection(spatialReference.ExportToWkt())
#specifying georeferencing transform
originX = -180
originY = 90
cellWidth = 1.0
cellHeight = 1.0
dstFile.SetGeoTransform([originX, cellWidth, 0,
originY, 0, -cellHeight])
band = dstFile.GetRasterBand(1)
import random
values = []
for row in range(180):
row_data = []
for col in range(360):
row_data.append(random.randint(1, 100))
values.append(row_data)
import struct
fmt = "<" + ("h" * band.XSize)
for row in range(180):
scanline = struct.pack(fmt, *values[row])
band.WriteRaster(0, row, 360, 1, scanline)
Y luego para leer la trama:
from osgeo import gdal
srcFile = gdal.Open("Example Raster.tiff")
band = srcFile.GetRasterBand(1)
import struct
fmt = "<" + ("h" * band.XSize)
for row in range(band.YSize):
scanline = band.ReadRaster(0, row, band.XSize, 1,
band.XSize, 1,
band.DataType)
row_data = struct.unpack(fmt, scanline)
print row_data