Я трохи намагаюся генерувати плитки для зображення з високою роздільною здатністю. Поточне зображення, яке ми маємо, - це дуже велике (+ 20 Гб) зображення, збережене як файл GeoTiff.
Я хотів би генерувати плитки за допомогою утиліти командного рядка gdal2tiles, а потім відкрити та переглянути її у Cesium, використовуючи постачальник зображень TMS для надання плиток. Використовуючи gdalinfo, ось деякі деталі зображення:
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
Моєю першою спробою було використовувати gdal_translate для геореференції зображення, а потім використовувати gdalwarp, щоб змінити проекцію на EPSG: 3857, як того вимагає Cesium (див. Посилання 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
Однак я отримую багато таких помилок:
ПОМИЛКА 1: широта або довгота перевищені
Інший метод, який я намагався, - використовувати gdal2tiles безпосередньо та генерувати плитки:
gdal2tiles.py image.tif
Це створило папку з однією підпапкою (з позначкою 18), яка є єдиним рівнем масштабування, на якому створювалися плитки. Однак образи, які я потрапляю сюди, абсолютно "неправильні" та "розмиті".
Приклад однієї з плиток:
Будь-які пропозиції щодо створення плиток для цього зображення великих зображень певної області за допомогою gdal2tiles, щоб я міг завантажувати та переглядати його в Cesium?
Оновлення
Отже, спробувавши пропозицію @ iant, я використав такі команди:
gdalwarp -co TILED=YES -co COMPRESS=DEFLATE -co BIGTIFF=YES -t_srs EPSG:3857 image.tif newImage.tif
Ця команда спрацювала чудово до самого кінця, коли я отримав таку помилку:
ПОМИЛКА 1: TIFFFillTile: Помилка читання в рядку 43520, стовп 47104; отримано 35788250 байт, очікувано 37421449
Не знаючи, що ця помилка означала, я залишив її на даний момент і все-таки отримав остаточне зображення "newImage.tif", створене кроком gdalwarp. Використовуючи це, я назвав gdal2tiles.py
gdal2tiles.py newImage.tif
Це створило папку з підпапками 10-18 (а не лише один рівень збільшення 18, як я раніше). Він також чудово читає на Cesium, без будь-яких помилок консолі, але зображення все одно виглядає "неправильно":
Я вважаю, що моя проблема може бути такою, як @ user30184 запропонував "... вихідні дані не підходять для gdal2tiles." Однак поки наш провайдер не зможе надати нам щось для використання з gdal, це все, що я маю.
Я розглядав, можливо, видалити одну з смуг, щоб уникнути інтерпретації останньої смуги як альфа-канал. Будь-які пропозиції?