/**
* [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 = '' +
'
' +
'- 目标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 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
}
});