/** * 海水盐度 */ define(['meteoDir/other/smooth'], function (smooth) { var seaSalinity = { id: 'salinity', title: '盐度', legend: 'images/meteo/legend/salinity.png', data: null, //数据存储位置 isoData: null, layer: null, //所用图层 elem: 'SS', level: null, levelName: { '0000': '海表', '0010': '10米', '0020': '20米', '0030': '30米', '0050': '50米' }, buttons: {}, isHide: false, getData: function () { //获取降水图数据 var dateStr = meteo.c.time.getTime(); // var dateStr = '2018-01-07 14:00:00'; var vti = meteo.c.time.getVti(); var params = { dateStr: dateStr, vti: vti, elem: seaSalinity.elem, level: seaSalinity.level } meteo.c.http.httpFunction(meteo.c.http.oceanImage, null, params, function (json) { meteo.c.title.updateTitle(seaSalinity.id, meteo.c.process.setTitleTime(json.odate, json.vti, seaSalinity.title, seaSalinity.levelName[seaSalinity.level])); $('#meteo-video-query-startDate').val(json.odate); json = JSON.parse(json.data) seaSalinity.data = json; seaSalinity.showSt(json); // meteo.c.http.httpFunction(meteo.c.http.oceanIsoLine, null, params, function (json) { // seaSalinity.isoData = json; // seaSalinity.showLine(json); // }) }, function () { // ONEMAP.C.publisher.publish({ type: 'warning', message: '海盐暂无当前时次/层次数据' }, 'noteBar::add'); // meteo.c.title.updateTitle(seaSalinity.id, '海盐暂无当前时次/层次数据'); }) params.vti = parseInt(vti) + 3; meteo.c.http.httpFunction(meteo.c.http.oceanImage, null, params, function (json) { json = json.data; json = JSON.parse(json); seaSalinity.loadImage(json); }, function () { }) }, showSt: function (data) { // var layerid = meteo.c.map.createLayer(); // var layer = map2DViewer.groups[layerid]; var images = []; var latI = (data.elat - data.slat) / data.row; var lngI = (data.elng - data.slng) / data.col; for (var i = 0; i < data.files.length; i++) { var value = data.files[i]; if (value) { var str = value.split("\.")[0]; str = str.split("_"); var x = str[0]; var y = str[1]; // var slat = 75 - (x + 1) * 47.5; var slat = data.slat + x * latI; var slng = data.slng + y * lngI; var elat = slat + latI; var elng = slng + lngI; elat = elat > data.elat ? data.elat : elat; elng = elng > data.elng ? data.elat : elng; var url = data.url + value + '.mkt'; images.push(meteo.c.map.addImage(url, slat, slng, elat, elng)); // L.imageOverlay( // // data.url + value + '.mkt', // "scripts/meteo/test/wyl/WYL_2017122420_000_SS_0000_" + x + "_" + y + ".png.mkt", // L.latLngBounds(L.latLng(slat, slng), L.latLng(elat, elng)) // ).addTo(layer); } } if (!seaSalinity.layer|| !seaSalinity.layer.tLayer || seaSalinity.isHide) { for (var i = 0; i < images.length; i++) { meteo.c.map.removeImage(images[i]); } } else { if (seaSalinity.layer.images) { seaSalinity.removeImage(); } seaSalinity.layer.images = images; } }, loadImage:function (data) { //预先加载图片 for (var i = 0; i < data.files.length; i++) { var value = data.files[i]; if (value) { var url = data.url + value + '.mkt'; var img = $('').attr('src', url); img = null; } } }, showLine: function (data) { var layer = map2DViewer.groups[seaSalinity.layer.cLayer]; var lines = data.lines; for (var index in lines) { var line = lines[index]; //找每条线的经纬点 var latlngs = []; var isLegal = true; for (var i = 0; i < line.pointNum; i++) { // latlngs.push([line.lng[i], line.lat[i]]); latlngs.push([line.lat[i], line.lng[i]]); if (line.lat[i] <= 0) isLegal = false; } var smoothLatlngs = latlngs.length > 2 ? smooth(latlngs, 0.1, 0.24) : latlngs; latlngs = (isLegal && smoothLatlngs.length > 1) ? smoothLatlngs : latlngs; //画线 var lineColor = 'black'; var textColor = 'black'; if (line.lineColor && (line.lineColor.r == 0 || line.lineColor.r) && (line.lineColor.g == 0 || line.lineColor.g) && (line.lineColor.b == 0 || line.lineColor.b)) { lineColor = Color.rgb(line.lineColor.r, line.lineColor.g, line.lineColor.b, 255); textColor = 'rgb(' + line.lineColor.r + ', ' + line.lineColor.g + ', ' + line.lineColor.b + ')'; } // meteo.c.map.addPolyline('', lineColor, 2, null, latlngs, layerId, isSmooth); var li = L.polyline(latlngs, {color: lineColor, weight: 1}); li.addTo(layer); //标数字 if (line.val) { if (!line.isClose) { meteo.c.map.addText('', line.val, 16, textColor, 2, latlngs[0][0], latlngs[0][1], seaSalinity.layer.cLayer, false); meteo.c.map.addText('', line.val, 16, textColor, 2, latlngs[latlngs.length - 1][0], latlngs[latlngs.length - 1][1], seaSalinity.layer.cLayer, false); } else { var index = (latlngs.length * 3 / 4) >> 0; meteo.c.map.addText('', line.val, 16, textColor, 2, latlngs[index][0], latlngs[index][1], seaSalinity.layer.cLayer, false); } } } }, create: function () { seaSalinity.layer = { tLayer: meteo.c.map.createLayer(), images: null, } }, remove: function () { if (seaSalinity.layer) { meteo.c.map.removeLayer(seaSalinity.layer.tLayer); seaSalinity.removeImage(); seaSalinity.layer = null; } }, removeImage: function () { if (seaSalinity.layer.images) { for (var i = 0; i < seaSalinity.layer.images.length; i++) { meteo.c.map.removeImage(seaSalinity.layer.images[i]); } seaSalinity.layer.images = null; } }, show: function () { seaSalinity.isHide = false; seaSalinity.showSt(seaSalinity.data); // seaSalinity.showLine(seaSalinity.isoData); }, hide: function () { seaSalinity.isHide = true; if (seaSalinity.layer) { seaSalinity.removeImage(); seaSalinity.layer.images = null; } }, open: function () { if(ONEMAP.M.myLayers.checkLength() >= map23DConfig.layerMaxLength) { ONEMAP.C.publisher.publish({ type: 'warning', message: '图层数量已达上限' }, 'noteBar::add'); return; } //-------------创建图层------------------ if (seaSalinity.layer) { seaSalinity.remove(); } seaSalinity.create(); //----------------图层管理------------------- var options = { action: "add", // mod: "qixiang", DOM: { guid: seaSalinity.layer.tLayer, type: "group", name: seaSalinity.title, }, } var guid = ONEMAP.M.myLayers.myLayerControl(options); ONEMAP.C.publisher.subscribe(function (option) { switch (option.action) { case 'remove': seaSalinity.close(); break; case 'opacity': if (option.options.opacity) { seaSalinity.show(); } else { seaSalinity.hide(); } break; } }, guid); //------------------------------------- seaSalinity.buttons[seaSalinity.level].parent().addClass('current'); meteo.c.title.addTitle(seaSalinity.id); meteo.c.legend.addLegend(seaSalinity.id, seaSalinity.legend); meteo.c.time.open(true); seaSalinity.isHide = false; seaSalinity.getData(); }, close: function () { var options = { action: "remove", DOMid: seaSalinity.layer.tLayer, } ONEMAP.M.myLayers.myLayerControl(options); seaSalinity.buttons[seaSalinity.level].parent().removeClass('current'); meteo.c.title.removeTitle(seaSalinity.id); meteo.c.legend.removeLegend(seaSalinity.id); meteo.c.time.close(); seaSalinity.level = null; seaSalinity.remove(); }, update: function () { //用于时间变化时更新数据 if (!seaSalinity.layer || seaSalinity.isHide) return; // var option = { // action: 'update', // DOMid: seaSalinity.layer.tLayer, // DOM: { // name: '海水盐度' + meteo.c.time.getTimeOnTitle() // } // } // ONEMAP.M.myLayers.myLayerControl(option); seaSalinity.getData() }, updateLevel: function () { seaSalinity.buttons[seaSalinity.level].parent().siblings().removeClass('current'); seaSalinity.buttons[seaSalinity.level].parent().addClass('current'); seaSalinity.getData(); }, click: function (level) { if (seaSalinity.level && level != seaSalinity.level) { seaSalinity.level = level; seaSalinity.updateLevel(); } else { seaSalinity.level = level; if (seaSalinity.layer) { seaSalinity.close(); } else { seaSalinity.open(); } } }, init: function () { var buttons = $('.meteo-button-ocean'); seaSalinity.buttons['0000'] = buttons.eq(5); seaSalinity.buttons['0010'] = buttons.eq(6); seaSalinity.buttons['0020'] = buttons.eq(7); seaSalinity.buttons['0030'] = buttons.eq(8); seaSalinity.buttons['0050'] = buttons.eq(9); } } meteo.f.seaSalinity = seaSalinity; return meteo.f.seaSalinity; })