diff --git a/src/renderer/components/FlightgearMap.vue b/src/renderer/components/FlightgearMap.vue index 4801d1c..8566317 100644 --- a/src/renderer/components/FlightgearMap.vue +++ b/src/renderer/components/FlightgearMap.vue @@ -11,6 +11,7 @@ + +
+

edit-layer Component

+
+ + + + + diff --git a/src/renderer/components/SettingsPanel.vue b/src/renderer/components/SettingsPanel.vue index d374a97..ce71642 100644 --- a/src/renderer/components/SettingsPanel.vue +++ b/src/renderer/components/SettingsPanel.vue @@ -21,6 +21,18 @@ + + AI Directory + {{ AI_directory }} + + + + + APT File + {{ apt_file }} + + + @@ -53,6 +65,12 @@ flightgear_directory: function () { return this.$store.state.Settings.settings.flightgearDirectory }, + AI_directory: function () { + return this.$store.state.Settings.settings.flightgearDirectory_ai + }, + apt_file: function () { + return this.$store.state.Settings.settings.flightgearDirectory_apt + }, airports_directory: function () { return this.$store.state.Settings.settings.airportsDirectory } diff --git a/src/renderer/loaders/pavement_loader.js b/src/renderer/loaders/pavement_loader.js new file mode 100644 index 0000000..8cea592 --- /dev/null +++ b/src/renderer/loaders/pavement_loader.js @@ -0,0 +1,156 @@ +/* eslint-disable */ +const lineReader = require('readline'); +const zlib = require('zlib'); +const turf = require('@turf/turf'); +const fs = require('fs'); + +module.exports.readPavement = function (f, icao, cb) { + console.log(f); + layerGroup = L.layerGroup(); + var currentFeature; + + lineReader.createInterface({ + input: fs.createReadStream(f).pipe(zlib.createGunzip()) + }).on('line', function (line) { + var fields = line.split(/[ ]+/); + // var fields = line.match('([0-9]+)'); + if (fields == null) + return; + var scanMethod = scanMethods[fields[0]]; + if (scanMethod != null) { + currentFeature = scanMethod(fields, icao, layerGroup, currentFeature); + } + else { + if (fields[0] == '99') { + lineReader.close(); + } + // console.log('Ignored:', line); + } + }).on('error', function (err) { + console.log(err); + lr.close(); + }).on('close', function () { + console.log("End"); + cb(layerGroup); + }); +} + +module.exports.isScanning = false; + + +var scanMethods = { + 1: (line, icao) => { + console.log('Airport:', line); + if (line[4]===icao){ + module.exports.isScanning = true; + } else { + module.exports.isScanning = false; + } + }, + // Runway + 100: (line, icao, layerGroup) => { + if (module.exports.isScanning) { + console.log('Runway ', line ); + var point1 = turf.point([line[9], line[10]]); + var point2 = turf.point([line[18], line[19]]); + + var runwayPoints = []; + + var bearing = turf.bearing(point1, point2); + var runwayEnd1 = [line[9], line[10]]; + var runwayEnd2 = [line[18], line[19]]; + var runwayWidth = Number(line[1])/1000; + var destination = turf.destination(point1, runwayWidth/2, bearing, {}); + + runwayPoints.push(turf.destination(point1, runwayWidth/2, bearing+90, {})); + runwayPoints.push(turf.destination(point2, runwayWidth/2, bearing+90, {})); + runwayPoints.push(turf.destination(point2, runwayWidth/2, bearing-90, {})); + runwayPoints.push(turf.destination(point1, runwayWidth/2, bearing-90, {})); + + runwayPoints = runwayPoints.map(p => p.geometry.coordinates); + + var runwayPoly = new L.Polygon(runwayPoints); + runwayPoly.setStyle({color: 'grey'}); + runwayPoly.addTo(layerGroup); + + console.log(turf.bearing(point1, point2), turf.bearing(point2, point1)); + console.log(runwayEnd1, runwayEnd2); + + + // var end = turf.destination([start.lat, start.lng], this.attributes.radius / 1000, this.attributes.heading - 180, options); + + } + }, + // Pavement + 110: (line, icao, layerGroup, currentFeature) => { + if (!module.exports.isScanning) + return undefined; + if(typeof currentFeature !== 'undefined') + { + var taxiwayPoly = new L.Polygon(currentFeature); + taxiwayPoly.setStyle({color: 'grey'}); + taxiwayPoly.addTo(layerGroup); + } + return [[]]; + }, + 120: (line, icao, layerGroup, currentFeature) => { + if (!module.exports.isScanning) + return undefined; + return [[]]; + }, + 130: (line, icao, layerGroup, currentFeature) => { + if (!module.exports.isScanning) + return undefined; + return [[]]; + }, + 111: (line, icao, layerGroup, currentFeature) => { + if (!module.exports.isScanning) + return; + console.log(line); + currentFeature.slice(-1)[0].push([line[1], line[2]]); + return currentFeature; + }, + 112: (line, icao, layerGroup, currentFeature) => { + if (!module.exports.isScanning) + return; + console.log(line); + currentFeature.slice(-1)[0].push([line[1], line[2]]); + return currentFeature; + }, + 113: (line, icao, layerGroup, currentFeature) => { + if (!module.exports.isScanning) + return; + currentFeature.slice(-1)[0].push([line[1], line[2]]); + currentFeature.push([]); + return currentFeature; + }, + 114: (line, icao, layerGroup, currentFeature) => { + if (!module.exports.isScanning) + return; + currentFeature.slice(-1)[0].push([line[1], line[2]]); + currentFeature.push([]); + return currentFeature; + }, + 115: (line, icao, layerGroup, currentFeature) => { + if (!module.exports.isScanning) + return; + currentFeature.slice(-1)[0].push([line[1], line[2]]); + var taxiwayLine = new L.Polyline(currentFeature); + taxiwayLine.setStyle({color: 'red'}); + // taxiwayLine.addTo(layerGroup); + }, + 116: (line, icao, layerGroup, currentFeature) => { + if (!module.exports.isScanning) + return; + currentFeature.slice(-1)[0].push([line[1], line[2]]); + var taxiwayLine = new L.Polyline(currentFeature); + taxiwayLine.setStyle({color: 'red'}); + // taxiwayLine.addTo(layerGroup); + }, + 99: (l) => { + console.log('Finished'); + } +} + + + diff --git a/src/renderer/store/modules/Settings.js b/src/renderer/store/modules/Settings.js index b31e847..f09852e 100644 --- a/src/renderer/store/modules/Settings.js +++ b/src/renderer/store/modules/Settings.js @@ -9,6 +9,8 @@ const mutations = { 'DELETE_INDEXED_DB' () { }, 'FLIGHTGEAR_DIRECTORY' (state, flightgearDirectory) { state.settings.flightgearDirectory = flightgearDirectory + state.settings.flightgearDirectory_ai = flightgearDirectory + '/data/AI' + state.settings.flightgearDirectory_apt = flightgearDirectory + '/data/Airports/apt.dat.gz' }, 'AIPORTS_DIRECTORY' (state, airportsDirectory) { state.settings.airportsDirectory = airportsDirectory