Büyük bir raster ECW dosyasını kırpmanın en iyi yolu?


9

Ben büyük bir ECW (aşağıda ayrıntıları) klip çalışıyorum ama raster dosyası tamamen işlenmek için çok büyük.

ECW'nin bazı detayları aşağıda

Sürücü: ECW / ERDAS Sıkıştırılmış Dalgacıklar (SDK 5.0)

dosya boyutu: 50gb Boyut 450000, 565081 Piksel boyutu: 0.15 0.15 COLORSPACE = RGB COMPRESSION_RATE_TARGET = 9 SÜRÜM = 2 Bant sayısı: 4

Kesmek istediğim alan kabaca orijinal dosyanın 1 / 5'i.

İşte başarılı olmadan denedim yöntemler:

  1. ECW'yi tiff / diğer formatlara kaydetmek için kullanılır ... (Hızla vazgeçtim)

  2. Qgis ve kesme aracı kullanıldı ... dosya oluşturma yaklaşık% 40 oranında kaldı.

  3. Qgis dışındaki seçeneklerle OSGeo4W dışında gdal_translate kullanılır. (QAY'ler kullanmayan bazı hafızayı serbest bırakabilmeyi düşünmek,

  4. Gdal_retile görüntüyü parçalar halinde kesip istediğimi yakalayacağımı düşünüyordum. "Gdal_retile -ps 10000 10000 -of ec -tileIndex tile.shp -targetDir input.ecw Bu daha da hızlı çöktü"

Bir fikri olan var mı?

Bilgi için i5-3470 3.2Ghz üzerinde 16GB RAM ile Windows 7 64bit çalıştırıyorum.

Yanıtlar:


5

Deneyebileceğiniz diğer fikirler:

  1. -srcwin anahtarıyla gdal_translate
  2. -cutline ve -crop_to_cutline ve -wm anahtarlarıyla gdalwarp. Sonuncusu önbellek için belleği belirtir ve QGIS'de kesme makinesini kullandığınız sorunları aşmanıza neden olabilir (bu aslında aynı işlevdir)
  3. QGIS raster hesap makinesi, istediğiniz alanı (kesme makinesinden daha basit) ayarlıyor.
  4. SAGA-> Çokgenli klips ızgarası - kim bilir, bellekte daha verimli olabilir.
  5. Rasterin sadece bir alt kümesini belleğe okumak ve kaydetmek için Python ve Numpy / SciPy kullanarak bir çözüm kodlayın.

Kapsamlı olarak çok basit bir kırpma yapmanın (gdal_translate'deki raster hesap makinesi veya -srcwin anahtarı ile) yapmanın, çokgenle kırpmaya göre daha az bellek aç olduğundan şüpheleniyorum çünkü geometri kontrolleri ve dönüşümleri yok. Seçenek 5, yalnızca ihtiyacınız olan şeyleri okurken en az belleği kullanmalıdır. 'Nasıl yapılır'a ihtiyacınız varsa bu eğiticiye bir göz atın (bloğu okuma ve yazma konusunda biraz uyarlayın).


Cevap için teşekkürler! SAGA'yı deneyeceğim ve işe yaramazsa Numpy ile gideceğim.
Mavi

5

İlgi Alanınızın koordinatlarını biliyorsanız, jeoreference ise doğrudan gdal'ın aracı gdal_translate ile kesebilirsiniz :

gdal_translate -projwin [ulx uly lrx lry] infile outfile  

Aksi takdirde -srswinbayrağı şu şekilde kullanmayın :

gdal_translate -srcwin [xoff yoff xsize ysize] dolgu dosyası.

Başka bir seçenek de gdalbuildvrt ile ilk veri kümenize işaret eden bir 'sanal' tarama (birkaç kilobaytlık) oluşturmaktır .

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

Ne yazık ki gdalbuildvrt kullanmak için coğrafi referanslı bir dosyaya ihtiyacınız olacak.

Klipsledikten sonra, kolay görüntüleme için piramitler oluşturmayı unutmayın. Aşağıdaki komut, DEFLATE (kayıpsız) algoritması ile sıkıştırılmış harici piramitler oluşturur:

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

Son bir adım olarak, belirli bir ticari programla ilgili bazı aptalca problemlerden kaçınmak için istatistikleri de hesaplayabilirsiniz:

gdalinfo -stats outfile

Cevap nickler için teşekkürler. Sanal bir tarama oluşturduk ve <code> gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE outfile 2 4 8 16 </code> Neden aşağıdaki hata iletisini aldım çok emin değilim HATA 1: Eksik nedeniyle TIFF dosyası oluşturulamıyor DEFLATE için codec bileşeni. Genel bakış oluşturma başarısız oldu.
Mavi

Durumunuzu açıklarlarsa qgis-bug: 8782 ve osge4w-bug: 382 hatalarını kontrol edin . Bu arada, herhangi bir sıkıştırma algoritması olmadan genel görünümler oluşturmaya çalışın veya başka bir tane seçin .
nickves

görünüşe göre 2 adımda çalıştım: gdaladdo -ro input.vrt 2 4 8 16sonra gdaladdo -ro --config COMPRESS_OVERVIEW DEFLATE input.vrt 2 4 8 16. Amacım bir ECW ile bitirmek olduğunu, bu yüzden denedim gdal_translate -of ECW input.vrt output.ecw ve aşağıdaki hatayı aldım:0ERROR 6: GDALDriver::Create() ... no create method implemented for this format.
Mavi

@blue ECW tescilli bir formattır ve özel muamele gerektirir. Lütfen önce gdal'ın ECW ile yazıp yazamayacağını kontrol edin gdalinfo --formats. Listede ECW'yi görmüyorsanız
nickves

0

Düz bir 'klip' ​​kullanımı gdalwarpişe yaramalıdır (bunun hella eski bir soru olduğunu biliyorum: 18 ay IRL internet yıllarında jeolojik bir çağ gibi).

Bir 70Gb antenim var (ECW, 10cm / px'de 94000x81000 piksel) ve GDAL, kullanarak bir şekil dosyasıyla keyfi olarak klipsleyebilir

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

Windows komut satırında. (Bu çözümün, ilgilenilen hedef alan için bir şekil dosyası oluşturmayı gerektirdiğinin farkındayım, ancak bu CBS tarafından bilinen en büyük zorluk değil).

Yarı banliyö büyüklüğünde bir yığın ayıklamak ~ 0.4 saniye sürer; dosyayı dörde bölmek 4sec alır. Makinemin özellikleri çok farklı değil (i7-4770 @ 3.4GHz, 16GB RAM, Win7-64 Ultimate).


gdalwarp daha önce bahsedilmişti. Performans ve belirli örnek resim boyutu hakkındaki bilgiler hoş bir eklentidir , ancak gerçekten bu gis.stackexchange.com/a/74450/108 için bir yorum olmalıdır (ve kod biçimlendirmesine sahip komut satırı ile önerilen bir düzenleme yapmak da hoş olacaktır. ; Okuması daha kolay)
Matt Wilkie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.