Terepbejárás: geometriák hosszának és területének számítása és jelzése

This commit is contained in:
2026-06-20 01:02:50 +02:00
parent a9316b9b8d
commit 9656bbd332
6 changed files with 220 additions and 21 deletions
@@ -21,6 +21,8 @@ import 'package:share_plus/share_plus.dart';
import 'package:supabase_flutter/supabase_flutter.dart';
import 'package:terepi_seged/controls/geoid_grid.dart';
import 'package:terepi_seged/controls/wgs84_coordinate_formatter.dart';
import 'package:terepi_seged/core/geometry_measure.dart';
import 'package:terepi_seged/core/geometry_measure_formatter.dart';
import 'package:terepi_seged/enums/map_edit_tool.dart';
import 'package:terepi_seged/enums/map_survey_mode.dart';
import 'package:terepi_seged/enums/note_type.dart';
@@ -194,6 +196,26 @@ class MapSurveyController extends GetxController {
final selectedNoteItemType = NoteType.line.obs;
int? _editingNoteItemId;
bool get isGeometryEditing => _editingNoteItemId != null;
final draftLengthMeters = 0.0.obs;
final draftAreaSquareMeters = 0.0.obs;
String get draftMeasureText {
switch (activeEditTool.value) {
case MapEditTool.line:
return GeometryMeasureFormatter.length(
draftLengthMeters.value,
);
case MapEditTool.polygon:
return GeometryMeasureFormatter.area(
draftAreaSquareMeters.value,
);
case MapEditTool.point:
case MapEditTool.none:
return '';
}
}
// NoteItem? get selectedPoint =>
// pointNotes.firstWhereOrNull((n) => n.id == selectedNoteItemId.value);
@@ -233,6 +255,7 @@ class MapSurveyController extends GetxController {
PolygonEditorController(mode: PolygonEditorMode.polygon);
polygonEditorController.addListener(() {
editorPointCount.value = polygonEditorController.points.length;
_updateDraftMeasurements();
});
await _setInitialPositionFromPhone();
@@ -1064,18 +1087,21 @@ class MapSurveyController extends GetxController {
void startPointTool() {
activeEditTool.value = MapEditTool.point;
activeEditLabel.value = '';
}
void startLineTool() {
polygonEditorController.clear();
polygonEditorController.setMode(PolygonEditorMode.line);
activeEditTool.value = MapEditTool.line;
activeEditLabel.value = '';
}
void startPolygonTool() {
polygonEditorController.clear();
polygonEditorController.setMode(PolygonEditorMode.polygon);
activeEditTool.value = MapEditTool.polygon;
activeEditLabel.value = '';
}
void cancelEditing() {
@@ -1084,14 +1110,8 @@ class MapSurveyController extends GetxController {
_editingNoteItemId = null;
selectedNoteItemId.value = null;
editorPointCount.value = 0;
}
void openFeatureList() {
// TODO: DraggableScrollableSheet / bottom sheet lista
}
void openLayerPanel() {
// TODO: rétegek sheet
draftAreaSquareMeters.value = 0.0;
draftLengthMeters.value = 0.0;
}
void finishGeometry() {
@@ -1252,6 +1272,8 @@ class MapSurveyController extends GetxController {
await updateNoteItem(updated);
_editingNoteItemId = null;
activeEditTool.value = MapEditTool.none;
draftAreaSquareMeters.value = 0.0;
draftLengthMeters.value = 0.0;
}
Future<void> deleteEditingItem() async {
@@ -1262,6 +1284,8 @@ class MapSurveyController extends GetxController {
_editingNoteItemId = null;
selectedNoteItemId.value = null;
activeEditTool.value = MapEditTool.none;
draftAreaSquareMeters.value = 0.0;
draftLengthMeters.value = 0.0;
}
// Future<void> finishDraft() async {
@@ -1518,6 +1542,8 @@ class MapSurveyController extends GetxController {
polygonEditorController.clear();
activeEditTool.value = MapEditTool.none;
editorPointCount.value = 0;
draftAreaSquareMeters.value = 0.0;
draftLengthMeters.value = 0.0;
Get.snackbar(
'Geometria frissítve',
@@ -1540,6 +1566,9 @@ class MapSurveyController extends GetxController {
}
polygonEditorController.clear();
activeEditTool.value = MapEditTool.none;
draftAreaSquareMeters.value = 0.0;
draftLengthMeters.value = 0.0;
activeEditLabel.value = '';
}
if (polygonEditorController.mode == PolygonEditorMode.polygon) {
@@ -1554,6 +1583,8 @@ class MapSurveyController extends GetxController {
}
polygonEditorController.clear();
activeEditTool.value = MapEditTool.none;
draftAreaSquareMeters.value = 0.0;
draftLengthMeters.value = 0.0;
}
}
@@ -1561,4 +1592,35 @@ class MapSurveyController extends GetxController {
if (polygonEditorController.mode == PolygonEditorMode.line) return 2;
return 3; // polygon
}
void _updateDraftMeasurements() {
switch (activeEditTool.value) {
case MapEditTool.line:
final points = List<LatLng>.from(
polygonEditorController.points,
);
draftLengthMeters.value = GeometryMeasure.lineLengthMeters(points);
draftAreaSquareMeters.value = 0.0;
break;
case MapEditTool.polygon:
final points = List<LatLng>.from(
polygonEditorController.points,
);
draftLengthMeters.value = GeometryMeasure.lineLengthMeters(points);
draftAreaSquareMeters.value =
GeometryMeasure.polygonAreaSquareMeters(points);
break;
case MapEditTool.point:
case MapEditTool.none:
draftLengthMeters.value = 0.0;
draftAreaSquareMeters.value = 0.0;
break;
}
}
}