6 votos

GDAL_translate: conversión de ESRI GRID a Geotiff en lote

El reto: Para convertir por lotes 1000 rasters en ESRI Grid binario a Geotiff utilizando un archivo por lotes o Python 2.7 sin el módulo ArcGIS/Arcpy.

Las herramientas: Win7Pro, GDAL 1.9.2 (a través de OSGeo4W), python 2.6/2.7, 1000 Grid rasters binarios de ESRI (ver imagen)

Estructura de los archivos:

File structure

Conversión de un solo archivo: (pedazo de pastel)

gdal_translate GRID1 -of GTiff GRID1.tif

Ruta de los lotes:

for %i in (*.img) do gdal_translate -of GTiff %i %~SourceFilename.tif

El problema: Los Grids de ESRI no tienen una extensión de archivo y en su lugar son tratados como directorios de archivos por el sistema operativo. Necesito encontrar una forma alternativa de iterar. Mi única opción parece ser iterar por directorio ya que (hasta donde yo sé) no hay ningún método (hasta donde yo sé) para leer las GRIDs en una variable como el uso del método ArcPy: rasters = arcpy.listRasters("*", "GRID")

¿Alguien tiene alguna sugerencia sobre cómo modificar la parte (*.img) del código para que el bucle lea cada directorio GRID como un objeto de archivo para que pueda iterar utilizando el bucle for publicado anteriormente? Nota: También soy consciente de que tendré que añadir el parámetro para la recursión al archivo por lotes y posiblemente ignorar todos los directorios con el nombre "info".

Sé que podría utilizar arcpy y python para llevar a cabo esta tarea, pero no estaba satisfecho con los resultados en google de cómo convertir por lotes ESRI GRIDs con sólo GDAL y tal vez python. Agradezco cualquier consejo.

5voto

Lucas Puntos 128

Podrías script en python con os.walk, fnmatch y subprocess.Popen. Alternativamente, aquí hay un archivo por lotes para hacer lo mismo.

La clave es que gdal puede utilizar tanto el nombre de la red (directorio) como el nombre de la red \hdr.adf para abrir la parrilla. Para diferenciar los directorios de cobertura de cuadrículas y vectores, el bucle for busca w*.adf, ya que sólo se encuentran en rejillas .

@echo off
SET startpath=%1
FOR /R %startpath% %%f IN (w*1.adf) do (call :translate "%%f")
pause
GOTO :eof

:translate
  SET var=%~dp1
  ECHO Translating %var%hdr.adf to %var:~0,-1%.tif
  gdal_translate %var%hdr.adf %var:~0,-1%.tif

Edición: acabo de probar y he descubierto que gdal también puede leer la rejilla cuando se le pasa el archivo w001001.adf, así como el nombre del directorio y el archivo hdr.adf.

1voto

nd. Puntos 231

Para Linux es algo así como

#!/bin/bash
for FILE in arcgis_folders_here/*
do
  echo "Processing $FILE file..."
  gdal_translate -a_srs "+proj=tmerc +lat_0=39.668258 +lon_0=-8.133108 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs" -of GTiff $FILE $FILE.tif
done

simplemente reemplazar

"+proj=tmerc +lat_0=39.668258 +lon_0=-8.133108 +k=1 +x_0=0 +y_0=0 +ellps=GRS80 +units=m +no_defs"

con el SIR de sus datos

0voto

MEDVIS Puntos 176

Puedes usar el batch_gdal_translate() (paquete R: gdalUtils) de QGIS usando Qgis-Processing-R. Abra la caja de herramientas de Processing, vaya a R scripts -> Herramientas -> Crear nuevo R script y pegue el código de abajo.

(No olvides instalar gdalUtils en R, de lo contrario no funcionará)

##Input = folder
##Output =folder
library(gdalUtils)
batch_gdal_translate(infiles=Input,outdir=Output,outsuffix="")

Input -> es la carpeta donde se encuentran los rásteres ESRI. Borre todo lo demás dentro de esta carpeta

Salida -> carpeta donde quiere guardar el .tiff recién creado

Los nombres de los rasters se conservarán.

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