From 48f8158b0e940eb8726ef60bb163ec3f3f287a68 Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Tue, 5 Mar 2024 14:03:42 +0100 Subject: [PATCH] update: divided into tiles --- server/main.py | 7 +-- .../__pycache__/get_relation.cpython-311.pyc | Bin 3400 -> 3310 bytes server/map/get_relation.py | 54 ++++++++---------- 3 files changed, 27 insertions(+), 34 deletions(-) diff --git a/server/main.py b/server/main.py index 989e1c30..647d223d 100644 --- a/server/main.py +++ b/server/main.py @@ -37,10 +37,10 @@ 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, 'Mjosa') # Get all markers + get_all_markers(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, 'Mjosa') # Get only valid markers + get_all_markers(self.cursor, True, 'Mjosa') # Get only valid markers # NB: temporary hardcoded waterBodyName elif self.path == '/get_relation': get_relation(self, 'Mjosa') # NB temp hardcoded value @@ -49,9 +49,6 @@ class IceHTTP(BaseHTTPRequestHandler): if self.path == '/get_weather_data': get_weather(self) - elif self.path == '/new_lidar_data': - 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): if event.name == 'q': diff --git a/server/map/__pycache__/get_relation.cpython-311.pyc b/server/map/__pycache__/get_relation.cpython-311.pyc index 1760906d6404076504fcbd8abf46308b0a8dab2a..52d93ce095e8b69937d65db4bbf026a67c5c6a81 100644 GIT binary patch delta 1856 zcma)5TWH&66#jL!<V&3Rk~Cf2gfty>*CjM0T|)=UR=Xwbwvwe|Y%I;3NOj$$mXVZR zTnTxj1FvLYPl33jV}2N2pfFnYlD>tpLD^tf;0Gf}mpzQZ9)?TX_nlvkn>y{o4${&2 z&-u>L`OoG4&VRdo-}`)S1oT_y-{PU7FXv(4K*9Uy0Z}ad)USH5wL$0Erlk6t5<(hn zE)u&~ozYO4GanMcE+n{a5eVIew?PB~8;@-sBya+Miv%laddWWXBQofD`irs`V;H0{ zWgnI(B)B2?ZdO2(DC+s~S297E0p?Yr%^YL)Md<U2l(rdR;X+2S{X*(uN)V@IaXz7@ zq_p`ZGe)rH@615ZCyPo(N-N?tc2Mvw%>C?6Pd^Cwp!|c(Q|!5}CoBqgFP-?tSh;NV z9Io~pwnC%T(5UHm8HN{dPFV&Z_hlpyIw6ocnM69Jp%|K4*J+JD51<BpOe3T-I;*>M zPQ`wkq;VRXg@S8D7H-{IC7o|Ux-@1BX>5bKHC~|RAQi}-)!a>4CKlr=?%*bAe5)TM zn%6xo2={Y{i@H~JH6uW(jONu0A`4-&pw(E-1KDq$&XU+HkdEc4_WxqG`!%9%MaOX( z7;}P;Fg}ec(|9fnq>-9Wpl_0`$-|tHfcHV|$;C^HUo1X&c6>Fe6)li+&V<T-6+D_G zFsSG6kbQ89E2Ah#Wufw|tMwZT-n-c4Q&{c!xx?6o&!ycIHTN|dy@$%UC%>f(4z z#^assKbA<%i$bp|^)?2zHzUnoNy0exrqZBP!K%zY-57AeEeOK<=nSxBl!P6c+OHED zA)x+lP&G(>#sy5omc^W+`}PauO|nQXz5<C-^2^}jWD_MF+4jszk}Ras2~||g>-4Z| zPa`+;9u+Z;09uIw%b_|V0^M7zGAEVP@`-BC;4k#r>HE>2r>pU)YFx0!#Ojz>37myz z3++g98w85FY<5OkNDGQh!KH0RPNb8fjMu|v6Pb*d7UU2d<S?+ls9)~G79N*oT1jO^ zn@kBd<5bGIhWWXBpJ7w7bjhY>rTI<d%#3u|b~~uXzT>X+wvvq3S>DlPJs>FGLM3x( zqdk-xukr5OTQzT6F1`_bsg63B9S+O8YI_fScgEuS@=SiAAeP==_Zxviyc93KQ~uBj z4p{!ds(&y~ulrx5-SGGe2d|IjM@w{>_?j>AHE-yz;EqzLcx35F9q~N;1z7&*de^Sf z>EhL;t98WrKnbist?$}X3-2sVmPc<)Tj2vM;+@&m@w<{?4a6&<W7srXe)C3hrQ3=O zS>d5O@ztYi(R-(?;ggln+b=Rtt{uGh!F}F(eZm@^sD$3z7F}7LxO-_WY8^Uh4d4)U zp4l6Ch?q$5F=hq6?nND)%ZB$W?@HflcO`NZ9;-c8ZI4yjW3~1`AyIS{$O2jKz?Y!l zW=}d1=gE(Jn!T1SOnheKjCIaeX&bh<kt#P*;YR9obIfXit~v#Whj{QFW0pIy;R#ph zaAS}-xf5Du^GR_~$|TZ4LXkVLqFp(c$cXb-29lz5K~&`{jp3pcRhIjmZkwy#h<gk~ gyf?}x<{#dJuXPf`<=Hxd&vrJno9L{g=b4kme_sg6<^TWy delta 1884 zcmZ`(Uu@H65dZu)cI-4slZ>VXno_FuZ(y|5&?-?FrKMG=Hi5KF8mdC=g_M#6+icXe zmw?a|P$km2i0~Gqshfl}740RwO?%lMV<`_PQ>E^KX-`uo*7x1#G-c`7$=~_DyWgGf z^WA-ahJR`IeCzSJ5zw8T-{pI2o~*#ahJy7fO0E@t^2L$K81w|XeAHwOrpQ=Nh=3Pq z9_&*mgSEaS4xT5_YLDc)iwtH0ZGh!z!;Vas=H1(%MXn(mt_=cku<B%T1}gIS13Z$r zy3P87IMOEZl6!*$D6BdW2%rLnT09vP#D>1;!8!&RT(Jd96p{p-9Y-JuT||B24>}nm zPAu$w6C4>>0a&k21ABzx5c+b5NofDV7=-mRcSKktR}Wr93O;}p;7904T-K~P{?Kqc zXw)8HSyc9q*PqSc!=rg^-K-oKuv-T!t%G|Or3DB0l^P<v7Ekx~u<|WUPD)j;l=wU$ z$@7Z56w?x^WR+f2fiu$0>uJ@RqfZmO^?;5>87;9StBL?os%}S~cYq#6R@14ZDmz=1 z2YVzEvC4G2FaR<xtU5qgJM`6$Yb^43v*)%09W_KS#~hY(z2H0##QWmI`Qk@*Xs8kz zvbku5i<X@STv|^PaEMX}nC&00_{Xy|J1h!?*Jld49qg|J`z?*hjN!zb4w`{_Jwg&; z5(ZiXWt~2y5i&`WGHH|1Fm9I&#-OZIY}n5>X=#JR+KdZ2kuz9{yykR)${MbQtdMai zu7(S_OA=*}5^Yct^e()a4XD}Ey~ZP&u`EP&K{G;LPhr&wFs_D-kilk}dld#EYw}Hy zeccR*r0Ldh6?VxW4Yxt)kfshAgEIKnyU$2$l{m-pCd^rI`G3%U$2#(Lc>FPmvzA<4 zi~zIYOmPMoLi3?ugj1`xn`V1=3>!y~xNFW>DBh;O&F_z6a4>A{x%f)(`>EgbyW<M3 zna*8F-AqdAdl8+CMDz>=-Kn!m>I<ylVY8500#U)2h2A|GgD#gMS}IZ>i%2@Pv>Z<* zBZ(yFoVM?CRoQyTDg|04431Ssi6!H*f*Y&K#?on+ETs)LePVrLc<ef_CUio!M0amS z>BUG2(x_69K(%haawT<3#n%d?wMPn8C>;%k9o2jAKeA}s7tBs?clCaA*rpF>&*et* zJ%!Mg(2{2g%$lbdw!QtfFi;T&vJ?BXnO*g^*aGwD5^^{0EN7SV6NNKhPv@s!c>Ov4 zCC%sh^K#)*arC>M%}|Lh$u>P%p(o4q<QCX^0X<OEY<jRl50>e{m)>Ch(!G_{l^Wuh zqYleaTY<JhaBXaTtcF}XD1qh9Znbr0UijZC1PaTKJ8ge2gzql#&yLysXUe|!v8B66 zJbt_Qi5-sG{^%xCqDqP9Ui<h|*?0a;=0NGj^8-Il+b1vB$1jw9bNhl1m;BG(EhX#| zQ+7WNQRA6RSIb|B348y>EH_;fk*D>+?ETq7*cQ7hVt3hjYF@~9rxkHRZuGW(SI>WV zCzH)=ah`I^u+5EBxREk9vMu<sv(Dw($0-M)I8{C_r_!;c6jPND-uu+6v9!Fj90mP# zSyPr3%KAX$S$sVz9oD>f$bAY#+~R7?`bvD~WG69FT&N*<?Pn9jA;Mon|7A`F{{Zw- B$qxVk diff --git a/server/map/get_relation.py b/server/map/get_relation.py index a24d62ae..616adfa3 100644 --- a/server/map/get_relation.py +++ b/server/map/get_relation.py @@ -16,16 +16,8 @@ def get_relation(self, body_of_water: str): if len(polygons) <= 1: print("Failed to convert to polygons") - tiles = [] - - for polygon in polygons: - tiles.extend(divide_relation(polygon)) # Divide each polygon from relation and append to tiles - - # Convert polygon coordinates to lists - tiles_json = [list(tile.exterior.coords) for tile in tiles] - # Convert response data to JSON string - response_json = json.dumps(tiles_json) + response_json = json.dumps(divide_relation(polygons)) # Set headers self.send_response(200) @@ -36,30 +28,34 @@ def get_relation(self, body_of_water: str): self.wfile.write(response_json.encode('utf-8')) -def divide_relation(polygon): +def divide_relation(polygons): # Define tile size tile_size = 0.01 - - x_min, y_min, x_max, y_max = polygon.bounds - rows = int((y_max - y_min) / tile_size) - cols = int((x_max - x_min) / tile_size) - + id = 1 tiles = [] - if rows == 0 or cols == 0: # Return if the polygon is too small - return [] - - for row in range(rows): - for col in range(cols): - tile_bbox = Polygon([ - (x_min + col * tile_size, y_min + row * tile_size), - (x_min + (col + 1) * tile_size, y_min + row * tile_size), - (x_min + (col + 1) * tile_size, y_min + (row + 1) * tile_size), - (x_min + col * tile_size, y_min + (row + 1) * tile_size) - ]) - tiles.append(tile_bbox) + for polygon in polygons: + x_min, y_min, x_max, y_max = polygon.bounds + rows = int((y_max - y_min) / tile_size) + cols = int((x_max - x_min) / tile_size) + + if rows == 0 or cols == 0: # Skip small polygons + continue + + for row in range(rows): + for col in range(cols): + tile_bbox = Polygon([ + (x_min + col * tile_size, y_min + row * tile_size), + (x_min + (col + 1) * tile_size, y_min + row * tile_size), + (x_min + (col + 1) * tile_size, y_min + (row + 1) * tile_size), + (x_min + col * tile_size, y_min + (row + 1) * tile_size) + ]) + tiles.append({"SubDivID": id, "polygon": tile_bbox}) + id += 1 if len(tiles) <= 1: - print("Failed to divide polygon into tiles") + print("Failed to divide polygons into tiles") - return tiles + tiles_json = [{"SubDivID": tile["SubDivID"], "coordinates": list(tile["polygon"].exterior.coords)} for tile in + tiles] + return tiles_json -- GitLab