1 votos

Lectura de datos que anulan los datos escritos

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

1voto

Lucas Puntos 128

Es necesario cerrar el conjunto de datos para descargar las escrituras en el archivo:

del band,  dstFile

Véase la sección "Guardar y cerrar conjuntos de datos/fuentes de datos" del GDAL Python Gotchas :

Para guardar y cerrar los conjuntos de datos ráster de GDAL o las fuentes de datos vectoriales de OGR, es necesario desreferenciar el objeto, por ejemplo, poniéndolo en Ninguno, en un valor diferente o borrando el objeto. Si hay más de una copia del conjunto de datos o del objeto fuente de datos, es necesario eliminar la referencia de cada copia.

La última dereferencia al conjunto de datos ráster escribe las modificaciones de los datos y cierra el archivo ráster. WriteArray(arr) no escribe la matriz en el disco, a menos que la caché de bloques de GDAL esté llena (normalmente 40 MB).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X