如何在Mapbox GL JS中使用Mapbox Terrain-RGB拼贴集?

时间:2019-07-10 01:33:29

标签: mapbox mapbox-gl-js

Mapbox使用RGB栅格图块(“ Mapbox Terrain-RGB”)发布海拔数据,可在以下位置找到:https://docs.mapbox.com/help/troubleshooting/access-elevation-data/#mapbox-terrain-rgb

我正在努力弄清楚如何使用Mapbox GL JS使用这些数据;无论在样式编辑器工作室还是在客户端上,我都找不到一种进行RGB解码的方法。

寻找示例,我只能找到一个Mapbox示例,其中该数据用于leaflet.js,而不是Mapbox GL JS:https://blog.mapbox.com/global-elevation-data-6689f1d0ba65

我想重现的等效openlayers代码是这样的:


function flood(pixels, data) {
  var pixel = pixels[0];
  if (pixel[3]) {
    var height = -10000 + ((pixel[0] * 256 * 256 + pixel[1] * 256 + pixel[2]) * 0.1);

    if (height <= 100 && height > 0) {
      pixel[0] = 255;
      pixel[1] = 15;
      pixel[2] = 15;
      pixel[3] = (255 - height * 2.5);
    } else {
      pixel[3] = 0;
    }
  }
  return pixel;
}

const elevation = new XYZ({
  url: 'https://api.mapbox.com/v4/mapbox.terrain-rgb/{z}/{x}/{y}.pngraw?access_token=' + key,
  crossOrigin: 'anonymous',
  transition: 0
});

var raster = new RasterSource({
  sources: [elevation],
  operation: flood
});

但我无法找到使用Mapbox GL JS在客户端上执行此操作的任何方法。

理想情况下,我会避免直接调用API;我正在尝试在Mapbox GL JS客户端中工作,以避免通过直接API访问产生高额费用。但我将以任何方式开始执行此操作。

(我对此很陌生,如果在比赛中存在更深的误解,我深表歉意)

1 个答案:

答案 0 :(得分:2)

您不能对栅格像素进行任意操作,例如raster-colorizing。您可以做两件事之一:

  1. 将栅格显示为图像(使用raster源类型和raster图层类型)。
  2. 将栅格作为DEM进行处理,并将其显示为山影(使用raster-dem源类型和hillshade图层类型)。

有关后者的示例,请参见https://docs.mapbox.com/studio-manual/examples/hillshade/