diff --git a/server/ModelFromNVE/icemodellingscripts/__pycache__/getIceThicknessLakes.cpython-39.pyc b/server/ModelFromNVE/icemodellingscripts/__pycache__/getIceThicknessLakes.cpython-39.pyc index 86d9858396156634b9ef585b03ca547d1d893a56..a78e6ac11237b1dca1f380d86c920dd7e3219c98 100644 Binary files a/server/ModelFromNVE/icemodellingscripts/__pycache__/getIceThicknessLakes.cpython-39.pyc and b/server/ModelFromNVE/icemodellingscripts/__pycache__/getIceThicknessLakes.cpython-39.pyc differ diff --git a/server/ModelFromNVE/logs/icemodelling_2024-05-19.log b/server/ModelFromNVE/logs/icemodelling_2024-05-19.log index 20fa8ebb13e5827c6cbbd4c398118154b6cb256e..2ae90f69a39824b42d18686fc42e1e20c575ad07 100644 --- a/server/ModelFromNVE/logs/icemodelling_2024-05-19.log +++ b/server/ModelFromNVE/logs/icemodelling_2024-05-19.log @@ -537,3 +537,80 @@ 14:02: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-01-18 06:00:00 sd. Adding avg value 94.45. 14:02: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-02-17 06:00:00 sd. Adding avg value 129.85. 14:02: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-02-18 06:00:00 sd. Adding avg value 128.125. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256504 Y6745378 2024-01-10 06:00:00 tm. Adding avg value -9.499999999999972. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256504 Y6745378 2024-01-17 06:00:00 tm. Adding avg value -15.649999999999963. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256504 Y6745378 2024-02-17 06:00:00 sdfsw. Adding avg value 15.75. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256504 Y6745378 2024-02-18 06:00:00 sdfsw. Adding avg value 9.975. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256504 Y6745378 2024-01-18 06:00:00 sd. Adding avg value 86.35. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256504 Y6745378 2024-02-17 06:00:00 sd. Adding avg value 122.075. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256504 Y6745378 2024-02-18 06:00:00 sd. Adding avg value 120.3875. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256464 Y6744711 2024-01-10 06:00:00 tm. Adding avg value -9.599999999999966. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256464 Y6744711 2024-01-17 06:00:00 tm. Adding avg value -15.69999999999996. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256464 Y6744711 2024-02-17 06:00:00 sdfsw. Adding avg value 15.85. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256464 Y6744711 2024-02-18 06:00:00 sdfsw. Adding avg value 10.075. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256464 Y6744711 2024-01-18 06:00:00 sd. Adding avg value 88.8. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256464 Y6744711 2024-02-17 06:00:00 sd. Adding avg value 124.575. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256464 Y6744711 2024-02-18 06:00:00 sd. Adding avg value 122.8875. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257095 Y6744668 2024-01-10 06:00:00 tm. Adding avg value -9.649999999999977. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257095 Y6744668 2024-01-17 06:00:00 tm. Adding avg value -15.749999999999972. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257095 Y6744668 2024-02-17 06:00:00 sdfsw. Adding avg value 15.599999999999998. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257095 Y6744668 2024-02-18 06:00:00 sdfsw. Adding avg value 9.899999999999999. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257095 Y6744668 2024-01-18 06:00:00 sd. Adding avg value 87.25. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257095 Y6744668 2024-02-17 06:00:00 sd. Adding avg value 122.775. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257095 Y6744668 2024-02-18 06:00:00 sd. Adding avg value 121.0875. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257050 Y6744012 2024-01-10 06:00:00 tm. Adding avg value -9.649999999999977. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257050 Y6744012 2024-01-17 06:00:00 tm. Adding avg value -15.749999999999972. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257050 Y6744012 2024-02-17 06:00:00 sdfsw. Adding avg value 15.599999999999998. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257050 Y6744012 2024-02-18 06:00:00 sdfsw. Adding avg value 9.899999999999999. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257050 Y6744012 2024-01-18 06:00:00 sd. Adding avg value 87.25. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257050 Y6744012 2024-02-17 06:00:00 sd. Adding avg value 122.775. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257050 Y6744012 2024-02-18 06:00:00 sd. Adding avg value 121.0875. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256604 Y6744042 2024-01-10 06:00:00 tm. Adding avg value -9.599999999999966. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256604 Y6744042 2024-01-17 06:00:00 tm. Adding avg value -15.69999999999996. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256604 Y6744042 2024-02-17 06:00:00 sdfsw. Adding avg value 15.85. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256604 Y6744042 2024-02-18 06:00:00 sdfsw. Adding avg value 10.075. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256604 Y6744042 2024-01-18 06:00:00 sd. Adding avg value 88.8. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256604 Y6744042 2024-02-17 06:00:00 sd. Adding avg value 124.575. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256604 Y6744042 2024-02-18 06:00:00 sd. Adding avg value 122.8875. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257006 Y6743356 2024-01-10 06:00:00 tm. Adding avg value -9.549999999999983. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257006 Y6743356 2024-01-17 06:00:00 tm. Adding avg value -15.749999999999972. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257006 Y6743356 2024-02-17 06:00:00 sdfsw. Adding avg value 15.725. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257006 Y6743356 2024-02-18 06:00:00 sdfsw. Adding avg value 10.0625. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257006 Y6743356 2024-01-18 06:00:00 sd. Adding avg value 90.6. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257006 Y6743356 2024-02-17 06:00:00 sd. Adding avg value 126.575. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X257006 Y6743356 2024-02-18 06:00:00 sd. Adding avg value 124.8875. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256603 Y6743383 2024-01-10 06:00:00 tm. Adding avg value -9.75. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256603 Y6743383 2024-01-17 06:00:00 tm. Adding avg value -15.84999999999998. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256603 Y6743383 2024-02-17 06:00:00 sdfsw. Adding avg value 15.775000000000002. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256603 Y6743383 2024-02-18 06:00:00 sdfsw. Adding avg value 10.037500000000001. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256603 Y6743383 2024-01-18 06:00:00 sd. Adding avg value 91.9. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256603 Y6743383 2024-02-17 06:00:00 sd. Adding avg value 127.22500000000001. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256603 Y6743383 2024-02-18 06:00:00 sd. Adding avg value 125.4625. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256569 Y6742715 2024-01-10 06:00:00 tm. Adding avg value -9.749999999999972. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256569 Y6742715 2024-01-17 06:00:00 tm. Adding avg value -15.799999999999969. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256569 Y6742715 2024-02-17 06:00:00 sdfsw. Adding avg value 15.8. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256569 Y6742715 2024-02-18 06:00:00 sdfsw. Adding avg value 10.100000000000001. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256569 Y6742715 2024-01-18 06:00:00 sd. Adding avg value 94.45. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256569 Y6742715 2024-02-17 06:00:00 sd. Adding avg value 129.85. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256569 Y6742715 2024-02-18 06:00:00 sd. Adding avg value 128.125. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256960 Y6742688 2024-01-10 06:00:00 tm. Adding avg value -9.749999999999972. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256960 Y6742688 2024-01-17 06:00:00 tm. Adding avg value -15.799999999999969. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256960 Y6742688 2024-02-17 06:00:00 sdfsw. Adding avg value 15.8. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256960 Y6742688 2024-02-18 06:00:00 sdfsw. Adding avg value 10.100000000000001. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256960 Y6742688 2024-01-18 06:00:00 sd. Adding avg value 94.45. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256960 Y6742688 2024-02-17 06:00:00 sd. Adding avg value 129.85. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256960 Y6742688 2024-02-18 06:00:00 sd. Adding avg value 128.125. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256934 Y6742299 2024-01-10 06:00:00 tm. Adding avg value -9.749999999999972. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256934 Y6742299 2024-01-17 06:00:00 tm. Adding avg value -15.799999999999969. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256934 Y6742299 2024-02-17 06:00:00 sdfsw. Adding avg value 15.8. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256934 Y6742299 2024-02-18 06:00:00 sdfsw. Adding avg value 10.100000000000001. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256934 Y6742299 2024-01-18 06:00:00 sd. Adding avg value 94.45. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256934 Y6742299 2024-02-17 06:00:00 sd. Adding avg value 129.85. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256934 Y6742299 2024-02-18 06:00:00 sd. Adding avg value 128.125. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-01-10 06:00:00 tm. Adding avg value -9.749999999999972. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-01-17 06:00:00 tm. Adding avg value -15.799999999999969. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-02-17 06:00:00 sdfsw. Adding avg value 15.8. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-02-18 06:00:00 sdfsw. Adding avg value 10.100000000000001. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-01-18 06:00:00 sd. Adding avg value 94.45. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-02-17 06:00:00 sd. Adding avg value 129.85. +14:37: weatherelement.py -> patch_novalue_in_weather_element_list: Value missing on UTM33 X256426 Y6742066 2024-02-18 06:00:00 sd. Adding avg value 128.125. diff --git a/server/ModelFromNVE/utilities/__pycache__/makepickle.cpython-39.pyc b/server/ModelFromNVE/utilities/__pycache__/makepickle.cpython-39.pyc index f7a06a63738f4d826c8190c87c51178c777e8bbf..f29213d355cf381ef4eb6b2798dd18e44df9250c 100644 Binary files a/server/ModelFromNVE/utilities/__pycache__/makepickle.cpython-39.pyc and b/server/ModelFromNVE/utilities/__pycache__/makepickle.cpython-39.pyc differ diff --git a/server/Sentinelhub/__pycache__/box_funcitons.cpython-39.pyc b/server/Sentinelhub/__pycache__/box_funcitons.cpython-39.pyc index aca82b35adbbd26db965144702c9950ef4a73365..1a57a14ebc8ade774e21636f736d30292762956f 100644 Binary files a/server/Sentinelhub/__pycache__/box_funcitons.cpython-39.pyc and b/server/Sentinelhub/__pycache__/box_funcitons.cpython-39.pyc differ diff --git a/server/Sentinelhub/__pycache__/getAreaInfo.cpython-39.pyc b/server/Sentinelhub/__pycache__/getAreaInfo.cpython-39.pyc index 63000d3bd8570e1f5b22e1a094774c9ce55829a6..5bddbe6738c467907698c51df001e2ee446412f1 100644 Binary files a/server/Sentinelhub/__pycache__/getAreaInfo.cpython-39.pyc and b/server/Sentinelhub/__pycache__/getAreaInfo.cpython-39.pyc differ diff --git a/server/data_processing/area_processing.py b/server/data_processing/area_processing.py index 4085b25ded74980bc6866dcf443b3e7309a56b19..7dfe37c043ff5051183c376fbea67841f17edfd3 100644 --- a/server/data_processing/area_processing.py +++ b/server/data_processing/area_processing.py @@ -128,6 +128,7 @@ def define_gridareas(lat, lng, area_offset, grid_size): # find the main area's corner positions main_area = calculate_corners(lat, lng, area_offset) + # offset offset_lng, offset_lat = area_offset # find the main area's range size @@ -141,9 +142,9 @@ def define_gridareas(lat, lng, area_offset, grid_size): # find the center coordinates of each area in grid to find the corner areas for y in (range(grid_size)): - relative_size_lat = y / grid_size + relative_size_lat = y / grid_size # relative y position on grid for x in (range(grid_size)): - relative_size_lng = x / grid_size + relative_size_lng = x / grid_size # relative x position on grid lat_pos = main_area[3][0] + relative_size_lat * area_size[0] + dist_to_subcenter[0] lng_pos = main_area[3][1] + relative_size_lng * area_size[1] + dist_to_subcenter[1] @@ -168,6 +169,7 @@ def define_grid_lidardata(max_area, grid_size, points): # container for an area turned into a grid of areas grided_area = [] + # smallest and biggest corner in area bottom_left, top_right = max_area # find subareas size relative to the full size of data @@ -175,49 +177,33 @@ def define_grid_lidardata(max_area, grid_size, points): subarea_offset_lat = (top_right[1]-bottom_left[1]) # find subareas size relative to the full size of data - subarea_hypotemus_lng = subarea_offset_lng / grid_size - subarea_hypotemus_lat = subarea_offset_lat / grid_size + subarea_hypotenuse_lng = subarea_offset_lng / grid_size + subarea_hypotenuse_lat = subarea_offset_lat / grid_size - # find the center coordinates of each area in grid to find the corner areas + # organize all coordinates into their corresponding area + # their own area in grid to find the corner areas for y in (range(grid_size)): relative_size_lat = y / grid_size for x in (range(grid_size)): relative_size_lng = x / grid_size - bottom_left_range = (subarea_offset_lng * relative_size_lng + bottom_left[0], + + bottom_left_sub_corner = (subarea_offset_lng * relative_size_lng + bottom_left[0], subarea_offset_lat * relative_size_lat + bottom_left[1]) - top_right_range = (subarea_offset_lng * relative_size_lng + bottom_left[0] + subarea_hypotemus_lng, - subarea_offset_lat * relative_size_lat + bottom_left[1] + subarea_hypotemus_lat) - area_range = [bottom_left_range, top_right_range] + top_right_sub_corner = (subarea_offset_lng * relative_size_lng + bottom_left[0] + subarea_hypotenuse_lng, + subarea_offset_lat * relative_size_lat + bottom_left[1] + subarea_hypotenuse_lat) + # smallest and highest points in area + area_range = [bottom_left_sub_corner, top_right_sub_corner] + + # filter out points that is outside of area range area = list(filter(lambda point_position: inArea(point_position, area_range), points)) - height_in_area = find_height(area) + # find the ice thickness from all the points in area + thickness_in_area = find_height(area) - grided_area.append(height_in_area) + # store all ice thickness in area + grided_area.append(thickness_in_area) 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)) - -''' -# 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/input_new_data.py b/server/data_processing/input_new_data.py index 2ca6cd2b31685b24e83aceb012bad9579fa8609b..2768e2e86c386f15dbce0a9fce91714afa3d5f9b 100644 --- a/server/data_processing/input_new_data.py +++ b/server/data_processing/input_new_data.py @@ -1,10 +1,11 @@ import json import os from datetime import datetime -from server.data_processing.process_lidar_data import calculate_area_data, about_laz_file, find_folder_files +from server.data_processing.process_lidar_data import calculate_area_data, about_laz_file from server.consts import LIDAR_DATA_PATH, LAKE_RELATIONS_PATH def lidar_data_handler(self, cursor, sensorId, lake_name: str): + # finds the thickness in all area in a lake status_code, thickness_data = input_new_Lidar_data(cursor, sensorId, lake_name) self.send_response(status_code) @@ -27,10 +28,6 @@ def input_new_Lidar_data(cursor, sensorId, lake_name: str) -> (int, str): was taken on the map """ try: - # print("name=",lake_name) - # laz_root_path = "server\\lidar_data\\" + lake_name - # laz_data_paths = find_folder_files(laz_root_path) - # read json data with path to data for specific water body file_path = os.path.join(LAKE_RELATIONS_PATH, lake_name + '_lidar_data.json') @@ -38,11 +35,6 @@ def input_new_Lidar_data(cursor, sensorId, lake_name: str) -> (int, str): if not os.path.exists(file_path): return 404, f"no data for {lake_name} found" - # 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 - # get the areas from the map's data with open(file_path) as data: measurement_data = json.load(data) @@ -66,12 +58,10 @@ def input_new_Lidar_data(cursor, sensorId, lake_name: str) -> (int, str): # path to each measurement data laz_file_path = os.path.join(LIDAR_DATA_PATH + lake_name + '/measurement_id_' + str(measurement_id) + '.laz') - #about_laz_file(laz_file_path) - # data about the file read from - # about_laz = about_laz_file() cannot do this if data is changed - # scale_factor = max(about_laz[2]) - scale_factor = max([0.01]) + about_laz = about_laz_file(laz_file_path) + # scale factor of the ice thickness in meter + scale_factor = max(about_laz[2]) # time last updated data time_now = datetime.now().utcnow().replace(microsecond=0) @@ -85,18 +75,19 @@ def input_new_Lidar_data(cursor, sensorId, lake_name: str) -> (int, str): # Calculate each area's ice thickness based on the area coordinates given to the calculation model areas_data = calculate_area_data((latitude, longitude), lake_name, laz_file_path) + if (areas_data): # store lidar data in json format # calculate data for each zone within the area for area in areas_data: - # lng and lat relative to map - subId = int(area[0]) - map_lat, map_lng = area[1] - heights = area[2] - - if (len(heights) != 0 or sum(heights) != 0): - average = sum(heights) / len(heights) - minimum_thickness = min(heights) + subId = int(area[0]) # id of area + map_lat, map_lng = area[1] # lng and lat relative to map + ice_thickness = area[2] # ice thickness in area + + # find the average and minimum ice thickness in area + if (len(ice_thickness) != 0 or sum(ice_thickness) != 0): + average = sum(ice_thickness) / len(ice_thickness) + minimum_thickness = min(ice_thickness) else: average = 0 minimum_thickness = 0 @@ -109,7 +100,8 @@ def input_new_Lidar_data(cursor, sensorId, lake_name: str) -> (int, str): ''', (measurement_id, time_now, subId, lake_name, float(minimum_thickness), float(average), float(0.0), scale_factor)) sub_center = (map_lat, map_lng) - # set up json format + + # set up json format of area's data lidar_read = { 'SubdivID': subId, 'MinThickness': float(minimum_thickness), @@ -118,10 +110,13 @@ def input_new_Lidar_data(cursor, sensorId, lake_name: str) -> (int, str): 'CenLongitude': float(sub_center[1]), 'Accuracy': scale_factor, } + + # add area to list of subdivisions subdiv_json_data.append(lidar_read) else: print('No data found') + # container for measurement data measurement_data = { 'MeasurementID': measurement_id, 'TimeMeasured': str(time_now), @@ -135,6 +130,7 @@ def input_new_Lidar_data(cursor, sensorId, lake_name: str) -> (int, str): 'Subdivisions': subdiv_json_data, } + # add measurement data to list lidar_json_data.append(measurement_data) # send the changes to the database @@ -148,7 +144,6 @@ def input_new_Lidar_data(cursor, sensorId, lake_name: str) -> (int, str): if os.path.exists(file_path): os.remove(file_path) - # convert list of lidar data to json content = json.dumps(lidar_json_data, indent=4) # write to file @@ -168,6 +163,3 @@ def input_new_Lidar_data(cursor, sensorId, lake_name: str) -> (int, str): cursor.connection.rollback() return 500, f"An error occurred: {e} g".encode("utf-8") -# laz_root_path = "server\\lidar_data\\mj\u00f8sa" -# laz_data_paths = find_folder_files(laz_root_path) -# print(laz_data_paths) diff --git a/server/data_processing/process_lidar_data.py b/server/data_processing/process_lidar_data.py index 371611235ca34e76758c1e2b57801d3a46f4525f..621629f85801be35a2a529f4ebbc327dfa2924b6 100644 --- a/server/data_processing/process_lidar_data.py +++ b/server/data_processing/process_lidar_data.py @@ -18,21 +18,7 @@ def about_laz_file(path): :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) - print("Point Count:", fh.header.point_count) - print("Scale Factors:", fh.header.scale) - print("Offset:", fh.header.offset) - las = fh.read() - print(las) - print('Points from data:', len(las.points)) - ground_pts = las.classification == 2 - bins, counts = np.unique(las.return_number[ground_pts], return_counts=True) - print('Ground Point Return Number distribution:') - for r, c in zip(bins, counts): - print(' {}:{}'.format(r, c)) - return [las.header.version, las.header.point_count, las.header.scale, las.header.offset] def find_folder_files(direcory): @@ -52,13 +38,14 @@ def find_folder_files(direcory): # and it's affiliations (subId and groupId) (soon to be implemented def calculate_area_data(center, lake_name, path): """ - calculate area + calculate lakes ice thickness of each of its area :param center: center point of area to be calculated :param lake_name: body of water area belongs to :param path: path to lidar data - :return: the calculated ice thickness in designated area + :return: the calculated ice thickness in designated area's """ + # check if file exist if not os.path.exists(path): print("File not found") return [] @@ -66,7 +53,7 @@ def calculate_area_data(center, lake_name, path): # container for all the heights in area area_heights = [] - # zone coords taken + # area coords taken taken_coords = [] # read json data with path to data for specific water body @@ -81,19 +68,19 @@ def calculate_area_data(center, lake_name, path): # grid cell offset # NB: make these a global var grid_size = 4 - #cell_x, cell_y = map_data['tile_width'], map_data['tile_height'] - #cell_x, cell_y = (400*grid_size, 400*grid_size) - cell_x, cell_y = (2000, 1000) + cell_x, cell_y, size_in_km = map_data['cell_width'], map_data['cell_height'], map_data['cell_size_in_km'] + print("f: ",cell_x," ", cell_y) + cell_x, cell_y = (cell_x * size_in_km, cell_y * size_in_km) + print("s: ",cell_x," ", cell_y) # convert the offset to meter - #cell_x = 111.320 * cell_x * 1000 - #cell_y = (40075 * math.cos(cell_y) * 1000) / 360 - cell_x = 111.320 * cell_x - cell_y = (111.320 * math.cos(60)*cell_y) + cell_x = 111.320 * cell_x * 1000 + cell_y = (40075 * math.cos(cell_y) * 1000) / 360 + #cell_x = 111.320 * cell_x + #cell_y = (111.320 * math.cos(60) * cell_y) # set the limit of the area compared to local coordinates area_limit = calculate_corners(center[0], center[1], (cell_x, cell_y)) - #area_limit = calculate_corners(sub_center[0], sub_center[1], (cell_x/4, cell_y/4)) # grid data map_data = map_data['features'] diff --git a/server/data_processing/unit_tests/__pycache__/test_add_new_lidar_measurement.cpython-39-pytest-7.1.2.pyc b/server/data_processing/unit_tests/__pycache__/test_add_new_lidar_measurement.cpython-39-pytest-7.1.2.pyc index d1d605575d8d839dd16b53a74edd56837d8aef32..717c52c2e520a95ce75e4dc6484daadb859140af 100644 Binary files a/server/data_processing/unit_tests/__pycache__/test_add_new_lidar_measurement.cpython-39-pytest-7.1.2.pyc and b/server/data_processing/unit_tests/__pycache__/test_add_new_lidar_measurement.cpython-39-pytest-7.1.2.pyc differ diff --git a/server/data_processing/unit_tests/__pycache__/test_input_new_data.cpython-39-pytest-7.1.2.pyc b/server/data_processing/unit_tests/__pycache__/test_input_new_data.cpython-39-pytest-7.1.2.pyc index 818dd90076ec4dc06a035a8d58995fdc9f51cdda..99308854111f46b51b98c756a516b5772f4bbe30 100644 Binary files a/server/data_processing/unit_tests/__pycache__/test_input_new_data.cpython-39-pytest-7.1.2.pyc and b/server/data_processing/unit_tests/__pycache__/test_input_new_data.cpython-39-pytest-7.1.2.pyc differ diff --git "a/server/map_handler/lake_relations/skumsj\303\270en_measurements.json" "b/server/map_handler/lake_relations/skumsj\303\270en_measurements.json" index f5c3898737fd56ce8bfc3bb6b11b7bf88b437bfd..0f6327c4e01db601430b1857bd7dc984814ce1f8 100644 --- "a/server/map_handler/lake_relations/skumsj\303\270en_measurements.json" +++ "b/server/map_handler/lake_relations/skumsj\303\270en_measurements.json" @@ -1,7 +1,7 @@ [ { "MeasurementID": -1, - "TimeMeasured": "2024-05-19 14:02:57.910934", + "TimeMeasured": "2024-05-19 14:37:54.342382", "CenterLat": null, "CenterLon": null, "Sensor": null,