Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a9b1d74983 | ||
|
|
c093d88677 |
No files matched your search
@@ -206,7 +206,7 @@
|
|||||||
</section>
|
</section>
|
||||||
</section>
|
</section>
|
||||||
}
|
}
|
||||||
else if (ActiveTab == "projects")
|
else if (ActiveTab == "save")
|
||||||
{
|
{
|
||||||
<section class="panel-content">
|
<section class="panel-content">
|
||||||
<section class="panel-section">
|
<section class="panel-section">
|
||||||
@@ -255,6 +255,11 @@
|
|||||||
<small class="field-help">KML e KMZ sono compatibili con Google Earth. Gli sfondi satellitari e il WMS non vengono incorporati nel file vettoriale.</small>
|
<small class="field-help">KML e KMZ sono compatibili con Google Earth. Gli sfondi satellitari e il WMS non vengono incorporati nel file vettoriale.</small>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
}
|
||||||
|
else if (ActiveTab == "projects")
|
||||||
|
{
|
||||||
|
<section class="panel-content">
|
||||||
<section class="panel-section">
|
<section class="panel-section">
|
||||||
<h2>Salva progetto</h2>
|
<h2>Salva progetto</h2>
|
||||||
<label>
|
<label>
|
||||||
@@ -286,6 +291,23 @@
|
|||||||
</div>
|
</div>
|
||||||
<div class="project-archive-state">@ProjectArchiveMessage</div>
|
<div class="project-archive-state">@ProjectArchiveMessage</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section class="panel-section">
|
||||||
|
<h2>Visualizzazione progetto</h2>
|
||||||
|
<label class="toggle-line project-save-option">
|
||||||
|
<input type="checkbox" checked="@ShowImportedSheetLayer" @onchange="ToggleImportedSheetLayer" />
|
||||||
|
<span>Mostra cornice/layer del foglio importato</span>
|
||||||
|
</label>
|
||||||
|
<small class="field-help">Il comando agisce subito sulla mappa e sui dati del progetto caricato.</small>
|
||||||
|
<label class="toggle-line project-save-option">
|
||||||
|
<input type="checkbox" checked="@ShowImportedMeasurements" @onchange="ToggleImportedMeasurements" />
|
||||||
|
<span>Mostra misure dei file caricati</span>
|
||||||
|
</label>
|
||||||
|
<label class="toggle-line project-save-option">
|
||||||
|
<input type="checkbox" checked="@ShowDrawingMeasurements" @onchange="ToggleDrawingMeasurements" />
|
||||||
|
<span>Mostra misure dei disegni</span>
|
||||||
|
</label>
|
||||||
|
</section>
|
||||||
</section>
|
</section>
|
||||||
}
|
}
|
||||||
else if (ActiveTab == "settings")
|
else if (ActiveTab == "settings")
|
||||||
@@ -385,7 +407,8 @@
|
|||||||
<button class="@(ActiveTab == "map" || ActiveTab == "search" ? "active" : null)" @onclick='() => SelectTab("map")'>Mappa</button>
|
<button class="@(ActiveTab == "map" || ActiveTab == "search" ? "active" : null)" @onclick='() => SelectTab("map")'>Mappa</button>
|
||||||
<button class="@(ActiveTab == "cadastre" ? "active" : null)" @onclick='() => SelectTab("cadastre")'>Catasto</button>
|
<button class="@(ActiveTab == "cadastre" ? "active" : null)" @onclick='() => SelectTab("cadastre")'>Catasto</button>
|
||||||
<button class="@(ActiveTab == "data" ? "active" : null)" @onclick='() => SelectTab("data")'>Dati</button>
|
<button class="@(ActiveTab == "data" ? "active" : null)" @onclick='() => SelectTab("data")'>Dati</button>
|
||||||
<button class="@(ActiveTab == "projects" ? "active" : null)" @onclick='() => SelectTab("projects")'>Salvataggio</button>
|
<button class="@(ActiveTab == "projects" ? "active" : null)" @onclick='() => SelectTab("projects")'>Progetti</button>
|
||||||
|
<button class="@(ActiveTab == "save" ? "active" : null)" @onclick='() => SelectTab("save")'>Salvataggio</button>
|
||||||
<button class="@(ActiveTab == "settings" ? "active" : null)" @onclick='() => SelectTab("settings")'>Impostazioni</button>
|
<button class="@(ActiveTab == "settings" ? "active" : null)" @onclick='() => SelectTab("settings")'>Impostazioni</button>
|
||||||
</nav>
|
</nav>
|
||||||
</section>
|
</section>
|
||||||
@@ -451,7 +474,8 @@
|
|||||||
{
|
{
|
||||||
"cadastre" => "Ricerca catastale",
|
"cadastre" => "Ricerca catastale",
|
||||||
"data" => "Dati e disegni",
|
"data" => "Dati e disegni",
|
||||||
"projects" => "Salvataggio ed esportazione",
|
"projects" => "Archivio progetti",
|
||||||
|
"save" => "Salvataggio ed esportazione",
|
||||||
"settings" => "Impostazioni",
|
"settings" => "Impostazioni",
|
||||||
_ => string.Empty
|
_ => string.Empty
|
||||||
};
|
};
|
||||||
@@ -460,7 +484,8 @@
|
|||||||
{
|
{
|
||||||
"cadastre" => "Regione, Comune, Foglio, Particella",
|
"cadastre" => "Regione, Comune, Foglio, Particella",
|
||||||
"data" => "File GIS, misure e POI",
|
"data" => "File GIS, misure e POI",
|
||||||
"projects" => "Progetti e file GIS",
|
"projects" => "Salva, apri e visualizza i tuoi lavori",
|
||||||
|
"save" => "Esporta file GIS",
|
||||||
"settings" => "Mappa, GPS e servizi ufficiali",
|
"settings" => "Mappa, GPS e servizi ufficiali",
|
||||||
_ => string.Empty
|
_ => string.Empty
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -28,8 +28,8 @@
|
|||||||
<ApplicationId>com.companyname.lmemappecatastaliapp</ApplicationId>
|
<ApplicationId>com.companyname.lmemappecatastaliapp</ApplicationId>
|
||||||
|
|
||||||
<!-- Versions -->
|
<!-- Versions -->
|
||||||
<ApplicationDisplayVersion>0.2.13</ApplicationDisplayVersion>
|
<ApplicationDisplayVersion>0.2.15</ApplicationDisplayVersion>
|
||||||
<ApplicationVersion>17</ApplicationVersion>
|
<ApplicationVersion>19</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>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ App .NET MAUI Blazor Hybrid per Android, iOS, Mac Catalyst e Windows, pensata pe
|
|||||||
- Misure permanenti attivabili anche sui layer importati da KML, KMZ e GeoJSON.
|
- Misure permanenti attivabili anche sui layer importati da KML, KMZ e GeoJSON.
|
||||||
- Toolbar di disegno completa di icone, modifica, eliminazione singola e pulizia di tutti i disegni/POI.
|
- Toolbar di disegno completa di icone, modifica, eliminazione singola e pulizia di tutti i disegni/POI.
|
||||||
- Archivio multiprogetto nella cartella privata dell'app, con nome, selezione da elenco, sovrascrittura ed eliminazione.
|
- Archivio multiprogetto nella cartella privata dell'app, con nome, selezione da elenco, sovrascrittura ed eliminazione.
|
||||||
- Tab `Salvataggio` con esportazione selettiva dell'intera mappa in GeoJSON, KML o KMZ: dati importati, cornici/fogli, particelle catastali rosse, disegni, cerchi, POI e traccia GPS.
|
- Tab distinti `Progetti` e `Salvataggio`: il primo gestisce archivio e opzioni live di visualizzazione, il secondo esporta selettivamente l'intera mappa in GeoJSON, KML o KMZ.
|
||||||
- Ogni progetto salva file GIS, POI, disegni, traccia, inquadratura e tutte le opzioni di visualizzazione: sfondo, layer catastali, trasparenza, misure, foglio importato, barra strumenti e preferenze GPS.
|
- Ogni progetto salva file GIS, POI, disegni, traccia, inquadratura e tutte le opzioni di visualizzazione: sfondo, layer catastali, trasparenza, misure, foglio importato, barra strumenti e preferenze GPS.
|
||||||
- GPS nativo MAUI ad alta precisione con permessi Android/iOS.
|
- GPS nativo MAUI ad alta precisione con permessi Android/iOS.
|
||||||
- Centratura automatica una tantum all'apertura: prima tramite posizione approssimativa della connessione Internet, poi tramite singola lettura GPS se la rete non restituisce una posizione; nessun punto o cerchio viene mostrato e il tracking continuo non viene avviato.
|
- Centratura automatica una tantum all'apertura: prima tramite posizione approssimativa della connessione Internet, poi tramite singola lettura GPS se la rete non restituisce una posizione; nessun punto o cerchio viene mostrato e il tracking continuo non viene avviato.
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public sealed class AzureMapsService
|
|||||||
|
|
||||||
public AzureMapsService()
|
public AzureMapsService()
|
||||||
{
|
{
|
||||||
_httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.13");
|
_httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.15");
|
||||||
_httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
_httpClient.DefaultRequestHeaders.Accept.ParseAdd("application/json");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public sealed class NetworkLocationService
|
|||||||
|
|
||||||
public NetworkLocationService()
|
public NetworkLocationService()
|
||||||
{
|
{
|
||||||
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.13");
|
httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("LMEMappeCatastali/0.2.15");
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<NetworkLocationSnapshot?> GetApproximateLocationAsync(
|
public async Task<NetworkLocationSnapshot?> GetApproximateLocationAsync(
|
||||||
|
|||||||
+4
-3
@@ -674,7 +674,7 @@ label {
|
|||||||
left: 0;
|
left: 0;
|
||||||
z-index: 1200;
|
z-index: 1200;
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(5, minmax(0, 1fr));
|
grid-template-columns: repeat(6, minmax(0, 1fr));
|
||||||
height: var(--nav-height);
|
height: var(--nav-height);
|
||||||
padding-bottom: env(safe-area-inset-bottom);
|
padding-bottom: env(safe-area-inset-bottom);
|
||||||
border-top: 1px solid #bcc7cd;
|
border-top: 1px solid #bcc7cd;
|
||||||
@@ -801,7 +801,8 @@ footer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.bottom-tabs button {
|
.bottom-tabs button {
|
||||||
font-size: 11px;
|
padding: 0 2px;
|
||||||
|
font-size: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.wms-preview {
|
.wms-preview {
|
||||||
@@ -823,6 +824,6 @@ footer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
.bottom-tabs button {
|
.bottom-tabs button {
|
||||||
font-size: 10px;
|
font-size: 9px;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+12
-22
@@ -469,23 +469,9 @@ function bindFileImport() {
|
|||||||
try {
|
try {
|
||||||
const result = await readGisFile(file);
|
const result = await readGisFile(file);
|
||||||
const geojson = result.geojson;
|
const geojson = result.geojson;
|
||||||
const parcelLayer = L.geoJSON(geojson, {
|
const parcelLayer = addImportedFeatures(geojson);
|
||||||
style: { color: "#22c55e", weight: 3, opacity: 0.95, fillOpacity: 0.18 },
|
|
||||||
pointToLayer: (feature, latlng) => L.circleMarker(latlng, { radius: 7, color: "#22c55e", fillColor: "#ffffff", fillOpacity: 0.9 }),
|
|
||||||
onEachFeature: (feature, layer) => {
|
|
||||||
const name = feature?.properties?.name || file.name;
|
|
||||||
layer.bindPopup(`<strong>${escapeHtml(name)}</strong>`);
|
|
||||||
}
|
|
||||||
}).addTo(lmeState.imported);
|
|
||||||
const sheetGeojson = result.sheetGeojson || emptyFeatureCollection();
|
const sheetGeojson = result.sheetGeojson || emptyFeatureCollection();
|
||||||
const sheetLayer = L.geoJSON(sheetGeojson, {
|
const sheetLayer = addImportedSheetFeatures(sheetGeojson);
|
||||||
style: { color: "#15803d", weight: 3, opacity: 0.85, fillOpacity: 0.04, dashArray: "9 7" },
|
|
||||||
pointToLayer: (feature, latlng) => L.circleMarker(latlng, { radius: 6, color: "#15803d", fillOpacity: 0.25 }),
|
|
||||||
onEachFeature: (feature, layer) => {
|
|
||||||
const name = feature?.properties?.name || "Foglio catastale importato";
|
|
||||||
layer.bindPopup(`<strong>${escapeHtml(name)}</strong>`);
|
|
||||||
}
|
|
||||||
}).addTo(lmeState.importedSheets);
|
|
||||||
applyImportedSheetVisibility();
|
applyImportedSheetVisibility();
|
||||||
fitLayer(geojson.features.length ? parcelLayer : sheetLayer);
|
fitLayer(geojson.features.length ? parcelLayer : sheetLayer);
|
||||||
refreshImportedMeasurements();
|
refreshImportedMeasurements();
|
||||||
@@ -904,7 +890,7 @@ function setImportedSheetLayerVisible(enabled) {
|
|||||||
applyImportedSheetVisibility();
|
applyImportedSheetVisibility();
|
||||||
const count = lmeState.importedSheets?.toGeoJSON()?.features?.length || 0;
|
const count = lmeState.importedSheets?.toGeoJSON()?.features?.length || 0;
|
||||||
setInfo(lmeState.importedSheetsVisible
|
setInfo(lmeState.importedSheetsVisible
|
||||||
? (count ? `Layer del foglio importato visibile (${count} elementi).` : "Il layer del foglio sara visibile quando verra importato.")
|
? (count ? `Layer del foglio importato visibile (${count} elementi).` : "Nessun layer del foglio importato: ricarica il KML/KMZ con 'includi anche il layer del foglio' attivo.")
|
||||||
: "Layer del foglio importato nascosto; le particelle restano visibili.");
|
: "Layer del foglio importato nascosto; le particelle restano visibili.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -942,11 +928,12 @@ function addImportedFeatures(geojson) {
|
|||||||
|
|
||||||
function addImportedSheetFeatures(geojson) {
|
function addImportedSheetFeatures(geojson) {
|
||||||
return L.geoJSON(geojson || emptyFeatureCollection(), {
|
return L.geoJSON(geojson || emptyFeatureCollection(), {
|
||||||
style: { color: "#15803d", weight: 3, opacity: 0.85, fillOpacity: 0.04, dashArray: "9 7" },
|
style: { color: "#f59e0b", weight: 4, opacity: 1, fillOpacity: 0.03, dashArray: "10 6" },
|
||||||
pointToLayer: (feature, latlng) => L.circleMarker(latlng, {
|
pointToLayer: (feature, latlng) => L.circleMarker(latlng, {
|
||||||
radius: 6,
|
radius: 7,
|
||||||
color: "#15803d",
|
color: "#f59e0b",
|
||||||
fillOpacity: 0.25
|
fillColor: "#ffffff",
|
||||||
|
fillOpacity: 0.85
|
||||||
}),
|
}),
|
||||||
onEachFeature: bindStoredFeaturePopup
|
onEachFeature: bindStoredFeaturePopup
|
||||||
}).addTo(lmeState.importedSheets);
|
}).addTo(lmeState.importedSheets);
|
||||||
@@ -960,8 +947,11 @@ function applyImportedSheetVisibility() {
|
|||||||
if (!lmeState.map.hasLayer(lmeState.importedSheets)) {
|
if (!lmeState.map.hasLayer(lmeState.importedSheets)) {
|
||||||
lmeState.importedSheets.addTo(lmeState.map);
|
lmeState.importedSheets.addTo(lmeState.map);
|
||||||
}
|
}
|
||||||
lmeState.importedSheets.bringToBack();
|
lmeState.importedSheets.bringToFront();
|
||||||
lmeState.imported.bringToFront();
|
lmeState.imported.bringToFront();
|
||||||
|
lmeState.selectedParcelsLayer.bringToFront();
|
||||||
|
lmeState.gpsParcelLayer.bringToFront();
|
||||||
|
lmeState.drawings.bringToFront();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (lmeState.map.hasLayer(lmeState.importedSheets)) {
|
if (lmeState.map.hasLayer(lmeState.importedSheets)) {
|
||||||
|
|||||||
Reference in new issue
Block a user