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