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