Як використовувати gdal2tiles на власному зображенні tiff, отриманому від провайдерів для генерації плиток


10

Я трохи намагаюся генерувати плитки для зображення з високою роздільною здатністю. Поточне зображення, яке ми маємо, - це дуже велике (+ 20 Гб) зображення, збережене як файл GeoTiff.Велике зображення GTiff

Я хотів би генерувати плитки за допомогою утиліти командного рядка 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, без будь-яких помилок консолі, але зображення все одно виглядає "неправильно":

Зображення завантажено в Cesium

Я вважаю, що моя проблема може бути такою, як @ user30184 запропонував "... вихідні дані не підходять для gdal2tiles." Однак поки наш провайдер не зможе надати нам щось для використання з gdal, це все, що я маю.

Я розглядав, можливо, видалити одну з смуг, щоб уникнути інтерпретації останньої смуги як альфа-канал. Будь-які пропозиції?


Чому ви хочете зробити геореференцію зображення? У ньому вже є вся інформація CRS всередині.
AndreJ

Відповіді:


7

Я думаю, що все, що вам потрібно зробити, - це відробити це за допомогою:

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

а потім плитку:

gdal2tiles.py newImage.tif

Якщо ваш файл дуже великий, це потребує певного часу.


Ви можете керувати рівнями масштабування за допомогою параметра -z, ви вже пробували? І зауважте, що ваше зображення має 4 смуги, що може призвести до несподіваних результатів, особливо тому, що ви обробляєте 16-бітові дані. Спочатку може знадобитися деяка попередня обробка
користувач30184

Дякую за вашу відповідь @iant. Я спробую це і побачити, що станеться. Чи можете ви пояснити трохи більше у своїй відповіді, що означають вибрані вами варіанти? Згідно з документацією, опція -co "передає опцію створення драйверу вихідного формату". Ви фактично додаєте більше властивостей до файлу tiff?
зусилля

@ user30184 Я ще не пробував цього ні. Як я можу знати, якими повинні бути рівні збільшення? Або я можу вказати їх, як я хочу? Я думав, що, відмовившись від цієї опції, я дозволю сценарію визначати рівень масштабування на основі вибраної області.
зусилля

@ user30184 Ви також згадали, що я можу отримати несподівані результати за допомогою 4-смугового зображення та 16-бітових даних. Чому саме? Чи не в правильному форматі для обробки плитки gdal? Якщо так, то зображення було отримано безпосередньо від провайдера, які були б дії для отримання файлу у правильному форматі? А саме типовий файл GDAL? (Якщо я можу сказати щось подібне)
зусилля

У мене виникли такі проблеми із запуском gdalwarp, як ви запропонували @iant: >>>>>>>>>>>> ПОМИЛКА 1: TIFFFillTile: Помилка читання у рядку 43520, стовп 47104; отримано 35788250 байт, очікувано 37421449 ПОМИЛКА 1: помилка TIFFReadEncodedTile (). ПОМИЛКА 1: pleiades_merge05m_2015-06-19.tif, діапазон 1: IReadBlock не вдалося при зсуві X 86, Y зміщення 109 ПОМИЛКА 1: GetBlockRef не вдалося при зміщенні блоку X 86, зміщення блоку Y 109 >>>>>>>>>>>> > Будь-які пропозиції виправити це?
зусилля

2

Я гадаю, що ваше зображення є частиною 4-діапазонних продуктів Airbus DS:

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

Gdal2tiles створений для розбиття загальних візуальних зображень на плитки PNG. Для таких зображень використовується 8 біт на діапазон, і вони мають одну смугу (відтінки сірого), 3 смуги (червоно-зелений-синій) з 4-х смуг (reg-green-blue + alpha).

Я б сказав, що ваше запитання значною мірою не має значення, оскільки ваші вихідні дані не підходять добре для gdal2tiles. Ви можете уникнути негайних проблем, які у вас є, але остаточний результат все одно не буде хорошим, якщо ви не повторно обробляєте свої дані.

Причиною недоброзичливої ​​плитки, яку ви додали до свого запитання, може бути те, що четвертий діапазон даних інтерпретується як альфа-канал.


Дякую @ user30184, я читав деякі ресурси і прийшов до подібної думки. Я думаю, що було б найкраще попросити наших постачальників надати нам тиф-файли "сумісні з GDAL", але поки вони не повернуться до нас, це все, що ми маємо. Я розглядав, можливо, видалити одну з смуг, щоб уникнути інтерпретації останньої смуги як альфа-канал. Будь-які пропозиції?
зусилля

Використовуйте gdal_translate для вирізання невеликого підмножини із зображення. Це gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tifслід зробити (великі зрушення для уникнення областей вузлів). Відкрийте це невелике зображення за допомогою QGIS, і ви зможете швидко грати з налаштуваннями перегляду. Моя здогадка про альфа-канал, ймовірно, помилкова, інакше результат повинен виглядати колоритним, а не сірим.
користувач30184

Дякую @ user30184, я зробив так, як ви запропонували, і успішно відкрив його в QGIS. Перейдіть за цим посиланням: drive.google.com/open?id=0B97NtaPJrVz-anRYQmxjZFludk0 Як я можу зараз перейти до "налагодження" моєї проблеми? Використовуючи QGIS для створення gdalwarp та gdal2tiles?
зусилля
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.