From 3b1ae240a971ca5ef8d699347f278e3ed20d151e Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Mon, 11 Mar 2024 17:16:05 +0100
Subject: [PATCH] add: some error handling, still no split

---
 .../__pycache__/get_relation.cpython-311.pyc  | Bin 5531 -> 5828 bytes
 server/map/get_relation.py                    |  33 ++++++++++++------
 2 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/server/map/__pycache__/get_relation.cpython-311.pyc b/server/map/__pycache__/get_relation.cpython-311.pyc
index bb596e391fabaf33934326971cb68302724bb81d..812af27f4b3e7b4696370419efaf670e47b9b2ff 100644
GIT binary patch
delta 1675
zcmZWpU1%d!6ux&dGnr(PnIw~>ZnNo5cbBc%{;XQNTa~sxbX%lLS1IDpR!W*XO_NPC
z*_o-DGNBO_`cP%zf-Z=fr;4^dtVIxI5kc`uXdtpRvbYF7=*vbyd{Vr3O46h|Va`40
z-t(95e0SdK|8`LN$nW<8@{A7N)8fiaNrCIXx&U|=SdeZXJlU3x;1<!hTXu=D$qzBd
znyw(rG*#rf>gb1OB^P4f0Jf{$e-dnwfbC`wC@HMXnnBCm+5w2e&v4=A)1buJ>?C-p
zT;eUy;jzsle#gB<YHhb_m)y1+32l`HVtd+bk1dc)FP6NPh)YZ_6!3>k1d8}`qVqTy
z3bVF^1bmN)Uuh5XZJxKqjzs+CmCe^Wz-o1Fb35K6aLHEiu<@)1Ut^=V<PxEmmQ<10
z=?;M%%!<u`ijO!&x?)WmfUMNikq=LVdRSYo$TZVgJBa*9LNW^M1h+VX40#V82s&B_
zI4vx&91PMxTx1m(qFNM%?rR2A6nf-E3JM?KjX!2jk{BsKS_Roivq&XM{a8Cx>7ojQ
zBD6g>0&^e{o!u>RA|&<R<R8Lc@+a`We2n=W;)wgksR!z=bOF^phL%JNOPQQj_oOv_
zWx*;Iv^rNXGI?wFNB7rIo+hOz2h0eWc^Tl(Jd^ReqS62iC*KkLd(vQ47^(?Fd&1DZ
zAZ_q>cl*6R!1=!jb33_h1FOXv06JM@MA`>yLyK+x!K0q0Y`Jj)#*el05@cJbXL<Z5
z6U9S51<LpXUpG&v3@ZW!2mj{_NQk-Wq&A);+n(k&Z$xcZ#o-3=Qn+Vrwq=DMv|R>6
zt_rDq*cEae9h&9BGjhzull2?ejW7Adb#``b<f(jN)iTwURnt-zHFa(|S<rGt^=Um<
zOzU|ynMdlSOkSI_2;^y1U(9ML%S?ZD>-JB-*guc04PMS`s&1%@y0xt8ORBZ3sfK2*
z<}B)N(rl)hG&EIPDOkmXSodbkOy0DT`IIIb<O2f?ij8rS2#oxX#uI`;Z$_QXk*alB
zd)3m6jBYHXblpJsrhjbxH1(%~j^6Z<L6*U9V&r=I{a31DUrp?50LV?lPuIRU{hhaZ
zZl-o_=3vL6!^NsFRTHN6gsH!I&=tFJp%&|}#U80fhilQ{^5q5(<Y0MvUka3`i5}{0
z0G>PJhz;&eAaY&9Bhm{hIr0&XL2lxPQ*Oe^JysRQYr^=RFuwb?^cI9Ud^~U#_TuTl
z2z(ru0s}CEKMA}J=XZyK!%!eo^N^{DgfGX>+k)*`V#u{%X4m>=b#+-cGHZI?O6DlM
zFKdRCNfDi*VyY=}Ei4Tsc$^FMNDg=jpM#qb!8l~drzl2LnDqSvhn4SRwB5%l<Idu=
zd!Z_f)`ZbLVHEExJ@5qnN4W_5@K|^l4&ZCyNPq(DAZ^S$`S3g8Gw?RP72bI63HWd&
g)c|BUDr^{s-3`zZlaQx&ON2vkpaJd|Mwrz2ADiE7zyJUM

delta 1269
zcmZWo-)kII6ux(6c4l_x_s-6CH@nSl*EDt0CaJ^*L4zqt)q(^>P-rVP_O44dahpu0
zh-C&-tPn7Q;UEes>{EP5USxeztS^Eu3Y)TMj1(2jgZN<n0l{-O-EC4Y+;h)8=R5a&
z=iGb08~)_9`MF^v2#!xr{!@9)`NDLmIw=wI5eX<1+&uiP>tG}k0u$hA>P?AR4(^Pa
z*wvUcFL3>VFA`boHVH*`2tQ3W5VJ|ZwFlp3@;v1sz7up-t`owP4cu+^ER-<vA~HGf
zb`a{rh$@L<p)^fiS&8I8dw>jO7T-#2AhFF3Iqr#+P+=O<eB?eZQqdqE;vElFJnB-E
z2n;9)C#VMJ1&<o=GU^H}>7HmZ4c3L@mk&qjYvZAI<Q#eJ^4hJS*C9e`YL{9V+tQB~
z5m|xT^&&C>>rxsDqK4U*^pwC1I4`=I-i0&_Zq5Y9y9SK0x;iuAJ@Ev!IoGnoEM_x@
zCAZv-7&Zdu!Jy<wMh7!yMXQnI2SZMBsmnE$r4ER~n^H+)9!tX#`n>xn)21XOwRHE;
z#xb5$Og1tcAh2V|q(8%Nu$-B>X<e)rtCirYUs;$9=C0S9iI_%d64LTn;V%kPaw&JS
zH04*&S+5qW{v0dL)>-k|jer~AiaY@C${(uP-Poc(R}Ubk<Rx*TQg2Qu-_ri)kVG8k
z@>6)(E99OOZzXcuQob$aTT&jh`1H9wC9(R%t>||2F}<r~TT1qxYP8JZZFQurj<nQ~
z9o1Zw_jusQwlvz7MqAS8PIDptBQ0LS7s!7^w^G9E?(J#<tcz**Lv!(oyrB1irN^j*
zJs2<<o$ti>lOb)yxJmZYq1cd7Jx#ehCC&#HP&+5exEAcb3_emhR9+XbZNg0T>u-Mk
z<+t$HiLwfJjK{M+e^O=DcW~L27Ut@eU3u|3?}uehjGsiS&&5TY%U`0vRv69)r`pL<
zJ6YZ~hT6u^$}_*4_R6z6T<psvnSrm&T65ZZpHc>Q?IBu%f9-ShNf>j^&{=rZd54ZS
z|8&Nv7REcQ=u8<)ar@(Cy~D##!)LA!&zo_XSG)WJ^ryZD(aX^y6ub-cQK)!hgTv_B
zjn!|wvG|sMmFwbi;QRdEI*k1*TpNHp-XQ%6_Po`XCg@|0Yx@M3hsC7e(!PDt6K7?<
R?TM5{&+L=`3qOS^{sW381pEL1

diff --git a/server/map/get_relation.py b/server/map/get_relation.py
index 9b179982..b17ab008 100644
--- a/server/map/get_relation.py
+++ b/server/map/get_relation.py
@@ -7,21 +7,21 @@ import numpy as np
 
 
 def get_relation(self, body_of_water: str):
-    print("In get_relation")
     # Load GeoJSON data using geopandas
     geo_data = gpd.read_file("server/map/mjosa.geojson")
 
     # Filter only polygons, exclude points and other feature types to reduce response size
     polygon_data = geo_data[geo_data['geometry'].geom_type == 'Polygon']
 
+    if not polygon_data:
+        raise ValueError("Failed to extract polygon data from file")
+
     # Extract coordinates from polygons and create polygon objects
     polygons = [Polygon(polygon.exterior) for polygon in polygon_data['geometry']]
 
-    if len(polygons) <= 1:  # Return if conversion to polygon fails
-        print("Failed to convert to polygons")
-        return
+    if not polygons:
+        raise ValueError("Failed to convert to polygons")
 
-    print("Creating grid and cutting polygons")
     divided_map = []
 
     # Divide all polygons into sections
@@ -71,21 +71,31 @@ def get_relation(self, body_of_water: str):
 
 
 def cut_polygon_in_two(polygon, line):
-    points = list(polygon.exterior.coords)  # Extract polygon coordinates
+    # Check for invalid parameters
+    if not isinstance(polygon, Polygon) or not isinstance(line, LineString):
+        print("Inputs must be Shapely Polygon and LineString obects")
+
+    # Extract polygon exterior coordinates
+    exterior_coords = list(polygon.exterior.coords)
 
+    # Initialize lists to store points for the two shapes
     shape_1 = []
     shape_2 = []
 
-    # Split points into separate shapes based on their location relative to line
-    for point in points:
+    # Split points into separate shapes based on their location relative to the line
+    for point in exterior_coords:
         point = Point(point)  # Convert coordinates to Shapely Point object
         if line.distance(point) < 1e-10:  # Floating point error tolerance
-            if line.contains(point):  # Determine if point goes into shape 1 or shape 2
+            if line.contains(point):  # Determine if point belongs to shape 1 or shape 2
                 shape_1.append(point)
             else:
                 shape_2.append(point)
 
-    # Convert the lists of points to Polygon objects
+    # Check if shapes are empty
+    if not shape_1 or not shape_2:
+        raise ValueError("One or both shapes are empty after cutting")
+
+    # Create Polygon objects from the lists of points
     poly_1 = Polygon(shape_1)
     poly_2 = Polygon(shape_2)
 
@@ -119,4 +129,7 @@ def create_grid(polygon, cell_size):
     for y in y_coords:
         horizontal_lines.append(LineString([(min_x, y), (max_x, y)]))
 
+    if not horizontal_lines or not vertical_lines:
+        raise ValueError("List of horizontal or vertical lines is empty")
+
     return horizontal_lines, vertical_lines
-- 
GitLab