From 0c769f2714333df6fac95f4934714459f6cdd955 Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Tue, 12 Mar 2024 17:32:11 +0100 Subject: [PATCH] update: attempt to add points to cut dedges --- .../__pycache__/get_relation.cpython-311.pyc | Bin 5954 -> 6572 bytes server/map/get_relation.py | 41 ++++++++++++------ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/server/map/__pycache__/get_relation.cpython-311.pyc b/server/map/__pycache__/get_relation.cpython-311.pyc index 6d7c237fe1158ac5b62ed78021efb4298eee0deb..b358dc3736955c52454f2a9a260eaad50c0aa21b 100644 GIT binary patch delta 2116 zcma)6U2Gdg5Wcm2cfRxaeEy9cCv}|Prll5bNeeEdf)H9#C#hQX4~kqj=R|Q`Cp{m6 zrgsW|0!u_9VIxs0giZp2p?R>Bmw-TxDtP0;PAzII1yZC+RJ<4=q`rXIb$W>tKw_kw zo!R+jcV~8HZ-(ag@}F9*EP?3Q>y`Mc^)tL0un$wB`3=)^4v~x-MLKRDHi-<<ogz3+ zbh0y_p91Hh0em03sZt`X(y|5nuaQD2^qhepuA{L=s#!6MW}mJSDuZ;UMrRfFY2t-9 zRf}w02N7r=i$cSg!Fi(A*Q#)vd@02$nbBGeCJm-S3WIh$q4Kh=W=CtntZNAd#stqJ zB732_A{hXY>e_U?RpCX;oDl_r#u}+Mh16IWv$>5n(F~(Py;reqx{Y<}<kVXaK<!~b z$Uyfch{Sr56mp)MLze67R#lKU@<Al5@M~ib@bC`l4p=uM0iie&>p^J(!nnM0OU*G3 zT^4zG&=de2FlyRsv}rC3ZIXBDW^^NuE{kSSSbH>_7Wk8i3~Z#TPDh<ZPpZ0AkK)k0 zI17wh@rZWOG4F&y(g_Wu?<vJ4GV{(k6ABKEH3G!c*rxF6b;}$QuImbcLK8GUz9syK zbb<yPzT5SW@CmIETNt<Kd2r=hWHSs>PD?=FN^7b<Qk@pWNcbITgZ(Cf5(!kj-h~<J z9pII4dEUbha1X!l$hG$|eQ^UmV@`u+_@%jL!Nl|fmKlmClhO3(L>wMvTi|8(Gs_^t zGiaoLF~D7xHz!+3zCs|Dp;ujX8Ro9LBTMIe1^0oX`#^?Wb#1$PX|_MZlysp&5x(XM z;bHbyS?2H`6wwgMj^tim@)i6?ivA;+NGZ508~Zqr=eDhSnzh}tW0^y%&bA5xtiJ5o z#o&CjDwYIqg@Q-8FnzKRJXH*yf>Yd1aDU+@_cmyhy3rkn){7S@6dG9ny<~)!_=9eP z2rg7#N%~7MqJBA~QZfzy<m(M81%Ke5H11JI_#5A8JS<z`6``IN4G-{|Vp?086pa(; z^Vld}l~(8kjSi`jViLiIZDSq#h$hTcvuxMVXpKZ)1Em<Y7La0A^rKI2!rSSs^#SkL zd>sgmH%C`lufk!&R%A7}x<mgDi&3Z%@L#51C3ia2w>fW=N-0!=hAaFNTXSbXAI2?P zCjjW%@B=IKA#R3Ug1+KJ3HAdgd`}2WG6QSXiAz+%?L4xpr{UM1_thVq;8XFJqH%E~ z9!<tm;id^&6QcDJ4L6mIheu_}iF`WQvMD*5mL(4F(u5h#h18E(5Hs8^QUtLwIWCQ+ zWC_<sCnH&SY&eQp_q+DT0%bNCOUu#mF@z~|wHHX^Hh?!=Uiuso((MNLyuH1}Y@go! zn)-@ba<^6pk_lB=rgz2VyV^DrnT=$6OYlc~c=E1=&s-^3{6&lZYHZmO$Xf!dzSd8U zXZ?k?u3}qPE>>vUU-Uhi>09-;eeig8XD&7$D((mu{Ncru1%FQ_vclQ(j%F>A-_x^n zroasrxxqX)i2BPJ(0t2|9eKx&6~R3npW$Y?X|5#rZwt-K0&+m@**Y9v?E5N`Z+W&L z^c97^ywFz?0=I?sWuZOG<<1ngcQ3KuaQTk@f-q1N2J*r{NodfRg3vk5RhXJ1?pJui zgL?BnL;ZFk>&OB}HQx;=QJt(*O>s9o?@F?bXhp*88Z5aMc~_YkiI0uPQerGEdEtld z-rg2uEZZ-}<niQ~oE$wLl1GOw#3gAv_IwB%$<&J%$1h9guxvzcF5y3_Ob#c<VzRUi y$x<T>c^W|)Mm$R2F#vXJLlpwg|H4y-eITsS6#`8;6c?J7daKh`CPPQv!+!(hN#m>l delta 1588 zcmZuxO>7%Q6rS<^*!$zPz4qF1+{9UzSTRv8q7+r6LZJ}SsI;j_1FiV0oQxCfxOP}C z5`<j^q^ejXh(?n`q+X1KLexZ}QY6%4%Yk!(q7oTZ3fw9V7@^*o@n+My@U-*IdvD&G z_cJrQHTY9j`QGmr0ioZ=nt2pkQS78T!z15y_MI@|@(dF4p&1s5M2;YM31p;|+n3>2 z*aIIdKCpRHqP`AUJo0Y&);$1hlHri;wY*4(yCSfCL>8Zt1<N-A-dAnW^dA`kBw1qn zJ`gO2ErD3xuq89#SWeN&;w=fu>kJ7>hC{Y&$!$UXmf!HT>#A@$-3tAdt(YO#lkDd& z3a(TX@wcAXpntBVFgy^HUvz_0mF2e-q&yQlU~zQ`-w$d`010>?)Y)eR+A8)hzfDqk zx(EF7mxoSi{4Nvdm)!&`ZY!`3Noiy_WCzWJ%L7nU@ZVe%Z!!`LkdToc6l^z#z*37r z*P$MwM%`wws~|gsT^@xTS5k76g}}_<Q|ut4)-~$WX`XQHh)>Mrk$}SZ7ON+pw5-Ej zdym`!TeG8<T94Cq;3mt)BS_nduCt^fG902Q);p<1Mzf+;1d0E(Sgy2Hogh`mnPB}G zO$~p>g<%)vd?<EU!mnJ4MI9)Pcgb4v&`JrCP@vf32CnNgC=;uv9Oup__4^<|fZX-O zc7gu}rZcc1Oy^6btJT6n-k^8;5j~Iv{(PaFAL^NWL~q_G4*II_IKJ+Cjpyc#LfPE@ z**6YxQcQ7di5TKn#M{!F#F93vDlz!6cw;fmDNR72=6%eAXy1nS?%<9#ysHiGX~Q+~ zAkw||(dvbou<tSlk*+3yLaGI|k%w~VX5ZS#uB`9L`cCU>@*qx@qe8j`wK1~svFyg| zolovXb`zs}iP75mef`8n?z`lU47>3k(uDW&u6|`tzk*N8{n9}+RUcTb)Xvt<ZqLd~ z@VSQgVZ|scRLW+qG=22ONDcG|sr=8Y9vo1HIfgvX&+%17XFSF!yr`UkC-HrypF3yq zMIJ8(Uxss3X1*{3_%9^^A@+tc&_muxf?VGV1R*XQX+ro1q6raw=fxQhISgjph>&Ql z{%3>+>1ow8=u<IL6lgZaMGD6$j8o7l&=fOXL!tZxg-h5}UrJTIgzs_4pnnvj#|8Rh zsh)xOPc^NpdJ{-owgolrVNko7Uy)bk8n-WLO&|zaJQzL=5AezG5dJ!{<T2E3P1}TO zD|8pxC?h(dRs2h|gnv^7xP-@IcNMK6%;qcexiZRCjW||1UVnqW%SPy0&YUk*%u-=0 zYZj*G@`mv|O)N_nx$?)?=07z)pgcp$H|Tw8a5JS!&TOz#l}gE}q8qPubU_3E*kPTU lgm9of-2`<0A2d9@aH#HW0y5p{ZB6$kThp^Jfvxxp{{jshR;B;| diff --git a/server/map/get_relation.py b/server/map/get_relation.py index e97ffba0..a4de9724 100644 --- a/server/map/get_relation.py +++ b/server/map/get_relation.py @@ -27,22 +27,22 @@ def get_relation(self, body_of_water: str): # Divide all polygons into sections for polygon in polygons: + cell_size = 0.1 # Divide the length and with of polygon into a grid of equally sized parts - grid_lines = create_grid_coords(polygon, cell_size=0.1) + grid_lines = create_grid_coords(polygon, cell_size) vrt_lines = grid_lines[0] # Vertical grid coordinates hrz_lines = grid_lines[1] # Horizontal grid coordinates - for line in vrt_lines: - print("Line: ", line) - # Cut polygon into horizontal sections, bottom to top for hrz_line in hrz_lines: # Split shape into upper and lower section as hrz_line as divider - divided_poly = cut_polygon_in_two(polygon, hrz_line, True) + divided_poly = cut_polygon_in_two(polygon, hrz_line, cell_size) horizontal_section = divided_poly[0] # Save upper horizontal section + polygon = divided_poly[1] # Set polygon to the remaining, un-split shape for next iteration + if not horizontal_section or not divided_poly[0]: continue @@ -52,15 +52,13 @@ def get_relation(self, body_of_water: str): break # Break from loop im remaining section has no coordinates # Split the horizontal section into two vertical parts - vertical_parts = cut_polygon_in_two(horizontal_section, vrt_line, False) + vertical_parts = cut_polygon_in_two(horizontal_section, vrt_line, -0.1) divided_map.append(vertical_parts[0]) # Append split vertical sections to final list of shapes # Set horizontal_section to the remaining, un-split, horizontal section for next iteration horizontal_section = vertical_parts[1] - polygon = divided_poly[1] # Set polygon to the remaining, un-split shape for next iteration - divided_map.append(polygon) break @@ -95,7 +93,7 @@ def get_relation(self, body_of_water: str): # Takes a polygon and divides its coordinates into two shapes, where divisor is a # coordinate that defines the point of division -def cut_polygon_in_two(polygon: Polygon, divisor: float, horizontal: bool): +def cut_polygon_in_two(polygon: Polygon, divisor: float, cell_size: float): # Extract polygon exterior coordinates exterior_coords = list(polygon.exterior.coords) @@ -104,14 +102,31 @@ def cut_polygon_in_two(polygon: Polygon, divisor: float, horizontal: bool): remaining_shape = [] # Loop through points and check which side of the division line they are - for point in exterior_coords: - point = Point(point) # Convert coordinates to Shapely Point object - if horizontal: # Horizontal split + if cell_size > 0: # Horizontal split + for point in exterior_coords: + point = Point(point) # Convert coordinates to Shapely Point object if point.y < divisor: split_shape.append(point) else: remaining_shape.append(point) - else: # Vertical split + + if len(split_shape) > 2: + # Get last point added to + last_point = split_shape[len(split_shape)-1] + # Get length of the newly created edge + new_edge_len = last_point.x - split_shape[0].x - 0.0001 + print("new_edge_len: ", new_edge_len, " cell_size: ", cell_size) + + # Add points along the new edge to allow horizontal sections to be split into vertical ones + while new_edge_len > cell_size: + print("Hit") + split_shape.append((new_edge_len-cell_size, last_point.y)) + remaining_shape.append((new_edge_len-cell_size, last_point.y)) + new_edge_len -= cell_size + + else: # Vertical split + for point in exterior_coords: + point = Point(point) # Convert coordinates to Shapely Point object if point.x < divisor: split_shape.append(point) else: -- GitLab