Skip to content
Snippets Groups Projects
Commit 40aa2528 authored by Sara Savanovic Djordjevic's avatar Sara Savanovic Djordjevic
Browse files

update: subdiv list in init

parent 74c57018
No related branches found
No related tags found
1 merge request!16Clhp map into main
...@@ -11,12 +11,12 @@ const String mapEndpoint = "update_map"; ...@@ -11,12 +11,12 @@ const String mapEndpoint = "update_map";
// Map variables // Map variables
String selectedLake = 'Mjøsa'; // NB should be initialised to last selected lake 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<Measurement> selectedMeasurements = [];
List<SubDiv> selectedSubdivisions = []; List<SubDiv> selectedSubdivisions = [];
SubDiv? selectedSubDiv; SubDiv? selectedSubDiv;
LatLng mapCenter = LatLng(60.8000, 10.8471); // NB may not be necessary
DateTime ?lastUpdate; // Last time data was fetched from server DateTime ?lastUpdate; // Last time data was fetched from server
List<String> lakeSearchOptions = []; List<String> lakeSearchOptions = [];
bool internetConnection = true; bool internetConnection = true;
......
...@@ -86,6 +86,7 @@ class _DefaultPageState extends State<DefaultPage> { ...@@ -86,6 +86,7 @@ class _DefaultPageState extends State<DefaultPage> {
child: ListView( child: ListView(
children: [ children: [
MapContainerWidget( MapContainerWidget(
subdivisions: selectedSubdivisions,
measurements: selectedMeasurements, measurements: selectedMeasurements,
relation: selectedRelation, relation: selectedRelation,
serverConnection: serverConnection, serverConnection: serverConnection,
......
...@@ -26,13 +26,32 @@ Future<void> initialiseState(bool fetchSearchOptions) async { ...@@ -26,13 +26,32 @@ Future<void> initialiseState(bool fetchSearchOptions) async {
List<Measurement> measurements = fetchResult.measurements; List<Measurement> measurements = fetchResult.measurements;
selectedMeasurements = 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}"); print("Loaded from files: Meas.len: ${selectedMeasurements.length}, rel.len: ${selectedRelation.length}");
} else { // Try to fetch measurement data from server } else { // Try to fetch measurement data from server
markerListFuture = fetchMeasurements().then((fetchResult) { markerListFuture = fetchMeasurements().then((fetchResult) {
List<Measurement> measurements = fetchResult.measurements; 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; serverConnection = fetchResult.connected;
setLastLake(); setLastLake(); // Update persistent value for latest fetched lake
// Return measurements // Return measurements
return measurements; return measurements;
......
...@@ -13,11 +13,13 @@ class ChoroplethMap extends StatefulWidget { ...@@ -13,11 +13,13 @@ class ChoroplethMap extends StatefulWidget {
Key? key, Key? key,
required this.relation, required this.relation,
required this.measurements, required this.measurements,
required this.subdivisions,
required this.onSelectionChanged, required this.onSelectionChanged,
}) : super(key: key); }) : super(key: key);
final Uint8List relation; final Uint8List relation;
final List<Measurement> measurements; final List<Measurement> measurements;
final List<SubDiv> subdivisions;
final void Function(int selectedIndex) onSelectionChanged; final void Function(int selectedIndex) onSelectionChanged;
@override @override
...@@ -28,7 +30,6 @@ class ChoroplethMapState extends State<ChoroplethMap> { ...@@ -28,7 +30,6 @@ class ChoroplethMapState extends State<ChoroplethMap> {
int selectedIndex = -1; // Subdivision/map tile index int selectedIndex = -1; // Subdivision/map tile index
late MapShapeSource dataSource; late MapShapeSource dataSource;
late final MapZoomPanBehavior _zoomPanBehavior = MapZoomPanBehavior(); late final MapZoomPanBehavior _zoomPanBehavior = MapZoomPanBehavior();
final List<SubDiv> _subdivisions = <SubDiv>[];
void updateDataSource() { void updateDataSource() {
_initDataSource(); _initDataSource();
...@@ -41,24 +42,12 @@ class ChoroplethMapState extends State<ChoroplethMap> { ...@@ -41,24 +42,12 @@ class ChoroplethMapState extends State<ChoroplethMap> {
} }
void _initDataSource() { 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( dataSource = MapShapeSource.memory(
widget.relation, widget.relation,
shapeDataField: 'sub_div_id', shapeDataField: 'sub_div_id',
dataCount: _subdivisions.length, dataCount: widget.subdivisions.length,
primaryValueMapper: (int index) => _subdivisions[index].sub_div_id, primaryValueMapper: (int index) => widget.subdivisions[index].sub_div_id,
shapeColorValueMapper: (int index) => _subdivisions[index].avgThickness, // NB will later be minThickness shapeColorValueMapper: (int index) => widget.subdivisions[index].avgThickness, // NB will later be minThickness
shapeColorMappers: const [ shapeColorMappers: const [
MapColorMapper( MapColorMapper(
from: -2, from: -2,
......
...@@ -14,11 +14,13 @@ import '../utils/format_month.dart'; ...@@ -14,11 +14,13 @@ import '../utils/format_month.dart';
/// MapContainerWidget is the main widget that contains the map with all /// MapContainerWidget is the main widget that contains the map with all
/// its layers, polygons and markers. /// its layers, polygons and markers.
class MapContainerWidget extends StatefulWidget { class MapContainerWidget extends StatefulWidget {
final List<SubDiv> subdivisions;
final List<Measurement> measurements; final List<Measurement> measurements;
final Uint8List relation; final Uint8List relation;
final bool serverConnection; final bool serverConnection;
const MapContainerWidget({Key? key, const MapContainerWidget({Key? key,
required this.subdivisions,
required this.measurements, required this.measurements,
required this.relation, required this.relation,
required this.serverConnection, required this.serverConnection,
...@@ -105,6 +107,7 @@ class _MapContainerWidgetState extends State<MapContainerWidget> { ...@@ -105,6 +107,7 @@ class _MapContainerWidgetState extends State<MapContainerWidget> {
child: ChoroplethMap( child: ChoroplethMap(
relation: widget.relation, relation: widget.relation,
measurements: widget.measurements, measurements: widget.measurements,
subdivisions: widget.subdivisions,
onSelectionChanged: handleSelection, onSelectionChanged: handleSelection,
), ),
), ),
......
File added
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment