From a4a9d7035580989fe87042cbc0cde7275ff59cc0 Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Wed, 13 Mar 2024 11:50:51 +0100
Subject: [PATCH] update: test with circle, update grid creation

---
 .../__pycache__/get_relation.cpython-311.pyc  | Bin 6653 -> 7317 bytes
 server/map/get_relation.py                    |  60 +++++++++---------
 2 files changed, 31 insertions(+), 29 deletions(-)

diff --git a/server/map/__pycache__/get_relation.cpython-311.pyc b/server/map/__pycache__/get_relation.cpython-311.pyc
index 140394c18ade684876d995f2db2b1352085f9609..744144e33606421cf5d36ed1c24d8c6e2ddab9df 100644
GIT binary patch
delta 3393
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
Pk;I(LP#bL~)R6xN%Iff=

delta 2759
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
MumBYwj;;Ow4|~av$p8QV

diff --git a/server/map/get_relation.py b/server/map/get_relation.py
index c43bb700..52b037aa 100644
--- a/server/map/get_relation.py
+++ b/server/map/get_relation.py
@@ -26,12 +26,15 @@ def get_relation(self, body_of_water: str):  # NB: implement body_of_water
     if not polygons:
         raise ValueError("Failed to convert to polygons")
 
-    divided_map = []
+    divided_map = []  # List to store map shapes while splitting
+
+    # NB: test polygon, remove after testing
+    polygons = [circle_polygon()]
 
     # Divide all polygons into sections
     for polygon in polygons:
 
-        cell_size = 0.1
+        cell_size = 0.4
         # Divide the length and with of polygon into a grid of equally sized parts
         grid_lines = create_grid_coords(polygon, cell_size)
 
@@ -50,18 +53,7 @@ def get_relation(self, body_of_water: str):  # NB: implement body_of_water
             if not horizontal_section or not divided_poly[0]:
                 continue
 
-            # Cut each horizontal section into vertical sections, right to left
-            for vrt_line in vrt_lines:
-                if len(horizontal_section.exterior.coords) < 3:
-                    break  # Break from loop im remaining section has no coordinates
-
-                # Split the horizontal section into two vertical parts
-                vertical_parts = cut_polygon_by_points(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]
+            divided_map.append(horizontal_section)
 
         divided_map.append(polygon)
 
@@ -115,7 +107,9 @@ def cut_polygon_by_points(polygon: Polygon, divisor: float, cell_size: float):
                 remaining_shape.append(point)
 
         # Add points to the newly created edges of split_shape and remaining_shape
-        split_shape, remaining_shape = populate_new_edge(split_shape, remaining_shape, cell_size, divisor)
+        populate_new_edge(split_shape, remaining_shape, cell_size, divisor)
+        #split_shape = shape_w_edges[0]
+        #remaining_shape = shape_w_edges[1]
 
     else:  # Vertical split
         for point in exterior_coords:
@@ -154,11 +148,10 @@ def populate_new_edge(split_shape, remaining_shape, cell_size: float, divisor: f
         right_corner = split_shape[-1]
         left_corner = split_shape[0]
 
-        print("right_corner: ", right_corner, "    left_corner: ", left_corner, "   cell_size: ", cell_size)
+        print("right_corner: ", right_corner, "    left_corner: ", left_corner, "   left == right?: ", left_corner == right_corner)
 
         while starting_point < left_corner.x:  # Increment starting point until it is withing the polygons bounds
             starting_point += cell_size
-
         # if starting_point < left_corner.x: # NB: optimised substitute for previous while loop, requires testing
         #    starting_point += cell_size * math.floor(starting_point - left_corner.x)
 
@@ -177,19 +170,28 @@ def create_grid_coords(polygon: Polygon, cell_size: float):
     # Define boundaries of grid
     min_x, min_y, max_x, max_y = polygon.bounds
 
-    global polygon_min_x  # Set value of global variable
-    polygon_min_x = min_x
-
     # Divide grid into sections of size *cell_size
-    x_coords = np.arange(min_x, max_x, cell_size)
-    y_coords = np.arange(min_y, max_y, cell_size)
+    x_step = max((max_x - min_x) / 10, cell_size)
+    y_step = max((max_y - min_y) / 10, cell_size)
+
+    x_coords = np.arange(min_x, max_x + x_step, x_step)
+    y_coords = np.arange(min_y, max_y + y_step, y_step)
+
+    return x_coords, y_coords
+
 
-    # Round coordinates to 4 decimals
-    x_coords_rounded = np.around(x_coords, decimals=4)
-    y_coords_rounded = np.around(y_coords, decimals=4)
+# NB: only for testing
+def circle_polygon():
+    circle_points = []
+    num_points = 80
+    center_x, center_y = 0.0, 0.0
+    radius = 6
 
-    if len(x_coords_rounded) == 0 or len(y_coords_rounded) == 0:
-        raise ValueError("No grid points generated")
+    for i in range(num_points):
+        angle = 2 * np.pi * i / num_points
+        x = center_x + radius * np.cos(angle)
+        y = center_y + radius * np.sin(angle)
+        circle_points.append((x, y))
+    circle_points.append(circle_points[0])  # Close the circle
 
-    # Return tuple of list of x coordinates and list of y coordinates
-    return x_coords_rounded, y_coords_rounded
+    return Polygon(circle_points)
\ No newline at end of file
-- 
GitLab