/**
|
* 监测因子类
|
* 存储某一类型的监测因子数据,提供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.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.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
|
} 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);
|