RN.js 11 KB

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