Add WMS support and measurement functionality

- Implemented WMS layer handling for Slovenian aerial imagery and overlays for cadastral parcels and forest roads.
- Added distance measurement feature allowing users to measure distances on the map with long press interactions.
- Updated localization files for Croatian, Italian, and Slovenian languages to include new measurement and WMS-related strings.
- Enhanced the map layer model to support WMS-specific properties.
- Introduced a new tile provider for debugging WMS requests.
- Updated the drawing toolbar to include measurement mode and clear measurement functionality.
- Integrated SharedPreferences to persist overlay visibility states across app sessions.
- Added utility functions for handling the Slovenian coordinate reference system (EPSG:3794).
This commit is contained in:
Janez T
2025-10-27 21:49:58 +01:00
parent a03cc4a363
commit a4dc85d130
29 changed files with 3327 additions and 20 deletions

View File

@@ -649,6 +649,44 @@
"description": "Beschreibung für Rechteckzeichnungsmodus"
},
"measureDistance": "Entfernung messen",
"@measureDistance": {
"description": "Kartenzeichnungsmodus: Entfernung messen"
},
"measureDistanceDesc": "Zwei Punkte lang drücken zum Messen",
"@measureDistanceDesc": {
"description": "Beschreibung für Entfernungsmessungsmodus"
},
"clearMeasurement": "Messung löschen",
"@clearMeasurement": {
"description": "Tooltip zum Löschen der Messung"
},
"distanceLabel": "Entfernung: {distance}",
"@distanceLabel": {
"description": "Beschriftung mit gemessener Entfernung",
"placeholders": {
"distance": {"type": "String"}
}
},
"longPressForSecondPoint": "Langer Druck für zweiten Punkt",
"@longPressForSecondPoint": {
"description": "Anweisung wenn erster Messpunkt gesetzt ist"
},
"longPressToStartMeasurement": "Langer Druck für ersten Punkt",
"@longPressToStartMeasurement": {
"description": "Anweisung zum Starten der Messung"
},
"longPressToStartNewMeasurement": "Langer Druck für neue Messung",
"@longPressToStartNewMeasurement": {
"description": "Anweisung zum Neustarten der Messung nach Abschluss"
},
"shareDrawings": "Zeichnungen teilen",
"@shareDrawings": {
"description": "Aktion zum Teilen von Zeichnungen im Netzwerk"
@@ -2551,5 +2589,11 @@
"currentVersion": "Aktuell",
"latestVersion": "Neueste",
"downloadUpdate": "Herunterladen",
"updateLater": "Später"
"updateLater": "Später",
"cadastralParcels": "Katasterparzellen",
"forestRoads": "Waldwege",
"showCadastralParcels": "Katasterparzellen anzeigen",
"showForestRoads": "Waldwege anzeigen",
"wmsOverlays": "WMS Überlagerungen"
}

View File

@@ -649,6 +649,44 @@
"description": "Description for rectangle drawing mode"
},
"measureDistance": "Measure Distance",
"@measureDistance": {
"description": "Map drawing mode: measure distance"
},
"measureDistanceDesc": "Long press two points to measure",
"@measureDistanceDesc": {
"description": "Description for distance measurement mode"
},
"clearMeasurement": "Clear Measurement",
"@clearMeasurement": {
"description": "Tooltip to clear measurement"
},
"distanceLabel": "Distance: {distance}",
"@distanceLabel": {
"description": "Label showing measured distance",
"placeholders": {
"distance": {"type": "String"}
}
},
"longPressForSecondPoint": "Long press for second point",
"@longPressForSecondPoint": {
"description": "Instruction when first measurement point is set"
},
"longPressToStartMeasurement": "Long press to set first point",
"@longPressToStartMeasurement": {
"description": "Instruction to start measurement"
},
"longPressToStartNewMeasurement": "Long press to start new measurement",
"@longPressToStartNewMeasurement": {
"description": "Instruction to restart measurement after completion"
},
"shareDrawings": "Share Drawings",
"@shareDrawings": {
"description": "Action to share drawings to network"
@@ -3163,5 +3201,30 @@
"updateLater": "Later",
"@updateLater": {
"description": "Button to dismiss update dialog"
},
"cadastralParcels": "Cadastral Parcels",
"@cadastralParcels": {
"description": "Label for cadastral parcels WMS overlay layer"
},
"forestRoads": "Forest Roads",
"@forestRoads": {
"description": "Label for forest roads WMS overlay layer"
},
"showCadastralParcels": "Show Cadastral Parcels",
"@showCadastralParcels": {
"description": "Tooltip for cadastral parcels overlay toggle button"
},
"showForestRoads": "Show Forest Roads",
"@showForestRoads": {
"description": "Tooltip for forest roads overlay toggle button"
},
"wmsOverlays": "WMS Overlays",
"@wmsOverlays": {
"description": "Section header for WMS overlay layers in layer selector"
}
}

View File

@@ -649,6 +649,44 @@
"description": "Descripción del modo de dibujo de rectángulo"
},
"measureDistance": "Medir distancia",
"@measureDistance": {
"description": "Modo de dibujo del mapa: medir distancia"
},
"measureDistanceDesc": "Presión prolongada en dos puntos para medir",
"@measureDistanceDesc": {
"description": "Descripción del modo de medición de distancia"
},
"clearMeasurement": "Borrar medición",
"@clearMeasurement": {
"description": "Tooltip para borrar la medición"
},
"distanceLabel": "Distancia: {distance}",
"@distanceLabel": {
"description": "Etiqueta que muestra la distancia medida",
"placeholders": {
"distance": {"type": "String"}
}
},
"longPressForSecondPoint": "Presión prolongada para el segundo punto",
"@longPressForSecondPoint": {
"description": "Instrucción cuando se ha establecido el primer punto de medición"
},
"longPressToStartMeasurement": "Presión prolongada para establecer el primer punto",
"@longPressToStartMeasurement": {
"description": "Instrucción para comenzar la medición"
},
"longPressToStartNewMeasurement": "Presión prolongada para nueva medición",
"@longPressToStartNewMeasurement": {
"description": "Instrucción para reiniciar la medición después de completarla"
},
"shareDrawings": "Compartir dibujos",
"@shareDrawings": {
"description": "Acción para compartir dibujos a la red"
@@ -2546,5 +2584,11 @@
"currentVersion": "Actual",
"latestVersion": "Última",
"downloadUpdate": "Descargar",
"updateLater": "Más Tarde"
"updateLater": "Más Tarde",
"cadastralParcels": "Parcelas Catastrales",
"forestRoads": "Caminos Forestales",
"showCadastralParcels": "Mostrar parcelas catastrales",
"showForestRoads": "Mostrar caminos forestales",
"wmsOverlays": "Superposiciones WMS"
}

View File

@@ -649,6 +649,44 @@
"description": "Description du mode de dessin de rectangle"
},
"measureDistance": "Mesurer la distance",
"@measureDistance": {
"description": "Mode de dessin de carte : mesurer la distance"
},
"measureDistanceDesc": "Appui long sur deux points pour mesurer",
"@measureDistanceDesc": {
"description": "Description du mode de mesure de distance"
},
"clearMeasurement": "Effacer la mesure",
"@clearMeasurement": {
"description": "Infobulle pour effacer la mesure"
},
"distanceLabel": "Distance : {distance}",
"@distanceLabel": {
"description": "Étiquette affichant la distance mesurée",
"placeholders": {
"distance": {"type": "String"}
}
},
"longPressForSecondPoint": "Appui long pour le deuxième point",
"@longPressForSecondPoint": {
"description": "Instruction lorsque le premier point de mesure est défini"
},
"longPressToStartMeasurement": "Appui long pour définir le premier point",
"@longPressToStartMeasurement": {
"description": "Instruction pour commencer la mesure"
},
"longPressToStartNewMeasurement": "Appui long pour nouvelle mesure",
"@longPressToStartNewMeasurement": {
"description": "Instruction pour redémarrer la mesure après achèvement"
},
"shareDrawings": "Partager les dessins",
"@shareDrawings": {
"description": "Action pour partager les dessins sur le réseau"
@@ -2551,5 +2589,11 @@
"currentVersion": "Actuelle",
"latestVersion": "Dernière",
"downloadUpdate": "Télécharger",
"updateLater": "Plus Tard"
"updateLater": "Plus Tard",
"cadastralParcels": "Parcelles Cadastrales",
"forestRoads": "Chemins Forestiers",
"showCadastralParcels": "Afficher les parcelles cadastrales",
"showForestRoads": "Afficher les chemins forestiers",
"wmsOverlays": "Superpositions WMS"
}

View File

@@ -227,6 +227,20 @@
"drawRectangleDesc": "Nacrtaj pravokutno područje na karti",
"measureDistance": "Izmjeri udaljenost",
"measureDistanceDesc": "Dugi pritisak na dvije točke za mjerenje",
"clearMeasurement": "Očisti mjerenje",
"distanceLabel": "Udaljenost: {distance}",
"longPressForSecondPoint": "Dugi pritisak za drugu točku",
"longPressToStartMeasurement": "Dugi pritisak za prvu točku",
"longPressToStartNewMeasurement": "Dugi pritisak za novo mjerenje",
"shareDrawings": "Podijeli crteže",
"clearAllDrawings": "Očisti sve crteže",
@@ -955,5 +969,11 @@
"currentVersion": "Trenutna",
"latestVersion": "Najnovija",
"downloadUpdate": "Preuzmi",
"updateLater": "Kasnije"
"updateLater": "Kasnije",
"cadastralParcels": "Katastarske čestice",
"forestRoads": "Šumske ceste",
"showCadastralParcels": "Prikaži katastarske čestice",
"showForestRoads": "Prikaži šumske ceste",
"wmsOverlays": "WMS Prekrivanja"
}

View File

@@ -649,6 +649,44 @@
"description": "Descrizione per la modalità disegno rettangolo"
},
"measureDistance": "Misura Distanza",
"@measureDistance": {
"description": "Modalità disegno mappa: misura distanza"
},
"measureDistanceDesc": "Premi a lungo su due punti per misurare",
"@measureDistanceDesc": {
"description": "Descrizione per la modalità misurazione distanza"
},
"clearMeasurement": "Cancella Misurazione",
"@clearMeasurement": {
"description": "Tooltip per cancellare la misurazione"
},
"distanceLabel": "Distanza: {distance}",
"@distanceLabel": {
"description": "Etichetta che mostra la distanza misurata",
"placeholders": {
"distance": {"type": "String"}
}
},
"longPressForSecondPoint": "Premi a lungo per il secondo punto",
"@longPressForSecondPoint": {
"description": "Istruzione quando è impostato il primo punto di misurazione"
},
"longPressToStartMeasurement": "Premi a lungo per impostare il primo punto",
"@longPressToStartMeasurement": {
"description": "Istruzione per avviare la misurazione"
},
"longPressToStartNewMeasurement": "Premi a lungo per nuova misurazione",
"@longPressToStartNewMeasurement": {
"description": "Istruzione per riavviare la misurazione dopo il completamento"
},
"shareDrawings": "Condividi Disegni",
"@shareDrawings": {
"description": "Azione per condividere disegni sulla rete"
@@ -2551,5 +2589,11 @@
"currentVersion": "Attuale",
"latestVersion": "Ultima",
"downloadUpdate": "Scarica",
"updateLater": "Più Tardi"
"updateLater": "Più Tardi",
"cadastralParcels": "Particelle Catastali",
"forestRoads": "Strade Forestali",
"showCadastralParcels": "Mostra particelle catastali",
"showForestRoads": "Mostra strade forestali",
"wmsOverlays": "Sovrapposizioni WMS"
}

View File

@@ -791,6 +791,48 @@ abstract class AppLocalizations {
/// **'Draw a rectangular area on the map'**
String get drawRectangleDesc;
/// Map drawing mode: measure distance
///
/// In en, this message translates to:
/// **'Measure Distance'**
String get measureDistance;
/// Description for distance measurement mode
///
/// In en, this message translates to:
/// **'Long press two points to measure'**
String get measureDistanceDesc;
/// Tooltip to clear measurement
///
/// In en, this message translates to:
/// **'Clear Measurement'**
String get clearMeasurement;
/// Label showing measured distance
///
/// In en, this message translates to:
/// **'Distance: {distance}'**
String distanceLabel(String distance);
/// Instruction when first measurement point is set
///
/// In en, this message translates to:
/// **'Long press for second point'**
String get longPressForSecondPoint;
/// Instruction to start measurement
///
/// In en, this message translates to:
/// **'Long press to set first point'**
String get longPressToStartMeasurement;
/// Instruction to restart measurement after completion
///
/// In en, this message translates to:
/// **'Long press to start new measurement'**
String get longPressToStartNewMeasurement;
/// Action to share drawings to network
///
/// In en, this message translates to:
@@ -3374,6 +3416,36 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Later'**
String get updateLater;
/// Label for cadastral parcels WMS overlay layer
///
/// In en, this message translates to:
/// **'Cadastral Parcels'**
String get cadastralParcels;
/// Label for forest roads WMS overlay layer
///
/// In en, this message translates to:
/// **'Forest Roads'**
String get forestRoads;
/// Tooltip for cadastral parcels overlay toggle button
///
/// In en, this message translates to:
/// **'Show Cadastral Parcels'**
String get showCadastralParcels;
/// Tooltip for forest roads overlay toggle button
///
/// In en, this message translates to:
/// **'Show Forest Roads'**
String get showForestRoads;
/// Section header for WMS overlay layers in layer selector
///
/// In en, this message translates to:
/// **'WMS Overlays'**
String get wmsOverlays;
}
class _AppLocalizationsDelegate

View File

@@ -395,6 +395,29 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get drawRectangleDesc => 'Rechteckigen Bereich auf der Karte zeichnen';
@override
String get measureDistance => 'Entfernung messen';
@override
String get measureDistanceDesc => 'Zwei Punkte lang drücken zum Messen';
@override
String get clearMeasurement => 'Messung löschen';
@override
String distanceLabel(String distance) {
return 'Entfernung: $distance';
}
@override
String get longPressForSecondPoint => 'Langer Druck für zweiten Punkt';
@override
String get longPressToStartMeasurement => 'Langer Druck für ersten Punkt';
@override
String get longPressToStartNewMeasurement => 'Langer Druck für neue Messung';
@override
String get shareDrawings => 'Zeichnungen teilen';
@@ -1885,4 +1908,19 @@ class AppLocalizationsDe extends AppLocalizations {
@override
String get updateLater => 'Später';
@override
String get cadastralParcels => 'Katasterparzellen';
@override
String get forestRoads => 'Waldwege';
@override
String get showCadastralParcels => 'Katasterparzellen anzeigen';
@override
String get showForestRoads => 'Waldwege anzeigen';
@override
String get wmsOverlays => 'WMS Überlagerungen';
}

View File

@@ -392,6 +392,30 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get drawRectangleDesc => 'Draw a rectangular area on the map';
@override
String get measureDistance => 'Measure Distance';
@override
String get measureDistanceDesc => 'Long press two points to measure';
@override
String get clearMeasurement => 'Clear Measurement';
@override
String distanceLabel(String distance) {
return 'Distance: $distance';
}
@override
String get longPressForSecondPoint => 'Long press for second point';
@override
String get longPressToStartMeasurement => 'Long press to set first point';
@override
String get longPressToStartNewMeasurement =>
'Long press to start new measurement';
@override
String get shareDrawings => 'Share Drawings';
@@ -1864,4 +1888,19 @@ class AppLocalizationsEn extends AppLocalizations {
@override
String get updateLater => 'Later';
@override
String get cadastralParcels => 'Cadastral Parcels';
@override
String get forestRoads => 'Forest Roads';
@override
String get showCadastralParcels => 'Show Cadastral Parcels';
@override
String get showForestRoads => 'Show Forest Roads';
@override
String get wmsOverlays => 'WMS Overlays';
}

View File

@@ -393,6 +393,33 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get drawRectangleDesc => 'Dibujar un área rectangular en el mapa';
@override
String get measureDistance => 'Medir distancia';
@override
String get measureDistanceDesc =>
'Presión prolongada en dos puntos para medir';
@override
String get clearMeasurement => 'Borrar medición';
@override
String distanceLabel(String distance) {
return 'Distancia: $distance';
}
@override
String get longPressForSecondPoint =>
'Presión prolongada para el segundo punto';
@override
String get longPressToStartMeasurement =>
'Presión prolongada para establecer el primer punto';
@override
String get longPressToStartNewMeasurement =>
'Presión prolongada para nueva medición';
@override
String get shareDrawings => 'Compartir dibujos';
@@ -1886,4 +1913,19 @@ class AppLocalizationsEs extends AppLocalizations {
@override
String get updateLater => 'Más Tarde';
@override
String get cadastralParcels => 'Parcelas Catastrales';
@override
String get forestRoads => 'Caminos Forestales';
@override
String get showCadastralParcels => 'Mostrar parcelas catastrales';
@override
String get showForestRoads => 'Mostrar caminos forestales';
@override
String get wmsOverlays => 'Superposiciones WMS';
}

View File

@@ -395,6 +395,31 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get drawRectangleDesc => 'Tracer une zone rectangulaire sur la carte';
@override
String get measureDistance => 'Mesurer la distance';
@override
String get measureDistanceDesc => 'Appui long sur deux points pour mesurer';
@override
String get clearMeasurement => 'Effacer la mesure';
@override
String distanceLabel(String distance) {
return 'Distance : $distance';
}
@override
String get longPressForSecondPoint => 'Appui long pour le deuxième point';
@override
String get longPressToStartMeasurement =>
'Appui long pour définir le premier point';
@override
String get longPressToStartNewMeasurement =>
'Appui long pour nouvelle mesure';
@override
String get shareDrawings => 'Partager les dessins';
@@ -1892,4 +1917,19 @@ class AppLocalizationsFr extends AppLocalizations {
@override
String get updateLater => 'Plus Tard';
@override
String get cadastralParcels => 'Parcelles Cadastrales';
@override
String get forestRoads => 'Chemins Forestiers';
@override
String get showCadastralParcels => 'Afficher les parcelles cadastrales';
@override
String get showForestRoads => 'Afficher les chemins forestiers';
@override
String get wmsOverlays => 'Superpositions WMS';
}

View File

@@ -392,6 +392,29 @@ class AppLocalizationsHr extends AppLocalizations {
@override
String get drawRectangleDesc => 'Nacrtaj pravokutno područje na karti';
@override
String get measureDistance => 'Izmjeri udaljenost';
@override
String get measureDistanceDesc => 'Dugi pritisak na dvije točke za mjerenje';
@override
String get clearMeasurement => 'Očisti mjerenje';
@override
String distanceLabel(String distance) {
return 'Udaljenost: $distance';
}
@override
String get longPressForSecondPoint => 'Dugi pritisak za drugu točku';
@override
String get longPressToStartMeasurement => 'Dugi pritisak za prvu točku';
@override
String get longPressToStartNewMeasurement => 'Dugi pritisak za novo mjerenje';
@override
String get shareDrawings => 'Podijeli crteže';
@@ -1874,4 +1897,19 @@ class AppLocalizationsHr extends AppLocalizations {
@override
String get updateLater => 'Kasnije';
@override
String get cadastralParcels => 'Katastarske čestice';
@override
String get forestRoads => 'Šumske ceste';
@override
String get showCadastralParcels => 'Prikaži katastarske čestice';
@override
String get showForestRoads => 'Prikaži šumske ceste';
@override
String get wmsOverlays => 'WMS Prekrivanja';
}

View File

@@ -394,6 +394,31 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get drawRectangleDesc => 'Disegna un\'area rettangolare sulla mappa';
@override
String get measureDistance => 'Misura Distanza';
@override
String get measureDistanceDesc => 'Premi a lungo su due punti per misurare';
@override
String get clearMeasurement => 'Cancella Misurazione';
@override
String distanceLabel(String distance) {
return 'Distanza: $distance';
}
@override
String get longPressForSecondPoint => 'Premi a lungo per il secondo punto';
@override
String get longPressToStartMeasurement =>
'Premi a lungo per impostare il primo punto';
@override
String get longPressToStartNewMeasurement =>
'Premi a lungo per nuova misurazione';
@override
String get shareDrawings => 'Condividi Disegni';
@@ -1883,4 +1908,19 @@ class AppLocalizationsIt extends AppLocalizations {
@override
String get updateLater => 'Più Tardi';
@override
String get cadastralParcels => 'Particelle Catastali';
@override
String get forestRoads => 'Strade Forestali';
@override
String get showCadastralParcels => 'Mostra particelle catastali';
@override
String get showForestRoads => 'Mostra strade forestali';
@override
String get wmsOverlays => 'Sovrapposizioni WMS';
}

View File

@@ -392,6 +392,29 @@ class AppLocalizationsSl extends AppLocalizations {
@override
String get drawRectangleDesc => 'Nariši pravokotno področje na zemljevidu';
@override
String get measureDistance => 'Meri razdaljo';
@override
String get measureDistanceDesc => 'Dolg pritisk na dve točki za merjenje';
@override
String get clearMeasurement => 'Počisti meritev';
@override
String distanceLabel(String distance) {
return 'Razdalja: $distance';
}
@override
String get longPressForSecondPoint => 'Dolg pritisk za drugo točko';
@override
String get longPressToStartMeasurement => 'Dolg pritisk za prvo točko';
@override
String get longPressToStartNewMeasurement => 'Dolg pritisk za novo meritev';
@override
String get shareDrawings => 'Deli risbe';
@@ -1875,4 +1898,19 @@ class AppLocalizationsSl extends AppLocalizations {
@override
String get updateLater => 'Kasneje';
@override
String get cadastralParcels => 'Katastrske parcele';
@override
String get forestRoads => 'Gozdne ceste';
@override
String get showCadastralParcels => 'Prikaži katastrske parcele';
@override
String get showForestRoads => 'Prikaži gozdne ceste';
@override
String get wmsOverlays => 'WMS Prekrivanja';
}

View File

@@ -227,6 +227,20 @@
"drawRectangleDesc": "Nariši pravokotno področje na zemljevidu",
"measureDistance": "Meri razdaljo",
"measureDistanceDesc": "Dolg pritisk na dve točki za merjenje",
"clearMeasurement": "Počisti meritev",
"distanceLabel": "Razdalja: {distance}",
"longPressForSecondPoint": "Dolg pritisk za drugo točko",
"longPressToStartMeasurement": "Dolg pritisk za prvo točko",
"longPressToStartNewMeasurement": "Dolg pritisk za novo meritev",
"shareDrawings": "Deli risbe",
"clearAllDrawings": "Počisti vse risbe",
@@ -955,5 +969,11 @@
"currentVersion": "Trenutna",
"latestVersion": "Najnovejša",
"downloadUpdate": "Prenesi",
"updateLater": "Kasneje"
"updateLater": "Kasneje",
"cadastralParcels": "Katastrske parcele",
"forestRoads": "Gozdne ceste",
"showCadastralParcels": "Prikaži katastrske parcele",
"showForestRoads": "Prikaži gozdne ceste",
"wmsOverlays": "WMS Prekrivanja"
}