9 votos

¿Cuál es la mejor manera de recortar un archivo ECW de gran tamaño?

Estoy tratando de recortar un gran ECW (detalles abajo) pero el archivo rasterizado es demasiado grande para ser procesado completamente.

A continuación, algunos detalles de la ECW

Conductor: ECW/ERDAS Compressed Wavelets (SDK 5.0)

tamaño del archivo: 50gb El tamaño es 450000, 565081 Tamaño de los píxeles: 0,15 0,15 COLORSPACE=RGB COMPRESSION_RATE_TARGET=9 VERSION=2 Número de bandas: 4

El área que quiero recortar es aproximadamente un 1/5 del archivo original.

Estos son los métodos que he probado sin éxito:

  1. Usé Arcgis para guardar el ecw a tiff / otros formatos... (Rápidamente me di por vencido)

  2. Utilizando Qgis y su herramienta de recorte... la creación de archivos se quedó estancada en un 40% aproximadamente.

  3. Usé gdal_translate de OSGeo4W con otras opciones que Qgis. (Intentado que el pensamiento que tal vez liberar algo de memoria no usar Qgis sería el truco)

  4. Utilicé gdal_retile pensando que cortaría la imagen en trozos y cogería el que quisiera. El comando "gdal_retile -ps 10000 10000 -of ecw -tileIndex tile.shp -targetDir input.ecw Esto se estrelló aún más rápido"

¿Alguien tiene una idea?

Para información corro windows 7 64bits en un i5-3470 3.2Ghz con 16gb de ram.

5voto

Steven Parkes Puntos 625

Puedes cortarlo directamente con la herramienta de gdal gdal_translate si conoce las coordenadas de su Área de Interés, si está georreferenciada:

gdal_translate -projwin [ulx uly lrx lry] infile outfile  

Si no utiliza el -srswin bandera como esta:

gdal_translate -srcwin [xoff yoff xsize ysize] infile outfile.

Otra opción es construir una trama "virtual" (de unos pocos kilobytes) que apunte a su conjunto de datos inicial, con gdalbuildvrt .

gdalbuildvrt -te [xmin ymin xmax ymax] infile outfile.vrt

Desgraciadamente, necesitará un archivo georreferenciado para utilizar gdalbuildvrt.

Después de recortar, no olvides crear pirámides para facilitar la visualización. El siguiente comando construirá pirámides externas comprimidas con el DEFLATE (sin pérdidas):

gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16

Como paso final puede calcular las estadísticas también para evitar algunos problemas estúpidos con un programa comercial particular:

gdalinfo -stats outfile

0 votos

Gracias por la respuesta nickves. He creado una trama virtual y he ejecutado <code>gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16</code> No estoy muy seguro de por qué me aparece el siguiente mensaje de error ERROR 1: No se puede crear un archivo TIFF porque falta el códec para DEFLATE. La construcción de la vista general ha fallado.

0 votos

Comprobar los errores qgis-bug:8782 y osge4w-bug:382 si describen su caso. Mientras tanto, intente crear los resúmenes sin ningún algoritmo de compresión, o elija otro .

0 votos

Parece que lo tenía funcionando en 2 pasos: gdaladdo -ro input.vrt 2 4 8 16 entonces gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE input.vrt 2 4 8 16 . Mi objetivo es terminar con un ECW así que intenté gdal_translate -of ECW input.vrt output.ecw y se obtiene el siguiente error : 0ERROR 6: GDALDriver::Create() ... no create method implemented for this format.

5voto

Nick Puntos 3115

Otras ideas que puedes probar:

  1. gdal_translate con la opción -srcwin
  2. gdalwarp con las opciones -cutline y -crop_to_cutline y -wm. El último especifica la memoria para el almacenamiento en caché y puede superar los problemas que tenía usando clipper en QGIS (ya que es esencialmente la misma función)
  3. Calculadora de rasterización de QGIS estableciendo la extensión al área que desee (más simple que el clipper).
  4. SAGA->Clip grid with polygon - quién sabe, podría ser más eficiente en cuanto a memoria.
  5. Codificar una solución usando Python y Numpy/SciPy para leer sólo un subconjunto del raster en la memoria y guardarlo.

Sospecho que hacer un recorte muy simple a la medida (ya sea con la calculadora de trama o -srcwin interruptor en gdal_translate) será menos memoria de hambre que el recorte con un polígono porque no tiene controles de geometría y las conversiones. La opción 5 es la que menos memoria consume, ya que sólo se lee lo que se necesita. Echa un vistazo a este tutorial si necesita un "cómo" (adapte la parte de lectura y escritura por bloques).

0 votos

Gracias por la respuesta. Probaré con SAGA y si no funciona probaré con Numpy.

0voto

JohannesH Puntos 3817

Un "clip" recto utilizando gdalwarp debería funcionar (sé que es una pregunta muy antigua: 18 meses en la vida real es como una época geológica en años de Internet).

Tengo una antena de 70Gb (ECW, 94000x81000 pixeles a 10cm/px), y GDAL puede recortarla arbitrariamente con un shapefile usando

gdalwarp -cutline [clipfile] -crop_to_cutline [infile] [outfile]

en la línea de comandos de Windows. (Me doy cuenta de que esta solución requiere la construcción de un shapefile para el área de interés objetivo, pero ese no es el mayor desafío conocido por los SIG).

Extraer un trozo de medio suburbio tarda unos 0,4 segundos; cortar el archivo en cuartos tarda 4 segundos. Las especificaciones de mi máquina no son muy diferentes (i7-4770 a 3,4 GHz, 16 GB de RAM, Win7-64 Ultimate).

0 votos

Ya se ha mencionado a gdalwarp. La información sobre el rendimiento y el tamaño específico de la imagen de ejemplo es una adición bienvenida, pero realmente esto debería ser un comentario a gis.stackexchange.com/a/74450/108 (y hacer una sugerencia de edición con la línea de comandos con formato de código también sería bienvenida; es más fácil de leer)

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