UNPKG

@mapgis/webclient-es6-mapboxgl

Version:

147 lines (129 loc) 7.23 kB
import { Common } from '@mapgis/webclient-es6-service'; const { Zondy } = Common; import {Graph} from './Graph'; /** * @private * @class Zondy.Theme.RankSymbol * @classdesc 符号专题要素基类。 * @description 此类定义了符号专题要素基础模型,具体的图表模型通过继承此类,在子类中实现 assembleShapes 方法。 * 符号专题要素模型采用了可视化图形大小自适应策略,用较少的参数控制着图表诸多图形,图表配置对象 <Zondy.Theme.RankSymbol.setting> 的基础属性只有 5 个, * 它们控制着图表结构、值域范围、数据小数位等基础图表形态。构成图表的图形必须在图表结构里自适应大小。 * 此类不可实例化,此类的可实例化子类必须实现 assembleShapes() 方法。 * @param {Zondy.Feature.Vector} data - 用户数据。 * @param {Zondy.Layer.RankSymbol} layer - 此专题要素所在图层。 * @param {Array.<string>} fields - data 中的参与此图表生成的字段名称。 * @param {Object} setting - 图表配置对象。 * @param {Zondy.LonLat} [lonlat] - 专题要素地理位置。默认为 data 指代的地理要素 Bounds 中心。 * * @extends Zondy.Feature.Theme.Graph * */ class RankSymbol extends Graph { constructor(data, layer, fields, setting, lonlat, options) { super(data, layer, fields, setting, lonlat, options); /** * @member Zondy.Theme.RankSymbol.prototype.setting -{Object} * @description 符号配置对象,该对象控制着图表的可视化显示。 * 下面是此配置对象的 5 个基础可设属性:<br> * @param {Array.<number>} codomain - 值域,长度为 2 的一维数组,第一个元素表示值域下限,第二个元素表示值域上限。 * @param {number} [XOffset] - 专题要素(图表)在 X 方向上的偏移值,单位像素。 * @param {number} [YOffset] - 专题要素(图表)在 Y 方向上的偏移值,单位像素。 * @param {Array.<number>} [dataViewBoxParameter] - 数据视图框 dataViewBox 参数,它是指图表框 chartBox (由图表位置、图表宽度、图表高度构成的图表范围框)在左、下,右,上四个方向上的内偏距值。 * @param {number} [decimalNumber] - 数据值数组 dataValues 元素值小数位数,数据的小数位处理参数,取值范围:[0, 16]。如果不设置此参数,在取数据值时不对数据做小数位处理。 * 除了以上 5 个基础属性,此对象的可设属性在不同子类中有较大差异,不同子类中对同一属性的解释也可能不同。 * 请在此类的子类中查看 setting 对象的可设属性和属性含义。 */ this.setting = null; // 配置项检测与赋值 if (setting && setting.codomain) { this.setting = setting; this.DVBCodomain = this.setting.codomain; } this.CLASS_NAME = "Zondy.Theme.RankSymbol"; } /** * @function Zondy.Theme.RankSymbol.prototype.destroy * @description 销毁专题要素。 */ destroy() { this.setting = null; super.destroy(); } /** * @function Zondy.Theme.RankSymbol.prototype.initBaseParameter * @description 初始化专题要素(图形)基础参数。 * 在调用此方法前,此类的图表模型相关属性都是不可用的 ,此方法在 assembleShapes 函数中调用。 * 调用此函数关系到 setting 对象的以下属性。 * @param {Array.<number>} codomain - 值域,长度为 2 的一维数组,第一个元素表示值域下限,第二个元素表示值域上限。 * @param {number} [XOffset] - 专题要素(图形)在 X 方向上的偏移值,单位像素。 * @param {number} [YOffset] - 专题要素(图形)在 Y 方向上的偏移值,单位像素。 * @param {Array.<number>} [dataViewBoxParameter] - 数据视图框 dataViewBox 参数,它是指图形框 chartBox (由图表位置、图表宽度、图表高度构成的图表范围框)在左、下,右,上四个方向上的内偏距值。 * @param {number} [decimalNumber] - 数据值数组 dataValues 元素值小数位数,数据的小数位处理参数,取值范围:[0, 16]。如果不设置此参数,在取数据值时不对数据做小数位处理。 * @returns {boolean} 初始化参数是否成功。 */ initBaseParameter() { // 参数初始化是否成功 var isSuccess = true; // setting 属性是否已成功赋值 if (!this.setting) { return false; } var sets = this.setting; // 图表偏移 if (sets.XOffset) { this.XOffset = sets.XOffset; } if (sets.YOffset) { this.YOffset = sets.YOffset; } this.XOffset = sets.XOffset ? sets.XOffset : 0; this.YOffset = sets.YOffset ? sets.YOffset : 0; // 其他默认值 this.origonPoint = []; this.chartBox = []; this.dataViewBox = []; this.DVBParameter = sets.dataViewBoxParameter ? sets.dataViewBoxParameter : [0, 0, 0, 0]; this.DVBOrigonPoint = []; this.DVBCenterPoint = []; this.origonPointOffset = []; // 图表位置 this.resetLocation(); // 专题要素宽度 w var w = this.width; // 专题要素高度 h var h = this.height; // 专题要素像素位置 loc var loc = this.location; // 专题要素像素位置 loc this.origonPoint = [loc[0] - w / 2, loc[1] - h / 2]; // 专题要素原点(左上角) var op = this.origonPoint; // 图表框([left, bottom, right, top]) this.chartBox = [op[0], op[1] + h, op[0] + w, op[1]]; // 图表框 var cb = this.chartBox; // 数据视图框参数,它是图表框各方向对应的内偏距 var dbbP = this.DVBParameter; // 数据视图框 ([left, bottom, right, top]) this.dataViewBox = [cb[0] + dbbP[0], cb[1] - dbbP[1], cb[2] - dbbP[2], cb[3] + dbbP[3]]; // 数据视图框 var dvb = this.dataViewBox; //检查数据视图框是否合法 if (dvb[0] >= dvb[2] || dvb[1] <= dvb[3]) { return false; } // 数据视图框原点 this.DVBOrigonPoint = [dvb[0], dvb[3]]; // 数据视图框宽度 this.DVBWidth = Math.abs(dvb[2] - dvb[0]); // 数据视图框高度 this.DVBHeight = Math.abs(dvb[1] - dvb[3]); // 数据视图框中心点 this.DVBCenterPoint = [this.DVBOrigonPoint[0] + this.DVBWidth / 2, this.DVBOrigonPoint[1] + this.DVBHeight / 2]; // 数据视图框原点与图表框的原点偏移量 this.origonPointOffset = [this.DVBOrigonPoint[0] - op[0], this.DVBOrigonPoint[1] - op[1]]; return isSuccess; } } export {RankSymbol}; Zondy.Theme.RankSymbol = RankSymbol;