首页 > 解决方案 > OpenLayers 6 GeoTiff 样式表达式 - 为什么波段值在 0 和 1 之间?

问题描述

我有一个云优化 Geotiff (COG),其中包含一些只有一个波段的天气数据。像素值代表云的高度,在 0-70 范围内。在leaflet-georaster 中,我可以使用函数轻松设置样式,测试实际像素值:

function echotopColor(input) {
    const value = input[0];
    if (value === -1 || value === 0 || value === 255 || isNaN(value)) {
      return "rgba(0,0,0,0.0)";
    }
    if (value >= 70) return "rgba(0,0,0,0.0)";
    if (value >= 50) return "#A10002";
    if (value >= 45) return "#FF0000";

我试图在 OpenLayers 中模拟这一点,查看一些 geotiff 样本:

new TileLayer({
  source: source,
  style: {
    color: [
      'case',
      ['>=', ['band', 1], .20],
      [161, 0, 2],
      ['>=', ['band', 1], .16],
      [255, 0, 0],
      ['>=', ['band', 1], .15],
      [202, 98, 1],
      ['>=', ['band', 1], .14],
      [223, 224, 58],
      ['>=', ['band', 1], .13],
      [98, 192, 59],
      ['>=', ['band', 1], .12],
      [19, 161, 196],
      ['>=', ['band', 1], 0.1],
      [22, 97, 129],
      [0, 0, 0, 0.0]
    ],
  }
}),

我不得不使用反复试验来尝试找出像素值的范围,而我所拥有的是一个完整的猜测,但至少它的颜色相似。OL 文档说样式“band”运算符将返回一个介于 0 和 1 之间的值。它如何映射到我的原始值?有没有办法可以测试实际的像素值?它似乎真的过于复杂,或者我就是不明白。我可以使用函数来设置 geotiff 的样式吗?

标签: openlayersopenlayers-6

解决方案


推荐阅读