From 81f1fa5cd7966f40bb4482d0840ab53a0888b377 Mon Sep 17 00:00:00 2001 From: "torok.istvan" Date: Sat, 9 May 2026 22:04:14 +0200 Subject: [PATCH] =?UTF-8?q?Proj4=20refraktor=C3=A1l=C3=A1s=20a=20CoordConv?= =?UTF-8?q?erterService=20oszt=C3=A1lyba.=20MapController=20refraktor?= =?UTF-8?q?=C3=A1l=C3=A1s.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/main.dart | 3 ++ .../controllers/map_controller.dart | 25 +++---------- lib/services/coord_converter_service.dart | 37 +++++++++++++++++++ 3 files changed, 46 insertions(+), 19 deletions(-) create mode 100644 lib/services/coord_converter_service.dart diff --git a/lib/main.dart b/lib/main.dart index 4375bd3..2f73851 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; import 'package:terepi_seged/routes/app_pages.dart'; +import 'package:terepi_seged/services/coord_converter_service.dart'; Future main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -13,6 +14,8 @@ Future main() async { anonKey: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.ewogICJyb2xlIjogImFub24iLAogICJpc3MiOiAic3VwYWJhc2UiLAogICJpYXQiOiAxNzQwMjY1MjAwLAogICJleHAiOiAxODk4MDMxNjAwCn0.4cMVfAnBLxne1lq0fm94rgtXLBJdRx-0f-E4Jd_jFwI'); + await Get.putAsync(() => CoordConverterService().onInit()); + runApp(const MyApp()); } diff --git a/lib/pages/map/presentation/controllers/map_controller.dart b/lib/pages/map/presentation/controllers/map_controller.dart index 5932306..190d27b 100644 --- a/lib/pages/map/presentation/controllers/map_controller.dart +++ b/lib/pages/map/presentation/controllers/map_controller.dart @@ -29,9 +29,9 @@ import 'package:terepi_seged/gnss_sentences/gngst.dart'; import 'package:terepi_seged/gnss_sentences/gnrmc.dart'; import 'package:terepi_seged/models/point_to_measure.dart'; 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/presentation/views/measured_points_table_dialog.dart'; +import 'package:terepi_seged/services/coord_converter_service.dart'; class MapViewController extends GetxController { // String gpsAddress = "E8:31:CD:14:8B:B2"; @@ -124,7 +124,6 @@ class MapViewController extends GetxController { late Directory? directory; late File dataFile; - late proj4.Projection eovProj, wgsProj; RxBool mapIsInitialized = false.obs; // GeoJsonParser parser = @@ -147,18 +146,7 @@ class MapViewController extends GetxController { @override void onInit() async { super.onInit(); - final bytes = (await rootBundle.load('assets/Grids/etrs2eov_notowgs.gsb')) - .buffer - .asUint8List(); - proj4.Projection.nadgrid('Etrs2Eov', bytes); - // var def = - // '+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +units=m +nadgrids=@ignorable,Etrs2Eov,null +no_defs'; - var def = - '+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 +k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 +towgs84=52.17,-71.82,-14.9,0,0,0,0 +units=m +nadgrids=Etrs2Eov +no_defs'; -// Named Projection signature, later find it from anywhere via Projection.get('EPSG:23700') - eovProj = proj4.Projection.add('EPSG:23700', def); - wgsProj = proj4.Projection.WGS84; //Loading, Success, Error handle with 1 line of code nmeaDecoder ..registerTalkerSentence("GGA", (line) => Gngga(raw: line)) @@ -500,8 +488,8 @@ class MapViewController extends GetxController { pointsToMeasure[pointsToMeasureSelectedValue.value].coordX; double coordY = pointsToMeasure[pointsToMeasureSelectedValue.value].coordY; - var eovCoord = proj4.Point(x: coordX, y: coordY); - var wgsCoord = eovProj.transform(wgsProj, eovCoord); + var wgsCoord = + CoordConverterService.to.eovToWgsPoint(coordX, coordY); distance.value = calculateDistance( LatLng(gpsLatitude.value, gpsLongitude.value), LatLng(wgsCoord.y, wgsCoord.x)); @@ -906,8 +894,8 @@ class MapViewController extends GetxController { pointsToMeasure .add(PointToMeasure(id: id, coordX: coordX, coordY: coordY)); - var eovCoord = proj4.Point(x: coordX, y: coordY); - var wgsCoord = eovProj.transform(wgsProj, eovCoord); + var wgsCoord = + CoordConverterService.to.eovToWgsPoint(coordX, coordY); print("Lat -> ${wgsCoord.x}, Long -> ${wgsCoord.y}"); @@ -980,8 +968,7 @@ class MapViewController extends GetxController { pointsToMeasure .add(PointToMeasure(id: id, coordX: coordX, coordY: coordY)); - var eovCoord = proj4.Point(x: coordX, y: coordY); - var wgsCoord = eovProj.transform(wgsProj, eovCoord); + var wgsCoord = CoordConverterService.to.eovToWgsPoint(coordX, coordY); print("Lat -> ${wgsCoord.x}, Long -> ${wgsCoord.y}"); diff --git a/lib/services/coord_converter_service.dart b/lib/services/coord_converter_service.dart new file mode 100644 index 0000000..c0f7609 --- /dev/null +++ b/lib/services/coord_converter_service.dart @@ -0,0 +1,37 @@ +import 'package:flutter/services.dart'; +import 'package:get/get.dart'; +import 'package:proj4dart/proj4dart.dart' as proj4; + +class CoordConverterService extends GetxService { + static CoordConverterService get to => Get.find(); + + late proj4.Projection eovProj; + late proj4.Projection wgsProj; + + @override + Future onInit() async { + super.onInit(); + + final bytes = (await rootBundle.load('assets/Grids/etrs2eov_notowgs.gsb')) + .buffer + .asUint8List(); + + proj4.Projection.nadgrid('Etrs2Eov', bytes); + + const def = + '+proj=somerc +lat_0=47.14439372222222 +lon_0=19.04857177777778 ' + '+k_0=0.99993 +x_0=650000 +y_0=200000 +ellps=GRS67 ' + '+towgs84=52.17,-71.82,-14.9,0,0,0,0 ' + '+units=m +nadgrids=Etrs2Eov +no_defs'; + + eovProj = proj4.Projection.add('EPSG:23700', def); + wgsProj = proj4.Projection.WGS84; + } + + // Segédmetódusok — nem kötelező, de tisztább + proj4.Point wgsToEovPoint(double lon, double lat) => + wgsProj.transform(eovProj, proj4.Point(x: lon, y: lat)); + + proj4.Point eovToWgsPoint(double y, double x) => + eovProj.transform(wgsProj, proj4.Point(x: y, y: x)); +}