From f7720b7806d7e0abb41c052a9da0218bf342b980 Mon Sep 17 00:00:00 2001
From: Hoa Ben The Nguyen <hbnguye@stud.ntnu.no>
Date: Thu, 29 Feb 2024 15:35:23 +0100
Subject: [PATCH] change: working function for adding lidar data, but slow

---
 .../process_lidar_data.cpython-39.pyc         | Bin 2792 -> 2853 bytes
 server/data_processing/process_lidar_data.py  |   8 +-
 server/main.py                                |  11 ++-
 .../__pycache__/get_markers.cpython-39.pyc    | Bin 2796 -> 2059 bytes
 .../__pycache__/input_new_data.cpython-39.pyc | Bin 1591 -> 1759 bytes
 server/map/get_markers.py                     |  92 ++++++++----------
 server/map/input_new_data.py                  |  26 +++--
 server/sql_db/icedb                           | Bin 45056 -> 45056 bytes
 server/sql_db/schema.sql                      |   3 -
 9 files changed, 68 insertions(+), 72 deletions(-)

diff --git a/server/data_processing/__pycache__/process_lidar_data.cpython-39.pyc b/server/data_processing/__pycache__/process_lidar_data.cpython-39.pyc
index 4b9c5e0857452a784de0ace8ed0f1d69d5075580..ed6b00f7f03e667fd4b21e59cb7f512854ed06c6 100644
GIT binary patch
delta 332
zcmaDMx>SrWk(ZZ?0SLBEd625ky^-${d;K;bw}v5wQIa8rNrWMVSpvjk0rFUZJT`HL
zG$yDly9Bxl7N7`RRXS5ALkYtI#u6rwSqm9!8KFF&SwJ3B33CZc4PzE75VHX>doy!0
zBT#IzK8KP!M+#>PM-6i`Q!`^Na|tJq#aPQy!xGG($>mqX2y|e&MPc}n0J(h!GS^=*
zU?^e*30>IqG3ovzLB~w5?d}XOQ-DH~C$fr8Uc#X!6~&QQl$uzTpO;$11{5#i1`z^4
z!e{aW4sAxR$vm9qJjy`6ChIL0kkZM)oW_i*liN9Er9^<j3|w-IYX4bS_!#+^beLF}
V#F#jkiu5P%;=IkMKY1Eg5C9T<Oc?+G

delta 242
zcmZ1~_Ck~|k(ZZ?0SHuX-c60;+Q@f_-KYo1?O;e@lw?R@5&^N8fh-mghBT&5h7yJa
zj3rDUxrL0ij8Go)WG4=LJJuAo7LFR`W~OGwTIL#-1)L>ZKpx{lMn;AjmS6@=cE2J<
zpvmbLh2cj6<n|pXVg>P%xk_#x=n!(8Jdss&@?8!!v0E&OMX8BJY(U8(ZV({=B)lif
za%wYjPxj<A7mx=DDgy~k)*@9PHMxh=m{Dc&0Zv&lkWvON31&V<J|-O|7A7$uU8Fbp
NJLhdiy~&rkf&g*(HI4uP

diff --git a/server/data_processing/process_lidar_data.py b/server/data_processing/process_lidar_data.py
index 4db12e3d..55d31e2a 100644
--- a/server/data_processing/process_lidar_data.py
+++ b/server/data_processing/process_lidar_data.py
@@ -62,7 +62,8 @@ def height_in_area(area):
     # ]
 
     # NB: is only for the test data should be removed after
-    area = (area[0] * ((-3671212/60.815356) - (-3200175/60.774878)), area[1] * ((7898422/10.672022) - (4699978/10.768867)))
+    areazone = [(((area[0]) * ((-3671212/60.815356) - (-3200175/60.774878))) - 3200175, (area[1] * ((7898422/10.768867) - (4699978/10.672022))) + 4699978),
+                (((area[0] - 100) * ((-3671212/60.815356) - (-3200175/60.774878))) - 3200175, ((area[1] - 1) * ((7898422/10.768867) - (4699978/10.672022))) + 4699978)]
 
     # Refactor data format
     iceOver = laspy.read(lazData_path[0])
@@ -72,7 +73,8 @@ def height_in_area(area):
 
     area_heights = []
 
-    ice_points = list(filter(lambda position: inArea(position, area), ice_points))
-    area_heights.append(find_height(ice_points))
+    ice_points = list(filter(lambda position: inArea(position, areazone), ice_points))
+
+    area_heights = find_height(ice_points)
 
     return area_heights
diff --git a/server/main.py b/server/main.py
index 7e79ca5e..222352aa 100644
--- a/server/main.py
+++ b/server/main.py
@@ -29,7 +29,7 @@ class IceHTTP(BaseHTTPRequestHandler):
 
     def do_GET(self):
         # Root path
-        if self.path == '/': # NB: temporary root path behavior
+        if self.path == '/':  # NB: temporary root path behavior
             self.send_response(200)
             self.send_header("Content-type", "text/plain")
             self.end_headers()
@@ -37,17 +37,18 @@ class IceHTTP(BaseHTTPRequestHandler):
             self.wfile.write(b"Root path hit!")
 
         elif self.path == '/update_map':  # NB: should be POST?
-            get_all_markers(self, self.cursor, False)   # Get all markers
-
+            get_all_markers(self, self.cursor, False, 'Mjosa')  # Get all markers
+            # NB: temporary hardcoded waterBodyName
         elif self.path == '/get_valid_markers':  # NB: should be POST?
-            get_all_markers(self, self.cursor, True)  # Get only valid markers
+            get_all_markers(self, self.cursor, True, 'Mjosa')  # Get only valid markers
+            # NB: temporary hardcoded waterBodyName
 
     def do_POST(self):
         if self.path == '/get_weather_data':
             get_weather(self)
 
         elif self.path == '/new_lidar_data':
-            input_new_Lidar_data(self,self.cursor, 1, 'Mjøsa') # hardcoded body of water must change later
+            input_new_Lidar_data(self,self.cursor, 1, 'Mjosa') # hardcoded body of water must change later
 
 # Terminate server on key press q
 def on_key_press(server, event, cursor, conn):
diff --git a/server/map/__pycache__/get_markers.cpython-39.pyc b/server/map/__pycache__/get_markers.cpython-39.pyc
index 9e45cfc2c9ce435036ce31556ab2be3352754967..cc7f240b40c18edd6be1771b577755de32cccab0 100644
GIT binary patch
delta 1130
zcmZWn&2QX96n`@w+vBh8Hc3e~RA5yt+la7gB@hyXiqMTpr6z|K5p^Y0IT>ql+IY#>
zyC~6^J(L@&RAdS95v1KefCJpQ!j&WH32}?mYo+#3#2fF1Mq(`g-p9Q6=Dpv{<1=5?
zYf%umfa~Y=zv5qluWL7kOq<hHL#el~;-7s<03MQqx*!EpRL&_T=-Yrg8G&MBLI5=~
zhQdssu$0+`PrfZ|WecML1xLvmfM`}|RcKepD|9M!hYb+kp<OtND{BDq8|5fVVTkY>
zFd*``7uJX>M<2V_!dP1bRe@TCry7tO=&Lv2J`tx64drx+m^oxRdj&Ic)JEnQcMCVi
zW--dROS8xM&{FQikpJYin7xk&h`GWOX9_=^5ib>9&UYN;in^G8Kns5p(iH}|`;hE!
z5GVoy2j?(vK?Og+kMv~rCfo*r5nlwUJCT>*5-1pX%B$FekuMr=h{Z8QDq$3iLCc-m
z=#=tDb@B3;=r94dVCn2ebdBQOlvn8c#4U+2TRt%7X;`UztF;mB#><s)S+s8Tx7x`d
z$&y}ry}cZY)-~Dde>PFqlQh}w?|$@YvVAv=vut@%;vLai9mF!~#wT_}>uQ|lvAhxG
zN!}N+E;aS^((cq%9qM8F_I6)J+xu?$)O@{cTJM%mtkv=-%k@sQQ~qJRd13RzwVP|<
zr04Lxu(`g|%c7<mPS?R(;p#@a{GMGNN_>HEWNEN9a1D+I{YZ~I4L-t>-QjqONCwy2
z9eX-$$H!U!o2KKh4!SQa59c@@tK)0qc%lwJp5)Oh{-kKdWOju7!%@|dp*2?iX`d&o
zd~UxsuiH6TT$8dV!z2y&`mx+k(r$T^pPM=RfA@F%cTy`OXLhj@d>$dgAN0h&zQT@^
z?cKXmrI)$W3jD0UbqB|)Iw*g2&XZ>Ow<Cs{lI&vyAdIjYBb>UF8_eK@GmD(~o>?BJ
zbuwpCVo~jPpEHv^^?jc%5RTavWpoB3YN#(7F7XLB<Puh1GUNgZIjccCWb+taov0Vl
Ue#BRHd!m0YzM`4QG)LV07l&gMNdN!<

literal 2796
zcmeGeO>Y}TbY^#Uy|&kBnih&nfmKhnNZhCbiI!54#;yoT9Vu}MU0kfq&Lr8y-gRf!
zX=AOqv`3J7CrHkbzrdLT;wOyY#L0IgP$dv=c4NnFC<x9SYu~*0=6%hZnfL4z3ONMh
z%b$K`S5G7KizFt83dD!-h35fKL~#q*h+(Q6V5(B`nAi%%YpA3RVI9><SZI4r%cHJT
z9E}1X(#;}#;ddCJC%AVjR`}T%55VLh#>melxFT`D@FD7}9_o`=t)P29_O)1}Y7zBy
zm`M=<)DoyCFq1$df!QLWxdXkQ0hxTlF@aM!Q2Iu!$7B!j@8e8NV$h^hMYM<c;FuaH
zaVCktIO3g3Bz`}pK*Ep`_sd{Sqtl6p(+Qj@qDTeanId|G>DdD{&TQe>*uwOc15H}E
z4q6e3$v`^<iGDWHV-+OTUF8W5F9MYvQT&}KLtlLae(1S=j=t8<`!lrI&qc;gHqKIw
zp8rbe=hu;couDZ91n)n_sBdD_y9j!($L81Q8)Z^^9o>b)>ziMgelDHo(L9RLARp(F
z{i1<MFVHs*705ms6b_M`ccuoX;{0HmzIm9O5k+v&Z`GWE0>^1RH`c1l)y2BiF5hNO
z*yXIv{Aj5%3yd}9hXGIVy4Pk$0(91*<z*-GqAq0#9{5`+al-hKFIrx5Sv}}TX~1p<
zQ53W#vFNniZp(=nt#5nouFt|yvKL&p%N=)r)(VfJsPA{cR|qSSx5s8*<j5^A2Ha;!
z&?Edf)G=oqu(eUHIc;{r+^yA>+tx%vto8|!rCP1JYJI%2RI}1VS)sL3n@F4W!8rP*
z%0H=BoXD|gsyyLysR9=0v&VA6%yRWsJq;q=xaI!69rs`COzh@nK=)TR*WpmOwUJs&
z2+5bpf~a1Qwe^pxt5wLr<YlpLSe1o(wYhfZ=B3)o`lZsWwN$HDS3g-;w%&!MyQTM^
z*_89?%S)PE;pLZ?^tnm}7iawB{@*3#(8ADAcDNytK$Ae1AR~bRpri|9R53($d<eFl
zRxmp|u3z?<zo}lfF{)idQ<{_=w50GXOk8$SLF8)}ne?@WL%8f{m_#K-hEk-Y+Qz8#
z+PM^y<<HjB;#bn_!ZT&UHYXpPt*0tny5>^=dUFfD#W)YR70ANM8MPj4do5<&?=rsc
z`CC@B%`6ImZ8#zGeua2?%4he6KgejX&^@0*Q|Mj(PiC%JJ##VeBhZ|SApG96)9JK4
z7aB+4U)~7=zo&Jh&AInVr$vT6WNtTNwz0_~ciU;Tgbvcor-Ez*K}(R97e+#de<)oR
z3bn<2p>??DM}kO8LZjVwCluN0Lzi`=15pS;yUAJD3H*?Wd_rzBhcYhmaw)|_p*`4y
zRKUc&hzXtfZa`V7AV|nsn?i?tK@;TioCM*)gV3ICA2-UTOqx)EZ%<9KJ!<FWQZv}t
zVQyp>+~iFkk%GuIJ1e7WN_Td??eJa3Q*)Soi}>5%@M&%FTH{X0c-YtuoaU9riq9$>
z`d?#hS56xNr;QE|wys>ApFc)GVUO`f+vzm6Skz2Shvm+`I3;Pw?uaMvfA~27go#41
zY3A~VLR14AM91UbQ#}v(pSo@+(|AUm#%GCwbw#e{{vaB`<TtZmDi^SU3Gj(B19DS<
spI39(#D>b}z(Yyp7hvM&B#?|`ixXfLc*3~e4rsT<Zpb$g%B&mYFW9X7mjD0&

diff --git a/server/map/__pycache__/input_new_data.cpython-39.pyc b/server/map/__pycache__/input_new_data.cpython-39.pyc
index 02a1dd5649b14c230e1c373aece6024d454c0a50..673649fd0412e6fd0fa2c004c01e4a38123e7fda 100644
GIT binary patch
delta 778
zcmY*VO;6N77@l`JZKvHW;6dcWXcH3>lz7mDgC9Y3iIN}^SOO9~H0_iv?6%Mj8rP{D
zHqny_X6|P9;$P4|pg+MwJ?Oz-;K7q5P8R}Unm+UPd7k&_JM+2v(;4s_$3|-XkiXa$
z^TR-A-%(!=)SKM^gxY@ubWs2TbLiq8+R_3XXzxL&JtRF0NWd1!N#8}dE=UJLIO0{G
z-h<N7HF_x5g`R#FdJR2)lN-W#MshQ!xs}`86sDjd?m%AQbYE0D5a4Z+zU5X~1BxlP
z0;8<BT{4`OIF9ma|F@<f!V)&G@M_5`y&|f8H2X+P3>1d69BjAV&$G%rHN4Xu=pmJC
z1$N1-T|x0Jg81M8yqW@(JAm4*5-Y;#9G%wb4#{=6Osb3R1Nj;zWEUnbOu1`~q{(Jq
zu+-aR^+x1x$1Ka_H*oi-W+rdj?(s_1rJ_kFDy_&*lZ^RE9JI3&xpb{A)n@B+?qlX<
zdns$Nn4ghX=IU<iRGY84ciovYj<rW~%cuRLDnOa$SKP(bg@w~e+MncKxQFL!avI;H
z50{^;F1h!g%C6>)oust~7ZbO^qRj?(!(=ZG<TdTL)ixCyc-)hN<Pw~d*U9jDVWw=S
z>G^EKYI+$@lb2CYXi>}y8Zz!Tyk;}i)X@vA$>KuaNlQt~_F9D=HWN?Pttc*RbsaJD
zd6dK(hM%-rk$gu!!ib#EckfKAb_5t3+VCMU3~Uhkj~KR2F#!tI{$pbbLttoE52@m9
aT*X6R<8(}Z)o0I-ss422ER4!=<Klmc2E`@-

delta 689
zcmZWm&ubGw6rLZulg(x~RH#8vaV|mvB2^Ir)*m6sArNy(p%|1Bb|>vhcGga2O%1d5
z5b-X15IiL(Z(hCnH+U)w;>D8(@ei=zY}$(A8|HiSzW3hu9?Vzwqf;Kbt_`$(Kl;L6
zkvHY}p`)XwzLO&jvv&$EfDaXtaDkRU;SpXU2o!vZ6JwP_OPI$CV+j&dnc}rFTi{7I
zA&NXUl0sr7#l)7TDky7&<}fKqqDpfp3pri{iL+9{%1}jROKY6d%E`-pV`SyS_Un3F
zabYh31hV9tb3Jey@VWt{^WrlEi3`Du>I_lt{A9V}!p*C<!6V@7{7aYHCw>ELXr>Qp
zh2HGBoqoU<(jU-Gf5EG19nrPg9h;uo@HPY>{fQo=H}S2@(>*2_eaMEBSg??B*=f<c
z^geC$TC|#Sd}XIb|FoV-ocd0WR{QO4ySYVMo&Hv*ryor%!9+LWyMc^-cI}K9%0LF1
z_)ja{#Ft8ct(U&X-wp@XB=&YZ#{Aj22B%DjNYKdhVj-AcD`y3Ez`R%wLi#T=5=)Oq
z(?M}OoJbK(13$AyOnQ66@mS!z0#D*F!(+xX90okIy@+$>$spnb;zeN?$jp2u0xq*+
z`@myq)qD%r(@*C9^{Q?M5Fvt{V}lT67c68z3p)C&L4qsC#I%uv%Fsrll7^&lqoO;+
a`oC~qhnck*Mt(eI_w)yV3DL09LB9duPptL;

diff --git a/server/map/get_markers.py b/server/map/get_markers.py
index e1e82312..48ce0673 100644
--- a/server/map/get_markers.py
+++ b/server/map/get_markers.py
@@ -1,86 +1,73 @@
 import json
 
+
 # get_markers requests all marker data or valid markers, converts the data to json, and writes
 # the data to the response object
-def get_all_markers(self, cursor, valid: bool):
+def get_all_markers(self, cursor, valid: bool, waterBodyName):
     try:
-        # NB: interval temporarily hard coded to 5 days
-        if valid:
-            cursor.execute('''
-                SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, d.Latitude, d.Longitude,
-                       d.IceTop, d.IceBottom, d.CalculatedThickness, d.Accuracy, s.SensorType, s.Active,
-                       c.CornerID, c.CornerLatitude, c.CornerLongitude, b.Name
-                FROM Measurement m
-                INNER JOIN Sensor s ON m.SensorID = s.SensorID
-                INNER JOIN Data d ON m.MeasurementID = d.MeasurementID
-                LEFT JOIN Corner c ON m.MeasurementID = c.MeasurementID
-                INNER JOIN BodyOfWater b ON m.WaterBodyName = b.Name
-                WHERE m.TimeMeasured > DATE_SUB(NOW(), INTERVAL 5 DAY);
-            ''')
-        else:
-            cursor.execute('''
-                SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, d.Latitude, d.Longitude,
-                       d.IceTop, d.IceBottom, d.CalculatedThickness, d.Accuracy, s.SensorType, s.Active,
-                       c.CornerID, c.CornerLatitude, c.CornerLongitude, b.Name
-                FROM Measurement m
-                INNER JOIN Sensor s ON m.SensorID = s.SensorID
-                INNER JOIN Data d ON m.MeasurementID = d.MeasurementID
-                LEFT JOIN Corner c ON m.MeasurementID = c.MeasurementID
-                INNER JOIN BodyOfWater b ON m.WaterBodyName = b.Name
-            ''')
+        sql_query = '''
+            SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, 
+                   s.SensorType, s.Active, 
+                   b.Name,
+                   d.SubDivisionID, d.GroupID, d.MinimumThickness, 
+                   d.AverageThickness, d.CenterLatitude, d.CenterLongitude, 
+                   d.Accuracy
+            FROM Measurement m
+            INNER JOIN Sensor s ON m.SensorID = s.SensorID
+            INNER JOIN BodyOfWater b ON m.WaterBodyName = b.Name
+            LEFT JOIN SubDivision d ON m.MeasurementID = d.MeasurementID
+            WHERE b.Name = 'Mjosa'
+        '''
+
+        if valid:  # Append time restriction to WHERE statement, NB temporarily hardcoded to 5 days
+            sql_query += ' AND m.TimeMeasured > DATE_SUB(NOW(), INTERVAL 5 DAY)'
+
+        cursor.execute(sql_query)
 
         rows = cursor.fetchall()
 
+        # Container for all fetched measurement objects
         measurement_data = {}
 
-        # Iterate over the fetched rows
+        # Iterate over all fetched rows
         for row in rows:
             measurement_id = row[0]
 
-            # Create a data object for current row
-            data_object = {
-                'Latitude': row[3],
-                'Longitude': row[4],
-                'IceTop': row[5],
-                'IceBottom': row[6],
-                'CalculatedThickness': row[7],
-                'Accuracy': row[8]
-            }
-
-            # Create a corner object for current row
-            corner_object = {
-                'Latitude': row[12],
-                'Longitude': row[13]
+            # Create subdivision new object
+            sub_division = {
+                'SubdivID': row[6],
+                'GroupID': row[7],
+                'MinThickness': row[8],
+                'AvgThickness': row[9],
+                'CenLatitude': row[10],
+                'CenLongitude': row[11],
+                'Accuracy': row[12]
             }
 
             # Check if measurement ID already exists in measurement_data
             if measurement_id in measurement_data:
                 # Check if the data object already exists in the list
-                if data_object not in measurement_data[measurement_id]['Data']:
-                    measurement_data[measurement_id]['Data'].append(data_object)
+                if sub_division not in measurement_data[measurement_id]['Subdivisions']:
+                    measurement_data[measurement_id]['Subdivisions'].append(sub_division)
 
-                # Check if the corner object already exists in the list
-                if corner_object not in measurement_data[measurement_id]['Corners']:
-                    measurement_data[measurement_id]['Corners'].append(corner_object)
             else:
                 # Create a new entry for measurement_id if it does not already exist in the list
                 measurement_data[measurement_id] = {
                     'MeasurementID': measurement_id,
                     'TimeMeasured': row[2],
-                    'Sensor': {
+                    'Sensor': {  # Each measurement only has one related sensor
                         'SensorID': row[1],
-                        'SensorType': row[9],
-                        'Active': bool(row[10])
+                        'SensorType': row[3],
+                        'Active': bool(row[4])
                     },
-                    'Data': [data_object],
-                    'Corners': [corner_object]
+                    'Subdivisions': [sub_division],  # Array of sub_division objects
                 }
 
         # Convert dictionary values to list of measurements
         data = list(measurement_data.values())
 
         if len(rows) == 0 or len(data) == 0:  # Return 500 and empty list if no data is found
-            print(f"An error occurred while querying the database")
+            print(f"Error in querying database")
             resp_code = 500
             marker_data = '[]'
         else:
@@ -89,7 +76,7 @@ def get_all_markers(self, cursor, valid: bool):
             marker_data = json.dumps(data, indent=4)
 
     except Exception as e:
-        print(f"An error occurred while querying the database: {e}")
+        print(f"Error in querying database: {e}")
         resp_code = 500
         marker_data = '[]'
 
@@ -100,4 +87,3 @@ def get_all_markers(self, cursor, valid: bool):
 
     # Write marker data to response object
     self.wfile.write(marker_data.encode('utf-8'))
-
diff --git a/server/map/input_new_data.py b/server/map/input_new_data.py
index 87276f92..ae0965bb 100644
--- a/server/map/input_new_data.py
+++ b/server/map/input_new_data.py
@@ -6,19 +6,23 @@ def input_new_Lidar_data(self, cursor, sensorId, bodyOfWater):
     try:
 
         cursor.execute('''
-            INSERT INTO Measurement( SensorID, TimeMeasured, WaterBodyName) VALUES 
-                (?,?,?);
-        ''',( sensorId, datetime.utcnow(), bodyOfWater))
+            INSERT INTO Measurement(  SensorID, TimeMeasured, WaterBodyName, WholeAverageThickness) VALUES 
+                (?,?,?,?);
+        ''', ( sensorId, datetime.utcnow().replace(microsecond=0), bodyOfWater,0))
 
         # auto generate new measurement id
         measurement_id = cursor.lastrowid
 
         cursor.execute('''
-            SELECT CenterLatitude, CenterLongitude, SubDivision, GroupID
+            UPDATE Measurement
+            SET measurementID = ?
+            WHERE MeasurementID IS NULL;
+        ''', (int(measurement_id),))
+
+        cursor.execute('''
+            SELECT CenterLatitude, CenterLongitude, SubDivisionID, GroupID
             FROM SubDivision
-            where MeasurementID = ? AND (CenterLatitude, CenterLongitude) 
-                       IN (SELECT DISTINCT CenterLongitude, CenterLatitiude
-                            FROM SubDivision);
+            GROUP BY CenterLatitude, CenterLongitude
         ''')
         position_data = cursor.fetchall()
 
@@ -26,11 +30,17 @@ def input_new_Lidar_data(self, cursor, sensorId, bodyOfWater):
             for row in position_data:
                 latitude, longitude, subID, groupID = row
                 heights = height_in_area((latitude,longitude))
+                if(len(heights) > 0):
+                    print(heights)
+                else:
+                    print("No height found")
                 average = sum(heights)/len(heights)
                 cursor.execute('''
                 INSERT INTO SubDivision(MeasurementID, SubDivisionID, GroupID, MinimumThickness, AverageThickness, CenterLatitude, CenterLongitude, Accuracy) VALUES
                     (?,?,?,?,?,?,?,?);
-                ''',(measurement_id, subID, groupID, min(heights), average, latitude, longitude, 1))
+                ''',(measurement_id, subID, groupID, float(min(heights)), float(average), float(latitude), float(longitude), float(1)))
+        else:
+            print('No data')
 
         cursor.connection.commit()
 
diff --git a/server/sql_db/icedb b/server/sql_db/icedb
index b19e3e7766c83a08ad8f1b6aa7c08743c90ab02d..a251f525001ab9e2def149b700f1a747503b7a04 100644
GIT binary patch
delta 940
zcmZuvL1+^}6y3?rX0vI!U!^okV-mH|UK+Ez-NbAyZ1ErpO~8YomzWq3>cOgaQ^6jp
zsFiqV5v)Z$1Qc6(X{`qjJ@jCp#zQMTv``e=qC^lqSkOPai6+tgFgyGIoA=+o`GaeY
z!8ON78}Z-s9TWUqIMp_leUxmakRh-H&*27S<fTfCPVd}tUCwPuy<V3ZQM)=LYNr|x
zDiK488HyH;M^!zl_Vr)7n&voe{y#7c^UoyB>#94i7+tEN$Eyc#F@RX#KvN8@!kpu{
zeui+?Bh;7?`9pDn0fYvCZs>ZoM+b@vP$ywHT8ry4)VQH47A}2=w-6#<MJQTO$&aNj
zqCcA)Y{Pdb!zPp}QAU5}pv~`c;cxC1MO=3|ow#}gLEs6YG+$1(_&m)k928*;vJeG_
z{7xR12jr9TL78h_VGPZ=10IPGNfJd-q7F0o>J2_cGjV>&-81mS4Bbwyc4yDFHzA1F
zAl_m6N6%~wJsdR?nZDB3!nPTje2nnR``r>U*(ftux;cON{fwDNZw>ipPMM)Ao$_hA
zr(OEX#QL>n#}}W@eK8X$)@QF78u@UpcQ`gZaP2<vd7!|-PxuC(;Ulc#j4Z+e%t8UC
z;5DirhJZ*>7j<~-H{ax>L?YB}e^M#GaQ7(sw@ly%a;(ELOje?Z=kGvwk7d3aedFva
zXLfd2NoJ|v+A&*Oteqh7USjRg-}Ui*$UVWq2E0X86JXdO|3dCha_(jICjXsV*6=|?
zSu->(tY~@^Yq{E5Wn`JM3$^)(VNEL2nXJ!S^Ld2Hjx`k6Tnd;EVBX7Xq_$icN1C5~
Gar`&crQSpU

delta 148
zcmZp8z|`=7X@WE(&qNt#Rvreuv{xHb7Wi{9^S3bYU*})T-?CXypp1WVOMJs(76$<l
z4!!~g{<Hiu`BV7K_?h@F^Udcg0IG=K+gwmLg;9iq{{#d7Z~ia*Z~33`-v=6Sf&T<h
wdISID6a6+oLmxBne+SAv28vzfpZs{fB2a861OH3@i~Ku*VypQl?_BQ=0OE8q*Z=?k

diff --git a/server/sql_db/schema.sql b/server/sql_db/schema.sql
index 14138216..3c151858 100644
--- a/server/sql_db/schema.sql
+++ b/server/sql_db/schema.sql
@@ -61,6 +61,3 @@ INSERT INTO SubDivision (MeasurementID, SubDivisionID, GroupID, MinimumThickness
 (2, 2, 2, 3.5, 5.0, 60.749, 10.783, 1.4),
 (3, 1, 1, 4.1, 5.7, 60.768, 10.845, 1.3),
 (3, 2, 2, 3.5, 5.0, 60.749, 10.783, 1.4);
-
-
-
-- 
GitLab