RH.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /**
  2. * Created by Administrator on 2017/10/31.
  3. * 湿度
  4. */
  5. define([], function () {
  6. var rh = {
  7. id: 'rh',
  8. // title: '1000hPa 相对湿度',
  9. title: '相对湿度',
  10. legend: 'images/meteo/legend/rh.png',
  11. data: null,
  12. layer: null,
  13. elem: 'RH',
  14. level: null,
  15. levelName: {
  16. '9999': '2米',
  17. '0925': '925hPa',
  18. '0850': '850hPa',
  19. '0700': '700hPa',
  20. '0500': '500hPa'
  21. },
  22. buttons: {
  23. '9999': null,
  24. '0925': null,
  25. '0850': null,
  26. '0700': null,
  27. '0500': null
  28. },
  29. isHide: false,
  30. getData: function () { //获取数据
  31. var dataStr = meteo.c.time.getTime();
  32. // var dataStr = '2018-01-07 14:00:00';
  33. var vti = meteo.c.time.getVti();
  34. var level = rh.level == '9999' ? '1000' : rh.level;
  35. var params = {
  36. dateStr: dataStr,
  37. vti: vti,
  38. elem: rh.elem,
  39. level: level
  40. }
  41. meteo.c.http.httpFunction(meteo.c.http.tImage, null, params, function (json) {
  42. meteo.c.title.updateTitle(rh.id, meteo.c.process.setTitleTime(json.odate, json.vti, rh.title, rh.levelName[rh.level]));
  43. $('#meteo-video-query-startDate').val(json.odate);
  44. json = json.data;
  45. json = JSON.parse(json);
  46. rh.data = json;
  47. rh.showRh(json);
  48. }, function () {
  49. // ONEMAP.C.publisher.publish({ type: 'warning', message: '湿度暂无当前时次/层次数据' }, 'noteBar::add');
  50. // meteo.c.title.updateTitle(rh.id, '湿度暂无当前时次/层次数据');
  51. })
  52. params.vti = parseInt(vti) + 3;
  53. meteo.c.http.httpFunction(meteo.c.http.tImage, null, params, function (json) {
  54. json = json.data;
  55. json = JSON.parse(json);
  56. rh.loadImage(json);
  57. }, function () {
  58. })
  59. // meteo.c.http.getLocalJson('799/T799_isoline_2017122420_000_RH_1000.json', function (json) {
  60. // rh.data = json;
  61. // rh.showRh(json);
  62. // })
  63. },
  64. showRh: function (data) {
  65. // var layer = map2DViewer.groups[rh.layer.cLayer];
  66. var images = [];
  67. var latI = (data.elat - data.slat) / data.row;
  68. var lngI = (data.elng - data.slng) / data.col;
  69. for (var i = 0; i < data.files.length; i++) {
  70. var value = data.files[i];
  71. if (value) {
  72. var str = value.split("\.")[0];
  73. str = str.split("_");
  74. // var x = str[5];
  75. // var y = str[6];
  76. var x = str[0];
  77. var y = str[1];
  78. // var slat = 75 - (x + 1) * 47.5;
  79. var slat = data.slat + x * latI;
  80. var slng = data.slng + y * lngI;
  81. var elat = slat + latI;
  82. var elng = slng + lngI;
  83. elat = elat > data.elat ? data.elat : elat;
  84. elng = elng > data.elng ? data.elat : elng;
  85. var url = data.url + value + '.mkt';
  86. images.push(meteo.c.map.addImage(url, slat, slng, elat, elng, 0.5));
  87. // L.imageOverlay(
  88. // // 'http://107.1.170.193:8080/scripts/meteo/test/799/T799_2017122420_000_RH_0850_'
  89. // // + x + '_' + y +
  90. // // '.png.mkt',
  91. // data.url + value + '.mkt',
  92. // L.latLngBounds(L.latLng(slat, slng), L.latLng(elat, elng))
  93. // ).addTo(layer);
  94. }
  95. }
  96. if (!rh.layer|| !rh.layer.tLayer || rh.isHide) {
  97. for (var i = 0; i < images.length; i++) {
  98. meteo.c.map.removeImage(images[i]);
  99. }
  100. } else {
  101. if (rh.layer.images) {
  102. rh.removeImage();
  103. }
  104. rh.layer.images = images;
  105. }
  106. // setTimeout(function () {
  107. //
  108. // }, 300);
  109. },
  110. loadImage:function (data) { //预先加载图片
  111. for (var i = 0; i < data.files.length; i++) {
  112. var value = data.files[i];
  113. if (value) {
  114. var url = data.url + value + '.mkt';
  115. var img = $('<img />').attr('src', url);
  116. img = null;
  117. }
  118. }
  119. },
  120. create: function () {
  121. rh.layer = {
  122. tLayer: meteo.c.map.createLayer(),
  123. images: null,
  124. }
  125. },
  126. remove: function () {
  127. if (rh.layer) {
  128. meteo.c.map.removeLayer(rh.layer.tLayer);
  129. rh.removeImage();
  130. rh.layer = null;
  131. }
  132. },
  133. removeImage: function () {
  134. if (rh.layer.images) {
  135. for (var i = 0; i < rh.layer.images.length; i++) {
  136. meteo.c.map.removeImage(rh.layer.images[i]);
  137. }
  138. rh.layer.images = null;
  139. }
  140. },
  141. show: function () {
  142. rh.isHide = false;
  143. rh.showRh(rh.data);
  144. },
  145. hide: function () {
  146. rh.isHide = true;
  147. if (rh.layer) {
  148. rh.removeImage();
  149. rh.layer.images = null;
  150. }
  151. },
  152. open: function () {
  153. if(ONEMAP.M.myLayers.checkLength() >= map23DConfig.layerMaxLength) {
  154. ONEMAP.C.publisher.publish({ type: 'warning', message: '图层数量已达上限' }, 'noteBar::add');
  155. return;
  156. }
  157. //-------------创建图层------------------
  158. if (rh.layer) {
  159. rh.remove();
  160. }
  161. rh.create();
  162. //----------------图层管理-------------------
  163. var options = {
  164. action: "add",
  165. // mod: "qixiang",
  166. DOM: {
  167. guid: rh.layer.tLayer,
  168. type: "group",
  169. name: rh.title,
  170. },
  171. }
  172. var guid = ONEMAP.M.myLayers.myLayerControl(options);
  173. ONEMAP.C.publisher.subscribe(function (option) {
  174. switch (option.action) {
  175. case 'remove':
  176. rh.close();
  177. break;
  178. case 'opacity':
  179. if (option.options.opacity) {
  180. rh.show();
  181. } else {
  182. rh.hide();
  183. }
  184. break;
  185. }
  186. }, guid);
  187. //-------------------------------------
  188. rh.buttons[rh.level].parent().addClass('current');
  189. meteo.c.title.addTitle(rh.id);
  190. meteo.c.legend.addLegend(rh.id, rh.legend);
  191. meteo.c.time.open();
  192. rh.isHide = false;
  193. //------------------------------------
  194. rh.getData();
  195. },
  196. close: function () {
  197. var options = {
  198. action: "remove",
  199. DOMid: rh.layer.tLayer,
  200. }
  201. ONEMAP.M.myLayers.myLayerControl(options);
  202. rh.buttons[rh.level].parent().removeClass('current');
  203. meteo.c.title.removeTitle(rh.id);
  204. meteo.c.legend.removeLegend(rh.id);
  205. meteo.c.time.close();
  206. rh.level = null;
  207. rh.remove();
  208. },
  209. update: function () {
  210. if (!rh.layer || rh.isHide) return;
  211. // var option = {
  212. // action: 'update',
  213. // DOMid: rh.layer.tLayer,
  214. // DOM: {
  215. // name: '湿度' + meteo.c.time.getTimeOnTitle()
  216. // }
  217. // }
  218. // ONEMAP.M.myLayers.myLayerControl(option);
  219. rh.getData()
  220. },
  221. updateLevel: function () {
  222. rh.buttons[rh.level].parent().siblings().removeClass('current');
  223. rh.buttons[rh.level].parent().addClass('current');
  224. rh.getData();
  225. },
  226. click: function (level) {
  227. if (rh.level && level != rh.level) {
  228. rh.level = level;
  229. rh.updateLevel();
  230. } else {
  231. rh.level = level;
  232. if (rh.layer) {
  233. rh.close();
  234. } else {
  235. rh.open();
  236. }
  237. }
  238. },
  239. init: function () {
  240. var buttons = $('.meteo-button-799');
  241. // rh.buttons['9999'] = buttons.eq(6);
  242. // rh.buttons['0925'] = buttons.eq(7);
  243. // rh.buttons['0850'] = buttons.eq(8);
  244. // rh.buttons['0700'] = buttons.eq(9);
  245. rh.buttons['9999'] = buttons.eq(10);
  246. rh.buttons['0925'] = buttons.eq(11);
  247. rh.buttons['0850'] = buttons.eq(12);
  248. rh.buttons['0700'] = buttons.eq(13);
  249. rh.buttons['0500'] = buttons.eq(14);
  250. }
  251. }
  252. meteo.f.rh = rh;
  253. return meteo.f.rh;
  254. })