添加空空攻击事件

This commit is contained in:
pm 2025-03-17 17:37:26 +08:00
parent 9a45ba29ad
commit a530f5c074
2 changed files with 274 additions and 104 deletions

View File

@ -1,7 +1,7 @@
const util = require("../util/common"); const util = require("../util/common");
let dataBase = require("../util/dmDB"); let dataBase = require("../util/dmDB");
const moment = require('moment-timezone'); const moment = require('moment-timezone');
var { PlanePoint, entityHJ, simuStatus } = require("../util/variable"); var { PlanePoint, entityHJ, entityEvent, simuStatus } = require("../util/variable");
//加载航空兵数据 //加载航空兵数据
exports.loadHKBData = (req, res, next) => { exports.loadHKBData = (req, res, next) => {
@ -194,10 +194,10 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
} }
else { else {
t = Math.round(x / dmjjsdwh); t = Math.round(x / dmjjsdwh);
zdsk = starttime.add(t, 'seconds'); zdsk = moment(starttime).add(t, 'seconds');
} }
t = Math.round(jl / dmjjsdwh); t = Math.round(jl / dmjjsdwh);
mzsk = starttime.add(t, 'seconds'); mzsk = moment(starttime).add(t, 'seconds');
} }
} }
else { else {
@ -210,22 +210,21 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
} }
else { else {
t = Math.round(x / dmjjsdyt); t = Math.round(x / dmjjsdyt);
zdsk = starttime.add(t, 'seconds'); zdsk = moment(starttime).add(t, 'seconds');
} }
t = Math.round(jl / dmjjsdyt); t = Math.round(jl / dmjjsdyt);
mzsk = starttime.add(t, 'seconds'); mzsk = moment(starttime).add(t, 'seconds');
} }
} }
} }
else { else {
if (ts == "尾后") { if (ts == "尾后") {
if (dmjjsdwh <= 0) { if (dmjjsdwh <= 0) {
} }
else { else {
zdsk = starttime; zdsk = starttime;
t = Math.round(jl / dmjjsdwh); t = Math.round(jl / dmjjsdwh);
mzsk = starttime.add(t, 'seconds'); mzsk = moment(starttime).add(t, 'seconds');
} }
} }
else { else {
@ -234,18 +233,25 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
else { else {
zdsk = starttime; zdsk = starttime;
t = Math.round(jl / dmjjsdyt); t = Math.round(jl / dmjjsdyt);
mzsk = starttime.add(t, 'seconds'); mzsk = moment(starttime).add(t, 'seconds');
} }
} }
} }
if (!mzsk) {
endtime = moment(starttime).add(10, 'seconds');
}
else {
endtime = mzsk;
}
} }
} }
else { else {
endtime = starttime.add(10, 'seconds'); endtime = moment(starttime).add(10, 'seconds');
} }
var startms = zerotime.diff(starttime, 'ms'); var startms = starttime.diff(zerotime, 'ms');
var endms = zerotime.diff(endtime, 'ms'); var endms = endtime.diff(zerotime, 'ms');
sjmap["开始时间"] = startms; sjmap["开始时间"] = startms;
sjmap["结束时间"] = endms; sjmap["结束时间"] = endms;
@ -262,7 +268,7 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
csmap["装备类别"] = "空空弹"; csmap["装备类别"] = "空空弹";
csmap["航迹"] = kkddhj; csmap["航迹"] = kkddhj;
if (jhsk) { if (jhsk) {
var jhms = zerotime.diff(jhsk, 'ms'); var jhms = jhsk.diff(zerotime, 'ms');
csmap["制导结束时刻"] = jhms + 1; csmap["制导结束时刻"] = jhms + 1;
csmap["攻击开始时刻"] = startms; csmap["攻击开始时刻"] = startms;
@ -270,8 +276,8 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
} }
var num = kkddhj.size; var num = kkddhj.size;
endtime = starttime.add(num * 10, 'ms'); //导弹航迹精度为10ms endtime = moment(starttime).add(num * 10, 'ms'); //导弹航迹精度为10ms
var endms = zerotime.diff(endtime, 'ms'); endms = endtime.diff(zerotime, 'ms');
sjmap["结束时间"] = endms; sjmap["结束时间"] = endms;
} }
csmap["标识"] = qcdh + fsbh; csmap["标识"] = qcdh + fsbh;
@ -283,6 +289,27 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
//传入Gis的事件 //传入Gis的事件
array.push(sjmap); array.push(sjmap);
let eventMap = entityEvent.get(bdid);
if (!eventMap) {
eventMap = new Map();
}
{
let event = {};
event["事件"] = "空空攻击事件";
event["类型"] = "开始";
event["参数"] = csmap;
eventMap.set(startms, event);
}
{
let event = {};
event["事件"] = "空空攻击事件";
event["类型"] = "结束";
event["参数"] = csmap;
eventMap.set(endms, event);
}
entityEvent.set(bdid, eventMap);
result = await data.getRow(); result = await data.getRow();
} }
@ -325,7 +352,21 @@ getKkddFromDb = async (bdid, gjcx) => {
const byte = buffer.subarray(offset, offset + size); const byte = buffer.subarray(offset, offset + size);
PlanePoint.setBuffer(byte); PlanePoint.setBuffer(byte);
points.set(PlanePoint.get('iRelTime'), PlanePoint); let pt = {};
pt["iNum"] = PlanePoint.get('iNum');
pt["iRelTime"] = PlanePoint.get('iRelTime');
pt["空速"] = PlanePoint.get('dAirspeed');
pt["升降率"] = PlanePoint.get('dSjl');
pt["过载"] = PlanePoint.get('dOverload');
pt["马赫数"] = PlanePoint.get('dMach');
pt["经度"] = PlanePoint.get('dLongitude');
pt["纬度"] = PlanePoint.get('dLatitude');
pt["海拔"] = PlanePoint.get('dAlitidude');
pt["航向角"] = PlanePoint.get('dHxj');
pt["俯仰角"] = PlanePoint.get('dFyj');
pt["倾斜角"] = PlanePoint.get('dQxj');
points.set(PlanePoint.get('iRelTime'), pt);
} }
const sortMap = new Map([...points].sort((a, b) => a[0] - b[0])); const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
@ -349,8 +390,8 @@ getKdwqsyList = async (bdid, qrxg, rq) => {
var starttime = moment(result[0]); var starttime = moment(result[0]);
var endtime = moment(result[1]); var endtime = moment(result[1]);
var fsbh = result[4]; var fsbh = result[4];
var startms = zerotime.diff(starttime, 'ms'); var startms = starttime.diff(zerotime, 'ms');
var endms = zerotime.diff(endtime, 'ms'); var endms = endtime.diff(zerotime, 'ms');
if (startms <= endms || endms == 0) { if (startms <= endms || endms == 0) {
endms = startms + 10000; endms = startms + 10000;
@ -370,6 +411,27 @@ getKdwqsyList = async (bdid, qrxg, rq) => {
//传入Gis的事件 //传入Gis的事件
array.push(sjmap); array.push(sjmap);
let eventMap = entityEvent.get(bdid);
if (!eventMap) {
eventMap = new Map();
}
{
let event = {};
event["事件"] = "空地攻击事件";
event["类型"] = "开始";
event["参数"] = csmap;
eventMap.set(startms, event);
}
{
let event = {};
event["事件"] = "空地攻击事件";
event["类型"] = "结束";
event["参数"] = csmap;
eventMap.set(endms, event);
}
entityEvent.set(bdid, eventMap);
result = await data.getRow(); result = await data.getRow();
} }
@ -391,11 +453,11 @@ getGrqkList = async (bdid, grlx, qcdh, rq) => {
var grsd = moment(result[1]); var grsd = moment(result[1]);
var grjs = moment(result[4]); var grjs = moment(result[4]);
if (grjs < grsd) { if (grjs < grsd) {
grjs = grsd.add(30, 'seconds'); grjs = moment(grsd).add(30, 'seconds');
} }
var grSec = zerotime.diff(grsd, 'ms'); var grSec = grsd.diff(zerotime, 'ms');
var grjsSec = zerotime.diff(grjs, 'ms'); var grjsSec = grjs.diff(zerotime, 'ms');
var grfx = result[5]; var grfx = result[5];
var tfsl = result[3]; var tfsl = result[3];
@ -415,6 +477,37 @@ getGrqkList = async (bdid, grlx, qcdh, rq) => {
map["参数"] = csMap; map["参数"] = csMap;
array.push(map); array.push(map);
let eventMap = entityEvent.get(bdid);
if (!eventMap) {
eventMap = new Map();
}
var eventType;
if (grlx == "红外弹") {
eventType = "红外弹干扰事件";
} else if (grlx == "箔条弹") {
eventType = "箔条弹干扰事件";
} else if (grlx == "有源干扰") {
eventType = "有源干扰事件";
} else if (grlx == "机载雷达") {
eventType = "机载雷达事件";
}
{
let event = {};
event["事件"] = eventType;
event["类型"] = "开始";
event["参数"] = csMap;
eventMap.set(grSec, event);
}
{
let event = {};
event["事件"] = eventType;
event["类型"] = "结束";
event["参数"] = csMap;
eventMap.set(grjsSec, event);
}
entityEvent.set(bdid, eventMap);
result = await data.getRow(); result = await data.getRow();
} }
@ -576,7 +669,21 @@ getDkddFromDb = async (bdid, gjcx, ddbh) => {
const byte = buffer.subarray(offset, offset + size); const byte = buffer.subarray(offset, offset + size);
PlanePoint.setBuffer(byte); PlanePoint.setBuffer(byte);
points.set(PlanePoint.get('iRelTime'), PlanePoint); let pt = {};
pt["iNum"] = PlanePoint.get('iNum');
pt["iRelTime"] = PlanePoint.get('iRelTime');
pt["空速"] = PlanePoint.get('dAirspeed');
pt["升降率"] = PlanePoint.get('dSjl');
pt["过载"] = PlanePoint.get('dOverload');
pt["马赫数"] = PlanePoint.get('dMach');
pt["经度"] = PlanePoint.get('dLongitude');
pt["纬度"] = PlanePoint.get('dLatitude');
pt["海拔"] = PlanePoint.get('dAlitidude');
pt["航向角"] = PlanePoint.get('dHxj');
pt["俯仰角"] = PlanePoint.get('dFyj');
pt["倾斜角"] = PlanePoint.get('dQxj');
points.set(PlanePoint.get('iRelTime'), pt);
} }
const sortMap = new Map([...points].sort((a, b) => a[0] - b[0])); const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));

View File

@ -1,6 +1,6 @@
const WebSocket = require('ws'); const WebSocket = require('ws');
const util = require("../util/common"); const util = require("../util/common");
var { entityHJ, simuStatus } = require("../util/variable"); var { entityHJ, entityEvent, simuStatus } = require("../util/variable");
const deltaT = 1000; const deltaT = 1000;
@ -17,90 +17,16 @@ const createServer = () => {
if (simType == 1) { if (simType == 1) {
var currRadio = simuStatus["仿真倍速"]; var currRadio = simuStatus["仿真倍速"];
var currTime = simuStatus["当前时间"]; var currTime = simuStatus["当前时间"];
if (entityHJ.size > 0) {
var array = [];
for (const [key, value] of entityHJ) {
const keysArray = [...value.keys()];
var indexKey = util.lower_bound(keysArray, currTime);
if (indexKey < keysArray.length) {
let point = {};
var second = keysArray[indexKey];
if (indexKey == 0) {
point = value.get(second);
}
else {
var first = keysArray[indexKey - 1];
var delta_time = second - first;
if (delta_time == 0.0) {
point = value.get(first);
}
else {
var pointfirst = value.get(first);
var pointsecond = value.get(second);
point["空速"] = util.interpolate( let data = {};
(currTime - first) / delta_time, updateEntityHJ(currTime, data);
pointfirst["空速"], updateEntityEvent(currTime, data);
pointsecond["空速"]);
point["升降率"] = util.interpolate( const message = {
(currTime - first) / delta_time, time: currTime,
pointfirst["升降率"], data: data
pointsecond["升降率"]); };
ws.send(JSON.stringify(message)); // 发送JSON格式的消息
point["过载"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["过载"],
pointsecond["过载"]);
point["马赫数"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["马赫数"],
pointsecond["马赫数"]);
point["经度"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["经度"],
pointsecond["经度"]);
point["纬度"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["纬度"],
pointsecond["纬度"]);
point["海拔"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["海拔"],
pointsecond["海拔"]);
point["航向角"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["航向角"],
pointsecond["航向角"]);
point["俯仰角"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["俯仰角"],
pointsecond["俯仰角"]);
point["倾斜角"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["倾斜角"],
pointsecond["倾斜角"]);
}
}
point["BDID"] = key;
array.push(point);
}
}
const message = {
time: currTime,
data: array
};
ws.send(JSON.stringify(message)); // 发送JSON格式的消息
}
var accTime = deltaT * currRadio; var accTime = deltaT * currRadio;
currTime += accTime; currTime += accTime;
@ -120,4 +46,141 @@ const createServer = () => {
console.log('WebSocket服务器正在运行在ws://localhost:9000'); console.log('WebSocket服务器正在运行在ws://localhost:9000');
} }
updateEntityHJ = (currTime, data) => {
if (entityHJ.size > 0) {
var array = [];
for (const [key, value] of entityHJ) {
const keysArray = [...value.keys()];
var indexKey = util.lower_bound(keysArray, currTime);
if (indexKey < keysArray.length) {
let point = {};
var second = keysArray[indexKey];
if (indexKey == 0) {
point = value.get(second);
}
else {
var first = keysArray[indexKey - 1];
var delta_time = second - first;
if (delta_time == 0.0) {
point = value.get(first);
}
else {
var pointfirst = value.get(first);
var pointsecond = value.get(second);
point["空速"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["空速"],
pointsecond["空速"]);
point["升降率"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["升降率"],
pointsecond["升降率"]);
point["过载"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["过载"],
pointsecond["过载"]);
point["马赫数"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["马赫数"],
pointsecond["马赫数"]);
point["经度"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["经度"],
pointsecond["经度"]);
point["纬度"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["纬度"],
pointsecond["纬度"]);
point["海拔"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["海拔"],
pointsecond["海拔"]);
point["航向角"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["航向角"],
pointsecond["航向角"]);
point["俯仰角"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["俯仰角"],
pointsecond["俯仰角"]);
point["倾斜角"] = util.interpolate(
(currTime - first) / delta_time,
pointfirst["倾斜角"],
pointsecond["倾斜角"]);
}
}
point["BDID"] = key;
array.push(point);
}
}
data["航迹列表"] = array;
}
}
updateEntityEvent = (currTime, data) => {
if (entityEvent.size > 0) {
var array = [];
for (const [key, value] of entityEvent) {
var bdid = key;
const tArray = [...value.keys()];
var indexT = util.lower_bound(tArray, currTime);
if (indexT < tArray.length) {
var second = tArray[indexT];
if (second <= currTime) {
let event = value.get(second);
event["BDID"] = bdid;
array.push(event);
let para = event["参数"];
var hj = para["航迹"];
if (hj) {
let xh = para["型号"];
let bh = para["编号"];
var newBDID = xh + ";" + bh;
entityHJ.set(newBDID, hj);
var zdjs = para["制导结束时刻"];
if (zdjs) {
let eventMap = entityEvent.get(newBDID);
if (!eventMap) {
eventMap = new Map();
}
{
let eventJH = {};
eventJH["事件"] = "导弹截获事件";
eventJH["类型"] = "开始";
eventJH["参数"] = para["攻击目标"];
eventMap.set(zdjs, eventJH);
}
{
var endMs = para["结束时刻"];
let eventJH = {};
eventJH["事件"] = "导弹截获事件";
eventJH["类型"] = "结束";
eventJH["参数"] = para["攻击目标"];
eventMap.set(endMs, eventJH);
}
entityEvent.set(newBDID, eventMap);
}
}
}
}
}
data["事件列表"] = array;
}
}
module.exports = createServer() module.exports = createServer()