From 688922808b51c92c632bfa0c5dcec7bdebe24e7f Mon Sep 17 00:00:00 2001 From: "torok.istvan" Date: Sat, 9 May 2026 15:36:58 +0200 Subject: [PATCH] =?UTF-8?q?A=20map=5Fsurvey-ben=20a=20bem=C3=A9rt=20pontok?= =?UTF-8?q?=20ment=C3=A9se=20=C3=A9s=20elk=C3=BCld=C3=A9se.=20Hibajav?= =?UTF-8?q?=C3=ADt=C3=A1s:=20a=20field=5Ftrip-ben=20vonalak=20=C3=A9s=20te?= =?UTF-8?q?r=C3=BCletek=20megjelen=C3=ADt=C3=A9se=20szerkeszt=C3=A9s=20ut?= =?UTF-8?q?=C3=A1n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/field_trip_controller.dart | 20 +++++-- .../presentations/views/fiels_trip_view.dart | 17 +++--- .../controllers/map_survey_controller.dart | 59 +++++++++++++++++++ .../views/measured_points_table_dialog.dart | 8 +++ 4 files changed, 92 insertions(+), 12 deletions(-) diff --git a/lib/pages/field_trip/presentations/controllers/field_trip_controller.dart b/lib/pages/field_trip/presentations/controllers/field_trip_controller.dart index 7890233..d5a9055 100644 --- a/lib/pages/field_trip/presentations/controllers/field_trip_controller.dart +++ b/lib/pages/field_trip/presentations/controllers/field_trip_controller.dart @@ -3,6 +3,7 @@ import 'package:flutter_map/flutter_map.dart'; import 'package:flutter_map_polygon_editor/polygon_editor/polygon_editor_controller.dart'; import 'package:get/get.dart'; import 'package:latlong2/latlong.dart'; +import 'package:geolocator/geolocator.dart'; class FieldTripController extends GetxController { RxBool mapIsInitialized = false.obs; @@ -25,7 +26,17 @@ class FieldTripController extends GetxController { // TODO: implement onInit super.onInit(); + LatLng initialCenter = const LatLng(47.5, 19.0); + try { + final last = await Geolocator.getLastKnownPosition(); + if (last != null) { + initialCenter = LatLng(last.latitude, last.longitude); + } + } catch (_) {} + mapOptions = MapOptions( + initialCenter: initialCenter, + initialZoom: 13, onLongPress: (tapPosition, point) { if (mapInEditorMode.value) { polygonEditorController.addPoint(point); @@ -94,9 +105,10 @@ class FieldTripController extends GetxController { print("Points number in line: ${polygonEditorController.points.length}"); print( "1. point coords: ${polygonEditorController.points[0].latitude} - ${polygonEditorController.points[0].longitude}"); + if (polygonEditorController.points.length < 2) return; Polyline polyline = Polyline( - points: polygonEditorController.points, + points: List.from(polygonEditorController.points), color: Colors.red, strokeWidth: 8, // hitValue: ( @@ -119,7 +131,7 @@ class FieldTripController extends GetxController { "Points number in polygon: ${polygonEditorController.points.length}"); Polygon polygon = Polygon( - points: polygonEditorController.points, + points: List.from(polygonEditorController.points), color: Colors.purple, borderColor: Colors.yellow, borderStrokeWidth: 4, @@ -131,8 +143,8 @@ class FieldTripController extends GetxController { ); polygonNotes.add(polygon); - polygonNotes.refresh(); - update(); + //polygonNotes.refresh(); + //update(); print("Points number in polygonNotes: ${polygonNotes.length}"); diff --git a/lib/pages/field_trip/presentations/views/fiels_trip_view.dart b/lib/pages/field_trip/presentations/views/fiels_trip_view.dart index d06177e..6815a04 100644 --- a/lib/pages/field_trip/presentations/views/fiels_trip_view.dart +++ b/lib/pages/field_trip/presentations/views/fiels_trip_view.dart @@ -39,14 +39,15 @@ class FieldTripView extends GetView { CurrentLocationLayer( alignPositionOnUpdate: AlignOnUpdate.once, ), - MarkerLayer(markers: controller.pointNotes), - PolylineLayer( - polylines: controller.polylineNotes, - ), - PolygonLayer( - polygons: controller.polygonNotes, - useAltRendering: true, - ), + Obx(() => + MarkerLayer(markers: [...controller.pointNotes])), + Obx(() => PolylineLayer( + polylines: [...controller.polylineNotes], + )), + Obx(() => PolygonLayer( + polygons: [...controller.polygonNotes], + useAltRendering: true, + )), // PolylineLayer(polylines: [ // Polyline( // points: [ diff --git a/lib/pages/map_survey/presentations/controllers/map_survey_controller.dart b/lib/pages/map_survey/presentations/controllers/map_survey_controller.dart index 2b2f0e4..c5fe6de 100644 --- a/lib/pages/map_survey/presentations/controllers/map_survey_controller.dart +++ b/lib/pages/map_survey/presentations/controllers/map_survey_controller.dart @@ -19,6 +19,7 @@ import 'package:nmea/nmea.dart'; import 'package:path_provider/path_provider.dart'; import 'package:permission_handler/permission_handler.dart' as permission_handler; +import 'package:share_plus/share_plus.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:terepi_seged/eov/convert_coordinate.dart'; import 'package:terepi_seged/eov/eov.dart'; @@ -30,6 +31,7 @@ import 'package:terepi_seged/models/point_with_description_model.dart'; import 'package:proj4dart/proj4dart.dart' as proj4; import 'package:shared_preferences/shared_preferences.dart'; import 'package:terepi_seged/pages/map_survey/presentations/views/measured_points_table_dialog.dart'; +import 'package:shared_preferences/shared_preferences.dart'; class MapSurveyController extends GetxController { // String gpsAddress = "E8:31:CD:14:8B:B2"; @@ -873,4 +875,61 @@ class MapSurveyController extends GetxController { return response; } + + void SaveMeasuredPointsToFile() async { + // var pointsDirectory = await getExternalStorageDirectory(); + var pointsDirectory = await getApplicationDocumentsDirectory(); + print(directory!.path); + // String newPath = ''; + // List folders = directory!.path.split("/"); + // for (int i = 1; i < folders.length; i++) { + // String folder = folders[i]; + // if (folder != "Android") { + // newPath += "/" + folder; + // } else { + // break; + // } + // } + // newPath = newPath + "/TerepisSegedApp"; + // directory = Directory(newPath); + if (!await pointsDirectory!.exists()) { + await pointsDirectory.create(recursive: true); + } + var oldMeasuredPointsFile = File("${directory!.path}/measuredsPoints.csv"); + + if (await oldMeasuredPointsFile.exists()) { + await oldMeasuredPointsFile.delete(); + } + + var measuredPointsFile = + await File("${directory!.path}/measuredsPoints.csv").create(); + + if (await pointsDirectory.exists()) { + if (await measuredPointsFile.exists()) { + await measuredPointsFile.writeAsString( + "Id;DateTime;Description;EovX;EovY;Altitude;Hor.Err;Vert.Err\r\n"); + } + } + + var data = await readMeasuredPoints(); + + data.forEach((d) { + measuredPointsFile.writeAsStringSync( + "${d['id']};${d['created_at']};${d['description']};${formatEov.format(d['eovY'])};${formatEov.format(d['eovX'])};${formatEovZ.format(d['altitude'] - d['poleHeight'])};${formatAltitudeError.format(d['horizontalError'])};${formatAltitudeError.format(d['verticalError'])}\r\n", + flush: true, + mode: FileMode.append, + encoding: utf8); + }); + + print('Number of data: ${data.length}'); + + final params = ShareParams( + text: "Mérési eredmények", + // files: [XFile('$measuredPointsFile')], + files: [XFile("${directory!.path}/measuredsPoints.csv")], + subject: 'Mérési eredmények', + title: 'Mérési eredmények'); + + final result = await SharePlus.instance.share(params); + } } diff --git a/lib/pages/map_survey/presentations/views/measured_points_table_dialog.dart b/lib/pages/map_survey/presentations/views/measured_points_table_dialog.dart index 748f94b..ceab3dd 100644 --- a/lib/pages/map_survey/presentations/views/measured_points_table_dialog.dart +++ b/lib/pages/map_survey/presentations/views/measured_points_table_dialog.dart @@ -22,6 +22,14 @@ class MeasuredPointsTableDialog extends StatelessWidget { Get.back(); }, icon: const Icon(Icons.close)), + SizedBox( + width: 10, + ), + IconButton( + onPressed: () { + controller.SaveMeasuredPointsToFile(); + }, + icon: const Icon(Icons.save)), TextButton( style: ButtonStyle( overlayColor: