Cesium中三维热力图的实现思路

1、普通热力图的绘制基于开源库heatmap.js,将数据组织成它需要的格式

heatmap.js需要的输入数据格式 

 

2、使用同一份数据通过heatmap.js绘制两张二维热力图, 一张正常的热力图,一张用灰度表示的热力图(只有黑白两种颜色的渐变)

Heatmap.create({
	// ...
	gradient: {
		'0.3': 'green',
		'0.5': 'blue',
		'0.8': 'yellow',
		'0.95': 'red'
	}
});

heatmap.js中正常热力图的渐变颜色设置

Heatmap.create({
	// ...
	gradient: {
		'0.0': 'black',
		'1.0': 'white'
	}
});

 heatmap.js中灰度热力图的渐变颜色设置

3、heatmap.js绘制出来的是canvas,可以很容易地转换成Cesium的Texture。对应的是一张正常的热力图纹理,一张灰度纹理。

 

 正常的热力图纹理

 

灰度纹理

4、将热力图显示范围的多边形几何体进行三角细分(Cesium提供了三角细分相关的算法,PolygonGeometry.fromPositions方法的granularity参数) ,三角细分后才有足够多的顶点来拉伸不同的高度,产生三维的效果,不然只有多边形的几个角点。

5、着色器处理

在顶点着色器中,从灰度纹理上取颜色值的R分量(0-1范围的浮点数),在模型坐标系下指定顶点坐标的z值为:

底部高程 + 拉伸高度 * R分量

片元着色器很简单,直接从正常的热力图纹理上取颜色值赋给gl_FragColor即可。

 

三维热力图效果 

  • 32
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Cesium是一个用于构建基于Web的地球和地理应用程序的开源JavaScript库。它提供了丰富的功能,包括可视化地图、三维场景和各种地理信息的呈现。在Cesium,要实现立体热力图,我们可以按照以下步骤进行操作: 1. 数据准备:首先,我们需要准备热力图所需的数据。这些数据可以是一组带有位置和强度信息的点或网格数据。点数据可以是经纬度坐标或三维笛卡尔坐标。 2. 加载场景:在Cesium创建一个基本的地球场景。你可以选择使用默认的全球地形和图像或加载自定义的地形和图层。 3. 创建热力图:使用Cesium的实体(Entity)或其他图元,将准备好的数据添加到场景。可以为每个数据点或网格创建一个实体,并设置其位置、尺寸和颜色等属性。 4. 绘制热力效果:为了实现立体热力图,可以使用一些渐变色或其他颜色映射方案来表示不同强度的数据。可以使用Cesium的材质(Material)和着色器(Shader)来实现自定义的颜色渐变效果。 5. 交互和控制:在场景添加交互和控制功能,以便用户可以缩放、旋转和平移热力图,以及根据需求显示或隐藏热力图。 6. 其他可选功能:根据需要,可以添加其他功能,如鼠标悬停显示数据信息、点击交互以及动画效果等。 总之,通过Cesium,我们可以方便地实现立体热力图,只需准备好数据并进行相应的设置和调整即可。这样的热力图可以在三维场景以立体的方式呈现,提供更直观的信息表达和交互体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值