portree_kid 2020-07-26 19:44:21 +02:00
parent 9fe7322c7b
commit 6770b52f89
3 changed files with 84 additions and 39 deletions

View File

@ -43,7 +43,7 @@ onmessage = function (event) {
).catch(result => {
console.error('Crashed');
console.error(result);
postMessage(['DONE', []]);
postMessage(['DONE', [{id: -1, message: ['Crashed', result ]}]]);
});
}
};
@ -69,8 +69,7 @@ async function checkGroundnet(data) {
var runways = data.map(mapRunways).filter(n => n !== undefined);
this.max = 4 * parkings.length * runwayNodeIDs.length +
3 * parkings.length;
this.max = 30;
this.postMessage(['max', this.max]);
var boxes = {};
@ -95,12 +94,17 @@ async function checkGroundnet(data) {
bidirectionalGraph[element] = {};
});
var notOkNodes = [];
debugger;
//debugger;
console.log(edges);
if (edges === undefined) {
resolve({});
resolve({ id: -1, message: check_msg.NO_EDGES });
}
this.postMessage(['progress', 1]);
if (runways.length === 0) {
resolve({ id: -1, message: check_msg.NO_RUNWAYS });
}
this.postMessage(['progress', 1]);
edges.forEach(edge => {
directionalGraph[edge.start] = {};
bidirectionalGraph[edge.start] = {};
@ -120,14 +124,15 @@ async function checkGroundnet(data) {
});
}
});
// Add edges to directionalGraph
this.postMessage(['progress', 1]);
this.postMessage(['progress', 1]);
// Add edges to graphs
edges.forEach(element => {
var node1 = directionalGraph[element.start];
var node2 = directionalGraph[element.end];
if (element.direction === undefined) {
notOkNodes.push({ id: Number(element._leaflet_id), message: check_msg.EDGE_MISSING_DIRECTION });
}
}
if (element.direction === 'bi-directional' || element.direction === 'forward') {
node1[Number(element.end)] = 1;
}
@ -140,13 +145,13 @@ async function checkGroundnet(data) {
node3[Number(element.end)] = 1;
node4[Number(element.start)] = 1;
});
this.postMessage(['progress', 1]);
var isLegitEnd = function (v) {
if (Object.keys(bidirectionalGraph[v]).length <= 1) {
return true;
}
return Object.keys(bidirectionalGraph[v]).filter(v => runwayNodeIDs[v]).length === 0;
}
//debugger;
runwayNodeIDs = runwayNodeIDs.filter(
(v, i) => isLegitEnd(v)
);
@ -162,7 +167,7 @@ async function checkGroundnet(data) {
} else {
console.log(`No route from Parking ${parkingNode} to Runwaynode ${runwayNode}`);
}
this.postMessage(['progress', 1]);
});
});
// Build pushback directionalGraph
@ -189,16 +194,10 @@ async function checkGroundnet(data) {
var okPushbacks = [];
// Check pushback
var multiplePushbackRoutes = {};
//debugger;
parkings.forEach(parkingNode => {
pushbackNodes.forEach(pushbackNode => {
var numRoutes = checkRoute(noPushbackGraph, parkingNode, pushbackNode);
if (numRoutes === 0) {
/*
if(parkingNode===14) {
debugger;
}
*/
if (multiplePushbackRoutes[parkingNode] === undefined &&
Object.keys(noPushbackGraph[parkingNode]) > 0) {
// Only when there is a edge leaving
@ -217,9 +216,38 @@ async function checkGroundnet(data) {
multiplePushbackRoutes[parkingNode].push(pushbackNode);
}
}
this.postMessage(['progress', 1]);
});
});
var notConnectedToPushback = pushbackNodes.map(
id => {
var normalRoutes = bidirectionalGraph[id];
var pushbackRoutes = noPushbackGraph[id];
if (Object.keys(pushbackRoutes).length < 1)
return { id: id, message: check_msg.PUSHBACK_NOT_CONNECTED }
}).filter(n => n !== undefined);
this.postMessage(['progress', 1]);
var multipleTaxiRoutes = pushbackNodes.map(
id => {
var normalRoutes = bidirectionalGraph[id];
var pushbackRoutes = noPushbackGraph[id];
var nonPushbackRoutes = Object.keys(normalRoutes).filter(r => pushbackRoutes[r] === undefined);
if (nonPushbackRoutes.length > 1)
return { id: id, message: check_msg.TO_MANY_PUSHBACK_TAXI_ROUTES }
}).filter(n => n !== undefined);
this.postMessage(['progress', 1]);
var pushbackExitNotBidirectional = pushbackNodes.map(
id => {
var normalRoutes = bidirectionalGraph[id];
var pushbackRoutes = noPushbackGraph[id];
var nonPushbackRoutes = Object.keys(normalRoutes).filter(r => pushbackRoutes[r] === undefined);
if(nonPushbackRoutes.length > 0) {
var returnRoute = Object.keys(bidirectionalGraph[nonPushbackRoutes[0]]).map(id => Number(id)).filter(retId =>id === retId);
if (returnRoute.length === 0)
return { id: id, message: check_msg.PUSHBACK_EXIT_NOT_BIDRECTIONAL }
}
}).filter(n => n !== undefined);
this.postMessage(['progress', 1]);
var rogueHoldPoints = pushbackNodes.map(
id => {
var routes = noPushbackGraph[id];
@ -231,9 +259,9 @@ async function checkGroundnet(data) {
*/
}
).filter(n => n !== undefined);
this.postMessage(['progress', 1]);
var wrongPushbackRoutes = parkings.filter(
function (e) {
//debugger;
return this[e] != undefined && this[e].length != 1;
}
, multiplePushbackRoutes).map(
@ -245,26 +273,32 @@ async function checkGroundnet(data) {
return { id: id, message: check_msg.MULTIPLE_PUSHBACK }
}
);
//wrongPushbackRoutes = wrongPushbackRoutes.concat(multiplePushbackRoutes);
this.postMessage(['progress', 1]);
okNodes = okNodes.filter((v, i) => okNodes.indexOf(v) === i);
var notOkNodesParkings = parkings.filter(
(v, i) => okNodes.indexOf(v) < 0
).map(
id => { return { id: id, message: check_msg.NO_RUNWAY_ROUTE } }
);
this.postMessage(['progress', 1]);
var notOkNodesRunways = runwayNodeIDs.filter(
(v, i) => okNodes.indexOf(v) < 0
).map(
id => { return { id: id, message: check_msg.NO_RUNWAY_ROUTE } }
);
this.postMessage(['progress', 1]);
if (parkings.length === 0) {
notOkNodes.push({ id: 0, message: check_msg.NO_PARKINGS });
}
this.postMessage(['progress', 1]);
if (runwayNodeIDs.length === 0) {
notOkNodes.push({ id: 0, message: check_msg.NO_RUNWAY_NODES });
}
this.postMessage(['progress', 1]);
var allEnds = Object.entries(bidirectionalGraph).filter(
(v, i) => Object.keys(v[1]).length <= 1
);
@ -275,6 +309,7 @@ async function checkGroundnet(data) {
).map(
v => { return { id: Number(v[0]), message: check_msg.NOT_LEGIT_END } }
);
this.postMessage(['progress', 1]);
var parkingNodes = data.map(mapParkingNode).filter(n => n !== undefined);
@ -293,7 +328,6 @@ async function checkGroundnet(data) {
[parkingNode1.lng, parkingNode1.lat]);
if (d < parkingNode.radius + parkingNode1.radius + 10) {
// If bigger circles intersect we should check the boxes
//debugger;
if (boxes[parkingNode.index] !== null && boxes[parkingNode1.index] !== null &&
boxes[parkingNode.index] !== undefined && boxes[parkingNode1.index] !== undefined) {
var poly1 = turf.polygon([boxes[parkingNode.index]]);
@ -307,26 +341,27 @@ async function checkGroundnet(data) {
}
}
}
this.postMessage(['progress', 1]);
});
});
this.postMessage(['progress', 1]);
var invalidParkings = [];
// Check for name
parkingNodes.forEach(parkingNode => {
if (!parkingNode.name || /^\s*$/.test(parkingNode.name)) {
invalidParkings.push({ id: parkingNode.index, message: check_msg.NAME_EMPTY });
this.postMessage(['progress', 1]);
}
if (!parkingNode.type) {
invalidParkings.push({ id: parkingNode.index, message: check_msg.TYPE_EMPTY });
this.postMessage(['progress', 1]);
}
if (['ga', 'cargo', 'gate', 'mil-fighter', 'mil-cargo'].indexOf(parkingNode.parkingType) < 0) {
//debugger;
invalidParkings.push({ id: parkingNode.index, message: check_msg.PARKING_TYPE_INVALID });
this.postMessage(['progress', 1]);
invalidParkings.push({ id: parkingNode.index, message: check_msg.PARKING_TYPE_INVALID });
}
});
this.postMessage(['progress', 1]);
this.postMessage(['progress', 1]);
//Check for dual pushback/runway nodes
runwayNodeIDs.forEach(runwayNode => {
@ -334,22 +369,22 @@ async function checkGroundnet(data) {
notOkNodes.push({ id: runwayNode, message: check_msg.DUAL_PUSHBACK });
}
});
this.postMessage(['progress', 1]);
//Check if runwaynodes are on runway
runwayNodes.forEach(runwayNode => {
//debugger;
if( runways.filter(r => turf.booleanContains(r, latToTurf(runwayNode))).length === 0 ) {
notOkNodes.push({ id: runwayNode.index, message: check_msg.RUNWAY_NODE_NOT_ON_RUNWAY });
}
});
this.postMessage(['progress', 1]);
//Check if nodes no normal nodes are on runway
// debugger;
normalNodes.forEach(normalNode => {
if( runways.filter(r => turf.booleanContains(r, latToTurf(normalNode))).length > 0 ) {
//debugger;
notOkNodes.push({ id: normalNode.index, message: check_msg.NON_RUNWAYNODE_ON_RUNWAY });
}
});
this.postMessage(['progress', 1]);
notOkNodes = notOkNodes.concat(invalidParkings);
if (invalidParkings.length === 0) {
@ -373,15 +408,17 @@ async function checkGroundnet(data) {
notOkNodes.push({ id: -1, message: check_msg.ROUTES_FROM_RUNWAYS_OK });
}
notOkNodes = notOkNodes.concat(wrongPushbackRoutes);
if (wrongPushbackRoutes.length === 0) {
notOkNodes = notOkNodes.concat(notConnectedToPushback);
notOkNodes = notOkNodes.concat(multipleTaxiRoutes);
notOkNodes = notOkNodes.concat(pushbackExitNotBidirectional);
if (wrongPushbackRoutes.length === 0 &&
notConnectedToPushback.length === 0 &&
multipleTaxiRoutes.length === 0 &&
pushbackExitNotBidirectional.length === 0
) {
notOkNodes.push({ id: -1, message: check_msg.PUSHBACK_ROUTES_OK });
}
// check1(directionalGraph);
// check2();
// this.postMessage(['progress', 1]);
debugger;
resolve(notOkNodes);
} catch (error) {
reject(error);
}

View File

@ -2,9 +2,6 @@
"LONG_ROUTE_START" : ["Start of long route", "Long description"],
"LONG_ROUTE_END": ["End of long route", "Long description"],
"EDGE_MISSING_DIRECTION": ["Edge missing direction", "Long description"],
"UNCONNECTED_PUSHBACK": ["Unconnected Pushbacknode", "Long description"],
"NO_WAY_TO_HOLDPOINT":["No way to pushback holdpoint", "Long description"],
"MULTIPLE_PUSHBACK": ["Multiple connected pushback points", "Long description"],
"NO_RUNWAY_ROUTE": ["No way from parking to each runway", "Long description"],
"NO_PARKING_ROUTE": ["No way from runway to each parking", "Long description"],
"NO_PARKINGS": ["No parkings", "Long description"],
@ -23,5 +20,13 @@
"NO_INVALID_ENDS": ["No invalid ends", "Long description"],
"ROUTES_FROM_PARKINGS_OK": ["Routes from parkings OK", "Long description"],
"ROUTES_FROM_RUNWAYS_OK": ["Routes from runways OK", "Long description"],
"PUSHBACK_ROUTES_OK": ["Pushback routes OK", "Long description"]
"PUSHBACK_ROUTES_OK": ["Pushback routes OK", "Long description"],
"UNCONNECTED_PUSHBACK": ["Unconnected Pushbacknode", "Long description"],
"NO_WAY_TO_HOLDPOINT":["No way to pushback holdpoint", "Long description"],
"MULTIPLE_PUSHBACK": ["Multiple connected pushback points", "Long description"],
"PUSHBACK_NOT_CONNECTED": ["Pushback Holding Point not Connected to Pushback Route", ""],
"TO_MANY_PUSHBACK_TAXI_ROUTES": ["Too many Taxi routes from Pushback Holding Point", ""],
"PUSHBACK_EXIT_NOT_BIDRECTIONAL": ["Pushback Holding Point Exit route is not bidirectional", ""],
"NO_EDGES": ["No Edges", "No checks are run if there are no edges present"],
"NO_RUNWAYS": ["No Runways", "No checks are run if there are no runways present. APT layer visible?"]
}

View File

@ -222,4 +222,7 @@ describe("Test Check", function () {
worker.postMessage(['check', data]);
});
});
describe("", function () {
});
});