Как изменить цвет геотайфа «нет данных» на белый / прозрачный, а не черный?

17

Я готовлю данные для включения в узел геосети, где карты отображаются через геосервер.

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

Я использую ArcView и не имею доступа ни к Spatial Analyst, ни к 3D-аналитикам.

Я бы предпочел не назначать новый файл sld, и в настоящее время я использую «Использовать цветовую карту» при экспорте из ArcGIS Desktop.

enmapping
источник

Ответы:

7

В принципе, вам нужно выяснить, какие значения пикселей представляют ячейки без данных, а затем отредактировать таблицу цветов, чтобы назначить значения КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ (RGB) в таблице цветов равными 255 255 255 для этого значения ячейки.

Если у вас нет соответствующей лицензии для этого в Arc, вы можете использовать инструмент gdal_translate (один из инструментов командной строки gdal / ogr)

  1. экспортируйте таблицу цветов для вашего tif в виде файла XML.
    gdal_translate -of VRT myImage.tif outColorTable.vrt

  2. откройте файл .vrt в текстовом редакторе и найдите запись для значения ваших пикселей без данных. Индексный номер для значений ячеек отсутствует, поэтому вы должны вести обратный отсчет до правильной записи.

  3. изменить это значение, чтобы быть <Entry c1="255" c2="255" c3="255" c4="255"/>

  4. Теперь создайте новый TIF на основе новой таблицы цветов
    gdal_translate outColorTable.vrt newCorrected.tif

(пример добавлен на основе комментария ниже)

Когда я запускаю команду в пункте № 2 выше и открываю файл .vrt в текстовом редакторе, я вижу содержимое XML.

Часть файла содержит строки, которые выглядят следующим образом, большинство из них я вырезал.

DavidF
источник
Привет, DavidF. Спасибо за ответ, который я пытался выполнить с помощью FWTools (немного легче ориентироваться для новичка). Но у меня возникают проблемы с поиском «значения» в файле vrt, потому что когда я открываю файл с помощью блокнота, они становятся различимыми словами, и он состоит в основном из случайного (кодового) текста. Я делаю что-то неправильно? - любая дополнительная помощь с благодарностью.
отображение
@ user1106 - Попробуйте вышеупомянутые команды снова, я пропустил опцию выходного формата. Это должно работать сейчас!
DavidF
9

Я написал небольшой скрипт на gdal python для этого, gdalsetnull.py , простую программу командной строки, которая устанавливает заданное значение растра NODATA, не создавая новый растр. Самый простой способ установить GDAL на Windows - через OSGeo4W . Примеры:

python gdalsetnull.py foobar.tif 0            # pure black is transparent
python gdalsetnull.py foobar.tif 0 255 0      # pure green is
python gdalsetnull.py foobar.tif 50 23 77 100 # arbitrary value in 4 band image

Если вы не возражаете против некоторой дополнительной обработки и создания нового изображения, а не редактирования на месте, есть также gdal_calc, который позволяет фактически изменять значения ячеек, а не просто обновлять метаданные.

Установите значения от нуля и ниже до нуля:

gdal_calc.py -A input.tif --outfile=result.tif --calc="A*(A>0)" --NoDataValue=0
Мэтт Уилки
источник
Красиво сделано Мэтт!
DavidF
Это действительно отвечает на вопрос? Ваш (хороший!) Скрипт установит цвет на NULL, но я думаю, что он все еще специфичен для WMS-реализации, в котором цвет (скажем, прозрачный тоже цвет) отображаются значения NODATA.
alfonx
@alfonx, да, есть разница между записанной nodataячейкой и ячейкой, в которой указано, что я есть,0 и приложение решает, следует ли игнорировать это или какое-либо другое значение. ArcGIS уважает результаты gdalsetnull.py; У меня нет опыта работы с GeoServer.
Мэтт Уилки
1
Похоже, он снова перемещен, теперь по адресу: github.com/maphew/maphew-gcode-archive/blob/…
Стив Беннетт
ссылка исправлена, спасибо за примечание! @SteveBennett мы должны удалить эти мета-комментарии сейчас.
Мэтт Уилки
2

Помимо того, что вы предпочли НЕ создавать новый файл SLD, здесь есть запись в блоге о том, как преобразовать внутреннюю цветовую карту GeoTIFF в SymbologyEncoding / SLD и определить там другой цвет. В производном SLD легко определить, какие именно значения будут отображаться со 100% прозрачным цветом.

alfonx
источник
в вашем тексте нет ссылки.
Мэтт Уилки