如何将Geotiff“无数据”颜色更改为白色/透明而不是黑色?


17

我正在准备将数据包含到地理网络节点中,该节点通过geoserver显示地图。

问题是没有“数据”的单元格在Geotiff中显示为黑色,我希望将颜色设置为白色或透明。

我正在使用ArcView,但无法访问Spatial Analyst或3D分析师。

我不希望不必分配新的sld文件,并且在从ArcGIS Desktop导出时目前使用“使用颜色图”。


Answers:


7

从概念上讲,您需要找出哪些像素值表示无数据的单元格,然后编辑颜色表以将颜色表中的RED,GREEN,BLUE(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。谢谢我一直尝试使用FWTools给出的答案(对于新手来说,导航起来会更容易一些)。但是我在vrt文件中找不到“值”时遇到了麻烦,因为当我用记事本打开文件时,它们现在是可识别的单词,并且主要由随机(代码)文本组成。难道我做错了什么?-任何其他帮助,我们将不胜感激。
enmapping

@ user1106-再试一次上面的命令,我遗漏了输出格式选项。现在应该可以工作了!
DavidF

9

我为此编写了一个小的gdal python脚本gdalsetnull.py,这是一个简单的命令行程序,用于设置指定的栅格值NODATA,而无需创建新的栅格。在Windows上安装GDAL的最简单方法是通过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,它允许实际更改单元格值而不是仅更新元数据。

将零以下的值设置为null:

gdal_calc.py -A input.tif --outfile=result.tif --calc="A*(A>0)" --NoDataValue=0

做得好,马特!
DavidF

这真的回答了这个问题吗?您的(不错!)脚本会将颜色设置为NULL,但是我猜它仍然是WMS实现特定的,其中的颜色(也就是说透明也是一种颜色)被呈现为NODATA值。
alfonx 2011年

@alfonx,是的,记录为的nodata单元格和说我是0的单元格之间存在差异,应用程序决定是忽略它还是其他值。ArcGIS确实尊重gdalsetnull.py的结果;我没有使用GeoServer的经验。
马特·威尔基

1
像它看起来我们再次感动,现在的位置:github.com/maphew/maphew-gcode-archive/blob/...
史蒂夫·贝内特

链接已修复,感谢您的关注!@SteveBennett我们现在应该删除这些元注释。
马特·威尔基

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.