diff --git a/js/msp/MSPHelper.js b/js/msp/MSPHelper.js index e64125331..67a50ceb5 100644 --- a/js/msp/MSPHelper.js +++ b/js/msp/MSPHelper.js @@ -1607,7 +1607,11 @@ var mspHelper = (function () { break; case MSPCodes.MSP2_INAV_GEOZONE: - var geozone = new Geozone( + + if (data.buffer.byteLength == 0) { + break; + } + var geozone = new Geozone( data.getUint8(1), data.getUint8(2), data.getInt32(3, true), diff --git a/locale/en/messages.json b/locale/en/messages.json index 0051cd981..02cd9f03a 100644 --- a/locale/en/messages.json +++ b/locale/en/messages.json @@ -4838,6 +4838,12 @@ "geozoneInvalidzone": { "message": "Invalid Geozone(s) detected:" }, + "geozoneInvalidLat": { + "message": "Invalid latitude" + }, + "geozoneInvalidLon": { + "message": "Invalid longitude" + }, "gezoneInvalidReasonNotCC": { "message": "Not counter clockwise" }, diff --git a/tabs/advanced_tuning.html b/tabs/advanced_tuning.html index cf7bd8b00..dcb2b5c7d 100644 --- a/tabs/advanced_tuning.html +++ b/tabs/advanced_tuning.html @@ -513,7 +513,7 @@ --> -
+
diff --git a/tabs/advanced_tuning.js b/tabs/advanced_tuning.js index 06c195b74..0dc69cc13 100644 --- a/tabs/advanced_tuning.js +++ b/tabs/advanced_tuning.js @@ -56,6 +56,10 @@ TABS.advanced_tuning.initialize = function (callback) { $('.notFixedWingTuning').show(); } + if (!FC.isFeatureEnabled('GEOZONE')) { + $('#geozoneSettings').hide(); + } + GUI.simpleBind(); i18n.localize();; diff --git a/tabs/mission_control.js b/tabs/mission_control.js index 6aa3eb879..1afca6c1d 100644 --- a/tabs/mission_control.js +++ b/tabs/mission_control.js @@ -892,11 +892,11 @@ TABS.mission_control.initialize = function (callback) { width: 3, }) }) - ] + ], }); - vectorLayer.kind = "geozoneline"; - vectorLayer.selection = false; + vectorLayer.kind = "geozonecircle"; + vectorLayer.selection = true; geozoneLines.push(vectorLayer); map.addLayer(vectorLayer); @@ -1748,17 +1748,49 @@ TABS.mission_control.initialize = function (callback) { \ \ \ - \ + \ \ \ - \ + \ \ \ '); const $row = $verticesTable.find('tr:last'); $row.find('.vertexNumber').text(vertex.getNumber() + 1); - $row.find('.vertexLat').val((vertex.getLatMap()).toLocaleString(['en-US'], {minimumFractionDigits: 7})); - $row.find('.vertexLon').val((vertex.getLonMap()).toLocaleString(['en-US'], {minimumFractionDigits: 7})); + + $row.find('.vertexLat') + .val((vertex.getLatMap()) + .toLocaleString(['en-US'], {minimumFractionDigits: 7})) + .on('change', event => { + const lat = $(event.currentTarget).val(); + if (isNaN(lat) || lat < -90 || lat > 90) { + GUI.alert(i18n.getMessage("geozoneInvalidLat")); + $(event.currentTarget).val(vertex.getLatMap()); + return; + } + vertex.setLat(lat * 1e7); + renderGeozoneOptions(); + renderGeozonesOnMap(); + updateGeozoneInfo(); + + }); + + $row.find('.vertexLon') + .val((vertex.getLonMap()) + .toLocaleString(['en-US'], {minimumFractionDigits: 7})) + .on('change', event => { + const lat = $(event.currentTarget).val(); + if (isNaN(lat) || lat < -180 || lat > 180) { + GUI.alert(i18n.getMessage("geozoneInvalidLon")); + $(event.currentTarget).val(vertex.getLonMap()); + return; + } + vertex.setLon(lat * 1e7); + renderGeozoneOptions(); + renderGeozonesOnMap(); + updateGeozoneInfo(); + }); + $row.find('#removeVertex').on('click', event => { if (selectedGeozone.getVerticesCount() > 3) { selectedGeozone.dropVertex(vertex.getNumber()); @@ -2150,7 +2182,7 @@ TABS.mission_control.initialize = function (callback) { */ app.Drag.prototype.handleDragEvent = function (evt) { - if (tempMarker.kind == "safehomecircle") { + if (tempMarker.kind == "safehomecircle" || tempMarker.kind == "geozonecircle") { return; } @@ -2213,7 +2245,7 @@ TABS.mission_control.initialize = function (callback) { renderGeozoneOptions(); renderGeozonesOnMap(); updateGeozoneInfo(); - } + } }; /**