123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296 |
- /**
- * 海水温度
- */
- define(['meteoDir/other/smooth'], function (smooth) {
- var seaTT = {
- id: 'seatt',
- title: '水温',
- legend: 'images/meteo/legend/seatt.png',
- data: null, //数据存储位置
- isoData: null,
- layer: null, //所用图层
- elem: 'TT',
- 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: seaTT.elem,
- level: seaTT.level
- }
- meteo.c.http.httpFunction(meteo.c.http.oceanImage, null, params, function (json) {
- meteo.c.title.updateTitle(seaTT.id, meteo.c.process.setTitleTime(json.odate, json.vti, seaTT.title,
- seaTT.levelName[seaTT.level]));
- $('#meteo-video-query-startDate').val(json.odate);
- json = JSON.parse(json.data);
- seaTT.data = json;
- seaTT.showSt(json);
- // meteo.c.http.httpFunction(meteo.c.http.oceanIsoLine, null, params, function (json) {
- // seaTT.isoData = json;
- // seaTT.showLine(json);
- // })
- }, function () {
- // ONEMAP.C.publisher.publish({ type: 'warning', message: '海温暂无当前时次/层次数据' }, 'noteBar::add');
- // meteo.c.title.updateTitle(seaTT.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);
- seaTT.loadImage(json);
- }, function () {
- })
- // meteo.c.http.getLocalJson('wyl/WYL_isoline_2017122320_000_TT_0000.json', function (json) {
- // seaTT.showLine(json);
- // })
- },
- 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_2017122320_000_TT_0000_" + x + "_" + y + ".png.mkt",
- // L.latLngBounds(L.latLng(slat, slng), L.latLng(elat, elng))
- // ).addTo(layer);
- }
- }
- if (!seaTT.layer|| !seaTT.layer.tLayer || seaTT.isHide) {
- for (var i = 0; i < images.length; i++) {
- meteo.c.map.removeImage(images[i]);
- }
- } else {
- if (seaTT.layer.images) {
- seaTT.removeImage();
- }
- seaTT.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 = $('<img />').attr('src', url);
- img = null;
- }
- }
- },
- showLine: function (data) {
- var layer = map2DViewer.groups[seaTT.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], 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 () {
- seaTT.layer = {
- tLayer: meteo.c.map.createLayer(),
- images: null,
- }
- },
- remove: function () {
- if (seaTT.layer) {
- meteo.c.map.removeLayer(seaTT.layer.tLayer);
- seaTT.removeImage();
- seaTT.layer = null;
- }
- },
- removeImage: function () {
- if (seaTT.layer.images) {
- for (var i = 0; i < seaTT.layer.images.length; i++) {
- meteo.c.map.removeImage(seaTT.layer.images[i]);
- }
- seaTT.layer.images = null;
- }
- },
- show: function () {
- seaTT.isHide = false;
- seaTT.showSt(seaTT.data);
- },
- hide: function () {
- seaTT.isHide = true;
- if (seaTT.layer) {
- seaTT.removeImage();
- seaTT.layer.images = null;
- }
- },
- open: function () {
- if(ONEMAP.M.myLayers.checkLength() >= map23DConfig.layerMaxLength) {
- ONEMAP.C.publisher.publish({ type: 'warning', message: '图层数量已达上限' }, 'noteBar::add');
- return;
- }
- //-------------创建图层------------------
- if (seaTT.layer) {
- seaTT.remove();
- }
- seaTT.create();
- //----------------图层管理-------------------
- var options = {
- action: "add",
- // mod: "qixiang",
- DOM: {
- guid: seaTT.layer.tLayer,
- type: "group",
- name: seaTT.title,
- },
- }
- var guid = ONEMAP.M.myLayers.myLayerControl(options);
- ONEMAP.C.publisher.subscribe(function (option) {
- switch (option.action) {
- case 'remove':
- seaTT.close();
- break;
- case 'opacity':
- if (option.options.opacity) {
- seaTT.show();
- } else {
- seaTT.hide();
- }
- break;
- }
- }, guid);
- //-------------------------------------
- seaTT.buttons[seaTT.level].parent().addClass('current');
- meteo.c.title.addTitle(seaTT.id);
- meteo.c.legend.addLegend(seaTT.id, seaTT.legend);
- meteo.c.time.open(true);
- seaTT.isHide = false;
- seaTT.getData();
- },
- close: function () {
- var options = {
- action: "remove",
- DOMid: seaTT.layer.tLayer,
- }
- ONEMAP.M.myLayers.myLayerControl(options);
- seaTT.buttons[seaTT.level].parent().removeClass('current');
- meteo.c.title.removeTitle(seaTT.id);
- meteo.c.legend.removeLegend(seaTT.id);
- meteo.c.time.close();
- seaTT.level = null;
- seaTT.remove();
- },
- update: function () { //用于时间变化时更新数据
- if (!seaTT.layer || seaTT.isHide) return;
- // var option = {
- // action: 'update',
- // DOMid: airport.layer.tLayer,
- // DOM: {
- // name: '海水温度' + meteo.c.time.getTimeOnTitle()
- // }
- // }
- // ONEMAP.M.myLayers.myLayerControl(option);
- seaTT.getData()
- },
- updateLevel: function () {
- seaTT.buttons[seaTT.level].parent().siblings().removeClass('current');
- seaTT.buttons[seaTT.level].parent().addClass('current');
- seaTT.getData();
- },
- click: function (level) {
- if (seaTT.level && level != seaTT.level) {
- seaTT.level = level;
- seaTT.updateLevel();
- } else {
- seaTT.level = level;
- if (seaTT.layer) {
- seaTT.close();
- } else {
- seaTT.open();
- }
- }
- },
- init: function () {
- var buttons = $('.meteo-button-ocean');
- seaTT.buttons['0000'] = buttons.eq(0);
- seaTT.buttons['0010'] = buttons.eq(1);
- seaTT.buttons['0020'] = buttons.eq(2);
- seaTT.buttons['0030'] = buttons.eq(3);
- seaTT.buttons['0050'] = buttons.eq(4);
- }
- }
- meteo.f.seaTT = seaTT;
- return meteo.f.seaTT;
- })
|