/** * 监测因子图例 */ var Legend = { S_TYPE: 0, //标准图例 D_TYPE: 1, //动态图例 C_TYPE: 2, //自定义范围图例 //各监测因子数据分级(标准) _legend_r: { 'NO2': [0, 100, 200, 700, 1200, 2340], 'CO': [0, 5, 10, 35, 60, 90], 'H2S': [0, 150, 500, 650, 800, 1600], 'SO2': [0, 150, 500, 650, 800, 1600], 'O3': [0, 160, 200, 300, 400, 800], 'PM25': [0, 35, 75, 115, 150, 250], 'PM10': [0, 50, 150, 250, 350, 420], 'VOC': [0, 200, 400, 600, 1000, 2000, 4000], 'TMP': [-10, 0, 10, 20, 30, 40], 'spC': [0, 200, 400, 600, 800, 1000], 'tur': [0, 50, 100, 150, 200, 250], 'DO': [0, 3, 5, 7, 9, 11], 'PH': [1, 3, 5, 7, 9, 11, 13], }, //各监测因子数据分级(标准)对应颜色 _legend_c: { 'NO2': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'CO': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'H2S': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'SO2': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'O3': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'PM25': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'PM10': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'VOC': [ [0, 0.89, 0, 0.75], [0, 0.7, 0, 0.75], [0.8, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.4, 0, 0.3, 0.75], [0.6, 0, 0.3, 0.75], ], 'TMP': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'spC': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'tur': [ [0, 0.89, 0, 0.75], [1, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.6, 0, 0.3, 0.75], [0.49, 0, 0.14, 0.75], ], 'DO': [ [0.49, 0, 0.14, 0.75], [0.6, 0, 0.3, 0.75], [1, 0, 0, 0.75], [1, 0.49, 0, 0.75], [1, 1, 0, 0.75], [0, 0.89, 0, 0.75], ], 'PH': [ [0, 0.89, 0, 0.75], [0, 0.7, 0, 0.75], [0.8, 1, 0, 0.75], [1, 0.49, 0, 0.75], [1, 0, 0, 0.75], [0.4, 0, 0.3, 0.75], [0.6, 0, 0.3, 0.75], ] }, _custom: [ [0.05, 0.9, 0.03, 0.75], [0.3, 0.65, 0.02, 0.75], [0.87, 0.92, 0.03, 0.75], [0.8, 0.67, 0.04, 0.75], [0.92, 0.28, 0.07, 0.75], [0.6, 0.05, 0.05, 0.75], ], getStandardRange: function(name) { var range = this._legend_r[name] if (range == undefined) { range = this._legend_r['PM25'] } var min = range[0] var max = range[range.length - 1] // for (const key in range) { // if (min == undefined) { // min = parseInt(key) // } // max = parseInt(key) // } if (name == 'CO') { min *= 1000 max *= 1000 } return [min, max] }, getColor: function(name, type, data, min, max) { if (type == this.S_TYPE) { return this.getStandardColor(name, data) } else { return this.getCustomColor(data, min, max) } }, /** * 获取监测因子当前浓度对应的颜色 * @param name 监测因子名称 * @param data 监测因子浓度 */ getStandardColor: function(name, data) { var range = this._legend_r[name] var colors = this._legend_c[name] if (range == undefined) { range = this._legend_r['PM25'] colors = this._legend_c['PM25'] } // return colors[0] var selected = undefined for (let i = 0; i < range.length; i++) { const d = range[i]; var d1 = d if (name == 'CO') { d1 *= 1000 } if (data >= d1) { selected = i } else { break } } // 避免下标越界 if (selected >= colors.length) { selected = colors.length - 1 } // console.log(name + ': ' + selected); return colors[selected] }, getCustomColor: function(data, min, max) { var per = (max - min) / this._custom.length var i = parseInt(data / per) if (i >= this._custom.length) { i = this._custom.length - 1 } return this._custom[i] }, /** * 获取分析图例 */ refreshLegend: function(eId, name, animation, type, min, max) { var legend = $('#' + eId) legend.empty() var r = this._legend_r[name] var c = this._legend_c[name] // 没有找到标准图例的因子,默认使用自定义范围图例 if (r == undefined) { type = this.C_TYPE } var range = [] if (type != this.S_TYPE && min != undefined && max != undefined) { var count = this._custom.length var per = (max - min) / count for (let i = 0; i < count; i++) { range.push([ (min + per * (i)).toFixed(1), this._custom[i] ]) } } else { for (let i = 0; i < r.length; i++) { range.push([r[i], c[i]]) } } for (let i = 0; i < range.length; i++) { const r = range[i]; const nextR = range[i + 1] var div1 = $('
') div1.addClass("flexbox align-items margin-top") var div2 = $('
') div2.addClass("rectangle") var color = r[1] var bgcolor = 'rgba(' + color[0] * 255 + ', ' + color[1] * 255 + ', ' + color[2] * 255 + ', ' + color[3] + ')' div2.css("background-color", bgcolor) var div3 = $('
') var d if (nextR != undefined) { d = r[0] + ' ~' + nextR[0] + ' ' + Util.factorUnit2[name] } else { d = "     >  " + r[0] + "  " + Util.factorUnit2[name] } div3.append(d) div1.append(div2) div1.append(div3) legend.append(div1) } if (animation == false) { return } legend.hide("fast", function() { setTimeout(() => { legend.show("fast") }, 500); }) } }