La meilleure façon de découper un gros fichier ECW raster?

9

J'essaie de couper une grande ECW (détails ci-dessous) mais le fichier raster est trop gros pour être entièrement traité.

Quelques détails de l'ECW ci-dessous

Pilote: ondelettes compressées ECW / ERDAS (SDK 5.0)

taille du fichier: 50 Go La taille est 450000, 565081 Taille des pixels: 0,15 0,15 ESPACE COULEUR = RVB COMPRESSION_RATE_TARGET = 9 VERSION = 2 Nombre de bandes: 4

La zone que je souhaite découper représente environ 1/5 du fichier d'origine.

Voici les méthodes que j'ai essayées sans succès:

  1. Arcgis utilisé pour enregistrer l'ecw en tiff / autres formats ... (j'ai rapidement abandonné)

  2. Utilisé Qgis et son outil de clipper ... la création de fichiers est restée bloquée à environ 40%.

  3. Gdal_translate utilisé depuis OSGeo4W avec d'autres options que Qgis. (J'ai essayé de penser que PEUT-ÊTRE libérer de la mémoire sans utiliser Qgis serait l'astuce)

  4. J'ai utilisé gdal_retile en pensant que je couperais l'image en morceaux et prendrais celle que je voulais. La commande "gdal_retile -ps 10000 10000 -of ecw -tileIndex tile.shp -targetDir input.ecw Cela s'est écrasé encore plus rapidement"

est-ce que quelqu'un a une idée?

Pour info je lance windows 7 64bits sur un i5-3470 3.2Ghz avec 16gb de ram.

Bleu
la source

Réponses:

5

Autres idées que vous pourriez essayer:

  1. gdal_translate avec le commutateur -srcwin
  2. gdalwarp avec les commutateurs -cutline et -crop_to_cutline et -wm. Le dernier spécifie la mémoire pour la mise en cache et peut vous aider à surmonter les problèmes que vous avez rencontrés avec Clipper dans QGIS (car il s'agit essentiellement de la même fonction)
  3. Calculatrice raster QGIS définissant l'étendue de la zone souhaitée (plus simple que clipper).
  4. SAGA-> Couper la grille avec un polygone - qui sait, cela pourrait être plus efficace en mémoire.
  5. Codez une solution à l'aide de Python et Numpy / SciPy pour lire uniquement un sous-ensemble du raster en mémoire et l'enregistrer.

Je soupçonne que faire un recadrage très simple (avec la calculatrice raster ou le commutateur -srcwin dans gdal_translate) sera moins gourmand en mémoire que le recadrage avec un polygone parce que vous n'avez pas de vérifications et de conversions de géométrie. L'option 5 devrait utiliser le moins de mémoire possible car vous ne lisez que ce dont vous avez besoin. Jetez un oeil à ce tutoriel si vous avez besoin d'un «comment faire» (adapter le bit sur la lecture et l'écriture par bloc).

MappaGnosis
la source
Merci d'avoir répondu! Je vais essayer SAGA et si ça ne marche pas, je vais essayer Numpy.
Blue
5

Vous pouvez le couper directement avec l'outil de gdal gdal_translate si vous connaissez les coordonnées de votre zone d'intérêt, si elle est géoréférencée:

gdal_translate -projwin [ulx uly lrx lry] infile outfile  

Sinon, utilisez le -srswindrapeau comme ceci:

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

Une autre option consiste à créer un raster «virtuel» (de quelques kilo-octets) qui pointe vers votre jeu de données initial, avec gdalbuildvrt .

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

Malheureusement, vous aurez besoin d'un fichier géoréférencé pour utiliser gdalbuildvrt.

Après avoir découpé, n'oubliez pas de créer des pyramides pour une visualisation facile. La commande suivante créera des pyramides externes compressées avec le algorithme DEFLATE (sans perte):

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

Comme dernière étape, vous pouvez également calculer les statistiques pour éviter certains problèmes stupides avec un programme commercial particulier:

gdalinfo -stats outfile
nickves
la source
Merci pour la réponse nickves. J'ai construit un raster virtuel et exécuté <code> gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16 </code> Je ne sais pas trop pourquoi j'ai reçu le message d'erreur suivant ERREUR 1: Impossible de créer un fichier TIFF en raison de l'absence codec pour DEFLATE. La construction de l'aperçu a échoué.
Blue
Vérifiez les bogues qgis-bug: 8782 et osge4w-bug: 382 s'ils décrivent votre cas. En attendant, essayez de créer les aperçus sans aucun algorithme de compression, ou choisissez-en un autre .
nickves
on dirait que je l'ai fait fonctionner en 2 étapes: gdaladdo -ro input.vrt 2 4 8 16ensuite gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE input.vrt 2 4 8 16. Mon objectif est de me retrouver avec une ECW, j'ai donc essayé gdal_translate -of ECW input.vrt output.ecw et obtenu l'erreur suivante:0ERROR 6: GDALDriver::Create() ... no create method implemented for this format.
Blue
@blue ECW est un format propriétaire et nécessite un traitement spécial. Veuillez d'abord vérifier si gdal peut écrire en ECW avec gdalinfo --formats. Si vous ne voyez pas l'ECW dans la liste, essayez ces instructions: faunalia.pt/node/438
nickves
0

Un «clip» droit utilisant gdalwarp devrait fonctionner (je sais que c'est une vieille question: 18 mois IRL est comme une époque géologique dans les années Internet).

J'ai une antenne de 70 Go (ECW, 94000x81000 pixel à 10 cm / px), et GDAL peut la couper arbitrairement avec un fichier de formes en utilisant

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

sur la ligne de commande Windows. (Je me rends compte que cette solution nécessite la création d'un fichier de formes pour la zone d'intérêt cible, mais ce n'est pas le plus grand défi connu du SIG).

Pour extraire un morceau de la moitié d'une banlieue, il faut ~ 0,4 sec; couper le fichier en quartiers prend 4 secondes. Les spécifications de ma machine ne sont pas radicalement différentes (i7-4770 @ 3,4 GHz, 16 Go de RAM, Win7-64 Ultimate).

GT.
la source
gdalwarp a déjà été mentionné. Les informations sur les performances et la taille d'image d'exemple spécifique sont un ajout bienvenu, mais cela devrait vraiment être un commentaire à gis.stackexchange.com/a/74450/108 (et effectuer une modification suggérée avec la ligne de commande avec un formatage de code serait également le bienvenu. ; il est plus facile à lire)
matt wilkie