diff --git a/_locales/en/messages.json b/_locales/en/messages.json
index 68a4d78a..a8cf5434 100755
--- a/_locales/en/messages.json
+++ b/_locales/en/messages.json
@@ -2319,5 +2319,29 @@
},
"downloadUpdatesBtn": {
"message": "Download new app"
+ },
+ "tabMissionControl": {
+ "message": "Mission Control"
+ },
+ "loadMissionButton": {
+ "message": "Load mission"
+ },
+ "saveMissionButton": {
+ "message": "Save mission"
+ },
+ "editPointHead": {
+ "message": "Edit point"
+ },
+ "editPointButtonSave": {
+ "message": "Save"
+ },
+ "editPointButtonRemove": {
+ "message": "Remove"
+ },
+ "removeAllPointButtonSave": {
+ "message": "Remove all points"
+ },
+ "missionTotalInformationHead": {
+ "message": "Total information"
}
}
diff --git a/js/gui.js b/js/gui.js
index 3028577d..a1ce5d8b 100644
--- a/js/gui.js
+++ b/js/gui.js
@@ -38,7 +38,8 @@ var GUI_control = function () {
'setup',
'osd',
'profiles',
- 'advanced_tuning'
+ 'advanced_tuning',
+ 'mission_control'
];
this.allowedTabs = this.defaultAllowedTabsWhenDisconnected;
diff --git a/main.html b/main.html
index f989e0c4..651e8cd5 100755
--- a/main.html
+++ b/main.html
@@ -1,9 +1,11 @@
-
+
+
+
@@ -14,7 +16,8 @@
@@ -185,6 +188,7 @@
+
@@ -199,7 +203,6 @@
title="Onboard Logging">
-
diff --git a/main.js b/main.js
index 8dcbb28c..6d2d6789 100644
--- a/main.js
+++ b/main.js
@@ -189,6 +189,9 @@ $(document).ready(function () {
case 'gps':
TABS.gps.initialize(content_ready);
break;
+ case 'mission_control':
+ TABS.mission_control.initialize(content_ready);
+ break;
case 'motors':
TABS.motors.initialize(content_ready);
break;
diff --git a/package-lock.json b/package-lock.json
index d5346a6a..979d93f8 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,26 +1,13 @@
{
"name": "inav-configurator",
- "version": "1.7.3",
+ "version": "1.8.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
- "@mapbox/point-geometry": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
- "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI="
- },
- "@mapbox/vector-tile": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.0.tgz",
- "integrity": "sha1-xJX5clJb78zvzYOPRf+jfvO3D+g=",
- "requires": {
- "@mapbox/point-geometry": "0.1.0"
- }
- },
"abbrev": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
- "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
},
"accepts": {
"version": "1.3.3",
@@ -32,9 +19,9 @@
}
},
"acorn": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz",
- "integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0="
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.2.1.tgz",
+ "integrity": "sha512-jG0u7c4Ly+3QkkW18V+NRDN+4bWHdln30NL1ZL2AvFZZmQe/BfopYCtghCKKVBUSetZ4QKcyA0pY6/4Gw8Pv8w=="
},
"after": {
"version": "0.8.2",
@@ -118,9 +105,9 @@
"integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8="
},
"aproba": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.2.tgz",
- "integrity": "sha512-ZpYajIfO0j2cOFTO955KUMIKNmj6zhX8kVztMAxFsDaMwz+9Z9SV0uou2pC9HJqcfpffOsjnbrDMvkNy+9RXPw=="
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
+ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
},
"archiver": {
"version": "2.0.3",
@@ -212,9 +199,9 @@
"integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
},
"arraybuffer.slice": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz",
- "integrity": "sha1-8zshWfBTKj8xB6JywMz70a0peco="
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz",
+ "integrity": "sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog=="
},
"asn1": {
"version": "0.2.3",
@@ -234,6 +221,11 @@
"lodash": "4.17.4"
}
},
+ "async-limiter": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",
+ "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -250,9 +242,9 @@
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
},
"babylon": {
- "version": "7.0.0-beta.24",
- "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.24.tgz",
- "integrity": "sha512-k1yiJYz1Zt6/xfxx0OC7obTNOF5WktZ8P8z1y+7kwP4INOygqqgzolO5fse4jYIb3CzHyU7WNC38EjYa1wjEGQ=="
+ "version": "7.0.0-beta.19",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.19.tgz",
+ "integrity": "sha512-Vg0C9s/REX6/WIXN37UKpv5ZhRi6A4pjHlpkE34+8/a6c2W1Q692n3hmc+SZG5lKRnaExLUbxtJ1SVT+KaCQ/A=="
},
"backo2": {
"version": "1.0.2",
@@ -612,36 +604,44 @@
}
},
"closure-util": {
- "version": "1.22.0",
- "resolved": "https://registry.npmjs.org/closure-util/-/closure-util-1.22.0.tgz",
- "integrity": "sha512-DX5IhSawO9838/fKNaH3Cx8jeeJGWORodHhTFkxCOVsr71OtXCfo/rtXsV24eq3iq31jdmgUQvlNIXEMHTlkWg==",
+ "version": "1.26.0",
+ "resolved": "https://registry.npmjs.org/closure-util/-/closure-util-1.26.0.tgz",
+ "integrity": "sha512-zpWABEochWrY48soiEttuqJk/OSYscS9PcvKgHvKUefM29+R8rqx5Bp8KIZHR0Nsq1JrNgxg2VTmJ/IsqN5VOA==",
"requires": {
- "acorn": "5.0.3",
- "async": "2.5.0",
- "fs-extra": "3.0.1",
+ "acorn": "5.2.1",
+ "async": "2.6.0",
+ "fs-extra": "4.0.2",
"gaze": "1.1.2",
"get-down": "1.2.0",
"glob": "7.1.2",
"graceful-fs": "4.1.11",
- "handlebars": "4.0.10",
+ "handlebars": "4.0.11",
"lodash": "4.17.4",
"minimatch": "3.0.4",
"mkdirp": "0.5.1",
"nomnom": "1.8.1",
"npmlog": "4.1.2",
- "rimraf": "2.6.1",
- "send": "0.15.3",
- "socket.io": "2.0.1",
+ "rimraf": "2.6.2",
+ "send": "0.16.1",
+ "socket.io": "2.0.4",
"temp": "github:adam-lynch/node-temp#279c1350cb7e4f02515d91da9e35d39a40774016"
},
"dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
"fs-extra": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
- "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz",
+ "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=",
"requires": {
"graceful-fs": "4.1.11",
- "jsonfile": "3.0.1",
+ "jsonfile": "4.0.0",
"universalify": "0.1.1"
}
},
@@ -664,12 +664,20 @@
}
},
"jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": {
"graceful-fs": "4.1.11"
}
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "requires": {
+ "glob": "7.1.2"
+ }
}
}
},
@@ -1572,23 +1580,23 @@
}
},
"engine.io": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.1.tgz",
- "integrity": "sha1-CAUf+5UZB6MmfnLgvLPQ83fkZgs=",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-3.1.4.tgz",
+ "integrity": "sha1-PQIRtwpVLOhB/8fahiezAamkFi4=",
"requires": {
"accepts": "1.3.3",
"base64id": "1.0.0",
"cookie": "0.3.1",
- "debug": "2.6.8",
- "engine.io-parser": "2.1.1",
+ "debug": "2.6.9",
+ "engine.io-parser": "2.1.2",
"uws": "0.14.5",
- "ws": "2.3.1"
+ "ws": "3.3.3"
},
"dependencies": {
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -1601,28 +1609,27 @@
}
},
"engine.io-client": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.1.tgz",
- "integrity": "sha1-QVqYUrrbFPoAj6PvHjFgjbZ2EyU=",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-3.1.4.tgz",
+ "integrity": "sha1-T88TcLRxY70s6b4nM5ckMDUNTqE=",
"requires": {
"component-emitter": "1.2.1",
"component-inherit": "0.0.3",
- "debug": "2.6.8",
- "engine.io-parser": "2.1.1",
+ "debug": "2.6.9",
+ "engine.io-parser": "2.1.2",
"has-cors": "1.1.0",
"indexof": "0.0.1",
- "parsejson": "0.0.3",
"parseqs": "0.0.5",
"parseuri": "0.0.5",
- "ws": "2.3.1",
- "xmlhttprequest-ssl": "1.5.3",
+ "ws": "3.3.3",
+ "xmlhttprequest-ssl": "1.5.4",
"yeast": "0.1.2"
},
"dependencies": {
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -1635,12 +1642,12 @@
}
},
"engine.io-parser": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.1.tgz",
- "integrity": "sha1-4Ps/DgRi9/WLt3waUun1p+JuRmg=",
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-2.1.2.tgz",
+ "integrity": "sha512-dInLFzr80RijZ1rGpx1+56/uFoH7/7InhH3kZt+Ms6hT8tNx3NGW/WNSA/f8As1WkOfkuyb3tnRyuXGxusclMw==",
"requires": {
"after": "0.8.2",
- "arraybuffer.slice": "0.0.6",
+ "arraybuffer.slice": "0.0.7",
"base64-arraybuffer": "0.1.5",
"blob": "0.0.4",
"has-binary2": "1.0.2"
@@ -1927,9 +1934,9 @@
}
},
"fresh": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz",
- "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44="
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
+ "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"fs-exists-sync": {
"version": "0.1.0",
@@ -1958,7 +1965,7 @@
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
"integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"requires": {
- "aproba": "1.1.2",
+ "aproba": "1.2.0",
"console-control-strings": "1.1.0",
"has-unicode": "2.0.1",
"object-assign": "4.1.1",
@@ -2410,9 +2417,9 @@
}
},
"handlebars": {
- "version": "4.0.10",
- "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.10.tgz",
- "integrity": "sha1-PTDHGLCaPZbyPqTMH0A8TTup/08=",
+ "version": "4.0.11",
+ "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.11.tgz",
+ "integrity": "sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw=",
"requires": {
"async": "1.5.2",
"optimist": "0.6.1",
@@ -2880,17 +2887,17 @@
"optional": true
},
"jsdoc": {
- "version": "3.5.4",
- "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.4.tgz",
- "integrity": "sha512-VmTw0J+2L16IxAe0JSDSAcH0F+DbZxaj8wN1AjHtKMQU/hO0ciIl5ZE93XqrrFIbknobuqHKJCXZj6+Hk57MjA==",
+ "version": "3.5.5",
+ "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.5.5.tgz",
+ "integrity": "sha512-6PxB65TAU4WO0Wzyr/4/YhlGovXl0EVYfpKbpSroSj0qBxT4/xod/l40Opkm38dRHRdQgdeY836M0uVnJQG7kg==",
"requires": {
- "babylon": "7.0.0-beta.24",
- "bluebird": "3.5.0",
+ "babylon": "7.0.0-beta.19",
+ "bluebird": "3.5.1",
"catharsis": "0.8.9",
"escape-string-regexp": "1.0.5",
"js2xmlparser": "3.0.0",
"klaw": "2.0.0",
- "marked": "0.3.6",
+ "marked": "0.3.9",
"mkdirp": "0.5.1",
"requizzle": "0.2.1",
"strip-json-comments": "2.0.1",
@@ -2899,9 +2906,9 @@
},
"dependencies": {
"bluebird": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.0.tgz",
- "integrity": "sha1-eRQg1/VR7qKJdFOop3ZT+WYG1nw="
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
},
"klaw": {
"version": "2.0.0",
@@ -3187,7 +3194,7 @@
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.22.4.tgz",
"integrity": "sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw==",
"requires": {
- "vlq": "0.2.2"
+ "vlq": "0.2.3"
}
},
"make-dir": {
@@ -3211,9 +3218,9 @@
"integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8="
},
"marked": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.6.tgz",
- "integrity": "sha1-ssbGGPzOzk74bE/Gy4p8v1rtqNc="
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.9.tgz",
+ "integrity": "sha512-nW5u0dxpXxHfkHzzrveY45gCbi+R4PaO4WRZYqZNl+vB0hVGeqlFn0aOg1c8AKL63TrNFn9Bm2UP4AdiZ9TPLw=="
},
"merge": {
"version": "1.2.0",
@@ -3254,9 +3261,9 @@
}
},
"mime": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz",
- "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM="
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
+ "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
},
"mime-db": {
"version": "1.30.0",
@@ -3300,9 +3307,9 @@
}
},
"minizlib": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.0.3.tgz",
- "integrity": "sha1-1cGr93vhVGGZUuJTM27Mq5sqMvU=",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.1.0.tgz",
+ "integrity": "sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA==",
"requires": {
"minipass": "2.2.1"
}
@@ -3414,7 +3421,7 @@
"resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
"integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
"requires": {
- "abbrev": "1.1.0"
+ "abbrev": "1.1.1"
}
},
"normalize-path": {
@@ -3617,41 +3624,48 @@
}
},
"openlayers": {
- "version": "4.3.3",
- "resolved": "https://registry.npmjs.org/openlayers/-/openlayers-4.3.3.tgz",
- "integrity": "sha512-hFOPwplmgjgCyIrnXoVixtZeZ4mog84xpI9PLoXWiyO7iGmIH3/XxhBPuSLuvrHg+/huoFzA0OckRLvr3T2DAg==",
+ "version": "4.6.4",
+ "resolved": "https://registry.npmjs.org/openlayers/-/openlayers-4.6.4.tgz",
+ "integrity": "sha512-Oru7/xniirjech7H5zkMQSUj/JUymNveiE4vAwmyjAmcoNyO4zTRD/Pp7BPfxBPuAz45vDl78H1wEQD7RGWkGg==",
"requires": {
- "@mapbox/vector-tile": "1.3.0",
- "async": "2.5.0",
- "closure-util": "1.22.0",
- "fs-extra": "4.0.1",
- "jsdoc": "3.5.4",
+ "async": "2.6.0",
+ "closure-util": "1.26.0",
+ "fs-extra": "4.0.3",
+ "jsdoc": "3.5.5",
"nomnom": "1.8.1",
- "pbf": "3.0.5",
+ "pbf": "3.1.0",
"pixelworks": "1.1.0",
"rbush": "2.0.1",
- "rollup": "0.47.6",
- "rollup-plugin-cleanup": "1.0.1",
- "rollup-plugin-commonjs": "8.2.1",
+ "rollup": "0.52.3",
+ "rollup-plugin-cleanup": "2.0.0",
+ "rollup-plugin-commonjs": "8.2.6",
"rollup-plugin-node-resolve": "3.0.0",
"temp": "github:adam-lynch/node-temp#279c1350cb7e4f02515d91da9e35d39a40774016",
"walk": "2.3.9"
},
"dependencies": {
+ "async": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
+ "integrity": "sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw==",
+ "requires": {
+ "lodash": "4.17.4"
+ }
+ },
"fs-extra": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.1.tgz",
- "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=",
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
"requires": {
"graceful-fs": "4.1.11",
- "jsonfile": "3.0.1",
+ "jsonfile": "4.0.0",
"universalify": "0.1.1"
}
},
"jsonfile": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz",
- "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"requires": {
"graceful-fs": "4.1.11"
}
@@ -3836,14 +3850,6 @@
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY="
},
- "parsejson": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/parsejson/-/parsejson-0.0.3.tgz",
- "integrity": "sha1-q343WfIJ7OmUN5c/fQ8fZK4OZKs=",
- "requires": {
- "better-assert": "1.0.2"
- }
- },
"parseqs": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz",
@@ -3899,9 +3905,9 @@
"integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0="
},
"pbf": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.0.5.tgz",
- "integrity": "sha1-JPD6LL6xblxWpZAbt+nCrAyAWb4=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.1.0.tgz",
+ "integrity": "sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w==",
"requires": {
"ieee754": "1.1.8",
"resolve-protobuf-schema": "2.0.0"
@@ -4054,9 +4060,9 @@
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM="
},
"quickselect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.0.0.tgz",
- "integrity": "sha1-AmMIGPmq5OyrJvAQP5jQYcF8WPM="
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-1.0.1.tgz",
+ "integrity": "sha512-Jt30UQSzTbxf6L2bFTMabHtGtYUzQcvOY0a+s5brm8tzndV/XWifBIH9v5QKtH5gGCZ5RRDwRhdhGMDVHAEGNQ=="
},
"randomatic": {
"version": "1.1.7",
@@ -4105,7 +4111,7 @@
"resolved": "https://registry.npmjs.org/rbush/-/rbush-2.0.1.tgz",
"integrity": "sha1-TPrKKMMGS8DudUMaG3mZDode76k=",
"requires": {
- "quickselect": "1.0.0"
+ "quickselect": "1.0.1"
}
},
"rc": {
@@ -4308,14 +4314,14 @@
}
},
"rollup": {
- "version": "0.47.6",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.47.6.tgz",
- "integrity": "sha512-bH3eWh7MzbiKTQcHQN7Ievqbs/yY7T+ZcJYboBYkp7BkRlAr2DXHPfiqlvlEH/M95giEBpinHEi/s9CVIgYT6w=="
+ "version": "0.52.3",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.52.3.tgz",
+ "integrity": "sha512-cw+vb9NqaTXlwJyb8G+Ve+uhhlVTcl1NKBkfANdeQqVcpZFilQgeNnAnNiu7MwfeXrqiKEGz+3R03a3zeFkmEQ=="
},
"rollup-plugin-cleanup": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-1.0.1.tgz",
- "integrity": "sha1-ygVsdP5uoheD+ZhRljsXPL6Ok1k=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-2.0.0.tgz",
+ "integrity": "sha1-hZdzGaO/VHUKnXX7kJx+UfWaLaQ=",
"requires": {
"acorn": "4.0.13",
"magic-string": "0.22.4",
@@ -4330,26 +4336,21 @@
}
},
"rollup-plugin-commonjs": {
- "version": "8.2.1",
- "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.2.1.tgz",
- "integrity": "sha512-ZTwAetmKimCsuWost/+n4FaOpMoczBRTx+kuQaZCIKXTx/R1wNBezuX5NS0vnPKM3hBoErdpAqmNyVSCi5XKbg==",
+ "version": "8.2.6",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-8.2.6.tgz",
+ "integrity": "sha512-qK0+uhktmnAgZkHkqFuajNmPw93fjrO7+CysDaxWE5jrUR9XSlSvuao5ZJP+XizxA8weakhgYYBtbVz9SGBpjA==",
"requires": {
- "acorn": "5.1.2",
- "estree-walker": "0.5.0",
+ "acorn": "5.2.1",
+ "estree-walker": "0.5.1",
"magic-string": "0.22.4",
"resolve": "1.4.0",
"rollup-pluginutils": "2.0.1"
},
"dependencies": {
- "acorn": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.1.2.tgz",
- "integrity": "sha512-o96FZLJBPY1lvTuJylGA9Bk3t/GKPPJG8H0ydQQl01crzwJgspa4AEIq/pVTXigmK0PHVQhiAtn8WMBLL9D2WA=="
- },
"estree-walker": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.0.tgz",
- "integrity": "sha512-/bEAy+yKAZQrEWUhGmS3H9XpGqSDBtRzX0I2PgMw9kA2n1jN22uV5B5p7MFdZdvWdXCRJztXAfx6ZeRfgkEETg=="
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.5.1.tgz",
+ "integrity": "sha512-7HgCgz1axW7w5aOvgOQkoR1RMBkllygJrssU3BvymKQ95lxXYv6Pon17fBRDm9qhkvXZGijOULoSF9ShOk/ZLg=="
}
}
},
@@ -4416,19 +4417,19 @@
}
},
"send": {
- "version": "0.15.3",
- "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz",
- "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=",
+ "version": "0.16.1",
+ "resolved": "https://registry.npmjs.org/send/-/send-0.16.1.tgz",
+ "integrity": "sha512-ElCLJdJIKPk6ux/Hocwhk7NFHpI3pVm/IZOYWqUmoxcgeyM+MpxHHKhb8QmlJDX1pU6WrgaHBkVNm73Sv7uc2A==",
"requires": {
- "debug": "2.6.7",
+ "debug": "2.6.9",
"depd": "1.1.1",
"destroy": "1.0.4",
"encodeurl": "1.0.1",
"escape-html": "1.0.3",
"etag": "1.8.1",
- "fresh": "0.5.0",
+ "fresh": "0.5.2",
"http-errors": "1.6.2",
- "mime": "1.3.4",
+ "mime": "1.4.1",
"ms": "2.0.0",
"on-finished": "2.3.0",
"range-parser": "1.2.0",
@@ -4436,9 +4437,9 @@
},
"dependencies": {
"debug": {
- "version": "2.6.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz",
- "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -4548,22 +4549,21 @@
}
},
"socket.io": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.1.tgz",
- "integrity": "sha1-BkwSUXhGLkd6bfI9L9rRjdHFkU8=",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.0.4.tgz",
+ "integrity": "sha1-waRZDO/4fs8TxyZS8Eb3FrKeYBQ=",
"requires": {
- "debug": "2.6.8",
- "engine.io": "3.1.1",
- "object-assign": "4.1.1",
+ "debug": "2.6.9",
+ "engine.io": "3.1.4",
"socket.io-adapter": "1.1.1",
- "socket.io-client": "2.0.1",
+ "socket.io-client": "2.0.4",
"socket.io-parser": "3.1.2"
},
"dependencies": {
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -4581,36 +4581,37 @@
"integrity": "sha1-KoBeihTWNyEk3ZFZrUUC+MsH8Gs="
},
"socket.io-client": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.1.tgz",
- "integrity": "sha1-HVL4x0Zgxou2aVlT+hGZcRVfrZM=",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.0.4.tgz",
+ "integrity": "sha1-CRilUkBtxeVAs4Dc2Xr8SmQzL44=",
"requires": {
"backo2": "1.0.2",
"base64-arraybuffer": "0.1.5",
"component-bind": "1.0.0",
"component-emitter": "1.2.1",
- "debug": "2.6.4",
- "engine.io-client": "3.1.1",
+ "debug": "2.6.9",
+ "engine.io-client": "3.1.4",
"has-cors": "1.1.0",
"indexof": "0.0.1",
"object-component": "0.0.3",
+ "parseqs": "0.0.5",
"parseuri": "0.0.5",
"socket.io-parser": "3.1.2",
"to-array": "0.1.4"
},
"dependencies": {
"debug": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.4.tgz",
- "integrity": "sha1-dYaps8OXQcAoKuM0RcTorHRzT+A=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
- "ms": "0.7.3"
+ "ms": "2.0.0"
}
},
"ms": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.3.tgz",
- "integrity": "sha1-cIFVpeROM/X9D8U+gdDUCpG+H/8="
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@@ -4620,15 +4621,15 @@
"integrity": "sha1-28IoIVH8T6675Aru3Ady66YZ9/I=",
"requires": {
"component-emitter": "1.2.1",
- "debug": "2.6.8",
+ "debug": "2.6.9",
"has-binary2": "1.0.2",
"isarray": "2.0.1"
},
"dependencies": {
"debug": {
- "version": "2.6.8",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
- "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"requires": {
"ms": "2.0.0"
}
@@ -4845,7 +4846,7 @@
"integrity": "sha512-TKJKz1fqBOZBaIQ/MGRKU0EnTGmKMLy4ReTRgP10AgtfOWBbj9PBg4MgY80GFpqGbs2EzcIctW5gbwbP4woDYg==",
"requires": {
"minipass": "2.2.1",
- "minizlib": "1.0.3",
+ "minizlib": "1.1.0",
"mkdirp": "0.5.1",
"yallist": "3.0.2"
},
@@ -4993,7 +4994,7 @@
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
"integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
"requires": {
- "abbrev": "1.1.0"
+ "abbrev": "1.1.1"
}
}
}
@@ -5099,9 +5100,9 @@
"optional": true
},
"ultron": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.0.tgz",
- "integrity": "sha1-sHoualQagV/Go0zNRTO67DB8qGQ="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og=="
},
"unbzip2-stream": {
"version": "1.2.5",
@@ -5344,9 +5345,9 @@
}
},
"vlq": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.2.tgz",
- "integrity": "sha1-4xbVJXtAuGu0PLjV/qXX9U1rDKE="
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/vlq/-/vlq-0.2.3.tgz",
+ "integrity": "sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow=="
},
"walk": {
"version": "2.3.9",
@@ -5425,19 +5426,13 @@
}
},
"ws": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/ws/-/ws-2.3.1.tgz",
- "integrity": "sha1-a5Sz5EfLajY/eF6vlK9jWejoHIA=",
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
"requires": {
- "safe-buffer": "5.0.1",
- "ultron": "1.1.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
- "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c="
- }
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
}
},
"xdg-basedir": {
@@ -5464,9 +5459,9 @@
"integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk="
},
"xmlhttprequest-ssl": {
- "version": "1.5.3",
- "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.3.tgz",
- "integrity": "sha1-GFqIjATspGw+QHDZn3tJ3jUomS0="
+ "version": "1.5.4",
+ "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz",
+ "integrity": "sha1-BPVgkVcks4kIhxXMDteBPpZ3v1c="
},
"xtend": {
"version": "4.0.1",
diff --git a/package.json b/package.json
index 2b5ae60f..ca6ef0c2 100755
--- a/package.json
+++ b/package.json
@@ -31,7 +31,7 @@
"jquery-ui-npm": "1.12.0",
"nw": "^0.25.4-sdk",
"nw-builder": "^3.4.1",
- "openlayers": "^4.3.3",
+ "openlayers": "^4.6.4",
"run-sequence": "^2.2.0",
"temp": "^0.8.3",
"three": "0.72.0"
diff --git a/src/css/tabs/mission_planer.css b/src/css/tabs/mission_planer.css
new file mode 100644
index 00000000..132f2b3d
--- /dev/null
+++ b/src/css/tabs/mission_planer.css
@@ -0,0 +1,65 @@
+.tab-calibration .content_toolbar {
+ height: 100px;
+}
+
+.tab-mission-control .waypoint {
+ padding-left: 19px;
+ padding-right: 19px;
+ padding-bottom: 10px;
+}
+.tab-mission-control .waypoint-left {
+ width: 54%;
+ float: left;
+ padding-right: 5px;
+}
+.tab-mission-control .waypoint-right{
+ width: 40%;
+ float: right;
+}
+
+.tab-mission-control .content_wrapper {
+ height: calc(100% - 150px);
+}
+
+.tab-mission-control .content_toolbar {
+ height: 150px;
+}
+
+.tab-mission-control input {
+ width: 157px;
+ padding-left: 3px;
+ height: 20px;
+ line-height: 20px;
+ text-align: left;
+ border: 1px solid silver;
+ border-radius: 3px;
+ margin-left: 11px;
+ font-size: 12px;
+ font-weight: normal;
+}
+
+.tab-mission-control .point {
+ display: inline-block;
+ margin-bottom: 5px;
+}
+
+.tab-mission-control .point-label {
+
+}
+
+@media (max-width: 1236px) {
+ .tab-mission-control .waypoint-left {
+ width: 96%;
+ }
+ .tab-mission-control .waypoint-right{
+ width: 96%;
+ float: left;
+ padding-right: 19px;
+ }
+ .tab-mission-control .content_toolbar {
+ height: 240px;
+ }
+ .tab-mission-control .content_wrapper {
+ height: calc(100% - 240px);
+ }
+}
\ No newline at end of file
diff --git a/tabs/mission_control.html b/tabs/mission_control.html
new file mode 100644
index 00000000..ea8f18ed
--- /dev/null
+++ b/tabs/mission_control.html
@@ -0,0 +1,61 @@
+
diff --git a/tabs/mission_control.js b/tabs/mission_control.js
new file mode 100644
index 00000000..d9c75eeb
--- /dev/null
+++ b/tabs/mission_control.js
@@ -0,0 +1,356 @@
+'use strict';
+
+TABS.mission_control = {};
+TABS.mission_control.isYmapLoad = false;
+TABS.mission_control.initialize = function (callback) {
+
+ if (GUI.active_tab != 'mission_control') {
+ GUI.active_tab = 'mission_control';
+ googleAnalytics.sendAppView('Mission Control');
+ }
+
+ function load_html() {
+ $('#content').load("./tabs/mission_control.html", process_html);
+ }
+
+ load_html();
+
+ function process_html() {
+ initMap();
+ localize();
+
+ GUI.content_ready(callback);
+ }
+
+ var markers = [];
+ var lines = [];
+ var map;
+ var selectedMarker;
+
+ function clearEditForm() {
+ $('#pointLat').val('');
+ $('#pointLon').val('');
+ $('#pointAlt').val('');
+ $('[name=pointNumber]').val('')
+ }
+
+ function repaint() {
+ var oldPos;
+ for (var i in lines) {
+ map.removeLayer(lines[i]);
+ }
+ lines = [];
+ $('#missionDistance').text(0);
+
+ map.getLayers().forEach(function (t) {
+ //feature.getGeometry().getType()
+ if (t instanceof ol.layer.Vector && typeof t.alt !== 'undefined') {
+ var geometry = t.getSource().getFeatures()[0].getGeometry();
+ if (typeof oldPos !== 'undefined') {
+ paintLine(oldPos, geometry.getCoordinates());
+ }
+
+ oldPos = geometry.getCoordinates();
+ }
+ });
+ }
+
+ function paintLine(pos1, pos2) {
+ var line = new ol.geom.LineString([pos1, pos2]);
+
+ var feature = new ol.Feature({
+ geometry: line
+ });
+ feature.setStyle(new ol.style.Style({
+ stroke: new ol.style.Stroke({
+ color: '#1497f1',
+ width: 3
+ })
+ }));
+
+ var vectorSource = new ol.source.Vector({
+ features: [feature]
+ });
+
+ var vectorLayer = new ol.layer.Vector({
+ source: vectorSource
+ });
+
+ lines.push(vectorLayer);
+
+ var length = ol.Sphere.getLength(line) + parseFloat($('#missionDistance').text());
+ $('#missionDistance').text(length.toFixed(3));
+
+ map.addLayer(vectorLayer);
+ }
+
+ function addMarker(pos) {
+ var iconFeature = new ol.Feature({
+ geometry: new ol.geom.Point(pos),
+ name: 'Null Island',
+ population: 4000,
+ rainfall: 500
+ });
+
+ var iconStyle = new ol.style.Style({
+ image: new ol.style.Icon(({
+ anchor: [0.5, 1],
+ opacity: 1,
+ scale: 0.5,
+ src: '../images/icons/cf_icon_position.png'
+ }))
+// text: new ol.style.Text({
+// text: '10',
+// offsetX: -1,
+// offsetY: -30,
+// overflow: true,
+// scale: 2,
+// fill: new ol.style.Fill({
+// color: 'black'
+// })
+// })
+ });
+
+ iconFeature.setStyle(iconStyle);
+
+ var vectorSource = new ol.source.Vector({
+ features: [iconFeature]
+ });
+
+ var vectorLayer = new ol.layer.Vector({
+ source: vectorSource
+ });
+
+ vectorLayer.alt = 0;
+ vectorLayer.number = markers.length;
+
+ markers.push(vectorLayer);
+
+ return vectorLayer;
+ }
+
+ function initMap() {
+ // var center = ol.proj.fromLonLat([e.data.lon, e.data.lat]);
+ //
+ // mapView.setCenter(center);
+ // iconGeometry.setCoordinates(center);
+
+ var app = {};
+
+ /**
+ * @constructor
+ * @extends {ol.interaction.Pointer}
+ */
+ app.Drag = function () {
+
+ ol.interaction.Pointer.call(this, {
+ handleDownEvent: app.Drag.prototype.handleDownEvent,
+ handleDragEvent: app.Drag.prototype.handleDragEvent,
+ handleMoveEvent: app.Drag.prototype.handleMoveEvent,
+ handleUpEvent: app.Drag.prototype.handleUpEvent
+ });
+
+ /**
+ * @type {ol.Pixel}
+ * @private
+ */
+ this.coordinate_ = null;
+
+ /**
+ * @type {string|undefined}
+ * @private
+ */
+ this.cursor_ = 'pointer';
+
+ /**
+ * @type {ol.Feature}
+ * @private
+ */
+ this.feature_ = null;
+
+ /**
+ * @type {string|undefined}
+ * @private
+ */
+ this.previousCursor_ = undefined;
+
+ };
+ ol.inherits(app.Drag, ol.interaction.Pointer);
+
+
+ /**
+ * @param {ol.MapBrowserEvent} evt Map browser event.
+ * @return {boolean} `true` to start the drag sequence.
+ */
+ app.Drag.prototype.handleDownEvent = function (evt) {
+ var map = evt.map;
+
+ var feature = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return feature;
+ });
+
+ if (feature) {
+ this.coordinate_ = evt.coordinate;
+ this.feature_ = feature;
+ }
+
+ return !!feature;
+ };
+
+ /**
+ * @param {ol.MapBrowserEvent} evt Map browser event.
+ */
+ app.Drag.prototype.handleDragEvent = function (evt) {
+ var map = evt.map;
+
+ var feature = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return feature;
+ });
+
+ var deltaX = evt.coordinate[0] - this.coordinate_[0];
+ var deltaY = evt.coordinate[1] - this.coordinate_[1];
+
+ var geometry = /** @type {ol.geom.SimpleGeometry} */
+ (this.feature_.getGeometry());
+ geometry.translate(deltaX, deltaY);
+
+ this.coordinate_[0] = evt.coordinate[0];
+ this.coordinate_[1] = evt.coordinate[1];
+ repaint();
+ };
+
+
+ /**
+ * @param {ol.MapBrowserEvent} evt Event.
+ */
+ app.Drag.prototype.handleMoveEvent = function (evt) {
+ if (this.cursor_) {
+ var map = evt.map;
+ var feature = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return feature;
+ });
+ var element = evt.map.getTargetElement();
+ if (feature) {
+ if (element.style.cursor != this.cursor_) {
+ this.previousCursor_ = element.style.cursor;
+ element.style.cursor = this.cursor_;
+ }
+ } else if (this.previousCursor_ !== undefined) {
+ element.style.cursor = this.previousCursor_;
+ this.previousCursor_ = undefined;
+ }
+ }
+ };
+
+
+ /**
+ * @param {ol.MapBrowserEvent} evt Map browser event.
+ * @return {boolean} `false` to stop the drag sequence.
+ */
+ app.Drag.prototype.handleUpEvent = function (evt) {
+ this.coordinate_ = null;
+ this.feature_ = null;
+ return false;
+ };
+
+ var lat = GPS_DATA.lat / 10000000;
+ var lon = GPS_DATA.lon / 10000000;
+
+ map = new ol.Map({
+ interactions: ol.interaction.defaults().extend([new app.Drag()]),
+ layers: [
+ new ol.layer.Tile({
+ source: new ol.source.OSM()
+ })
+ ],
+ target: document.getElementById('missionMap'),
+ view: new ol.View({
+ center: ol.proj.fromLonLat([lon, lat]),
+ zoom: 10
+ })
+ });
+
+ map.on('click', function (evt) {
+ var selectedFeature = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return feature;
+ });
+ selectedMarker = map.forEachFeatureAtPixel(evt.pixel,
+ function (feature, layer) {
+ return layer;
+ });
+ if (selectedFeature) {
+ var geometry = selectedFeature.getGeometry();
+ var coord = ol.proj.toLonLat(geometry.getCoordinates());
+
+ $('#pointLat').val(coord[0]);
+ $('#pointLon').val(coord[1]);
+ $('#pointAlt').val(selectedMarker.alt);
+ } else {
+ map.addLayer(addMarker(evt.coordinate));
+ repaint();
+ }
+ });
+
+ // change mouse cursor when over marker
+ $(map.getViewport()).on('mousemove', function (e) {
+ var pixel = map.getEventPixel(e.originalEvent);
+ var hit = map.forEachFeatureAtPixel(pixel, function (feature, layer) {
+ return true;
+ });
+ if (hit) {
+ map.getTarget().style.cursor = 'pointer';
+ } else {
+ map.getTarget().style.cursor = '';
+ }
+ });
+
+ $('#removeAllPoints').on('click', function () {
+ for (var i in markers) {
+ map.removeLayer(markers[i]);
+ }
+ markers = [];
+ clearEditForm();
+ repaint();
+ });
+
+ $('#removePoint').on('click', function () {
+ if (selectedMarker) {
+ map.removeLayer(selectedMarker);
+ var tmp = [];
+ for (var i in markers) {
+ if (markers[i] !== selectedMarker) {
+ tmp.push(markers[i]);
+ }
+ }
+ markers = tmp;
+ selectedMarker = null;
+ clearEditForm();
+ repaint();
+ }
+ });
+
+ $('#savePoint').on('click', function () {
+ if (selectedMarker) {
+ map.getLayers().forEach(function (t) {
+ if (t === selectedMarker) {
+ var geometry = t.getSource().getFeatures()[0].getGeometry();
+ geometry.setCoordinates(ol.proj.fromLonLat([parseFloat($('#pointLat').val()), parseFloat($('#pointLon').val())]));
+ t.alt = $('#pointAlt').val();
+ }
+ });
+
+ selectedMarker = null;
+ clearEditForm();
+ repaint();
+ }
+ });
+ }
+};
+
+TABS.mission_control.cleanup = function (callback) {
+ if (callback) callback();
+};
\ No newline at end of file