From e2bdb579b329ba3d8aa826d3de3d2caea134d699 Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Tue, 5 Mar 2024 09:53:25 +0100
Subject: [PATCH] add: attempt to split map, non-working

---
 app/lib/pages/widgets/cloropleth_map.dart     |  10 ++-
 app/lib/pages/widgets/map_widget.dart         |   2 +-
 .../process_lidar_data.cpython-311.pyc        | Bin 0 -> 5317 bytes
 server/main.py                                |   1 +
 .../__pycache__/get_markers.cpython-311.pyc   | Bin 4015 -> 3544 bytes
 .../__pycache__/get_relation.cpython-311.pyc  | Bin 1716 -> 3440 bytes
 .../input_new_data.cpython-311.pyc            | Bin 0 -> 3042 bytes
 server/map/get_markers.py                     |  17 ++---
 server/map/get_relation.py                    |  58 +++++++++++++++++-
 9 files changed, 71 insertions(+), 17 deletions(-)
 create mode 100644 server/data_processing/__pycache__/process_lidar_data.cpython-311.pyc
 create mode 100644 server/map/__pycache__/input_new_data.cpython-311.pyc

diff --git a/app/lib/pages/widgets/cloropleth_map.dart b/app/lib/pages/widgets/cloropleth_map.dart
index ac235158..3e4fb6bc 100644
--- a/app/lib/pages/widgets/cloropleth_map.dart
+++ b/app/lib/pages/widgets/cloropleth_map.dart
@@ -1,5 +1,7 @@
 import 'dart:typed_data';
-import 'package:app/pages/consts.dart';
+import 'package:latlong2/latlong.dart';
+
+import '../marker_handler/marker_data.dart';
 import 'package:flutter/material.dart';
 import 'package:syncfusion_flutter_maps/maps.dart';
 import '../consts.dart';
@@ -17,9 +19,13 @@ class IceThicknessModel {
 /// The map data is fetched from the server, and the map is rendered
 /// using the Syncfusion Flutter Maps library.
 class ChoroplethMap extends StatefulWidget {
-  const ChoroplethMap({Key? key, required this.relation}) : super(key: key);
+  const ChoroplethMap({Key? key,
+    required this.relation,
+    required this.measurements
+  }) : super(key: key);
 
   final Uint8List relation;
+  final List<Measurement> measurements;
 
   @override
   _ChoroplethMapState createState() => _ChoroplethMapState();
diff --git a/app/lib/pages/widgets/map_widget.dart b/app/lib/pages/widgets/map_widget.dart
index 1dee6355..f0ca2186 100644
--- a/app/lib/pages/widgets/map_widget.dart
+++ b/app/lib/pages/widgets/map_widget.dart
@@ -118,7 +118,7 @@ class _MapContainerWidgetState extends State<MapContainerWidget> {
                     height: screenWidth * boxHeight,
                     child: Padding(
                       padding: const EdgeInsets.all(15.0), // Padding around map
-                      child: ChoroplethMap(relation: widget.relation),
+                      child: ChoroplethMap(relation: widget.relation, measurements: widget.markerList,),
                     ),
                   ),
                   Positioned( // Quick view box layered over map
diff --git a/server/data_processing/__pycache__/process_lidar_data.cpython-311.pyc b/server/data_processing/__pycache__/process_lidar_data.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..bcaab3c96c44cab902c18d3bd614a974fbd0561c
GIT binary patch
literal 5317
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

literal 0
HcmV?d00001

diff --git a/server/main.py b/server/main.py
index 90c4048f..989e1c30 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_relation import get_relation
 from APIs.get_weather import get_weather
 import ssl
 import keyboard
diff --git a/server/map/__pycache__/get_markers.cpython-311.pyc b/server/map/__pycache__/get_markers.cpython-311.pyc
index 465b8e596d1a8109ff12180b38c80096d6b4e58d..e0b4752477d0eafd895b1d8937cd74c85045d82a 100644
GIT binary patch
delta 993
zcmaKrPe>F|9LIle-u$1Popl>$-P!!#A(cvEArM;-)QA-m3d%xaW42P$V4O7MO-iRd
zNU*$vhYXeub|@(D);;MYyU`&ek9G2}7ePApM%$)|=r_FY?|mM>`TgGSJ>J{)FPZo&
zT~~qG*xvWz%cgR?jBvSPo*c&j>!5&xd`yrl5bSWvIshXmS5wV+69K$t<Jb@osGxGq
zqzPoK@YCQ6gdc{fnlBR3!RbaE_!472WJW@S#0W_dk|U%<NDaw!v<=CZiA01&aL*H&
z2t=Y)WXX%j?feC2uE>A4u;#H}L`M%ZF^WgXh*08BqGMcI5S?Ti=nikuRZh4r-$S1A
zyLI?qwoQ&5CmYA+m>X>KL>gqc_Q}&4>i|Tkh`}+}xmK)rM)|8vdvPkQM0;`Y>`^W^
zNpIrL6?NY7PJ}sTjxIc4qBzEzRJ69Q&i8eLXNB>nz-{w2uPIz{T8Q=>UU1Q>2pr2-
zC&2+<d!o(D$9@ULm*6p;ge64OtI(6)+UIvLzs%j5q95hcTu+RqmAir4R;EpDuHeoV
z-P=yVE9|1;LW~uq6Y7m*j!h&s7IfCxD%80=eXmZ4-Ab|!-87-?H|tq8Wl~LaRN88Z
z{%WHCpo2EWE}ga8O8HX$K!i;DMsMZXyUwbet=ZYncD9s1Jp87ab>M_dL+G=ZowMwc
z7Ji4!>H>=iybQ5amA4jJ*lwPVTo@UE4+H9G7vAR0(N?_ODvWk*jq3x*xX1$B-iA!k
z^>|<A9K&6HuHfBw*$V@g52PoM9NmlC?MLB50S^Zfr1&8Z&OLM<Jt*ef%hWQm9peb4
TD%m;&{vUdW&KN`N@d5k<aUs9=

delta 1330
zcmaKsPi)gx9LL{_pZ~>i5<168laeMB)^?~OR7k4^>V&qW3|29<)fgaFMLY)rsZ-g8
zjL3#*+93xHMDMT*hnyH=lQ?kLl?!O6$*Cf>vOwBp2c#Wx0BM?b;5nfLOVfVI`~BYM
z_j~W_-?J_6WFAgNf0X4gp!VR|bM4o$cC-yqyQ56ZBLIE?BEZl=cF16DghNdk07|g!
zCP{{gaS+(B1KVAN#9{0fTLlhhv!8+sU5B@M%#8c819Jq*XvCD*0C55010)1U3{ZGP
z3YPBjj%W)ucO4k>wrF#<KwPK_*P)Sr19PXvdk}!1=@=RWw=KGb$MQ&tQZzuZ0L9-W
z@_A?+@}v@)JR@F$mbj}6!2hY-3(+3v7#ddY@_v8EDBj+(q}@E#;5wXtd;6iiv9J|;
zr@)d4=D>J3co@uF9f%qVImhHB2`8P1p28_dA~%`j(J+qvG9J7%t<OyXOC2fi2S(13
ztv#a*PTMkZndH<!?<~N;k#EYnFpLe@0N*fYK?B;L6QRwjwiN7&z9pa|(@F|w@I>(X
zgIaX>21VmOU3q)TPMqeE9qH_$@qN5Es2U_lyIKXa*+&BUorzXo(&yU@oxkwnH+l@>
z@iVi{$R~B((sXOiy0NJ><K@lGTJ>Vts@C;GSIoNJWUpD3xrNy=f`rPFC!3m%*A30w
ztm~%cNdvsBm9b`cl3yCmO^<C<sx^%UqiSg$r|B2#SeuP{$kb{TQWL6q(N|gb)1I_Z
zHm+*MIxbsf4{BzVc9+YM7s6L#OLWT9VLJ2)ehd1cWwI)M!R-^r`d}aVN&G7jIYOt@
zx$#^l+l?38c;Qu+JP0qnm&&w0+ev3zr&_1}@aKP~v*h1!N@Cbd9}FFtl+w49WJ}yp
z(=BQA`<q&yr)&He0j#)<)GegmxzR=W9?H8Yzk`Hrq--JO&e!gN54&ighZbD4@HX8=
zY7eO{Qu`d;{{6`}i_dQ-rneH)_xWz3&`T7$=x}cu9d>vBW{RHmyW-K}B6zYGF3m7c
z1+_HAJe^`oGmje5M=(~R3yg!iP9u*a2iFP|J+x7_E*p$rp`R#VeBe9(_IYga_{!P|
zk6kXV6<0j&bg8sjTpMbf^cOAr&e#1%IJQy8*J|3Lu|htUkL13DaQ?p12Y&nyZxA9M
HNB;KLy%{Yp

diff --git a/server/map/__pycache__/get_relation.cpython-311.pyc b/server/map/__pycache__/get_relation.cpython-311.pyc
index 664196b347f107025d30408fd41a62052110dbee..12b87d51b16f83f1ef4d1dc694a1692b02674d0f 100644
GIT binary patch
literal 3440
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
DbxInr

delta 891
zcmaJ<O=uHA6rSCE`;(@LjY&vJlm?Axo7RJf2T?CQn1)&_z2y=%&Ne1&cEaw48jYwB
z(1RYrUOWa55$V-~cds522?zs%J$j3H5Q+z9Ha}?ndF;%a@4fFm-p`JbZ$jZ$q0k&+
z@}v0K_%3zAi^8SO*>p}Yp(Ym;0b$WVyCRm_P*Ab3gO=e7r*F|viQs0D>=yTQ*RXGk
z+&U4NX^EY0me`>MXh~hkJ5XZ}d(5^!;UFX+H!uUJ%7c8t&=VMsov|F@DN{R^|I1Tn
zJY~Y$_<KTaO8ld|=+uKy)gKbateYV3#w!U+*<Ts+Q+De}0}tdD>W2K7mbk!X%3zqo
zMXcdKk4<iWHa*{Y%;#PZqrrt~&TfR+;*#7w&V3@D^S;U_G`1eZRuc4Hif67;b(@&Y
zGO-#-7BzW0>57%UQGNH;(bLxrlHa+xMFX3}Dp%YFHmJ6#yZ+02FRlqu?@&CsUN?zL
zrMl@-nfXkEDtAr2WSCTGjx{)U$R35NLo6zrM8^(QT~Zul+^E$ZZ(Yg>lJ`t{9z4xz
z;S+XZf|r4{?U91y$VZ5OfcO9sLrC-?@d?!SMnAkVfb0;meaLb{{^|Vzq=t~{Lu!og
z4Inv$WFL|o=N{+V`A2#07G$&+twC&c7+dw8fNd;mRB>FpVwG*a9vUbcq^?_7cWk~y
z8mZ|n@6oK3&exlMx5`-CVdl4a#jlZ_;qO!II@GSz2yU3hHG73Y{$Dx;?_mDi<)uFQ
T?Hg%H;bM1pgqZs0<tP3LpbyWM

diff --git a/server/map/__pycache__/input_new_data.cpython-311.pyc b/server/map/__pycache__/input_new_data.cpython-311.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..bd6d9570fddc887d26dcac27986f9c6d168eb713
GIT binary patch
literal 3042
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

literal 0
HcmV?d00001

diff --git a/server/map/get_markers.py b/server/map/get_markers.py
index deef5834..6b777a4f 100644
--- a/server/map/get_markers.py
+++ b/server/map/get_markers.py
@@ -1,9 +1,10 @@
 import json
 from math import pi, cos
 
+
 # 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, waterBodyName):
+def get_all_markers(cursor, valid: bool, waterBodyName):
     try:
         sql_query = '''
             SELECT m.MeasurementID, m.SensorID, m.TimeMeasured, m.CenterLat, m.CenterLon,
@@ -63,7 +64,8 @@ def get_all_markers(self, cursor, valid: bool, waterBodyName):
                         'Active': bool(row[6])
                     },
                     'Subdivisions': [sub_division],  # Array of sub_division objects
-                    'Corners': calculate_corners(row[3], row[4]),  # Return list of corners calculated based on center coordinates
+                    'Corners': calculate_corners(row[3], row[4]),
+                    # Returns list of corners calculated based on center coordinates
                 }
 
         # Convert dictionary values to list of measurements
@@ -71,25 +73,16 @@ def get_all_markers(self, cursor, valid: bool, waterBodyName):
 
         if len(rows) == 0 or len(data) == 0:  # Return 500 and empty list if no data is found
             print(f"Error in querying database")
-            resp_code = 500
             marker_data = '[]'
         else:
-            resp_code = 200
             # Convert list of dictionaries to JSON
             marker_data = json.dumps(data, indent=4)
 
     except Exception as e:
         print(f"Error in querying database: {e}")
-        resp_code = 500
         marker_data = '[]'
 
-    # Set headers
-    self.send_response(resp_code)
-    self.send_header("Content-type", "application/json")
-    self.end_headers()
-
-    # Write marker data to response object
-    self.wfile.write(marker_data.encode('utf-8'))
+    return marker_data
 
 
 EARTH = 6378.137  # Radius of the earth in kilometer
diff --git a/server/map/get_relation.py b/server/map/get_relation.py
index b96120ec..4ffd0409 100644
--- a/server/map/get_relation.py
+++ b/server/map/get_relation.py
@@ -1,7 +1,8 @@
 import string
 import json
 import geopandas as gpd
-import matplotlib.pyplot as plt
+from server.map.get_markers import get_all_markers
+from shapely.geometry import Polygon, LineString, Point
 
 
 # get_relation returns the geojson data for a selected body of water
@@ -16,7 +17,7 @@ def get_relation(self, body_of_water: string):
     geojson_dict = json.loads(polygon_data.to_json())
 
     # Convert response data to JSON string
-    response_json = json.dumps(geojson_dict)
+    response_json = json.dumps(divide_relation(self, polygon_data))
 
     # Set headers
     self.send_response(200)
@@ -25,3 +26,56 @@ def get_relation(self, body_of_water: string):
 
     # Write coordinates to response object
     self.wfile.write(response_json.encode('utf-8'))
+
+
+def divide_relation(self, polygon):
+    # Fetch measurements from database
+    measurements = get_all_markers(self.cursor, False, 'Mjosa')
+
+    # Temporary hardcoded point at which relation is split, should be
+    splitting_points = [(60.6853, 10.9571), (60.7018, 11.1058)]
+
+    # Lists to hold new polygons
+    divided_relation = []
+    temp_seg_1 = []
+    temp_seg_2 = []
+
+    # Loop through polygon coordinates and split at defined coordinates
+    for i in range(len(polygon)):
+
+        closest_point = []
+
+        # Find the closest point on the polygon to the splitting point
+        for point in splitting_points:
+            closest_point = polygon.exterior.interpolate(polygon.exterior.project(Point(point)),normalized=True)
+
+        # Check if the closest point is already in the polygon coordinates
+        if closest_point.coords[0] not in polygon:
+            # If not, add it to the polygon coordinates
+            polygon.append(closest_point.coords[0])
+        # Add the splitting point (either the original or the closest) to the splitting points list
+        splitting_points.append(closest_point.coords[0])
+
+        current_point = polygon[i]
+        next_point = polygon[(i + 1) % len(polygon)]  # Circular index
+
+        # Check if the current segment crosses any splitting point
+        for splitting_point in splitting_points:
+            if (current_point != splitting_point and
+                    next_point != splitting_point and
+                    LineString([current_point, next_point]).intersects(Point(splitting_point))):
+                # Split the segment at the splitting point
+                temp_seg_1.append(current_point)
+                temp_seg_2.append(splitting_point)
+                temp_seg_1.append(splitting_point)
+                temp_seg_2.append(next_point)
+                break
+        else:
+            # If the segment doesn't cross any splitting point, add it to both lists
+            temp_seg_1.append(current_point)
+            temp_seg_2.append(current_point)
+
+    # Return a list containing all the created polygons
+    divided_relation = [Polygon(temp_seg_1), Polygon(temp_seg_2)]
+
+    return divided_relation
-- 
GitLab