From 39370ce4bccf620e0fe761cd73fd2314446ce1c9 Mon Sep 17 00:00:00 2001
From: Hoa Ben The Nguyen <hbnguye@stud.ntnu.no>
Date: Fri, 10 May 2024 12:55:17 +0200
Subject: [PATCH] update: the comments

---
 server/data_processing/area_processing.py    | 93 +++++++++++++++-----
 server/data_processing/process_lidar_data.py | 35 ++++----
 server/map_handler/input_new_data.py         | 12 +--
 3 files changed, 98 insertions(+), 42 deletions(-)

diff --git a/server/data_processing/area_processing.py b/server/data_processing/area_processing.py
index 8227da09..1777d5a6 100644
--- a/server/data_processing/area_processing.py
+++ b/server/data_processing/area_processing.py
@@ -5,26 +5,17 @@ from math import pi, cos
 EARTH = 6378.137  # Radius of the earth in kilometer
 METER = (1 / ((2 * pi / 360) * EARTH)) / 1000  # 1 meter in degree
 
-# find real world coordinates to lidar
-#
-# p - area using real world coordinate
-# l - area using lidar coordinate(pointcloud)
-# max_limit - maximum area limit of a lidar scann in real world coordinates
-def position_relative_to_pointcloud(l1, l2, p1, p2, center_lim, max_lim):
-    center_l = tuple((a+b)/2 for a, b in zip(l1,l2))
-    return [
-        ((p1[0] - center_lim[0]) * ((l1[0] - l2[0]) / (max_lim[2][0] - max_lim[0][0])) + center_l[0],
-            (p1[1] - center_lim[1]) * ((l1[1] - l2[1]) / (max_lim[2][1] - max_lim[0][1])) + center_l[1]),
-        ((p2[0] - center_lim[0]) * ((l1[0] - l2[0]) / (max_lim[2][0] - max_lim[0][0])) + center_l[0],
-            (p2[1] - center_lim[1]) * ((l1[1] - l2[1]) / (max_lim[2][1] - max_lim[0][1])) + center_l[1]),
-    ]
-#print(position_relative_to_pointcloud((-20,20), (-10,30), (1,3), (2,2), (2.5,2.5), [(5,5),(0,5),(0,0),(5,0)]))
-#print(position_relative_to_pointcloud((-3299999, 4608018), (-3200001, 4687153), (61.47620866851029, 8.961138281887507), (61.95241733702057, 6.8508373935926645), (61, 11), [(61.95241733702057, 15.125349549679886), (60.04758266297943, 15.125349549679886), (60.04758266297943, 6.8746504503201145), (61.95241733702057, 6.8746504503201145)]))
 
 # check if lidar points is within range of the area selected
 def inArea(position, areaRange):
+    """
+    finds out if position is in area's range
+
+    :param position: current checked position in
+    :param areaRange: range of checked position, containing a touple with max and min limit
+    :return: True if position is in range otherwise False
+    """
     x, y, _ = position # position to be checked
-    #print((areaRange[0][0])," < ",x," < ",(areaRange[1][0])," and ",(areaRange[0][1])," < ",(y)," < ",(areaRange[1][1])," ",((areaRange[0][0]) < x < (areaRange[1][0])) and ((areaRange[0][1]) < (y) < (areaRange[1][1])))
     if ((areaRange[0][0]) < x < (areaRange[1][0])) and ((areaRange[0][1]) < y < (areaRange[1][1])):
         return True
     else:
@@ -32,12 +23,27 @@ def inArea(position, areaRange):
 
 # find distance between two points
 def distance(point1, point2):
+    """
+    calculates the distance between two points
+
+    :param point1: first point
+    :param point2: second points
+    :return: the distance between two points
+    """
     y1, x1 = point1
     y2, x2 = point2
     return math.sqrt(abs(y2 - y1)**2 + abs(x2 - x1)**2)
 
 # find the closest point in json list
 def closest_points(point, list, coords_taken):
+    """
+    finds the closest points within a list of points and returns the closest point that has not been taken
+
+    :param point: position to check for closest points
+    :param list: list of points in an area
+    :param coords_taken: list of coordinates that has been taken
+    :return: the closest to point that has not been taken
+    """
     closest_point_found = None
     closest_dist = float('inf')
     for current_point in list:
@@ -49,6 +55,12 @@ def closest_points(point, list, coords_taken):
 
 # Calculation of height in an area from las files
 def find_height(points):
+    """
+    finds the heights of a list of points that has grouped together points with identical XY coordinates
+
+    :param points: a list of points in an area
+    :return: the heights within a list of points
+    """
     if len(points) == 0:
         return [0]
     height_differences = [] # final container for height data
@@ -76,11 +88,12 @@ def find_height(points):
     return height_differences
 
 def calculate_corners(lat, lng, area_offset):
-    """Calculate corners of polygon based on a center coordinate
+    """
+    Calculate corners of polygon based on a center coordinate
 
-    Arguments:
-    lat -- center latitude
-    lng -- center longitude
+    :param lat -- center latitude
+    :param lng -- center longitude
+    :return: a list of the corners of the polygon based on a center coordinate
     """
     # From https://stackoverflow.com/questions/7477003/calculating-new-longitude-latitude-from-old-n-meters
     # Formulas:
@@ -100,6 +113,15 @@ def calculate_corners(lat, lng, area_offset):
 
 # separate the zones into smaller area, into a grid
 def define_gridareas(lat, lng, area_offset, grid_size):
+    """
+    Define the grid areas of a zones center and offset
+
+    :param lat: center latitude of the grid
+    :param lng: center longitude of the grid
+    :param area_offset: offset between center to corner
+    :param grid_size: number of zone divisions into grid
+    :return: list of corners of each grid, based on the number of grid divisions and offset of the zone
+    """
     # container for an area turned into a grid of areas
     grided_area = []
 
@@ -134,6 +156,15 @@ def define_gridareas(lat, lng, area_offset, grid_size):
 
 # separate the zones into smaller area, into a grid
 def define_grid_lidardata(max_area, grid_size, points):
+    """
+    Define the grid of the lidar data and divide each point to its designated area,
+    based on maximum limited area, grid size and points position on the grid
+
+    :param max_area: corner coordinates of its maximum area
+    :param grid_size: number of area divisions into grids
+    :param points: list of points
+    :return: list of grid with all the points inside its designated grid
+    """
     # container for an area turned into a grid of areas
     grided_area = []
 
@@ -165,4 +196,24 @@ def define_grid_lidardata(max_area, grid_size, points):
     return grided_area
 #[1,2,2,3,4,5,6,3,4,6,8,9,5,3,5.7,8,5,3]
 #print(define_gridareas(60,10,1500,4))
-#print(define_gridareas(3435693.5,6299200.0, 400000,4))
\ No newline at end of file
+#print(define_gridareas(3435693.5,6299200.0, 400000,4))
+
+'''
+# find real world coordinates to lidar
+#
+# p1 - area using real world coordinate
+# p2 - area using real world coordinate
+# l1 - min area limit lidar coordinate(pointcloud)
+# l2 - max area limit lidar coordinate(pointcloud)
+# max_limit - maximum area limit of a lidar scann in real world coordinates
+def position_relative_to_pointcloud(l1, l2, p1, p2, center_lim, max_lim):
+    center_l = tuple((a+b)/2 for a, b in zip(l1,l2))
+    return [
+        ((p1[0] - center_lim[0]) * ((l1[0] - l2[0]) / (max_lim[2][0] - max_lim[0][0])) + center_l[0],
+            (p1[1] - center_lim[1]) * ((l1[1] - l2[1]) / (max_lim[2][1] - max_lim[0][1])) + center_l[1]),
+        ((p2[0] - center_lim[0]) * ((l1[0] - l2[0]) / (max_lim[2][0] - max_lim[0][0])) + center_l[0],
+            (p2[1] - center_lim[1]) * ((l1[1] - l2[1]) / (max_lim[2][1] - max_lim[0][1])) + center_l[1]),
+    ]
+#print(position_relative_to_pointcloud((-20,20), (-10,30), (1,3), (2,2), (2.5,2.5), [(5,5),(0,5),(0,0),(5,0)]))
+#print(position_relative_to_pointcloud((-3299999, 4608018), (-3200001, 4687153), (61.47620866851029, 8.961138281887507), (61.95241733702057, 6.8508373935926645), (61, 11), [(61.95241733702057, 15.125349549679886), (60.04758266297943, 15.125349549679886), (60.04758266297943, 6.8746504503201145), (61.95241733702057, 6.8746504503201145)]))
+'''
diff --git a/server/data_processing/process_lidar_data.py b/server/data_processing/process_lidar_data.py
index 8159db7b..991abbf1 100644
--- a/server/data_processing/process_lidar_data.py
+++ b/server/data_processing/process_lidar_data.py
@@ -11,6 +11,12 @@ from server.data_processing.area_processing import calculate_corners, define_gri
 
 # Info about data
 def about_laz_file(path):
+    """
+    write info about the lidar's raw data
+
+    :param path: path to the lidar data
+    :return: list with info about version, point_count, scale in meters and offset in meters
+    """
     with laspy.open(path) as fh:
         # Print metadata properties
         print("File Version:", fh.header.version)
@@ -30,6 +36,12 @@ def about_laz_file(path):
     return [las.header.version, las.header.point_count, las.header.scale, las.header.offset]
 
 def find_folder_files(direcory):
+    """
+    find all files in a directory
+
+    :param direcory: path to directory
+    :return: list with all file paths within directory
+    """
     files = []
     for root, _, fileNames in os.walk(direcory):
         for fileName in fileNames:
@@ -39,6 +51,14 @@ def find_folder_files(direcory):
 # find the height of an area based on the coordinates of it's center
 # and it's affiliations (subId and groupId) (soon to be implemented
 def calculate_area_data(center, body_of_water, path):
+    """
+    calculate area
+
+    :param center: center point of area to be calculated
+    :param body_of_water: body of water area belongs to
+    :param path: path to lidar data
+    :return: the calculated ice thickness in designated area
+    """
     # container for all the heights in area
     area_heights = []
 
@@ -85,7 +105,6 @@ def calculate_area_data(center, body_of_water, path):
     # define all the sub-areas within the area, lidar coordinates
     grid_area_lidar_heights = define_grid_lidardata((min_point, max_point), grid_size, ice_points)
 
-    print('grid height: ', grid_area_lidar_heights)
     sub_area_heights = list(zip(grid_sub_area, grid_area_lidar_heights))
 
     # find the heights of each sub-area => area-heights
@@ -94,14 +113,6 @@ def calculate_area_data(center, body_of_water, path):
             start = (sub_area[0][2])
             end = (sub_area[0][0])
 
-            #test data
-            # zone coordinates sett to be relative to the lidar data's point cloud
-            #print("l1 = ", min_point, " l2 = ", max_point)
-            #print("p1 = ", start, " p2 = ", end)
-            #print("center_lim = ", center)
-            #print("max_lim = ", area_limit)
-            #areazone = position_relative_to_pointcloud(min_point, max_point, start, end, center, area_limit)
-            #print("area",areazone)
             # calculate map zones height
             ys, xs = start
             ye, xe = end
@@ -113,18 +124,12 @@ def calculate_area_data(center, body_of_water, path):
                 current_map_zone = closest_points(sub_center, part_of_subarea_of_waterbody, taken_coords)
                 sub_center = current_map_zone['properties']['sub_div_center']
                 taken_coords.append(sub_center)
-                print("item added", sub_center, " len ", len(taken_coords))
             else:
                 print("sub area not found on map")
                 continue
 
             current_zone_id = current_map_zone['properties']['sub_div_id']
 
-            # filter data within sub-area zones
-            #print(areazone[0][0]," < ",ice_points[0][0]," < ",areazone[1][0])
-            #print(areazone[0][1]," > ",ice_points[0][1]," > ",areazone[1][1])
-            #points_in_area = list(filter(lambda point_position: inArea(point_position, areazone), ice_points))
-
             if current_map_zone is not None:
                 #                     sub_id        center         heights
                 area_heights.append((current_zone_id, sub_center, sub_area[1]))
diff --git a/server/map_handler/input_new_data.py b/server/map_handler/input_new_data.py
index 7af06d06..e4f7dcc8 100644
--- a/server/map_handler/input_new_data.py
+++ b/server/map_handler/input_new_data.py
@@ -6,12 +6,12 @@ from server.data_processing.process_lidar_data import calculate_area_data, about
 # input_new_Lidar_data send new data gathered from the lidar and send it to the database (from the drone, most likely)
 def input_new_Lidar_data(self, cursor, sensorId, bodyOfWater):
     """
+    send the sensors data of the bodyOfWater to database and update the jsonfile for specific body of water
 
-    :param self:
-    :param cursor:
-    :param sensorId:
-    :param bodyOfWater:
-    :return:
+    :param self (BaseHTTPRequestHandler): A instance of a BaseHTTPRequestHandler
+    :param cursor (cursor): An Sqlite3 cursor object that points to the database
+    :param sensorId: Id of the sensor used to measure the data
+    :param bodyOfWater (str): The name of the requested file/lake
     """
     try:
         # print("name=",bodyOfWater)
@@ -138,7 +138,7 @@ def input_new_Lidar_data(self, cursor, sensorId, bodyOfWater):
 
 
         else:
-            # Temporary not gonna use:
+            # Just temporary, not gonna use:
             with open(file_path, "w") as file:
                 file.write("[{\"MeasurementID\": 1,\"TimeMeasured\": \"2024-04-15 16:23:28.620516\",\"CenterLat\": 60.841532,\"CenterLon\": 10.717878,\"Sensor\": {\"SensorID\": 2,\"SensorType\": \"LiDar\",\"Active\": true},\"Subdivisions\": []},{\"MeasurementID\": 2,\"TimeMeasured\": \"2024-04-15 16:23:28.620516\",\"CenterLat\": 60.841532,\"CenterLon\": 10.717878,\"Sensor\": {\"SensorID\": 2,\"SensorType\": \"LiDar\",\"Active\": true},\"Subdivisions\": []}]")  # Writing an empty JSON object
 
-- 
GitLab