portree_kid 4 years ago
parent 9fe7322c7b
commit 6770b52f89

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

@ -2,9 +2,6 @@
"LONG_ROUTE_START" : ["Start of long route", "Long description"], "LONG_ROUTE_START" : ["Start of long route", "Long description"],
"LONG_ROUTE_END": ["End of long route", "Long description"], "LONG_ROUTE_END": ["End of long route", "Long description"],
"EDGE_MISSING_DIRECTION": ["Edge missing direction", "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_RUNWAY_ROUTE": ["No way from parking to each runway", "Long description"],
"NO_PARKING_ROUTE": ["No way from runway to each parking", "Long description"], "NO_PARKING_ROUTE": ["No way from runway to each parking", "Long description"],
"NO_PARKINGS": ["No parkings", "Long description"], "NO_PARKINGS": ["No parkings", "Long description"],
@ -23,5 +20,13 @@
"NO_INVALID_ENDS": ["No invalid ends", "Long description"], "NO_INVALID_ENDS": ["No invalid ends", "Long description"],
"ROUTES_FROM_PARKINGS_OK": ["Routes from parkings OK", "Long description"], "ROUTES_FROM_PARKINGS_OK": ["Routes from parkings OK", "Long description"],
"ROUTES_FROM_RUNWAYS_OK": ["Routes from runways 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?"]
} }

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