projectController.js 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913
  1. /**
  2. * [ONEMAP.M.projectController]
  3. * @return {[object]}
  4. */
  5. define(['html!templates/menu/projectController',
  6. 'css!styles/menu/projectController'
  7. ], function(tplLayout) {
  8. /**
  9. * 模块数据 用于数据存储和外部调用
  10. * @type {Object}
  11. * 数据存放
  12. */
  13. var modValue = {
  14. webSocket: null,
  15. currentProjectInfo: null,
  16. options: {
  17. project_name: "test",
  18. currentOriginId: "1",
  19. controllOptions: {},
  20. curinfomation: null
  21. },
  22. menuProjectObjs: null,
  23. markerGroup: null,
  24. polyGroup: null,
  25. markerId: {},
  26. polylineId: {},
  27. appendToMyLayer: null
  28. };
  29. /**
  30. * 模块界面样式 例如:宽,高
  31. * @type {Object}
  32. */
  33. var styles = {};
  34. /**
  35. * 模块状态,用于存储模块的状态 例如:收起,关闭
  36. * @type {Object}
  37. */
  38. var status = {
  39. initialized: false,
  40. isShowChild: false,
  41. connect: false,
  42. webSocketState: false
  43. };
  44. /**
  45. * 查询参数
  46. * @type {Object}
  47. */
  48. var options = {};
  49. /**
  50. *
  51. * 初始化并订阅事件
  52. * @return {[type]} [description]
  53. */
  54. function init() {
  55. if (!status.initialized) {
  56. subscribe();
  57. bindEvent();
  58. setLayout();
  59. status.initialized = true;
  60. }
  61. if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) {
  62. modValue.webSocket.close();
  63. }
  64. if (!modValue.markerGroup) {
  65. modValue.markerGroup = map23DControl.group({
  66. action: 'add'
  67. })
  68. }
  69. if (!modValue.polyGroup) {
  70. modValue.polyGroup = map23DControl.group({
  71. action: 'add'
  72. })
  73. }
  74. modValue.webSocket = null;
  75. status.webSocketState = false;
  76. modValue.currentProjectInfo = null;
  77. /*ONEMAP.C.publisher.publish({
  78. modName: 'projectController'
  79. }, 'menuListClick');*/
  80. //connectSocket();
  81. $("#menu .startCommit span").click();
  82. layoutResize();
  83. getCurrentProject();
  84. }
  85. /**
  86. * 创建冒泡窗
  87. */
  88. function creatPopupHtml(options) {
  89. var popupHtml = '<div class="popup_html">' +
  90. ' <div class="popup-lt"></div>' +
  91. ' <div class="popup-lb"></div>' +
  92. ' <div class="popup-rt"></div>' +
  93. ' <div class="popup-rb"></div>' +
  94. ' <div class="popup-ct" style="text-indent:15px;line-height:48px">' + options.name +
  95. ' </div>' +
  96. ' <div class="popup-cb" style="padding-bottom:20px;color:#666666 !important">' + options.content + '</div>' +
  97. '</div>'
  98. return popupHtml;
  99. }
  100. /**
  101. * 设置界面
  102. */
  103. function setLayout() {
  104. $(tplLayout).appendTo($("#wrapper"));
  105. //拖拽
  106. $("#chosseHistroyPositionTime .popup-ct").dragmove($('#chosseHistroyPositionTime'));
  107. }
  108. function getCurrentProject() {
  109. ONEMAP.V.loading.load();
  110. $.ajax({
  111. url: onemapUrlConfig.websocketApiUrl + '/project/' + modValue.options.project_name,
  112. type: 'GET',
  113. dataType: 'jsonp'
  114. })
  115. .done(function(data) {
  116. ONEMAP.V.loading.loaded();
  117. if (data.code == 0) {
  118. modValue.options.controllOptions['project_data'] = data['data'];
  119. } else {
  120. ONEMAP.C.publisher.publish({ type: 'error', message: data['msg'] }, 'noteBar::add');
  121. }
  122. })
  123. .fail(function() {
  124. ONEMAP.V.loading.loaded();
  125. ONEMAP.C.publisher.publish({ type: 'error', message: '获取项目数据失败!' }, 'noteBar::add');
  126. });
  127. }
  128. /**
  129. * 界面事件绑定
  130. * @return {[type]} [description]
  131. */
  132. function bindEvent() {
  133. $("#menu .startCommit span").unbind('click').bind('click', function() {
  134. status.connect = true;
  135. $("#menu .startCommit").hide();
  136. $("#menu .stopCommit").show();
  137. if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) {
  138. modValue.webSocket.close();
  139. }
  140. connectSocket();
  141. if (!modValue.appendToMyLayer) {
  142. var options = {
  143. action: "add",
  144. mod:'zhihuiji',
  145. DOM: {
  146. name: '指挥机',
  147. type: "group",
  148. guid: modValue.markerGroup
  149. }
  150. }
  151. modValue.appendToMyLayer = ONEMAP.M.myLayers.myLayerControl(options);
  152. ONEMAP.C.publisher.subscribe(controlMyLayer, modValue.appendToMyLayer);
  153. }
  154. })
  155. $("#menu .stopCommit span").unbind('click').bind('click', function() {
  156. if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) {
  157. modValue.webSocket.close();
  158. }
  159. modValue.webSocket = null;
  160. status.webSocketState = false;
  161. status.connect = false;
  162. $("#menu .stopCommit").hide();
  163. $("#menu .startCommit").show();
  164. })
  165. $("#menu .commitMecal .im-2 .fu").unbind('click').bind('click', function() {
  166. if ($(this).parent().hasClass('active')) {
  167. $(this).parent().removeClass('active');
  168. $(this).children().css({
  169. "background": "url(../images/layout/right.png) left no-repeat"
  170. })
  171. $(this).next().hide();
  172. } else {
  173. $(this).parent().addClass('active');
  174. $(this).children().css({
  175. "background": "url(../images/layout/down.png) left no-repeat"
  176. })
  177. $(this).next().show();
  178. }
  179. $("#menu .infoMenu .im-1 ul.menu-content").mCustomScrollbar('update');
  180. })
  181. //点击子元素地图跳转 打开冒泡窗
  182. $("#menu .markerlink").unbind('click').bind('click', function() {
  183. var cid = $(this).parent().attr('cid');
  184. if (modValue.markerId[cid]) {
  185. var curmarkerdata = map23DData.markers[modValue.markerId[cid]];
  186. if (curmarkerdata.visible2D || curmarkerdata.visible3D) {
  187. var latlng = curmarkerdata.geojson.geometry.coordinates;
  188. map23DControl.setView({
  189. center: {
  190. lat: latlng[1],
  191. lng: latlng[0]
  192. }
  193. })
  194. map2DViewer.markers[modValue.markerId[cid]].openPopup();
  195. }
  196. } else {
  197. ONEMAP.C.publisher.publish({ type: 'error', message: '暂无数据' }, 'noteBar::add');
  198. }
  199. })
  200. //地图点勾选
  201. $("#menu .formation-list-content input").unbind('click').bind('click', function() {
  202. var cid = $(this).attr('cid');
  203. if ($(this).is(":checked")) {
  204. if (modValue.markerId[cid]) {
  205. map23DControl.marker({
  206. action: 'show',
  207. guid: modValue.markerId[cid]
  208. })
  209. } else {
  210. ONEMAP.C.publisher.publish({ type: 'error', message: '暂无数据' }, 'noteBar::add');
  211. }
  212. } else {
  213. if (modValue.markerId[cid]) {
  214. map23DControl.marker({
  215. action: 'hide',
  216. guid: modValue.markerId[cid]
  217. })
  218. }
  219. }
  220. })
  221. //查询历史位置记录
  222. $("#chosseHistroyPositionTime .post_time").unbind('click').bind('click', function() {
  223. var start_time = $("#chosseHistroyPositionTime #sendStartTime").val();
  224. start_time = start_time.replace(/-/g, "/");
  225. start_time = new Date(start_time).getTime();
  226. var stop_time = $("#chosseHistroyPositionTime #sendStopTime").val();
  227. stop_time = stop_time.replace(/-/g, "/");
  228. stop_time = new Date(stop_time).getTime();
  229. var target_id = $("#chooseTargetId").val();
  230. var options = {
  231. project_id: modValue.currentProjectInfo.project_id,
  232. project_name: modValue.currentProjectInfo.project_name,
  233. origin_list: modValue.currentProjectInfo.origin_list,
  234. start_time: start_time,
  235. end_time: stop_time,
  236. target_id: target_id,
  237. origin_id: modValue.options.currentOriginId
  238. }
  239. getHistoryTargetPosition(options);
  240. var data = map23DData.markers[modValue.markerId[target_id]];
  241. map23DControl.setView({
  242. center: {
  243. lat: data.geojson.geometry.coordinates[1],
  244. lng: data.geojson.geometry.coordinates[0]
  245. }
  246. })
  247. })
  248. //清空历史位置查询
  249. $("#chosseHistroyPositionTime .clear_time").unbind('click').bind('click', function() {
  250. cleanPolyline();
  251. })
  252. }
  253. /**
  254. * 打开历史轨迹查询
  255. */
  256. function openHistroyPosition(){
  257. if (!modValue.showHistroyPosition) {
  258. if (map23DData.display.map2D) {
  259. $("#chosseHistroyPositionTime .popup_html").removeClass('TD');
  260. } else {
  261. $("#chosseHistroyPositionTime .popup_html").addClass('TD');
  262. }
  263. $(".getHistoryZHJ").addClass('active');
  264. $("#chosseHistroyPositionTime").show();
  265. modValue.showHistroyPosition = true;
  266. } else {
  267. modValue.showHistroyPosition = false;
  268. $("#chosseHistroyPositionTime").hide();
  269. cleanPolyline();
  270. $(".getHistoryZHJ").removeClass('active');
  271. }
  272. }
  273. /**
  274. * 我的图层控制当值图层
  275. */
  276. function controlMyLayer(options) {
  277. switch (options.action) {
  278. case 'remove':
  279. remove();
  280. break;
  281. case 'opacity':
  282. setGropOpacity(options);
  283. break;
  284. case 'up':
  285. case 'down':
  286. setGroupZIndex(options);
  287. break;
  288. }
  289. };
  290. function setGroupZIndex(options) {
  291. }
  292. function setGropOpacity(options) {
  293. options = options.options;
  294. if (modValue.markerGroup) {
  295. if (options.opacity == 1) {
  296. map23DControl.group({
  297. action: 'show',
  298. guid: modValue.markerGroup
  299. })
  300. } else if (options.opacity == 0) {
  301. map23DControl.group({
  302. action: 'hide',
  303. guid: modValue.markerGroup
  304. })
  305. }
  306. }
  307. if (modValue.polyGroup) {
  308. if (options.opacity == 1) {
  309. map23DControl.group({
  310. action: 'show',
  311. guid: modValue.polyGroup
  312. })
  313. } else if (options.opacity == 0) {
  314. map23DControl.group({
  315. action: 'hide',
  316. guid: modValue.polyGroup
  317. })
  318. }
  319. }
  320. }
  321. /**
  322. * 连接socket
  323. * @return {[type]} [description]
  324. */
  325. function connectSocket() {
  326. if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) {
  327. modValue.webSocket.close();
  328. }
  329. modValue.webSocket = null;
  330. modValue.webSocket = new WebSocket(onemapUrlConfig.websocketUrl);
  331. modValue.webSocket.onopen = function() {
  332. status.webSocketState = true;
  333. getProjectData();
  334. getCurrentFormation();
  335. };
  336. modValue.webSocket.onclose = function() {
  337. status.webSocketState = false;
  338. };
  339. modValue.webSocket.onmessage = function(data) {
  340. var resultData = JSON.parse(data.data);
  341. if (resultData['identifier'] == 'gethistorytargetposition') {
  342. modValue.options.curhistorytargetposition = resultData;
  343. //console.log(resultData);
  344. //绘制历史位置回放线
  345. drawTatgetHistroy(resultData);
  346. }
  347. if (resultData['identifier'] == 'getcurrentformation') {
  348. modValue.options.curinfomation = resultData;
  349. creatInfomation();
  350. }
  351. if (resultData['identifier'] == 'getprojectdata') {
  352. $(resultData['data']).each(function(index, el) {
  353. if (el['project_id'] == modValue.options['project_name']) {
  354. modValue.currentProjectInfo = el;
  355. }
  356. });
  357. setTimeout(function() {
  358. getProjectLastDataFlow();
  359. }, 500)
  360. }
  361. if (resultData['identifier'] == 'getprojectlastdataflow') {
  362. $("#chooseTargetId").empty();
  363. for (var i = 0; i < resultData['data'].length; i++) {
  364. addMarkers(resultData['data'][i]);
  365. }
  366. var request = {
  367. request: "open_receive_realtime_target",
  368. origin_id: modValue.options.currentOriginId,
  369. identifier: 'getprojectdataflow'
  370. };
  371. if (status.webSocketState == true) {
  372. modValue.webSocket.send(JSON.stringify(request));
  373. } else {
  374. connectSocket();
  375. }
  376. }
  377. if (resultData['response'] == 'realtime_target') {
  378. if (resultData['data'].length > 0) {
  379. addMarkers(resultData['data'][0]);
  380. }
  381. }
  382. }
  383. }
  384. /**
  385. * 解析子数据
  386. */
  387. function childrenfun(i) {
  388. var children = {};
  389. var data = modValue.options.curinfomation;
  390. $.each(data, function(j, item) {
  391. if (item[0] == i) {
  392. children[j] = {};
  393. children[j].data = item;
  394. children[j].children = childrenfun(j);
  395. }
  396. });
  397. return children;
  398. }
  399. /*
  400. * 创建编制信息,并显示
  401. */
  402. function creatInfomation() {
  403. var listData = {};
  404. $.each(modValue.options.curinfomation.data[0].formation_data, function(i, t) {
  405. listData[t[1]] = t;
  406. })
  407. modValue.options.curinfomation = listData;
  408. var cateList = {};
  409. $.each(listData, function(i, t) {
  410. if (!cateList[t[0]]) {
  411. cateList[t[0]] = {};
  412. }
  413. })
  414. $.each(cateList, function(i, t) {
  415. if (listData[i]) { //如果分类无数据,不显示
  416. if (!listData[listData[i][0]]) { //如果分类父id有数据,不显示
  417. cateList[i].name = listData[i][1];
  418. cateList[i].code_name = listData[i][2];
  419. var children = childrenfun(i);
  420. cateList[i].children = children;
  421. }
  422. } else {
  423. delete listData[i];
  424. }
  425. })
  426. modValue.options.cateLisdata = cateList;
  427. creatInfomationHtml();
  428. }
  429. function creatInfomationHtml() {
  430. var htmldata = modValue.options.cateLisdata;
  431. $("#menu .openhistroyposition").remove();
  432. $("#menu .current-formation").remove();
  433. $("#chosseHistroyPositionTime").hide();
  434. var licontent = '<li class="im-2 openhistroyposition">' +
  435. ' <input type="checkbox"><span>显示历史位置</span>' +
  436. '</li>' +
  437. '<li class="im-2 current-formation">' +
  438. ' <p class="fu"><span>编制</span></p>' +
  439. ' <ul class="current-formation-content">' +
  440. ' <div class="formation-list-content">' +
  441. ' </div>' +
  442. ' </ul>' +
  443. '</li>';
  444. $(licontent).hide();
  445. $(licontent).appendTo($("#menu .commitMecal .menu-content .list-infomation-content"));
  446. $.each(htmldata, function(i, t) {
  447. if (t.name) {
  448. if (judgeObject(t.children)) {
  449. var liHtml = $('<li class="im-2" cid="' + i + '"><p class="fu"><span>' + t.name + '</span></p></li>');
  450. liHtml.find('.fu').children().css({
  451. "background": "url(../images/layout/right.png) left no-repeat"
  452. })
  453. var curulhtml = setItemSubInfo(t.children);
  454. curulhtml.hide();
  455. curulhtml.appendTo(liHtml);
  456. } else {
  457. var liHtml = $('<li class="im-2" cid="' + i + '"><input type="checkbox" cid="' + i + '"><span class="markerlink">' + t.name + '</span></li>');
  458. }
  459. liHtml.appendTo($("#menu .formation-list-content"))
  460. }
  461. })
  462. $(licontent).show();
  463. bindEvent();
  464. $("#menu .menu-base ul.mn-content").mCustomScrollbar('update');
  465. };
  466. /**
  467. * 填充子列表
  468. */
  469. function setItemSubInfo(data) {
  470. var ulHtml = $('<ul class="item-menu-content"></ul>');
  471. $.each(data, function(i, t) {
  472. if (judgeObject(t.children)) {
  473. var liHtml = $('<li class="im-2" cid="' + i + '"><p class="fu"><span>' + t.data[1] + '</span></p></li>');
  474. liHtml.find('.fu').children().css({
  475. "background": "url(../images/layout/right.png) left no-repeat"
  476. })
  477. var newUlHtml = setItemSubInfo(t.children);
  478. newUlHtml.hide();
  479. newUlHtml.appendTo(liHtml);
  480. } else {
  481. var liHtml = $('<li class="im-2" cid="' + i + '"><input type="checkbox" cid="' + i + '"><span class="markerlink">' + t.data[1] + '</span></li>');
  482. }
  483. liHtml.appendTo(ulHtml)
  484. })
  485. return ulHtml;
  486. }
  487. /**
  488. * 判断是否是空对象
  489. */
  490. function judgeObject(data) {
  491. data = JSON.stringify(data);
  492. if (data == "{}") {
  493. return false
  494. } else {
  495. return true;
  496. }
  497. }
  498. /**
  499. * 绘制历史位置线
  500. */
  501. function drawTatgetHistroy(data) {
  502. var altitude = [];
  503. var coordinates = [];
  504. for (var i = 0; i < data.data.length; i++) {
  505. altitude.push(data.data[i][8]);
  506. coordinates.push([data.data[i][6], data.data[i][7]])
  507. }
  508. if (modValue.polylineId[data[0]]) {
  509. map23DControl.polyline({
  510. action: 'update',
  511. groupId: modValue.polyGroup,
  512. guid: modValue.polylineId[data[0]],
  513. geojson: {
  514. "properties": {
  515. title: '历史轨迹',
  516. color: '#0033ff',
  517. weight: 1,
  518. opacity: 1,
  519. extrude: 10, //拉伸高度
  520. altitude: altitude, //点海拔高度
  521. altitudeMode: 1, //海拔模式
  522. lineJoin: 'miter',
  523. lineCap: 'butt'
  524. },
  525. "geometry": {
  526. "coordinates": coordinates
  527. }
  528. }
  529. })
  530. } else {
  531. var guid = map23DControl.polyline({
  532. action: 'add',
  533. groupId: modValue.polyGroup,
  534. geojson: {
  535. "properties": {
  536. title: '历史轨迹',
  537. color: '#0033ff',
  538. weight: 1,
  539. opacity: 1,
  540. extrude: 10, //拉伸高度
  541. altitude: altitude, //点海拔高度
  542. altitudeMode: 1, //海拔模式
  543. lineJoin: 'miter',
  544. lineCap: 'butt'
  545. },
  546. "geometry": {
  547. "coordinates": coordinates
  548. }
  549. }
  550. })
  551. modValue.polylineId[data[0]] = guid;
  552. }
  553. };
  554. /**
  555. * 地图打点
  556. */
  557. function addMarkers(data) {
  558. var data = data;
  559. var latlng = new L.latLng(data[9], data[8])
  560. var nLatlng = L.Util.formatHMS(latlng);
  561. var curtime = new Date(data[2]);
  562. /*var popupHtml = '<div class="zhihuiji">' +
  563. '<ul class="zhjlist">' +
  564. '<li>目标ID:' + data[0] + '</li>' +
  565. '<li>目标名字:' + data[1] + '</li>' +
  566. '<li>敌我关系:' + data[4] + '</li>' +
  567. '<li>经度:' + nLatlng.lng + '</li>' +
  568. '<li>纬度:' + nLatlng.lat+ '</li>' +
  569. '<li>高度:' + data[10] + '</li>' +
  570. '<li>时间:' + curtime.getFullYear()+'/'+curtime.getMonth()+1+'/'+curtime.getDay()+' '+curtime.getHours()+":"+curtime.getMinutes() + '</li>' +
  571. '<li>偏航:' + data[11] + '</li>' +
  572. '<li>俯仰:' + data[12] + '</li>' +
  573. '<li>滚动:' + data[13] + '</li>' +
  574. '<li>速度:' + data[14] + '</li>' +
  575. '<li>状态:' + data[16] + '</li>' +
  576. '<li>席位:' + data[6] + '</li>' +
  577. '<li>事件:' + data[17] + '</li>' +
  578. '<li>等级:' + data[5] + '</li>' +
  579. '</ul>' +
  580. '</div>';*/
  581. var popupHtml = '<table class="controller_table">' +
  582. ' <tr class="title">' +
  583. ' <td>目标ID</td>' +
  584. ' <td>目标名称</td>' +
  585. ' <td>敌我关系</td>' +
  586. ' <td>经度</td>' +
  587. ' <td>纬度</td>' +
  588. ' </tr>' +
  589. ' <tr class="info">' +
  590. ' <td>' + data[0] + '</td>' +
  591. ' <td>' + data[1] + '</td>' +
  592. ' <td>' + data[4] + '</td>' +
  593. ' <td>' + nLatlng.lng + '</td>' +
  594. ' <td>' + nLatlng.lat + '</td>' +
  595. ' </tr>' +
  596. ' <tr class="title">' +
  597. ' <td>高度</td>' +
  598. ' <td>时间</td>' +
  599. ' <td>偏航</td>' +
  600. ' <td>俯仰</td>' +
  601. ' <td>滚动</td>' +
  602. ' </tr>' +
  603. ' <tr class="info">' +
  604. ' <td>' + data[10] + '</td>' +
  605. ' <td>' + curtime.getFullYear() + '/' + curtime.getMonth() + 1 + '/' + curtime.getDay() + '' + curtime.getHours() + ":" + curtime.getMinutes() + '</td>'+
  606. ' <td>' + data[11] + '</td>' +
  607. ' <td>' + data[12] + '</td>' +
  608. ' <td>' + data[13] + '</td>' +
  609. ' </tr>' +
  610. ' <tr class="title">' +
  611. ' <td>速度</td>' +
  612. ' <td>状态</td>' +
  613. ' <td>席位</td>' +
  614. ' <td>事件</td>' +
  615. ' <td>等级</td>' +
  616. ' </tr>' +
  617. ' <tr class="info">' +
  618. ' <td>' + data[14] + '</td>' +
  619. ' <td>' + data[16] + '</td>' +
  620. ' <td>' + data[6] + '</td>' +
  621. ' <td>' + data[17] + '</td>' +
  622. ' <td>' + data[5] + '</td>' +
  623. ' </tr>' +
  624. '</table>'
  625. var options_popup = {
  626. name: data[1],
  627. content: popupHtml
  628. }
  629. popupHtml = creatPopupHtml(options_popup)
  630. if (modValue.markerId[data[0]]) {
  631. map23DControl.marker({
  632. action: 'update',
  633. groupId: modValue.markerGroup,
  634. guid: modValue.markerId[data[0]],
  635. geojson: {
  636. "type": "Feature",
  637. "properties": {
  638. title: data[0],
  639. iconUrl: map23DConfig.map23DAssetsUrl + '/images/layout/marker/roadsign_icon_1_b.png',
  640. iconSize: [60, 39],
  641. iconAnchor: [30, 39],
  642. popupAnchor: [0, -39],
  643. altitude: data[10],
  644. altitudeMode: 1,
  645. popupContent: popupHtml
  646. },
  647. "geometry": {
  648. "type": "Point",
  649. "coordinates": [data[8], data[9]]
  650. }
  651. }
  652. })
  653. } else {
  654. var guid = map23DControl.marker({
  655. action: 'add',
  656. groupId: modValue.markerGroup,
  657. geojson: {
  658. "type": "Feature",
  659. "properties": {
  660. title: data[0],
  661. iconUrl: map23DConfig.map23DAssetsUrl + '/images/layout/marker/roadsign_icon_1_b.png',
  662. iconSize: [60, 39],
  663. iconAnchor: [30, 39],
  664. popupAnchor: [0, -39],
  665. altitude: data[10],
  666. altitudeMode: 1,
  667. popupContent: popupHtml
  668. },
  669. "geometry": {
  670. "type": "Point",
  671. "coordinates": [data[8], data[9]]
  672. }
  673. }
  674. })
  675. //添加option到历史位置查询
  676. $('<option value="' + data[0] + '">' + data[0] + '</option>').appendTo($("#chooseTargetId"));
  677. modValue.markerId[data[0]] = guid;
  678. $("#menu .formation-list-content").find("input[cid='" + data[0] + "']").attr('checked', true)
  679. }
  680. }
  681. /**
  682. * 获取历史位置记录
  683. */
  684. function getHistoryTargetPosition(options) {
  685. var request = {
  686. request: "get_target_trail",
  687. identifier: 'gethistorytargetposition',
  688. project: {
  689. project_id: options.project_id,
  690. project_name: options.project_name,
  691. origin_list: options.origin_list,
  692. start_time: options.start_time,
  693. end_time: options.end_time
  694. },
  695. target:{
  696. origin_id:options.origin_id,
  697. target_id:options.target_id
  698. }
  699. }
  700. if (status.webSocketState == true) {
  701. modValue.webSocket.send(JSON.stringify(request));
  702. } else {
  703. connectSocket();
  704. }
  705. }
  706. /**
  707. * 获取项目信息列表
  708. * @return {[type]} [description]
  709. */
  710. function getProjectData() {
  711. //发送获取当前项目的信息
  712. var request = {
  713. request: "get_project_data",
  714. identifier: 'getprojectdata'
  715. };
  716. if (status.webSocketState == true) {
  717. modValue.webSocket.send(JSON.stringify(request));
  718. } else {
  719. connectSocket();
  720. }
  721. }
  722. /**
  723. * 获取编制记录
  724. */
  725. function getCurrentFormation() {
  726. var request = {
  727. request: "get_current_formation",
  728. identifier: 'getcurrentformation',
  729. origin_id: modValue.options.currentOriginId
  730. };
  731. if (status.webSocketState == true) {
  732. modValue.webSocket.send(JSON.stringify(request));
  733. } else {
  734. connectSocket();
  735. }
  736. }
  737. /**
  738. * 获取所有目标当前状态
  739. * @return {[type]} [description]
  740. */
  741. function getProjectLastDataFlow() {
  742. var request = {
  743. request: "get_current_target",
  744. identifier: 'getprojectlastdataflow',
  745. origin_id: modValue.options.currentOriginId
  746. };
  747. if (status.webSocketState == true) {
  748. modValue.webSocket.send(JSON.stringify(request));
  749. } else {
  750. connectSocket();
  751. }
  752. }
  753. /**
  754. * 界面重置
  755. * @return {[type]} [description]
  756. */
  757. function layoutResize(options) {
  758. //if (options.modName != "projectController") {
  759. // remove();
  760. //} else {
  761. if (status.isShowChild) {
  762. remove();
  763. } else {
  764. $("#menu .commitMecal").addClass('active');
  765. $("#menu .commitMecal").find('.menu-select-no').removeClass("menu-select-no").addClass("menu-select");
  766. status.isShowChild = true;
  767. }
  768. //}
  769. }
  770. /**
  771. * 切换23D样式
  772. */
  773. function layoutResizeCSS(cid) {
  774. if (cid == '2d') {
  775. $("#chosseHistroyPositionTime .popup_html").removeClass('TD');
  776. } else {
  777. $("#chosseHistroyPositionTime .popup_html").addClass('TD');
  778. }
  779. }
  780. /**
  781. * 注册订阅
  782. * @type {Function}
  783. * 推送:ONEMAP.C.publisher.publish(options,'moduleName::type');
  784. * 订阅:ONEMAP.C.publisher.subscribe(layoutResize,'sideBarLayoutChange');
  785. */
  786. function subscribe() {
  787. //ONEMAP.C.publisher.subscribe(layoutResize, 'menuListClick');
  788. ONEMAP.C.publisher.subscribe(remove, 'cleanMap');
  789. ONEMAP.C.publisher.subscribe(layoutResizeCSS, 'change23D');
  790. }
  791. /**
  792. * 取消订阅
  793. * @type {Function}
  794. * 取消订阅:ONEMAP.C.publisher.unSubscribe(layoutResize,'sideBarLayoutChange');
  795. */
  796. function unSubscribe() {
  797. }
  798. /**
  799. * 清空轨迹线
  800. */
  801. function cleanPolyline() {
  802. if (modValue.polyGroup) {
  803. map23DControl.group({
  804. action: 'cleanAll',
  805. guid: modValue.polyGroup
  806. })
  807. modValue.polylineId = {};
  808. }
  809. }
  810. /**
  811. * 模块移除
  812. * @return {[type]} [description]
  813. */
  814. function remove() {
  815. if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) {
  816. modValue.webSocket.close();
  817. }
  818. modValue.webSocket = null;
  819. status.webSocketState = false;
  820. //取消订阅
  821. unSubscribe();
  822. $("#menu .commitMecal").removeClass('active');
  823. status.isShowChild = false;
  824. status.connect = false;
  825. $("#menu .stopCommit").hide();
  826. $("#menu .startCommit").show();
  827. $("#menu .commitMecal").find('.menu-select').removeClass("menu-select").addClass("menu-select-no");
  828. cleanPolyline();
  829. if (modValue.markerGroup) {
  830. map23DControl.group({
  831. action: 'cleanAll',
  832. guid: modValue.markerGroup
  833. })
  834. modValue.markerGroup = false;
  835. modValue.markerId = {};
  836. }
  837. if (modValue.appendToMyLayer) {
  838. var options = {
  839. action: "remove",
  840. DOMid: modValue.appendToMyLayer
  841. }
  842. ONEMAP.M.myLayers.myLayerControl(options);
  843. modValue.appendToMyLayer = false;
  844. }
  845. $("#menu .openhistroyposition").remove();
  846. $("#menu .current-formation").remove();
  847. $("#chosseHistroyPositionTime").hide();
  848. $("#menu .menu-base ul.mn-content").mCustomScrollbar('update');
  849. }
  850. /**
  851. * 获取数据
  852. * @return {[type]} [description]
  853. */
  854. function getValue(name) {
  855. if (modValue.hasOwnProperty(name)) {
  856. return modValue[name]
  857. } else {
  858. return null;
  859. }
  860. }
  861. /**
  862. * 设置数据 默认合并
  863. */
  864. function setValue(name, value, rewrite) {
  865. if (rewrite) {
  866. modValue = value;
  867. return modValue;
  868. } else {
  869. _.merge(modValue, value);
  870. return modValue;
  871. }
  872. }
  873. return ONEMAP.M.projectController = {
  874. init: init,
  875. openHistroyPosition:openHistroyPosition
  876. }
  877. });