seaTT.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296
  1. /**
  2. * 海水温度
  3. */
  4. define(['meteoDir/other/smooth'], function (smooth) {
  5. var seaTT = {
  6. id: 'seatt',
  7. title: '水温',
  8. legend: 'images/meteo/legend/seatt.png',
  9. data: null, //数据存储位置
  10. isoData: null,
  11. layer: null, //所用图层
  12. elem: 'TT',
  13. level: null,
  14. levelName: {
  15. '0000': '海表',
  16. '0010': '10米',
  17. '0020': '20米',
  18. '0030': '30米',
  19. '0050': '50米'
  20. },
  21. buttons: {},
  22. isHide: false,
  23. getData: function () { //获取降水图数据
  24. var dateStr = meteo.c.time.getTime();
  25. // var dateStr = '2018-01-07 14:00:00';
  26. var vti = meteo.c.time.getVti();
  27. var params = {
  28. dateStr: dateStr,
  29. vti: vti,
  30. elem: seaTT.elem,
  31. level: seaTT.level
  32. }
  33. meteo.c.http.httpFunction(meteo.c.http.oceanImage, null, params, function (json) {
  34. meteo.c.title.updateTitle(seaTT.id, meteo.c.process.setTitleTime(json.odate, json.vti, seaTT.title,
  35. seaTT.levelName[seaTT.level]));
  36. $('#meteo-video-query-startDate').val(json.odate);
  37. json = JSON.parse(json.data);
  38. seaTT.data = json;
  39. seaTT.showSt(json);
  40. // meteo.c.http.httpFunction(meteo.c.http.oceanIsoLine, null, params, function (json) {
  41. // seaTT.isoData = json;
  42. // seaTT.showLine(json);
  43. // })
  44. }, function () {
  45. // ONEMAP.C.publisher.publish({ type: 'warning', message: '海温暂无当前时次/层次数据' }, 'noteBar::add');
  46. // meteo.c.title.updateTitle(seaTT.id, '海温暂无当前时次/层次数据');
  47. })
  48. params.vti = parseInt(vti) + 3;
  49. meteo.c.http.httpFunction(meteo.c.http.oceanImage, null, params, function (json) {
  50. json = json.data;
  51. json = JSON.parse(json);
  52. seaTT.loadImage(json);
  53. }, function () {
  54. })
  55. // meteo.c.http.getLocalJson('wyl/WYL_isoline_2017122320_000_TT_0000.json', function (json) {
  56. // seaTT.showLine(json);
  57. // })
  58. },
  59. showSt: function (data) {
  60. // var layerid = meteo.c.map.createLayer();
  61. // var layer = map2DViewer.groups[layerid];
  62. var images = [];
  63. var latI = (data.elat - data.slat) / data.row;
  64. var lngI = (data.elng - data.slng) / data.col;
  65. for (var i = 0; i < data.files.length; i++) {
  66. var value = data.files[i];
  67. if (value) {
  68. var str = value.split("\.")[0];
  69. str = str.split("_");
  70. var x = str[0];
  71. var y = str[1];
  72. // var slat = 75 - (x + 1) * 47.5;
  73. var slat = data.slat + x * latI;
  74. var slng = data.slng + y * lngI;
  75. var elat = slat + latI;
  76. var elng = slng + lngI;
  77. elat = elat > data.elat ? data.elat : elat;
  78. elng = elng > data.elng ? data.elat : elng;
  79. var url = data.url + value + '.mkt';
  80. images.push(meteo.c.map.addImage(url, slat, slng, elat, elng));
  81. // L.imageOverlay(
  82. // data.url + value + '.mkt',
  83. // // "scripts/meteo/test/wyl/WYL_2017122320_000_TT_0000_" + x + "_" + y + ".png.mkt",
  84. // L.latLngBounds(L.latLng(slat, slng), L.latLng(elat, elng))
  85. // ).addTo(layer);
  86. }
  87. }
  88. if (!seaTT.layer|| !seaTT.layer.tLayer || seaTT.isHide) {
  89. for (var i = 0; i < images.length; i++) {
  90. meteo.c.map.removeImage(images[i]);
  91. }
  92. } else {
  93. if (seaTT.layer.images) {
  94. seaTT.removeImage();
  95. }
  96. seaTT.layer.images = images;
  97. }
  98. },
  99. loadImage:function (data) { //预先加载图片
  100. for (var i = 0; i < data.files.length; i++) {
  101. var value = data.files[i];
  102. if (value) {
  103. var url = data.url + value + '.mkt';
  104. var img = $('<img />').attr('src', url);
  105. img = null;
  106. }
  107. }
  108. },
  109. showLine: function (data) {
  110. var layer = map2DViewer.groups[seaTT.layer.cLayer];
  111. var lines = data.lines;
  112. for (var index in lines) {
  113. var line = lines[index];
  114. //找每条线的经纬点
  115. var latlngs = [];
  116. var isLegal = true;
  117. for (var i = 0; i < line.pointNum; i++) {
  118. // latlngs.push([line.lng[i], line.lat[i]]);
  119. latlngs.push([line.lat[i], line.lng[i]]);
  120. if (line.lat[i] <= 0) isLegal = false;
  121. }
  122. var smoothLatlngs = latlngs.length > 2 ? smooth(latlngs, 0.1, 0.24) : latlngs;
  123. latlngs = (isLegal && smoothLatlngs.length > 1) ? smoothLatlngs : latlngs;
  124. //画线
  125. var lineColor = 'black';
  126. var textColor = 'black';
  127. if (line.lineColor && (line.lineColor.r == 0 || line.lineColor.r)
  128. && (line.lineColor.g == 0 || line.lineColor.g)
  129. && (line.lineColor.b == 0 || line.lineColor.b)) {
  130. lineColor = Color.rgb(line.lineColor.r, line.lineColor.g, line.lineColor.b, 255);
  131. textColor = 'rgb(' + line.lineColor.r + ', ' + line.lineColor.g + ', ' + line.lineColor.b + ')';
  132. }
  133. // meteo.c.map.addPolyline('', lineColor, 2, null, latlngs, layerId, isSmooth);
  134. var li = L.polyline(latlngs, {color: lineColor, weight: 1});
  135. li.addTo(layer);
  136. //标数字
  137. if (line.val) {
  138. if (!line.isClose) {
  139. meteo.c.map.addText('', line.val, 16, textColor, 2, latlngs[0][0], latlngs[0][1], seaTT.layer.cLayer, false);
  140. meteo.c.map.addText('', line.val, 16, textColor, 2, latlngs[latlngs.length - 1][0], latlngs[latlngs.length - 1][1], seaTT.layer.cLayer, false);
  141. } else {
  142. var index = (latlngs.length * 3 / 4) >> 0;
  143. meteo.c.map.addText('', line.val, 16, textColor, 2, latlngs[index][0], latlngs[index][1], seaTT.layer.cLayer, false);
  144. }
  145. }
  146. }
  147. },
  148. create: function () {
  149. seaTT.layer = {
  150. tLayer: meteo.c.map.createLayer(),
  151. images: null,
  152. }
  153. },
  154. remove: function () {
  155. if (seaTT.layer) {
  156. meteo.c.map.removeLayer(seaTT.layer.tLayer);
  157. seaTT.removeImage();
  158. seaTT.layer = null;
  159. }
  160. },
  161. removeImage: function () {
  162. if (seaTT.layer.images) {
  163. for (var i = 0; i < seaTT.layer.images.length; i++) {
  164. meteo.c.map.removeImage(seaTT.layer.images[i]);
  165. }
  166. seaTT.layer.images = null;
  167. }
  168. },
  169. show: function () {
  170. seaTT.isHide = false;
  171. seaTT.showSt(seaTT.data);
  172. },
  173. hide: function () {
  174. seaTT.isHide = true;
  175. if (seaTT.layer) {
  176. seaTT.removeImage();
  177. seaTT.layer.images = null;
  178. }
  179. },
  180. open: function () {
  181. if(ONEMAP.M.myLayers.checkLength() >= map23DConfig.layerMaxLength) {
  182. ONEMAP.C.publisher.publish({ type: 'warning', message: '图层数量已达上限' }, 'noteBar::add');
  183. return;
  184. }
  185. //-------------创建图层------------------
  186. if (seaTT.layer) {
  187. seaTT.remove();
  188. }
  189. seaTT.create();
  190. //----------------图层管理-------------------
  191. var options = {
  192. action: "add",
  193. // mod: "qixiang",
  194. DOM: {
  195. guid: seaTT.layer.tLayer,
  196. type: "group",
  197. name: seaTT.title,
  198. },
  199. }
  200. var guid = ONEMAP.M.myLayers.myLayerControl(options);
  201. ONEMAP.C.publisher.subscribe(function (option) {
  202. switch (option.action) {
  203. case 'remove':
  204. seaTT.close();
  205. break;
  206. case 'opacity':
  207. if (option.options.opacity) {
  208. seaTT.show();
  209. } else {
  210. seaTT.hide();
  211. }
  212. break;
  213. }
  214. }, guid);
  215. //-------------------------------------
  216. seaTT.buttons[seaTT.level].parent().addClass('current');
  217. meteo.c.title.addTitle(seaTT.id);
  218. meteo.c.legend.addLegend(seaTT.id, seaTT.legend);
  219. meteo.c.time.open(true);
  220. seaTT.isHide = false;
  221. seaTT.getData();
  222. },
  223. close: function () {
  224. var options = {
  225. action: "remove",
  226. DOMid: seaTT.layer.tLayer,
  227. }
  228. ONEMAP.M.myLayers.myLayerControl(options);
  229. seaTT.buttons[seaTT.level].parent().removeClass('current');
  230. meteo.c.title.removeTitle(seaTT.id);
  231. meteo.c.legend.removeLegend(seaTT.id);
  232. meteo.c.time.close();
  233. seaTT.level = null;
  234. seaTT.remove();
  235. },
  236. update: function () { //用于时间变化时更新数据
  237. if (!seaTT.layer || seaTT.isHide) return;
  238. // var option = {
  239. // action: 'update',
  240. // DOMid: airport.layer.tLayer,
  241. // DOM: {
  242. // name: '海水温度' + meteo.c.time.getTimeOnTitle()
  243. // }
  244. // }
  245. // ONEMAP.M.myLayers.myLayerControl(option);
  246. seaTT.getData()
  247. },
  248. updateLevel: function () {
  249. seaTT.buttons[seaTT.level].parent().siblings().removeClass('current');
  250. seaTT.buttons[seaTT.level].parent().addClass('current');
  251. seaTT.getData();
  252. },
  253. click: function (level) {
  254. if (seaTT.level && level != seaTT.level) {
  255. seaTT.level = level;
  256. seaTT.updateLevel();
  257. } else {
  258. seaTT.level = level;
  259. if (seaTT.layer) {
  260. seaTT.close();
  261. } else {
  262. seaTT.open();
  263. }
  264. }
  265. },
  266. init: function () {
  267. var buttons = $('.meteo-button-ocean');
  268. seaTT.buttons['0000'] = buttons.eq(0);
  269. seaTT.buttons['0010'] = buttons.eq(1);
  270. seaTT.buttons['0020'] = buttons.eq(2);
  271. seaTT.buttons['0030'] = buttons.eq(3);
  272. seaTT.buttons['0050'] = buttons.eq(4);
  273. }
  274. }
  275. meteo.f.seaTT = seaTT;
  276. return meteo.f.seaTT;
  277. })