【openlayers系统学习】3.5colormap详解(颜色映射)

五、colormap详解(颜色映射)

colormap​ 包是一个很好的实用程序库,用于创建颜色图。该库已作为项目的依赖项添加(1.7美化(设置style))。要导入它,请编辑 main.js​ 以包含以下行:

import colormap from 'colormap';

从​colormap 模块导出一个函数,colormap​函数从指定的颜色映射之一返回 RGBA 颜色值数组。如前面的示例所示,我们需要一个如下所示的值数组:

[stopValue0, color0, stopValue1, color1, stopValue1, stopValue2, color2, ...]

为了创建这样的数组,我们将编写一个函数,该函数接受颜色图的 name​ 、 min​ 停止值、 max​ 停止值、 steps​ 的数量,以及 colormap​ 函数中 reverse​ 颜色数组的选项。将以下函数添加到您的 main.js​ 中:

// 此函数生成给定颜色映射名称、范围、步数和方向的颜色停止数组。
function getColorStops(name, min, max, steps, reverse) {
  // 计算步长
  const delta = (max - min) / (steps - 1);
  // 初始化一个数组来存储颜色停止
  const stops = new Array(steps * 2);
  // 从指定的颜色映射获取一个 RGBA 颜色数组,文章最后有colormap函数使用详细的介绍
  const colors = colormap({colormap: name, nshades: steps, format: 'rgba'});
  // 如果需要,反转颜色数组
  if (reverse) {
    colors.reverse();
  }
  // 在指定间隔处用颜色值填充停止数组
  for (let i = 0; i < steps; i++) {
    stops[i * 2] = min + i * delta; // 设置停止值
    stops[i * 2 + 1] = colors[i]; // 设置相应的颜色
  }
  return stops; // 返回颜色停止数组
}

现在我们可以修改图层样式的 color​ 表达式以使用停止值和颜色值数组。编辑 main.js​ 中的图层定义以使用我们的新函数:

const layer = new TileLayer({
  source: source,
  style: {
    color: [
      'interpolate',
      ['linear'],
      ndvi,
      // color ramp for NDVI values
      ...getColorStops('earth', -0.5, 1, 10, true), //使用扩展运算符(...)插入到color数组中
    ],
  },
});

重新加载 http://localhost:5173/ 以查看应用于 NDVI 输出的新颜色图。

image

从 Sentinel-2 GeoTIFF 生成的 NDVI图像

colormap包的具体介绍:https://github.com/bpostlethwaite/colormap?tab=readme-ov-file

API

属性默认值Meaning
colormap'jet'从下面的图像中选择一个颜色映射名称,或者自定义一个颜色比例尺 —— 一个包含{index, rgb}​对象序列,其中 index 是 0 到 1 的数字,rgb 是一个长度为 3 或 4 的数组,包含颜色停止点的值。
nshades72返回数组中的颜色数量,最小数量取决于 colormap​。
format'hex''hex'​ 表示 #aabbcc​,'rgbaString'​ 表示 rgba(255, 255, 255, 1)​,'rgba'​ 表示 [255, 255, 255, 1]​,'float'​ 表示 [1, 1, 1, 1]​。
alpha1Alpha 范围,可以是一个包含 alpha 值的数组,也可以只是包含起始/结束颜色的 2 个值。

colormap​属性的取值:

image

  • 24
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenLayers 是一个基于 JavaScript 的开源地图库,它提供了丰富的地图显示和交互功能。官网提供了许多示例代码,这里给出其中几个示例的中文详解。 1. 基本地图显示 这个示例展示了如何在页面上显示一个基本的地图。代码中首先创建了一个地图对象,并指定了地图的显示范围和分辨率。然后创建了一个使用 OpenStreetMap 数据源的图层,并将该图层添加到地图中。最后将地图对象添加到页面上的一个 div 元素中。 2. 点击地图获取坐标 这个示例展示了如何在地图上点击获取坐标。代码中首先创建了一个地图对象,并添加了一个监听器来响应地图上的点击事件。当用户在地图上点击时,监听器会获取点击位置的坐标,并在页面上显示出来。 3. 矢量图层显示 这个示例展示了如何在地图上显示一个矢量图层。代码中首先创建了一个地图对象,并添加了一个使用 GeoJSON 数据源的矢量图层。然后创建了一个样式对象来定义矢量图层的样式,并将该样式应用到矢量图层中。最后将地图对象添加到页面上的一个 div 元素中。 4. WMS 图层显示 这个示例展示了如何在地图上显示一个 WMS 图层。代码中首先创建了一个地图对象,并添加了一个使用 WMS 数据源的图层。然后指定了 WMS 服务的 URL 和图层名称,并将该图层添加到地图中。最后将地图对象添加到页面上的一个 div 元素中。 以上仅是示例中的部分代码,完整代码请参考官网。希望这些中文详解能够帮助你更好地理解 OpenLayers 的使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值