Add heading-up compass and persist fiducial layers
This commit is contained in:
1 parent
bc037a57d4
commit
812420b86a
6 files changed
+340
-15
No files matched your search
@@ -673,6 +673,17 @@
|
||||
<input type="number" min="0" max="30" step="1" @bind="MapMessageTimeoutSeconds" @bind:after="ApplyMapMessageOptions" />
|
||||
</label>
|
||||
<small class="field-help">Imposta 0 per lasciare i messaggi visibili fino alla chiusura manuale.</small>
|
||||
<label class="toggle-line project-save-option">
|
||||
<input type="checkbox" @bind="ShowCompass" @bind:after="ApplyCompassOptions" />
|
||||
<span>Mostra bussola sulla mappa</span>
|
||||
</label>
|
||||
<label>
|
||||
Orientamento bussola
|
||||
<select @bind="CompassMode" @bind:after="ApplyCompassOptions" disabled="@(!ShowCompass)">
|
||||
<option value="heading">Navigatore: direzione del dispositivo in alto</option>
|
||||
<option value="fixed">Nord fisso in alto</option>
|
||||
</select>
|
||||
</label>
|
||||
</section>
|
||||
|
||||
<section class="panel-section">
|
||||
@@ -877,6 +888,9 @@
|
||||
private bool GpsActive { get; set; }
|
||||
private bool GpsOverlayCollapsed { get; set; }
|
||||
private bool ShowGpsPosition { get; set; } = true;
|
||||
private bool ShowCompass { get; set; }
|
||||
private string CompassMode { get; set; } = "heading";
|
||||
private bool CompassSensorSubscribed { get; set; }
|
||||
private bool ShowSelectedParcels { get; set; } = true;
|
||||
private bool ShowFiducialPoints { get; set; } = true;
|
||||
private bool KeepPreviousFiducialPoints { get; set; } = true;
|
||||
@@ -1788,6 +1802,15 @@
|
||||
return InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
[JSInvokable]
|
||||
public async Task SetCompassFromLayerManager(bool enabled)
|
||||
{
|
||||
ShowCompass = enabled;
|
||||
SaveFlagPreferences();
|
||||
await ConfigureCompassSensorAsync();
|
||||
await InvokeAsync(StateHasChanged);
|
||||
}
|
||||
|
||||
[JSInvokable]
|
||||
public Task<string> GetOfficialCadastralSheetsNear(double latitude, double longitude) =>
|
||||
OfficialCadastreService.GetSheetsNearAsync(latitude, longitude);
|
||||
@@ -2298,6 +2321,8 @@
|
||||
ShowDrawingMeasurements = options.ShowDrawingMeasurements;
|
||||
DrawToolsVisible = options.DrawToolsVisible;
|
||||
ShowGpsPosition = options.GpsPositionVisible;
|
||||
ShowCompass = options.CompassVisible;
|
||||
CompassMode = options.CompassMode is "fixed" ? "fixed" : "heading";
|
||||
ShowSelectedParcels = options.SelectedParcelsVisible;
|
||||
TrailEnabled = options.TrailEnabled;
|
||||
|
||||
@@ -2307,6 +2332,7 @@
|
||||
layer.Enabled = activeLayers.Contains(layer.Key);
|
||||
}
|
||||
SaveFlagPreferences();
|
||||
_ = ConfigureCompassSensorAsync();
|
||||
}
|
||||
|
||||
private async Task DeleteProject()
|
||||
@@ -2718,6 +2744,8 @@
|
||||
ShowDrawingMeasurements = GetFlagPreference("show_drawing_measurements", true);
|
||||
DrawToolsVisible = GetFlagPreference("draw_tools_visible", false);
|
||||
ShowGpsPosition = GetFlagPreference("show_gps_position", true);
|
||||
ShowCompass = GetFlagPreference("show_compass", false);
|
||||
CompassMode = Preferences.Default.Get($"{FlagPreferencePrefix}compass_mode", "heading") is "fixed" ? "fixed" : "heading";
|
||||
ShowSelectedParcels = GetFlagPreference("show_selected_parcels", true);
|
||||
ShowFiducialPoints = GetFlagPreference("show_fiducial_points", true);
|
||||
KeepPreviousFiducialPoints = GetFlagPreference("keep_previous_fiducials", true);
|
||||
@@ -2761,6 +2789,8 @@
|
||||
SetFlagPreference("show_drawing_measurements", ShowDrawingMeasurements);
|
||||
SetFlagPreference("draw_tools_visible", DrawToolsVisible);
|
||||
SetFlagPreference("show_gps_position", ShowGpsPosition);
|
||||
SetFlagPreference("show_compass", ShowCompass);
|
||||
Preferences.Default.Set($"{FlagPreferencePrefix}compass_mode", CompassMode);
|
||||
SetFlagPreference("show_selected_parcels", ShowSelectedParcels);
|
||||
SetFlagPreference("show_fiducial_points", ShowFiducialPoints);
|
||||
SetFlagPreference("keep_previous_fiducials", KeepPreviousFiducialPoints);
|
||||
@@ -2801,6 +2831,8 @@
|
||||
await JS.InvokeVoidAsync("lmeMap.setDrawingMeasurementsVisible", ShowDrawingMeasurements);
|
||||
await JS.InvokeVoidAsync("lmeMap.setDrawToolsVisible", DrawToolsVisible);
|
||||
await JS.InvokeVoidAsync("lmeMap.setGpsPositionVisible", ShowGpsPosition);
|
||||
await JS.InvokeVoidAsync("lmeMap.setCompassOptions", ShowCompass, CompassMode);
|
||||
await ConfigureCompassSensorAsync();
|
||||
await JS.InvokeVoidAsync("lmeMap.setSelectedParcelsVisible", ShowSelectedParcels);
|
||||
await JS.InvokeVoidAsync("lmeMap.setFiducialColor", FiducialColor);
|
||||
await JS.InvokeVoidAsync("lmeMap.setFiducialPointsVisible", ShowFiducialPoints);
|
||||
@@ -2819,6 +2851,68 @@
|
||||
await JS.InvokeVoidAsync("lmeMap.setInfoTimeout", MapMessageTimeoutSeconds);
|
||||
}
|
||||
|
||||
private async Task ApplyCompassOptions()
|
||||
{
|
||||
CompassMode = CompassMode is "fixed" ? "fixed" : "heading";
|
||||
SaveFlagPreferences();
|
||||
await JS.InvokeVoidAsync("lmeMap.setCompassOptions", ShowCompass, CompassMode);
|
||||
await ConfigureCompassSensorAsync();
|
||||
}
|
||||
|
||||
private Task ConfigureCompassSensorAsync()
|
||||
{
|
||||
var compass = Microsoft.Maui.Devices.Sensors.Compass.Default;
|
||||
var shouldMonitor = ShowCompass && CompassMode == "heading" && compass.IsSupported;
|
||||
try
|
||||
{
|
||||
if (shouldMonitor && !CompassSensorSubscribed)
|
||||
{
|
||||
compass.ReadingChanged += OnCompassReadingChanged;
|
||||
CompassSensorSubscribed = true;
|
||||
compass.Start(Microsoft.Maui.Devices.Sensors.SensorSpeed.UI);
|
||||
}
|
||||
else if (!shouldMonitor && CompassSensorSubscribed)
|
||||
{
|
||||
compass.ReadingChanged -= OnCompassReadingChanged;
|
||||
CompassSensorSubscribed = false;
|
||||
if (compass.IsMonitoring)
|
||||
{
|
||||
compass.Stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
if (CompassSensorSubscribed)
|
||||
{
|
||||
compass.ReadingChanged -= OnCompassReadingChanged;
|
||||
CompassSensorSubscribed = false;
|
||||
}
|
||||
}
|
||||
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
private async void OnCompassReadingChanged(
|
||||
object? sender,
|
||||
Microsoft.Maui.Devices.Sensors.CompassChangedEventArgs args)
|
||||
{
|
||||
if (!MapReady || !ShowCompass || CompassMode != "heading")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await InvokeAsync(() => JS.InvokeVoidAsync(
|
||||
"lmeMap.setCompassHeading",
|
||||
args.Reading.HeadingMagneticNorth).AsTask());
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ApplyAdvancedOptions()
|
||||
{
|
||||
SaveFlagPreferences();
|
||||
@@ -2893,6 +2987,8 @@
|
||||
public bool ShowDrawingMeasurements { get; init; } = true;
|
||||
public bool DrawToolsVisible { get; init; }
|
||||
public bool GpsPositionVisible { get; init; } = true;
|
||||
public bool CompassVisible { get; init; }
|
||||
public string CompassMode { get; init; } = "heading";
|
||||
public bool SelectedParcelsVisible { get; init; } = true;
|
||||
public bool TrailEnabled { get; init; }
|
||||
}
|
||||
@@ -2922,6 +3018,16 @@
|
||||
GpsLookupCancellation?.Dispose();
|
||||
ProjectAutoSaveCancellation?.Cancel();
|
||||
ProjectAutoSaveCancellation?.Dispose();
|
||||
var compass = Microsoft.Maui.Devices.Sensors.Compass.Default;
|
||||
if (CompassSensorSubscribed)
|
||||
{
|
||||
compass.ReadingChanged -= OnCompassReadingChanged;
|
||||
if (compass.IsMonitoring)
|
||||
{
|
||||
compass.Stop();
|
||||
}
|
||||
CompassSensorSubscribed = false;
|
||||
}
|
||||
MapCallbackReference?.Dispose();
|
||||
return ValueTask.CompletedTask;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user