Suite

Pilote Gdal.Créer TypeError

Pilote Gdal.Créer TypeError


J'ai écrit un script python pour convertir une grille ascii en un fichier geotiff et lors de l'exécution de la méthode Create dans gdal, je reçois le message d'erreur suivant :

[email protected]:~/Smells$ python SmellsGeoTag.py ./SmellsTestData/test3/input/tile_1 ./output Traceback (appel le plus récent en dernier) : Fichier "SmellsGeoTag.py", ligne 47, dans  dst_ds = driver.Create(out , ncols, nrows, 1, gdal.GDT_Float32 ) Fichier "/usr/local/lib/python2.7/dist-packages/GDAL-1.11.0-py2.7-linux-x86_64.egg /osgeo/gdal.py", ligne 394, dans Create return _gdal.Driver_Create(self, *args, **kwargs) TypeError : dans la méthode 'Driver_Create', argument 3 de type 'int'

Cependant, contrairement au problème ici, mes valeurs ncols et nrows sont des entiers non nuls, je suis donc plutôt perplexe quant à la nature du problème

code source:

#!/usr/bin/python import sys, getopt, os, numpy from osgeo import osr, gdal if len(sys.argv) != 3: print ("Veuillez utiliser les arguments suivants : chemin d'entrée, chemin de sortie"); sortir(); inRoot = sys.argv[1] outRoot = sys.argv[2] #trouver des fichiers valides potentialDates = os.listdir(inRoot) dates = [] for i in potentialDates: if os.path.isdir(os.path.join( inRoot, i)): dates.append(i) pour i dans les dates : potentialFiles = [] files = [] potentialFiles = os.listdir(os.path.join(inRoot, i)) pour x dans potentialFiles : si x. endswith(".asc") : files.append(x) #traitement de chaque fichier valide trouvé pour y dans les fichiers : avec open(os.path.join(inRoot, i, y), "r") as f: linelist = [ligne pour ligne en f] indésirable, xllcorner = linelist.pop(0).split() float(xllcorner) indésirable, yllcorner = linelist.pop(0).split() float(yllcorner) indésirable, ncols = linelist.pop (0).split() int(ncols) indésirable, nrows = linelist.pop(0).split() int(nrows) indésirable, cellsize = linelist.pop(0).split() float(cellsize) indésirable, nodataval = linelist.pop(0).split() float(nodataval) data = [[float(digit) for digit in line.split()]for line in linelist] driver = gdal.GetDriverByName("GTiff") sinon os .path.exists(os.path.join(outRoot,i)): os.makedirs(os.path.j oin(outRoot,i)) out = os.path.join(outRoot,i,y+".tif") dst_ds = driver.Create(out , ncols, nrows, 1, gdal.GDT_Float32 ) dst_ds.SetGeoTransform( [xllcorner, cellsize,0,yllcorner,0,cellsize] ) # définir les informations de référence srs = osr.SpatialReference() srs.SetWellKnownGeogCS("WGS84") dst_ds.SetProjection( srs.ExportToWkt() ) # écrire la bande dst_ds.GetRasterBand(1 ).WriteArray(données) exit()

Les valeursncols,nrowstu passes àpilote.Créersont toujours des chaînes et non des valeurs entières. Après avoir lu dans lencolsvariable dans

indésirable, ncols = linelist.pop(0).split()

lesncolscontient une chaîne avec votre valeur. La ligne aprèsentier(ncols)le convertit en unentiermais vous ne stockez pas son résultat (entier()fonction ne change pas la valeur en place), vous devez donc écrire cette ligne comme:

ncols = int(ncols)

En cas de doute, vous pouvez sortir le type de chaque variable avant lepilote.Créer(… )appelez par exemple avec :

print 'ncols:', type(ncols), ' - nrows:', type(nrows)

J'espère que cela t'aides.

P.S. En passant : juste au cas où, je ne sais pas si le programme gdal_translate pourrait vous aider à faire la conversion raster ASCII en GeoTiff. Il est conçu pour convertir un fichier Raster en un autre, et il peut être utilisé pour faire des traductions de format simples, entre autres. Les formats Raster disponibles sont ici.


Étant donné que GDAL peut lire les grilles ASCII nativement, vous n'avez pas besoin de l'analyser, utilisez simplement GDAL pour l'ouvrir, puis utilisez la méthode CreateCopy du pilote GeoTIFF.

#!/usr/bin/python import sys, getopt, os, numpy from osgeo import osr, gdal if len(sys.argv) != 3: print ("Veuillez utiliser les arguments suivants : chemin d'entrée, chemin de sortie"); sortir(); inRoot = sys.argv[1] outRoot = sys.argv[2] #Gagnez un peu de temps en ne créant ces objets qu'une seule fois. driver = gdal.GetDriverByName("GTiff") # définir les informations de référence srs = osr.SpatialReference() srs.SetWellKnownGeogCS("WGS84") #trouver des fichiers valides potentialDates = os.listdir(inRoot) dates = [] pour i dans potentialDates : if os.path.isdir(os.path.join(inRoot, i)): dates.append(i) for i in dates: potentialFiles = [] files = [] potentialFiles = os.listdir(os.path.join (inRoot, i)) for x in potentialFiles : if x.endswith(".asc") : files.append(x) #traitement de chaque fichier valide trouvé pour y dans les fichiers : ds = gdal.Open(os.path.join (inRoot, i, y)) sinon os.path.exists(os.path.join(outRoot,i)): os.makedirs(os.path.join(outRoot,i)) out = os.path.join (outRoot,i,y+".tif") dst_ds = driver.CreateCopy(out, ds) dst_ds.SetProjection( srs.ExportToWkt() ) del dst_ds #Ferme le dataset pour finaliser l'écriture

Voir la vidéo: Использование GDAL OGR в C#. Установка и настройка Using GDAL OGR via C#. Install u0026 configure