Cara menggunakan gdal2tiles pada gambar custom tiff yang diterima dari penyedia untuk menghasilkan ubin


10

Saya telah berjuang sedikit untuk menghasilkan ubin untuk gambar resolusi tinggi yang kami miliki. Gambar saat ini yang kami miliki adalah gambar yang sangat besar (+ 20GB), disimpan sebagai file GeoTiff.Gambar GTiff besar

Saya ingin membuat ubin menggunakan utilitas baris perintah gdal2tiles dan kemudian membuka dan melihatnya di Cesium, menggunakan penyedia citra TMS untuk menyediakan ubin. Menggunakan gdalinfo, berikut adalah beberapa detail gambar:

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

Upaya pertama saya adalah menggunakan gdal_translate untuk georeferensi gambar, dan kemudian menggunakan gdalwarp untuk mengubah proyeksi ke EPSG: 3857, seperti yang disyaratkan oleh Cesium (lihat referensi API)

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

Namun, saya mendapatkan banyak kesalahan berikut:

GALAT 1: lintang atau bujur melebihi batas

Metode lain yang saya coba adalah menggunakan gdal2tiles secara langsung, dan menghasilkan ubin:

gdal2tiles.py image.tif

Ini membuat folder dengan satu subfolder (berlabel 18) menjadi satu-satunya tingkat zoom tempat ubin dibuat. Namun, gambar yang saya dapatkan di sini benar-benar "salah" dan "buram".

Contoh salah satu ubin:

masukkan deskripsi gambar di sini

Ada saran untuk membuat petak untuk gambar ini gambar besar area tertentu menggunakan gdal2tiles sehingga saya dapat memuat dan melihatnya di Cesium?

Memperbarui

Jadi, setelah mencoba saran @ iant, saya menggunakan perintah berikut:

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

Perintah ini bekerja dengan sangat baik sampai akhir di mana saya mendapatkan kesalahan berikut:

GALAT 1: TIFFFillTile: Kesalahan pembacaan di baris 43520, col 47104; mendapat 35788250 byte, diharapkan 37421449

Tidak yakin apa arti kesalahan ini, saya meninggalkannya untuk saat ini dan masih mendapatkan gambar terakhir "newImage.tif", yang diproduksi oleh langkah gdalwarp. Menggunakan ini saya disebut gdal2tiles.py

gdal2tiles.py newImage.tif

Ini menghasilkan folder dengan subfolder 10-18 (dan bukan hanya satu zoom level 18 seperti yang saya dapatkan sebelumnya). Ini juga berbunyi sangat baik ke Cesium, tanpa kesalahan konsol, tetapi gambar masih terlihat "salah":

Gambar dimuat ke Cesium

Saya mempertimbangkan masalah saya mungkin karena @ user30184 telah menyarankan "... sumber data tidak cocok untuk gdal2tiles." Namun sampai penyedia kami dapat menyediakan kami sesuatu untuk digunakan dengan gdal, ini yang saya miliki.

Saya sedang mempertimbangkan mungkin menghapus salah satu band untuk menghindari Gdal untuk interperting band terakhir sebagai saluran alpha. Ada saran?


Mengapa Anda ingin melakukan georeferensi gambar? Sudah memiliki semua informasi CRS di dalamnya.
AndreJ

Jawaban:


7

Saya pikir semua yang perlu Anda lakukan adalah memproyeksikan ulang menggunakan:

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

dan kemudian ubin itu:

gdal2tiles.py newImage.tif

Jika file Anda sangat besar, perlu waktu.


Anda dapat mengontrol level zoom dengan parameter -z, sudahkah Anda mencobanya? Dan perhatikan bahwa gambar Anda memiliki 4 pita yang dapat menyebabkan hasil yang tidak terduga terutama karena Anda berurusan dengan data 16 bit. Beberapa preprocessing mungkin diperlukan terlebih dahulu
user30184

Terima kasih atas tanggapan Anda @iant. Saya akan mencoba ini dan melihat apa yang terjadi. Bisakah Anda menjelaskan sedikit lebih dalam jawaban Anda apa arti opsi yang telah Anda pilih? Menurut dokumentasi, opsi -co "melewati opsi pembuatan ke driver format output". Jadi, apakah Anda sebenarnya menambahkan lebih banyak properti ke file tiff?
Upaya

@ user30184 Saya belum mencobanya, belum. Bagaimana saya tahu level zoom seharusnya? Atau bisakah saya menentukannya seperti yang saya inginkan? Saya berpikir bahwa dengan mengabaikan opsi ini, saya akan membiarkan skrip menentukan tingkat zoom berdasarkan area yang dipilih.
Upaya

@ user30184 Anda juga menyebutkan bahwa saya mungkin mendapatkan hasil yang tidak diharapkan dengan gambar 4 banded dan data 16 bit. Kenapa tepatnya? Apakah tidak dalam format yang benar untuk pemrosesan ubin gdal? Jika demikian, gambar diperoleh langsung dari penyedia, apa langkah-langkah untuk mendapatkan file dalam format yang benar? Yaitu file tiff GDAL? (Jika saya bisa mengatakan sesuatu seperti itu)
usaha

Saya mendapat masalah berikut menjalankan gdalwarp seperti yang Anda sarankan @iant: >>>>>>>>>>>> KESALAHAN 1: TIFFFillTile: Baca kesalahan di baris 43520, col 47104; mendapat 35788250 byte, diharapkan 37421449 ERROR 1: TIFFReadEncodedTile () gagal. GALAT 1: pleiades_merge05m_2015-06-19.tif, band 1: IReadBlock gagal di X offset 86, Y offset 109 ERROR 1: GetBlockRef gagal di X block offset 86, Y block offset 109 >>>>>>>>>>>>> > Ada saran untuk memperbaikinya?
Upaya

2

Saya kira gambar Anda adalah beberapa produk 4-band dari Airbus DS:

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

Gdal2tiles dibuat untuk memisahkan gambar visual yang umum menjadi ubin png. Gambar tersebut menggunakan 8 bit per band dan mereka memiliki satu band (skala abu-abu), 3 band (merah-hijau-biru) dari 4 band (reg-hijau-biru + alfa).

Saya akan mengatakan bahwa pertanyaan Anda sebagian besar tidak relevan karena data sumber Anda tidak cocok untuk gdal2tiles. Anda mungkin dapat mengatasi masalah langsung yang Anda miliki sekarang tetapi masih hasil akhir masih tidak akan baik jika Anda tidak memproses ulang data Anda.

Alasan untuk ubin yang tidak terlihat bagus yang Anda lampirkan pada pertanyaan Anda mungkin bahwa pita data keempat ditafsirkan sebagai saluran alpha.


Terima kasih @ user30184, saya telah membaca beberapa sumber dan telah mencapai pemikiran yang sama. Saya pikir akan lebih baik untuk meminta penyedia kami untuk menyediakan kami dengan file tiff "kompatibel GDAL", tetapi sampai mereka kembali kepada kami, hanya itu yang kami miliki. Saya sedang mempertimbangkan mungkin menghapus salah satu band untuk menghindari Gdal untuk interperting band terakhir sebagai saluran alpha. Ada saran?
Upaya

Gunakan gdal_translate untuk memotong subset kecil dari gambar gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tifharus melakukannya (offset besar untuk menghindari area nodata). Buka gambar kecil ini dengan QGIS dan Anda harus dapat bermain dengan pengaturan tampilan dengan cepat. Tebakan saya tentang saluran alfa mungkin salah, jika tidak hasilnya akan terlihat berwarna-warni, bukan abu-abu.
user30184

Terima kasih @ user30184, saya melakukan apa yang Anda sarankan dan berhasil membukanya di QGIS. Lihat tautan ini: drive.google.com/open?id=0B97NtaPJrVz-anRYQmxjZFludk0 Bagaimana saya sekarang bisa melakukan "debugging" masalah saya? Menggunakan QGIS untuk melakukan gdalwarp dan gdal2tiles?
Upaya
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.