From 8fdf3f0f8308ec98efa61a7d28e98a16f41819aa Mon Sep 17 00:00:00 2001
From: Sara <sarasdj@stud.ntnu.no>
Date: Tue, 27 Feb 2024 11:25:46 +0100
Subject: [PATCH] add: cloro-map to map widget, not working

---
 app/lib/pages/widgets/cloropleth_map.dart     |  34 +++++++++++-------
 app/lib/pages/widgets/map_widget.dart         |   6 ++--
 app/pubspec.yaml                              |   2 +-
 .../__pycache__/get_relation.cpython-311.pyc  | Bin 1789 -> 1254 bytes
 server/map/get_relation.py                    |  13 ++-----
 5 files changed, 29 insertions(+), 26 deletions(-)

diff --git a/app/lib/pages/widgets/cloropleth_map.dart b/app/lib/pages/widgets/cloropleth_map.dart
index 6625ce00..404de178 100644
--- a/app/lib/pages/widgets/cloropleth_map.dart
+++ b/app/lib/pages/widgets/cloropleth_map.dart
@@ -1,9 +1,14 @@
 import 'dart:convert';
-
 import 'package:flutter/material.dart';
 import 'package:http/http.dart' as http;
 import 'package:syncfusion_flutter_maps/maps.dart';
 
+
+class ChoroplethMap extends StatefulWidget {
+  @override
+  _ChoroplethMapState createState() => _ChoroplethMapState();
+}
+
 class _ChoroplethMapState extends State {
   late MapShapeSource mapShapeSource;
 
@@ -12,11 +17,14 @@ class _ChoroplethMapState extends State {
     super.initState();
     getRelation().then((geojsonData) {
       setState(() {
-        mapShapeSource = MapShapeSource.geoJson(
-          geojsonData,
-          shapeDataField: 'features',
-          primaryValueMapper: (Map<String, dynamic> shapeData) {
-            return shapeData['Mjøsa'];
+        final geoJsonData = json.decode(geojsonData);
+
+        mapShapeSource = MapShapeSource.asset(
+          geoJsonData,
+          shapeDataField: 'coordinates',
+          dataCount: geoJsonData.length,
+          primaryValueMapper: (int index) {
+            return 'lake'; // NB: temp hardcoded value, no subdivisions yet
           },
         );
       });
@@ -30,23 +38,25 @@ class _ChoroplethMapState extends State {
     return SfMaps(
       layers: [
         MapShapeLayer(
-        source: mapShapeSource,
-        strokeColor: Colors.white30,
-        legend: const MapLegend.bar(MapElement.shape,
+          source: mapShapeSource,
+          strokeColor: Colors.white30,
+          legend: const MapLegend.bar(
+            MapElement.shape,
             position: MapLegendPosition.bottom,
-            segmentSize: Size(55.0, 9.0)
-        )
+            segmentSize: Size(55.0, 9.0),
+          ),
         ),
       ],
     );
   }
 
+  // getRelation requests the polygon coordinates from the server
   Future<String> getRelation() async {
     final response = await http.get(Uri.parse('get_relation'));
     if (response.statusCode == 200) {
       return response.body;
     } else {
-      throw Exception('Failed to retrieve geojson data');
+      throw Exception('Failed to retrieve geojson data from server. Status code: ${response.statusCode}');
     }
   }
 }
diff --git a/app/lib/pages/widgets/map_widget.dart b/app/lib/pages/widgets/map_widget.dart
index 5629fc17..694b5dc9 100644
--- a/app/lib/pages/widgets/map_widget.dart
+++ b/app/lib/pages/widgets/map_widget.dart
@@ -6,6 +6,7 @@ import 'stat_charts.dart';
 import 'sat_layer.dart';
 import 'package:flutter_map/flutter_map.dart';
 import 'interactive_polygon.dart';
+import 'cloropleth_map.dart';
 import 'package:latlong2/latlong.dart' as latLng;
 
 
@@ -59,7 +60,8 @@ class _MapContainerWidgetState extends State<MapContainerWidget> {
                   SizedBox(
                     width: screenWidth * boxWidth,
                     height: screenWidth * boxHeight,
-                    child: FlutterMap(
+                    child: ChoroplethMap()
+                    /*FlutterMap(
                       options: MapOptions(
                         center: mapCenter,
                         zoom: 9.0,
@@ -102,7 +104,7 @@ class _MapContainerWidgetState extends State<MapContainerWidget> {
                           }).toList(),
                         ),
                       ],
-                    ),
+                    ),*/
                   ),
                   /*SizedBox(
                     width: screenWidth * boxWidth,
diff --git a/app/pubspec.yaml b/app/pubspec.yaml
index 344f9e07..339a8292 100644
--- a/app/pubspec.yaml
+++ b/app/pubspec.yaml
@@ -1,5 +1,5 @@
 name: app
-description: "A new Flutter project."
+description: "IceMap Application"
 publish_to: 'none'
 version: 0.1.0
 
diff --git a/server/map/__pycache__/get_relation.cpython-311.pyc b/server/map/__pycache__/get_relation.cpython-311.pyc
index d6bc7b01570aaf2317e1583cdcc14afae62499ee..5c895e2e0a57f69d3a5a3793d4d4e3a916090cd8 100644
GIT binary patch
delta 334
zcmey%`;3!sIWI340}wpiayQkTX(C@X(;CK!)vI($SV5u?ki`OH)i5t(WMEhg#1K%+
zQp2!-b>c)3rWEGMg-pVXY(O?w3QG#>GA5uprpe_@N|TQ=33GG6bS&Tmsjgv}{E$hE
zDTQsaAhWVKyI&P|acWUnYLR|!Vu5}YhhBPWepd11K4yJJ?#cU@r6xaMcGG0N#ZsJ_
zlUBqGH0l;(+AWrp#FE5YyhW+S1^Ic!sqtCGKnmpQ$ptL_Tw*{58xR*WPCm)f!T*(m
zK~!>z*Nl>jA}UuzR3<aB^(lhfR0LADlHoIuWGE5^62CZXa`RJ4b5iY!q$Y1*Q`O*O
RG+B`LfdNS2B#I<~8UZHYQdR%}

delta 815
zcmZ`!&ubGw6rSDeuVi;aFo|vbk)#`x){0TvdI+^xXh9;jinoH4;7&@@BpYY9)utQt
zSfNP5dPr}Jhg$6=C(r%~X&7i&@an-+Km;iW&TfK+fRCAP9`nBUz3+YV|CWOvWH|sx
zTxx!WEK?6|(x2)2?x%a}pvss&)i>rAy;uZKD^=EHRp#HH$`0h*ChZc@gvr=Uy&j1T
zarptRFa|7{9?k5}4Uq-~{e8jfL!1F2V(N00>ks5iPVEcd+>h<=8f?$Gi}}B~$sAGu
z9FyCNDsKXtvmR4XKG3UJ2b40ZimG%-7CQEpa;X#`M4?_+LT;A#_xphzAj>i)Z;P%7
zC0jh5Tn#Q)L>;1Sh*HIDIaLvEtV1oYYb8g>!K|@`pza9ds|XFW<1off89MwUt+2CB
zDB?3sL+VB;Yd{^j^Bw8oR>9ct>ed3Cq9p4%eSzcPO9PgyH}w6C;4nHY<dDy0Q#prG
zvql!V9v!|v&<U1%`fHxN?#RSMSu5#q%{8VAgq%nutTTEg5GOfDuKwP7;@f-G6+k%p
z`avf=(g@&ivI|)Djt6^uM?6<cV=>m)#^TkZ$+kG%5~n-T$f*=-OR>fayMp7ln|E=1
z;mbIVFP=zCSXyd%rz1ydt5{Ch=dnC-wA_}{Ejis$CXcRRWwu$w%3>E#G8uG>U@h1Q
zT|5mb?T}*6H^*^u<|H(WL$fXK{QAj(=-9hVWA`L7g(Fkeci-FbAXxypn|uU62m%x%
ga3;(ZHFc{1=TXu+V6IGzP&0O}3&`_dKniL61FCt>t^fc4

diff --git a/server/map/get_relation.py b/server/map/get_relation.py
index f325b168..581afaa5 100644
--- a/server/map/get_relation.py
+++ b/server/map/get_relation.py
@@ -8,17 +8,8 @@ def get_relation(self, body_of_water: string):
     with open("server/map/" + body_of_water.lower() + ".geojson") as f:
         data = json.load(f)
 
-    # Extracting coordinates from the GeoJSON features
-    coordinates = []
-    for feature in data['features']:
-        if feature['geometry']['type'] == 'Polygon':
-            coordinates.extend(feature['geometry']['coordinates'][0])
-        elif feature['geometry']['type'] == 'MultiPolygon':
-            for polygon_coords in feature['geometry']['coordinates']:
-                coordinates.extend(polygon_coords[0])
-
-    # Convert response data to JSON string
-    response_json = json.dumps(coordinates)
+    # Convert data to JSON string
+    response_json = json.dumps(data)
 
     # Set headers
     self.send_response(200)
-- 
GitLab