Как использовать 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, как того требует Цезий (см. Ссылку 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, чтобы я мог загрузить и просмотреть его в Цезии?

Обновить

Итак, попробовав предложение @ 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, это все, что у меня есть.

Я подумывал, возможно, удалить одну из полос, чтобы не допустить того, чтобы последняя полоса перешла в альфа-канал. Какие-либо предложения?

усилие
источник
Почему вы хотите привязать изображение? В нем уже есть вся информация 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-битными данными. Сначала может потребоваться некоторая предварительная обработка
user30184
Спасибо за ваш ответ @iant. Я собираюсь попробовать это и посмотреть, что произойдет. Не могли бы вы объяснить в своем ответе немного больше, что означают выбранные вами варианты? Согласно документации, опция -co «передает опцию создания в драйвер выходного формата». Итак, вы добавляете больше свойств в файл TIFF?
усилие
@ user30184 Я еще не пробовал, нет. Откуда мне знать, какими должны быть уровни масштабирования? Или я могу указать их как хочу? Я думал, что, оставив эту опцию, я позволю сценарию определять уровень масштабирования на основе выбранной области.
усилие
@ user30184 Вы также упомянули, что я могу получить неожиданные результаты с 4-полосным изображением и 16-битными данными. Почему именно? Разве это не в правильном формате для обработки плитки GDAL? Если это так, изображение было получено непосредственно от поставщика, каковы будут шаги, чтобы получить файл в правильном формате? А именно GIFAL TIFF файл? (Если я могу сказать что-то подобное)
усилие
У меня возникли следующие проблемы при запуске 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 при смещении 86 блока X, смещение блока Y 109 >>>>>>>>>>> > Есть предложения, чтобы это исправить?
усилие
2

Я полагаю, что ваш имидж является одним из четырехполосных продуктов Airbus DS:

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

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

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

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

user30184
источник
Спасибо @ user30184, я читал о некоторых ресурсах и пришел к аналогичной мысли. Я думаю, что было бы лучше попросить наших провайдеров предоставить нам «совместимые с GDAL» файлы tiff, но пока они не вернутся к нам, это все, что у нас есть. Я подумывал, возможно, удалить одну из полос, чтобы не допустить того, чтобы последняя полоса перешла в альфа-канал. Какие-либо предложения?
усилие
Используйте gdal_translate для вырезания небольшого подмножества из изображения, которое gdal_translate -srcwin 20000 20000 1000 1000 original.tif sample.tifдолжно это сделать (большие смещения для избежания областей узлов). Откройте это небольшое изображение с помощью QGIS, и вы сможете быстро поиграть с настройками просмотра. Мое предположение об альфа-канале, вероятно, неверно, иначе результат должен выглядеть красочным, а не серым.
user30184
Спасибо @ user30184, я сделал, как вы предложили, и успешно открыл его в QGIS. Смотрите эту ссылку: drive.google.com/open?id=0B97NtaPJrVz-anRYQmxjZFludk0 Как теперь я могу заняться «отладкой» моей проблемы? Использование QGIS для gdalwarp и gdal2tiles?
усилие