cesium 图层构建的那些事 (十二)

我们这次来构建热力图

热力图定义参数

export interface PHeatMapRenderer {
type: string;
radius: number;
colorStops: Array<{ color: string, ratio: number }>,
blur?: number;
maxValue: number;
minValue: number;
maxOpacity?: number;
minOpacity?: number;
}

export interface PHeatMap {
name: string;
source: Array<{ x: number, y: number, value: number }>;
renderer: PHeatMapRenderer
}
构建heatmap 渲染器

export class HeatMapRenderer {
type=“HeatMapRenderer”;
public renderer:any;
constructor(renderer:any) {
super();
this.renderer = renderer;
}

getSymbol(value: number) {
throw new Error(‘Method not implemented.’);
}

getH337Option(container:any){
const { radius=30, maxOpacity=1, minOpacity=1,blur=0.85 } = this.renderer
const gradient = this.getGradient();
return {container, radius, maxOpacity, minOpacity,blur,gradient};
}
getData(source:Array<{x:number,y:number,value:number}>,extent:any,width:number,height:number):any{
const data = source.map((item) => {
var x:number = ((item.x - extent.xMin) / (extent.xMax - extent.xMin) * width);
var y:number = (-(item.y - extent.yMin) / (extent.yMax - extent.yMin) + 1) * height;
x = parseFloat(x.toFixed(2));
y = parseFloat(y.toFixed(2));
return { x, y, value: item.value }
});
const max = this.renderer.maxValue || 1;
const min = this.renderer.minValue || 0;
return {max,min,data }
}

private getGradient(){
if(!this.renderer.colorStops){
return {
‘.3’: ‘blue’,
‘.5’: ‘green’,
‘.7’: ‘yellow’,
‘.95’: ‘red’
}
}
const result:any = {};
for(const item of this.renderer.colorStops){
result[item.ratio+""] = item.color;
}
return result;
}

}
构建heatmap 图层


import {Layer} from "./Layer";
import {HeatMapRenderer} from "./HeatMapRenderer";
import {PHeatMap} from "./PHeatMap";
import {PHeatMapRenderer} from "./PHeatMapRenderer";

export class HeatMap extends Layer{
private renderer: HeatMapRenderer;
private extent: any;
private source: Array;
constructor(option: PHeatMap) {
super(option.name);
this.source = option.source;
this.renderer = new HeatMapRenderer(option.renderer);
this.render();
}

setSource(source: Array<{x:number,y:number,value:number}>) {
this._removeByMap(true);
this.source = source;
this.render();
 更多参考https://xiaozhuanlan.com/topic/6839472051
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值