1
0
Fork 0
mirror of https://github.com/iNavFlight/inav-configurator.git synced 2025-07-24 00:35:20 +03:00

Initial build

This commit is contained in:
breadoven 2021-09-29 12:31:43 +01:00
parent 924c974473
commit 397e840e5a
2 changed files with 100 additions and 70 deletions

View file

@ -15,7 +15,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
self.setNumber = function (data) { self.setNumber = function (data) {
number = data; number = data;
}; };
self.getLayerNumber = function () { self.getLayerNumber = function () {
return layerNumber; return layerNumber;
}; };
@ -23,7 +23,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
self.setLayerNumber = function (data) { self.setLayerNumber = function (data) {
layerNumber = data; layerNumber = data;
}; };
self.getPoiNumber = function () { self.getPoiNumber = function () {
return poiNumber; return poiNumber;
}; };
@ -31,7 +31,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
self.setPoiNumber = function (data) { self.setPoiNumber = function (data) {
poiNumber = data; poiNumber = data;
}; };
self.isUsed = function () { self.isUsed = function () {
return isUsed; return isUsed;
}; };
@ -39,7 +39,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
self.setUsed = function (data) { self.setUsed = function (data) {
isUsed = data; isUsed = data;
}; };
self.isAttached = function () { self.isAttached = function () {
return isAttached; return isAttached;
}; };
@ -51,7 +51,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
self.getLon = function () { self.getLon = function () {
return lon; return lon;
}; };
self.getLonMap = function () { self.getLonMap = function () {
return lon / 10000000; return lon / 10000000;
}; };
@ -63,7 +63,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
self.getLat = function () { self.getLat = function () {
return lat; return lat;
}; };
self.getLatMap = function () { self.getLatMap = function () {
return lat / 10000000; return lat / 10000000;
}; };
@ -71,55 +71,55 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
self.setLat = function (data) { self.setLat = function (data) {
lat = data; lat = data;
}; };
self.getAction = function () { self.getAction = function () {
return action; return action;
}; };
self.setAction = function (data) { self.setAction = function (data) {
action = data; action = data;
}; };
self.getAlt = function () { self.getAlt = function () {
return alt; return alt;
}; };
self.setAlt = function (data) { self.setAlt = function (data) {
alt = data; alt = data;
}; };
self.getP1 = function () { self.getP1 = function () {
return p1; return p1;
}; };
self.setP1 = function (data) { self.setP1 = function (data) {
p1 = data; p1 = data;
}; };
self.getP2 = function () { self.getP2 = function () {
return p2; return p2;
}; };
self.setP2 = function (data) { self.setP2 = function (data) {
p2 = data; p2 = data;
}; };
self.getP3 = function () { self.getP3 = function () {
return p3; return p3;
}; };
self.setP3 = function (data) { self.setP3 = function (data) {
p3 = data; p3 = data;
}; };
self.getEndMission = function () { self.getEndMission = function () {
return endMission; return endMission;
}; };
self.setEndMission = function (data) { self.setEndMission = function (data) {
endMission = data; endMission = data;
}; };
self.getAttachedId = function () { self.getAttachedId = function () {
return attachedId; return attachedId;
}; };
@ -127,7 +127,7 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
self.setAttachedId = function (data) { self.setAttachedId = function (data) {
attachedId = data; attachedId = data;
}; };
self.getAttachedNumber = function () { self.getAttachedNumber = function () {
return attachedNumber; return attachedNumber;
}; };
@ -135,16 +135,21 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
self.setAttachedNumber = function (data) { self.setAttachedNumber = function (data) {
attachedNumber = data; attachedNumber = data;
}; };
self.getElevation = async function (globalSettings) { self.getElevation = async function (globalSettings) {
let elevation; let elevation;
if (globalSettings.mapProviderType == 'bing') { if (globalSettings.mapProviderType == 'bing') {
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+self.getLatMap()+','+self.getLonMap()+'&heights=ellipsoid&key='+globalSettings.mapApiKey); const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+self.getLatMap()+','+self.getLonMap()+'&heights=ellipsoid&key='+globalSettings.mapApiKey);
const myJson = await response.json(); const myJson = await response.json();
elevation = myJson.resourceSets[0].resources[0].elevations[0]; elevation = myJson.resourceSets[0].resources[0].elevations[0];
} }
else { else {
elevation = "NA"; const response = await fetch('https://api.opentopodata.org/v1/aster30m?locations='+self.getLatMap()+','+self.getLonMap());
const myJson = await response.json();
elevation = myJson.results[0].elevation;
if (elevation == null) {
elevation = "N/A";
}
} }
return elevation; return elevation;
} }

View file

@ -10,7 +10,7 @@ let WaypointCollection = function () {
countBusyPoints = 0, countBusyPoints = 0,
version = 0, version = 0,
center = {} center = {}
self.getMaxWaypoints = function () { self.getMaxWaypoints = function () {
return maxWaypoints; return maxWaypoints;
}; };
@ -18,15 +18,15 @@ let WaypointCollection = function () {
self.setMaxWaypoints = function (data) { self.setMaxWaypoints = function (data) {
maxWaypoints = data; maxWaypoints = data;
}; };
self.getValidMission = function () { self.getValidMission = function () {
return isValidMission; return isValidMission;
}; };
self.setValidMission = function (data) { self.setValidMission = function (data) {
isValidMission = data; isValidMission = data;
}; };
self.getCountBusyPoints = function () { self.getCountBusyPoints = function () {
return countBusyPoints; return countBusyPoints;
}; };
@ -34,7 +34,7 @@ let WaypointCollection = function () {
self.setCountBusyPoints = function (data) { self.setCountBusyPoints = function (data) {
countBusyPoints = data; countBusyPoints = data;
}; };
self.getVersion = function () { self.getVersion = function () {
return version; return version;
}; };
@ -42,11 +42,11 @@ let WaypointCollection = function () {
self.setVersion = function (data) { self.setVersion = function (data) {
version = data; version = data;
}; };
self.getCenter = function () { self.getCenter = function () {
return center; return center;
}; };
self.setCenter = function (data) { self.setCenter = function (data) {
center = data; center = data;
}; };
@ -54,11 +54,11 @@ let WaypointCollection = function () {
self.setCenterZoom = function (data) { self.setCenterZoom = function (data) {
center.zoom = data; center.zoom = data;
}; };
self.setCenterLon = function (data) { self.setCenterLon = function (data) {
center.lon = data; center.lon = data;
}; };
self.setCenterLat = function (data) { self.setCenterLat = function (data) {
center.lat = data; center.lat = data;
}; };
@ -70,7 +70,7 @@ let WaypointCollection = function () {
self.get = function () { self.get = function () {
return data; return data;
}; };
self.isEmpty = function () { self.isEmpty = function () {
return data == []; return data == [];
}; };
@ -78,7 +78,7 @@ let WaypointCollection = function () {
self.flush = function () { self.flush = function () {
data = []; data = [];
}; };
self.reinit = function () { self.reinit = function () {
data = []; data = [];
maxWaypoints = 60; maxWaypoints = 60;
@ -99,13 +99,13 @@ let WaypointCollection = function () {
} }
} }
}; };
self.updateWaypoint = function(newWaypoint) { self.updateWaypoint = function(newWaypoint) {
if (newWaypoint.isUsed()) { if (newWaypoint.isUsed()) {
data[newWaypoint.getNumber()] = newWaypoint; data[newWaypoint.getNumber()] = newWaypoint;
} }
}; };
self.dropWaypoint = function(newWaypoint) { self.dropWaypoint = function(newWaypoint) {
self.getWaypoint(newWaypoint.getNumber()).setUsed(false); self.getWaypoint(newWaypoint.getNumber()).setUsed(false);
let indexId = newWaypoint.getNumber() let indexId = newWaypoint.getNumber()
@ -120,7 +120,7 @@ let WaypointCollection = function () {
data.splice(indexId, 1); data.splice(indexId, 1);
}; };
self.insertWaypoint = function (newWaypoint, indexId) { self.insertWaypoint = function (newWaypoint, indexId) {
data.forEach(function (wp) { data.forEach(function (wp) {
if (wp.getNumber() >= indexId) { if (wp.getNumber() >= indexId) {
@ -133,7 +133,7 @@ let WaypointCollection = function () {
data.splice(indexId, 0, newWaypoint); data.splice(indexId, 0, newWaypoint);
}; };
self.drop = function (waypointId) { self.drop = function (waypointId) {
self.getWaypoint(waypointId).setUsed(false); self.getWaypoint(waypointId).setUsed(false);
var tmpData = []; var tmpData = [];
@ -148,7 +148,7 @@ let WaypointCollection = function () {
data = tmpData; data = tmpData;
}; };
self.update = function (bMWPfile=false, bReverse=false) { self.update = function (bMWPfile=false, bReverse=false) {
let oldWPNumber = 0; let oldWPNumber = 0;
let optionIdx = 0; let optionIdx = 0;
@ -167,7 +167,7 @@ let WaypointCollection = function () {
element.setP1(element.getP1()+1); element.setP1(element.getP1()+1);
} }
} }
if ([MWNP.WPTYPE.JUMP,MWNP.WPTYPE.SET_HEAD,MWNP.WPTYPE.RTH].includes(element.getAction())) { if ([MWNP.WPTYPE.JUMP,MWNP.WPTYPE.SET_HEAD,MWNP.WPTYPE.RTH].includes(element.getAction())) {
element.setAttachedId(oldWPNumber); element.setAttachedId(oldWPNumber);
element.setAttachedNumber(optionIdx); element.setAttachedNumber(optionIdx);
@ -189,7 +189,7 @@ let WaypointCollection = function () {
} }
}); });
}; };
self.getNonAttachedList = function () { self.getNonAttachedList = function () {
let tmpData = []; let tmpData = [];
data.forEach(function (element) { data.forEach(function (element) {
@ -199,8 +199,8 @@ let WaypointCollection = function () {
}); });
return tmpData; return tmpData;
} }
self.getAttachedList = function () { self.getAttachedList = function () {
let tmpData = []; let tmpData = [];
data.forEach(function (element) { data.forEach(function (element) {
@ -210,8 +210,8 @@ let WaypointCollection = function () {
}); });
return tmpData; return tmpData;
} }
self.getAttachedFromWaypoint = function (waypoint) { self.getAttachedFromWaypoint = function (waypoint) {
let tmpData = []; let tmpData = [];
data.forEach(function (element) { data.forEach(function (element) {
@ -221,8 +221,8 @@ let WaypointCollection = function () {
}); });
return tmpData; return tmpData;
} }
self.addAttachedFromWaypoint = function (waypoint) { self.addAttachedFromWaypoint = function (waypoint) {
let tmpNumber = 0; let tmpNumber = 0;
let tmpData = self.getAttachedFromWaypoint(waypoint); let tmpData = self.getAttachedFromWaypoint(waypoint);
@ -234,8 +234,8 @@ let WaypointCollection = function () {
tempWp.setAttachedId(waypoint.getNumber()); tempWp.setAttachedId(waypoint.getNumber());
self.insertWaypoint(tempWp, waypoint.getNumber()+tmpNumber+1); self.insertWaypoint(tempWp, waypoint.getNumber()+tmpNumber+1);
self.update(); self.update();
} }
self.dropAttachedFromWaypoint = function (waypoint, waypointAttachedNumber) { self.dropAttachedFromWaypoint = function (waypoint, waypointAttachedNumber) {
data.forEach(function (element) { data.forEach(function (element) {
if (element.isAttached() && element.getAttachedId() == waypoint.getNumber() && element.getAttachedNumber() == waypointAttachedNumber) { if (element.isAttached() && element.getAttachedId() == waypoint.getNumber() && element.getAttachedNumber() == waypointAttachedNumber) {
@ -243,9 +243,9 @@ let WaypointCollection = function () {
self.update(); self.update();
} }
}); });
} }
self.extractBuffer = function(waypointId) { self.extractBuffer = function(waypointId) {
let buffer = []; let buffer = [];
let waypoint = self.getWaypoint(waypointId); let waypoint = self.getWaypoint(waypointId);
@ -270,10 +270,10 @@ let WaypointCollection = function () {
buffer.push(lowByte(waypoint.getP3())); //sbufReadU16(src); // P3 buffer.push(lowByte(waypoint.getP3())); //sbufReadU16(src); // P3
buffer.push(highByte(waypoint.getP3())); buffer.push(highByte(waypoint.getP3()));
buffer.push(waypoint.getEndMission()); //sbufReadU8(src); // future: to set nav flag buffer.push(waypoint.getEndMission()); //sbufReadU8(src); // future: to set nav flag
return buffer; return buffer;
} }
self.missionDisplayDebug = function() { self.missionDisplayDebug = function() {
if (data && data.length != 0) { if (data && data.length != 0) {
data.forEach(function (element) { data.forEach(function (element) {
@ -289,7 +289,7 @@ let WaypointCollection = function () {
}); });
} }
} }
self.copy = function(mission){ self.copy = function(mission){
mission.get().forEach(function (element) { mission.get().forEach(function (element) {
self.put(element); self.put(element);
@ -300,7 +300,7 @@ let WaypointCollection = function () {
self.setVersion(mission.getVersion()); self.setVersion(mission.getVersion());
self.setCenter(mission.getCenter()); self.setCenter(mission.getCenter());
} }
self.convertJumpNumberToWaypoint = function(jumpId) { self.convertJumpNumberToWaypoint = function(jumpId) {
let outputNumber = 0; let outputNumber = 0;
self.getNonAttachedList().forEach(function (element) { self.getNonAttachedList().forEach(function (element) {
@ -310,7 +310,7 @@ let WaypointCollection = function () {
}); });
return outputNumber; return outputNumber;
} }
self.isJumpTargetAttached = function(waypoint) { self.isJumpTargetAttached = function(waypoint) {
let lJumptTargetAttached = []; let lJumptTargetAttached = [];
data.forEach(function (element) { data.forEach(function (element) {
@ -320,7 +320,7 @@ let WaypointCollection = function () {
}); });
return (lJumptTargetAttached.length != 0 && lJumptTargetAttached != 'undefined') return (lJumptTargetAttached.length != 0 && lJumptTargetAttached != 'undefined')
} }
self.getPoiList = function() { self.getPoiList = function() {
let poiList = []; let poiList = [];
data.forEach(function (element) { data.forEach(function (element) {
@ -330,7 +330,7 @@ let WaypointCollection = function () {
}); });
return poiList; return poiList;
} }
self.getPoint2Measure = function(reverse=false) { self.getPoint2Measure = function(reverse=false) {
let point2measure = []; let point2measure = [];
let altPoint2measure = []; let altPoint2measure = [];
@ -383,10 +383,10 @@ let WaypointCollection = function () {
nStart++; nStart++;
} }
} }
return [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure]; return [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure];
} }
self.getDistance = function(display) { self.getDistance = function(display) {
let lengthLine = []; let lengthLine = [];
const [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure] = self.getPoint2Measure(); const [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure] = self.getPoint2Measure();
@ -394,9 +394,9 @@ let WaypointCollection = function () {
return [-1]; return [-1];
} }
else { else {
const cumulativeSum = (sum => value => sum += value)(0); const cumulativeSum = (sum => value => sum += value)(0);
let oldCoord = []; let oldCoord = [];
point2measure.forEach(function (coord) { point2measure.forEach(function (coord) {
if (oldCoord != 'undefined' && oldCoord != []) { if (oldCoord != 'undefined' && oldCoord != []) {
@ -408,35 +408,60 @@ let WaypointCollection = function () {
return lengthLine.map(cumulativeSum); return lengthLine.map(cumulativeSum);
} }
} }
self.getElevation = async function(globalSettings) { self.getElevation = async function(globalSettings) {
const [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure] = self.getPoint2Measure(true); const [nLoop, point2measure, altPoint2measure, namePoint2measure, refPoint2measure] = self.getPoint2Measure(true);
let lengthMission = self.getDistance(true); let lengthMission = self.getDistance(true);
let totalMissionDistance = lengthMission[lengthMission.length -1].toFixed(1); let totalMissionDistance = lengthMission[lengthMission.length -1].toFixed(1);
let samples; let samples;
let sampleMaxNum;
let sampleDistance;
if (globalSettings.mapProviderType == 'bing') {
sampleMaxNum = 1024;
sampleDistance = 30;
} else { // use opentopodata.org instead
sampleMaxNum = 99;
sampleDistance = 60;
}
if (point2measure.length <= 2){ if (point2measure.length <= 2){
samples = 1; samples = 1;
} }
else if (Math.trunc(totalMissionDistance/30) <= 1024 && point2measure.length > 2){ else if (Math.trunc(totalMissionDistance / sampleDistance) <= sampleMaxNum && point2measure.length > 2){
samples = Math.trunc(totalMissionDistance/30); samples = Math.trunc(totalMissionDistance / sampleDistance);
} }
else { else {
samples = 1024; samples = sampleMaxNum;
} }
if (globalSettings.mapProviderType == 'bing') { if (globalSettings.mapProviderType == 'bing') {
if (point2measure.length >1) { if (point2measure.length >1) {
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/Polyline?points='+point2measure+'&heights=ellipsoid&samples='+String(samples+1)+'&key='+globalSettings.mapApiKey); const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/Polyline?points='+point2measure+'&heights=ellipsoid&samples='+String(samples+1)+'&key='+globalSettings.mapApiKey);
const myJson = await response.json(); const myJson = await response.json();
elevation = myJson.resourceSets[0].resources[0].elevations; elevation = myJson.resourceSets[0].resources[0].elevations;
} }
else { else {
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+point2measure+'&heights=ellipsoid&key='+globalSettings.mapApiKey); const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+point2measure+'&heights=ellipsoid&key='+globalSettings.mapApiKey);
const myJson = await response.json(); const myJson = await response.json();
elevation = myJson.resourceSets[0].resources[0].elevations; elevation = myJson.resourceSets[0].resources[0].elevations;
} }
} }
else { else {
elevation = "NA"; let coordList = "";
point2measure.forEach(function (item) {
coordList += item + '|';
});
const response = await fetch('https://api.opentopodata.org/v1/aster30m?locations='+coordList+'&samples='+String(samples+1));
const myJson = await response.json();
var elevation = [];
for (var i = 0; i < myJson.results.length; i++){
if (myJson.results[i].elevation == null) {
elevation[i] = 0;
} else {
elevation[i] = myJson.results[i].elevation;
}
}
} }
//console.log("elevation ", elevation); //console.log("elevation ", elevation);
return [lengthMission, totalMissionDistance, samples, elevation, altPoint2measure, namePoint2measure, refPoint2measure]; return [lengthMission, totalMissionDistance, samples, elevation, altPoint2measure, namePoint2measure, refPoint2measure];