iClient3D for WebGLx疫情防控 之 热力图展示与人流监控

Nec_Eu

新冠肺炎,是人类迈入21世纪二十年代后遭遇的首个全球重大突发事件。掐指算来,从1月疫情爆发开始到现在,时间已经过去了3个月。然而,凶猛的病毒并没有因此逐渐消逝,反而在全球各个角落愈演愈烈。所幸,最先爆发疫情的中国,在我党的正确领导下,本土病例不仅得到了大幅控制,与此同时展开的疫情防控工作也收效显著。为了进一步的精准防控、减少人流聚集,将热力图与三维结合,进行人流可视化监视是有效手段之一。
本篇博客,将基于Supermap iClient3D for WebGL平台,从数据获取到数据展示,提供三维人流热力图的具体参考方案。
最终效果如图(本示例仅为场景模拟,不与实际相符):

在这里插入图片描述

1、获取并解析人流大数据

详细的人流大数据请从相关的专业大数据采集平台获取,这里不再赘述;本博客仅以免费公开的腾讯位置大数据https://heat.qq.com)作为参考,实现人流大数据的获取。
腾讯位置大数据服务,发送get请求即可获取到相应数据。不过需要注意的是,直接发送请求会出现跨域问题。所以需要先部署nginx反向代理。
部署好nginx后,发送的get请求就可以返回有效的json值了。相关代码如下:

$.getJSON('https://heat.qq.com/api/getHeatDataByDate.php?region_id=1287&date=2020-03-26&sub_domain=?,function(jsondata)'){
      //获取json的key值和value值并设置为全局变量。
      //其中,每一个key值代表时间
      //而每一个value值则包含了当前时间下的人流坐标以及密度信息
      keys = Object.keys(jsonData);
      values = Object.values(jsonData);
      
      $("#timeline").empty();
      //获取时间戳名称,将名称加入下拉选择框
      for(var i = 0; i < keys.length; i++){
         $("#timeline").append("<option value=" + i +">" + keys[i] + "</option>");
      }
};

2、初始化热力图

热力图的生成,我们可以借助一个功能强大的热力图开源js库,即heatmap.jshttps://www.patrick-wied.at/static/heatmapjs/)。通过这个js库我们可以简单快速的生成新的热力图。相关js文件可以在Supermap iClient3D for WebGL产品包里获取。

在引用了该js库后,我们首先要创建一个热力图画布。

<div class="heatmap" style="overflow: hidden; width: 100px;height: 100px;">
    <div class="heatmap-canvas" width="50%" height="25%" >
    </div>
</div>

然后,我们创建好一个热力图实体,即可完成热力图的初始化了。

heatmapInstance = h337.create({
    container : document.querySelector('.heatmap')
});

3、动态生成热力图

在第一部分里,我们获取到了各个时间节点以及该时间节点下的人流位置信息;然后在第二部分里,我们初始化了一个热力图画布。现在,根据位置信息我们就可以在画布上动态生成热力图了。
heatmap.js动态生成热力图需要两个参数。一个是热力值的总阈值,每个热力值与总阈值的比例决定了显示时不同的颜色;另外一个是形式为{x, y, value}的热力点的集合,其中x, y分别代表画布的像素位置点,而value代表了该点的热力值。

function createHeatMap(timeid) {
    var id = parseInt(timeid);
    var points = [];
    var max = 0;
    var value = values[id];
    var pointsValue = value.split("|");
    for(var j=0; j<pointsValue.length; j++){
        var pointValue = pointsValue[j];
        if(pointValue !=""){
            var pointDetail = pointValue.split(",");
            var val;
            if(pointDetail.length == 2){
                val = 1;
            }else{
                val = parseInt(pointDetail[2]);
            }
            var point = {
                x : parseInt(pointDetail[0])+50,
                y : parseInt(pointDetail[1])+50,
                value : val
            };
            max = Math.max(max, val);
            points.push(point);
        }
    }
    var data = {
        max : max,
        data : points
    }
    heatmapInstance.setData(data);
    addHeatMapToScene();
}

4、三维与热力图结合

生成好了热力图,我们就可以把它加到场景里用于展示与监控了。Supermap iClient3D for WebGL产品支持将图像直接投放到三维模型上,可调用该接口用于热力图与三维场景的结合。

function addHeatMapToScene() {
    var mycanvas = $(".heatmap-canvas");
    var imgData= mycanvas[1].toDataURL("image/png");
    var img = new Image();
    img.src = imgData;
    img.onload = function() {
        var layers = viewer.scene.layers.layerQueue;
        for(var layer of layers) {
            layer.addOverlayImage({
                bounds: new Cesium.Rectangle(116.44595678194692/180*Math.PI, 39.9029928162429/180*Math.PI, 116.4713854187713/180*Math.PI, 39.92118449094035/180*Math.PI),
                name: 'heat-map' + Date.now(),
                image: img
            });
        }
    }
}

Bonus.历史热力图动态浏览

除了浏览特定时刻的热力图,我们也可以使用定时器实现热力图的历史动画浏览。

$("#start").click(function(){
    i=0;
    var interval = setInterval(function(){
        if(i<keys.length){
            $("#timeline").val(i);
            createHeatMap(i);
            i++;
        }else{
            clearInterval(interval);
        }
    },100);
});

动画效果如下:
在这里插入图片描述

### 回答1: SuperMap iClient 3D for WebGL 是一款基于 WebGL 技术的三维地图开发工具,主要用于构建具有三维效果的地图应用程序。该工具提供了丰富的 API 接口和示例代码,可以帮助开发者快速上手,实现各种三维地图功能,如地形展示、建筑物模型、动态效果等。同时,SuperMap iClient 3D for WebGL 还支持多种数据格式,包括 SuperMap iServer 数据、OGC 标准数据、KML、GeoJSON 等,可以满足不同应用场景的需求。 ### 回答2: SuperMap iClient3D for WebGL是一个基于WebGL技术的三维地图开发框架。它提供了一系列的API和工具,使开发人员能够更加轻松地构建出高质量的三维地图应用。下面,我将从以下几个方面介绍SuperMap iClient3D for WebGL教程。 一、环境配置 SuperMap iClient3D for WebGL的开发需要先配置开发环境,包括安装Node.js、下载安装SuperMap iServer、下载安装SuperMap iClient3D资源包、创建Web应用程序。 二、基本概念 在学习SuperMap iClient3D for WebGL之前,需要了解一些基本概念。这些概念包括:场景(Scene)、层(Layer)、覆盖物(Overlay)等。在使用SuperMap iClient3D for WebGL时需要理解这些概念。 三、API使用 SuperMap iClient3D for WebGL提供了众多的API,使用这些API能够快速构建出一个三维地图应用。这些API包括:场景相关的API,如创建场景、设置场景属性等;层相关的API,如加载图层数据、隐藏、显示图层等;覆盖物相关的API,如创建点、线、面等覆盖物。 四、进阶应用 在掌握SuperMap iClient3D for WebGL的基础之后,可以通过进阶应用来进一步加深对这个框架的理解。进阶应用包括地球的三维测量、地球的动态效果、地球的热点区域等。 总之,SuperMap iClient3D for WebGL是一个非常实用的三维地图开发框架。通过学习其教程,开发人员可以更加方便、快速地构建出高质量的三维地图应用。 ### 回答3: SuperMap iClient 3D for WebGL是一款基于WebGL技术的开源GIS JavaScript库,用于构建高效、功能强大的3D GIS应用程序。这个库支持在Web浏览器里实现高质量的三维可视化效果,包括三维地形、建筑物、模型、标签等。现在,我来为你们讲解一下关于SuperMap iClient 3D for WebGL的教程。 一、前置知识 在接触SuperMap iClient 3D for WebGL之前,建议你先学习基本的WebGL知识和JavaScript语言,也应该具备计算机图形学基础和3D模型制作知识。 二、环境配置 在使用SuperMap iClient 3D for WebGL前,我们需要进行环境配置,在编写和运行项目时可以根据需要安装一系列依赖项,例如Node.js、npm包管理器、Gulp自动化工具、webpack工具和TypeScript编译器等。 三、基本使用 SuperMap iClient 3D for WebGL提供了丰富的API以实现3D可视化应用程序的开发,其中包括地图、图层、标注、工具、渲染等方面。同时,它还提供了多种数据格式的支持,如XYZ、OGC、JSON、KML、GML等。此外,SuperMap iClient 3D for WebGL还支持多种操作和交互方式,如平移、旋转、缩放、选取、编辑等,让用户可以更加自由地探索和编辑地图数据。 四、示例应用 SuperMap iClient 3D for WebGL提供了一系列的示例应用程序,可以帮助用户更好的理解其使用方法和特点,其中包括一些经典的三维场景展示和实时数据可视化等。例如,用户可以体验到城市三维建模、天气预报、热力图、空气质量监控等实用的功能。此外,SuperMap iClient 3D for WebGL也提供了一些模板和组件,供用户快速搭建自己的3D GIS应用程序。 总之,SuperMap iClient 3D for WebGL是一款非常优秀的基于WebGL技术的GIS JavaScript库,具有开源、高效、功能强大、易用等特点,可以为用户提供丰富多彩的三维GIS应用程序。当然,在使用前,建议用户先了解基本的WebGL和JavaScript知识,同时还需配置好开发环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值