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 @@
+
+
+
+
+
+
+
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