Jak zmienić kolor „brak danych” geotiff na biały / przezroczysty zamiast czarnego?

17

Przygotowuję dane do włączenia do węzła geonetwork, w którym mapy są wyświetlane za pośrednictwem geoserver.

Problem polega na tym, że komórki, które nie mają danych, są wyświetlane jako geotiff w kolorze czarnym, a ja chciałbym, aby kolor był ustawiony na biały lub przezroczysty.

Korzystam z ArcView i nie mam dostępu ani do Analityka przestrzennego ani analityka 3D.

Wolałbym nie przypisywać nowego pliku sld i obecnie używam „Użyj colormap” podczas eksportowania z ArcGIS Desktop.

enmapping
źródło

Odpowiedzi:

7

W koncepcji musisz dowiedzieć się, jakie wartości pikseli reprezentują komórki bez danych, a następnie edytować tabelę kolorów, aby przypisać wartości CZERWONE, ZIELONE, NIEBIESKIE (RGB) w tabeli kolorów do 255,255,255 dla tej wartości komórki.

Jeśli nie masz odpowiedniej licencji, aby to zrobić w Arc, możesz użyć narzędzia gdal_translate (jedno z narzędzi wiersza poleceń gdal / ogr)

  1. wyeksportuj tabelę kolorów dla swojego tif jako plik XML.
    gdal_translate -of VRT myImage.tif outColorTable.vrt

  2. otwórz plik .vrt w edytorze tekstu i znajdź wpis wartości pikseli bez danych. Nie ma numeru indeksu dla wartości komórek, więc musisz odliczać do poprawnego wpisu.

  3. edytuj tę wartość, aby być <Entry c1="255" c2="255" c3="255" c4="255"/>

  4. teraz utwórz nowy tif na podstawie nowej tabeli kolorów
    gdal_translate outColorTable.vrt newCorrected.tif

(przykład dodany na podstawie komentarza poniżej)

Kiedy uruchamiam polecenie w punkcie 2 powyżej i otwieram plik .vrt w edytorze tekstu, widzę zawartość XML.

Część pliku zawiera linie, które wyglądają tak, wyciąłem większość z nich.

DavidF
źródło
Cześć DavidF. Dzięki za odpowiedź, którą próbowałem przeprowadzić za pomocą FWTools (nieco łatwiejsza nawigacja dla początkującego). Ale mam problem ze znalezieniem „wartości” w pliku vrt, ponieważ kiedy otwieram plik za pomocą notatnika, są one teraz rozpoznawalnymi słowami i składają się głównie z tekstu losowego (kodu). czy robię coś źle? - każda dodatkowa pomoc bardzo doceniana.
enmapping
@ user1106 - Spróbuj ponownie wykonać powyższe polecenia, pominąłem opcję formatu wyjściowego. Powinno już działać!
DavidF
9

Napisałem do tego mały skrypt gdal python, gdalsetnull.py , prosty program wiersza poleceń do ustawiania określonej wartości rastrowej NODATA, bez tworzenia nowego rastra. Najłatwiejszą drogą do zainstalowania GDAL na Windowsie jest OSGeo4W . Przykłady:

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

Jeśli nie masz nic przeciwko narzutom przetwarzania i tworzeniu nowego obrazu zamiast edycji w miejscu, istnieje również gdal_calc, który pozwala na faktyczną zmianę wartości komórki, a nie tylko aktualizację metadanych.

Ustaw wartości od zera i poniżej na zero:

gdal_calc.py -A input.tif --outfile=result.tif --calc="A*(A>0)" --NoDataValue=0
matowe wilkie
źródło
Dobrze zrobione Matt!
DavidF
Czy to naprawdę odpowiada na pytanie? Twój (fajny!) Skrypt ustawi kolor na NULL, ale myślę, że nadal jest specyficzny dla implementacji WMS, w którym kolorze (powiedzmy, że przezroczysty jest również kolor) renderowane są wartości NODATA.
alfonx
@alfonx, tak, istnieje różnica między komórką, która jest zarejestrowana jako, nodataa komórką, która mówi, że jestem,0 a aplikacja decyduje, czy tę lub inną wartość należy zignorować. ArcGIS szanuje wyniki gdalsetnull.py; Nie mam doświadczenia z GeoServer.
matt wilkie
1
Wygląda na to, że został ponownie przeniesiony, teraz na: github.com/maphew/maphew-gcode-archive/blob/…
Steve Bennett
link naprawiony, dziękuję za uwagę! @ SteveBennett powinniśmy teraz usunąć te meta komentarze.
matt wilkie