Terepbejárás: geometriák hosszának és területének számítása és jelzése
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user