mirror of
https://github.com/iNavFlight/inav-configurator.git
synced 2025-07-25 17:25:14 +03:00
Initial build
This commit is contained in:
parent
924c974473
commit
c1983a6241
4 changed files with 349 additions and 242 deletions
|
@ -139,12 +139,16 @@ let Waypoint = function (number, action, lat, lon, alt=0, p1=0, p2=0, p3=0, endM
|
|||
self.getElevation = async function (globalSettings) {
|
||||
let elevation;
|
||||
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);
|
||||
let elevationEarthModel = "ellipsoid";
|
||||
if ($('#elevationEarthModel').prop("checked")) {
|
||||
elevationEarthModel = "sealevel";
|
||||
}
|
||||
const response = await fetch('http://dev.virtualearth.net/REST/v1/Elevation/List?points='+self.getLatMap()+','+self.getLonMap()+'&heights='+elevationEarthModel+'&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
elevation = myJson.resourceSets[0].resources[0].elevations[0];
|
||||
}
|
||||
else {
|
||||
elevation = "NA";
|
||||
elevation = "N/A";
|
||||
}
|
||||
return elevation;
|
||||
}
|
||||
|
|
|
@ -424,19 +424,23 @@ let WaypointCollection = function () {
|
|||
samples = 1024;
|
||||
}
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
let elevationEarthModel = "ellipsoid";
|
||||
if ($('#elevationEarthModel').prop("checked")) {
|
||||
elevationEarthModel = "sealevel";
|
||||
}
|
||||
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='+elevationEarthModel+'&samples='+String(samples+1)+'&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
elevation = myJson.resourceSets[0].resources[0].elevations;
|
||||
}
|
||||
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='+elevationEarthModel+'&key='+globalSettings.mapApiKey);
|
||||
const myJson = await response.json();
|
||||
elevation = myJson.resourceSets[0].resources[0].elevations;
|
||||
}
|
||||
}
|
||||
else {
|
||||
elevation = "NA";
|
||||
elevation = "N/A";
|
||||
}
|
||||
//console.log("elevation ", elevation);
|
||||
return [lengthMission, totalMissionDistance, samples, elevation, altPoint2measure, namePoint2measure, refPoint2measure];
|
||||
|
|
|
@ -122,6 +122,10 @@
|
|||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="point" id="elevationEarthModelclass" style="display: none">
|
||||
<label class="spacer_box_title i18n-replaced" for="elevationEarthModel">Use Sea Level Earth DEM Model: </label>
|
||||
<input id="elevationEarthModel" type="checkbox" value="0" class="togglemedium" required>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="missionPlanerSafehome" class="gui_box grey" style="display: none">
|
||||
|
@ -215,7 +219,11 @@
|
|||
</div>
|
||||
<div class="point" id="elevationAtWP" style="display: none">
|
||||
<label class="point-label">Elevation (m): </label>
|
||||
<span id="elevationValueAtWP">NA</span>
|
||||
<span id="elevationValueAtWP">N/A</span>
|
||||
</div>
|
||||
<div class="point" id="groundClearanceAtWP" style="display: none">
|
||||
<label class="point-label">Grd Dist (m): </label>
|
||||
<span id="groundClearanceValueAtWP">N/A</span>
|
||||
</div>
|
||||
<div class="point" id="pointP1class" style="display: none">
|
||||
<label class="point-label" for="pointP1">Parameter 1: </label>
|
||||
|
|
|
@ -1301,8 +1301,10 @@ TABS.mission_control.initialize = function (callback) {
|
|||
let tempWp = mission.getWaypoint(tempMarker.number);
|
||||
tempWp.setLon(Math.round(coord[0] * 10000000));
|
||||
tempWp.setLat(Math.round(coord[1] * 10000000));
|
||||
if (selectedMarker != null && tempMarker.number == selectedMarker.getLayerNumber()) {
|
||||
$('#pointLon').val(Math.round(coord[0] * 10000000) / 10000000);
|
||||
$('#pointLat').val(Math.round(coord[1] * 10000000) / 10000000);
|
||||
}
|
||||
mission.updateWaypoint(tempWp);
|
||||
repaintLine4Waypoints(mission);
|
||||
}
|
||||
|
@ -1351,15 +1353,16 @@ TABS.mission_control.initialize = function (callback) {
|
|||
* @return {boolean} `false` to stop the drag sequence.
|
||||
*/
|
||||
app.Drag.prototype.handleUpEvent = function (evt) {
|
||||
if (tempMarker.kind == "waypoint" ){
|
||||
if ( tempMarker.kind == "waypoint" ) {
|
||||
if (selectedMarker != null && tempMarker.number == selectedMarker.getLayerNumber()) {
|
||||
(async () => {
|
||||
if (mission.getWaypoint(tempMarker.number).getP3() == 1.0) {
|
||||
const elevationAtWP = await mission.getWaypoint(tempMarker.number).getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
}
|
||||
checkAltElevSanity(false);
|
||||
plotElevation();
|
||||
})()
|
||||
}
|
||||
}
|
||||
else if (tempMarker.kind == "home" ) {
|
||||
(async () => {
|
||||
const elevationAtHome = await HOME.getElevation(globalSettings);
|
||||
|
@ -1488,6 +1491,18 @@ TABS.mission_control.initialize = function (callback) {
|
|||
|
||||
var altitudeMeters = app.ConvertCentimetersToMeters(selectedMarker.getAlt());
|
||||
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
$('#elevationAtWP').fadeIn();
|
||||
$('#groundClearanceAtWP').fadeIn();
|
||||
(async () => {
|
||||
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
})()
|
||||
} else {
|
||||
$('#elevationAtWP').fadeOut();
|
||||
$('#groundClearanceAtWP').fadeOut();
|
||||
}
|
||||
|
||||
$('#altitudeInMeters').text(` ${altitudeMeters}m`);
|
||||
$('#pointLon').val(Math.round(coord[0] * 10000000) / 10000000);
|
||||
$('#pointLat').val(Math.round(coord[1] * 10000000) / 10000000);
|
||||
|
@ -1656,7 +1671,6 @@ TABS.mission_control.initialize = function (callback) {
|
|||
if ([MWNP.WPTYPE.SET_POI,MWNP.WPTYPE.POSHOLD_TIME,MWNP.WPTYPE.LAND].includes(selectedMarker.getAction())) {
|
||||
selectedMarker.setP1(0.0);
|
||||
selectedMarker.setP2(0.0);
|
||||
selectedMarker.setP3(0.0);
|
||||
}
|
||||
for (var j in dictOfLabelParameterPoint[selectedMarker.getAction()]) {
|
||||
if (dictOfLabelParameterPoint[selectedMarker.getAction()][j] != '') {
|
||||
|
@ -1699,7 +1713,7 @@ TABS.mission_control.initialize = function (callback) {
|
|||
|
||||
$('#pointAlt').on('change', function (event) {
|
||||
if (selectedMarker) {
|
||||
selectedMarker.setAlt(Number($('#pointAlt').val()));
|
||||
checkAltElevSanity(true);
|
||||
mission.updateWaypoint(selectedMarker);
|
||||
mission.update();
|
||||
redrawLayer();
|
||||
|
@ -1727,22 +1741,34 @@ TABS.mission_control.initialize = function (callback) {
|
|||
|
||||
$('#pointP3').on('change', function (event) {
|
||||
if (selectedMarker) {
|
||||
const P3Value = selectedMarker.getP3();
|
||||
selectedMarker.setP3( $('#pointP3').prop("checked") ? 1.0 : 0.0);
|
||||
if ($('#pointP3').prop("checked")) {
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
(async () => {
|
||||
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
$('#elevationAtWP').fadeIn(300);
|
||||
})()
|
||||
|
||||
var altitude = Number($('#pointAlt').val());
|
||||
if (P3Value != selectedMarker.getP3()) {
|
||||
if ($('#pointP3').prop("checked")) {
|
||||
if (altitude < 0) {
|
||||
alert("Altitude below ground level, setting to default");
|
||||
altitude = Number($('#MPdefaultPointAlt').val());
|
||||
}
|
||||
else {
|
||||
$('#elevationAtWP').fadeOut(300);
|
||||
selectedMarker.setAlt(altitude + elevationAtWP * 100);
|
||||
} else {
|
||||
selectedMarker.setAlt(altitude - Number(elevationAtWP) * 100);
|
||||
}
|
||||
}
|
||||
$('#pointAlt').val(selectedMarker.getAlt());
|
||||
altitudeMeters = app.ConvertCentimetersToMeters(selectedMarker.getAlt());
|
||||
$('#altitudeInMeters').text(` ${altitudeMeters}m`);
|
||||
checkAltElevSanity(false);
|
||||
mission.updateWaypoint(selectedMarker);
|
||||
mission.update();
|
||||
redrawLayer();
|
||||
plotElevation();
|
||||
})()
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -1824,6 +1850,9 @@ TABS.mission_control.initialize = function (callback) {
|
|||
HOME.setLon(Math.round(ol.proj.toLonLat(mapCenter)[0] * 1e7));
|
||||
HOME.setLat(Math.round(ol.proj.toLonLat(mapCenter)[1] * 1e7));
|
||||
updateHome();
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
$('#elevationEarthModelclass').fadeIn(300);
|
||||
}
|
||||
});
|
||||
|
||||
$('#cancelHome').on('click', function () {
|
||||
|
@ -1834,6 +1863,26 @@ TABS.mission_control.initialize = function (callback) {
|
|||
closeHomePanel();
|
||||
});
|
||||
|
||||
$('#elevationEarthModel').on('change', function (event) {
|
||||
if (globalSettings.mapProviderType == 'bing') {
|
||||
(async () => {
|
||||
if (selectedMarker) {
|
||||
const elevationAtWP = await selectedMarker.getElevation(globalSettings);
|
||||
$('#elevationValueAtWP').text(elevationAtWP);
|
||||
mission.updateWaypoint(selectedMarker);
|
||||
}
|
||||
const elevationAtHome = await HOME.getElevation(globalSettings);
|
||||
$('#elevationValueAtHome').text(elevationAtHome+' m');
|
||||
HOME.setAlt(elevationAtHome);
|
||||
|
||||
checkAltElevSanity(false);
|
||||
mission.update();
|
||||
redrawLayer();
|
||||
plotElevation();
|
||||
})()
|
||||
}
|
||||
});
|
||||
|
||||
/////////////////////////////////////////////
|
||||
// Callback for Remove buttons
|
||||
/////////////////////////////////////////////
|
||||
|
@ -2189,6 +2238,48 @@ TABS.mission_control.initialize = function (callback) {
|
|||
}
|
||||
}
|
||||
|
||||
/* reset = true : changes WP Altitude value back to previous value if setting below ground level.
|
||||
^ reset = false : changes WP Altitude to value required to give ground clearance = default Altitude setting */
|
||||
function checkAltElevSanity(reset) {
|
||||
if (globalSettings.mapProviderType != 'bing') {
|
||||
selectedMarker.setAlt(Number($('#pointAlt').val()));
|
||||
return;
|
||||
}
|
||||
|
||||
const elevationAtWP = Number($('#elevationValueAtWP').text());
|
||||
let groundClearance = "NO HOME";
|
||||
if (selectedMarker.getP3()) {
|
||||
if (Number($('#pointAlt').val()) < 100 * elevationAtWP) {
|
||||
if (reset) {
|
||||
alert("Altitude below ground level. Change ignored");
|
||||
$('#pointAlt').val(selectedMarker.getAlt());
|
||||
} else {
|
||||
alert("Altitude below ground level, setting to default");
|
||||
let altitude = Number($('#MPdefaultPointAlt').val()) + 100 * elevationAtWP;
|
||||
$('#pointAlt').val(altitude);
|
||||
}
|
||||
}
|
||||
groundClearance = Number($('#pointAlt').val()) / 100 - elevationAtWP;
|
||||
} else if (homeMarkers.length & HOME.getAlt() != "N/A") {
|
||||
let elevationAtHome = HOME.getAlt();
|
||||
if ((Number($('#pointAlt').val()) / 100 + elevationAtHome) < elevationAtWP) {
|
||||
if (reset) {
|
||||
alert("Altitude below ground level. Change ignored");
|
||||
$('#pointAlt').val(selectedMarker.getAlt());
|
||||
} else {
|
||||
alert("Altitude below ground level, setting to default");
|
||||
let altitude = Number($('#MPdefaultPointAlt').val()) + 100 * (elevationAtWP - elevationAtHome);
|
||||
$('#pointAlt').val(altitude);
|
||||
}
|
||||
}
|
||||
groundClearance = Number($('#pointAlt').val()) / 100 + (elevationAtHome - elevationAtWP);
|
||||
}
|
||||
selectedMarker.setAlt(Number($('#pointAlt').val()));
|
||||
let altitudeMeters = parseInt(selectedMarker.getAlt()) / 100;
|
||||
$('#altitudeInMeters').text(` ${altitudeMeters}m`);
|
||||
$('#groundClearanceValueAtWP').text(` ${groundClearance}`);
|
||||
}
|
||||
|
||||
function plotElevation() {
|
||||
if ($('#missionPlanerElevation').is(":visible")) {
|
||||
if (mission.get().length == 0) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue