三维可视化场景绘制热力图

方法1:通过多边形标注初始化热力图(推荐方法)

第一步,创建一个多边形标注 (以下代码都要在 map.on('loadComplete') 中调用)

    // 创建一个多边形标注,并添加到场景中
rectangleMarker = new esmap.ESPolygonMarker({...})

// 获取第一层的楼层对象  
var floor = map.getFloor(1);

// 获取或者新建一个name为'mypoly'的多边形标注层    
var layer = floor.getOrCreateLayerByName('mypoly', esmap.ESLayerType.POLYGON_MARKER);

// 添加多边形标注
layer.addMarker(rectangleMarker);
  

关于new esmap.ESPolygonMarker({...}),多边形标注方法请参考 绘制多边形标注 页面

第二步,初始化热力图

    var gradient = { 0.45: 'rgb(201,135,255)', 0.65: 'rgb(155,49,255)', 0.95: 'yellow', 1.0: 'rgb(157,53,255)' }

rectangleMarker.initHeatMap({
  radius: 60,         // 热点半径
  opacity: 1,         // 热力图透明度
  mapOpacity: 0.8,    // 场景楼层整体透明度
  max: 100,           // 热力点value的最大值
  maxSize: 2048,      // 热力图画布分辨率
  gradient: gradient  // 渐变色值
})
  

第三步,添加热力图数据

    // 第一种方法,添加热力点
rectangleMarker.addHeatPoint({
  x: 13496140.383561742,
  y: 3640230.05635368,
  value: 10   // 热力值
});

// 第二种方法,您也可以生成随机热力图数据,参数为生成热力点数量
rectangleMarker.randomHeatPoints(200);
  

第四步,更新热力图

    // 添加好热力点数据后,需要更新绘制热力图
rectangleMarker.updateHeatMap() 
  

清除热力图数据

    // 清除热力点,可以调用addHeatPoint重新绘制热力图
rectangleMarker.clearHeatPoints()
  

方法2:通过楼层初始化热力图

第一步,新建热力图对象实例 (以下代码都要在 map.on('loadComplete') 中调用)

    var gradient = { 0.45: 'rgb(201,135,255)', 0.65: 'rgb(155,49,255)', 0.95: 'yellow', 1.0: 'rgb(157,53,255)' }
var heatmapInstance = esmap.ESHeatMap.create(map, {
  radius: 20,          // 热力点半径
  opacity: 0.5,        // 透明度
  max: 100,            // 热力点value的最大值
  maxSize: 2048,       // 热力图画布分辨率
  gradient: gradient   // 自定义渐变色
});
      
var fnum = map.getFloorNumByName('F1'); // 通过楼层名称来获取场景内部楼层层数
heatmapInstance.setFloorNum(fnum);      // 将热力图设置到某个楼层上
  

第二步,添加热力图数据

    // 第一种方法:一次添加一个热力点,在addPoint方法中,前两个参数对应xy坐标,第三个参数是热力点数值
heatmapInstance.addPoint(13496140.383561742, 3640230.05635368, 10);
heatmapInstance.addPoint(13496150.383561742, 3640235.05635368, 20);

// 第二种方法:一次添加多个热力点,数组的对象中xy对应坐标,value是热力点数值
var pts=[
  {x: 13496140.383561742, y: 3640230.05635368, value: 10},
  {x: 13496140.383561742, y: 3640230.05635368, value: 10},
  {x: 13496140.383561742, y: 3640230.05635368, value: 10}
];

heatmapInstance.addPoints(pts);

// 第三种方法,您也可以生成随机坐标位置的热力图数据,参数为生成热力点数量
heatmapInstance.randomPoints(200);
  

第三步,将热力图应用到楼层中

    // 把热力图应用到需要添加的楼层对象中
var floorLayer = map.getFloor(fnum);       // fnum为楼层层数
floorLayer.applyHeatMap(heatmapInstance); 
  

清除某楼层的热力图

    var floorLayer = map.getFloor(fnum)
floorLayer.removeHeatMap(heatmapInstance)
  
初始化参数说明:
参数
说明
类型
可选值
默认值
是否必填
radius
热力点半径
Number
——
30
opacity
透明度
Number
0-1
1
mapOpacity
场景楼层整体透明度
Number
0-1
1
max
热力点value的最大值
Number
——
——
maxSize
热力图画布分辨率
Number
——
2048
gradient
渐变色值,可自定义
Object
——

0.45: rgb(0,0,255)

0.55: rgb(0,255,255)

0.65: rgb(0,255,0)

0.95: yellow

1: rgb(255,0,0)

注意网页CSS样式里面的属性不能有透明,否则热力显示不正常

    // 若body和html里面的有这个属性必须要去掉 
{
   background: transparent;
}