seaSalinity.js 12 KB

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