cesium中实现热力图

实现效果:

    原理:使用heatmap.js插件,先生成一个热力图,再在地图上创建一个盒子(如矩形),以纹理的形式把热力图填充到矩形中。

    1、首先下载heatmap.js插件,自己随意写了一个热力图的方法,传入热力图所需参数max和data

// 创建热力图
function createHeatMap(max, data) {
    // 创建元素
    var heatDoc = document.createElement("div");
    heatDoc.setAttribute("style", "width:1000px;height:1000px;margin: 0px;display: none;");
    document.body.appendChild(heatDoc);
    // 创建热力图对象
    var heatmap = h337.create({
        container: heatDoc,
        radius: 20,
        maxOpacity: .5,
        minOpacity: 0,
        blur: .75,
        gradient: {
            '0.9':'red',
            '0.8':'orange',
            '0.7':'yellow',
            '0.5':'blue',
            '0.3':'green',
        },
    });
    // 添加数据
    heatmap.setData({
        max: max,
        data: data
    });
    return heatmap;
}

    2、创建一个cesium视图对象

var viewer = new Cesium.Viewer("viewer");

    3、在之前建的cesium视图中,创建一个矩形(也可是椭圆、正方形、多边形等),在矩形内以纹理的形式填充,自己随意封装了一个方法

// 创建正方形 绑定热力图 
function createRectangle(viewer, coordinate, heatMap) {
    viewer.entities.add({
        name: 'Rotating rectangle with rotating texture coordinate',
        show: true,
        rectangle: {
            coordinates: Cesium.Rectangle.fromDegrees(coordinate[0], coordinate[1], coordinate[2], coordinate[3]),
            material: heatMap._renderer.canvas // 核心语句,填充热力图
        }
    });
}

    4、随意生成多个点数据

// 生成len个随机数据
function getData(len) {
    //构建一些随机数据点
    var points = [];
    var max = 0;
    var width = 1000;
    var height = 1000;
    while (len--) {
        var val = Math.floor(Math.random() * 1000);
        max = Math.max(max, val);
        var point = {
            x: Math.floor(Math.random() * width),
            y: Math.floor(Math.random() * height),
            value: val
        };
        points.push(point);
    }
    return {max: max, data: points}
}


    5、使用上述方法,则生成热力图

// 第一个热力图
var coordinate1 = [-109.0, 10.0, -80.0, 35.0];
var heatMap1 = createHeatMap(getData(1000).max, getData(1000).data);
creatRectangle(viewer, coordinate1, heatMap1);

// 第二个热力图
var coordinate2 = [-109.0, 30.0, -80.0, 41.0];
var heatMap2 = createHeatMap(getData(3000).max, getData(3000).data);
creatRectangle(viewer, coordinate2, heatMap2);

// 第三个热力图
var coordinate3 = [-109.0, 41.0, -80.0, 50.0];
var heatMap3 = createHeatMap(getData(5000).max, getData(5000).data);
creatRectangle(viewer, coordinate3, heatMap3);

 

Cesium.js 是一个用于创建基于Web的三维地理信息可视化的开源JavaScript库。Vue.js 是一个用于构建用户界面的JavaScript框架。如果要在Cesium.js实现热力图,可以结合Vue.js使用。 首先,我们需要在Vue.js项目添加Cesium.js和相关的热力图插件。可以通过使用npm命令来安装这些依赖项。安装完成后,我们可以在Vue组件引入和使用Cesium.js库。 接下来,我们需要准备地理信息数据和相应的热力图数据。热力图数据一般是一组点数据,每个点都有经纬度和相应的权重值。我们可以根据业务需求,将这些数据存储在数据库或者JSON文件。 在Vue组件,可以使用Cesium.js的API来创建一个地图实例,并设置相应的参数和视图。然后,我们可以将热力图数据加载到地图,采用相应的渲染方式呈现出来。 Cesium.js的HeatmapImageryProvider类提供了创建热力图的功能。通过设置热力图的参数和样式,可以调整它的外观和行为。例如,我们可以定义颜色渐变、方块大小等参数,以及添加鼠标交互事件来改变热力图的显示。 最后,我们可以在Vue组件的模板使用Cesium的div元素来展示地图和相应的热力图。通过Vue的数据绑定,我们可以根据需要动态地更新地图和热力图的显示。 总的来说,使用Cesium.js和Vue.js可以实现热力图的可视化展示。我们可以通过Cesium.js提供的API来加载和处理地理信息数据,并利用Vue.js的功能来动态更新热力图的显示。这种方法可以达到高效、灵活和交互性强的热力图可视化效果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值