From 5c3f28b7d7b5ee253f8050bcc92bcadc1b4469d6 Mon Sep 17 00:00:00 2001 From: Sara <sarasdj@stud.ntnu.no> Date: Tue, 20 Feb 2024 13:59:13 +0100 Subject: [PATCH] add: getQuery() --- .../get_markers.dart | 0 app/lib/pages/api_handler/get_sat_query.dart | 35 +++++++++++++++++++ .../marker_data.dart | 0 app/lib/pages/consts.dart | 1 + app/lib/pages/default_page.dart | 4 +-- app/lib/pages/widgets/map_widget.dart | 2 +- app/lib/pages/widgets/osm_map.dart | 2 +- app/lib/pages/widgets/sat_layer.dart | 2 +- server/main.py | 4 +++ server/map/get_sat_query.py | 10 ++++++ 10 files changed, 55 insertions(+), 5 deletions(-) rename app/lib/pages/{marker_handler => api_handler}/get_markers.dart (100%) create mode 100644 app/lib/pages/api_handler/get_sat_query.dart rename app/lib/pages/{marker_handler => api_handler}/marker_data.dart (100%) create mode 100644 server/map/get_sat_query.py diff --git a/app/lib/pages/marker_handler/get_markers.dart b/app/lib/pages/api_handler/get_markers.dart similarity index 100% rename from app/lib/pages/marker_handler/get_markers.dart rename to app/lib/pages/api_handler/get_markers.dart diff --git a/app/lib/pages/api_handler/get_sat_query.dart b/app/lib/pages/api_handler/get_sat_query.dart new file mode 100644 index 00000000..7b576e62 --- /dev/null +++ b/app/lib/pages/api_handler/get_sat_query.dart @@ -0,0 +1,35 @@ +import 'dart:async'; +import 'dart:convert'; +import 'dart:io'; +import '../consts.dart'; + +/// getQuery requests the ????? query from the server +Future<String> getQuery() async { + try { + // Custom HTTP client + HttpClient client = HttpClient() + ..badCertificateCallback = // NB: temporary disable SSL certificate validation + (X509Certificate cert, String host, int port) => true; + + // Request query from server API + var request = await client.getUrl(Uri.parse(serverURI + satEndpoint)); + var response = await request.close(); // Close response body at end of function + + // Parse response body to JSON if request is ok + if (response.statusCode == 200) { + var responseBody = await utf8.decodeStream(response); // Parse query from response + + if (responseBody.isNotEmpty) { + var queryString = json.decode(responseBody); + return queryString; + } else { + throw Exception('Failed to decode query string'); + } + } else { + throw Exception('Failed to fetch query string: Status code ${response.statusCode}'); + } + } catch (e) { + print('Error fetching query string: $e'); + throw Exception('Failed to fetch query string: ${e.toString()}'); + } +} diff --git a/app/lib/pages/marker_handler/marker_data.dart b/app/lib/pages/api_handler/marker_data.dart similarity index 100% rename from app/lib/pages/marker_handler/marker_data.dart rename to app/lib/pages/api_handler/marker_data.dart diff --git a/app/lib/pages/consts.dart b/app/lib/pages/consts.dart index d902d50f..35e748f1 100644 --- a/app/lib/pages/consts.dart +++ b/app/lib/pages/consts.dart @@ -6,6 +6,7 @@ import 'package:latlong2/latlong.dart'; const String port = "8443"; const String serverURI = "https://127.0.0.1:$port/"; const String mapEndpoint = "update_map"; +const String satEndpoint = "get_sat_query"; const int fetchInterval = 60; // Fetch marker data every n minutes // Map center diff --git a/app/lib/pages/default_page.dart b/app/lib/pages/default_page.dart index 29ad2d91..5e6f8589 100644 --- a/app/lib/pages/default_page.dart +++ b/app/lib/pages/default_page.dart @@ -1,9 +1,9 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'widgets/map_widget.dart'; -import 'marker_handler/marker_data.dart'; +import 'api_handler//marker_data.dart'; import 'consts.dart'; -import 'marker_handler/get_markers.dart'; +import 'api_handler/get_markers.dart'; class DefaultPage extends StatefulWidget { const DefaultPage({super.key}); diff --git a/app/lib/pages/widgets/map_widget.dart b/app/lib/pages/widgets/map_widget.dart index 4e9688a7..3785e392 100644 --- a/app/lib/pages/widgets/map_widget.dart +++ b/app/lib/pages/widgets/map_widget.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../marker_handler/marker_data.dart'; +import '../api_handler/marker_data.dart'; import '../consts.dart'; import 'quick_view_chart.dart'; import 'stat_charts.dart'; diff --git a/app/lib/pages/widgets/osm_map.dart b/app/lib/pages/widgets/osm_map.dart index 9324c2bb..face5fa5 100644 --- a/app/lib/pages/widgets/osm_map.dart +++ b/app/lib/pages/widgets/osm_map.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../marker_handler/marker_data.dart'; +import '../api_handler/marker_data.dart'; import '../consts.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:latlong2/latlong.dart'; diff --git a/app/lib/pages/widgets/sat_layer.dart b/app/lib/pages/widgets/sat_layer.dart index 107bf1c9..fb9e425d 100644 --- a/app/lib/pages/widgets/sat_layer.dart +++ b/app/lib/pages/widgets/sat_layer.dart @@ -1,5 +1,5 @@ import 'package:flutter/material.dart'; -import '../marker_handler/marker_data.dart'; +import '../api_handler/marker_data.dart'; import 'package:flutter_map/flutter_map.dart'; import 'package:latlong2/latlong.dart'; diff --git a/server/main.py b/server/main.py index 47d94aad..88c5999e 100644 --- a/server/main.py +++ b/server/main.py @@ -2,6 +2,7 @@ from flask import Flask from http.server import HTTPServer, BaseHTTPRequestHandler from consts import SSL_CERT_PATH, SSL_KEY_PATH, HOST, PORT from map.get_markers import get_all_markers +from map.get_sat_query import get_sat_query from APIs.get_weather import get_weather import ssl import keyboard @@ -41,6 +42,9 @@ class IceHTTP(BaseHTTPRequestHandler): elif self.path == '/get_valid_markers': # NB: should be POST? get_all_markers(self, self.cursor, True) # Get only valid markers + elif self.path == '/get_sat_query': + get_sat_query(self) # Get satellite query + def do_POST(self): if self.path == '/get_weather_data': get_weather(self) diff --git a/server/map/get_sat_query.py b/server/map/get_sat_query.py new file mode 100644 index 00000000..03fe0863 --- /dev/null +++ b/server/map/get_sat_query.py @@ -0,0 +1,10 @@ +def get_sat_query(self): + query = 'https://services.sentinel-hub.com/ogc/wms/f202d497-32bf-488c-b034-e5af13f3a597?REQUEST=GetMap&BBOX=1181869.3313,8566983.8541,1205106.1879,8612106.4233&LAYERS=TRUECOLTEST&MAXCC=0&WIDTH=183&HEIGHT=320&FORMAT=image/jpeg&TIME=2020-12-01/2024-02-26' + + # Set headers + self.send_response(200) + self.send_header("Content-type", "application/json") + self.end_headers() + + # Write marker data to response object + self.wfile.write(query.encode('utf-8')) -- GitLab