/** * 监测因子类 * 存储某一类型的监测因子数据,提供3d地图绘制高度换算,绘图范围设定等功能 * 用于3d地图绘制 */ ; // (function($, DataUtil) { function Factor(options) { /** * {factorData: 43.209 factorId: "1" factorName: "NO2" physicalQuantity: 211.1 sensorId: null statusList: null} */ this.datas = [] // 原始数据 // this.lnglats = [] //3d地图当前展示坐标点数组 this.factorName this.factorId this.heights = [] //3d地图当前展示坐标点对应的高度数组 this.colors = [] // 3d地图当前展示坐标点对应的颜色数组 this.bottomColor//最小值对应的图例色 this.min = -1 // 当前显示的最小值 this.max = -1 // 当前显示的最大值 this.originMin = -1 // 原始数据中的最小值 this.originMax = -1 // 原始数据中的最大值 this.standardMin = -1//监测因子类型对应的标准最小值 this.standardMax = -1//监测因子类型对应的标准最大值 this.legendType = Legend.S_TYPE//图例模式 if (options != undefined) { this.datas = options.datas this.heights = options.heights this.min = options.min this.max = options.max this.originMin = options.originMin this.originMax = options.originMax this.factorName = options.factorName this.factorId = options.factorId this.colors = options.colors this.bottomColor = options.bottomColor this.standardMin = options.standardMin this.standardMax = options.standardMax } } Factor.prototype = { // drawMode: 绘制模式,0:自动模式,自动计算当前数据的范围,绘制合适的比例;1:手动模式,根据页面设置的绘图范围进行绘制 pushData: function(data, drawMode) { if (this.factorName == undefined) { this.factorName = data.factorName this.factorId = data.factorId } else { if (this.factorName != data.factorName) { console.log("错误: Factor中插入的数据前后名称不一致,原因子:" + this.factorName + ",新因子:" + data.factorName); } } this.datas.push(data) this.getRange(data, drawMode) if (this.standardMin == -1) { var range = Legend.getStandardRange(this.factorName) this.standardMin = range[0] this.standardMax = range[1] } }, getRange: function(data, drawMode) { if (this.min == -1) { this.min = data.factorData this.max = data.factorData } if (this.originMin == -1) { this.originMin = data.factorData this.originMax = data.factorData } if (drawMode == 0) { this.min = Math.min(this.min, data.factorData) this.max = Math.max(this.max, data.factorData) // this.min = this.standardMin // this.max = this.standardMax } this.originMin = Math.min(this.originMin, data.factorData) this.originMax = Math.max(this.originMax, data.factorData) }, getHeight: function() { this.heights = [] this.colors = [] this.datas.forEach(d => { var h = DataUtil.getFactorHeight(d.factorId, d.factorData, [this.min, this.max]) if (d.factorData == -1) { h = -1 } this.heights.push(h) var c = Legend.getColor(this.factorName, this.legendType, d.factorData, this.min, this.max) this.colors.push(c) // this.heights.push(d.factorData) }); this.bottomColor = Legend.getColor(this.factorName, this.legendType, this.standardMin, this.min, this.max) // console.log(this.factorName + ':' + this.bottomColor); }, setRange: function(range) { this.min = range[0] this.max = range[1] this.legendType = Legend.C_TYPE this.getHeight() }, clearRange: function() { this.min = this.originMin this.max = this.originMax this.legendType = Legend.D_TYPE this.getHeight() }, standardRange: function() { this.min = this.originMin this.max = this.originMax // this.min = this.standardMin // this.max = this.standardMax this.legendType = Legend.S_TYPE this.getHeight() }, // 根据开始和结束下标获取对应位置数据集 getByIndex: function(s, e) { var d = this.datas.slice(s, e) var h = this.heights.slice(s, e) return new Factor({ datas: d, heights: h, min: this.min, max: this.max, originMin: this.originMin, originMax: this.originMax, factorName: this.factorName, colors: this.colors, bottomColor: this.bottomColor, standardMin: this.standardMin, standardMax: this.standardMax, }) }, // 新增数据同时插帧 insertFrame: function(factor, count, isDraw) { var d1 = this.datas[this.datas.length - 1] var d2 = factor.datas[0] if (d1 == undefined || d2 == undefined) { return } // 单帧数据值的差值 var dValue = { factorData: (d2.factorData - d1.factorData) / count, physicalQuantity: (d2.physicalQuantity - d2.physicalQuantity) / count } for (let i = 0; i < count - 1; i++) { var _data = { factorData: d1.factorData + dValue.factorData * (i + 1), factorId: d1.factorId, factorName: d1.factorName, physicalQuantity: d1.physicalQuantity + dValue.physicalQuantity * (i + 1), sensorId: d1.sensorId, statusList: d1.statusList, } if (!isDraw) { _data.factorData = -1 _data.physicalQuantity = -1 } this.datas.push(_data) } // this.datas.push(d2) } } // })(jQuery, DataUtil);