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 zcmaJ>O=ufO6rNelN-N3oPh7{Xv6bylumz2X9RhVJF>;fVwnnXM`(U9W7VXHABJGNq zRTB#veDJ{qQ&I@n$DZ7#?xDvXddV%vRZ(bIFa$~uK2^aDn4J1%BFUB=Iy?L3&6~IH zy?yU{^J63uLNI>+XF4}Q5c*4O+CynEN4J65K_)VB38h}GIECe2Nhz=@C107O2o`6) zl3Mns{J;|$$SJ0}Nm82W-$bdPi5E~Ta45_sA7Zb6g*ursHF%ZLGPN8Y!`|Rr;`3XX zuWrpH7C-$WxsdrXv3T1Hm5e(yV;N=2v$z$MSRi2JgZC&7WCyLGo9OF-b?ltdS;Kp< z+wVv)+P)yeP->sd*>;8NPM+D-mAr10O1ki)OFz0{nR*svTt6G-L`=6Wof_G^)K4-I zLQG+PSUe(3aFID(e>wH>hv_9w8Bbe|RZZWd{ElN+(iLW}Oif?CnueoqC`<Efo|@GX zW%0_YH(aflhC?&px+^zK)F}ure;>#Ode%SEL|DBf$rd@#-rRkou0<PK)RnX8Yabqg zKFSKx9wJhix9=b?JLq)2%yap2gl20vBIB)LDmCCtpGkgE_dsXAqjw#xBPY<-L#WvK zY7KQ)V;!4*@$5mu_S<kn7+K+W(In#Ju5!<}jP7ELmO+Y<6F#wezOqi_<h0oFZw9)3 z7PYq44<eoC#{c=~wuGS`T|Q+i34?p^?sqIh+{2v>D)zK_GkDhC_CzdHySC86gTN-$ zB_0aaif-p5M#~0(mI7{81#~IZO=FeUrj`V3gjxs3us7oRV!pujvH{8h+uSZw-6@o5 zJRYwN3XGk!R=mh<%fqauR-N3H51<(}YGrK`j3y67aTgCo8^t1?T44pt@rYfa7E?jy z5&11C*@h{B>S=9Id#a4pBO**sF>No*s#XTR6ox$_g7H*dqO=lIJd!Iw9|(N5dWeY{ zdHt=XXd7j048(mx?KzMQ^fw8*p&NBF(;zc0nR($yq24FGZ@ceJ*L$abyY_h44bInt z^NrxV=$Fgx((=L3TMw3Zo$oUbGFu_hESKepB+rG;zk-~|UdJ6DAHPogLPP54?q_u} z-XP;H8HZ@p$Y%2XWStB(#2opPjQv5zo<y(zTC7JCjcB4yW*cPIC9_SxqFy}E`WxD4 zr<)J7p6$^6$!{auk*!Em1qD6;fBo}NBJ6t<CW*elqYD^lEW`#u&PD_o0^*GVSTcFI z%EaYz_8w!RExpLAODLYTE$;AEHA@BV$U4eAKSWIQoh-#m?W3|SE~^{t9gqn?@OwZY vgBU+W;SKqmV){1Z^9)V9-Sa8B;&#ub--j>#M4AYev!rJLUu>fDL`L=>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 zcmZuwO=whC6u$S}_cMQQ=FLneLo$huCfE$ACE7%cKMC5HGFSqlE>aXb^^SHlnHk=^ z5Rv<;NLQ_k>e-a4U@6!|HbS6uQ&A~216?Sz3kTc^VizeQ1i{jCo{2M-o_Y7X-*@gg z_uRjMUB7RS|7hD0hPLh5*r_KySK^PdoaCA%u@~5$uj*I+nb^oAKac8`#@HgZ*XHxn z%-669IL5bf4qx$&87{TAqehvp!yTSY>bJ1K;+rDA0d?bjM;Vjs8-6_Jn>dlBOc>A( z_L<V?Ua!KGDa}p=m$mMkDXq3ohT9xxxU2P_4Plnu_D-_nSN*UG%Xr)8M^Gm^bQHDI zp<^l{ljuveeW=nMDym{C4AY|92%_NobQfGg6;U_>H$}e)D-Bk}pr$PBvanZA#xH}i zR7l!;aED5en}=Xr-;`nMKS$@=G7H1nxFZGqlr3Y|O+UVt6o-~x5bUM{o2)dPuo5t6 z^yLzs{pRG@8M?;6lu!xy)Yzg+ahSoORM#;g{mdI!k6>(oxqZIlz1#N49_3tPH?+5J zj<Xpih3|ZU>pHx~7We`?CuZ0JFXYbu0)JXxf|D6r`YR-PfBt~$*4%uhnxC)Bl2@so z&d-%gjd`~`SFU=EUHQU0@LS~TbojuzljXWssa0D>-K|u;LK1$8{%Y}ZgZ2SeV`npy zNa)!%PU7pl$X4Rh+}N>{vY%;?a13~r$Ob*~3#%_o7R#(K3~0mSko_P&ayyBD-^0-8 zAED6)|M#t;tq9D;zEQ%8m-h7*Q|#V`%)SY6?}Hfe34On??hAqZzR8JOQ#lmNo4bm} zPO-c*ilS-g#jw>3Q&cm?iQ55BMT%ph*_$ekh~|ia+})04+>xc9laBHE7UDVq-G@7f z&=Pniu0hfy7$TqPma4Kg*RrUm@%PA^oT|*0r)%C+ZN4gl<9D}F$}mE~UMob79Wb07 zGWQZ4hf;Q6XgAUQ2n~8i`A%~`q_M5*@Y&Ms?BAO9REHmWiakdth5p?6*I~4{V1?g; znforfnPjk&k6|%a-c9%D77$wcY^C7^v$l*=v$c{JWVtgG@CgA`eHq#_SCjLz<#G1} X9PB-lKFT@XY6sReSnmBur;L9AwAu*T delta 2109 zcmb_dO>7%Q6rS0gwKx8E9RI~mylGMzH!b~1T0#;fq%>`ls--|LZ3)H7Y*HuA+U#zW z60I?U9wNk{WiC}Il1~K$NI))}P+M_GONG{vrIZy#LV`oZB^4l5s6xy*KaLB%F`jwz zzBk`{^Y-oR_|9I^<N3(#b^zLbZreV-*mTMBLzrW5t@-K9)A9TFwo88xBp`-!6kVf~ zPd8|JZUW?aIuLmU?t~n97bb!n=4x5{Kwco<z_4Gq2B|k4t1WLMIUz(I!DzkhAh-xe zV|hD`B^q{&qU1|&ko0k#O?E6q*F6ATvTa7>JuV9EWQRAx8Fq4=Yn`g26nB+!5RAT` zcNh-rsoL^RioKh#i(=m<>^7X(Pi^&88%2Rl$Yr<<2RY71p@W>`I|ZjfEu_e|QhXgn z1J2qfg}@NW3Lhr-c)#a8Vu(f^cK6YzG7vSlljF!Aga%(*w!8<2$!@OShk5ohJlJ*B zmiJa%!q7`Bl!TBVVKC;?-5V7GlkCM+nt==-c};kVRycz6tpJcaFjBz&sml9PLp5H3 zbuZjF0c*3*`;{kf4TNK##UD%CuS~WAy?s3%0Bt}W&DZN46-%Kaag$O10r-%s-3S8Q zoc9}`7^*r~HJo^yO_|~9dR4;`ZmCU*z5q~+Fa~i5%>@Wf0nF#?->g@})p-`qg7f?- zFbki!{g(e@`%03;D?}$)N|PH$s@Pafzp5GjVyud)8g8x4r54dL@-KsATPjRHHS$Qf zFr>+uajE@4N|TSAJbB_J`SlrD(~qPSoRQUJk2ENy6-`emW3rSTmr~My6BnjzU%`S` z$x735N}EyTX<5;=`-rBMgqAI>V2bAwL#mopX+UX0*7dY9QN!+$=D0JX=|5;<bFSyJ zicVd2>Tl%aIbSN5%cRFrdOEA@n$)t&{Y4shPMFchcXlV^7MIm5luMB#;yakn$ciQ4 zndzKn)eW5=lXJ|=5^`!<(Ji+oEBLG`Yq_kV$(FMM&&eq)tCo{3t?HU3%#NosGM&`4 zE?YKP8Ovfh8L$v57x_v2HsW57au%oblm%steI}AbKB=1uzDQMee`*7?1aE;A-)Shs z7LtzNIC7>TT=>%lT;6%3<cyb{@giJuwwTVAdvWRNh}r(Exvi%Z?=8oB=a0=Fqs*q3 zt0P6@>p?T#UyApa<Nfo;9zOil*{}laLaZw8iEh)=`30nc_LA6D7Q0Nb>uw}I?_RNi zI`^{JxFj}Srb~rHSxlH>;;!gg79&ey<Z`o_>@A6XWwFl``!>uav9T;Rn*Zt#X<PBq z-Pzm#gt}!ET0)_VS_#F<C}yJAT_i4}h9%T+@l|u{GbPkrM%^arUNaX^LkWe-C}g4# zO--n~FtWxTT@EIfg2|7!m4bWA!M!EaSw@}ade_EiN#7ofk9fh2=HTD}f1}gI^Z|5$ zx8LM>s^7FhrrQt2C|KMQ8b<tLHzVCbXjru05*caREhl8aHONtP+v_;GpT8X)3>@9V zf44`VK<%d+sn0DuaQg&blIiRutJ|6AApSsL=xM52HkE!R*=ftpW_rBTUCin~L{HA~ ztbQmvqu|PkSNAi=eN-gfYoVFp07(ZrY{N_)Ay)!z9fz6v0u>s&v!%^VJ;By?uZ!7* z`+)}>r*0uXhK3tc%!U1RN~<)MoXW)KWFUOSNpJVH+)t5T!g4P=oazoLER;!WdL^nQ wjAybbz2c?Hj4;jw+x0K8Z#s)-GIGB<MJ_}p1CtPTt$<DPG*4jkFk&A60NB&r$N&HU -- GitLab