1 votos

GDAL 2.2.2 ¿Comprobar que todos los valores NoData de un directorio de tifs son iguales?

¿Cómo compruebo si todos los valores NoData de mis rasters (.tif) son los mismos en un directorio en un python script/línea de comandos/bash usando ubuntu?

Estoy usando Ubuntu 16.4 LTS y usando la línea de comandos de la terminal para ver y editar los rastreos.

Estos rásteres serán procesados y el área con valores será eventualmente poligonizada, los valores NoData tendrán que ser los mismos por lo tanto necesito verificarlos.

También mis valores NoData para cada uno de los archivos tif no se muestran como una banda rasterizada, están incrustados en el propio archivo;

RasterBand

6voto

Flinkman Puntos 4821

Sólo hay que hacer algunas cosas básicas:

  1. Iterar: Estoy usando os.walk que listará todos los archivos en la carpeta nominada y todas las subcarpetas , comprobando la extensión de los archivos localizados para asegurar que el script sólo intenta abrir imágenes. Podría usar os.listdir() si no quiere encontrar todos los archivos en el árbol de carpetas.
  2. Abra el conjunto de datos: usando gdal.Open o gdal.OpenShared y obtenga la primera banda (el índice es 1 ya que las bandas están basadas en 1).
  3. Obtener el valor de NoData como un objeto e imprimirlo.

Antes de intentar ejecutar esto, asegúrese de que GDAL está instalado con enlaces de python o recibirá un error en la línea 2.

import os, sys
from osgeo import gdal # import the GDAL object, please ensure this is installed in your python

AllowedImageExtensions = ['.TIF','.IMG'] # Add new image extensions here in UPPER CASE

BaseFolder = sys.argv[1] # the first argument, if you like replace with a defined path.

for (curPath,Folders,Files) in os.walk(BaseFolder):
    for thisFile in Files:
        bName, bExt = os.path.splitext(thisFile) # break the file name into 'name', '.ext'
        if bExt.upper() in AllowedImageExtensions:
            # file has the right extension to be a raster
            ds  = gdal.Open(os.path.join(curPath,thisFile)) # open the dataset with the full path
            bnd = ds.GetRasterBand(1) # get the first band
            NoDat = bnd.GetNoDataValue()
            print( "{} :: {}".format( os.path.join(curPath,thisFile),NoDat))

Si su QGIS tiene una ventana de python debería poder ejecutarse desde allí, pero sustituya la línea BaseFolder = sys.argv[1] con BaseFolder = '/your/path' .

6voto

Kristi Puntos 1

Si estás en Linux o Mac, no se necesita Python.
El siguiente bash script lo hará:

for f in *.tif; do
    gdalinfo "$f" | grep -o 'NoData Value\=[-0-9]*' || echo "NoData Value=None";
done | uniq

Esto produce una línea por cada valor único de NoData encontrado en *.tif .

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