From 40aa2528b7650feaa7dbd20e37d32190eaf4b8cb Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Tue, 7 May 2024 11:31:49 +0200
Subject: [PATCH] update: subdiv list in init

---
 app/lib/consts.dart                           |   4 ++--
 app/lib/pages/default_page.dart               |   1 +
 app/lib/server_requests/init_state.dart       |  21 +++++++++++++++++-
 app/lib/widgets/choropleth_map.dart           |  21 +++++-------------
 app/lib/widgets/main_layout.dart              |   3 +++
 server/__pycache__/scheduler.cpython-311.pyc  | Bin 0 -> 1734 bytes
 .../get_measurements.cpython-311.pyc          | Bin 7443 -> 6476 bytes
 7 files changed, 31 insertions(+), 19 deletions(-)
 create mode 100644 server/__pycache__/scheduler.cpython-311.pyc

diff --git a/app/lib/consts.dart b/app/lib/consts.dart
index d3163031..dae3e59a 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 e57dd7be..3d9459e3 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 f9ad01fe..a30d0fd5 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 fdfd07ca..b4869d90 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 652c8b4b..49687cc4 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
GIT binary patch
literal 1734
zcmZ3^%ge>Uz`(HQy=9sP3j@Pr5C?{tpp4HR3=9m@8B!Qh7;_k+AT(nXBbd(=#gxL3
z!j!|D%M!)H2$EyYVa;WWVq;`TVM%3AV@hFdVTs~MVQXQC;!I%-X3%7R2{P7iCF3oD
z^wg60+|<P4(xTMd)Vz{nO~zZoK91h5@j<RWjv=1@e!=kpjv*emxN;J+Q{(dzb5o0x
z89}<Cn1z9Xfti7U;j<ptfi(;+46%Z>j3r2FY8aO>GBB)$i!d_u2!Wl!RORNApI=a{
zP?AxUUz(nwkeHLB0J28`Y>z@>UW!6;Vopx60=g?TG!^pm6jBqDGr;Qoia<`#WGZ4~
zU|_h#0y3f)6mkj*zl@x%VnT~ki;83NO7co$TvCg(OY#e13X1a6jVuieVv19X%2JDB
zijy-^Q%ZAEi}VUAZ;6){q$HN4#wX_FpoC2kD4sYO7#NCm7#J8D7#;{nePCc@l?M|Y
zEO$91W{6zmkh{VmcL9t(FvBE2gF-7AM8Gh}r65Ot?qdW+EOL0IV1!o*NF`Kf2`I#&
z>=dRd1_p){<`kAStjm}g7*@m8nKINel(0jUF)%P>!FAOzpvFcmV+tDxE@NU~SPcp^
zuqH-^JZ@zMLxy6Oa;6IANQQDoMutcRMg~TP5^k^pFo7AfCA?q>Fp&kfKZPCD&MXeF
z0tN<#1)$)Bao{vQJ5WtxWZ+~#u@e+UU~`r+FfgnJvp@tRLy0(uhTtq72+hEd!ijEP
zkA@~!m2ogMJ%G|?sscDYWagzS<fnntXl`Obu|jHDYEdO9>87SCq$E}rR~dzZk_|{1
zJRPSbmL%#agk)qEE953tDwHH<rz#ZZ=cX!@Wag&o>FHGogVGo%y+X2<URH5_-Yv$W
zD%R4HG+hf###<bzdCB=HnR)4cFF}zT@)DGdG<k2a78GUXmE2;<FG$TRVg)CAuwIs&
z{KOP+LcPTSOVqbm!EU|90&?aprj-0!+(o5%@dc@QAcJqQfE;s+wKyj=wLp{U7E4-Y
zPAWJjLGw@%D2{FkfCC{l9%g7!kt_oP13xG?d<5r)r!1Toxa=;n*k56>zrbSum5qUm
z?<$|-1r^JSe3m<mPl#XO47|u0c!e_%lwVXYght*Km7Eeeqhw<Il=u!VP-amD%YccG
z42-O*UqA$yi<9{A;|DgmuN(}lGBdm`vZ!BSQNO^V{*{e^mAA!jg5gCL(JLS%b)7}_
z5{v9rInxbU7v&tU$T?nQak|3dbb-a`0~-^o*j)~RD;zTL+<cdVr-y5TVJB}7ZwK!O
zRwh=lVnGH5hE<}D+{_2LSseM<4+=3l^0RAl6$vviFce9F2vJb9$mAv##AhVtrGN?-
z^m42Slr3-ZLJA?h<ovwil459V=42L^fa4Jy&MO&;K=}?F6~8!aa`Qojm0gh%0|Nsn
zK@?XoFfe>zW@Kc%!NA=BhDZ$l1~7cUV0i%*-C)qYfQmk_F*C}qVEMqn%qWje@CY)B
LePF;Oz%By-F?5!p

literal 0
HcmV?d00001

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
GIT binary patch
delta 1247
zcmbPib;gKqIWI340|Ntt;cLsZXHpaSZi+L4xKJ#}z`(%Fz`*eN2g}5N_VNrVj8zN_
z49l1p7*;bul`zyYrZdzsr8CqrPmW>KWn`S(#V9Yzn8Jjr%9Np&W%52oaY2@4j0_B`
z;g;00PA*{86R2TzVVJ-eD_zT$&QQx<!!}uk$y=5!g;f$}3quWC3L7$Sau1WFG+PQg
zLM(+7!LDJOe1J(go1=y;g%=^}!Vo*Dma~R4g%2TC%T>df!jHt~uHj4(K;rY%aHR;=
zaHa?$#A-NGgpqjMH9R$(ll_<_S;49%FBBG=+{7%&%2mT%!!vmSvobSh4b$Wg%o<EJ
z?2|t*i%+&?5#;NcT*F?&k-}@kz`#($3=(GKm~6+QD9TWS7Id||DdLk2nCt{nm_e|H
zH-%>oTP+_{6W`=pESk&=3j`)BvI|d+XXl@+!73}wU&0FyIfg7yG=jM`%r*Rz6Ij()
zQka7oCI<?M#ef*f3?(XHX)vL}P$XL`P@)dzfQb~T8iCmibD2<Mj*%gfA%(eCpiTf}
z28314Sk6$v9LZ45s3~2wck)&CmdOI5mYd&jq%bNgxE2-V7b#@sDU=qZB$j06r7Ps7
zCKi_#rRJvQl@wbkXo^fe&ebi<=~|JTT2PXipLdJ3peQr1L{o6`Htr+rjH$&Se@vdl
zlP&7Pz`y`Xw#CWJ3=9nnANc$jS<N;J@xEr7%rC$?`7ggXnC2H?t^e_rje$q>0|O(g
z8G^XW!Fz$vWP{)ZK9dW4CKowOuW*=Nz=nSO`0?WdGb5|nj~_pZ6B!s7njB?3g%}RX
zi8|UdA2j9xvF%x$nAs08GkXd#9AaYxvDw|EJ%t!fD2aKpS}>om;Pw<^ILXT5$;p0_
z6Qt@S4<m@p3uX&(d0H}`lo9eYVLoZX>S@VbWW>P0P-L=shoAs!h8l>?0wO^1QKZ4Z
zz;KH>Gq0qG6(q(6BD6tbY(<HADfzj#*g-T%UI!#9=$4t2>X%>QmS38e0uKHnLy#5&
z1_lOAUZ_PN0kg>l;@WJsAg0~qL~#{uYY@|kfq|hIl#UdTL6I{^P8UWbZQdaMk%{Rg
z%jCsUo>CzoEuhS;08s{VToH(vF_}$z7Pk^e7uY90lUGZpT7%-TNE75#mYmGuk|L0)
zw^-A1@)JwIx{4w}8lpf1$ktyRHo5sJr8%i~Me&opWwL}r85zw!Fd&fyOp{N@xU+zC
F006Yw2-*Mu

delta 2109
zcmX?OG}(%8IWI340|NuYLlv#G6S5QeZi+L3xKJ#}z`(%Fz`*eN9NWZy_VSD=j8zN_
z49l1p7*@lT)iR|s)H0_t)Ur&DVbo=0n%u=GFUpj{gsRGvp_X;>K1Ojt)@6(g467NT
z7BJMZO)g*+oBW4SQi#okVFF{UbS-;2LoG)QdkTx><c<8IlWmxcW!Y0$C1E-kYS>fQ
zka?4Pm?Rn5C+qM_Fx9Y6KER}$%~`{q!i!Mi!Vo*DmaB#<g%2TC%U#2j!jHt~so_cy
zK;rY(aHj~?aHR+##A>)wgpqhWHM})kll_<_8M!8BFdMUS*YMQvPF}#Q%*ZwQ0E?tB
zH>yt=8EQBte_$4$e3w~}uV-=%M-68RuMGnOLk-L156l{q{a6G=8EcqPgRPb?MSQXW
zlbt{cGYHo3rSQyQtK|o45ohF|e2Ybsk#RB$tE03)2`@Z^7_vYS2j<qW)Cf#YU{#y^
zhf#v1M3sSI@)<^n`V_%zaQqdCq399@YhhquNRdisM0I_wU>**&H7qI8Yh=)zEtr?3
z%uu2MGmn8mg`p_6R;WZ9EK(09Q)Fv|W;4uXLbZsIAw{lMu!doQ7+4V+ks^<-x`tta
zIGQ3bH$@>u5!F$Q3^fc3BtVjrxme}u85trOQkZLn>V)z*AaprnIYR|=BttnPPV1GZ
zVLiwR43qg;CDTDp%7Q1U1yW!cG@?dufi#*Bn46-E>K0TUBSQ*vFoUK_qBtW1!{k4#
zEw06>IcW+SPKm{-9w8wCL8*nMsl_E8iFqkGsYRMr3XTeydBr7(dC92?`DqG?3fL8H
z&Su-hSkIrAuaKLXSX^3^nwy$eQv8yIfq_Aj@fKTVUP@|SNtL{7QBi)8LS~*qdTL2Y
zW?njqYAb~*rs&wrFN_QfRXoo5c_pcNCAuY*1*ug6i3J5YnaPPInfZD8S;hHzFHbNq
zFjTRYmZa%gXv*AT$}hgfQjj>=gQGcxIVUym7HdjrZb9)aPS=X$)B=#MTdV~|nRz9*
zc#Bi>QsRqJiwpAeic@cKgSi>0i7BZ?x41!45O(n`*7CH>oYY&a<wcn#skhit^OEyZ
zQZ<Edv4DbW@;#0t61*@|;!_e!5^pi47K5^hg2LpLoY|s*3=9mQ^0U~Ug@K`g;e$XF
zBdhdgO|I8WlcPn%>%X!w@bGukT;!Iy!Y#9a@e;S<1#ZQ=G759NE@)U@P`A1$V|_)&
zy2H1__bVHNtl}K61vNVyFUZ(kl(D-aW7pyP<Hu8Okq->)tkMYLE(h-gKI09H7x;`X
z@EKp^FuB5Ea)HC-hJ;K9?*}#pPTuPrQkOWSW*A@OsF%OOA%B5G{ssrnbq<M391=6+
zE@)a`<gmHIVRM1Q1}=P&L+T2L)CCOm<HwI5ANbi>r9rd^11sls7O_h#ViSrlvPfTH
zk-oqpeS?MLI*Z697Lf^Y7gWtJvRGVUvADou0Tr%i5xK}Bc7;Xk0*lxOHU?JC7B8sk
z*z2O2mqayJs9zK{x*}?Hk;V85i}3{*Do$o#U}$ob@#1GVC@1P@&wS9B2gJ5#abjja
z#LVo)&v1y15yWP9llJ0gIH4rw$-;cX0;K393yUWQ`$-OvBK4Epj35q=Ba;_D!zq3)
zZ!_jol8(aOhRml8S-s7ei|iN}7>XP=f8-Tl70?8+K`FUN3&hf%EGR7Os>i^<aEq-d
zF)t-Q_ZB;d&de(*(g%qOx@G31`sJ6n<(KBAfKz;t8AzikC^PUvjRpxgP0ke7X7dCw
zy(Z5RR?&6`G5r}B7>Yq<wgNIJ3INF&z=-nAFNHrcF%>CIz9Z%-l?c)TsyY=Q%0P}Q
z0ugH`+l$ZQRt4z-yFGI96Y*4QP~t4o0XdZ=C$qSu2xRIl*0h}b#1gQsqEwKEG!Ox@
n^%sXtZhlH>PO4o|_T(0cEa5ChMw1T=NMscAWJXDM7LX1A*wfv}

-- 
GitLab