/** * [ONEMAP.M.projectController] * @return {[object]} */ define(['html!templates/menu/projectController', 'css!styles/menu/projectController' ], function(tplLayout) { /** * 模块数据 用于数据存储和外部调用 * @type {Object} * 数据存放 */ var modValue = { webSocket: null, currentProjectInfo: null, options: { project_name: "test", currentOriginId: "1", controllOptions: {}, curinfomation: null }, menuProjectObjs: null, markerGroup: null, polyGroup: null, markerId: {}, polylineId: {}, appendToMyLayer: null }; /** * 模块界面样式 例如:宽,高 * @type {Object} */ var styles = {}; /** * 模块状态,用于存储模块的状态 例如:收起,关闭 * @type {Object} */ var status = { initialized: false, isShowChild: false, connect: false, webSocketState: false }; /** * 查询参数 * @type {Object} */ var options = {}; /** * * 初始化并订阅事件 * @return {[type]} [description] */ function init() { if (!status.initialized) { subscribe(); bindEvent(); setLayout(); status.initialized = true; } if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) { modValue.webSocket.close(); } if (!modValue.markerGroup) { modValue.markerGroup = map23DControl.group({ action: 'add' }) } if (!modValue.polyGroup) { modValue.polyGroup = map23DControl.group({ action: 'add' }) } modValue.webSocket = null; status.webSocketState = false; modValue.currentProjectInfo = null; /*ONEMAP.C.publisher.publish({ modName: 'projectController' }, 'menuListClick');*/ //connectSocket(); $("#menu .startCommit span").click(); layoutResize(); getCurrentProject(); } /** * 创建冒泡窗 */ function creatPopupHtml(options) { var popupHtml = '' return popupHtml; } /** * 设置界面 */ function setLayout() { $(tplLayout).appendTo($("#wrapper")); //拖拽 $("#chosseHistroyPositionTime .popup-ct").dragmove($('#chosseHistroyPositionTime')); } function getCurrentProject() { ONEMAP.V.loading.load(); $.ajax({ url: onemapUrlConfig.websocketApiUrl + '/project/' + modValue.options.project_name, type: 'GET', dataType: 'jsonp' }) .done(function(data) { ONEMAP.V.loading.loaded(); if (data.code == 0) { modValue.options.controllOptions['project_data'] = data['data']; } else { ONEMAP.C.publisher.publish({ type: 'error', message: data['msg'] }, 'noteBar::add'); } }) .fail(function() { ONEMAP.V.loading.loaded(); ONEMAP.C.publisher.publish({ type: 'error', message: '获取项目数据失败!' }, 'noteBar::add'); }); } /** * 界面事件绑定 * @return {[type]} [description] */ function bindEvent() { $("#menu .startCommit span").unbind('click').bind('click', function() { status.connect = true; $("#menu .startCommit").hide(); $("#menu .stopCommit").show(); if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) { modValue.webSocket.close(); } connectSocket(); if (!modValue.appendToMyLayer) { var options = { action: "add", mod:'zhihuiji', DOM: { name: '指挥机', type: "group", guid: modValue.markerGroup } } modValue.appendToMyLayer = ONEMAP.M.myLayers.myLayerControl(options); ONEMAP.C.publisher.subscribe(controlMyLayer, modValue.appendToMyLayer); } }) $("#menu .stopCommit span").unbind('click').bind('click', function() { if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) { modValue.webSocket.close(); } modValue.webSocket = null; status.webSocketState = false; status.connect = false; $("#menu .stopCommit").hide(); $("#menu .startCommit").show(); }) $("#menu .commitMecal .im-2 .fu").unbind('click').bind('click', function() { if ($(this).parent().hasClass('active')) { $(this).parent().removeClass('active'); $(this).children().css({ "background": "url(../images/layout/right.png) left no-repeat" }) $(this).next().hide(); } else { $(this).parent().addClass('active'); $(this).children().css({ "background": "url(../images/layout/down.png) left no-repeat" }) $(this).next().show(); } $("#menu .infoMenu .im-1 ul.menu-content").mCustomScrollbar('update'); }) //点击子元素地图跳转 打开冒泡窗 $("#menu .markerlink").unbind('click').bind('click', function() { var cid = $(this).parent().attr('cid'); if (modValue.markerId[cid]) { var curmarkerdata = map23DData.markers[modValue.markerId[cid]]; if (curmarkerdata.visible2D || curmarkerdata.visible3D) { var latlng = curmarkerdata.geojson.geometry.coordinates; map23DControl.setView({ center: { lat: latlng[1], lng: latlng[0] } }) map2DViewer.markers[modValue.markerId[cid]].openPopup(); } } else { ONEMAP.C.publisher.publish({ type: 'error', message: '暂无数据' }, 'noteBar::add'); } }) //地图点勾选 $("#menu .formation-list-content input").unbind('click').bind('click', function() { var cid = $(this).attr('cid'); if ($(this).is(":checked")) { if (modValue.markerId[cid]) { map23DControl.marker({ action: 'show', guid: modValue.markerId[cid] }) } else { ONEMAP.C.publisher.publish({ type: 'error', message: '暂无数据' }, 'noteBar::add'); } } else { if (modValue.markerId[cid]) { map23DControl.marker({ action: 'hide', guid: modValue.markerId[cid] }) } } }) //查询历史位置记录 $("#chosseHistroyPositionTime .post_time").unbind('click').bind('click', function() { var start_time = $("#chosseHistroyPositionTime #sendStartTime").val(); start_time = start_time.replace(/-/g, "/"); start_time = new Date(start_time).getTime(); var stop_time = $("#chosseHistroyPositionTime #sendStopTime").val(); stop_time = stop_time.replace(/-/g, "/"); stop_time = new Date(stop_time).getTime(); var target_id = $("#chooseTargetId").val(); var options = { project_id: modValue.currentProjectInfo.project_id, project_name: modValue.currentProjectInfo.project_name, origin_list: modValue.currentProjectInfo.origin_list, start_time: start_time, end_time: stop_time, target_id: target_id, origin_id: modValue.options.currentOriginId } getHistoryTargetPosition(options); var data = map23DData.markers[modValue.markerId[target_id]]; map23DControl.setView({ center: { lat: data.geojson.geometry.coordinates[1], lng: data.geojson.geometry.coordinates[0] } }) }) //清空历史位置查询 $("#chosseHistroyPositionTime .clear_time").unbind('click').bind('click', function() { cleanPolyline(); }) } /** * 打开历史轨迹查询 */ function openHistroyPosition(){ if (!modValue.showHistroyPosition) { if (map23DData.display.map2D) { $("#chosseHistroyPositionTime .popup_html").removeClass('TD'); } else { $("#chosseHistroyPositionTime .popup_html").addClass('TD'); } $(".getHistoryZHJ").addClass('active'); $("#chosseHistroyPositionTime").show(); modValue.showHistroyPosition = true; } else { modValue.showHistroyPosition = false; $("#chosseHistroyPositionTime").hide(); cleanPolyline(); $(".getHistoryZHJ").removeClass('active'); } } /** * 我的图层控制当值图层 */ function controlMyLayer(options) { switch (options.action) { case 'remove': remove(); break; case 'opacity': setGropOpacity(options); break; case 'up': case 'down': setGroupZIndex(options); break; } }; function setGroupZIndex(options) { } function setGropOpacity(options) { options = options.options; if (modValue.markerGroup) { if (options.opacity == 1) { map23DControl.group({ action: 'show', guid: modValue.markerGroup }) } else if (options.opacity == 0) { map23DControl.group({ action: 'hide', guid: modValue.markerGroup }) } } if (modValue.polyGroup) { if (options.opacity == 1) { map23DControl.group({ action: 'show', guid: modValue.polyGroup }) } else if (options.opacity == 0) { map23DControl.group({ action: 'hide', guid: modValue.polyGroup }) } } } /** * 连接socket * @return {[type]} [description] */ function connectSocket() { if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) { modValue.webSocket.close(); } modValue.webSocket = null; modValue.webSocket = new WebSocket(onemapUrlConfig.websocketUrl); modValue.webSocket.onopen = function() { status.webSocketState = true; getProjectData(); getCurrentFormation(); }; modValue.webSocket.onclose = function() { status.webSocketState = false; }; modValue.webSocket.onmessage = function(data) { var resultData = JSON.parse(data.data); if (resultData['identifier'] == 'gethistorytargetposition') { modValue.options.curhistorytargetposition = resultData; //console.log(resultData); //绘制历史位置回放线 drawTatgetHistroy(resultData); } if (resultData['identifier'] == 'getcurrentformation') { modValue.options.curinfomation = resultData; creatInfomation(); } if (resultData['identifier'] == 'getprojectdata') { $(resultData['data']).each(function(index, el) { if (el['project_id'] == modValue.options['project_name']) { modValue.currentProjectInfo = el; } }); setTimeout(function() { getProjectLastDataFlow(); }, 500) } if (resultData['identifier'] == 'getprojectlastdataflow') { $("#chooseTargetId").empty(); for (var i = 0; i < resultData['data'].length; i++) { addMarkers(resultData['data'][i]); } var request = { request: "open_receive_realtime_target", origin_id: modValue.options.currentOriginId, identifier: 'getprojectdataflow' }; if (status.webSocketState == true) { modValue.webSocket.send(JSON.stringify(request)); } else { connectSocket(); } } if (resultData['response'] == 'realtime_target') { if (resultData['data'].length > 0) { addMarkers(resultData['data'][0]); } } } } /** * 解析子数据 */ function childrenfun(i) { var children = {}; var data = modValue.options.curinfomation; $.each(data, function(j, item) { if (item[0] == i) { children[j] = {}; children[j].data = item; children[j].children = childrenfun(j); } }); return children; } /* * 创建编制信息,并显示 */ function creatInfomation() { var listData = {}; $.each(modValue.options.curinfomation.data[0].formation_data, function(i, t) { listData[t[1]] = t; }) modValue.options.curinfomation = listData; var cateList = {}; $.each(listData, function(i, t) { if (!cateList[t[0]]) { cateList[t[0]] = {}; } }) $.each(cateList, function(i, t) { if (listData[i]) { //如果分类无数据,不显示 if (!listData[listData[i][0]]) { //如果分类父id有数据,不显示 cateList[i].name = listData[i][1]; cateList[i].code_name = listData[i][2]; var children = childrenfun(i); cateList[i].children = children; } } else { delete listData[i]; } }) modValue.options.cateLisdata = cateList; creatInfomationHtml(); } function creatInfomationHtml() { var htmldata = modValue.options.cateLisdata; $("#menu .openhistroyposition").remove(); $("#menu .current-formation").remove(); $("#chosseHistroyPositionTime").hide(); var licontent = '
  • ' + ' 显示历史位置' + '
  • ' + '
  • ' + '

    编制

    ' + ' ' + '
  • '; $(licontent).hide(); $(licontent).appendTo($("#menu .commitMecal .menu-content .list-infomation-content")); $.each(htmldata, function(i, t) { if (t.name) { if (judgeObject(t.children)) { var liHtml = $('
  • ' + t.name + '

  • '); liHtml.find('.fu').children().css({ "background": "url(../images/layout/right.png) left no-repeat" }) var curulhtml = setItemSubInfo(t.children); curulhtml.hide(); curulhtml.appendTo(liHtml); } else { var liHtml = $('
  • ' + t.name + '
  • '); } liHtml.appendTo($("#menu .formation-list-content")) } }) $(licontent).show(); bindEvent(); $("#menu .menu-base ul.mn-content").mCustomScrollbar('update'); }; /** * 填充子列表 */ function setItemSubInfo(data) { var ulHtml = $(''); $.each(data, function(i, t) { if (judgeObject(t.children)) { var liHtml = $('
  • ' + t.data[1] + '

  • '); liHtml.find('.fu').children().css({ "background": "url(../images/layout/right.png) left no-repeat" }) var newUlHtml = setItemSubInfo(t.children); newUlHtml.hide(); newUlHtml.appendTo(liHtml); } else { var liHtml = $('
  • ' + t.data[1] + '
  • '); } liHtml.appendTo(ulHtml) }) return ulHtml; } /** * 判断是否是空对象 */ function judgeObject(data) { data = JSON.stringify(data); if (data == "{}") { return false } else { return true; } } /** * 绘制历史位置线 */ function drawTatgetHistroy(data) { var altitude = []; var coordinates = []; for (var i = 0; i < data.data.length; i++) { altitude.push(data.data[i][8]); coordinates.push([data.data[i][6], data.data[i][7]]) } if (modValue.polylineId[data[0]]) { map23DControl.polyline({ action: 'update', groupId: modValue.polyGroup, guid: modValue.polylineId[data[0]], geojson: { "properties": { title: '历史轨迹', color: '#0033ff', weight: 1, opacity: 1, extrude: 10, //拉伸高度 altitude: altitude, //点海拔高度 altitudeMode: 1, //海拔模式 lineJoin: 'miter', lineCap: 'butt' }, "geometry": { "coordinates": coordinates } } }) } else { var guid = map23DControl.polyline({ action: 'add', groupId: modValue.polyGroup, geojson: { "properties": { title: '历史轨迹', color: '#0033ff', weight: 1, opacity: 1, extrude: 10, //拉伸高度 altitude: altitude, //点海拔高度 altitudeMode: 1, //海拔模式 lineJoin: 'miter', lineCap: 'butt' }, "geometry": { "coordinates": coordinates } } }) modValue.polylineId[data[0]] = guid; } }; /** * 地图打点 */ function addMarkers(data) { var data = data; var latlng = new L.latLng(data[9], data[8]) var nLatlng = L.Util.formatHMS(latlng); var curtime = new Date(data[2]); /*var popupHtml = '
    ' + '' + '
    ';*/ var popupHtml = '' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' '+ ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + ' ' + '
    目标ID目标名称敌我关系经度纬度
    ' + data[0] + '' + data[1] + '' + data[4] + '' + nLatlng.lng + '' + nLatlng.lat + '
    高度时间偏航俯仰滚动
    ' + data[10] + '' + curtime.getFullYear() + '/' + curtime.getMonth() + 1 + '/' + curtime.getDay() + '' + curtime.getHours() + ":" + curtime.getMinutes() + '' + data[11] + '' + data[12] + '' + data[13] + '
    速度状态席位事件等级
    ' + data[14] + '' + data[16] + '' + data[6] + '' + data[17] + '' + data[5] + '
    ' var options_popup = { name: data[1], content: popupHtml } popupHtml = creatPopupHtml(options_popup) if (modValue.markerId[data[0]]) { map23DControl.marker({ action: 'update', groupId: modValue.markerGroup, guid: modValue.markerId[data[0]], geojson: { "type": "Feature", "properties": { title: data[0], iconUrl: map23DConfig.map23DAssetsUrl + '/images/layout/marker/roadsign_icon_1_b.png', iconSize: [60, 39], iconAnchor: [30, 39], popupAnchor: [0, -39], altitude: data[10], altitudeMode: 1, popupContent: popupHtml }, "geometry": { "type": "Point", "coordinates": [data[8], data[9]] } } }) } else { var guid = map23DControl.marker({ action: 'add', groupId: modValue.markerGroup, geojson: { "type": "Feature", "properties": { title: data[0], iconUrl: map23DConfig.map23DAssetsUrl + '/images/layout/marker/roadsign_icon_1_b.png', iconSize: [60, 39], iconAnchor: [30, 39], popupAnchor: [0, -39], altitude: data[10], altitudeMode: 1, popupContent: popupHtml }, "geometry": { "type": "Point", "coordinates": [data[8], data[9]] } } }) //添加option到历史位置查询 $('').appendTo($("#chooseTargetId")); modValue.markerId[data[0]] = guid; $("#menu .formation-list-content").find("input[cid='" + data[0] + "']").attr('checked', true) } } /** * 获取历史位置记录 */ function getHistoryTargetPosition(options) { var request = { request: "get_target_trail", identifier: 'gethistorytargetposition', project: { project_id: options.project_id, project_name: options.project_name, origin_list: options.origin_list, start_time: options.start_time, end_time: options.end_time }, target:{ origin_id:options.origin_id, target_id:options.target_id } } if (status.webSocketState == true) { modValue.webSocket.send(JSON.stringify(request)); } else { connectSocket(); } } /** * 获取项目信息列表 * @return {[type]} [description] */ function getProjectData() { //发送获取当前项目的信息 var request = { request: "get_project_data", identifier: 'getprojectdata' }; if (status.webSocketState == true) { modValue.webSocket.send(JSON.stringify(request)); } else { connectSocket(); } } /** * 获取编制记录 */ function getCurrentFormation() { var request = { request: "get_current_formation", identifier: 'getcurrentformation', origin_id: modValue.options.currentOriginId }; if (status.webSocketState == true) { modValue.webSocket.send(JSON.stringify(request)); } else { connectSocket(); } } /** * 获取所有目标当前状态 * @return {[type]} [description] */ function getProjectLastDataFlow() { var request = { request: "get_current_target", identifier: 'getprojectlastdataflow', origin_id: modValue.options.currentOriginId }; if (status.webSocketState == true) { modValue.webSocket.send(JSON.stringify(request)); } else { connectSocket(); } } /** * 界面重置 * @return {[type]} [description] */ function layoutResize(options) { //if (options.modName != "projectController") { // remove(); //} else { if (status.isShowChild) { remove(); } else { $("#menu .commitMecal").addClass('active'); $("#menu .commitMecal").find('.menu-select-no').removeClass("menu-select-no").addClass("menu-select"); status.isShowChild = true; } //} } /** * 切换23D样式 */ function layoutResizeCSS(cid) { if (cid == '2d') { $("#chosseHistroyPositionTime .popup_html").removeClass('TD'); } else { $("#chosseHistroyPositionTime .popup_html").addClass('TD'); } } /** * 注册订阅 * @type {Function} * 推送:ONEMAP.C.publisher.publish(options,'moduleName::type'); * 订阅:ONEMAP.C.publisher.subscribe(layoutResize,'sideBarLayoutChange'); */ function subscribe() { //ONEMAP.C.publisher.subscribe(layoutResize, 'menuListClick'); ONEMAP.C.publisher.subscribe(remove, 'cleanMap'); ONEMAP.C.publisher.subscribe(layoutResizeCSS, 'change23D'); } /** * 取消订阅 * @type {Function} * 取消订阅:ONEMAP.C.publisher.unSubscribe(layoutResize,'sideBarLayoutChange'); */ function unSubscribe() { } /** * 清空轨迹线 */ function cleanPolyline() { if (modValue.polyGroup) { map23DControl.group({ action: 'cleanAll', guid: modValue.polyGroup }) modValue.polylineId = {}; } } /** * 模块移除 * @return {[type]} [description] */ function remove() { if (modValue.webSocket && (modValue.webSocket.readyState === 0 || modValue.webSocket.readyState === 1)) { modValue.webSocket.close(); } modValue.webSocket = null; status.webSocketState = false; //取消订阅 unSubscribe(); $("#menu .commitMecal").removeClass('active'); status.isShowChild = false; status.connect = false; $("#menu .stopCommit").hide(); $("#menu .startCommit").show(); $("#menu .commitMecal").find('.menu-select').removeClass("menu-select").addClass("menu-select-no"); cleanPolyline(); if (modValue.markerGroup) { map23DControl.group({ action: 'cleanAll', guid: modValue.markerGroup }) modValue.markerGroup = false; modValue.markerId = {}; } if (modValue.appendToMyLayer) { var options = { action: "remove", DOMid: modValue.appendToMyLayer } ONEMAP.M.myLayers.myLayerControl(options); modValue.appendToMyLayer = false; } $("#menu .openhistroyposition").remove(); $("#menu .current-formation").remove(); $("#chosseHistroyPositionTime").hide(); $("#menu .menu-base ul.mn-content").mCustomScrollbar('update'); } /** * 获取数据 * @return {[type]} [description] */ function getValue(name) { if (modValue.hasOwnProperty(name)) { return modValue[name] } else { return null; } } /** * 设置数据 默认合并 */ function setValue(name, value, rewrite) { if (rewrite) { modValue = value; return modValue; } else { _.merge(modValue, value); return modValue; } } return ONEMAP.M.projectController = { init: init, openHistroyPosition:openHistroyPosition } });