diff --git a/app/lib/pages/widgets/map_widget.dart b/app/lib/pages/widgets/map_widget.dart index d757b7b901ccdc3c1ad56b635a75f666bd52f65c..c076d678ed9c87e3a334860e1fa29a1993a4bc9a 100644 --- a/app/lib/pages/widgets/map_widget.dart +++ b/app/lib/pages/widgets/map_widget.dart @@ -3,8 +3,9 @@ import '../marker_handler/marker_data.dart'; import '../consts.dart'; import 'quick_view_chart.dart'; import 'stat_charts.dart'; -import 'osm_map.dart'; import 'sat_layer.dart'; +import 'package:flutter_map/flutter_map.dart'; +import 'package:latlong2/latlong.dart'; class MapContainerWidget extends StatefulWidget { final List<Measurement> markerList; @@ -17,9 +18,9 @@ class MapContainerWidget extends StatefulWidget { class _MapContainerWidgetState extends State<MapContainerWidget> { - Measurement? selectedMarker; // Containing data for selected marker - bool isMinimized = true; // Quick view box state tacker - bool satLayer = false; // Satellite layer visibility tracker + Measurement? selectedMarker; // Containing data for selected marker + bool isMinimized = true; // Quick view box state tacker + bool satLayer = false; // Satellite layer visibility tracker @override Widget build(BuildContext context) { @@ -44,7 +45,76 @@ class _MapContainerWidgetState extends State<MapContainerWidget> { SizedBox( width: screenWidth * boxWidth, height: screenWidth * boxHeight, - child: OSMmap(markerList: widget.markerList), // OpenStreetMap layer + child: FlutterMap( + options: MapOptions( + center: mapCenter, + zoom: 9.0, + ), + children: [ + TileLayer( + urlTemplate: "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", + subdomains: const ['a', 'b', 'c'], + ), + PolygonLayer( + polygons: widget.markerList.map((Measurement measurement) { + // Map corners to a list of LatLng objects + List<LatLng> points = measurement.cornerList.map((Corner corner) { + return LatLng(corner.latitude, corner.longitude); + }).toList(); + + return Polygon( + points: points, // Use list of corner coordinates to render polygon + color: Colors.blue.withOpacity(0.5), + isFilled: true, + ); + }).toList(), + ), + MarkerLayer( + markers: widget.markerList.map((Measurement measurement) { + + List<LatLng> corners = measurement.cornerList.map((Corner corner) { + return LatLng(corner.latitude, corner.longitude); + }).toList(); + + // point calculates the middle point between corners + LatLng point(List<LatLng> coordinates) { + double averageLatitude = 0.0; + double averageLongitude = 0.0; + + for (LatLng point in coordinates) { + averageLatitude += point.latitude; + averageLongitude += point.longitude; + } + + // Calculate average latitude and longitude + averageLatitude /= coordinates.length; + averageLongitude /= coordinates.length; + + return LatLng(averageLatitude, averageLongitude); // Return the middle point + } + + return Marker( + width: 50, + height: 50, // NB: temporary point value + point: point(corners), + builder: (ctx) => GestureDetector( + onTap: () { + setState(() { + selectedMarker = measurement; + }); + }, + child: const Icon( + Icons.severe_cold, + color: Colors.blue, + size: 30.0, + ), + ), + ); + }).toList(), + ), + + ], + ), ), /*SizedBox( width: screenWidth * boxWidth, diff --git a/app/lib/pages/widgets/osm_map.dart b/app/lib/pages/widgets/osm_map.dart index 3507756fcffcba0151449040187567481f10d1dc..9324c2bb80fec1d940b0b155e125c8ecf30c67c0 100644 --- a/app/lib/pages/widgets/osm_map.dart +++ b/app/lib/pages/widgets/osm_map.dart @@ -18,19 +18,6 @@ class OSMmap extends StatelessWidget { List<Polygon> polygons = []; // Map each element from markerList to a measurement object - markerList.forEach((Measurement measurement) { - // Map corners to a list of LatLng objects - List<LatLng> points = measurement.cornerList.map((Corner corner) { - return LatLng(corner.latitude, corner.longitude); - }).toList(); - - Polygon polygon = Polygon( - points: points, // Use list of corner coordinates to render polygon - color: Colors.blue.withOpacity(0.5), - isFilled: true, - ); - polygons.add(polygon); // Add each polygon to a list - }); return FlutterMap( options: MapOptions(