14 geotiff'ı böyle birleştirmeye çalışıyorum:
Her geotiff yaklaşık 50Mb'dir. Çıktıda bir geotiff'e ihtiyacım var
İş akışım:
gdalbuildvrt -input_file_list list.txt test.vrt
(burada listem tiflerin adını içerir)
Sonra :
gdal_translate -of Gtiff test.vrt test.tif
Input file size is 79841, 59955
Çalışıyor, ancak sonuç 13,3 Gb'lik bir geotiff! Her biri 50 Mb olan 14 dosya için, 13 Gb değil, 700 Mb geotiff denedim.
Gdal varsayılan olarak sıkıştırmaz, bu yüzden bu komutu denedim biliyorum:
gdal_translate -of Gtiff -co COMPRESS=JPEG test.vrt test_compressed.tif
Ancak dosyanın "birleştirilmesi" JPEG sıkıştırması için çok büyük:
Input file size is 79841, 59955
0ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: JPEGPreEncode:Strip/tile too large for JPEG
ERROR 1: WriteEncodedTile/Strip() failed.
ERROR 1: An error occured while writing a dirty block
...
Bu yüzden başka bir iş akışı denedim ve tüm tiflerimi jpeg'de (her biri 14 Mb) dönüştürdüm, bir vrt dosyası oluşturdum ve LZW sıkıştırmasıyla çevirdim. Ancak çıkış geotiff yaklaşık 5 Gb'dir.
İşi yapmak için en iyi uygulamanın ne olduğunu ve 14 * 50Mb'lik bir geotiff elde etmenin mümkün olup olmadığını söyleyebilir misiniz?
Denemedim, ama bu tifleri photoshop'ta birleştirmeyi, sonra sol üst / sağ alt koordinatlarla yeniden coğrafi referansı düşünmeyi düşündüm. Bu iş akışı ile bence 14 * 50 Mb olacak, ama emin değilim. Ve en iyi gdal uygulamalarını öğrenmek istiyorum, bu yüzden şu an denemedim
ısırık geliyor: eğer giriş 8bit ile tif ve ihracat varsayılan olarak 32bit ise ciddi sorun yaşayacaksınız. bu nedenle bayt tanımınızı olduğu gibi tuttuğunuzdan emin olun. Ve unutmayın: tam tif prob olacak. tiff her zaman dikdörtgen olduğu için 20x50mb var
Anlıyorsam, bu ekran görüntüsünde yeşile işaret ettiğim sayı solda ve sağda aynı mı olmalı?
Çıktı görüntünüz, girdi görüntülerinizin toplamından daha fazla piksele sahip olacaktır, ancak bu büyük farkı açıklamaz. Hangi sıkıştırmanın kullanıldığını görmek ve uzantıların doğru olup olmadığını kontrol etmek için gdalinfo'ya dayalı görüntülerinizin özelliklerine bakmanızı öneririm.
50 Mb'lik 14 tif, başlangıçta -co COMPRESS = JPEG ile gdal_translate ile işlediğim 14 tif 700 Mb idi. Mb sayısını azaltmak için rasterleri sıkıştırdım, ancak belki de iyi bir fikir değildi?
Bu ekran görüntüsü aynı geotiff'in (01.tif) 2 gdal bilgisini temsil eder, ekran görüntüsünün solunda sıkıştırılmamış Gtiff'in 700 Mb'lik gdalinfo, COMPRESS = JPEG ile aynı Gtiff'i sonlandırın. 50 Mb, fark yeşil renkte:
Bana göre, uzantılar doğru çünkü qgis'te diğer veri ve uydu görüntüleri kaynağı ile eşleşiyor.
* Giriş görüntülerinizin aynı boyutta olduğu varsayılarak, giriş resmi başına 20.000 * 12000 piksel yapar, bu da 50 Mb'lık bir görüntü için büyüktür, belki mozaiği oluştururken koordinat sisteminizin kapsamını geçiyorsunuzdur. *
Ne demek istediğinizi "kapsamı aşarak" anladığınızdan emin değilim. Ama 5 Gb LZW'mi QGIS'de açmaya çalıştım ve kapsamı iyi, çünkü diğer veri kaynaklarıyla eşleşiyor.
Cevabınız, Gtiff'in aynı boyuta sahip olmadığının farkına varıyor, birleştirildiğinde boyutun artmasının nedeni olabileceğini düşünüyor musunuz? Çünkü gdal aynı boyuttaki dosyayı tercih ediyor. Boyutunu almak için her Gtiff üzerinde bir gdalinfo yaptım, Gtiffs'in boyutu arasında çok küçük bir fark var:
02.tif Size is 19956, 11981
03.tif Size is 19959, 11993
04.tif Size is 19961, 11992
05.tif Size is 19958, 11993
06.tif Size is 19958, 11990
07.tif Size is 19956, 11984
08.tif Size is 19956, 11993
09.tif Size is 19958, 11993
10.tif Size is 19958, 11989
11.tif Size is 19958, 11985
12.tif Size is 19958, 11993
13.tif Size is 19959, 11993
14.tif Size is 19960, 11994
Sonra resimlerinizin piksel derinliğine bakmalısınız: girişiniz Bayt'ta ise,> o zaman bayt tutmalısınız. gdal_translate -of Gtiff -ot Bayt -co COMPRESS = LZW test.vrt test.tif
Bu komutu denedim ama gdal bana tiff boyutunun aşıldığını söyledi.
Input file size is 79841, 59955
0...10...20...30...40...50..ERROR 1: TIFFAppendToStrip:Maximum TIFF file size exceeded. Use BIGTIFF=YES creation option.
ERROR 1: WriteEncodedTile/Strip() failed.
Ama eğer büyük bir tiff oluşturmak zorunda kalırsam, sorunumu çözmez çünkü 4 Gb'den fazladır. Piksel derinliği benim durumumda önemli mi? (Haritaların HD fotoğrafı, daha sonra coğrafi referanslı, DEM değil)
Açıklama 1: Bir vrt oluşturmadan önce resimlerinizi jpeg'e dönüştürmek yardımcı olmaz ve verileri kaybedebilirsiniz.
Biraz bilgi kaybedersem ciddi olmaz. Elbette kaybetmemeyi tercih ederim, ama eğer zorundaysam sorun değil. Jpeg ile çalışsaydım çıktının daha hafif olacağına ikna oldum, ama sonuç olarak, çıktı Gtiff olduğunda bu doğru değil. Yani bu iyi bir çözüm değil. Bu çözümü bırakıyorum.
> Not 2: vrt kullanmak faydalıdır: GTiff'e ihtiyacınız olduğundan emin misiniz?
Evet, bir Gtiff'e ihtiyacım var, çünkü çalışmak için geotiff girişine ihtiyaç duyan bir mobil uygulamada içe aktarmak zorundayım (uygulamanın jeo-uzamsal pdf girişini de alabileceğini düşünüyorum, ancak asla onunla çalışmam ve sorunumu anlamak istiyorum gdal, çünkü ilk kez sahip değilim).
-Co döşeli = evet -co bigtiff = evet -co sıkıştır = jpeg -co fotometrik = ycbcr denedim ve -co TILED = evet -co BLOCKXSIZE = 512 -co BLOCKYSIZE = 512
Bu 2 komut iyi çalışıyor, ~ 700 Mb boyutunda. Tam olarak beklediğim bu.
Şimdi başka bir sorunum var: QGIS tarafından hızlı bir şekilde açılamıyor. 15 dakika beklemek zorundayım (ama QGIS tif'i başarıyla açmadan önce çıktım). Nedenini bilmiyorum. Ve benim android app, çalışmıyor (belki "kiremit = evet" nedeni). Kendi başıma bazı dokümanlar okumalıyım.