Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
28a982abed | ||
|
|
0ffcc7ae31 | ||
|
|
bb30f23d67 | ||
|
|
87304b1568 | ||
|
|
a23eff6124 | ||
|
|
4da47a8835 | ||
|
|
fc303e2555 | ||
|
|
49ed7d5f0e | ||
|
|
3856a9f675 | ||
|
|
e1bb7d9320 |
No files matched your search
@@ -472,6 +472,7 @@
|
|||||||
private bool DrawToolsVisible { get; set; }
|
private bool DrawToolsVisible { get; set; }
|
||||||
private bool TrailEnabled { get; set; }
|
private bool TrailEnabled { get; set; }
|
||||||
private bool LayerPanelOpen { get; set; }
|
private bool LayerPanelOpen { get; set; }
|
||||||
|
private DotNetObjectReference<Home>? MapCallbackReference { get; set; }
|
||||||
private bool IncludeCadastralParcels { get; set; } = true;
|
private bool IncludeCadastralParcels { get; set; } = true;
|
||||||
private bool IncludeKmlSheetLayer { get; set; }
|
private bool IncludeKmlSheetLayer { get; set; }
|
||||||
private bool ShowImportedSheetLayer { get; set; }
|
private bool ShowImportedSheetLayer { get; set; }
|
||||||
@@ -570,7 +571,8 @@
|
|||||||
{
|
{
|
||||||
if (firstRender)
|
if (firstRender)
|
||||||
{
|
{
|
||||||
await JS.InvokeVoidAsync("lmeMap.init");
|
MapCallbackReference = DotNetObjectReference.Create(this);
|
||||||
|
await JS.InvokeVoidAsync("lmeMap.init", MapCallbackReference);
|
||||||
await ApplyFlagPreferencesToMapAsync();
|
await ApplyFlagPreferencesToMapAsync();
|
||||||
await CenterOnInitialLocationAsync();
|
await CenterOnInitialLocationAsync();
|
||||||
await MigrateLegacyProjectAsync();
|
await MigrateLegacyProjectAsync();
|
||||||
@@ -713,6 +715,10 @@
|
|||||||
private async Task ToggleLayerPanel()
|
private async Task ToggleLayerPanel()
|
||||||
{
|
{
|
||||||
LayerPanelOpen = !LayerPanelOpen;
|
LayerPanelOpen = !LayerPanelOpen;
|
||||||
|
if (!LayerPanelOpen)
|
||||||
|
{
|
||||||
|
await JS.InvokeVoidAsync("lmeMap.clearLayerManagerSelection");
|
||||||
|
}
|
||||||
if (LayerPanelOpen)
|
if (LayerPanelOpen)
|
||||||
{
|
{
|
||||||
ActiveTab = "map";
|
ActiveTab = "map";
|
||||||
@@ -1043,6 +1049,21 @@
|
|||||||
await JS.InvokeVoidAsync("lmeMap.setDrawingMeasurementsVisible", ShowDrawingMeasurements);
|
await JS.InvokeVoidAsync("lmeMap.setDrawingMeasurementsVisible", ShowDrawingMeasurements);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[JSInvokable]
|
||||||
|
public Task SetMeasurementsFromLayerManager(string category, bool enabled)
|
||||||
|
{
|
||||||
|
if (category == "imported")
|
||||||
|
{
|
||||||
|
ShowImportedMeasurements = enabled;
|
||||||
|
}
|
||||||
|
else if (category == "drawings")
|
||||||
|
{
|
||||||
|
ShowDrawingMeasurements = enabled;
|
||||||
|
}
|
||||||
|
SaveFlagPreferences();
|
||||||
|
return InvokeAsync(StateHasChanged);
|
||||||
|
}
|
||||||
|
|
||||||
private async Task ToggleDrawTools()
|
private async Task ToggleDrawTools()
|
||||||
{
|
{
|
||||||
DrawToolsVisible = !DrawToolsVisible;
|
DrawToolsVisible = !DrawToolsVisible;
|
||||||
@@ -1499,6 +1520,7 @@
|
|||||||
LocationService.StopTracking();
|
LocationService.StopTracking();
|
||||||
GpsLookupCancellation?.Cancel();
|
GpsLookupCancellation?.Cancel();
|
||||||
GpsLookupCancellation?.Dispose();
|
GpsLookupCancellation?.Dispose();
|
||||||
|
MapCallbackReference?.Dispose();
|
||||||
return ValueTask.CompletedTask;
|
return ValueTask.CompletedTask;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,8 +28,8 @@
|
|||||||
<ApplicationId>com.companyname.lmemappecatastaliapp</ApplicationId>
|
<ApplicationId>com.companyname.lmemappecatastaliapp</ApplicationId>
|
||||||
|
|
||||||
<!-- Versions -->
|
<!-- Versions -->
|
||||||
<ApplicationDisplayVersion>0.2.18</ApplicationDisplayVersion>
|
<ApplicationDisplayVersion>0.2.28</ApplicationDisplayVersion>
|
||||||
<ApplicationVersion>22</ApplicationVersion>
|
<ApplicationVersion>32</ApplicationVersion>
|
||||||
|
|
||||||
<!-- To develop, package, and publish an app to the Microsoft Store, see: https://aka.ms/MauiTemplateUnpackaged -->
|
<!-- To develop, package, and publish an app to the Microsoft Store, see: https://aka.ms/MauiTemplateUnpackaged -->
|
||||||
<WindowsPackageType>None</WindowsPackageType>
|
<WindowsPackageType>None</WindowsPackageType>
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public sealed class AzureMapsService
|
|||||||
|
|
||||||
public AzureMapsService()
|
public AzureMapsService()
|
||||||
{
|
{
|
||||||
_httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.18");
|
_httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.22");
|
||||||
_httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
_httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -78,6 +78,8 @@ public sealed class MapExportService
|
|||||||
BuildStyle("drawing", "ff1679f9", "333c92fb"),
|
BuildStyle("drawing", "ff1679f9", "333c92fb"),
|
||||||
BuildStyle("poi", "ffff7a00", "33ff7a00"),
|
BuildStyle("poi", "ffff7a00", "33ff7a00"),
|
||||||
BuildStyle("gps-trail", "ff00a5ff", "2200a5ff"));
|
BuildStyle("gps-trail", "ff00a5ff", "2200a5ff"));
|
||||||
|
var categoryFolders = new Dictionary<string, XElement>(StringComparer.Ordinal);
|
||||||
|
var groupFolders = new Dictionary<(string Category, string Group), XElement>();
|
||||||
|
|
||||||
foreach (var feature in features.EnumerateArray())
|
foreach (var feature in features.EnumerateArray())
|
||||||
{
|
{
|
||||||
@@ -102,7 +104,31 @@ public sealed class MapExportService
|
|||||||
placemark.Add(extendedData);
|
placemark.Add(extendedData);
|
||||||
}
|
}
|
||||||
placemark.Add(BuildGeometry(geometry));
|
placemark.Add(BuildGeometry(geometry));
|
||||||
document.Add(placemark);
|
var categoryName = GetString(properties, "_lmeCategoryName")?.Trim();
|
||||||
|
var groupName = GetString(properties, "_lmeGroupName")?.Trim();
|
||||||
|
var parent = document;
|
||||||
|
if (!string.IsNullOrWhiteSpace(categoryName))
|
||||||
|
{
|
||||||
|
if (!categoryFolders.TryGetValue(categoryName, out var categoryFolder))
|
||||||
|
{
|
||||||
|
categoryFolder = new XElement(Kml + "Folder", new XElement(Kml + "name", categoryName));
|
||||||
|
categoryFolders[categoryName] = categoryFolder;
|
||||||
|
document.Add(categoryFolder);
|
||||||
|
}
|
||||||
|
parent = categoryFolder;
|
||||||
|
}
|
||||||
|
if (!string.IsNullOrWhiteSpace(groupName))
|
||||||
|
{
|
||||||
|
var key = (categoryName ?? string.Empty, groupName);
|
||||||
|
if (!groupFolders.TryGetValue(key, out var groupFolder))
|
||||||
|
{
|
||||||
|
groupFolder = new XElement(Kml + "Folder", new XElement(Kml + "name", groupName));
|
||||||
|
groupFolders[key] = groupFolder;
|
||||||
|
parent.Add(groupFolder);
|
||||||
|
}
|
||||||
|
parent = groupFolder;
|
||||||
|
}
|
||||||
|
parent.Add(placemark);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new XDocument(new XDeclaration("1.0", "utf-8", null), new XElement(Kml + "kml", document)).ToString();
|
return new XDocument(new XDeclaration("1.0", "utf-8", null), new XElement(Kml + "kml", document)).ToString();
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public sealed class NetworkLocationService
|
|||||||
|
|
||||||
public NetworkLocationService()
|
public NetworkLocationService()
|
||||||
{
|
{
|
||||||
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.18");
|
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.22");
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<NetworkLocationSnapshot?> GetApproximateLocationAsync(
|
public async Task<NetworkLocationSnapshot?> GetApproximateLocationAsync(
|
||||||
|
|||||||
+188
-11
@@ -176,10 +176,11 @@ input[type="checkbox"] {
|
|||||||
position: absolute;
|
position: absolute;
|
||||||
top: 72px;
|
top: 72px;
|
||||||
right: 12px;
|
right: 12px;
|
||||||
|
bottom: calc(var(--nav-height) + 8px);
|
||||||
z-index: 940;
|
z-index: 940;
|
||||||
display: grid;
|
display: grid;
|
||||||
width: min(320px, calc(100% - 24px));
|
box-sizing: border-box;
|
||||||
max-height: calc(100% - 152px);
|
width: min(480px, 50vw);
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
border: 1px solid var(--line);
|
border: 1px solid var(--line);
|
||||||
border-radius: 8px;
|
border-radius: 8px;
|
||||||
@@ -265,17 +266,30 @@ input[type="checkbox"] {
|
|||||||
.layer-manager-group,
|
.layer-manager-group,
|
||||||
.layer-manager-block,
|
.layer-manager-block,
|
||||||
.layer-manager-object {
|
.layer-manager-object {
|
||||||
border: 1px solid #dce3e6;
|
border: 1px solid var(--layer-group-border, #dce3e6);
|
||||||
border-radius: 6px;
|
border-radius: 6px;
|
||||||
background: #fff;
|
background: var(--layer-group-surface, #fff);
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-group > summary,
|
||||||
|
.layer-manager-block > summary {
|
||||||
|
background: var(--layer-group-parent, #f6f8f9);
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-object > summary {
|
||||||
|
background: var(--layer-group-surface, #fff);
|
||||||
}
|
}
|
||||||
|
|
||||||
.layer-manager-group > summary,
|
.layer-manager-group > summary,
|
||||||
.layer-manager-block > summary,
|
.layer-manager-block > summary,
|
||||||
.layer-manager-object > summary {
|
.layer-manager-object > summary {
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: 28px 20px minmax(0, 1fr) auto;
|
grid-template-columns: 28px minmax(0, 1fr) 50px;
|
||||||
align-items: center;
|
grid-template-areas:
|
||||||
|
"handle title count"
|
||||||
|
". visibility moves"
|
||||||
|
". actions moves";
|
||||||
|
align-items: start;
|
||||||
gap: 6px;
|
gap: 6px;
|
||||||
min-height: 38px;
|
min-height: 38px;
|
||||||
padding: 4px 6px;
|
padding: 4px 6px;
|
||||||
@@ -290,6 +304,7 @@ input[type="checkbox"] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.layer-drag-handle {
|
.layer-drag-handle {
|
||||||
|
grid-area: handle;
|
||||||
width: 28px;
|
width: 28px;
|
||||||
height: 28px;
|
height: 28px;
|
||||||
border: 0;
|
border: 0;
|
||||||
@@ -302,35 +317,197 @@ input[type="checkbox"] {
|
|||||||
cursor: grab;
|
cursor: grab;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.layer-row-actions {
|
||||||
|
grid-area: actions;
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: minmax(0, 1fr);
|
||||||
|
width: min(130px, 100%);
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-group > summary > input,
|
||||||
|
.layer-manager-block > summary > input,
|
||||||
|
.layer-manager-object > summary > input {
|
||||||
|
grid-area: visibility;
|
||||||
|
justify-self: start;
|
||||||
|
width: 20px;
|
||||||
|
height: 20px;
|
||||||
|
margin: 1px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-rename-button,
|
||||||
|
.layer-remove-button {
|
||||||
|
width: 100%;
|
||||||
|
min-height: 28px;
|
||||||
|
min-width: 0;
|
||||||
|
padding: 4px;
|
||||||
|
border: 1px solid #bfd4cd;
|
||||||
|
border-radius: 4px;
|
||||||
|
background: #eef8f5;
|
||||||
|
color: var(--accent-strong);
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: 800;
|
||||||
|
line-height: 1.15;
|
||||||
|
overflow-wrap: anywhere;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-rename-button:active {
|
||||||
|
background: #d9eee7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-remove-button {
|
||||||
|
border-color: #fecaca;
|
||||||
|
background: #fff1f2;
|
||||||
|
color: #b42318;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-remove-button:active {
|
||||||
|
background: #ffe4e6;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-move-buttons {
|
||||||
|
grid-area: moves;
|
||||||
|
display: inline-grid;
|
||||||
|
grid-template-columns: 24px 24px;
|
||||||
|
gap: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-move-buttons button {
|
||||||
|
width: 24px;
|
||||||
|
height: 28px;
|
||||||
|
padding: 0;
|
||||||
|
border: 1px solid #cbd5da;
|
||||||
|
border-radius: 4px;
|
||||||
|
background: #f6f8f9;
|
||||||
|
color: var(--ink);
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 800;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-move-buttons button:active {
|
||||||
|
background: #dce8ec;
|
||||||
|
}
|
||||||
|
|
||||||
.layer-manager-title {
|
.layer-manager-title {
|
||||||
|
grid-area: title;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
overflow-wrap: anywhere;
|
overflow-wrap: anywhere;
|
||||||
|
color: var(--layer-group-accent, var(--ink));
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
font-weight: 700;
|
}
|
||||||
|
|
||||||
|
.layer-manager-group > summary > .layer-manager-title {
|
||||||
|
font-size: 13px;
|
||||||
|
font-weight: 800;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-block > summary > .layer-manager-title {
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: 800;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-object > summary > .layer-manager-title {
|
||||||
|
font-size: 11px;
|
||||||
|
font-style: italic;
|
||||||
|
font-weight: 400;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layer-manager-count {
|
.layer-manager-count {
|
||||||
|
grid-area: count;
|
||||||
|
justify-self: end;
|
||||||
color: var(--muted);
|
color: var(--muted);
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layer-manager-children {
|
.layer-manager-children {
|
||||||
padding: 0 5px 5px 18px;
|
margin-left: 4px;
|
||||||
|
padding: 4px 3px 5px 6px;
|
||||||
|
border-left: 2px solid var(--layer-group-border, #dce3e6);
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-block > .layer-manager-children {
|
||||||
|
margin-left: 5px;
|
||||||
|
padding-left: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-object {
|
||||||
|
margin-left: 3px;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-object > summary {
|
||||||
|
grid-template-columns: 24px minmax(0, 1fr) 46px;
|
||||||
|
gap: 4px;
|
||||||
|
padding: 3px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-object > summary > .layer-drag-handle {
|
||||||
|
width: 24px;
|
||||||
|
height: 24px;
|
||||||
|
font-size: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-object > summary > .layer-move-buttons {
|
||||||
|
grid-template-columns: 22px 22px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-object > summary > .layer-move-buttons button {
|
||||||
|
width: 22px;
|
||||||
|
height: 24px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-object > summary .layer-rename-button,
|
||||||
|
.layer-manager-object > summary .layer-remove-button {
|
||||||
|
min-height: 24px;
|
||||||
|
font-size: 9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.layer-manager-details {
|
.layer-manager-details {
|
||||||
display: grid;
|
display: grid;
|
||||||
gap: 2px;
|
gap: 2px;
|
||||||
padding: 0 8px 7px 40px;
|
padding: 0 6px 7px 12px;
|
||||||
color: var(--muted);
|
color: var(--muted);
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.layer-manager-suboption {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 18px minmax(0, 1fr);
|
||||||
|
align-items: center;
|
||||||
|
gap: 6px;
|
||||||
|
min-height: 30px;
|
||||||
|
color: var(--ink);
|
||||||
|
font-size: 11px;
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-suboption input {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-info {
|
||||||
|
display: grid;
|
||||||
|
gap: 2px;
|
||||||
|
padding: 3px 0 0 24px;
|
||||||
|
}
|
||||||
|
|
||||||
.layer-manager-dragging {
|
.layer-manager-dragging {
|
||||||
opacity: 0.55;
|
opacity: 0.55;
|
||||||
outline: 2px solid #2563eb;
|
outline: 2px solid #2563eb;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.layer-manager-object-selected > summary {
|
||||||
|
background: #fff0fb;
|
||||||
|
box-shadow: inset 3px 0 #ff00d4;
|
||||||
|
}
|
||||||
|
|
||||||
|
.layer-manager-parent-highlighted > summary,
|
||||||
|
.layer-manager-parent-selected > summary {
|
||||||
|
background: #fff0fb;
|
||||||
|
box-shadow: inset 3px 0 #ff00d4;
|
||||||
|
}
|
||||||
|
|
||||||
.gps-overlay {
|
.gps-overlay {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 72px;
|
top: 72px;
|
||||||
@@ -840,8 +1017,8 @@ footer {
|
|||||||
.map-layer-panel {
|
.map-layer-panel {
|
||||||
top: 68px;
|
top: 68px;
|
||||||
right: 8px;
|
right: 8px;
|
||||||
width: min(320px, calc(100% - 16px));
|
bottom: calc(var(--nav-height) + 8px);
|
||||||
max-height: calc(100% - 144px);
|
width: 50vw;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tool-sheet {
|
.tool-sheet {
|
||||||
|
|||||||
+897
-46
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user