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 0000000000000000000000000000000000000000..7b576e62b36adeefde3ada30f12b38425d4b3f2f --- /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 d902d50febc23e4e0dd4893332e976559da9e9fe..35e748f135a07cdbab8c83b57bcdb5c544aa17da 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 29ad2d9127f2da80d73bc9fdec7cd5b29f16e7cc..5e6f85897d9a6017f50712c4c5582dfcbe662f79 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 4e9688a785852c7f4484ba4d6949de051eac8f52..3785e392ec6c207e264d08ff3e882037aced025e 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 9324c2bb80fec1d940b0b155e125c8ecf30c67c0..face5fa5d5070578cfe076e0e9c945547858fa5c 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 107bf1c9076a3fe18dabf0c43c2069a58462204b..fb9e425da04170e97ae528c6c0f62cfa214d1759 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 47d94aadead3156f2108379051b2eed001b05dab..88c5999ec1f7cbb0d9c1e4ebd322677ef291b444 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 0000000000000000000000000000000000000000..03fe08635c766c8a390bba4dcbde14712f825f12 --- /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'))