From 3416333b42dca5937a116fc893423bb22622be4c Mon Sep 17 00:00:00 2001 From: portree_kid Date: Sat, 4 Jul 2020 08:24:58 +0200 Subject: [PATCH] Box check --- package-lock.json | 101 +++++++++++++++++++++++++--- package.json | 9 ++- src/renderer/components/EditBar.vue | 8 ++- src/renderer/loaders/ParkingSpot.js | 5 +- src/renderer/utils/check.js | 40 +++++++++-- 5 files changed, 145 insertions(+), 18 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2ed0be7..ee5e6b4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "flightgear-airports", - "version": "0.0.12", + "version": "0.0.16", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -667,6 +667,20 @@ "@turf/helpers": "^5.1.5", "@turf/intersect": "^5.1.5", "@turf/invariant": "^5.1.5" + }, + "dependencies": { + "@turf/intersect": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-5.1.6.tgz", + "integrity": "sha512-KXyNv/GXdoGAOy03qZF53rgtXC2tNhF/4jLwTKiVRrBQH6kcEpipGStdJ+QkYIlarQPa8f7I9UlVAB19et4MfQ==", + "requires": { + "@turf/clean-coords": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/truncate": "^5.1.5", + "turf-jsts": "*" + } + } } }, "@turf/interpolate": { @@ -688,15 +702,28 @@ } }, "@turf/intersect": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-5.1.6.tgz", - "integrity": "sha512-KXyNv/GXdoGAOy03qZF53rgtXC2tNhF/4jLwTKiVRrBQH6kcEpipGStdJ+QkYIlarQPa8f7I9UlVAB19et4MfQ==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-6.1.3.tgz", + "integrity": "sha512-SeAJG/zPRRTeyK2OifkPoyLq60q8tv8prpPIH3R8ZhyF4MdLOnMv5MURaQ6kQd+3UTDrL+pYm6rqbPvln1zqIw==", "requires": { - "@turf/clean-coords": "^5.1.5", - "@turf/helpers": "^5.1.5", - "@turf/invariant": "^5.1.5", - "@turf/truncate": "^5.1.5", - "turf-jsts": "*" + "@turf/helpers": "6.x", + "@turf/invariant": "6.x", + "martinez-polygon-clipping": "^0.4.3" + }, + "dependencies": { + "@turf/helpers": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.1.4.tgz", + "integrity": "sha512-vJvrdOZy1ngC7r3MDA7zIGSoIgyrkWcGnNIEaqn/APmw+bVLF2gAW7HIsdTxd12s5wQMqEpqIQrmrbRRZ0xC7g==" + }, + "@turf/invariant": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.1.2.tgz", + "integrity": "sha512-WU08Ph8j0J2jVGlQCKChXoCtI50BB3yEH21V++V0T4cR1T27HKCxkehV2sYMwTierfMBgjwSwDIsxnR4/2mWXg==", + "requires": { + "@turf/helpers": "6.x" + } + } } }, "@turf/invariant": { @@ -1259,6 +1286,20 @@ "@turf/helpers": "^5.1.5", "@turf/intersect": "^5.1.5", "@turf/invariant": "^5.1.5" + }, + "dependencies": { + "@turf/intersect": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-5.1.6.tgz", + "integrity": "sha512-KXyNv/GXdoGAOy03qZF53rgtXC2tNhF/4jLwTKiVRrBQH6kcEpipGStdJ+QkYIlarQPa8f7I9UlVAB19et4MfQ==", + "requires": { + "@turf/clean-coords": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/truncate": "^5.1.5", + "turf-jsts": "*" + } + } } }, "@turf/standard-deviational-ellipse": { @@ -1355,6 +1396,20 @@ "@turf/helpers": "^5.1.5", "@turf/intersect": "^5.1.5", "@turf/invariant": "^5.1.5" + }, + "dependencies": { + "@turf/intersect": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-5.1.6.tgz", + "integrity": "sha512-KXyNv/GXdoGAOy03qZF53rgtXC2tNhF/4jLwTKiVRrBQH6kcEpipGStdJ+QkYIlarQPa8f7I9UlVAB19et4MfQ==", + "requires": { + "@turf/clean-coords": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/truncate": "^5.1.5", + "turf-jsts": "*" + } + } } }, "@turf/truncate": { @@ -1471,6 +1526,20 @@ "@turf/union": "5.1.x", "@turf/unkink-polygon": "5.1.x", "@turf/voronoi": "5.1.x" + }, + "dependencies": { + "@turf/intersect": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-5.1.6.tgz", + "integrity": "sha512-KXyNv/GXdoGAOy03qZF53rgtXC2tNhF/4jLwTKiVRrBQH6kcEpipGStdJ+QkYIlarQPa8f7I9UlVAB19et4MfQ==", + "requires": { + "@turf/clean-coords": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/truncate": "^5.1.5", + "turf-jsts": "*" + } + } } }, "@turf/union": { @@ -12301,6 +12370,15 @@ "object-visit": "^1.0.0" } }, + "martinez-polygon-clipping": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/martinez-polygon-clipping/-/martinez-polygon-clipping-0.4.3.tgz", + "integrity": "sha512-3ZNS0ksKhWTLsmCUkNf+/UimndZ5U2cVOS0I+IjiwF+M23E77TmeOZSmbRJbfCoQUog/vcQ42s3DXrhgOhgPqw==", + "requires": { + "splaytree": "^0.1.4", + "tinyqueue": "^1.2.0" + } + }, "math-expression-evaluator": { "version": "1.2.17", "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", @@ -16824,6 +16902,11 @@ "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", "dev": true }, + "splaytree": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-0.1.4.tgz", + "integrity": "sha512-D50hKrjZgBzqD3FT2Ek53f2dcDLAQT8SSGrzj3vidNH5ISRgceeGVJ2dQIthKOuayqFXfFjXheHNo4bbt9LhRQ==" + }, "split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", diff --git a/package.json b/package.json index 82444e1..2510ae8 100644 --- a/package.json +++ b/package.json @@ -42,8 +42,14 @@ "filter": [ "**/dijkstra.js" ] + }, + { + "from": "node_modules/@turf", + "to": "workers/node_modules/@turf", + "filter": [ + "**" + ] } - ], "files": [ "dist/electron/**/*" @@ -79,6 +85,7 @@ } }, "dependencies": { + "@turf/intersect": "^6.1.3", "@turf/turf": "^5.1.6", "axios": "^0.18.1", "coordinate-parser": "^1.0.3", diff --git a/src/renderer/components/EditBar.vue b/src/renderer/components/EditBar.vue index f6703fe..f50e2f7 100644 --- a/src/renderer/components/EditBar.vue +++ b/src/renderer/components/EditBar.vue @@ -242,6 +242,10 @@ You should have received a copy of the GNU General Public License along with FG }, featuresMapper(o) { if (o instanceof L.ParkingSpot) { + /* + if( o.box === undefined ) { + debugger; + } */ return { 'index': Number(o['id']), '_leaflet_id': o._leaflet_id, 'type': 'parking', @@ -249,7 +253,9 @@ You should have received a copy of the GNU General Public License along with FG 'name': o.options.attributes.name, 'radius': String(o.options.attributes.radius), 'lat': o._latlng.lat, - 'lng': o._latlng.lng }; + 'lng': o._latlng.lng, + 'box': o.box!==undefined?o.box.getLatLngs():null + }; } else if (o instanceof L.RunwayNode) { console.log(o) return { 'index': Number(o['glueindex']), '_leaflet_id': o._leaflet_id, 'type': 'runway' }; diff --git a/src/renderer/loaders/ParkingSpot.js b/src/renderer/loaders/ParkingSpot.js index 06b8200..ebb5e3d 100644 --- a/src/renderer/loaders/ParkingSpot.js +++ b/src/renderer/loaders/ParkingSpot.js @@ -41,7 +41,10 @@ L.ParkingSpot = L.Circle.extend({ this.frontWheel.addTo(this.editor.editLayer); this.updateWheelPos(); this.updateBox(); - this.setStyle({ opacity: 0, fill: false }); + const parkingSize = validRadii.indexOf(this.options.attributes.radius); + if(parkingSize>=0) { + this.setStyle({ opacity: 0, fill: false }); + } } }, updateMiddleMarker: function() { diff --git a/src/renderer/utils/check.js b/src/renderer/utils/check.js index ba1e585..aa53f1a 100644 --- a/src/renderer/utils/check.js +++ b/src/renderer/utils/check.js @@ -5,11 +5,15 @@ const winURL = process.env.NODE_ENV === 'development' var path = require('path'); const fs = require('fs'); +//debugger; +var turf; if(process.env.NODE_ENV === 'development') { importScripts('../../../node_modules/dijkstrajs/dijkstra.js'); + turf = require('../../../../../@turf/turf'); } else { importScripts('dijkstra.js'); + turf = require('@turf/turf') } const homedir = require('os').homedir(); @@ -47,10 +51,19 @@ async function checkGroundnet(data) { var runwayNodes = data.map(mapRunwayNodes).filter(n => n !== undefined); var pushbackNodes = data.map(mapPushbackNodes).filter(n => n !== undefined); var edges = data.map(mapEdges).filter(n => n !== undefined); + this.max = 4 * parkings.length * runwayNodes.length + 3 * parkings.length; this.postMessage(['max', this.max]); + var boxes = {}; + //debugger; + data.forEach(element => { + if(element.box!==undefined && element.box!==null) { + boxes[element.index] = element.box[0].map(latlng => [latlng.lat, latlng.lng] ); + boxes[element.index].push(boxes[element.index][0]); + } + }); var graph = {}; parkings.forEach(element => { graph[element] = {}; @@ -87,7 +100,7 @@ async function checkGroundnet(data) { } return Object.keys(graph[v]).filter( v => runwayNodes[v]).length === 0; } - debugger; + //debugger; runwayNodes = runwayNodes.filter( (v, i) => isLegitEnd(v) ); @@ -220,8 +233,17 @@ async function checkGroundnet(data) { if (parkingNode.index !== parkingNode1.index) { var d = distance([parkingNode.lng, parkingNode.lat], [parkingNode1.lng, parkingNode1.lat]); - if (d < parkingNode.radius + parkingNode1.radius) { - overlappingParkings.push({ id: parkingNode.index, message: 'Overlapping parkings' }); + if (d < parkingNode.radius + parkingNode1.radius + 10) { + // If bigger circles intersect we should check the boxes + //debugger; + var poly1 = turf.polygon([boxes[parkingNode.index]]); + + var poly2 = turf.polygon([boxes[parkingNode1.index]]); + + var intersection = turf.intersect(poly1, poly2); + if( intersection !== null ) { + overlappingParkings.push({ id: parkingNode.index, message: 'Overlapping parkings' }); + } } } this.postMessage(['progress', 1]); @@ -338,13 +360,19 @@ var mapParkingNode = function (o) { // debugger; if (o.type === 'parking') return { index: o.index, lat: o.lat, lng: o.lng, name: o.name, radius: Number(o.radius), type: o.type, parkingType: o.parkingType }; - console.log(o); + console.debug(o); +} + +var mapBoxes = function (o) { + // debugger; + if (o.type === 'parking') + return { index: o.index }; } var mapRunwayNodes = function (o) { if (o.type === 'runway') return o.index; - console.log(o); + console.debug(o); } var mapEdges = function (o) { @@ -354,5 +382,5 @@ var mapEdges = function (o) { start: o.start, end: o.end, isPushBackRoute: o.isPushBackRoute !== undefined && o.isPushBackRoute !== 0, latLngs: o.latLngs }; - console.log(o); + console.debug(o); }