将 1 波段 DEM GeoTiff 转换为 3 波段 (RGB) GeoTiff,并将完整高程值存储在 RBG + GeoServer 中

问题描述 投票:0回答:1

我的目标是在 GeoServer 中托管具有高程值的图块。

我下载了mapzen图块(链接在这里:https://www.opentopodata.org/datasets/mapzen/

最初下载用于 opentopodata。我设置了一切并成功启动。

但现在我想在 GeoServer 中使用相同的 GeoTIFF。问题是,如果您只是将这个 GeoTIFF 放在图层中,那么 GeoServer 无法返回该图块并在日志中写入错误。据我了解,GeoServer 无法与 GeoTIFF 一起使用,GeoTIFF 有 1 个波段,并且每个波段的值超过 RGB 中的一个字节。

因此,我想到了将这些 1-band Geotiff 转换为 RGB 的想法。我想用 RGB 编码完整的高程值。

改造的本质如下: RGB(R = 1 字节)(G = 1 字节)(B = 1 字节)

  • 零水平高度为 (0 0 0) RGB
  • 1 米高程为 (0 0 1) RGB
  • 256米海拔为(0 1 0) RGB
  • 10000米海拔为(0 39 16) RBG

https://www.checkyourmath.com/convert/color/decimal_rgb.php

我尝试使用 gdaldem color-relief,起初这个实用程序似乎是一种救赎,但事实上,事实证明这个实用程序并不是为了准确地替换颜色而设计的,它只是近似地替换颜色,并且会丢失按顺序排列的颜色。它或多或少可以正常使用一组明亮突出显示的颜色,但同时您可以简单地通过 RGB 值计算高程值,该值根据上面的线性变化的想法丢失了。

由于 gdaldem color-relief 无法证明自己适合上述任务,不幸的是,我正在考虑编写一个实用程序,将原始 GeoTIFF(1 波段)中的每个像素替换为 RGB,并以 3 字节加密提升值。但我还不知道如何处理它。

gdal geoserver geotiff
1个回答
0
投票

正如经常发生的那样,我在论坛上写了一个主题,几乎立即找到了答案。

解决方案:仍然是gdaldem color-relief。但排除插值,这会丢失大量数据。

  1. 使用 gdalinfo -hist 从 GeoTiff 获取信息。
  2. 从控制台响应中读取 Min= 和 Max=。这将是该文件中点的最小和最大高度。
  3. 通过遍历从最小到最大的所有高度来生成 Ramp.txt,并为每个高度确定颜色(与 RGB 线性转换,如上面的问题所述)
  4. 将结果保存在文本文件中
  5. 在 gdaldem color-relief 命令中使用文本文件。

结果,一切都变得清晰,所有颜色都就位。

© www.soinside.com 2019 - 2024. All rights reserved.