数字高程模型(DEM)图层是一种以三维方式展示地形地貌的特殊图层,广泛应用于地理信息系统、城市规划、灾害监测等领域。
本代码基于MapV库实现了DEM图层展示功能,能够将DEM数据加载到地图中,并以热力图形式展示地表温度。
await Promise.all([
this.loadScripts([
// 加载BMapGL、MapV等库
]),
this.loadStyles([
// 加载BMapGL、DrawingManager等样式
]),
])
var map = initMap({
center: [116, 40],
zoom: 10,
})
var view = new mapvgl.View({
map: map,
})
var pixelLayer = new mapvgl.PixelLayer({
// 设置DEM图像源
source: {
image: 'https://mapopen-pub-jsapigl.bj.bcebos.com/dem/dem-bj.png',
},
// 设置图像范围
domain: [0, 2162],
// 设置无数据值
noData: -32768,
// 设置基线值
baseLine: 0,
// 设置高程缩放因子
elevationScale: 10,
// 设置图层透明度
opacity: 0.75,
// 设置是否为地形图层
isTerrain: true,
// 设置网格最大行数和列数
gridRowMax: 100,
gridColMax: 100,
// 设置DEM高度计算公式
fomularJS: function (rgb) {
return 32 - ((rgb.r + rgb.g * 256 + rgb.b * 65536) / 1000) * 6
},
// 设置DEM高度计算公式(C语言版本)
fomularC: `
float generateValue(vec4 rgb){
return rgb.r * 255. + rgb.g * 255. * 256. + rgb.b * 255. * 65536.;
}
`,
// 设置参考颜色
refColors: {
colors: ['#c20a35', '#cb5025', '#d65db1', '#4150d5', '#268b9c'],
positions: [0, 0.2, 0.6, 0.8, 1.0],
},
// 设置深度测试和深度遮挡
depthTest: true,
depthMask: true,
// 设置是否启用拾取
enablePicked: true,
// 设置点击事件处理函数
onClick: (e) => {
console.log('当前鼠标点温度:' + e.dataIndexe.toFixed(2) + '度')
},
// 设置鼠标移动事件处理函数
onMousemove: (e) => {
var div = document.querySelector('#tooltip')
if (e.dataIndex) {
div.style.display = 'block'
div.innerText = '当前鼠标点温度:' + e.dataIndex.toFixed(2) + '度'
} else {
div.style.display = 'none'
}
},
})
view.addLayer(pixelLayer)
通过本代码的实现,我们了解了如何使用MapV库加载和展示DEM数据。未来,该功能可以进一步拓展和优化: