Trochę staram się wygenerować kafelki dla obrazu w wysokiej rozdzielczości, który mamy. Obecny obraz, który mamy, to bardzo duży obraz (+ 20 GB), zapisany jako plik GeoTiff.
Chciałbym wygenerować kafelki za pomocą narzędzia wiersza polecenia gdal2tiles, a następnie otworzyć i wyświetlić w Cesium, używając dostawcy obrazów TMS do dostarczenia kafelków. Korzystając z gdalinfo, oto niektóre szczegóły obrazu:
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
Moją pierwszą próbą było użycie gdal_translate do georeferencji obrazu, a następnie użycie gdalwarp do zmiany projekcji na EPSG: 3857, zgodnie z wymaganiami Cesium (patrz referencja 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
Jednak otrzymuję wiele z następujących błędów:
BŁĄD 1: szerokość lub długość geograficzna została przekroczona
Inną metodą, którą próbowałem, było bezpośrednie użycie gdal2tiles i generowanie płytek:
gdal2tiles.py image.tif
W ten sposób utworzono folder z jednym podfolderem (oznaczonym jako 18), który jest jedynym poziomem powiększenia, na którym zostały utworzone kafelki. Jednak obrazy, które tu dostaję, są całkowicie „złe” i „rozmyte”.
Przykład jednego z kafelków:
Wszelkie sugestie dotyczące generowania kafelków dla tego obrazu duży obraz określonego obszaru za pomocą gdal2tiles, dzięki czemu mogę go załadować i wyświetlić w Cesium?
Aktualizacja
Po wypróbowaniu sugestii @ iant użyłem następujących poleceń:
gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -co BIGTIFF=YES -t_srs EPSG:3857 image.tif newImage.tif
To polecenie działało idealnie do samego końca, gdy wystąpił następujący błąd:
BŁĄD 1: TIFFFillTile: Błąd odczytu w wierszu 43520, kol. 47104; dostał 35788250 bajtów, oczekiwano 37421449
Nie jestem pewien, co znaczy ten błąd, zostawiłem go na chwilę i nadal otrzymałem końcowy obraz „newImage.tif”, wyprodukowany przez krok gdalwarp. Za pomocą tego nazwałem gdal2tiles.py
gdal2tiles.py newImage.tif
W ten sposób powstał folder z podfolderami 10-18 (a nie tylko jednym poziomem powiększenia 18, jak wcześniej). Odczytuje również doskonale w Cesium, bez żadnych błędów konsoli, ale obraz nadal wygląda „źle”:
Rozważam, że mój problem może być, ponieważ @ user30184 sugeruje „... dane źródłowe nie są odpowiednie dla gdal2tiles”. Jednak dopóki nasz dostawca nie będzie w stanie dostarczyć nam czegoś do użycia z gdal, to wszystko, co mam.
Zastanawiałem się nad usunięciem jednego z pasm, aby uniknąć zakłócenia ostatniego pasma jako kanału alfa. Jakieś sugestie?
źródło
Odpowiedzi:
Myślę, że wszystko, co musisz zrobić, to zmienić to za pomocą:
a następnie ułóż go:
Jeśli plik jest bardzo duży, może to chwilę potrwać.
źródło
Podejrzewam, że twój wizerunek to niektóre z 4-pasmowych produktów Airbusa DS:
http://www.intelligence-airbusds.com/en/4951-which-spectral-mode-do-i-choose
Gdal2tiles jest przeznaczony do dzielenia wspólnych obrazów na kafelki png. Takie obrazy używają 8 bitów na pasmo i mają jeden pas (skala szarości), 3 pasma (czerwono-zielono-niebieski) z 4 pasm (reg-zielono-niebieski + alfa).
Powiedziałbym, że twoje pytanie jest w dużej mierze nieistotne, ponieważ dane źródłowe nie są odpowiednie dla gdal2tiles. Możesz poradzić sobie z bezpośrednimi problemami, które masz teraz, ale ostateczny wynik nadal nie będzie dobry, jeśli nie przetworzysz ponownie swoich danych.
Przyczyną nie wyglądającego dobrze kafelka, który załączyłeś do pytania, może być to, że czwarte pasmo danych jest interpretowane jako kanał alfa.
źródło
gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tif
aby to zrobić (duże przesunięcia dla uniknięcia obszarów nodata). Otwórz ten mały obraz za pomocą QGIS i powinieneś być w stanie szybko grać z ustawieniami oglądania. Zgaduję, że kanał alfa jest prawdopodobnie błędny, w przeciwnym razie wynik powinien wyglądać kolorowo, a nie szary.