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