banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 28 March 2017 13:08

alexelan
Juste Inscrit !
Date d'inscription: 3 Feb 2017
Messages: 1

QGIS 2.14.6 python: MemoryError fusion de raster

Bonjour,

Je dois fusionner des 7 rasters en partant du moins précis au plus précis (les plus précis écrasant les valeurs des moins précis). Je les ai tous recalé à la même taille.
Pour faire cette opération j'ai un script python dont je ne comprend rien et que je n'ai pas écrit mais qui devrait marcher.
Le problème c'est que la personne qui m'a laissé ce script n'est plus joignable et que quand je le lance je me retrouve bloqué avec un Memory Error.

Voici le script:

Code:

---------------------------- DEBUT DU SCRIPT--------------------------

import os
import gdal
import numpy
import osr
import sys

def raster2array(raster):
    band = raster.GetRasterBand(1)
    return band.ReadAsArray()
    
def getOrigin(raster):
    geotransform = raster.GetGeoTransform()
    return [geotransform[0], geotransform[3]]

def getLayers():
    return iface.legendInterface().layers()
    
def array2raster(rasterfn,newRasterfn,array, bitDepth = 7):
    raster = gdal.Open(rasterfn)
    geotransform = raster.GetGeoTransform()
    originX = geotransform[0]
    originY = geotransform[3]
    pixelWidth = geotransform[1]
    pixelHeight = geotransform[5]
    cols = raster.RasterXSize
    rows = raster.RasterYSize
    
    driver = gdal.GetDriverByName('HFA')
    outRaster = driver.Create(newRasterfn, cols, rows, 1, bitDepth)
    outRaster.SetGeoTransform((originX, pixelWidth, 0, originY, 0, pixelHeight))
    outband = outRaster.GetRasterBand(1)
    outband.WriteArray(array)
    outRasterSRS = osr.SpatialReference()
    outRasterSRS.ImportFromWkt(raster.GetProjectionRef())
    outRaster.SetProjection(outRasterSRS.ExportToWkt())
    outband.FlushCache()

gdal.UseExceptions()

# Get layers as they appear in the QGis Layers panel
layers = getLayers()

firstLayer = layers.pop()
firstRasterPath = firstLayer.dataProvider().dataSourceUri()
raster = gdal.Open(firstRasterPath)

print "Using "" + firstLayer.name() + "" as base layer"
origin = getOrigin(raster)

dest = raster2array(raster)

for layer in reversed(layers):
    print "Processing "" + layer.name() + ""."
    provider = layer.dataProvider()
    path = provider.dataSourceUri()
    raster = gdal.Open(path)
    layerOrigin = getOrigin(raster)
    layerData = raster2array(raster)
    
    dest = numpy.where(numpy.logical_and(0 < layerData, layerData

Hors ligne

 

Pied de page des forums

Powered by FluxBB