/** * Created by Administrator on 2017/10/31. * 降水 */ define([], function () { var rn = { id: 'rn', title: '累计降水量', legend: 'images/meteo/legend/rn.png', layer: null, //为了方便图层控制,使用了一个对象来控制多个图层 data: null, elem: 'TR', level: null, levelName: { '9999': '地面', '0925': '925hPa', '0850': '850hPa', '0700': '700hPa', '0500': '500hPa' }, buttons: { '9999': null, '0925': null, '0850': null, '0700': null, '0500': null }, 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: rn.elem, level: rn.level } meteo.c.http.httpFunction(meteo.c.http.tImage, null, params, function (json) { meteo.c.title.updateTitle(rn.id, meteo.c.process.setTitleTime(json.odate, json.vti, rn.title, rn.levelName[rn.level])); $('#meteo-video-query-startDate').val(json.odate); json = json.data; json = JSON.parse(json); rn.data = json; rn.showRn(json); }, function () { // ONEMAP.C.publisher.publish({ type: 'warning', message: '降水暂无当前时次/层次数据' }, 'noteBar::add'); // meteo.c.title.updateTitle(rn.id, '降水暂无当前时次/层次数据'); }) params.vti = parseInt(vti) + 3; meteo.c.http.httpFunction(meteo.c.http.tImage, null, params, function (json) { json = json.data; json = JSON.parse(json); rn.loadImage(json); }, function () { }) // meteo.c.http.getLocalJson('799/T799_isoline_2017122400_054_TR_9999.json', function (json) { // rn.showLine(json); // }) }, showRn: function (data) { 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]; //lat索引(纬度 var y = str[1]; //lng索引(经度 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( // // 'http://107.1.170.193:8080/scripts/meteo/test/799/T799_2017122400_054_TR_9999_' // // + x + '_' + y + // // '.png.mkt', // data.url + value + '.mkt', // L.latLngBounds(L.latLng(slat, slng), L.latLng(elat, elng)) // ).addTo(layer); } } if (!rn.layer|| !rn.layer.tLayer || rn.isHide) { for (var i = 0; i < images.length; i++) { meteo.c.map.removeImage(images[i]); } } else { if (rn.layer.images) { rn.removeImage(); } rn.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 layerId = meteo.c.map.createLayer(); var layer = map2DViewer.groups[layerId]; var lines = data.lines; for (var index in lines) { var line = lines[index]; if (line.val != 2) continue; //找每条线的经纬点 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], seaTT.layer.cLayer, false); // meteo.c.map.addText('', line.val, 16, textColor, 2, latlngs[latlngs.length - 1][0], latlngs[latlngs.length - 1][1], seaTT.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], seaTT.layer.cLayer, false); // } // } } }, create: function () { rn.layer = { tLayer: meteo.c.map.createLayer(), images: null, } }, remove: function () { if (rn.layer) { meteo.c.map.removeLayer(rn.layer.tLayer); rn.removeImage(); rn.layer = null; } }, removeImage: function () { if (rn.layer.images) { for (var i = 0; i < rn.layer.images.length; i++) { meteo.c.map.removeImage(rn.layer.images[i]); } rn.layer.images = null; } }, show: function () { rn.isHide = false; rn.showRn(rn.data); }, hide: function () { rn.isHide = true; if (rn.layer) { rn.removeImage(); rn.layer.images = null; } }, open: function () { if(ONEMAP.M.myLayers.checkLength() >= map23DConfig.layerMaxLength) { ONEMAP.C.publisher.publish({ type: 'warning', message: '图层数量已达上限' }, 'noteBar::add'); return; } //-------------创建图层------------------ if (rn.layer) { rn.remove(); } rn.create(); //----------------图层管理------------------- var options = { action: "add", // mod: "qixiang", DOM: { guid: rn.layer.tLayer, type: "group", name: rn.title, }, } var guid = ONEMAP.M.myLayers.myLayerControl(options); ONEMAP.C.publisher.subscribe(function (option) { switch (option.action) { case 'remove': rn.close(); break; case 'opacity': if (option.options.opacity) { rn.show(); } else { rn.hide(); } break; } }, guid); //------------------------------------- rn.buttons[rn.level].parent().addClass('current'); meteo.c.title.addTitle(rn.id); meteo.c.legend.addLegend(rn.id, rn.legend); meteo.c.time.open(); rn.isHide = false; //-------------------------------------- rn.getData(); }, close: function () { var options = { action: "remove", DOMid: rn.layer.tLayer, } ONEMAP.M.myLayers.myLayerControl(options); rn.buttons[rn.level].parent().removeClass('current'); meteo.c.title.removeTitle(rn.id); meteo.c.legend.removeLegend(rn.id); meteo.c.time.close(); rn.level = null; rn.remove(); }, update: function () { //用于时间变化时更新数据 if (!rn.layer || rn.isHide) return; // var option = { // action: 'update', // DOMid: rn.layer.tLayer, // DOM: { // name: '降水' + meteo.c.time.getTimeOnTitle() // } // } // ONEMAP.M.myLayers.myLayerControl(option); rn.getData() }, updateLevel: function () { rn.buttons[rn.level].parent().siblings().removeClass('current'); rn.buttons[rn.level].parent().addClass('current'); rn.getData(); }, click: function (level) { if (rn.level && level != rn.level) { rn.level = level; rn.updateLevel(); } else { rn.level = level; if (rn.layer) { rn.close(); } else { rn.open(); } } }, init: function () { var buttons = $('.meteo-button-799'); rn.buttons['9999'] = buttons.eq(15); // rn.buttons['0925'] = buttons.eq(16); // rn.buttons['0850'] = buttons.eq(17); // rn.buttons['0700'] = buttons.eq(18); // rn.buttons['0500'] = buttons.eq(19); } } meteo.f.rn = rn; return meteo.f.rn; })