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访问产生高额费用。但我将以任何方式开始执行此操作。
(我对此很陌生,如果在比赛中存在更深的误解,我深表歉意)
答案 0 :(得分:2)
您不能对栅格像素进行任意操作,例如raster-colorizing。您可以做两件事之一:
raster
源类型和raster
图层类型)。raster-dem
源类型和hillshade
图层类型)。有关后者的示例,请参见https://docs.mapbox.com/studio-manual/examples/hillshade/