Como altero a cor do geotiff “sem dados” para branco / transparente em vez de preto?

17

Estou preparando dados para inclusão em um nó da geonetwork, onde os mapas são exibidos via geoserver.

O problema é que as células que "não têm dados" estão sendo exibidas em preto no geotiff e eu gostaria que a cor fosse definida como branca ou transparente.

Estou usando o ArcView e não tenho acesso ao analista espacial ou ao analista 3D.

Eu preferiria não ter que atribuir um novo arquivo sld e atualmente estou usando "Usar mapa de cores" ao exportar do ArcGIS Desktop.

enmapping
fonte

Respostas:

7

No conceito, você precisa descobrir quais valores de pixel representam células sem dados e editar sua tabela de cores para atribuir os valores VERMELHO, VERDE, AZUL (RGB) na tabela de cores a 255.255.255 para esse valor de célula.

Se você não tiver a licença apropriada para fazer isso no Arc, poderá usar a ferramenta gdal_translate (uma das ferramentas de linha de comando gdal / ogr)

  1. exporte a tabela de cores para o seu tif como um arquivo XML.
    gdal_translate -of VRT myImage.tif outColorTable.vrt

  2. abra o arquivo .vrt em um editor de texto e encontre a entrada para o valor dos seus pixels sem dados. Como não há um número de índice para os valores das células, você deve fazer a contagem regressiva para a entrada correta.

  3. edite esse valor para <Entry c1="255" c2="255" c3="255" c4="255"/>

  4. Agora, crie um novo tif com base na nova tabela de cores
    gdal_translate outColorTable.vrt newCorrected.tif

(exemplo adicionado com base no comentário abaixo)

Quando executo o comando no item 2 acima e abro o arquivo .vrt em um editor de texto, vejo o conteúdo XML.

Parte do arquivo inclui linhas que se parecem com isso, eu retirei a maioria delas.

DavidF
fonte
Oi DavidF. Obrigado pela resposta que tenho tentado executar com o FWTools (um pouco mais fácil de navegar para o iniciante). Mas estou tendo problemas para encontrar o "valor" no arquivo vrt porque, quando abro o arquivo com o bloco de notas, agora são palavras discerníveis e ele é composto principalmente de texto aleatório (código). Estou fazendo algo errado? - qualquer ajuda adicional muito apreciada.
enmapping 27/10/10
@ user1106 - Tente os comandos acima novamente, eu tinha deixado de fora a opção de formato de saída. Deve funcionar agora!
DavidF 27/10/10
9

Eu escrevi um pequeno script gdal python para isso, gdalsetnull.py , um programa simples de linha de comando para definir o valor especificado de raster NODATA, sem criar um novo raster. A rota mais fácil para instalar o GDAL no Windows é via OSGeo4W . Exemplos:

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

Se você não se importa com alguma sobrecarga de processamento e criação de uma nova imagem em vez de editar no local, também existe o gdal_calc, que permite alterar os valores das células, em vez de apenas atualizar os metadados.

Defina valores de zero e abaixo como nulos:

gdal_calc.py -A input.tif --outfile=result.tif --calc="A*(A>0)" --NoDataValue=0
Matt Wilson
fonte
Bem feito Matt!
DavidF 26/10/10
Isso realmente responde à pergunta? Seu script (legal!) Definirá uma cor como NULL, mas acho que ainda é específico da implementação do WMS, em que cor (digamos que transparente também seja uma cor) os valores NODATA são renderizados.
Alfonx
@ alfonx, sim, há uma diferença entre uma célula que é registrada como nodatae a célula que diz que eu sou0 e o aplicativo decide se ele ou algum outro valor deve ser ignorado. O ArcGIS respeita os resultados de gdalsetnull.py; Não tenho experiência com o GeoServer.
Matt Wilkie
1
Parece que é mudou-se novamente, agora em: github.com/maphew/maphew-gcode-archive/blob/...
Steve Bennett
link fixo, obrigado pela observação! @SteveBennett, devemos excluir esses meta comentários agora.
mate Wilkie