From 9dd173b57744179541f544ffc6aed10d6841312b Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Thu, 22 Feb 2024 10:50:48 +0100 Subject: [PATCH] upate: sql query and json conversion, not tested --- server/map/get_markers.py | 72 ++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/server/map/get_markers.py b/server/map/get_markers.py index fccd78df..13b97aa5 100644 --- a/server/map/get_markers.py +++ b/server/map/get_markers.py @@ -3,79 +3,75 @@ import json # get_markers requests all marker data or valid markers, converts the data to json, and writes # the data to the response object -def get_all_markers(self, cursor, valid: bool): +def get_all_markers(self, cursor, valid: bool, waterBodyName): try: # NB: interval temporarily hard coded to 5 days if valid: cursor.execute(''' - SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, d.Latitude, d.Longitude, - d.IceTop, d.IceBottom, d.CalculatedThickness, d.Accuracy, s.SensorType, s.Active, - c.CornerID, c.CornerLatitude, c.CornerLongitude, b.Name + SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, + s.SensorType, s.Active, + b.Name, + d.SubDivisionID, d.GroupID, d.MinimumThickness, + d.AverageThickness, d.CenterLatitude, d.CenterLongitude, + d.Accuracy FROM Measurement m INNER JOIN Sensor s ON m.SensorID = s.SensorID - INNER JOIN Data d ON m.MeasurementID = d.MeasurementID - LEFT JOIN Corner c ON m.MeasurementID = c.MeasurementID INNER JOIN BodyOfWater b ON m.WaterBodyName = b.Name - WHERE m.TimeMeasured > DATE_SUB(NOW(), INTERVAL 5 DAY); - ''') + LEFT JOIN SubDivision d ON m.MeasurementID = d.MeasurementID + WHERE m.TimeMeasured > DATE_SUB(NOW(), INTERVAL 5 DAY) & b.Name = ? + ''', waterBodyName) else: cursor.execute(''' - SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, d.Latitude, d.Longitude, - d.IceTop, d.IceBottom, d.CalculatedThickness, d.Accuracy, s.SensorType, s.Active, - c.CornerID, c.CornerLatitude, c.CornerLongitude, b.Name + SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, + s.SensorType, s.Active, + b.Name, + d.SubDivisionID, d.GroupID, d.MinimumThickness, + d.AverageThickness, d.CenterLatitude, d.CenterLongitude, + d.Accuracy FROM Measurement m INNER JOIN Sensor s ON m.SensorID = s.SensorID - INNER JOIN Data d ON m.MeasurementID = d.MeasurementID - LEFT JOIN Corner c ON m.MeasurementID = c.MeasurementID INNER JOIN BodyOfWater b ON m.WaterBodyName = b.Name - ''') + LEFT JOIN SubDivision d ON m.MeasurementID = d.MeasurementID + WHERE b.Name = ? + ''', waterBodyName) rows = cursor.fetchall() + # Container for all fetched measurement objects measurement_data = {} - # Iterate over the fetched rows + # Iterate over all fetched rows for row in rows: measurement_id = row[0] - # Create data object for current row - data_object = { - 'Latitude': row[3], - 'Longitude': row[4], - 'IceTop': row[5], - 'IceBottom': row[6], - 'CalculatedThickness': row[7], - 'Accuracy': row[8] - } - - # Create corner object for current row - corner_object = { - 'CornerID': row[11], - 'Latitude': row[12], - 'Longitude': row[13] + # Create subdivision object for current row + sub_division = { + 'SubDivisionID': row[3], + 'GroupID': row[4], + 'MinimumThickness': row[5], + 'AverageThickness': row[6], + 'CenterLatitude': row[7], + 'CenterlONGITUDE': row[8], + 'Accuracy': row[9] } # Check if measurement ID already exists in measurement_data if measurement_id in measurement_data: # Check if the data object already exists in the list - if data_object not in measurement_data[measurement_id]['Data']: - measurement_data[measurement_id]['Data'].append(data_object) + if sub_division not in measurement_data[measurement_id]['SubDivision']: + measurement_data[measurement_id]['SubDivision'].append(sub_division) - # Check if the corner object already exists in the list - if corner_object not in measurement_data[measurement_id]['Corners']: - measurement_data[measurement_id]['Corners'].append(corner_object) else: # Create a new entry for measurement_id if it does not already exist in the list measurement_data[measurement_id] = { 'MeasurementID': measurement_id, 'TimeMeasured': row[2], - 'Sensor': { + 'Sensor': { # Each measurement only has one related sensor 'SensorID': row[1], 'SensorType': row[9], 'Active': bool(row[10]) }, - 'Data': [data_object], - 'Corners': [corner_object], + 'SubDivision': [sub_division], # Array of sub_division objects 'BodyOfWater': row[14] } -- GitLab