diff --git a/app/lib/consts.dart b/app/lib/consts.dart index d3163031bfe387a0547ab7cad845396766c232dd..dae3e59a67583cbf594adc33523233cd1840ddf5 100644 --- a/app/lib/consts.dart +++ b/app/lib/consts.dart @@ -11,12 +11,12 @@ const String mapEndpoint = "update_map"; // Map variables String selectedLake = 'Mjøsa'; // NB should be initialised to last selected lake -Uint8List selectedRelation = Uint8List(0); + +Uint8List selectedRelation = Uint8List(0); // Initialised in init_state.dart List<Measurement> selectedMeasurements = []; List<SubDiv> selectedSubdivisions = []; SubDiv? selectedSubDiv; -LatLng mapCenter = LatLng(60.8000, 10.8471); // NB may not be necessary DateTime ?lastUpdate; // Last time data was fetched from server List<String> lakeSearchOptions = []; bool internetConnection = true; diff --git a/app/lib/pages/default_page.dart b/app/lib/pages/default_page.dart index e57dd7be70d3ab974df859e18b51c3feb51dc175..3d9459e388aafe8f8677182262a9eab385f79344 100644 --- a/app/lib/pages/default_page.dart +++ b/app/lib/pages/default_page.dart @@ -86,6 +86,7 @@ class _DefaultPageState extends State<DefaultPage> { child: ListView( children: [ MapContainerWidget( + subdivisions: selectedSubdivisions, measurements: selectedMeasurements, relation: selectedRelation, serverConnection: serverConnection, diff --git a/app/lib/server_requests/init_state.dart b/app/lib/server_requests/init_state.dart index f9ad01fe85f740a58552044e979f40777d89feda..a30d0fd5c272f9f417b57bc38fbb28e8d65cc4c6 100644 --- a/app/lib/server_requests/init_state.dart +++ b/app/lib/server_requests/init_state.dart @@ -26,13 +26,32 @@ Future<void> initialiseState(bool fetchSearchOptions) async { List<Measurement> measurements = fetchResult.measurements; selectedMeasurements = measurements; + // Extract all _subdivisions from list of measurements + for (Measurement measurement in measurements) { + for (SubDiv subdivision in measurement.subDivs) { + selectedSubdivisions.add(subdivision); + } + } + + // Sort the list of SubDiv objects based on each subdivision id + selectedSubdivisions.sort((a, b) => a.sub_div_id.compareTo(b.sub_div_id)); + print("Loaded from files: Meas.len: ${selectedMeasurements.length}, rel.len: ${selectedRelation.length}"); } else { // Try to fetch measurement data from server markerListFuture = fetchMeasurements().then((fetchResult) { List<Measurement> measurements = fetchResult.measurements; + selectedMeasurements = measurements; + + // Extract all _subdivisions from list of measurements + for (Measurement measurement in measurements) { + for (SubDiv subdivision in measurement.subDivs) { + selectedSubdivisions.add(subdivision); + } + } + serverConnection = fetchResult.connected; - setLastLake(); + setLastLake(); // Update persistent value for latest fetched lake // Return measurements return measurements; diff --git a/app/lib/widgets/choropleth_map.dart b/app/lib/widgets/choropleth_map.dart index fdfd07ca478be3b2016a3dd8a6ac7b2f74560fdb..b4869d90e6e300d140c28b55186f09c9cf09ce80 100644 --- a/app/lib/widgets/choropleth_map.dart +++ b/app/lib/widgets/choropleth_map.dart @@ -13,11 +13,13 @@ class ChoroplethMap extends StatefulWidget { Key? key, required this.relation, required this.measurements, + required this.subdivisions, required this.onSelectionChanged, }) : super(key: key); final Uint8List relation; final List<Measurement> measurements; + final List<SubDiv> subdivisions; final void Function(int selectedIndex) onSelectionChanged; @override @@ -28,7 +30,6 @@ class ChoroplethMapState extends State<ChoroplethMap> { int selectedIndex = -1; // Subdivision/map tile index late MapShapeSource dataSource; late final MapZoomPanBehavior _zoomPanBehavior = MapZoomPanBehavior(); - final List<SubDiv> _subdivisions = <SubDiv>[]; void updateDataSource() { _initDataSource(); @@ -41,24 +42,12 @@ class ChoroplethMapState extends State<ChoroplethMap> { } void _initDataSource() { - _subdivisions.clear(); - - // Extract all _subdivisions from list of measurements - for (Measurement measurement in widget.measurements) { - for (SubDiv subdivision in measurement.subDivs) { - _subdivisions.add(subdivision); - } - } - - // Sort the list of SubDiv objects based on each subdivision id - _subdivisions.sort((a, b) => a.sub_div_id.compareTo(b.sub_div_id)); - dataSource = MapShapeSource.memory( widget.relation, shapeDataField: 'sub_div_id', - dataCount: _subdivisions.length, - primaryValueMapper: (int index) => _subdivisions[index].sub_div_id, - shapeColorValueMapper: (int index) => _subdivisions[index].avgThickness, // NB will later be minThickness + dataCount: widget.subdivisions.length, + primaryValueMapper: (int index) => widget.subdivisions[index].sub_div_id, + shapeColorValueMapper: (int index) => widget.subdivisions[index].avgThickness, // NB will later be minThickness shapeColorMappers: const [ MapColorMapper( from: -2, diff --git a/app/lib/widgets/main_layout.dart b/app/lib/widgets/main_layout.dart index 652c8b4bb7ed443e68f8c3b4540b02502ee6314f..49687cc442de8670d6cb93ec8348814780e9f5f5 100644 --- a/app/lib/widgets/main_layout.dart +++ b/app/lib/widgets/main_layout.dart @@ -14,11 +14,13 @@ import '../utils/format_month.dart'; /// MapContainerWidget is the main widget that contains the map with all /// its layers, polygons and markers. class MapContainerWidget extends StatefulWidget { + final List<SubDiv> subdivisions; final List<Measurement> measurements; final Uint8List relation; final bool serverConnection; const MapContainerWidget({Key? key, + required this.subdivisions, required this.measurements, required this.relation, required this.serverConnection, @@ -105,6 +107,7 @@ class _MapContainerWidgetState extends State<MapContainerWidget> { child: ChoroplethMap( relation: widget.relation, measurements: widget.measurements, + subdivisions: widget.subdivisions, onSelectionChanged: handleSelection, ), ), diff --git a/server/__pycache__/scheduler.cpython-311.pyc b/server/__pycache__/scheduler.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0e286229a777a594a4e7f76d865a7b942a55b4a7 Binary files /dev/null and b/server/__pycache__/scheduler.cpython-311.pyc differ diff --git a/server/map_handler/__pycache__/get_measurements.cpython-311.pyc b/server/map_handler/__pycache__/get_measurements.cpython-311.pyc index 37cda1166d0176caae3f53b92b227f7f3618f8a8..acfeae94592fa21a28438ff18d170d9215bff394 100644 Binary files a/server/map_handler/__pycache__/get_measurements.cpython-311.pyc and b/server/map_handler/__pycache__/get_measurements.cpython-311.pyc differ