import BaseRenderer from './BaseRenderer'
import { defaultValue } from '../../util'
import { Zondy } from '../../base'
import HeatmapColorStop from './support/HeatmapColorStop'
import { RendererType } from '../../base/enum'
/**
* 热力图渲染器
* @class HeatmapRenderer
* @extends BaseRenderer
* @moduleEX RendererModule
* @param {Object} options 构造参数
* @param {String} [options.type]
* @param {Array<HeatmapColorStop>} [options.colorStops] 描述渲染器色带的对象数组。像素的密度值与渲染器的 maxDensity 的比率映射到相应的颜色。例如 { color: [133, 193, 200, 0], ratio: 0 }
* @param {Number} [options.radius] 热力图数据点半径,单位像素。
* @param {String} [options.field] 要素字段名称,用于指定数据的热力值,优先级高于valueExpression.
* @param {String} [options.valueExpression] 字段表达式,用于指定数据的热力值,会覆盖field
* @param {String} [options.valueExpressionTitle] 字段表达式标题
* @param {Number} [options.maxDataValue] 热力图最大数据范围,热力图内点的权重值大于此数,不进行渲染。
* @param {Number} [options.minDataValue] 热力图最小数据范围,热力图内点的权重值小于此数,不进行渲染。
*/
class HeatmapRenderer extends BaseRenderer {
constructor(options) {
super(options)
options = defaultValue(options, {})
/**
* 渲染器类型,默认为'heatmap'
* @member {String} HeatmapRenderer.prototype.type
*/
this.type = RendererType.heatmap
/**
* 描述渲染器色带的对象数组。像素的密度值与渲染器的 maxDensity 的比率映射到相应的颜色。例如 { color: [133, 193, 200, 0], ratio: 0 }
* @member {Array<HeatmapColorStop>} HeatmapRenderer.prototype.colorStops
*/
this.colorStops = defaultValue(options.colorStops, []).map((v) =>
HeatmapColorStop.fromJSON(v)
)
/**
* 热力图数据点半径,单位像素。
* @member {Number} HeatmapRenderer.prototype.radius
*/
this.radius = options.radius
/**
* 要素字段名称,用于指定数据的热力值,优先级高于valueExpression.
* @member {String} HeatmapRenderer.prototype.field
*/
this.field = options.field
/**
* 字段表达式,用于指定数据的热力值。
* @member {String} HeatmapRenderer.prototype.valueExpression
*/
this.valueExpression = options.valueExpression
/**
* 字段表达式标题
* @member {String} HeatmapRenderer.prototype.valueExpressionTitle
*/
this.valueExpressionTitle = options.valueExpressionTitle
/**
* 热力图最大数据范围,热力图内点的权重值大于此数,不进行渲染。
* @member {Number} HeatmapRenderer.prototype.maxDataValue
*/
this.maxDataValue = options.maxDataValue
/**
* 热力图最小数据范围,热力图内点的权重值小于此数,不进行渲染。
* @member {Number} HeatmapRenderer.prototype.minDataValue
*/
this.minDataValue = options.minDataValue
}
/**
* 通过json构造HeatmapRenderer对象
* @param {Object} json json对象
* @return {HeatmapRenderer} HeatmapRenderer实例
*/
static fromJSON(json) {
json = defaultValue(json, {})
return new HeatmapRenderer(json)
}
/**
* 导出json对象
* @return {Object} json对象
*/
toJSON() {
const json = super.toJSON()
json.type = this.type
json.colorStops = this.colorStops.map((v) => {
return v.toJSON()
})
json.radius = this.radius
json.field = this.field
json.valueExpression = this.valueExpression
json.valueExpressionTitle = this.valueExpressionTitle
json.maxDataValue = this.maxDataValue
json.minDataValue = this.minDataValue
return json
}
/**
* 克隆HeatmapRenderer对象
* @return {HeatmapRenderer} 克隆后的HeatmapRenderer实例
*/
clone() {
return new HeatmapRenderer(this.toJSON())
}
}
Zondy.Renderer.HeatmapRenderer = HeatmapRenderer
export default HeatmapRenderer