Döşeme oluşturmak için sağlayıcılardan alınan özel bir tiff görüntüsünde gdal2tiles nasıl kullanılır


10

Sahip olduğumuz yüksek çözünürlüklü bir görüntü için fayans üretmek için biraz uğraşıyorum. Şu anki görüntümüz GeoTiff dosyası olarak kaydedilen çok büyük (+ 20 GB) bir görüntüdür.Büyük GTiff görüntüsü

Gdal2tiles komut satırı yardımcı programını kullanarak fayans oluşturmak ve daha sonra fayans sağlamak için TMS görüntü sağlayıcı kullanarak Cesium, açmak ve görüntülemek istiyorum. Gdalinfo kullanarak, görüntünün ayrıntılarından bazıları:

Driver: GTiff/GeoTIFF
Files: image.tif
Size is 52250, 56119
Coordinate System is:
PROJCS["WGS 84 / UTM zone 35S",
    GEOGCS["WGS 84",
        DATUM["WGS_1984",
            SPHEROID["WGS 84",6378137,298.257223563,
                AUTHORITY["EPSG","7030"]],
            AUTHORITY["EPSG","6326"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4326"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",27],
    PARAMETER["scale_factor",0.9996],
    PARAMETER["false_easting",500000],
    PARAMETER["false_northing",10000000],
    UNIT["meters",1],
    AUTHORITY["EPSG","32735"]]
Origin = (606276.000000000000000,7197873.000000000000000)
Pixel Size = (0.500000000000000,-0.500000000000000)
Metadata:
  AREA_OR_POINT=Area
  TIFFTAG_MAXSAMPLEVALUE=13165
  TIFFTAG_MINSAMPLEVALUE=1
  TIFFTAG_RESOLUTIONUNIT=2 (pixels/inch)
  TIFFTAG_SOFTWARE=ERDAS IMAGINE
  TIFFTAG_XRESOLUTION=1
  TIFFTAG_YRESOLUTION=1
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (  606276.000, 7197873.000) ( 28d 3'21.59"E, 25d19'55.12"S)
Lower Left  (  606276.000, 7169813.500) ( 28d 3'29.55"E, 25d35' 7.17"S)
Upper Right (  632401.000, 7197873.000) ( 28d18'55.92"E, 25d19'47.60"S)
Lower Right (  632401.000, 7169813.500) ( 28d19' 5.85"E, 25d34'59.57"S)
Center      (  619338.500, 7183843.250) ( 28d11'13.23"E, 25d27'27.58"S)
Band 1 Block=512x512 Type=UInt16, ColorInterp=Gray
Band 2 Block=512x512 Type=UInt16, ColorInterp=Undefined
Band 3 Block=512x512 Type=UInt16, ColorInterp=Undefined
Band 4 Block=512x512 Type=UInt16, ColorInterp=Undefined

İlk denemem görüntüyü coğrafi referans için gdal_translate kullanmak ve daha sonra projeksiyonu Cesium'un gerektirdiği şekilde EPSG: 3857 olarak değiştirmek için gdalwarp kullanmaktı (API referansına bakın)

gdal_translate -of VRT -a_srs EPSG:4326 -gcp 606275 7197875 28.055987 -25.331974 -gcp 606275 7169814 28.058200 -25.585326 -gcp 632400.5 7197875 28.31553 -25.329876 -gcp 632400.5 7169814 28.318286 -25.583209 image.tif newImage1.vrt
gdalwarp -of VRT -t_srs EPSG:3857 newImage1.vrt newImage2.vrt

Ancak, aşağıdaki hataların çoğunu alıyorum:

HATA 1: enlem veya boylam sınırları aştı

Denediğim başka bir yöntem doğrudan gdal2tiles kullanmak ve fayans üretmek oldu:

gdal2tiles.py image.tif

Bu, döşemelerin oluşturulduğu tek yakınlaştırma düzeyi olan bir alt klasör (18 etiketli) olan bir klasör oluşturdu. Ancak buraya geldiğim görüntüler tamamen "yanlış" ve "bulanık".

Fayanslardan birine örnek:

resim açıklamasını buraya girin

Herhangi bir öneri üretmek için herhangi bir öneri gdal2tiles kullanarak belirli bir alanın büyük görüntü böylece yük ve Sezyum görebilirsiniz?

Güncelleme

Yani, @ iant'ın önerisini denedikten sonra, aşağıdaki komutları kullandım:

gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -co BIGTIFF=YES -t_srs EPSG:3857 image.tif newImage.tif

Bu komut aşağıdaki hatayı aldım sonuna kadar mükemmel çalıştı:

HATA 1: TIFFFillTile: 43520. Satır, 47104. Satırdaki okuma hatası; 35788250 bayt aldı, beklenen 37421449

Bu hatanın ne anlama geldiğinden emin değilim, bir an için bıraktım ve hala gdalwarp adımı tarafından üretilen son bir görüntü "newImage.tif" var. Bunu kullanarak gdal2tiles.py

gdal2tiles.py newImage.tif

Bu, alt klasörleri 10-18 olan bir klasör üretti (ve daha önce aldığım gibi sadece bir zoom seviyesi 18 değil). Ayrıca herhangi bir konsol hatası olmadan Cesium'a mükemmel bir şekilde okur, ancak görüntü hala "yanlış" görünüyor:

Sezyum içine yüklenen görüntü

Sorunumun @ user30184 önerdiği gibi olabileceğini düşünüyorum "... kaynak veriler gdal2tiles için uygun değil." Ancak sağlayıcımız bize gdal ile kullanmak için bir şeyler sağlayabilinceye kadar, sahip olduğum tek şey bu.

Belki de son bandın alfa kanalı olarak geçmesini önlemek için gdallardan kaçınmak için bantlardan birini çıkarmayı düşünüyordum. Herhangi bir öneri?


Görüntüye neden coğrafi referans yapmak istiyorsunuz? İçinde zaten tüm CRS bilgileri var.
AndreJ

Yanıtlar:


7

Tek yapmanız gereken kullanarak yeniden projeksiyon yapmak olduğunu düşünüyorum:

gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -t_srs EPSG:3857 newImage.tif image.tif

ve sonra döşeyin:

gdal2tiles.py newImage.tif

Dosyanız çok büyükse biraz zaman ayırın.


Yakınlaştırma düzeylerini -z parametresiyle kontrol edebilirsiniz, zaten denediniz mi? Görüntünüzde, özellikle 16 bitlik verilerle uğraştığınız için beklenmedik sonuçlara yol açabilecek 4 bant bulunduğunu unutmayın. Önce bazı ön işlemlere ihtiyaç duyulabilir
user30184

@İant yanıtınız için teşekkür ederiz. Bunu deneyeceğim ve ne olacağını göreceğim. Seçtiğiniz seçeneklerin ne anlama geldiğini belki cevabınızda biraz daha açıklayabilir misiniz? Belgelere göre, -co seçeneği "bir oluşturma seçeneğini çıktı formatı sürücüsüne geçirir". Peki, tiff dosyasına daha fazla özellik ekliyor musunuz?
çaba

@ user30184 Henüz denemedim hayır. Zoom seviyelerinin ne olması gerektiğini nasıl bilebilirim? Yoksa istediğim gibi belirtebilir miyim? Bu seçeneği bırakarak, komut dosyasının seçilen alana göre yakınlaştırma seviyesini belirlemesine izin vereceğini düşündüm.
çaba

@ user30184 ayrıca 4 şeritli görüntü ve 16 bit veri ile beklenmedik sonuçlar elde edebileceğimi de söylemiştiniz. Neden tam olarak? Gdal karo işleme için doğru formatta değil mi? Öyleyse, görüntü doğrudan sağlayıcıdan alınmışsa, dosyayı doğru biçimde almanın adımları nelerdir? Yani bir GDAL tiff dosyası mı? (Eğer böyle bir şey söyleyebilirsem)
gayret

@Dardı: 35788250 bayt var, beklenen 37421449 HATA 1: TIFFReadEncodedTile () başarısız oldu. HATA 1: pleiades_merge05m_2015-06-19.tif, bant 1: IReadBlock X ofset 86, Y ofset 109'da başarısız oldu HATA 1: GetBlockRef X blok ofset 86, Y blok ofset 109'da başarısız oldu >>>>>>>>>>> > Bunu düzeltmek için herhangi bir öneriniz var mı?
çaba

2

Resminizin Airbus DS'nin 4 bantlı ürünlerinden bazıları olduğunu düşünüyorum:

http://www.intelligence-airbusds.com/en/4951-which-spectral-mode-do-i-choose

Gdal2tiles, ortak, görsel görüntüleri png döşemelerine bölmek için yapılır. Bu tür görüntüler bant başına 8 bit kullanır ve bir bant (gri tonlama), 4 bant (reg-yeşil-mavi + alfa) 3 bant (kırmızı-yeşil-mavi) içerir.

Sorunuzun büyük ölçüde alakasız olduğunu söyleyebilirim çünkü kaynak verileriniz gdal2tiles için uygun değil. Şu anda yaşadığınız sorunların üstesinden gelebilirsiniz, ancak verilerinizi yeniden işlemezseniz yine de nihai sonuç iyi olmayacaktır.

Sorunuza eklediğiniz iyi görünmeyen döşemenin nedeni, dördüncü veri bandının alfa kanalı olarak yorumlanması olabilir.


Teşekkürler @ user30184, bazı kaynakları okudum ve benzer bir düşünceye geldim. Bence sağlayıcılarımızdan bize "GDAL uyumlu" tiff dosyaları sunmalarını istemek en iyisi olacaktır, ancak bize geri dönene kadar sahip olduğumuz tek şey bu. Belki de son bandın alfa kanalı olarak geçmesini önlemek için gruplardan birini çıkarmayı düşünüyordum. Herhangi bir öneri?
çaba

Görüntüden küçük bir alt kümeyi kesmek için gdal_translate kullanın gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tif(nodata alanlarından kaçınmak için büyük ofsetler). Bu küçük görüntüyü QGIS ile açın, görüntüleme ayarlarıyla hızlıca oynamanız gerekir. Alfa kanalı hakkındaki tahminim yanlış olabilir, aksi takdirde sonuç gri değil renkli görünmelidir.
user30184

Teşekkürler @ user30184, önerdiğiniz gibi yaptım ve başarıyla QGIS'de açtım. Bu bağlantıya bakın: drive.google.com/open?id=0B97NtaPJrVz-anRYQmxjZFludk0 Artık sorunumun "hata ayıklamasını" nasıl yapabilirim? Gdalwarp ve gdal2tiles yapmak için QGIS kullanıyor musunuz?
çaba
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.