diff --git a/.github/workflows/firebase-hosting-pull-request.yml b/.github/workflows/firebase-hosting-pull-request.yml deleted file mode 100644 index 5fca6e2d..00000000 --- a/.github/workflows/firebase-hosting-pull-request.yml +++ /dev/null @@ -1,37 +0,0 @@ -# This file was auto-generated by the Firebase CLI -# https://github.com/firebase/firebase-tools - -name: Deploy to Firebase Hosting on PR -'on': pull_request -jobs: - build_and_preview: - if: '${{ github.event.pull_request.head.repo.full_name == github.repository }}' - runs-on: ubuntu-latest - permissions: - contents: read - pull-requests: write - steps: - - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: "18" - - name: Install Dependencies - working-directory: ./app/WhereIsThePower - run: npm install --frozen-lock - - name: Update env - uses: cschleiden/replace-tokens@v1.2 - with: - tokenPrefix: '{' - tokenSuffix: '}' - files: ./app/WhereIsThePower/src/environments/environment.prod.ts - env: - MapboxApiKey: ${{ secrets.TEST_SECRET }} - - name: Build app - working-directory: ./app/WhereIsThePower - run: npm run build - - uses: FirebaseExtended/action-hosting-deploy@v0 - with: - working-directory: ./app/WhereIsThePower - repoToken: '${{ secrets.GITHUB_TOKEN }}' - firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_WHEREISTHEPOWER_33A66 }}' - projectId: whereisthepower-33a66 diff --git a/.github/workflows/firebase_dev.yml b/.github/workflows/firebase_dev.yml new file mode 100644 index 00000000..76328a0f --- /dev/null +++ b/.github/workflows/firebase_dev.yml @@ -0,0 +1,42 @@ +name: Build and Deploy app to DEV site +'on': + push: + branches: + - dev + +jobs: + build_and_deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + node-version: "18" + + - name: Install Dependencies + working-directory: ./app/WhereIsThePower + run: npm install --frozen-lock + + - name: Inject Developer tags + run: | + sed -i 's||DEVELOPER SITE|g' app/WhereIsThePower/src/app/app.component.html + sed -i 's|Where Is The Power|<title>WITP-DEV|g' app/WhereIsThePower/src/index.html + sed -i 's|href="assets/icon/favicon.ico"|href="assets/Ramp.svg"|g' app/WhereIsThePower/src/index.html + + - name: update Prod ENV file + run: | + sed -i 's/HelloAPIKey/${{ secrets.MAPBOX_API_KEY }}/g' app/WhereIsThePower/src/environments/environment.prod.ts + + - name: Build app + working-directory: ./app/WhereIsThePower + run: npm run build + + - uses: FirebaseExtended/action-hosting-deploy@v0 + with: + repoToken: '${{ secrets.GITHUB_TOKEN }}' + firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_WHEREISTHEPOWER_33A66 }}' + channelId: live + projectId: whereisthepower-33a66 + target: dev + entrypoint: ./app/WhereIsThePower \ No newline at end of file diff --git a/.github/workflows/firebase_prod.yml b/.github/workflows/firebase_prod.yml new file mode 100644 index 00000000..e5f2af18 --- /dev/null +++ b/.github/workflows/firebase_prod.yml @@ -0,0 +1,39 @@ +name: Build and Deploy app to PROD site +'on': + push: + branches: + - main + +jobs: + build_and_deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - uses: actions/setup-node@v3 + with: + node-version: "18" + + - name: Install Dependencies + working-directory: ./app/WhereIsThePower + run: npm install --frozen-lock + + - name: Remove consolelogs from production site + run: echo "if(window) { window.console.log = function() {}; }" >> app/WhereIsThePower/src/main.ts + + - name: update Prod ENV file + run: | + sed -i 's/HelloAPIKey/${{ secrets.MAPBOX_API_KEY }}/g' app/WhereIsThePower/src/environments/environment.prod.ts + + - name: Build app + working-directory: ./app/WhereIsThePower + run: npm run build + + - uses: FirebaseExtended/action-hosting-deploy@v0 + with: + repoToken: '${{ secrets.GITHUB_TOKEN }}' + firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_WHEREISTHEPOWER_33A66 }}' + channelId: live + projectId: whereisthepower-33a66 + target: prod + entrypoint: ./app/WhereIsThePower \ No newline at end of file diff --git a/api/scripts/fetchstatstest.py b/api/scripts/fetchstatstest.py index f3085eff..351f2c6d 100644 --- a/api/scripts/fetchstatstest.py +++ b/api/scripts/fetchstatstest.py @@ -2,8 +2,11 @@ import json import requests -testing_endpoint = "http://witpa.codelog.co.za/api/fetchSuburbStats" testing_endpoint = "http://127.0.0.1:8000/api/fetchSuburbStats" +testing_endpoint = "https://witpa.codelog.co.za/api/fetchSuburbStats" +schedule_endpoint = "https://witpa.codelog.co.za/api/fetchScheduleData" +schedule_endpoint = "http://127.0.0.1:8000/api/fetchScheduleData" +maponoff_endpoint = "http://127.0.0.1:8000/api/fetchTimeForPolygon" def sendRequest(): body = { "suburbId" : 17959 @@ -15,5 +18,34 @@ def sendRequest(): response = requests.post(url=testing_endpoint,data=request,headers=headers) print(response.text) +def sendScheduleRequest(): + body = { + #"suburbId" :18231 + "suburbId" : 18210 + } + request = json.dumps(body) + headers = { + "Content-Type":"application/json" + } + response = requests.post(url=schedule_endpoint,data=request,headers=headers) + print(response.text) + +def sendTimeForPolygonRequest(): + body = { + #"suburbId" :18057 + #"suburbId" : 18231 + "suburbId" : 18195 + } + request = json.dumps(body) + headers = { + "Content-Type":"application/json" + } + response = requests.post(url=maponoff_endpoint,data=request,headers=headers) + print(response.text) if (__name__ == "__main__"): sendRequest() + print("=================================================================================") + sendScheduleRequest() + print("=================================================================================") + sendTimeForPolygonRequest() + diff --git a/api/scripts/mapdatatest.py b/api/scripts/mapdatatest.py index b49e2026..7a161837 100644 --- a/api/scripts/mapdatatest.py +++ b/api/scripts/mapdatatest.py @@ -2,8 +2,8 @@ import json import requests -testing_endpoint = "https://witpa.codelog.co.za/api/fetchMapData" testing_endpoint = "http://127.0.0.1:8000/api/fetchMapData" +testing_endpoint = "https://witpa.codelog.co.za/api/fetchMapData" def sendRequest(): body = { "bottomLeft": [-90,-180], diff --git a/api/scripts/robots.py b/api/scripts/robots.py new file mode 100644 index 00000000..4c4b8956 --- /dev/null +++ b/api/scripts/robots.py @@ -0,0 +1,84 @@ +import requests +import json + +def get_polygons(): + api_url = 'https://witpa.codelog.co.za/api/fetchMapData' + + # Define the request payload (body) + body = { + "bottomLeft": [-90, -180], + "topRight": [90, 180] + } + + # Send a POST request to the API + witpaData = requests.post(api_url, json=body).json() + + polygons = [] + for feature in witpaData['result']['mapPolygons'][0]['features']: + poly_cords = [point for point in feature['geometry']['coordinates'][0] if len(point) == 2] + sub_polygon = [point for point in feature['geometry']['coordinates'][0] if len(point) > 2] + polygon = { + "id" : feature['id'], + "coordinates" : poly_cords, + "robots" : [] + } + polygons.append(polygon) + return polygons + +def point_in_polygon(point, polygon): + x, y = point + + # Check if the point is outside the bounding box of the polygon + if(len(polygon) == 0): + return False + min_x, min_y = min(polygon, key=lambda p: p[0]) + max_x, max_y = max(polygon, key=lambda p: p[0]) + + if x < min_x or x > max_x or y < min_y or y > max_y: + return False + + # Check if the point is inside the polygon using ray-casting algorithm + inside = False + n = len(polygon) + j = n - 1 + + for i in range(n): + xi, yi = polygon[i] + xj, yj = polygon[j] + + if ((yi > y) != (yj > y)) and (x < (xj - xi) * (y - yi) / (yj - yi) + xi): + inside = not inside + + j = i + return inside + +def get_robots(): + robots = [] + # Open the file in read mode + with open("robots.txt", 'r') as file: + for line in file: + lon,lat = line.strip().split(',') + robots.append([float(lon),float(lat)]) # Use strip() to remove leading/trailing whitespace + return robots + +polygons = get_polygons() +robots = get_robots() + +output = { + "robots" : [{}] +} + +for polygon in polygons: + data = { + "coordinates": [], + "polygon_id": polygon["id"] + } + for robot in robots: + if point_in_polygon(robot,polygon["coordinates"]): + print("yes!") + data["coordinates"].append(robot) + output["robots"].append(data) + +with open("robots.json", "w") as json_file: + json_file.write(json.dumps(output, indent=2)) + diff --git a/api/scripts/robots.txt b/api/scripts/robots.txt new file mode 100644 index 00000000..522a3a94 --- /dev/null +++ b/api/scripts/robots.txt @@ -0,0 +1,3282 @@ +28.0212656,-26.0511950 +28.0236843,-26.0606285 +28.0101950,-26.0162803 +28.1444608,-25.9280687 +28.1463651,-25.9290577 +28.1400713,-25.9257288 +28.0902675,-26.0497019 +28.0765969,-26.0028475 +28.0584454,-25.9864563 +28.0289057,-26.0280552 +28.0950174,-25.9398721 +28.0859619,-26.0415709 +28.0859878,-26.0414439 +28.0905790,-26.0430182 +28.0663829,-26.0384232 +28.0611629,-26.0372911 +28.0599603,-26.0436818 +28.0598262,-26.0436650 +28.0603231,-26.0407479 +28.0605841,-26.0394537 +28.0610224,-26.0372627 +28.0582836,-26.0373551 +28.0585733,-26.0487294 +28.1045086,-25.8914496 +28.1196440,-25.8723911 +28.0157230,-26.0426712 +28.0235031,-26.0604932 +28.0252173,-26.0672863 +28.0158680,-26.0425827 +28.0255391,-26.0393771 +28.0256795,-26.0394712 +28.0250998,-26.0444455 +28.0248346,-26.0471327 +28.0309688,-26.0475945 +28.0252459,-26.0444550 +28.0238000,-26.0525642 +28.0239362,-26.0525842 +28.0228398,-26.0570875 +28.0227757,-26.0569026 +28.0226708,-26.0576053 +28.0226127,-26.0574207 +28.0226295,-26.0577311 +28.1421389,-25.8939733 +28.1322696,-25.9216770 +28.0121043,-26.0082525 +28.0244916,-25.9176862 +28.1357986,-25.8604786 +28.1539996,-25.8411938 +28.1679285,-25.8405708 +28.1730145,-25.8398273 +28.0100340,-26.0326488 +28.0094713,-26.0266892 +28.1105939,-26.0347970 +28.1211839,-26.0093321 +28.1211270,-26.0094562 +28.1212500,-26.0095187 +28.1212991,-26.0094020 +28.1227585,-26.0063340 +28.1171724,-26.0058233 +28.1170732,-26.0057177 +28.1244224,-26.0024058 +28.1245434,-26.0024434 +28.1262992,-25.9990632 +28.1264073,-25.9991708 +28.1268797,-25.9943759 +28.1288674,-25.9948526 +28.1289839,-25.9949484 +28.1286623,-25.9959492 +28.1285406,-25.9959034 +28.1208510,-25.9910418 +28.1319209,-25.9880769 +28.1319310,-25.9882321 +28.1321602,-25.9880220 +28.1278016,-25.9805055 +28.1329662,-25.9817967 +28.1331868,-25.9818461 +28.1329316,-25.9819051 +28.1331507,-25.9819634 +28.1249950,-25.9799892 +28.1203456,-25.9787645 +28.1204328,-25.9863961 +28.1173275,-25.9825731 +28.1204469,-25.9789244 +28.1204825,-25.9788016 +28.1203137,-25.9788976 +28.1184814,-25.9784548 +28.1185134,-25.9783337 +28.1197496,-25.9736215 +28.1202602,-25.9702794 +28.1444423,-25.9281767 +28.1463648,-25.9291637 +28.1399775,-25.9258415 +28.1320770,-25.9217527 +28.1377405,-25.9283049 +28.1321226,-25.9216056 +28.1411167,-25.8806686 +28.1651600,-25.8725002 +28.2099916,-25.8629102 +28.2204317,-25.8598463 +28.2205832,-25.8597889 +28.2197370,-25.8581691 +28.2198986,-25.8581208 +28.0586785,-26.0487258 +28.0597048,-26.0485990 +28.0589177,-26.0545142 +28.0590347,-26.0545160 +28.0590801,-26.0575442 +28.0591998,-26.0575363 +28.0592518,-26.0604529 +28.0593903,-26.0604133 +28.0592805,-26.0605568 +28.0594089,-26.0605192 +28.0607285,-26.0641238 +28.0608399,-26.0640792 +28.0613303,-26.0655904 +28.0614922,-26.0655930 +28.0642269,-26.0722320 +28.0643530,-26.0721910 +28.0651697,-26.0750570 +28.0202861,-26.0474350 +28.0204207,-26.0473737 +28.0242982,-26.0637838 +28.0244677,-26.0637494 +28.0263162,-26.0756438 +28.0427172,-26.0010314 +28.0509228,-25.9906729 +27.9470320,-26.0323719 +27.9425897,-26.0219705 +28.0908290,-26.0624447 +28.0911135,-26.0622664 +28.0915388,-26.0648126 +28.0918231,-26.0650351 +28.0924031,-26.0661281 +28.0904847,-26.0564870 +28.0905495,-26.0496999 +28.0908319,-26.0430208 +28.0908416,-26.0428787 +28.0905858,-26.0428650 +28.0697344,-26.0423919 +28.0712008,-26.0479568 +28.0448306,-26.0413623 +28.0219027,-26.0600740 +28.0158012,-26.0702210 +28.0159272,-26.0703041 +28.0148646,-26.0716385 +28.0122267,-26.0752734 +28.0110128,-26.0776421 +28.0110918,-26.0777341 +28.0104538,-26.0787207 +28.0105674,-26.0787817 +28.0288639,-26.0281635 +28.0287472,-26.0281552 +28.0287939,-26.0280459 +28.0334357,-26.0298767 +28.0338414,-26.0311163 +28.0481433,-26.0363098 +28.0517090,-26.0362366 +28.2906204,-25.7797177 +28.2887899,-25.7789986 +28.2904743,-25.7836554 +28.2906280,-25.7871793 +28.2983483,-25.7913366 +28.2896682,-25.7995145 +28.2833954,-25.7882200 +28.2787606,-25.7905439 +28.2748852,-25.7882559 +28.2839627,-25.7949992 +28.2819865,-25.8066601 +28.3022431,-25.8036504 +28.3057125,-25.7962610 +28.3106974,-25.7911509 +28.2777857,-25.7815477 +28.2829355,-25.7767952 +28.2679083,-25.7646577 +28.2596292,-25.7629068 +28.2555667,-25.7623327 +28.2513904,-25.7615537 +28.2583460,-25.7674158 +28.3004037,-25.7839165 +28.3059351,-25.7858335 +28.3021878,-25.7944376 +28.3384864,-25.7810847 +28.3002438,-25.8077042 +28.2794736,-25.7665622 +28.2795726,-25.7651356 +28.2830525,-25.7675659 +28.2760084,-25.7626967 +28.2751568,-25.7564800 +28.2887277,-25.7540971 +28.3017506,-25.7619027 +28.3022288,-25.7653772 +28.2882331,-25.7683906 +28.2742091,-25.7659087 +28.2758524,-25.7660865 +28.2974316,-25.7670246 +28.3024464,-25.7668647 +28.2941259,-25.7449566 +28.3099683,-25.8022725 +28.2857235,-25.7835332 +27.9553050,-26.0436437 +27.9413028,-26.0636342 +27.9291768,-26.0511181 +28.2731733,-25.7863045 +28.2772518,-25.7841364 +28.2714180,-25.7778958 +28.2669385,-25.7846139 +28.2640249,-25.7836080 +28.2593245,-25.7830532 +28.3076806,-25.7873037 +28.2443957,-25.7597087 +28.2620729,-25.7700079 +28.0208837,-26.0258153 +28.0161736,-26.0235113 +28.1871191,-25.8410006 +28.1956466,-25.8427275 +28.1922664,-25.8458429 +28.1855817,-25.8424989 +28.2670578,-25.7746322 +28.2543261,-25.7748774 +28.2481819,-25.7608590 +28.2517443,-25.7707215 +28.2659510,-25.7743589 +28.2637992,-25.7738132 +28.2606560,-25.7729953 +28.1637700,-25.8238793 +28.1975845,-25.8327367 +28.2007057,-25.8465070 +28.1987007,-25.8395034 +28.2005517,-25.8387348 +28.2070273,-25.8424030 +28.2149427,-25.8391722 +28.2573265,-25.7721619 +28.2493781,-25.7671371 +28.2469165,-25.7634933 +28.2559361,-25.7777365 +28.0297090,-26.0641106 +28.0535794,-26.0645433 +28.0561066,-26.0670681 +28.0460474,-26.0754899 +28.2695404,-25.8166065 +28.2654166,-25.8175291 +28.1570504,-25.8259717 +28.1640434,-25.8499818 +28.1629338,-25.8622695 +28.1622726,-25.8721545 +28.1601839,-25.8921773 +28.1542178,-25.8921981 +28.2606134,-25.8214620 +28.3233101,-25.7586764 +28.3270582,-25.7683343 +28.3276302,-25.7442854 +28.3044059,-25.7500111 +28.3060657,-25.7559874 +28.3104888,-25.7393057 +28.2992641,-25.7432103 +28.3031937,-25.8133163 +28.2961269,-25.8045016 +28.2553067,-25.8083483 +28.2413730,-25.7752276 +28.2324647,-25.7709512 +28.2431969,-25.7686995 +28.2359968,-25.7670269 +28.2373301,-25.7626615 +28.2432611,-25.7580138 +28.2393835,-25.7557209 +28.2402783,-25.7532018 +28.2351754,-25.7505942 +28.2376210,-25.7504348 +28.2399967,-25.7502639 +28.2398723,-25.7487754 +28.2375093,-25.7489561 +28.2324680,-25.7478247 +28.2294019,-25.7510589 +28.2349131,-25.7476184 +28.2325676,-25.7487621 +28.2323442,-25.7463463 +28.2275864,-25.7496194 +28.2322232,-25.7448997 +28.2346850,-25.7447285 +28.2348155,-25.7461749 +28.2371770,-25.7460354 +28.2371216,-25.7445576 +28.2396738,-25.7458606 +28.2413529,-25.7457392 +28.1802833,-25.8481260 +28.1790062,-25.8513405 +28.2814254,-25.7929233 +28.2327631,-25.7661594 +28.2306066,-25.7715897 +28.2297362,-25.7653762 +28.2273746,-25.7646213 +28.2260110,-25.7771526 +28.2142428,-25.7711870 +28.2102748,-25.7712325 +28.2207164,-25.7645529 +28.2214605,-25.7558952 +28.2197068,-25.7608138 +28.2133801,-25.7597349 +28.2070160,-25.7586628 +28.2069302,-25.7588819 +28.2055860,-25.7580280 +28.2027627,-25.7530521 +28.2035058,-25.7516362 +28.2049392,-25.7522796 +28.2062253,-25.7487549 +28.2092676,-25.7491225 +28.2022281,-25.7513795 +28.1981113,-25.7514090 +28.1955297,-25.7474220 +28.1956362,-25.7488843 +28.1957457,-25.7503781 +28.1980706,-25.7487125 +28.1979262,-25.7472564 +28.1992680,-25.7486105 +28.2002158,-25.7471000 +28.2039548,-25.7468263 +28.2010142,-25.7484255 +28.2060520,-25.7466782 +28.2061742,-25.7481425 +28.2041139,-25.7483019 +28.2041410,-25.7486043 +28.2091682,-25.7479469 +28.2123003,-25.7477347 +28.2124800,-25.7494736 +28.2093477,-25.7541570 +28.2090433,-25.7464698 +28.2066946,-25.7558988 +28.2051947,-25.7552592 +28.2026251,-25.7567858 +28.2011549,-25.7561682 +28.1982392,-25.7549337 +28.1960331,-25.7571393 +28.2041538,-25.7501382 +28.2121734,-25.7462616 +28.2040958,-25.7574119 +28.2081421,-25.7565161 +28.1937698,-25.7564682 +28.1913672,-25.7565655 +28.1907168,-25.7580146 +28.1986937,-25.7622977 +28.2035556,-25.7585304 +28.2001868,-25.7580897 +28.2018607,-25.7583262 +28.2052380,-25.7587403 +28.2137749,-25.7571779 +28.2178028,-25.7500639 +28.2422305,-25.8157658 +28.2352421,-25.8141047 +28.2336536,-25.8143063 +28.2721498,-25.8195770 +28.2778812,-25.8145752 +28.2784250,-25.8112197 +28.2958986,-25.7442338 +28.2927070,-25.7453470 +28.2764851,-25.7399870 +28.2678068,-25.7382103 +28.2751563,-25.7348641 +28.2746740,-25.7476683 +28.2747286,-25.7536953 +28.3044462,-25.7523952 +28.3046773,-25.7537902 +28.2448478,-25.7395850 +28.2418937,-25.7427071 +28.2420230,-25.7442005 +28.2395679,-25.7443826 +28.2394246,-25.7428802 +28.2369985,-25.7430413 +28.2321054,-25.7433742 +28.2270929,-25.7437159 +28.2272194,-25.7452289 +28.2273424,-25.7467004 +28.2221995,-25.7440602 +28.2223095,-25.7455633 +28.2224426,-25.7470397 +28.2174438,-25.7459386 +28.2175669,-25.7473847 +28.2147543,-25.7475820 +28.2146408,-25.7460973 +28.2173121,-25.7444008 +28.2292748,-25.7435709 +28.2120491,-25.7447541 +28.2083644,-25.7435582 +28.2088859,-25.7449859 +28.2059296,-25.7452126 +28.2058064,-25.7437366 +28.2037229,-25.7438824 +28.2038284,-25.7453533 +28.2003018,-25.7456043 +28.2001414,-25.7441356 +28.1978092,-25.7457981 +28.1976883,-25.7443066 +28.1975684,-25.7428198 +28.1993716,-25.7426993 +28.1990772,-25.7417740 +28.1974545,-25.7413883 +28.2035887,-25.7424103 +28.2055623,-25.7408108 +28.2034784,-25.7409243 +28.1951659,-25.7399122 +28.1949262,-25.7400496 +28.1924418,-25.7402275 +28.1950275,-25.7415216 +28.1951403,-25.7429948 +28.1952787,-25.7444760 +28.1954035,-25.7459648 +28.1928418,-25.7446555 +28.1927145,-25.7431681 +28.1902561,-25.7433436 +28.1925630,-25.7417133 +28.1901273,-25.7418497 +28.1900183,-25.7403918 +28.1923706,-25.7393546 +28.1875022,-25.7392092 +28.1877641,-25.7435026 +28.1904248,-25.7448294 +28.1905316,-25.7463037 +28.1930830,-25.7475982 +28.1932113,-25.7490547 +28.1888586,-25.7464610 +28.1881115,-25.7471014 +28.1873015,-25.7464635 +28.1883254,-25.7493885 +28.1858840,-25.7495671 +28.1857622,-25.7480860 +28.1856327,-25.7466395 +28.1855093,-25.7451573 +28.1854023,-25.7436704 +28.1852405,-25.7422015 +28.1851003,-25.7407386 +28.1825666,-25.7395535 +28.1826936,-25.7409169 +28.1828154,-25.7423678 +28.1829424,-25.7438477 +28.1830710,-25.7453170 +28.1832027,-25.7468024 +28.1833201,-25.7482784 +28.1834550,-25.7497406 +28.1809827,-25.7499216 +28.1808536,-25.7484253 +28.1807312,-25.7469569 +28.1806071,-25.7454672 +28.1805224,-25.7440095 +28.1803869,-25.7425477 +28.1802687,-25.7410821 +28.1801539,-25.7397296 +28.1934467,-25.7519861 +28.1859511,-25.7504370 +28.1860099,-25.7510118 +28.1835570,-25.7511817 +28.1835197,-25.7506031 +28.1810485,-25.7507648 +28.1811101,-25.7513504 +28.1812479,-25.7528182 +28.1836898,-25.7526691 +28.1861096,-25.7524811 +28.1862116,-25.7539751 +28.1863233,-25.7554397 +28.1889675,-25.7567215 +28.1864602,-25.7568845 +28.1822471,-25.7550263 +28.1813938,-25.7549080 +28.1897421,-25.7566711 +28.1986092,-25.7742977 +28.1986166,-25.7730157 +28.1995714,-25.7733074 +28.1993937,-25.7739179 +28.1933716,-25.7814708 +28.2244045,-25.8001389 +28.2267811,-25.8037583 +28.2269598,-25.8036614 +28.2240241,-25.8143531 +28.2562589,-25.8206143 +28.2578640,-25.8086903 +28.2596871,-25.8095598 +28.2556149,-25.8278150 +28.2584064,-25.7278284 +28.2586847,-25.7322550 +28.2460033,-25.7312055 +28.2579408,-25.7208263 +28.2362844,-25.7220005 +28.2273676,-25.7220711 +28.2184029,-25.7221626 +28.2152007,-25.7230184 +28.2150076,-25.7312529 +28.2150961,-25.7327292 +28.2044685,-25.7204954 +28.2028762,-25.7207115 +28.2050994,-25.7247356 +28.2035822,-25.7250106 +28.2054432,-25.7268483 +28.2039079,-25.7270441 +28.2043625,-25.7302691 +28.1877661,-25.7247839 +28.1884958,-25.7273288 +28.1887156,-25.7285895 +28.1845836,-25.7126432 +28.1860210,-25.7127700 +28.1849235,-25.7098185 +28.1863605,-25.7099599 +28.1866110,-25.7076913 +28.2006933,-25.7073762 +28.2013784,-25.7072846 +28.2009808,-25.7091128 +28.2018470,-25.7143754 +28.2034195,-25.7141299 +28.2025338,-25.7185948 +28.2041136,-25.7183832 +28.2071480,-25.7179772 +28.2110129,-25.7131391 +28.2101369,-25.7175636 +28.2101553,-25.7197484 +28.2184599,-25.7186413 +28.2181767,-25.7165015 +28.2209616,-25.7161526 +28.2248888,-25.7114497 +28.2272734,-25.7115998 +28.2273263,-25.7185821 +28.2188713,-25.7186304 +28.2362486,-25.7185059 +28.2361937,-25.7115275 +28.2576570,-25.7165561 +28.2532519,-25.7141143 +28.2648501,-25.7113411 +28.2668493,-25.7114296 +28.2692568,-25.7113826 +28.2761574,-25.7113748 +28.2832108,-25.7126290 +28.2883224,-25.7137725 +28.2927414,-25.7150254 +28.3103672,-25.7224530 +28.3140825,-25.7275897 +28.3180264,-25.7310281 +28.3161514,-25.7325220 +28.3010683,-25.7330925 +28.2933922,-25.7328597 +28.2960358,-25.7329322 +28.2992277,-25.7330241 +28.2723919,-25.7067456 +28.2261618,-25.7046307 +28.2310747,-25.7042151 +28.2361273,-25.7045492 +28.1993036,-25.6989198 +28.1874522,-25.7008177 +28.1996492,-25.7010388 +28.2000690,-25.7031257 +28.2004341,-25.7052607 +28.1869141,-25.7053704 +28.1859968,-25.7006696 +28.1851783,-25.7075316 +28.1720842,-25.7061910 +28.1826315,-25.6976097 +28.1866466,-25.6975198 +28.1722342,-25.7083438 +28.1587054,-25.7006225 +28.1376702,-25.7056984 +28.1376993,-25.7055256 +28.1573244,-25.7122757 +28.1551006,-25.7160609 +28.1528961,-25.7196149 +28.2725644,-25.7787431 +28.2733287,-25.8206901 +28.2965690,-25.8298009 +28.3096429,-25.8234921 +28.2862001,-25.8365914 +28.2806258,-25.8405767 +28.2739766,-25.8428254 +28.2393471,-25.8389583 +28.3222215,-25.8024944 +28.3226537,-25.7949297 +28.3374095,-25.7745332 +28.3441948,-25.7785414 +28.3494875,-25.7755181 +28.3535537,-25.7714524 +28.3570968,-25.7665275 +28.3686874,-25.7512202 +28.2465664,-25.7343250 +28.3065898,-25.7332280 +28.3255248,-25.8413810 +28.3183882,-25.8302573 +28.3171021,-25.7981808 +28.2583708,-26.0332884 +28.2820566,-25.6845663 +28.2792478,-25.6840193 +28.2714226,-25.6824092 +28.2101115,-25.8135224 +28.2102789,-25.8135342 +28.3559875,-25.7468206 +28.3490267,-25.7444400 +28.3251095,-25.7256422 +28.2922173,-25.6855723 +28.2993912,-25.8583030 +28.2523674,-25.8356653 +27.9555806,-26.0608995 +28.2755087,-25.6831644 +28.2539566,-25.6791008 +28.2426858,-25.6787124 +28.2232235,-25.6815164 +28.2153904,-25.6852526 +28.2164015,-25.6804228 +28.2021083,-25.6780069 +28.1995718,-25.6836171 +28.1934036,-25.6833191 +28.1921366,-25.6855763 +28.1865891,-25.6881981 +28.1948571,-25.6767267 +28.2440683,-25.6602193 +28.2443573,-25.6548591 +28.1912303,-25.6533721 +28.1655060,-25.6655687 +28.1717515,-25.6660071 +28.1748918,-25.6662334 +28.1795912,-25.6665670 +28.1725893,-25.6745800 +28.1650372,-25.6742049 +28.1651094,-25.6769206 +28.1707328,-25.6773499 +28.1723370,-25.6774593 +28.1738551,-25.6775675 +28.1785864,-25.6778442 +28.1563041,-25.6790518 +28.1491355,-25.6776205 +28.1433746,-25.6774978 +28.1336709,-25.6774256 +28.1564892,-25.6649052 +28.1436618,-25.6551691 +28.1292111,-25.6352030 +28.1848002,-25.8566057 +28.1826226,-25.8571249 +28.1801916,-25.8588509 +28.1799577,-25.8589168 +28.1023441,-25.6511656 +28.1014314,-25.6627889 +28.1008304,-25.6716733 +28.1078962,-25.6669503 +28.1078010,-25.6644976 +28.1081143,-25.6695060 +28.1086778,-25.6748103 +28.1050906,-25.7151518 +28.1041425,-25.7142854 +28.2368676,-25.8251598 +28.2050586,-25.8169263 +28.1993829,-25.8186100 +28.1945973,-25.8209045 +28.1470255,-25.8312717 +28.1354991,-25.8336432 +28.1273421,-25.8362652 +28.1127660,-25.8347478 +28.1083200,-25.8571303 +28.1081254,-25.8770265 +28.1062810,-25.8823009 +28.1065310,-25.8822522 +28.1065052,-25.8823530 +28.1062477,-25.8824113 +28.2268126,-25.7337479 +28.2151464,-25.7342526 +28.2123374,-25.7343762 +28.2047763,-25.7352244 +28.2030569,-25.7361087 +28.2042757,-25.7331712 +28.2054474,-25.7394347 +28.2033557,-25.7398515 +28.1731252,-25.7430568 +28.1720738,-25.7443575 +28.1732680,-25.7445326 +28.1669406,-25.7431591 +28.1763377,-25.7472486 +28.1783133,-25.7471106 +28.1786096,-25.7509295 +28.1786612,-25.7515198 +28.1748284,-25.7529295 +28.1741048,-25.7521779 +28.1728852,-25.7538742 +28.1653720,-25.7543855 +28.1591819,-25.8627097 +28.1410318,-25.8566080 +28.0098227,-26.0326845 +28.0092427,-26.0267339 +28.0099559,-26.0162817 +28.1932964,-25.6688664 +28.1556375,-25.8214936 +28.1568600,-25.8260492 +28.1701429,-25.7790529 +28.1702304,-25.7791202 +28.1703595,-25.7789889 +28.1671024,-25.7765306 +28.1670094,-25.7766871 +28.1669824,-25.7764586 +28.1593413,-25.9104645 +28.1622625,-25.9103026 +28.1514282,-25.9256210 +28.1513077,-25.9255511 +28.1548111,-25.9284407 +28.1438186,-25.9430843 +28.1404656,-25.9563545 +28.1346753,-25.9955939 +28.1369714,-26.0004690 +28.1370071,-26.0006157 +28.1365008,-26.0054738 +28.1325008,-26.0101409 +28.1259196,-26.0131000 +28.2026737,-25.8155608 +28.2025188,-25.8156046 +28.2025450,-25.8156795 +28.2027027,-25.8156378 +28.1829464,-25.8386347 +28.2044387,-25.8203646 +28.2042782,-25.8204157 +28.2072743,-25.8288747 +28.2071634,-25.8289159 +28.2050053,-25.8297949 +28.2136646,-25.8428017 +28.2138609,-25.8427452 +28.2188385,-25.8555601 +28.2187059,-25.8556117 +28.1618488,-25.8422599 +28.2050129,-25.8568358 +28.2157800,-25.8624860 +28.2213319,-25.8619977 +28.2234825,-25.8773833 +28.2037239,-25.8809078 +28.1988634,-25.8759253 +28.1990579,-25.8757983 +28.1955462,-25.8722125 +28.1931206,-25.8684079 +28.1933093,-25.8683304 +28.1950912,-25.8674296 +28.1916235,-25.8658863 +28.1894863,-25.8643395 +28.1895495,-25.8641602 +28.1903446,-25.8626406 +28.1868759,-25.8631911 +28.1867033,-25.8633860 +28.1852130,-25.8629100 +28.1853877,-25.8627021 +28.1873062,-25.8606211 +28.1896551,-25.8602098 +28.1747491,-25.8609861 +28.1775327,-25.8595148 +28.1775688,-25.8595849 +28.1800362,-25.8590235 +28.1666134,-25.8623082 +28.2353205,-25.8689287 +28.2497436,-25.8638818 +28.2554034,-25.8655641 +28.2593881,-25.8673977 +28.2588261,-25.8619087 +28.1843300,-25.8925600 +28.1601686,-25.8923203 +28.1542401,-25.8923684 +28.1313823,-25.9323003 +28.1229812,-25.9527011 +28.1228313,-25.9535371 +28.0952399,-25.9399517 +28.0951722,-25.9401229 +28.0949552,-25.9400502 +28.0785187,-25.9751514 +28.1057280,-25.9754723 +28.1037328,-25.9716442 +28.1071043,-25.9779026 +28.1225951,-25.9593970 +28.1027481,-25.9698415 +28.1117275,-25.9864955 +28.1047652,-25.9953068 +28.1039918,-26.0006737 +28.1031908,-26.0095932 +28.0927375,-26.0050009 +28.0816679,-25.9999184 +28.0967754,-25.8097077 +28.1090289,-25.7991579 +28.1093996,-25.7940845 +28.1119370,-25.7889726 +28.1328647,-25.7616317 +28.1330421,-25.7615931 +28.1330236,-25.7617480 +28.1328418,-25.7618012 +28.1402293,-25.7589887 +28.1430677,-25.7543494 +28.1432607,-25.7543399 +28.1478505,-25.7556023 +28.1461060,-25.7493304 +28.1459717,-25.7493400 +28.1401195,-25.7590300 +28.1400591,-25.7589038 +28.1424938,-25.7629617 +28.1423798,-25.7630001 +28.1503482,-25.7554110 +28.1334883,-25.7541352 +28.1329780,-25.7502038 +28.1347578,-25.7437722 +28.1356647,-25.7410249 +28.1348437,-25.7242227 +28.1928126,-25.8179883 +28.2009994,-25.7485264 +28.1622799,-25.7248951 +28.1628703,-25.7545541 +28.1623231,-25.7482304 +28.1572309,-25.7485760 +28.1544317,-25.7439790 +28.1501740,-25.7490826 +28.1729422,-25.7415926 +28.1718880,-25.7416417 +28.1156979,-25.6752827 +28.1176276,-25.6749454 +28.1350590,-25.7228622 +28.1352948,-25.7214722 +28.1359451,-25.7173031 +28.1509307,-25.7188727 +28.1370239,-25.7099658 +28.1363280,-25.7140937 +28.1418783,-25.7496177 +28.1203263,-25.7510576 +28.1553606,-25.7550686 +28.1548468,-25.7487376 +28.1523240,-25.7489027 +27.9601407,-26.0758653 +27.9647501,-26.0721466 +27.9690553,-26.0631169 +27.9621175,-26.0627200 +27.9594668,-26.0651276 +27.9513898,-26.0785178 +27.9586720,-26.0781565 +27.9631475,-26.0778324 +27.9445218,-26.0646083 +27.9536627,-26.0617770 +27.9451945,-26.0706332 +27.9515280,-26.0621958 +27.9490332,-26.0627304 +27.9536283,-26.0616869 +27.9555121,-26.0607880 +27.9445174,-26.0644720 +27.9490196,-26.0626062 +27.9578634,-26.0587273 +27.9636664,-26.0554137 +27.9704357,-26.0555998 +27.9496419,-26.0387861 +27.9556551,-26.0541681 +28.2288960,-25.7336644 +28.2423687,-25.7329846 +28.2121169,-25.7343877 +28.0022250,-26.0188803 +28.0041495,-26.0174330 +28.0032344,-26.0214665 +27.9958907,-26.0238083 +28.0053051,-26.0333762 +27.9965386,-26.0434873 +27.9948772,-26.0396174 +27.9824386,-26.0606098 +27.9740636,-26.0537971 +27.9471199,-26.0544070 +28.2157653,-25.8623501 +28.2108256,-25.8640008 +28.1595281,-25.8972623 +28.1622653,-25.8851477 +28.1823651,-25.8666090 +28.1794700,-25.8690416 +28.2233161,-25.8756614 +27.9906857,-26.0253149 +27.9701131,-26.0578715 +27.9893515,-26.0412159 +27.9754173,-26.0293552 +27.9843145,-26.0270426 +27.9637229,-26.0343180 +27.9588379,-26.0397650 +27.9554013,-26.0608738 +27.9554707,-26.0609849 +27.9552253,-26.0437495 +27.9495654,-26.0388879 +27.9468818,-26.0323994 +28.1592577,-25.8314734 +28.0038216,-26.0081611 +27.9981293,-26.0142548 +27.9993458,-26.0122106 +27.9697037,-26.0460829 +28.0924688,-26.0659179 +28.0907090,-26.0684581 +28.1632494,-25.8418667 +28.1054071,-25.8864710 +27.9689638,-26.0781281 +27.9370502,-26.0716901 +27.9372383,-26.0718502 +27.9415232,-26.0637215 +28.1248621,-25.6750633 +28.1308566,-25.6504003 +28.1537617,-25.7396175 +28.0143334,-26.0561558 +28.0056994,-26.0525889 +28.0084166,-26.0534834 +27.9952181,-26.0670809 +28.0704926,-26.0262503 +28.3133899,-25.8260429 +28.3135279,-25.8214585 +28.4191109,-25.7091181 +28.4195970,-25.6981481 +28.4136932,-25.7097334 +28.3116261,-26.0972985 +28.3022118,-26.0907606 +28.2937700,-26.0848910 +28.3486574,-25.7819514 +28.1897364,-25.6864163 +28.0074450,-26.0670970 +28.0017981,-26.0691290 +28.0969575,-26.0880792 +28.0107600,-26.0215594 +28.0090573,-26.0223754 +28.0087951,-26.0222454 +28.0140714,-26.0158681 +28.0370213,-26.0511364 +28.0221309,-26.0107099 +28.0312755,-26.0160958 +28.0209424,-26.0255987 +28.0152443,-26.0319024 +28.0127582,-26.0323425 +28.0609715,-26.0332592 +28.0611382,-26.0332124 +28.0621988,-26.0265918 +28.0623436,-26.0266306 +28.0616676,-26.0280449 +28.0618342,-26.0281238 +28.0637554,-26.0326704 +28.0656481,-26.0322935 +28.0805078,-26.0318972 +28.0802198,-26.0339102 +28.0651955,-26.0351934 +28.0807989,-26.0301638 +28.2445276,-25.9736172 +28.1530653,-25.9891843 +28.1546854,-25.9466161 +28.1546264,-25.9467741 +27.9437571,-25.7841484 +28.0091218,-26.0816990 +28.0092233,-26.0817467 +27.9769422,-26.0799850 +27.9684259,-26.0687301 +27.9749485,-26.0749926 +27.9747806,-26.0750463 +28.2765448,-25.7861791 +27.9015090,-26.0604994 +27.9053068,-26.0642981 +28.2946875,-25.7670137 +28.2326668,-25.9525267 +28.2020604,-25.9574776 +28.2075530,-25.9600399 +28.2120290,-25.9630792 +28.2163057,-25.9660179 +28.2248560,-25.9719287 +28.2019992,-25.9576092 +28.2074622,-25.9601657 +28.2247581,-25.9720698 +28.2328172,-25.9758778 +28.2445523,-25.9737603 +28.0780976,-26.0725387 +28.0754846,-26.0669119 +28.0755953,-26.0668616 +28.1896274,-25.8580809 +28.1880517,-25.8504259 +28.2022469,-25.8535134 +28.0106411,-26.0215346 +28.0107654,-26.0213097 +28.0090575,-26.0222693 +28.0094854,-26.0267962 +28.0092557,-26.0268118 +28.1310664,-25.9971626 +28.1309282,-25.9972250 +28.1308137,-25.9971642 +28.1309645,-25.9970931 +28.1346081,-25.9954688 +28.1286921,-25.9958749 +28.0598141,-26.0737350 +28.1072353,-25.9965435 +28.1137281,-26.0020175 +28.0799640,-26.0085337 +27.9004931,-26.1797957 +28.0099872,-26.0161529 +28.0102179,-26.0161426 +28.0140749,-26.0157865 +28.0041244,-26.0173231 +28.0061611,-26.0168217 +28.0021630,-26.0187750 +28.0163300,-26.0235893 +28.0161768,-26.0232312 +28.0162511,-26.0221901 +28.3158760,-25.7658261 +28.1238875,-26.0113236 +28.1970764,-25.7547289 +28.1908157,-25.8589504 +28.2037183,-26.0784815 +28.2084442,-26.0709022 +28.2035618,-26.0785253 +28.2084676,-26.0707426 +28.2083729,-26.0707917 +28.1377083,-26.0326930 +28.1580284,-26.0503720 +28.1772608,-26.0599481 +28.1484552,-26.0431047 +28.1292921,-26.0253886 +28.1374300,-26.0329340 +28.1577752,-26.0506004 +28.1772414,-26.0602008 +28.1837787,-26.0606322 +28.1868922,-26.0742192 +28.1856441,-26.0692302 +28.1871540,-26.0741549 +28.1860042,-26.0691928 +28.1830974,-26.0553209 +28.1853401,-26.0499037 +28.1856167,-26.0499933 +28.1833192,-26.0554136 +28.2209171,-26.0651658 +28.2243722,-26.0622973 +28.2579774,-26.0403228 +28.2580118,-26.0401454 +28.2164516,-25.7717842 +28.1870594,-25.7494811 +28.2204706,-25.7566708 +28.0902573,-26.0566365 +28.0890944,-26.0567117 +28.0845557,-26.0582399 +28.0844677,-26.0581987 +28.0890843,-26.0566048 +28.0902405,-26.0565033 +28.3096346,-25.7894797 +28.0626581,-26.0376046 +28.1651094,-25.9104577 +28.1847703,-25.8390692 +28.1885476,-25.7828182 +28.1887487,-25.7829535 +28.2288541,-26.0509720 +28.2317678,-26.0560895 +28.2318639,-26.0560043 +28.2396289,-26.0494298 +28.2251034,-26.0696458 +28.2241503,-26.0758062 +28.0612765,-26.0333540 +28.0803929,-26.0338974 +28.2567271,-26.0429972 +27.9290489,-26.0212188 +28.0851524,-26.0230312 +28.2383659,-26.0636231 +28.0806744,-26.0318810 +28.0852557,-26.0231541 +28.0804023,-26.0341336 +28.0802192,-26.0341343 +28.0617444,-26.0283492 +28.0615833,-26.0282864 +28.2286010,-26.0691567 +27.9554836,-26.0541455 +28.1047775,-25.8914714 +28.1894143,-25.7448962 +28.0779359,-26.0725833 +28.0982180,-25.9491931 +28.2003399,-25.7470921 +28.2004081,-25.7455979 +28.2002500,-25.7441290 +28.1995375,-25.7485676 +28.1984899,-25.7500774 +28.1961435,-25.7571853 +28.2374742,-25.6794063 +28.2922929,-25.6857595 +28.2539366,-25.6793008 +28.2116043,-25.6797845 +28.2426750,-25.6789272 +28.2020742,-25.6781080 +28.2232081,-25.6816227 +28.2163726,-25.6805310 +28.1948516,-25.6768176 +28.1795854,-25.6666332 +28.1836110,-25.6820498 +28.1836865,-25.6821526 +28.1858693,-25.6961259 +28.1860147,-25.6963735 +28.1851452,-25.7153524 +28.1863358,-25.6960076 +28.1861615,-25.6965194 +28.1826329,-25.6978288 +28.1722509,-25.7061992 +28.1705609,-25.7215288 +28.1707008,-25.7214721 +28.1727591,-25.7402569 +28.1717991,-25.7403253 +28.1703677,-25.7276166 +28.1865149,-25.7099750 +28.1868802,-25.7077118 +28.1870720,-25.7053887 +28.1862047,-25.7127871 +28.1876232,-25.7008383 +28.2611420,-25.7111709 +28.2611702,-25.7112749 +28.2668480,-25.7116001 +28.2692568,-25.7115061 +28.2648413,-25.7115032 +28.2877986,-25.6990455 +28.2693688,-25.7113730 +28.2693744,-25.7114927 +28.2923175,-25.6855522 +28.2923862,-25.6857460 +28.2626043,-25.8167858 +28.2608374,-25.8214644 +28.3170063,-25.7980967 +28.2085334,-26.0708613 +28.2100075,-26.0762261 +28.2467430,-26.0703144 +28.1079336,-25.9025446 +28.1016622,-25.9067580 +28.1762993,-25.8709780 +28.0076059,-26.0168546 +27.9935854,-26.0400234 +28.2200716,-26.0642562 +28.2289486,-26.0509235 +28.1737945,-25.7401830 +28.1766960,-25.7399762 +28.2032097,-25.7382551 +28.0699249,-26.0394133 +28.1884933,-25.8593323 +28.3934245,-25.7030112 +28.3820191,-25.7099685 +28.3788558,-25.7117023 +28.3747485,-25.7142148 +28.3551235,-25.7182286 +28.3449492,-25.7183742 +28.1789288,-26.0040731 +28.2643509,-26.0319905 +28.2641231,-26.0318611 +28.2642485,-26.0318061 +27.9423174,-26.0220441 +27.9906386,-26.0251936 +28.0993851,-25.9542867 +27.9210146,-26.0749098 +28.1930796,-25.8682977 +28.1932618,-25.8682310 +27.9317167,-26.0818730 +27.9210655,-26.0747357 +27.9142226,-26.0716491 +28.0985051,-25.9233503 +28.0996209,-25.9180069 +28.1723900,-25.7083678 +28.1360933,-25.7173215 +28.1364578,-25.7141120 +28.1371397,-25.7099826 +28.1378640,-25.7057371 +28.1378916,-25.7055546 +28.1349654,-25.7242438 +28.1351900,-25.7228600 +28.1354173,-25.7214883 +27.9472634,-26.0544945 +27.9441594,-26.0588584 +27.9553794,-26.0437182 +27.9413521,-26.0635428 +27.9415709,-26.0636259 +28.2107176,-25.8638511 +28.1595180,-25.9103427 +28.1586839,-25.9037733 +28.1620916,-25.9084406 +28.1621604,-25.9103048 +28.1622063,-25.9084370 +28.0961484,-25.5787784 +28.1026970,-25.5796370 +28.1052770,-25.7151581 +28.2320846,-25.9615831 +27.9733317,-26.0715187 +28.2111098,-26.0810943 +28.2508836,-26.0394458 +28.2227881,-26.0011173 +28.2226820,-26.0013288 +28.2066371,-26.0155500 +28.2280733,-26.0012251 +28.2196942,-26.0063066 +28.2196015,-26.0062598 +28.2180846,-26.0093488 +28.2178807,-26.0092425 +28.2177942,-26.0111877 +28.2176167,-26.0112033 +28.2204584,-26.0049590 +28.2203671,-26.0049165 +28.2308328,-26.0169539 +28.2417634,-25.9981910 +28.2177997,-26.0163893 +28.2180200,-26.0165332 +28.2117775,-26.0167414 +28.2119371,-26.0166027 +28.2205593,-26.0047705 +28.2204752,-26.0047303 +28.2046873,-26.0159049 +28.2046169,-26.0156900 +28.2303706,-25.9612793 +28.2107725,-26.0036226 +28.2191151,-25.9972096 +28.2272297,-25.9953042 +28.1998014,-26.0204190 +28.1999981,-26.0205500 +28.1683066,-26.0230520 +28.1752526,-26.0447067 +28.1742896,-26.0334389 +28.2026988,-26.0169679 +28.2028728,-26.0170821 +28.1984078,-26.0221665 +28.1985658,-26.0222665 +28.2162161,-25.9661603 +28.2260000,-26.0003249 +28.2299692,-25.9958384 +28.2283120,-26.0012685 +28.2360822,-25.9970802 +28.2290647,-26.0012049 +28.2318626,-26.0005658 +28.0806395,-26.0380819 +28.0861301,-26.0414690 +28.2076965,-26.0693560 +28.1750701,-26.0388180 +28.1866043,-25.9969258 +28.2418638,-26.0051356 +28.2428629,-25.9977137 +28.2446674,-25.9906697 +27.9650317,-26.0543841 +28.0804901,-26.0379684 +28.0712327,-26.0524840 +28.1595222,-25.9104651 +28.2051277,-25.8170934 +28.1994603,-25.8187615 +28.1946768,-25.8210581 +28.1946643,-25.8208530 +28.1947433,-25.8209988 +28.2288176,-26.0683944 +28.1413183,-25.8825985 +28.1413171,-25.8824700 +28.1987535,-25.7623883 +28.2197745,-25.7340376 +28.1264572,-25.9803274 +28.1622700,-25.9104864 +28.1908719,-25.7504489 +28.1933101,-25.7504440 +28.1957250,-25.7500916 +28.1974042,-25.7502449 +28.1933211,-25.7506479 +28.1908949,-25.7507092 +28.0904999,-26.0566197 +28.2219440,-25.7559110 +28.3319863,-25.7211394 +28.0882055,-26.0760119 +28.1064655,-26.0825651 +28.1173692,-26.0814818 +28.1184338,-26.0813019 +28.2698976,-25.7373254 +28.2678615,-25.7385099 +28.1487765,-26.0428940 +28.1296823,-26.0252538 +28.1322297,-25.9218272 +28.0128602,-26.0385194 +28.0130262,-26.0384526 +28.0132351,-26.0390848 +28.0100593,-26.0327602 +27.9553058,-26.0438576 +28.2699915,-25.7374208 +28.2764944,-25.7398430 +28.2751498,-25.7349936 +28.2933851,-25.7329885 +28.2960123,-25.7330403 +28.2992229,-25.7331237 +28.3010595,-25.7331907 +28.3065875,-25.7333453 +28.3141230,-25.7343394 +28.0098242,-26.0264791 +27.9587862,-26.0781516 +28.2075912,-26.0693886 +28.2088901,-26.0716587 +28.2087791,-26.0716629 +28.2745627,-25.7799634 +28.1785677,-25.8389062 +27.9753540,-26.0763101 +27.9755015,-26.0762524 +27.9795758,-26.0993625 +28.2100911,-25.8628756 +28.2109427,-25.8639432 +28.2108286,-25.8637932 +28.1922498,-25.8751107 +28.2051202,-25.8567577 +28.1031872,-26.0098849 +28.0899436,-26.0206793 +28.2243967,-25.7736835 +28.2247315,-25.7737005 +28.2244806,-25.7735565 +28.2162996,-25.7717442 +28.2163944,-25.7719516 +28.0309345,-26.0282729 +28.2162468,-25.7719125 +28.0023627,-26.0188215 +28.0022900,-26.0187086 +27.9982382,-26.0141563 +28.2142266,-25.7713391 +28.2103031,-25.7714165 +27.9397727,-26.0166630 +28.2386993,-25.7583512 +28.2395086,-25.7557497 +28.2403772,-25.7531964 +28.2401036,-25.7502587 +28.2399993,-25.7487673 +28.0710715,-25.9832494 +28.2588649,-25.7323206 +28.2586012,-25.7278220 +28.2578719,-25.7165576 +28.2581405,-25.7207962 +28.2882473,-25.7139465 +28.1927522,-25.6786292 +28.1275202,-25.9976425 +28.1273893,-25.9975645 +28.1285700,-25.9958187 +28.2250878,-25.7560820 +28.0607654,-26.0394524 +28.0606371,-26.0391987 +28.0157775,-26.0425018 +28.0156349,-26.0425951 +28.0255594,-26.0392709 +28.0627098,-26.0307992 +28.2416316,-25.9823021 +28.2438270,-25.9868538 +28.2581903,-25.8088729 +28.2590580,-25.8093657 +28.2582874,-25.8088007 +28.2035409,-25.8810012 +28.1867425,-25.6880100 +28.1719661,-25.7427998 +28.1923546,-25.8457570 +28.1872745,-25.8409998 +28.1977430,-25.8497966 +28.2023236,-25.8534188 +28.1848473,-25.8390044 +28.1829491,-25.8385357 +28.1819205,-25.7602091 +28.1821352,-25.7601880 +28.3292580,-25.7228138 +28.3318701,-25.7210238 +28.3319923,-25.7209385 +28.2765961,-25.7648603 +28.2355586,-26.0160050 +28.1695881,-25.7269705 +28.1701825,-25.7276929 +28.1713812,-25.7379117 +28.1730158,-25.7476359 +28.1731700,-25.7475369 +28.1728243,-25.7474688 +28.1730474,-25.7474060 +28.1811548,-25.7511924 +28.1974367,-25.7503191 +28.1983935,-25.7499293 +28.1972918,-25.7501383 +28.1994722,-25.7426950 +28.1991959,-25.7417625 +28.1987426,-25.7496718 +28.1973409,-25.7546718 +28.1971440,-25.7548693 +28.1914946,-25.7580055 +28.1914135,-25.7581000 +28.1824054,-25.7623035 +28.1820663,-25.7623874 +28.1668834,-25.7766125 +28.1822275,-25.7624991 +28.1886152,-25.7830049 +28.1328621,-25.7462710 +28.1328529,-25.7463749 +28.1719627,-25.7427423 +28.1669099,-25.7430793 +28.1574157,-25.7485642 +28.1544244,-25.7438878 +28.1785498,-25.8388228 +28.1678940,-25.8405009 +28.1730264,-25.8397527 +28.1618157,-25.8421830 +28.1632161,-25.8417918 +28.1131600,-26.0821550 +28.0121261,-26.0752045 +28.0147495,-26.0715571 +28.1651585,-25.9102842 +28.1838187,-25.9135752 +28.3320884,-25.7210557 +28.3251820,-25.7257436 +28.3293521,-25.7229123 +28.1866376,-26.0742851 +28.3162463,-25.7326129 +28.3179090,-25.7309263 +28.2584443,-25.7673509 +28.2622122,-25.7699479 +28.2683124,-25.7746443 +28.2794599,-25.7667218 +28.2882549,-25.7684874 +28.3158909,-25.7660218 +28.3024938,-25.7670612 +28.2974411,-25.7672079 +28.2946480,-25.7671906 +28.1563524,-25.6788811 +28.1651362,-25.6741584 +28.1086600,-25.6745756 +28.1433615,-25.6772682 +28.1079586,-25.6645668 +28.1490718,-25.6774384 +28.4008728,-25.7235547 +28.1249146,-25.6748589 +28.1156103,-25.6750487 +28.1080723,-25.6669418 +28.1175582,-25.6747066 +28.1080920,-25.6693155 +28.1082693,-25.6694665 +28.1336433,-25.6771963 +28.1517094,-25.8679974 +28.1430440,-25.8551029 +28.1978401,-25.8498671 +28.1429415,-25.8551850 +28.2008170,-25.8466021 +28.1934580,-25.6688368 +28.1866640,-25.6974799 +28.1866841,-25.6974128 +28.1866875,-25.6973270 +28.1918394,-25.6853924 +28.1947576,-25.6767248 +28.1868343,-25.6879360 +28.1872163,-25.6887358 +28.1861469,-25.6872794 +28.1137870,-25.8964329 +28.2755219,-25.6834429 +28.2777085,-25.7816667 +28.2713232,-25.7780234 +28.2745471,-25.7801832 +28.2717478,-25.7783560 +28.2723097,-25.7787685 +28.2744513,-25.7801246 +28.2678833,-25.7647506 +28.2698889,-25.7849212 +28.2588986,-25.8090916 +28.2719948,-25.8194385 +28.2608937,-25.8213195 +28.2606590,-25.8213152 +28.1952596,-25.8674291 +28.1026853,-25.9013686 +28.1018832,-25.9067899 +28.1029245,-25.9014123 +27.9726512,-26.0700684 +27.9727603,-26.0699771 +28.2519717,-25.8646278 +28.2593740,-25.8674888 +28.2553647,-25.8657016 +28.0605358,-26.0392886 +28.1091267,-25.5269587 +27.9877716,-25.5864837 +27.9876467,-25.5863953 +28.1090563,-25.5270549 +28.3685461,-25.7514263 +28.2385728,-25.7584337 +28.0133368,-26.0388254 +28.0128555,-26.0387048 +28.1264715,-25.9801499 +28.1260866,-25.9803087 +28.1673545,-25.7478891 +28.2412575,-25.7589705 +28.3058513,-25.7859169 +28.2275394,-25.7497520 +28.2596889,-25.7628089 +28.3493909,-25.7753756 +28.3440607,-25.7784653 +28.3384549,-25.7809319 +28.3441821,-25.7783422 +28.3443249,-25.7784333 +27.9742440,-26.0732774 +27.9740555,-26.0732446 +28.2927599,-25.7454158 +28.3270024,-25.7685163 +28.1392919,-25.8732654 +28.1391616,-25.8732248 +28.2741028,-25.7660285 +28.2755468,-25.7662381 +28.1918349,-25.8661743 +28.1172583,-26.0056972 +28.1171684,-26.0056073 +28.2212896,-25.8618896 +28.2214693,-25.8619650 +28.2214334,-25.8618570 +28.2501943,-25.7153516 +27.9103500,-26.0689060 +28.4185939,-25.7034719 +28.2342717,-26.0281689 +28.4188548,-25.7034810 +28.3353398,-25.7145485 +27.8892557,-25.7307888 +28.1855717,-25.7155016 +28.1857406,-25.7155514 +28.1855415,-25.7155877 +28.0272476,-26.0316035 +28.0273770,-26.0316482 +28.3033830,-25.7846181 +27.9579515,-26.0586572 +28.1084320,-25.6710566 +28.0266509,-26.0129493 +28.1178279,-25.9802347 +28.1191585,-25.9761088 +28.1927929,-25.6785577 +28.1946017,-25.6789206 +28.0802256,-25.9756721 +28.1566211,-25.6692646 +27.9730871,-26.0541522 +28.1926884,-25.8553483 +28.1928191,-25.8554350 +28.1976635,-25.8498855 +28.1977575,-25.8499622 +28.2070656,-25.8424806 +28.2032433,-25.8440482 +28.2032040,-25.8439496 +28.2119130,-25.9632184 +28.2122999,-25.9811668 +28.1931281,-25.9846671 +27.9935310,-26.0400412 +28.1107488,-25.8992264 +28.1083745,-25.8770218 +28.1084863,-25.8699070 +28.1083493,-25.8771290 +28.1087297,-25.8698539 +28.1085721,-25.8570332 +28.1097739,-25.8419053 +28.1095590,-25.8417847 +28.1406809,-25.9087892 +28.1372490,-25.9112655 +28.1708393,-25.8922984 +28.1673450,-25.8728094 +28.1618224,-25.8776572 +28.1650325,-25.8753635 +28.1615431,-25.8778089 +28.1618153,-25.8777615 +28.1615491,-25.8777196 +28.1635480,-25.8770119 +28.1737009,-25.8725032 +28.1414525,-25.8826018 +28.1412441,-25.8806504 +28.1391842,-25.8732990 +27.9291639,-26.0511668 +28.1005733,-25.9601370 +27.9272783,-26.0574452 +28.1611834,-25.8849867 +28.1827233,-25.8572003 +28.1802624,-25.8589739 +28.1929136,-25.8553192 +28.1927960,-25.8552333 +28.1971230,-25.8591374 +28.1516699,-25.8677482 +28.0031738,-26.0212940 +28.0030571,-26.0213227 +28.0242968,-25.9175513 +28.0242324,-25.9176592 +28.1438847,-25.9429141 +27.9842845,-26.0269529 +28.0127976,-26.0324243 +28.0097284,-26.0328553 +28.0163538,-26.0221966 +28.0161022,-26.0229457 +28.0163253,-26.0233044 +28.1666023,-25.8623969 +28.1144502,-25.8762596 +28.1143782,-25.8763160 +28.0309394,-26.0281749 +28.1833882,-25.9211233 +28.0755412,-26.0670049 +28.0756485,-26.0669561 +28.0160974,-26.0426479 +28.0157849,-26.0423076 +28.0228011,-26.0574791 +28.0992523,-26.0136464 +28.2428367,-25.6787140 +28.2428192,-25.6789302 +28.0844899,-26.0583478 +28.0844038,-26.0583103 +28.1897681,-25.6865551 +28.0635060,-26.0786464 +28.0634363,-26.0786117 +28.1883017,-25.8723081 +28.1380181,-25.9651732 +28.1882028,-25.8502466 +28.2616840,-25.8261956 +28.2614787,-25.8263457 +28.1131650,-26.0112385 +27.9734763,-26.0714844 +28.1385892,-25.8700836 +28.1384587,-25.8701082 +28.1386061,-25.8701542 +28.1384741,-25.8701785 +28.2043794,-25.7303505 +28.2030727,-25.7362427 +28.2045194,-25.7302676 +28.2048564,-25.7353323 +28.2044654,-25.7331830 +28.3533760,-25.7713660 +27.9875668,-25.5864842 +27.9876763,-25.5865793 +28.2648963,-25.6811180 +28.2650167,-25.6811488 +28.2650101,-25.6813690 +28.1930222,-26.0358661 +28.2448989,-25.9960224 +28.2066202,-26.0157278 +28.1535407,-25.9668799 +28.1906115,-26.0689754 +28.1483084,-26.0431884 +28.2520118,-25.8645050 +28.2740658,-25.8427681 +28.2741485,-25.8428558 +28.2701947,-25.8376666 +28.2740517,-25.8429086 +28.2806627,-25.8406755 +28.2795858,-25.8466358 +28.1107762,-26.0345788 +28.1219872,-26.0586330 +28.1129032,-26.0646361 +28.3068748,-25.8254164 +28.3055945,-25.8186760 +28.3069295,-25.8254927 +28.3185056,-25.8301992 +28.3097573,-25.8235854 +28.3135251,-25.8216086 +28.3256080,-25.8413418 +28.3134896,-25.8260077 +28.3097563,-25.8234184 +28.3098710,-25.8235058 +28.3097948,-25.8232622 +28.3093911,-25.8235060 +28.2840403,-25.7949222 +28.1260063,-26.0129938 +28.1916156,-25.6609531 +28.1913870,-25.6609830 +28.1915341,-25.6612068 +28.1865026,-25.6584570 +28.1864221,-25.6587728 +28.1867347,-25.6588118 +28.1891159,-25.8516785 +28.1924858,-25.8458637 +28.1924063,-25.8459472 +28.1883269,-25.8504529 +28.1881743,-25.8506027 +28.1972567,-25.8597497 +28.1090915,-26.0125387 +28.1092055,-26.0123579 +28.1033350,-26.0096566 +28.2676667,-25.7383812 +28.2680053,-25.7384301 +28.2676000,-25.7385537 +28.1090862,-25.6745172 +28.0585722,-26.0486517 +28.0586777,-26.0486483 +28.0899666,-26.0205118 +28.0581544,-26.0375453 +28.0582659,-26.0374839 +28.0583604,-26.0375006 +28.0610033,-26.0373794 +28.0611407,-26.0374017 +28.0582234,-26.0372380 +28.0585427,-26.0372812 +28.0604674,-26.0395386 +28.0627570,-26.0375826 +28.0627245,-26.0376838 +28.0605022,-26.0407349 +28.2259047,-25.7771774 +28.1707014,-25.8920726 +28.1709222,-25.8920876 +28.1706156,-25.8922823 +28.2205361,-25.7567682 +28.2444855,-25.7598637 +28.2447076,-25.7599251 +28.2555575,-25.7624310 +28.2556469,-25.7624539 +28.0227059,-26.0567089 +28.0226367,-26.0570060 +28.1288476,-25.9949214 +28.1196255,-25.9735955 +28.1190231,-25.9760767 +28.1190033,-25.9761551 +28.1186777,-25.9782782 +28.1183830,-25.9783059 +28.1183495,-25.9784259 +28.1185429,-25.9786167 +28.2458921,-25.7312094 +28.2462084,-25.7327091 +28.2758877,-25.7627036 +28.2765242,-25.7648436 +28.2393535,-25.7558023 +28.2394820,-25.7558319 +28.2586927,-25.7323234 +28.2548457,-25.7325004 +28.2423749,-25.7330899 +28.2346695,-25.7334958 +28.2291006,-25.7335858 +28.2291039,-25.7336583 +28.2311825,-25.7042868 +28.2250085,-25.7114957 +28.2210781,-25.7162377 +28.2189980,-25.7186370 +28.2153368,-25.7229945 +28.2364833,-25.7726981 +28.2062185,-25.7488280 +28.2909837,-25.7676372 +28.2682119,-25.7747325 +28.2778108,-25.7817052 +28.2857129,-25.7833192 +28.2858283,-25.7833305 +28.2856061,-25.7835242 +28.2773804,-25.7841452 +28.2669532,-25.7845094 +28.2698976,-25.7847425 +28.2706983,-25.7847864 +28.2696723,-25.7849052 +28.2766850,-25.7862120 +28.2764973,-25.7862522 +28.2766514,-25.7862849 +28.2751132,-25.7882046 +28.2832805,-25.7880614 +28.2834537,-25.7881035 +28.2749918,-25.7881231 +28.2832340,-25.7881721 +28.2749971,-25.7883439 +28.2788264,-25.7904423 +28.2813694,-25.7927050 +28.2814685,-25.7927855 +28.2813228,-25.7928456 +28.3171146,-25.7980293 +28.3172115,-25.7981150 +28.3033932,-25.8132932 +28.2421716,-25.8158885 +28.2699006,-25.7846940 +28.2143725,-25.7712214 +28.2143708,-25.7713781 +28.2624036,-25.8166137 +28.2623556,-25.8167210 +28.2561792,-25.8211384 +28.0247146,-26.0471212 +27.9851117,-26.0008860 +27.9850487,-26.0008113 +28.1860526,-25.7508651 +28.1985549,-25.6924351 +28.1403320,-25.9562273 +28.2251282,-25.7558030 +28.2250184,-25.7559323 +28.2253321,-25.7559680 +27.9958456,-26.0236611 +28.2795278,-25.8467507 +28.2593555,-25.8095465 +28.2580521,-25.8084340 +28.2891199,-25.7488645 +28.2333633,-25.8139417 +28.2334605,-25.8143136 +28.2351430,-25.8142182 +28.2351805,-25.8144578 +28.0617968,-26.0285540 +28.0619842,-26.0280836 +28.0612003,-26.0330587 +27.9015623,-26.0604107 +27.9054644,-26.0641483 +27.9104850,-26.0687640 +28.0364435,-26.0331297 +28.0480279,-26.0362311 +28.0517131,-26.0361352 +28.2626467,-25.8166895 +28.1896087,-25.7492994 +28.1894773,-25.7478481 +28.1916832,-25.7476983 +28.1906474,-25.7477695 +28.1907631,-25.7492206 +28.1907011,-25.7485678 +28.3235095,-25.7586777 +27.9442159,-26.0587614 +28.0091165,-26.0266049 +28.0109922,-26.0122276 +28.0118378,-26.0082262 +28.0147136,-25.9947622 +27.9397186,-26.0165475 +27.9290385,-26.0213204 +28.2187244,-25.7577426 +28.2187880,-25.7578132 +28.2137548,-25.7573069 +28.0697667,-26.0316855 +28.0697408,-26.0319189 +28.0696608,-26.0316445 +28.0696201,-26.0318672 +28.0693105,-26.0343756 +28.0204555,-26.0474592 +28.0203170,-26.0475162 +28.0247263,-26.0470484 +27.9683157,-26.0687253 +27.9688883,-26.0684431 +28.0800691,-26.0342244 +28.0801236,-26.0337917 +28.0876008,-26.0219132 +28.0875264,-26.0218068 +28.0877292,-26.0218459 +28.0876615,-26.0217372 +28.0875362,-26.0220989 +28.0873406,-26.0217432 +28.0877351,-26.0215886 +28.0900605,-26.0205903 +28.0898435,-26.0205867 +28.0991957,-26.0135329 +28.0993174,-26.0134951 +28.1032117,-26.0100559 +28.1035109,-26.0096295 +28.1030750,-26.0094635 +28.1028952,-26.0099112 +28.0583498,-25.9863156 +28.0654746,-25.9844659 +28.0655401,-25.9846601 +28.0510132,-25.9907263 +28.1177298,-26.0229389 +28.1177273,-26.0231925 +28.1178734,-26.0231153 +28.1175778,-26.0230192 +28.1293959,-26.0254800 +28.1156746,-26.0212244 +28.1081037,-25.8771377 +28.3246160,-25.8157037 +28.3246258,-25.8155718 +28.3246931,-25.8156295 +28.3248319,-25.8155746 +28.3277535,-25.8121175 +28.3278094,-25.8119968 +28.3279017,-25.8120374 +28.3278310,-25.8121589 +28.3310147,-25.7163451 +28.3336563,-25.7163461 +28.3337981,-25.7163720 +28.3389675,-25.7178065 +28.3337000,-25.7165141 +28.3389105,-25.7179278 +28.3335578,-25.7164912 +28.3449512,-25.7182703 +28.3551196,-25.7181393 +28.3600827,-25.7192710 +28.3746675,-25.7141051 +28.3763646,-25.7131666 +28.3819690,-25.7099051 +28.3848907,-25.7081947 +28.3934740,-25.7031079 +28.3789098,-25.7117849 +28.3764139,-25.7132429 +28.0183092,-26.0448511 +28.0184226,-26.0447523 +28.0183966,-26.0447282 +28.0182841,-26.0448296 +28.3134296,-25.8259721 +28.3136063,-25.8215869 +28.3056884,-25.8188100 +28.3054920,-25.8189029 +28.3054110,-25.8187709 +28.3139721,-25.7343110 +28.3140069,-25.7344294 +28.2992913,-25.7433021 +28.2959368,-25.7443168 +28.2913037,-25.7463635 +28.3138564,-25.7344002 +28.3104121,-25.7392320 +28.2912518,-25.7463024 +28.2941622,-25.7448357 +28.1549151,-25.6651046 +28.1550325,-25.6650256 +28.1555698,-25.6658587 +28.1566814,-25.6692215 +28.2537845,-25.6792924 +28.2538061,-25.6790975 +28.1144770,-25.8764182 +28.3354268,-25.7146137 +28.2270142,-25.9195056 +27.9944473,-26.0107295 +27.9945330,-26.0106200 +28.1057920,-25.9755876 +28.1308194,-25.9389417 +28.1547659,-25.9283438 +28.1838010,-25.8558475 +28.1838789,-25.8559093 +28.1849897,-25.8545670 +28.1850705,-25.8546312 +28.1872070,-25.8409337 +28.1906095,-25.8379762 +28.1940197,-25.8350359 +28.1871953,-25.8410742 +28.1907034,-25.8380607 +28.1940973,-25.8351065 +28.1976313,-25.8328315 +28.2000696,-25.8317214 +28.2049554,-25.8297074 +28.2071239,-25.8288264 +28.2001099,-25.8318073 +28.1084236,-25.6709734 +28.3323053,-25.7289036 +28.1028277,-25.6427875 +28.1029225,-25.6428734 +28.1029285,-25.6428038 +28.1029366,-25.6426707 +28.2085357,-25.7560156 +27.9515000,-26.0620971 +27.9454266,-26.0283352 +27.9455691,-26.0283031 +27.9456048,-26.0283798 +27.9454636,-26.0284146 +28.1102424,-26.0179051 +28.1210736,-26.0256573 +28.1101452,-26.0180318 +28.2270453,-25.9193554 +28.2271647,-25.9193945 +28.2271388,-25.9195468 +28.0994025,-26.0136033 +28.1034815,-26.0161726 +28.1035355,-26.0160783 +28.1062683,-26.0123117 +28.1036314,-26.0162420 +28.1036850,-26.0161491 +28.1063906,-26.0123638 +28.0959181,-26.0141417 +28.0960496,-26.0141122 +28.0654308,-26.0353998 +28.1094626,-25.9007115 +28.0102603,-26.0328449 +28.2363693,-25.7727337 +28.2824781,-25.6849740 +28.1768582,-25.7417293 +28.3074057,-25.7179651 +28.1553645,-25.6657790 +28.1554934,-25.6657149 +28.1550366,-25.6649607 +28.2472752,-25.8631849 +28.3558701,-25.7467799 +28.2681321,-25.7746558 +28.2682313,-25.7745609 +28.2794890,-25.6842936 +28.2821203,-25.6844235 +28.2821962,-25.6844669 +28.1100293,-26.0179511 +28.2768202,-25.7892926 +28.2768820,-25.7891948 +28.2769704,-25.7892367 +28.2769095,-25.7893382 +28.2385945,-25.7583269 +28.0692344,-26.0343859 +28.0959463,-26.0142841 +28.0960808,-26.0142537 +28.1863411,-25.8599131 +28.3600354,-25.7193557 +28.3265579,-25.7503966 +28.3263856,-25.7503379 +28.3296853,-25.7379517 +28.3294459,-25.7378739 +28.3295338,-25.7376918 +28.3297649,-25.7377605 +28.1276723,-26.0147308 +28.1156905,-26.0213676 +28.1155938,-26.0213092 +28.1064250,-26.0122876 +28.1063083,-26.0122287 +28.1089552,-26.0124799 +28.1090816,-26.0123034 +28.1091488,-26.0126912 +28.1087036,-26.0125225 +28.1030493,-26.0098209 +28.0767256,-26.0027915 +28.1073056,-26.0184776 +28.1073913,-26.0183829 +28.1101867,-26.0144009 +28.1102418,-26.0142999 +28.1103721,-26.0143565 +28.1103309,-26.0144559 +28.1075057,-26.0184600 +28.1101239,-26.0178387 +28.1088115,-26.0170695 +28.1087009,-26.0170081 +28.1087307,-26.0171746 +28.1086165,-26.0171044 +28.1090529,-26.0121506 +28.1094256,-26.0123046 +28.1208493,-26.0256734 +28.1209560,-26.0255723 +28.1209755,-26.0257657 +28.1374038,-25.8813648 +28.1373863,-25.8812725 +28.2072189,-25.7548790 +28.2071742,-25.7549583 +28.2057303,-25.7542405 +28.2042594,-25.7536018 +28.2028328,-25.7529533 +28.2056928,-25.7543160 +28.2042146,-25.7536890 +28.1876438,-25.7420285 +28.1879123,-25.7449973 +28.1880263,-25.7449896 +28.1879032,-25.7434929 +28.1877884,-25.7420181 +28.1872865,-25.7392211 +28.1849735,-25.7393860 +28.1889258,-25.7285858 +28.1887076,-25.7273264 +28.1883650,-25.7260706 +28.1879488,-25.7247842 +28.1876246,-25.7405539 +28.1875237,-25.7405613 +28.1877607,-25.7391555 +28.1878039,-25.7338751 +28.1876725,-25.7337966 +28.1881817,-25.7260573 +28.1862757,-25.7196085 +28.1860369,-25.7197193 +28.2003224,-25.7522071 +28.2004078,-25.7520663 +28.0759683,-25.9973293 +28.0758478,-25.9972046 +28.0758350,-25.9972775 +28.0972626,-25.9301046 +28.1203823,-25.9702734 +28.0767216,-25.9895928 +28.0767176,-25.9896953 +28.0768530,-25.9896892 +28.0768557,-25.9895916 +28.1005020,-25.8863147 +28.1006777,-25.8863207 +28.1054306,-25.8863207 +28.1056854,-25.8863268 +28.1056619,-25.8864931 +28.1005061,-25.8861941 +27.9399562,-26.0164676 +27.9400068,-26.0165754 +28.2444227,-25.6550746 +28.2444250,-25.6546566 +28.2581044,-26.0331055 +28.2583757,-26.0331211 +28.2580991,-26.0332739 +28.2578034,-26.0401100 +28.2577813,-26.0402994 +28.2576097,-26.0404257 +28.1787329,-25.8530185 +28.2160114,-26.0177013 +28.2159905,-26.0174970 +28.2226094,-26.0012487 +27.9868817,-26.0030880 +27.9869454,-26.0028539 +27.9869095,-26.0029822 +27.9869603,-26.0030412 +27.9870976,-26.0030332 +28.0156950,-26.0428243 +28.0211023,-26.0512259 +28.1912762,-25.9242361 +28.1909796,-25.9239747 +27.9015289,-26.0607604 +28.0809455,-26.0301883 +28.0607933,-26.0305070 +28.0609344,-26.0305795 +28.0607745,-26.0305801 +28.0609542,-26.0305130 +28.0610508,-26.0306634 +28.0611567,-26.0303769 +28.0625756,-26.0305339 +28.0626568,-26.0308667 +28.1423878,-25.9484153 +28.1422593,-25.9484441 +28.1422911,-25.9483452 +28.1142056,-26.0097976 +28.1142648,-26.0097145 +28.1295940,-26.0251783 +28.1226158,-26.0062937 +28.1226658,-26.0061842 +28.1179795,-25.9802165 +28.1178429,-25.9801818 +28.0898671,-25.5527611 +28.0898812,-25.5526277 +28.0899662,-25.5526525 +28.0606146,-26.0306643 +28.0607202,-26.0304166 +28.0083075,-26.0534452 +28.2286271,-26.0693036 +28.2284313,-26.0692675 +28.0907515,-26.0275641 +28.0905953,-26.0276064 +28.0710299,-25.9830788 +28.0583720,-25.9861567 +28.0587693,-25.9864831 +28.0581253,-25.9862161 +28.0116586,-26.0081323 +28.0122371,-26.0083843 +28.0123566,-26.0081678 +28.0112050,-26.0123008 +28.0112264,-26.0122101 +28.0139490,-26.0159774 +28.0061342,-26.0169394 +28.0060431,-26.0168295 +27.9851530,-26.0007327 +27.9868196,-26.0032108 +28.0340409,-26.0172084 +28.0341799,-26.0172670 +28.0481399,-26.0362237 +28.4198465,-25.6981766 +28.1120355,-25.8977968 +28.1121255,-25.8977087 +28.2732135,-25.7860681 +28.2733100,-25.7862064 +28.0807667,-26.0644299 +28.0807840,-26.0642915 +28.1855006,-25.8424229 +27.9439709,-26.0587693 +27.9440158,-26.0586825 +28.0806309,-26.0379638 +28.0807449,-26.0378711 +27.9683930,-26.0685858 +27.9685010,-26.0685971 +27.9595375,-26.0650399 +28.2328168,-25.9757132 +28.1896766,-25.8642195 +28.1896120,-25.8643950 +28.0335835,-26.0297328 +28.0367167,-26.0331007 +28.0364423,-26.0329170 +28.0308423,-26.0282679 +28.2981715,-25.8084919 +28.2483485,-25.6788685 +28.2479854,-25.6790896 +28.2480063,-25.6788540 +28.2481286,-25.6788602 +28.2481032,-25.6790946 +28.2379761,-25.6792922 +28.2374538,-25.6791834 +28.2116256,-25.6796787 +28.1934243,-25.6832307 +28.1932039,-25.6833191 +28.1913365,-25.6834418 +28.1913425,-25.6833215 +28.2713848,-25.6826374 +28.2713151,-25.6823850 +28.1082807,-25.6710638 +28.1082714,-25.6709798 +28.1081748,-25.6711293 +28.1081401,-25.6709015 +28.1854390,-25.7052327 +28.1239548,-26.0112314 +28.1277899,-26.0146250 +28.1275022,-26.0145788 +28.1276189,-26.0144747 +28.2281323,-26.0012438 +28.1044300,-26.0145684 +28.1045263,-26.0146149 +28.1044801,-26.0144729 +28.1045774,-26.0145240 +28.2216410,-25.7667706 +28.2215480,-25.7668269 +28.2217707,-25.7667104 +28.2217265,-25.7666133 +27.9395702,-26.0732035 +28.1840032,-25.6851143 +28.1842529,-25.6851087 +28.1866503,-25.6880987 +28.1866837,-25.6880622 +28.1898308,-25.7390936 +28.1080846,-26.0442873 +28.1081678,-26.0443536 +28.1080732,-26.0444391 +28.1079914,-26.0443831 +28.2242498,-25.8002951 +27.9701769,-26.0579820 +28.3134420,-25.8260791 +28.1785774,-25.6779290 +28.1738619,-25.6774915 +28.1723441,-25.6773779 +28.1707432,-25.6772689 +28.1566256,-25.6693795 +28.1564995,-25.6692411 +28.1401686,-25.7588599 +28.0308527,-26.0281696 +28.1013288,-25.6627792 +28.1060170,-25.9756962 +28.1226852,-25.9594139 +28.0784908,-25.9752229 +28.2576992,-26.0399648 +28.2582847,-26.0283794 +28.1047026,-26.0121477 +28.1047507,-26.0122406 +28.1046345,-26.0122853 +28.1045592,-26.0122074 +28.1403111,-25.9563145 +28.2585352,-26.0283455 +28.1822088,-25.6572427 +28.2068030,-25.7586629 +28.1851110,-25.7154605 +28.1873618,-25.7008068 +28.1876121,-25.7009343 +28.1874405,-25.7009149 +28.1876336,-25.7007397 +28.1874633,-25.7007167 +28.1877047,-25.7008460 +28.1991899,-25.6989343 +28.1993229,-25.6990184 +28.1992825,-25.6988135 +28.1994552,-25.6988995 +28.1995433,-25.7010539 +28.1996297,-25.7009379 +28.1997743,-25.7010198 +28.1996633,-25.7011361 +28.2004480,-25.7053410 +28.2004989,-25.7052555 +28.2004103,-25.7051377 +28.2002749,-25.7052833 +28.1871528,-25.7053957 +28.1868370,-25.7053649 +28.1870583,-25.7055032 +28.1868973,-25.7054899 +28.1870851,-25.7052906 +28.1869242,-25.7052809 +28.2141395,-25.7711578 +28.2141074,-25.7713117 +28.2104083,-25.7712141 +28.2104330,-25.7713961 +28.2068608,-25.7585929 +28.1962130,-25.7572092 +28.1961119,-25.7572743 +28.1959951,-25.7572241 +28.1959239,-25.7571000 +28.1999800,-25.7580541 +28.2002651,-25.7581848 +28.2002748,-25.7581035 +28.2068094,-25.7589688 +28.1861247,-25.7127792 +28.1860660,-25.7127742 +28.1863980,-25.7099647 +28.1864586,-25.7099702 +28.1868012,-25.7077055 +28.1866512,-25.7076943 +28.1869610,-25.7053764 +28.1870150,-25.7053821 +28.1875001,-25.7008235 +28.1875592,-25.7008306 +28.1862563,-25.6963046 +28.1841419,-25.6851140 +28.1840932,-25.6851163 +28.1861206,-25.6965909 +28.1841481,-25.6852106 +28.1842055,-25.6852082 +28.1840636,-25.6852182 +28.1843010,-25.6852043 +28.1653053,-25.6768970 +28.1651768,-25.6767934 +28.1650521,-25.6767880 +28.1649696,-25.6769331 +28.1649716,-25.6768406 +28.1706646,-25.6773422 +28.1706740,-25.6772624 +28.1708296,-25.6772769 +28.1708242,-25.6773591 +28.1249598,-25.6747502 +28.1249906,-25.6750916 +28.1250483,-25.6748910 +28.1248337,-25.6748390 +28.1247693,-25.6750396 +28.1338151,-25.6772225 +28.1338071,-25.6774452 +28.1350831,-25.7227311 +28.1352101,-25.7227346 +28.1864423,-25.7566895 +28.1865619,-25.7568779 +28.1881110,-25.7449839 +28.1878294,-25.7450029 +28.1879729,-25.7450731 +28.1867025,-25.7450786 +28.1821927,-25.6573080 +28.1819359,-25.6570378 +28.1820989,-25.6569466 +28.1882328,-25.7478236 +28.1881306,-25.7478312 +28.1872460,-25.7392240 +28.1873101,-25.7393209 +28.1875112,-25.7393152 +28.1874536,-25.7393179 +28.1873651,-25.7393214 +28.1876326,-25.7406330 +28.1875898,-25.7406370 +28.1875304,-25.7406427 +28.1876978,-25.7405489 +28.1874337,-25.7405679 +28.1876184,-25.7404917 +28.1875747,-25.7404953 +28.1875167,-25.7405001 +28.1875792,-25.7420331 +28.1878374,-25.7420145 +28.1876395,-25.7419763 +28.1877823,-25.7419648 +28.1877925,-25.7420708 +28.1876479,-25.7420811 +28.1877035,-25.7420771 +28.1877375,-25.7419684 +28.1877476,-25.7420740 +28.1876951,-25.7419718 +28.1879448,-25.7434900 +28.1877201,-25.7435057 +28.1878974,-25.7434187 +28.1878590,-25.7434217 +28.1877930,-25.7434268 +28.1877578,-25.7434295 +28.1734072,-25.7429717 +28.1721751,-25.7443537 +28.1654993,-25.6656532 +28.1655751,-25.6655728 +28.1655134,-25.6654725 +28.1654175,-25.6655619 +28.1717375,-25.6661349 +28.1717643,-25.6658786 +28.1716664,-25.6660019 +28.1718381,-25.6660140 +28.1554380,-25.6659153 +28.1548403,-25.6648445 +28.1549549,-25.6648856 +28.1563550,-25.6648768 +28.1563544,-25.6649202 +28.1564797,-25.6650059 +28.1565872,-25.6649114 +28.1564938,-25.6648481 +28.1567164,-25.6692481 +28.1566662,-25.6693000 +28.1565487,-25.6692753 +28.1565824,-25.6693148 +28.1433793,-25.6775507 +28.1433601,-25.6772050 +28.1434429,-25.6774939 +28.1432982,-25.6775010 +28.1432843,-25.6772690 +28.1434328,-25.6772664 +28.1436739,-25.6550663 +28.1434771,-25.6551283 +28.1438453,-25.6552052 +28.1436465,-25.6552584 +28.1882476,-25.7480168 +28.1882154,-25.7480186 +28.1881471,-25.7480234 +28.1881266,-25.7480229 +28.1880480,-25.7479438 +28.1882900,-25.7479276 +28.1884990,-25.7508495 +28.1884943,-25.7506296 +28.1882412,-25.7479309 +28.1884336,-25.7509624 +28.1883464,-25.7506409 +28.1881145,-25.7479397 +28.1870623,-25.7480005 +28.1848889,-25.7393920 +28.1849790,-25.7394441 +28.1081329,-25.6669393 +28.1080625,-25.6668105 +28.1078900,-25.6668239 +28.1078206,-25.6669543 +28.1079047,-25.6670680 +28.1080816,-25.6670547 +28.1081256,-25.6696124 +28.1082794,-25.6695702 +28.1083896,-25.6694302 +28.1082470,-25.6692791 +28.1080243,-25.6695255 +28.1084393,-25.6711168 +28.1082873,-25.6711240 +28.1084185,-25.6709144 +28.1082648,-25.6709277 +28.1082100,-25.6710640 +28.1082041,-25.6709822 +28.1084917,-25.6709674 +28.1084991,-25.6710538 +28.1079664,-25.6646897 +28.1078044,-25.6646197 +28.1079559,-25.6643991 +28.1078007,-25.6643325 +28.1076778,-25.6644325 +28.1080779,-25.6646299 +28.1014240,-25.6628868 +28.1014401,-25.6626572 +28.1016292,-25.6628068 +28.1334241,-25.7501053 +28.1023394,-25.6512696 +28.1021756,-25.6511558 +28.1023541,-25.6510374 +28.1024420,-25.6511753 +28.1030403,-25.6428295 +28.1030335,-25.6428964 +28.1029173,-25.6429385 +28.1028194,-25.6429379 +28.1027796,-25.6427940 +28.1028407,-25.6426635 +28.1884358,-25.7509858 +28.1885509,-25.7508453 +28.1882802,-25.7508622 +28.1747474,-25.7531128 +28.1748951,-25.7529749 +28.1749342,-25.7528318 +28.1957509,-25.7504502 +28.1957183,-25.7500044 +28.1956414,-25.7503828 +28.1956270,-25.7501020 +28.1959216,-25.7500809 +28.1959471,-25.7503649 +28.1931737,-25.7503270 +28.1931845,-25.7504328 +28.1931943,-25.7506427 +28.1933984,-25.7504478 +28.1934044,-25.7506435 +28.1933035,-25.7503590 +28.1933321,-25.7507327 +28.1995467,-25.7488171 +28.1952283,-25.7400634 +28.2003573,-25.7472552 +28.1935785,-25.7430977 +28.1899484,-25.7390901 +28.1945602,-25.6791266 +28.1946085,-25.6788595 +28.1927306,-25.6786672 +28.1431002,-25.7542768 +28.1432273,-25.7544144 +28.1746941,-25.7531034 +28.0899881,-25.5527892 +28.0897477,-25.5527287 +28.1478402,-25.7554811 +28.1478607,-25.7556822 +28.1479840,-25.7555883 +28.1479942,-25.7557222 +28.1917347,-25.7491530 +28.1966848,-25.7488121 +28.1574641,-25.7485602 +28.1571770,-25.7485797 +28.1761651,-25.7472614 +28.1943952,-25.6789608 +28.1944098,-25.6788934 +28.2045315,-25.7303369 +28.2418992,-25.7427750 +28.2039431,-25.7466896 +28.2041137,-25.7468172 +28.2039662,-25.7469317 +28.2038250,-25.7468366 +28.2002165,-25.7580112 +28.1985995,-25.7622129 +28.1987816,-25.7622187 +28.1988682,-25.7622994 +28.2041096,-25.7502462 +28.2395275,-25.7557036 +28.2394070,-25.7556664 +28.2394597,-25.7558967 +28.2393360,-25.7558580 +28.2396820,-25.7459519 +28.2397878,-25.7458552 +28.2396665,-25.7457729 +28.2395592,-25.7458691 +28.2009904,-25.7485950 +28.2012283,-25.7485094 +28.2012355,-25.7484090 +28.2009001,-25.7485326 +28.2009030,-25.7484312 +28.1997860,-25.7484619 +28.2060620,-25.7467981 +28.2061468,-25.7466710 +28.2060441,-25.7465834 +28.2059141,-25.7466874 +28.2121748,-25.7571054 +28.2137607,-25.7572739 +28.2121822,-25.7570658 +28.2085693,-25.7559898 +28.2214819,-25.7559145 +28.2137715,-25.7572000 +28.2121872,-25.7570226 +28.2071984,-25.7549168 +28.2057140,-25.7542756 +28.2042403,-25.7536394 +28.2028051,-25.7529919 +28.2003952,-25.7520871 +28.2327658,-25.7506640 +28.2233796,-25.7558173 +28.2233958,-25.7556958 +28.2249430,-25.7560779 +28.2003360,-25.7521847 +28.2219231,-25.7558765 +28.2418082,-25.7456773 +28.2087074,-25.7559005 +28.2086598,-25.7559292 +28.2121909,-25.7569867 +28.2137734,-25.7572483 +28.2137590,-25.7572181 +28.2297268,-25.7435425 +28.3325474,-25.7286161 +28.3324823,-25.7221741 +28.2350402,-25.7506030 +28.2351714,-25.7505006 +28.2352744,-25.7505867 +28.2351821,-25.7506909 +28.2274956,-25.7496284 +28.2275813,-25.7495589 +28.2277441,-25.7496071 +28.2276807,-25.7497163 +28.2275115,-25.7497310 +28.2067714,-25.7559316 +28.2066299,-25.7560222 +28.2066163,-25.7558655 +28.2351010,-25.7506897 +28.3223556,-25.7647090 +28.3225876,-25.7647173 +28.3224830,-25.7643998 +28.3226842,-25.7644105 +28.3232890,-25.7588414 +28.3234902,-25.7588473 +28.3233346,-25.7584912 +28.3235318,-25.7584910 +28.3244212,-25.7542043 +28.3245882,-25.7542709 +28.3245449,-25.7539336 +28.3247059,-25.7539981 +28.3262267,-25.7506223 +28.3264102,-25.7506908 +28.3278586,-25.7444416 +28.3280468,-25.7444203 +28.3278049,-25.7441437 +28.3279919,-25.7441227 +28.3283680,-25.7409724 +28.3285580,-25.7410135 +28.3284675,-25.7406700 +28.3286609,-25.7407144 +28.3294131,-25.7379490 +28.3296520,-25.7380318 +28.3295919,-25.7375673 +28.3298171,-25.7376349 +28.3320826,-25.7288893 +28.3321094,-25.7284181 +28.3323428,-25.7284348 +28.3324646,-25.7225218 +28.3326765,-25.7225313 +28.3326844,-25.7221839 +28.2322152,-25.7447976 +28.2322290,-25.7449691 +28.2371114,-25.7444334 +28.2371280,-25.7446460 +28.2371682,-25.7459273 +28.2372881,-25.7459216 +28.2322494,-25.7463531 +28.2062137,-25.7488769 +28.2062192,-25.7486816 +28.1297342,-26.0253021 +28.1294306,-26.0255133 +28.1297771,-26.0251767 +28.1296992,-26.0251045 +28.1295295,-26.0251175 +28.1292247,-26.0253262 +28.1293173,-26.0255303 +28.1292222,-26.0254376 +28.1208744,-26.0255144 +28.1207769,-26.0256211 +28.1211358,-26.0255955 +28.1210101,-26.0255082 +28.1211886,-26.0256336 +28.1210911,-26.0256693 +28.1210031,-26.0257807 +28.1209033,-26.0258433 +28.1207878,-26.0257434 +28.1207054,-26.0256990 +28.1179217,-26.0231800 +28.1177816,-26.0232555 +28.1179455,-26.0230704 +28.1178071,-26.0228918 +28.1176563,-26.0228630 +28.1175115,-26.0229442 +28.1176408,-26.0232346 +28.1174991,-26.0230591 +28.1486262,-26.0427595 +28.1483444,-26.0430068 +28.1488979,-26.0429948 +28.1486133,-26.0432431 +28.1576881,-26.0506955 +28.1581822,-26.0502150 +28.1578927,-26.0502661 +28.1576528,-26.0505024 +28.1581173,-26.0504434 +28.1578682,-26.0506789 +28.3247374,-25.7542353 +28.3247951,-25.7541203 +28.3236860,-25.7586761 +28.3243377,-25.7540666 +28.3243888,-25.7539520 +28.3299830,-25.7378387 +28.3299015,-25.7380152 +28.3309041,-25.7337795 +28.3310886,-25.7338257 +28.3310039,-25.7334610 +28.3311926,-25.7335087 +28.3325353,-25.7287559 +28.3324917,-25.7254797 +28.3322717,-25.7254762 +28.3325051,-25.7251813 +28.3322905,-25.7251766 +28.1321749,-25.9881589 +28.1840046,-26.0604659 +28.1225975,-26.0061587 +28.1225393,-26.0062690 +28.1904580,-26.0689687 +28.1907738,-26.0689787 +28.1906122,-26.0688761 +28.1929352,-26.0359182 +28.1928793,-26.0358791 +28.1930921,-26.0359925 +28.1929876,-26.0358104 +28.1930818,-26.0358661 +28.2442245,-25.7598119 +28.2442188,-25.7596606 +28.2447290,-25.7597934 +28.1852899,-26.0500214 +28.2075517,-26.0694663 +28.1872399,-26.0742894 +28.1870155,-26.0743827 +28.1868038,-26.0740802 +28.1870471,-26.0740023 +28.1873795,-26.0740995 +28.3849514,-25.7082779 +28.3897067,-25.7054694 +28.3896544,-25.7054042 +28.2075289,-26.0694057 +28.2076623,-26.0692567 +28.2075671,-26.0692949 +28.2074876,-26.0693243 +28.2077210,-26.0694033 +28.2076140,-26.0694419 +28.2441404,-25.7658698 +28.2439955,-25.7659608 +28.2440482,-25.7657796 +28.2639566,-26.0317609 +28.2643512,-26.0316855 +28.2467133,-26.0702252 +28.2467750,-26.0704252 +28.2468447,-26.0702734 +28.2466315,-26.0703565 +28.2577103,-26.0400965 +28.3269076,-25.7684912 +28.3269599,-25.7683135 +28.3162239,-25.7326318 +28.3161246,-25.7325448 +28.2984155,-25.8084995 +28.2728470,-25.7791646 +28.0711520,-26.0524895 +28.0609299,-26.0763756 +28.2959562,-25.7442108 +28.2959929,-25.7442972 +28.2957838,-25.7443733 +28.2957475,-25.7442882 +28.2959593,-25.7443630 +28.2958242,-25.7441628 +28.1818975,-25.9941478 +28.1820202,-25.9941746 +28.1818112,-25.9940813 +28.3109850,-25.7656383 +28.3110203,-25.7658163 +28.3113042,-25.7655912 +28.3113351,-25.7657687 +28.2191761,-25.9971641 +28.2929284,-25.7452028 +28.2363117,-25.9972239 +28.3293081,-25.7376369 +28.3292327,-25.7378147 +28.3558080,-25.7467578 +28.3560408,-25.7468381 +28.2375254,-25.9722271 +28.3366464,-25.7172578 +28.3104771,-25.7223986 +28.3103200,-25.7223864 +28.3104465,-25.7225560 +28.2889177,-25.7788542 +28.2890131,-25.7789210 +28.2886910,-25.7791103 +28.2887865,-25.7791770 +28.2794535,-25.7668461 +28.2794905,-25.7664224 +28.2795555,-25.7652867 +28.2796676,-25.7652947 +28.2796999,-25.7649762 +28.2795948,-25.7649692 +28.2904846,-25.7835678 +28.2796428,-25.7667414 +28.2796682,-25.7665906 +28.3003923,-25.7840101 +28.3004227,-25.7836825 +28.3002408,-25.7838911 +28.2902658,-25.7836398 +28.2906807,-25.7836679 +28.2904434,-25.7839414 +28.0731027,-26.0680233 +28.0731563,-26.0681231 +28.1928918,-26.0308754 +28.1931569,-26.0309505 +28.2021723,-26.0179223 +28.2026522,-26.0170251 +28.2028181,-26.0171444 +28.1983190,-26.0222776 +28.1984749,-26.0223873 +28.2261045,-26.0003476 +28.2258846,-26.0003078 +28.2195677,-26.0063217 +28.2196621,-26.0063630 +28.2271539,-25.9952868 +28.2273699,-25.9953326 +28.2204100,-26.0047028 +28.2286855,-26.0684465 +28.2108159,-26.0036678 +28.2272589,-25.9951798 +28.2271992,-25.9954317 +28.2191943,-25.9972863 +28.2192451,-25.9972451 +28.2298628,-25.9958184 +28.2299933,-25.9957533 +28.2301041,-25.9958628 +28.2320396,-26.0004973 +28.2317168,-26.0006248 +28.2291889,-26.0011940 +28.2289372,-26.0012162 +28.2205135,-26.0046628 +28.2205984,-26.0047021 +28.2191239,-25.9971031 +28.2190592,-25.9971500 +28.2108397,-26.0035665 +28.2192364,-25.9971253 +28.2299320,-25.9959552 +28.2228986,-26.0010407 +28.2196699,-26.0061417 +28.2197600,-26.0061943 +28.1421708,-25.8990388 +28.2058756,-25.8429639 +28.2058370,-25.8428869 +28.0694085,-26.0318398 +27.9905234,-26.0254824 +27.9907937,-26.0254239 +27.9844149,-26.0270153 +27.9843862,-26.0269254 +27.9852200,-26.0008121 +27.9868307,-26.0030274 +28.0364985,-26.0330491 +28.0339336,-26.0310818 +28.0335455,-26.0298638 +28.0337124,-26.0299189 +28.0101599,-26.0324990 +28.0096355,-26.0269713 +28.0090991,-26.0268869 +28.0087931,-26.0223569 +28.0164067,-26.0232113 +28.0160491,-26.0235493 +28.0265802,-26.0129143 +28.1836494,-25.8578853 +28.0116150,-26.0083329 +28.0042416,-26.0171553 +28.0038460,-26.0080057 +28.0062908,-26.0170047 +28.0655703,-25.9843452 +28.0656950,-25.9847334 +28.0654818,-25.9847949 +27.9904363,-26.0251088 +27.9967073,-26.0435481 +27.9963706,-26.0434631 +27.9964773,-26.0435119 +27.9947581,-26.0396862 +28.0653195,-25.9844055 +28.0040377,-26.0176483 +27.9778204,-26.0592981 +27.9143225,-26.0715237 +27.9017007,-26.0603840 +28.0130473,-26.0390313 +28.0131559,-26.0385035 +28.0536181,-26.0645785 +27.9741172,-26.0537851 +27.9740621,-26.0536929 +28.0138699,-26.0265375 +28.0139160,-26.0263924 +28.0137485,-26.0264788 +28.0137980,-26.0263414 +28.2428060,-25.6790919 +28.2426670,-25.6790879 +28.2429537,-25.6789329 +28.2429633,-25.6787153 +28.2428474,-25.6785831 +28.2426925,-25.6785773 +28.2425425,-25.6787109 +28.2425265,-25.6789242 +27.9635552,-26.0341017 +27.9636412,-26.0343891 +28.2480855,-25.6792557 +28.2479686,-25.6792523 +28.2481416,-25.6787400 +28.2480281,-25.6787330 +28.2478048,-25.6790859 +28.2478183,-25.6788521 +28.2483312,-25.6791049 +28.2440586,-25.6603773 +28.2441927,-25.6602313 +28.2440737,-25.6601432 +28.2439426,-25.6602141 +28.2379198,-25.6790686 +28.2443748,-25.6546525 +28.2443385,-25.6550677 +28.2445182,-25.6548697 +28.2441662,-25.6548482 +28.2790770,-25.6841472 +28.2715280,-25.6828101 +28.2713271,-25.6827914 +28.2921384,-25.6857880 +28.2920897,-25.6855960 +28.2650455,-25.6810503 +28.2649175,-25.6810208 +28.2651206,-25.6811694 +28.2650576,-25.6813791 +28.2711848,-25.6822210 +28.2711607,-25.6823560 +28.2711199,-25.6825839 +28.2021342,-25.6779154 +28.2020402,-25.6781899 +28.2019777,-25.6779804 +28.2019482,-25.6780839 +28.2022324,-25.6780322 +28.2021993,-25.6781347 +28.2116362,-25.6796166 +28.2115837,-25.6798759 +28.2114965,-25.6796575 +28.2114765,-25.6797659 +28.2117500,-25.6797001 +28.2117370,-25.6798048 +28.2164159,-25.6803512 +28.2163525,-25.6806492 +28.2162809,-25.6804037 +28.2162667,-25.6805169 +28.2165009,-25.6804363 +28.2164842,-25.6805496 +28.2536773,-25.6790911 +28.2536606,-25.6792864 +28.2536850,-25.6788983 +28.2538199,-25.6789788 +28.2539707,-25.6789884 +28.2045564,-25.7304595 +28.2043962,-25.7304670 +28.2045097,-25.7302038 +28.2043530,-25.7302049 +28.2042692,-25.7303548 +28.2042566,-25.7302687 +28.2055350,-25.7268376 +28.2054573,-25.7269309 +28.2054287,-25.7267567 +28.2053135,-25.7268672 +28.2049891,-25.7247506 +28.2050848,-25.7246572 +28.2049471,-25.7247955 +28.2044813,-25.7205594 +28.2044561,-25.7204181 +28.2043732,-25.7205102 +28.2046063,-25.7204785 +28.2040011,-25.7183965 +28.2042081,-25.7183684 +28.2041263,-25.7184748 +28.2040985,-25.7182703 +28.2034353,-25.7142434 +28.2035887,-25.7141084 +28.2032870,-25.7141465 +28.2034096,-25.7140631 +28.2014472,-25.7073937 +28.2012223,-25.7073055 +28.2012883,-25.7071567 +28.1938444,-25.6833307 +28.1938418,-25.6832738 +28.1932099,-25.6832248 +28.1933814,-25.6834243 +28.1934684,-25.6830813 +28.2121198,-25.7344321 +28.2124856,-25.7343692 +28.2120484,-25.7343916 +28.2047042,-25.7351368 +28.2048826,-25.7353670 +28.2050039,-25.7352611 +28.2049322,-25.7351454 +28.2047284,-25.7354009 +28.2046495,-25.7352976 +28.2041258,-25.7331641 +28.2046378,-25.7331876 +28.2044218,-25.7332779 +28.2042327,-25.7332589 +28.2045343,-25.7330455 +28.2043539,-25.7330231 +28.1177285,-25.9802969 +28.1191382,-25.9761867 +28.2345640,-25.7334600 +28.2344172,-25.7334674 +28.2342833,-25.7333958 +28.2342752,-25.7333151 +28.2346370,-25.7333771 +28.2346333,-25.7332970 +28.2288833,-25.7334329 +28.2289162,-25.7339476 +28.2287794,-25.7336685 +28.2196706,-25.7340418 +28.2154414,-25.7342363 +28.2149653,-25.7342599 +27.9748996,-26.0748797 +27.9747286,-26.0749325 +28.2585971,-25.7277628 +28.2584072,-25.7277679 +28.2588754,-25.7324364 +28.2586921,-25.7324438 +28.2584774,-25.7323372 +28.2584709,-25.7322741 +28.2588676,-25.7321577 +28.2586808,-25.7321645 +28.2531843,-25.7325832 +28.2531780,-25.7325080 +28.2460490,-25.7329338 +28.2463487,-25.7330004 +28.2462089,-25.7330090 +28.2460436,-25.7328501 +28.2464233,-25.7329204 +28.2464177,-25.7328299 +28.2462377,-25.7327697 +28.2461176,-25.7327729 +28.0605049,-26.0394434 +28.0584567,-26.0373766 +28.0584363,-26.0375088 +28.0583343,-26.0372672 +28.0583585,-26.0375329 +28.0582613,-26.0375221 +28.0612023,-26.0331937 +28.0611742,-26.0333401 +28.0610065,-26.0333823 +28.0879379,-26.0218694 +28.2923419,-25.6858894 +28.0807879,-26.0382107 +28.2715509,-25.6826711 +28.2715893,-25.6824374 +28.2548476,-25.7324265 +28.0227053,-26.0577309 +28.0225517,-26.0576046 +28.0228966,-26.0569046 +28.0228117,-26.0567789 +28.0225680,-26.0572590 +28.0229379,-26.0574467 +28.2576515,-25.7164742 +28.2578642,-25.7164754 +28.2925184,-25.6857229 +28.2924763,-25.6855222 +28.2647803,-25.6813239 +28.2648370,-25.6811053 +28.2821743,-25.6846407 +28.2754716,-25.6837712 +28.2753874,-25.6837651 +28.2374529,-25.6790908 +28.2374863,-25.6795030 +28.2539290,-25.6793885 +28.2537753,-25.6793780 +28.2540402,-25.6793082 +28.2540572,-25.6791032 +27.9702030,-26.0577702 +27.9679553,-26.0689230 +27.9685139,-26.0688194 +27.9683181,-26.0684616 +27.9727605,-26.0698084 +27.9726815,-26.0698885 +27.9725642,-26.0699754 +28.2790004,-25.6840474 +28.2791114,-25.6839389 +28.2822857,-25.6845216 +28.2423674,-25.7184359 +28.1136453,-26.0019306 +28.1138275,-26.0019497 +28.1137977,-26.0020946 +28.1159583,-26.0212530 +28.1156666,-26.0210680 +28.2581433,-25.7207086 +28.2579359,-25.7207520 +28.2464567,-25.7329205 +28.2462229,-25.7330403 +28.2459713,-25.7328522 +28.0350787,-26.0740129 +28.0349761,-26.0740374 +28.0218808,-26.0601406 +28.0235273,-26.0606001 +28.0217681,-26.0600366 +28.0217449,-26.0601042 +28.0236581,-26.0605243 +28.0252332,-26.0673474 +28.0254378,-26.0673243 +28.0254181,-26.0672531 +28.0031192,-26.0214962 +28.0248470,-26.0470606 +28.1930262,-25.9846514 +28.0264426,-26.0757180 +28.0264546,-26.0756685 +28.0460968,-26.0754157 +28.0535939,-26.0646164 +28.0535491,-26.0645830 +28.2589455,-25.8618966 +28.2595018,-25.8675343 +28.2595213,-25.8674498 +28.1120363,-25.8976480 +28.1137461,-25.8963575 +28.1093879,-25.9006587 +28.1106676,-25.8991721 +28.1119503,-25.8977362 +27.9635337,-26.0342795 +28.0256970,-26.0393965 +28.0993196,-25.9543020 +28.1637081,-25.8238139 +28.1145454,-25.8763649 +28.0251031,-26.0443670 +28.0252496,-26.0443716 +28.1037075,-25.9717463 +28.1036657,-25.9716665 +28.1037666,-25.9717081 +28.1551685,-25.7160920 +28.1722591,-25.7062817 +28.1720971,-25.7062798 +28.2342974,-26.0281123 +28.1292104,-25.6351467 +28.1581292,-26.0501757 +28.1579652,-26.0503242 +28.1577216,-26.0505574 +28.1576325,-26.0506540 +28.3254858,-25.8413166 +28.3255708,-25.8412685 +28.2965219,-25.8297424 +28.1027696,-25.6428329 +28.1028234,-25.6428546 +28.1933755,-25.7813178 +28.3023272,-25.7670822 +28.1702754,-25.7789249 +28.3045357,-25.7524544 +28.3047686,-25.7538436 +28.3534059,-25.7713216 +28.2441306,-25.6602240 +28.2443026,-25.6546509 +28.2442711,-25.6550686 +28.2442851,-25.6548543 +28.1008137,-25.6717411 +28.1997345,-25.7011304 +28.1997143,-25.7010276 +28.1997018,-25.7009291 +28.1993720,-25.6988040 +28.1994096,-25.6990025 +28.1993920,-25.6989080 +28.1334129,-25.7541189 +28.1052681,-25.7152145 +28.1083354,-25.8572039 +28.1085721,-25.8571104 +28.4136479,-25.7096552 +28.2393645,-25.8389163 +28.1022522,-25.6512798 +28.1014878,-25.6629255 +28.1538963,-25.8411755 +28.3073675,-25.7178999 +28.2311246,-25.7043585 +28.2310132,-25.7042836 +28.2555364,-25.8278096 +28.2523001,-25.8356381 +28.4186026,-25.7033843 +28.4188648,-25.7033976 +28.3141287,-25.7276396 +28.3572338,-25.7665556 +28.3572000,-25.7665971 +28.2747613,-25.7476959 +28.2748155,-25.7536834 +28.2752698,-25.7564565 +28.2701365,-25.8376951 +28.2477969,-25.8607188 +28.2477721,-25.8607182 +28.2481429,-25.8608168 +28.2544146,-25.7748454 +28.3159740,-25.7660358 +28.3159969,-25.7658451 +28.2861580,-25.8365430 +28.1501670,-25.7490098 +28.2908657,-25.7676723 +28.3385756,-25.7810654 +28.3385411,-25.7809164 +28.3001720,-25.8076432 +28.1987395,-25.8395507 +28.3001839,-25.8077483 +28.2003238,-25.7051292 +28.2694479,-25.8166554 +28.2719303,-25.8194868 +28.2720791,-25.8196324 +28.2732871,-25.8207688 +28.3493995,-25.7755664 +28.3492877,-25.7754353 +28.2268076,-25.7336797 +28.2287773,-25.7336015 +28.2288920,-25.7335960 +28.2414279,-25.7752224 +28.3069901,-25.8254613 +28.3069405,-25.8253842 +28.1665405,-25.8623064 +28.1665288,-25.8623962 +28.1628715,-25.8622713 +28.2611973,-25.7111671 +28.2612182,-25.7112719 +28.1747955,-25.8609607 +28.1748492,-25.8610379 +28.3525107,-25.7863653 +28.3525761,-25.7863170 +28.3524198,-25.7862797 +28.3524938,-25.7862244 +28.3485956,-25.7820019 +28.1591465,-25.8626584 +28.2831070,-25.7675873 +28.2758256,-25.7661060 +28.2758015,-25.7660801 +28.2887120,-25.7540552 +28.2458302,-25.7284071 +28.2327308,-25.7507781 +28.2423004,-25.7184450 +28.2423027,-25.7219706 +28.2423669,-25.7219726 +28.2022697,-25.8533592 +28.2021941,-25.8534563 +28.3004922,-25.7836883 +28.3004708,-25.7839244 +28.3004614,-25.7840179 +28.2153846,-25.7229344 +28.2152462,-25.7229616 +28.3059170,-25.7859561 +28.2224834,-25.7499637 +28.3077486,-25.7872412 +28.3096976,-25.7894405 +28.3002602,-25.7838078 +28.3004104,-25.7838259 +28.3033521,-25.7846761 +28.3004842,-25.7838338 +28.3060016,-25.7858811 +28.1889948,-25.8518238 +28.2394285,-25.7429376 +28.2370075,-25.7431002 +28.2321102,-25.7434364 +28.2297418,-25.7436094 +28.2596177,-25.7628118 +28.2942155,-25.7449266 +28.2940662,-25.7448666 +28.1786879,-25.8530030 +28.1789400,-25.8513218 +28.0244330,-25.9177733 +28.2960323,-25.8044307 +28.3022485,-25.8035924 +28.2246739,-25.7736025 +28.2245245,-25.7736527 +28.2245702,-25.7737598 +28.2386668,-25.7584553 +28.2374231,-25.7626958 +28.2361363,-25.7670596 +28.2360191,-25.7669489 +28.2361591,-25.7669810 +28.2469866,-25.7635128 +28.2492958,-25.7671188 +28.1850616,-25.8546251 +28.2360616,-25.7577404 +28.1027000,-25.9012970 +28.1029390,-25.9013404 +28.1078832,-25.9024575 +28.1079604,-25.9025105 +28.1078567,-25.9024921 +28.0995005,-25.9180110 +28.1196971,-25.8725268 +28.0995114,-25.9179426 +28.0996285,-25.9179456 +28.1381214,-25.9651961 +28.1404862,-25.9562806 +28.1594318,-25.8972527 +28.1649947,-25.9102849 +28.1649519,-25.9104591 +28.2445674,-25.9906870 +28.1325612,-26.0102077 +28.1378352,-25.9282911 +28.1377902,-25.9282458 +28.1377817,-25.9283445 +28.1399822,-25.9256829 +28.2585372,-26.0284390 +28.2582912,-26.0284735 +28.1239095,-26.0112001 +28.1238422,-26.0112919 +28.0985963,-25.9233404 +28.0973411,-25.9301178 +28.2300869,-25.9959163 +28.2299451,-25.9958893 +28.2229301,-26.0011061 +28.0480382,-26.0363164 +28.0759819,-25.9972574 +28.2362258,-25.9971961 +28.0982681,-25.9491569 +28.1514661,-25.9255643 +28.1513459,-25.9254940 +28.0804971,-26.0380858 +28.0860868,-26.0415943 +28.2037885,-25.8809853 +28.2036088,-25.8810728 +28.1843412,-25.8926356 +28.1414519,-25.8824739 +28.1420981,-25.8939667 +28.1421208,-25.8990577 +28.0905485,-26.0497835 +28.0902634,-26.0497742 +28.1421550,-25.8990038 +28.1421057,-25.8990209 +28.2573731,-25.7722597 +28.2518056,-25.7708314 +27.9014953,-26.0603451 +27.9014436,-26.0604381 +27.9947256,-26.0396104 +27.9935074,-26.0399746 +27.9935593,-26.0399605 +28.1371922,-25.9113263 +28.2009585,-25.8778674 +28.0597075,-26.0486464 +28.0590391,-26.0545872 +28.0589215,-26.0545855 +28.0309571,-26.0476635 +28.1600672,-25.8923148 +28.1600840,-25.8921710 +28.0128588,-26.0324098 +28.0128367,-26.0323265 +28.0152965,-26.0320103 +27.9905985,-26.0253397 +27.9905547,-26.0252169 +28.1407278,-25.9088411 +28.0098482,-26.0327737 +27.9579974,-26.0587027 +27.9579145,-26.0587719 +28.2200287,-26.0642935 +27.9489623,-26.0626205 +27.9489680,-26.0627495 +28.1074197,-26.0185604 +28.1347942,-25.9955442 +28.1347288,-25.9954205 +28.1623684,-25.8851642 +28.2558424,-25.7777237 +28.1228024,-26.0062335 +28.1290002,-25.9948778 +28.2592474,-25.7830566 +28.1208842,-25.9909832 +28.0655656,-26.0322893 +28.1392751,-25.8731969 +28.0583677,-26.0373662 +28.2324972,-25.7710272 +28.2306386,-25.7716662 +28.0699695,-26.0394214 +28.0699810,-26.0393748 +28.0699343,-26.0393654 +28.0637303,-26.0327478 +28.0637903,-26.0327308 +28.0636938,-26.0326869 +28.2163912,-25.7717703 +28.2163144,-25.7719299 +28.2215264,-25.7667476 +28.2216030,-25.7666867 +28.2297155,-25.7654348 +28.2273481,-25.7646780 +28.2328079,-25.7662385 +28.0801964,-25.9757132 +28.0614708,-26.0655373 +28.0613056,-26.0655294 +28.0650919,-26.0750504 +28.2252342,-25.7558090 +28.2252144,-25.7559558 +28.2251976,-25.7560895 +28.2251100,-25.7559414 +28.2207599,-25.7645470 +28.2216494,-25.7666592 +28.2216872,-25.7667494 +28.1058759,-25.9755813 +28.1058167,-25.9754671 +28.2310755,-25.7566619 +28.2309980,-25.7566509 +28.2310790,-25.7566034 +28.2310073,-25.7565948 +28.1541580,-25.8922045 +28.1541809,-25.8923755 +28.1517228,-25.8680672 +28.1517961,-25.8680543 +28.1517829,-25.8679870 +28.0795361,-26.0819977 +28.2477796,-25.8608098 +28.2479102,-25.8606544 +28.2480390,-25.8606597 +28.2481395,-25.8607334 +28.2481187,-25.8608190 +28.2480006,-25.8608954 +28.2478886,-25.8608810 +28.2478854,-25.8609040 +28.2480424,-25.8606362 +28.2904540,-25.7838307 +28.2906600,-25.7838412 +28.2902485,-25.7838216 +28.2373304,-25.7474324 +28.2374364,-25.7489604 +28.3077951,-25.7872815 +28.3077290,-25.7873444 +28.2021175,-25.9574951 +28.2020728,-25.9576315 +28.1260516,-25.9801097 +28.2439005,-25.7658124 \ No newline at end of file diff --git a/api/scripts/test.py b/api/scripts/test.py new file mode 100644 index 00000000..05b00651 --- /dev/null +++ b/api/scripts/test.py @@ -0,0 +1,26 @@ +import json +# data = {} + +# # Open the JSON file in read mode +# with open("robots.json", 'r') as file: +# # Use the json.load() function to load the JSON data from the file +# data = json.load(file) + +# for d in data: +# if len(d["robots"]) >0: +# print(d["robots"]) + + +def get_robots(): + robots = [] + # Open the file in read mode + with open("robots.txt", 'r') as file: + for line in file: + lon,lat = line.strip().split(',') + robots.append([float(lon),float(lat)]) # Use strip() to remove leading/trailing whitespace + return robots + + + +with open("robots.json", "w") as json_file: + json_file.write(json.dumps(get_robots(), indent=2)) \ No newline at end of file diff --git a/api/scripts/tshwane_cords.json b/api/scripts/tshwane_cords.json new file mode 100644 index 00000000..2e65d3c8 --- /dev/null +++ b/api/scripts/tshwane_cords.json @@ -0,0 +1,1130 @@ +[ + [ + 28.2712, + -25.925 + ], + [ + 28.2384, + -25.925 + ], + [ + 28.185, + -25.9227 + ], + [ + 28.181, + -25.9034 + ], + [ + 28.1102, + -25.9195 + ], + [ + 28.1055, + -25.9449 + ], + [ + 28.0908, + -25.9249 + ], + [ + 28.0902, + -25.9274 + ], + [ + 28.0805, + -25.9243 + ], + [ + 28.0772, + -25.9252 + ], + [ + 28.0751, + -25.9209 + ], + [ + 28.0457, + -25.9292 + ], + [ + 28.0392, + -25.9315 + ], + [ + 28.0299, + -25.9264 + ], + [ + 27.9879, + -25.9111 + ], + [ + 27.984, + -25.934 + ], + [ + 27.9669, + -25.9028 + ], + [ + 27.9629, + -25.9109 + ], + [ + 27.9623, + -25.9105 + ], + [ + 27.9502, + -25.9072 + ], + [ + 27.9493, + -25.9062 + ], + [ + 27.9467, + -25.9079 + ], + [ + 27.9467, + -25.908 + ], + [ + 27.9225, + -25.9149 + ], + [ + 27.9011, + -25.9176 + ], + [ + 27.901, + -25.9079 + ], + [ + 27.8938, + -25.9053 + ], + [ + 27.8904, + -25.9057 + ], + [ + 27.8995, + -25.8839 + ], + [ + 27.8982, + -25.8828 + ], + [ + 27.9005, + -25.8597 + ], + [ + 27.9395, + -25.8408 + ], + [ + 27.9258, + -25.8368 + ], + [ + 27.9401, + -25.8241 + ], + [ + 27.9602, + -25.8197 + ], + [ + 27.9572, + -25.816 + ], + [ + 27.9636, + -25.8005 + ], + [ + 27.9622, + -25.7991 + ], + [ + 27.9632, + -25.7919 + ], + [ + 27.9546, + -25.7871 + ], + [ + 27.9493, + -25.7869 + ], + [ + 27.9527, + -25.7598 + ], + [ + 27.9558, + -25.7596 + ], + [ + 27.9732, + -25.7566 + ], + [ + 27.9795, + -25.7568 + ], + [ + 27.9482, + -25.7514 + ], + [ + 27.9575, + -25.6952 + ], + [ + 27.9538, + -25.6937 + ], + [ + 27.9519, + -25.6729 + ], + [ + 27.9523, + -25.6713 + ], + [ + 27.9573, + -25.6535 + ], + [ + 27.9571, + -25.6477 + ], + [ + 27.9652, + -25.6437 + ], + [ + 27.9649, + -25.6454 + ], + [ + 27.9806, + -25.6348 + ], + [ + 27.9722, + -25.6328 + ], + [ + 27.9576, + -25.5979 + ], + [ + 27.9815, + -25.5926 + ], + [ + 28.0306, + -25.5427 + ], + [ + 28.0495, + -25.5584 + ], + [ + 28.0524, + -25.5596 + ], + [ + 28.0244, + -25.5358 + ], + [ + 27.9924, + -25.5307 + ], + [ + 28.0075, + -25.518 + ], + [ + 28.0119, + -25.4841 + ], + [ + 28.0359, + -25.4805 + ], + [ + 27.9917, + -25.4706 + ], + [ + 27.9697, + -25.4245 + ], + [ + 27.9604, + -25.4391 + ], + [ + 27.9582, + -25.4273 + ], + [ + 27.9456, + -25.4263 + ], + [ + 27.9708, + -25.4067 + ], + [ + 28.0004, + -25.3629 + ], + [ + 28.0447, + -25.3594 + ], + [ + 28.0555, + -25.4017 + ], + [ + 28.0834, + -25.4 + ], + [ + 28.108, + -25.3848 + ], + [ + 28.1107, + -25.367 + ], + [ + 28.1767, + -25.3789 + ], + [ + 28.1768, + -25.3659 + ], + [ + 28.2015, + -25.3286 + ], + [ + 28.2283, + -25.3237 + ], + [ + 28.2826, + -25.3542 + ], + [ + 28.2834, + -25.3426 + ], + [ + 28.2895, + -25.3381 + ], + [ + 28.2896, + -25.3383 + ], + [ + 28.2981, + -25.3412 + ], + [ + 28.2982, + -25.3393 + ], + [ + 28.3792, + -25.3104 + ], + [ + 28.3826, + -25.2921 + ], + [ + 28.4337, + -25.3211 + ], + [ + 28.4393, + -25.3224 + ], + [ + 28.5036, + -25.3102 + ], + [ + 28.5012, + -25.3088 + ], + [ + 28.5133, + -25.2654 + ], + [ + 28.5643, + -25.2561 + ], + [ + 28.5637, + -25.2521 + ], + [ + 28.5948, + -25.2494 + ], + [ + 28.6029, + -25.2494 + ], + [ + 28.6047, + -25.2542 + ], + [ + 28.6044, + -25.2535 + ], + [ + 28.6313, + -25.2521 + ], + [ + 28.6326, + -25.2802 + ], + [ + 28.6593, + -25.28 + ], + [ + 28.6643, + -25.2348 + ], + [ + 28.6712, + -25.2518 + ], + [ + 28.6691, + -25.2477 + ], + [ + 28.6757, + -25.2414 + ], + [ + 28.6756, + -25.2347 + ], + [ + 28.6799, + -25.227 + ], + [ + 28.6768, + -25.2202 + ], + [ + 28.6791, + -25.2171 + ], + [ + 28.6786, + -25.212 + ], + [ + 28.6553, + -25.2108 + ], + [ + 28.6381, + -25.2135 + ], + [ + 28.6381, + -25.1866 + ], + [ + 28.6159, + -25.1839 + ], + [ + 28.6683, + -25.1516 + ], + [ + 28.7101, + -25.1385 + ], + [ + 28.7446, + -25.1161 + ], + [ + 28.7592, + -25.1096 + ], + [ + 28.7574, + -25.1497 + ], + [ + 28.7765, + -25.1499 + ], + [ + 28.7754, + -25.1837 + ], + [ + 28.7846, + -25.1838 + ], + [ + 28.7791, + -25.2287 + ], + [ + 28.7638, + -25.2308 + ], + [ + 28.7324, + -25.2211 + ], + [ + 28.7396, + -25.2692 + ], + [ + 28.7329, + -25.2885 + ], + [ + 28.6956, + -25.2827 + ], + [ + 28.6792, + -25.2945 + ], + [ + 28.6413, + -25.303 + ], + [ + 28.6332, + -25.3276 + ], + [ + 28.6226, + -25.3315 + ], + [ + 28.6389, + -25.3337 + ], + [ + 28.6198, + -25.394 + ], + [ + 28.6253, + -25.4114 + ], + [ + 28.6295, + -25.4476 + ], + [ + 28.6208, + -25.4594 + ], + [ + 28.6154, + -25.4632 + ], + [ + 28.621, + -25.4679 + ], + [ + 28.6321, + -25.4707 + ], + [ + 28.634, + -25.4884 + ], + [ + 28.6257, + -25.5199 + ], + [ + 28.6267, + -25.5231 + ], + [ + 28.635, + -25.5312 + ], + [ + 28.6455, + -25.5592 + ], + [ + 28.6473, + -25.5858 + ], + [ + 28.6425, + -25.5856 + ], + [ + 28.6747, + -25.5899 + ], + [ + 28.6727, + -25.6588 + ], + [ + 28.6838, + -25.665 + ], + [ + 28.7088, + -25.6754 + ], + [ + 28.7221, + -25.6828 + ], + [ + 28.7239, + -25.6442 + ], + [ + 28.7382, + -25.6318 + ], + [ + 28.7663, + -25.6339 + ], + [ + 28.759, + -25.647 + ], + [ + 28.7528, + -25.678 + ], + [ + 28.7574, + -25.6939 + ], + [ + 28.7572, + -25.6953 + ], + [ + 28.7649, + -25.7059 + ], + [ + 28.7653, + -25.7036 + ], + [ + 28.7681, + -25.7006 + ], + [ + 28.7693, + -25.7009 + ], + [ + 28.7793, + -25.6988 + ], + [ + 28.7927, + -25.7019 + ], + [ + 28.8082, + -25.7024 + ], + [ + 28.8193, + -25.689 + ], + [ + 28.847, + -25.6951 + ], + [ + 28.8229, + -25.6824 + ], + [ + 28.81, + -25.6589 + ], + [ + 28.8115, + -25.6591 + ], + [ + 28.836, + -25.643 + ], + [ + 28.8355, + -25.6374 + ], + [ + 28.8416, + -25.6456 + ], + [ + 28.8457, + -25.6545 + ], + [ + 28.8693, + -25.6523 + ], + [ + 28.872, + -25.6581 + ], + [ + 28.8629, + -25.6416 + ], + [ + 28.8584, + -25.6355 + ], + [ + 28.8431, + -25.6348 + ], + [ + 28.8085, + -25.5664 + ], + [ + 28.7971, + -25.5732 + ], + [ + 28.8219, + -25.542 + ], + [ + 28.8518, + -25.5224 + ], + [ + 28.8699, + -25.5018 + ], + [ + 28.8741, + -25.5247 + ], + [ + 28.8582, + -25.5271 + ], + [ + 28.9101, + -25.5691 + ], + [ + 28.9152, + -25.5245 + ], + [ + 28.9465, + -25.558 + ], + [ + 29.0078, + -25.5998 + ], + [ + 28.9869, + -25.5742 + ], + [ + 28.9881, + -25.5402 + ], + [ + 28.9932, + -25.5395 + ], + [ + 29.0067, + -25.5425 + ], + [ + 29.0106, + -25.5376 + ], + [ + 29.019, + -25.5332 + ], + [ + 29.0137, + -25.5278 + ], + [ + 29.036, + -25.5132 + ], + [ + 29.0422, + -25.5213 + ], + [ + 29.0474, + -25.521 + ], + [ + 29.0482, + -25.517 + ], + [ + 29.0587, + -25.5202 + ], + [ + 29.0787, + -25.5272 + ], + [ + 29.0774, + -25.4996 + ], + [ + 29.08, + -25.4962 + ], + [ + 29.0914, + -25.4946 + ], + [ + 29.0984, + -25.5306 + ], + [ + 29.0869, + -25.5377 + ], + [ + 29.0684, + -25.5486 + ], + [ + 29.0343, + -25.5523 + ], + [ + 29.042, + -25.5634 + ], + [ + 29.0456, + -25.5733 + ], + [ + 29.04, + -25.5808 + ], + [ + 29.0642, + -25.6175 + ], + [ + 29.0661, + -25.6207 + ], + [ + 29.0565, + -25.6305 + ], + [ + 29.0646, + -25.6326 + ], + [ + 28.9688, + -25.6424 + ], + [ + 28.9507, + -25.6733 + ], + [ + 28.9813, + -25.7283 + ], + [ + 28.9576, + -25.7425 + ], + [ + 28.9382, + -25.7746 + ], + [ + 28.9433, + -25.8233 + ], + [ + 28.9504, + -25.8244 + ], + [ + 28.9382, + -25.8374 + ], + [ + 28.8868, + -25.8886 + ], + [ + 28.8839, + -25.8714 + ], + [ + 28.889, + -25.8783 + ], + [ + 28.8795, + -25.8803 + ], + [ + 28.8825, + -25.9252 + ], + [ + 28.8833, + -25.9698 + ], + [ + 28.8852, + -25.9714 + ], + [ + 28.885, + -25.9714 + ], + [ + 28.8673, + -25.9744 + ], + [ + 28.8648, + -26.007 + ], + [ + 28.8329, + -26.0013 + ], + [ + 28.7939, + -26.0048 + ], + [ + 28.7739, + -26.0046 + ], + [ + 28.7624, + -26.0137 + ], + [ + 28.7579, + -25.9831 + ], + [ + 28.7575, + -25.9837 + ], + [ + 28.7108, + -25.9906 + ], + [ + 28.6527, + -25.9906 + ], + [ + 28.6323, + -25.9743 + ], + [ + 28.591, + -25.9708 + ], + [ + 28.5867, + -26.0025 + ], + [ + 28.5789, + -26.016 + ], + [ + 28.5386, + -26.0596 + ], + [ + 28.5308, + -26.0478 + ], + [ + 28.5158, + -26.0616 + ], + [ + 28.4687, + -26.0585 + ], + [ + 28.4405, + -26.0781 + ], + [ + 28.4422, + -26.0477 + ], + [ + 28.4491, + -26.0422 + ], + [ + 28.4547, + -26.0427 + ], + [ + 28.4601, + -26.0308 + ], + [ + 28.4643, + -26.0237 + ], + [ + 28.4644, + -26.0256 + ], + [ + 28.4457, + -26.0114 + ], + [ + 28.4482, + -26.0181 + ], + [ + 28.4511, + -25.9999 + ], + [ + 28.4444, + -25.9955 + ], + [ + 28.4517, + -25.9911 + ], + [ + 28.4627, + -25.9864 + ], + [ + 28.468, + -25.9744 + ], + [ + 28.457, + -25.9633 + ], + [ + 28.446, + -25.9567 + ], + [ + 28.4177, + -25.9649 + ], + [ + 28.4167, + -25.9505 + ], + [ + 28.4195, + -25.9484 + ], + [ + 28.4176, + -25.9487 + ], + [ + 28.4072, + -25.9394 + ], + [ + 28.3524, + -25.9241 + ], + [ + 28.3381, + -25.9546 + ], + [ + 28.3195, + -25.95 + ], + [ + 28.2694, + -25.9137 + ], + [ + 28.2712, + -25.9158 + ], + [ + 28.2712, + -25.925 + ] +] \ No newline at end of file diff --git a/api/src/ai.rs b/api/src/ai.rs index bfcf37e5..eaba8701 100644 --- a/api/src/ai.rs +++ b/api/src/ai.rs @@ -9,7 +9,7 @@ use utoipa::ToSchema; #[utoipa::path(post, tag = "AI", path = "/api/ai/info", request_body = AiInfoRequest)] #[post("/ai/info", format = "application/json", data = "<request>")] pub async fn get_ai_info<'a>(request: Json<AiInfoRequest>) -> ApiResponse<'a, AiInfoResponse> { - let mapbox_api_key = if let Ok(key) = env::var("MAPBOX_API_KEY") { + let mapbox_api_key = if let Ok(key) = dbg!(env::var("MAPBOX_API_KEY")) { key } else { log::error!("We couldn't get the mapbox api key. The environment variable was not set!"); @@ -21,11 +21,12 @@ pub async fn get_ai_info<'a>(request: Json<AiInfoRequest>) -> ApiResponse<'a, Ai match Command::new("python3") .args([ - "src/avoid_cords.py", + "route.py", serde_json::to_string(&request.into_inner()) .unwrap() .as_ref(), ]) + .current_dir("src") .stdout(Stdio::piped()) .env("MAPBOX_API_KEY", mapbox_api_key) .output() @@ -56,19 +57,21 @@ pub async fn get_ai_info<'a>(request: Json<AiInfoRequest>) -> ApiResponse<'a, Ai #[derive(Clone, Deserialize, Serialize, ToSchema)] #[schema(example = json! { AiInfoRequest { - polygon: vec![ - [0.0, 0.0], - [90.0, -90.0], - [-90.0, 90.0], - ] + origin: Box::new([28.3, -27.73]), + destination: Box::new([28.2651, -25.7597]) } })] pub struct AiInfoRequest { - pub polygon: Vec<[f64; 2]>, + pub origin: Box<[f64; 2]>, + pub destination: Box<[f64; 2]>, } #[derive(Clone, Serialize, Deserialize, ToSchema)] #[serde(rename_all = "camelCase")] pub struct AiInfoResponse { - pub coords_to_avoid: Vec<[f64; 2]>, + pub duration: f32, + pub distance: f32, + pub traffic_lights_avoided: Vec<[f32; 2]>, + pub instructions: Vec<String>, + pub coordinates: Vec<[f32; 2]>, } diff --git a/api/src/auth.rs b/api/src/auth.rs index c8be0392..4c001243 100644 --- a/api/src/auth.rs +++ b/api/src/auth.rs @@ -51,6 +51,7 @@ pub async fn authenticate( let mut doc = Document::new(); doc.insert("email", email); + #[allow(deprecated)] match User::query(doc, &db.database(DB_NAME)).await { Ok(mut result) => match result.try_next().await { Ok(user) => { @@ -111,6 +112,7 @@ pub async fn authenticate( let db = state.inner().as_ref().unwrap(); if let Some(cookie) = cookies.get("cookie").map(Cookie::value) { log::info!("User trying to authenticate with cookie ({cookie})"); + #[allow(deprecated)] match AuthCookie::query( bson::doc! { "cookie": cookie @@ -281,12 +283,23 @@ impl<'r> FromRequest<'r> for JWTAuthToken { if let Some(client) = request.rocket().state::<Option<mongodb::Client>>() { let mut doc = Document::new(); doc.insert("email", email.unwrap()); - let user = - User::query(doc, &client.to_owned().unwrap().database(DB_NAME)) - .await - .unwrap() - .deserialize_current() - .unwrap(); + let user = if let Some(user) = User::find_one( + doc, + &client + .as_ref() + .expect("Couldn't connect to database") + .database(DB_NAME), + None, + ) + .await + { + user + } else { + return Outcome::Failure(( + Status::Unauthorized, + ApiError::AuthError("Couldn't find the requested user"), + )); + }; Outcome::Success(JWTAuthToken { token: auth_header[1].to_string(), diff --git a/api/src/avoid_cords.py b/api/src/avoid_cords.py deleted file mode 100644 index 8327832b..00000000 --- a/api/src/avoid_cords.py +++ /dev/null @@ -1,116 +0,0 @@ -import requests -import math -import json -import sys -import os - -access_token = os.environ.get("MAPBOX_API_KEY") -if access_token is None: - print("No access token") - exit(-1) - - -def find_polygon_center(polygon): - # Subtract 1 to account for the repeated first point - num_points = len(polygon) - 1 - sum_x = 0 - sum_y = 0 - - for i in range(num_points): - sum_x += polygon[i][0] - sum_y += polygon[i][1] - - center_x = sum_x / num_points - center_y = sum_y / num_points - - return [center_x, center_y] - -# polygon = [[28.278153, -25.781812], [28.277781, -25.78166], [28.276252, -25.781039], [28.274805, -25.780169], [28.271878, -25.778368], [28.271868, -25.778362], [28.271357, -25.780567], [28.272005, -25.780674], [28.272028, -25.780909], [28.272131, -25.781988], [28.273088, -25.781879], [28.273176, -25.781889], [28.273249, -25.78257], [28.273317, -25.783255], [28.273336, -25.783449], [28.273329, -25.783493], [28.273279, -25.783745], [28.273191, -25.783733], [28.272402, -25.783829], [28.271852, -25.783882], [28.271883, -25.78414], [28.27194, -25.784489], [28.272039, -25.784601], [28.272161, -25.784687], [28.272318, -25.784763], [28.272524, -25.784863], [28.272837, -25.785091], [28.273073, -25.785357], [28.2732, -25.785413], [28.273372, -25.785439], [28.273481, -25.78545], [28.273512, -25.785341], [28.273574, -25.785166], [28.273687, -25.785057], [28.274178, -25.785052], [28.275, -25.784969], [28.275408, -25.784928], [28.275547, -25.784918], [28.275645, -25.784943], [28.275723, -25.784995], [28.275785, -25.785114], [28.275826, -25.785512], [28.275909, -25.785775], [28.276022, -25.785927], [28.276106, -25.785997], [28.276567, -25.786251], [28.276583, -25.786213], [28.276625, -25.786112], [28.276952, -25.785404], [28.27755, -25.785558], [28.278122, -25.785708], [28.278668, -25.785849], [28.27914, -25.785995], [28.279154, -25.785954], [28.279211, -25.78577], [28.279303, -25.785538], [28.279341, -25.785498], [28.279463, -25.785446], [28.279875, -25.785362], [28.279989, -25.785341], [28.280085, -25.785337], [28.28016, -25.785344], [28.280172, -25.785345], [28.280935, -25.78546], [28.281786, -25.785597], [28.281936, -25.785633], [28.282018, -25.785703], [28.282127, -25.785863], [28.282235, -25.785998], [28.28237, -25.786076], [28.283506, -25.786275], [28.284163, -25.786432], [28.28422, -25.78632], [28.284407, -25.785946], [28.284578, -25.785595], [28.284754, -25.785238], [28.284895, -25.784956], [28.284992, -25.784781], [28.284995, -25.784777], [28.2852, -25.784409], [28.285267, -25.784292], [28.285528, -25.783838], [28.285673, -25.783466], [28.284074, -25.783327], [28.283035, -25.78316], [28.282951, -25.783146], [28.281956, -25.782987], [28.281678, -25.782916], [28.280621, -25.782647], [28.280194, -25.782538], [28.278153, -25.781812]] - - -parsed_data = json.loads(sys.argv[1]) -polygon = parsed_data["polygon"] - -# print("polygon",polygon) - -lon, lat = find_polygon_center(polygon) - - -def haversine(lat1, lon1, lat2, lon2): - # Convert latitude and longitude from degrees to radians - lat1_rad = math.radians(lat1) - lon1_rad = math.radians(lon1) - lat2_rad = math.radians(lat2) - lon2_rad = math.radians(lon2) - - # Haversine formula - dlat = lat2_rad - lat1_rad - dlon = lon2_rad - lon1_rad - a = math.sin(dlat / 2) ** 2 + math.cos(lat1_rad) * \ - math.cos(lat2_rad) * math.sin(dlon / 2) ** 2 - c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) - - # Radius of the Earth (in meters) - radius_earth = 6371000 - - # Calculate the distance in meters - distance = radius_earth * c - return distance - - -def distance_between_points(point1, point2): - # Euclidean distance between two points in 2D - return haversine(point1[1], point1[0], point2[1], point2[0]) - - -def find_radius(polygon): - # finding the longest_diagonal_length - # Subtract 1 to account for the repeated first point - num_points = len(polygon) - 1 - longest_diagonal_length = 0 - - for i in range(num_points): - for j in range(i + 2, num_points): - diagonal_length = distance_between_points(polygon[i], polygon[j]) - longest_diagonal_length = max( - longest_diagonal_length, diagonal_length) - - return longest_diagonal_length - - -radius = find_radius(polygon) - -# Set up API credentials and endpoint - -endpoint = f"https://api.mapbox.com/v4/mapbox.mapbox-streets-v8/tilequery/{lon},{lat}.json" - -# # Prepare the API request -params = { - "access_token": access_token, - "layers": "road", - "radius": radius, - "limit": 50, -} - -# Send the API request -response = requests.get(endpoint, params=params) - -# Load JSON data into a Python dictionary -data = response.json() - -# Function to extract coordinates with type "traffic_signals" - - -def extract_traffic_signals_coordinates(data): - coordinates_list = [] - for feature in data['features']: - if feature['properties']['type'] == 'traffic_signals': - coordinates = feature['geometry']['coordinates'] - coordinates_list.append(coordinates) - return coordinates_list - - -# Call the function to get the coordinates -traffic_signals_coordinates = extract_traffic_signals_coordinates(data) - -print(json.dumps({"coordsToAvoid": traffic_signals_coordinates})) diff --git a/api/src/loadshedding.rs b/api/src/loadshedding.rs index a1ea9c99..9b0abeba 100644 --- a/api/src/loadshedding.rs +++ b/api/src/loadshedding.rs @@ -16,6 +16,7 @@ use rocket::{ fairing::{self, Fairing, Info, Kind}, futures::{future::try_join_all, TryStreamExt}, post, + get, serde::json::Json, Orbit, Rocket, State, }; @@ -116,12 +117,99 @@ pub async fn fetch_suburb_stats<'a>( None => return ApiError::ServerError("Document not found").into(), }; let db_functions = DBFunctions {}; - match suburb.get_stats(&connection, &db_functions).await { + match suburb + .get_total_time_down_stats(Some(&connection), &db_functions, None) + .await + { Ok(data) => return ApiResponse::Ok(data), Err(err) => return err.into(), } } +#[utoipa::path(post, tag = "Schedule Data", path = "/api/fetchScheduleData", request_body = SuburbStatsRequest)] +#[post("/fetchScheduleData", format = "application/json", data = "<request>")] +pub async fn fetch_schedule<'a>( + db: &State<Option<Client>>, + request: Json<SuburbStatsRequest>, +) -> ApiResponse<'a, PredictiveSuburbStatsResponse> { + let oid = &request.suburb_id; + let connection = db.as_ref().unwrap().database("production"); + let query = doc! {"geometry" : {"$in" : [oid]}}; + let suburb: SuburbEntity = match connection + .collection("suburbs") + .find_one(query, None) + .await + .unwrap() + { + Some(result) => result, + None => return ApiError::ServerError("Document not found").into(), + }; + let db_functions = DBFunctions {}; + match suburb.build_schedule(Some(&connection), &db_functions, None).await { + Ok(data) => return ApiResponse::Ok(data), + Err(err) => return err.into(), + } +} + +#[utoipa::path(post, tag = "Schedule Data", path = "/api/fetchTimeForPolygon", request_body = SuburbStatsRequest)] +#[post( + "/fetchTimeForPolygon", + format = "application/json", + data = "<request>" +)] +pub async fn fetch_time_for_polygon<'a>( + db: &State<Option<Client>>, + request: Json<SuburbStatsRequest>, +) -> ApiResponse<'a, PredictiveSuburbStatsResponse> { + let oid = &request.suburb_id; + let connection = db.as_ref().unwrap().database("production"); + let query = doc! {"geometry" : {"$in" : [oid]}}; + let suburb: SuburbEntity = match connection + .collection("suburbs") + .find_one(query, None) + .await + .unwrap() + { + Some(result) => result, + None => return ApiError::ServerError("Document not found").into(), + }; + let db_functions = DBFunctions {}; + let time_now = get_date_time(None); + match suburb.build_schedule(Some(&connection), &db_functions, None).await { + Ok(data) => { + let relevant: Vec<TimeSlot> = data + .times_off + .into_iter() + .filter(|time| time.time_slot_bound_validation(&time_now)) + .collect(); + if let Some(to_return) = relevant.get(0) { + return ApiResponse::Ok(PredictiveSuburbStatsResponse { + times_off: vec![to_return.clone()], + }); + } else { + return ApiResponse::Ok(PredictiveSuburbStatsResponse { times_off: vec![] }); + } + } + Err(err) => err.into(), + } +} + +#[utoipa::path(get, path = "/api/fetchCurrentStage")] +#[get("/fetchCurrentStage")] +pub async fn get_current_stage<'a>( + loadshedding_stage: &State<Option<Arc<RwLock<LoadSheddingStage>>>>, +) -> ApiResponse<'a, i32> { + // query end + ApiResponse::Ok(loadshedding_stage + .inner() + .as_ref() + .clone() + .unwrap() + .read() + .await + .stage) +} + #[derive(Debug, Serialize, Deserialize, Clone, Entity)] #[serde(rename_all = "camelCase")] #[collection_name = "stage_log"] @@ -282,7 +370,7 @@ pub struct GroupEntity { // consider a small refactor to add groups associated municipalities for better efficiency } -#[derive(Debug, Serialize, Deserialize, Clone, Entity)] +#[derive(Debug, Serialize, Deserialize, Clone, Entity,PartialEq)] #[serde(rename_all = "camelCase")] #[collection_name = "suburbs"] pub struct SuburbEntity { @@ -360,7 +448,7 @@ pub struct SuburbStatsRequest { pub suburb_id: u32, } -#[derive(Serialize, Deserialize, Debug, ToSchema)] +#[derive(Serialize, Deserialize, Debug, ToSchema,PartialEq)] #[serde(rename_all = "camelCase")] pub struct SuburbStatsResponse { pub total_time: TotalTime, @@ -368,7 +456,19 @@ pub struct SuburbStatsResponse { pub suburb: SuburbEntity, } -#[derive(Serialize, Deserialize, Debug)] +#[derive(Serialize, Deserialize, Debug, ToSchema, PartialEq)] +#[serde(rename_all = "camelCase")] +pub struct PredictiveSuburbStatsResponse { + times_off: Vec<TimeSlot>, +} + +#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)] +pub struct TimeSlot { + start: i64, + end: i64, +} + +#[derive(Serialize, Deserialize, Debug,PartialEq)] pub struct TotalTime { pub on: i32, pub off: i32, @@ -562,6 +662,75 @@ impl DBFunctionsTrait for DBFunctions { } } // db functions end +impl LoadsheddingData { + pub fn convert_to_loadsheddingstage(&self) -> LoadSheddingStage { + return LoadSheddingStage { + id: None, + start_time: self.start.0.timestamp(), + end_time: self.end.0.timestamp(), + db: None, + stage: self.stage, + } + } +} + + +impl TimeSlot { + fn time_slot_bound_validation(&self, time_to_search: &DateTime<FixedOffset>) -> bool { + let stamp = time_to_search.timestamp(); + if self.start <= stamp { + if self.end > stamp { + return true; + } + } + return false; + } +} + +impl TimeScheduleEntity { + pub fn timestamp_from_slot_times( + &self, + time_to_search: DateTime<FixedOffset>, + start: bool, + ) -> DateTime<FixedOffset> { + let mut time = time_to_search + .with_hour(if start { + self.start_hour as u32 + } else { + self.stop_hour as u32 + }) + .unwrap() + .with_minute(if start { + self.start_minute as u32 + } else { + self.stop_minute as u32 + }) + .unwrap(); + if time < time_to_search { + time = time.checked_add_signed(chrono::Duration::days(1)).unwrap(); + } + time + } + fn is_within_timeslot(&self, time_to_search: &DateTime<FixedOffset>) -> bool { + let mut maybe = false; + if self.start_hour <= time_to_search.hour() as i32 { + if self.stop_hour >= time_to_search.hour() as i32 { + maybe = true; + if self.stop_minute <= time_to_search.minute() as i32 + && self.stop_hour == time_to_search.hour() as i32 + { + return false; + } + if self.start_minute > time_to_search.minute() as i32 + && self.start_hour == time_to_search.hour() as i32 + { + return false; + } + } + } + return maybe; + } +} impl MunicipalityEntity { pub async fn get_regions_at_time( @@ -589,23 +758,8 @@ impl MunicipalityEntity { let mut schedules: Vec<TimeScheduleEntity> = Vec::new(); // filter schedules to relevant ones for schedule in unfiltered_schedules { - let mut keep = false; + let keep = schedule.is_within_timeslot(&time_to_search); println!("{:?}", time_to_search.hour()); - if schedule.start_hour <= time_to_search.hour() as i32 { - if schedule.stop_hour >= time_to_search.hour() as i32 { - keep = true; - if schedule.stop_minute <= time_to_search.minute() as i32 - && schedule.stop_hour == time_to_search.hour() as i32 - { - keep = false; - } - if schedule.start_minute > time_to_search.minute() as i32 - && schedule.start_hour == time_to_search.hour() as i32 - { - keep = false; - } - } - } if keep { schedules.push(schedule); } @@ -702,20 +856,198 @@ impl MunicipalityEntity { } impl SuburbEntity { - pub async fn get_stats( + pub async fn build_schedule( + self, + connection: Option<&Database>, + db_functions: &dyn DBFunctionsTrait, + time: Option<i64>, + ) -> Result<PredictiveSuburbStatsResponse, ApiError<'static>> { + let time_now = get_date_time(time) + .with_second(0) + .unwrap() + .with_minute(0) + .unwrap(); + println!("{:?}", time_now.timestamp()); + let mut response: Vec<TimeSlot> = Vec::new(); + let day_in_future = + get_date_time(Some((Local::now() + chrono::Duration::days(1)).timestamp())); + + let (group, mut all_stages, schedule) = match self + .collect_information(&time_now.timestamp(), connection, db_functions) + .await + { + Ok(data) => data, + Err(err) => return Err(err), + }; + all_stages.reverse(); + + let mut time_to_search = time_now; + println!("{:?}", time_to_search.timestamp()); + while time_to_search < day_in_future { + let day = time_to_search.day() as i32; + let time_slots: Vec<TimeScheduleEntity> = schedule + .clone() + .into_iter() + .filter(|time| { + // check what time it falls under + time.is_within_timeslot(&time_to_search) + }) + .collect(); + if all_stages.len() >= 2 { + if all_stages[1].start_time <= time_to_search.timestamp() { + all_stages.remove(0); + } + } + if let Some(slot) = self.add_time_checker(&all_stages[0], &time_slots, &group, &day) { + let end_time = slot.timestamp_from_slot_times(time_to_search, false); + time_to_search = slot.timestamp_from_slot_times(time_to_search, true); + match response.last_mut() { + Some(time) => { + if time.end >= time_to_search.timestamp() { + time.end = end_time.timestamp(); + } else { + response.push(TimeSlot { + start: time_to_search.timestamp(), + end: end_time.timestamp(), + }); + } + } + None => response.push(TimeSlot { + start: time_to_search.timestamp(), + end: end_time.timestamp(), + }), + } + time_to_search = end_time; + } else { + time_to_search += chrono::Duration::minutes(30); + } + } + return Ok(PredictiveSuburbStatsResponse { + times_off: response, + }); + } + pub async fn get_total_time_down_stats( self, - connection: &Database, + connection: Option<&Database>, db_functions: &dyn DBFunctionsTrait, + time: Option<i64> ) -> Result<SuburbStatsResponse, ApiError<'static>> { - // queries - // get the relevant group + // Time + let mut down_time = 0; + let mut daily_stats: HashMap<String, TotalTime> = HashMap::new(); + + // get the relevant data + let time_now = get_date_time(time); + let one_week_ago = get_date_time(Some( + (get_date_time(time) - chrono::Duration::weeks(1)).timestamp(), + )); + let (group, mut all_stages, schedule) = match self + .collect_information(&one_week_ago.timestamp(), connection, db_functions) + .await + { + Ok(data) => data, + Err(err) => return Err(err), + }; + + // Time + let mut time_to_search: DateTime<FixedOffset> = one_week_ago; + time_to_search = time_to_search.with_minute(0).unwrap(); + + // main logic loop + while time_to_search <= time_now { + let day = time_to_search.day() as i32; + + // get the timeslots for the current time interval + let time_slots: Vec<TimeScheduleEntity> = schedule + .clone() + .into_iter() + .filter(|time| { + // check what time it falls under + time.is_within_timeslot(&time_to_search) + }) + .collect(); + // check next to see if its less than the current TTS + if all_stages.len() >= 2 { + if all_stages[1].start_time <= time_to_search.timestamp() { + all_stages.remove(0); + } + } + + // check if there exists a timeslot during which we have loadshedding, if there is, add time + let add_time = self.add_time_checker(&all_stages[0], &time_slots, &group, &day); + + if let Some(_) = add_time { + down_time += 30; + let day = daily_stats + .entry(time_to_search.weekday().to_string()) + .or_insert(TotalTime::new()); + day.add_off_time(30); + } + // update times + time_to_search = time_to_search + .checked_add_signed(Duration::minutes(30)) + .unwrap(); + } + let total_time = 10080; + let uptime = total_time - down_time; + Ok(SuburbStatsResponse { + total_time: TotalTime { + on: uptime, + off: down_time, + }, + per_day_times: daily_stats, + suburb: self, + }) + } + + fn add_time_checker<'a>( + &self, + stage: &LoadSheddingStage, + time_slots: &'a Vec<TimeScheduleEntity>, + group: &GroupEntity, + day: &i32, + ) -> Option<&'a TimeScheduleEntity> { + for time_slot in time_slots { + let stages: Vec<&StageTimes> = time_slot + .stages + .iter() + .filter(|x| x.stage <= stage.stage) + .collect(); + for stage in stages { + let slot = match stage.groups.get((day-1) as usize) { + Some(data) => { + if data.to_owned() == group.id.unwrap() { + Some(time_slot) + } else { + None + } + }, + None => None + }; + if let Some(data) = slot { + return Some(data); + } + } + } + None + } + // returns the group accociated with this suburb, + // the stage_logs from and greater than a given time, + // and the timeschedules for the municpality of the suburb + async fn collect_information( + &self, + from_time: &i64, + connection: Option<&Database>, + db_functions: &dyn DBFunctionsTrait, + ) -> Result<(GroupEntity, Vec<LoadSheddingStage>, Vec<TimeScheduleEntity>), ApiError<'static>> + { let query = doc! { "suburbs" : { "$in" : [self.id.unwrap()] } }; let group: GroupEntity = match db_functions - .collect_one_group(query, Some(connection), None) + .collect_one_group(query, connection, None) .await { Ok(group) => group, @@ -725,16 +1057,14 @@ impl SuburbEntity { }; // get all the stage changes from the past week - let time_now = Local::now(); - let one_week_ago = (Local::now() - chrono::Duration::weeks(1)).timestamp(); let query = doc! { "startTime": { - "$gte": one_week_ago + "$gt": from_time } }; let find_options = FindOptions::builder().sort(doc! { "startTime": 1 }).build(); let mut all_stages = match db_functions - .collect_stage_logs(query, Some(connection), Some(find_options)) + .collect_stage_logs(query, connection, Some(find_options)) .await { Ok(item) => item, @@ -747,7 +1077,7 @@ impl SuburbEntity { // find first timestamp after one week ago let query = doc! { "startTime": { - "$lte": one_week_ago + "$lte": from_time } }; let find_options = FindOptions::builder() @@ -755,7 +1085,7 @@ impl SuburbEntity { .limit(1) .build(); let first_stage_change = match db_functions - .collect_one_stage_log(query, Some(connection), Some(find_options)) + .collect_one_stage_log(query, connection, Some(find_options)) .await { Ok(cursor) => cursor, @@ -770,7 +1100,7 @@ impl SuburbEntity { "municipality" : self.municipality, }; let schedule = match db_functions - .collect_schedules(query, Some(connection), None) + .collect_schedules(query, connection, None) .await { Ok(item) => item, @@ -778,85 +1108,7 @@ impl SuburbEntity { return Err(err); } }; - // queries are over - - // Time - let mut time_to_search: DateTime<FixedOffset> = get_date_time(Some(one_week_ago)); - time_to_search = time_to_search.with_minute(0).unwrap(); - let mut down_time = 0; - let mut daily_stats: HashMap<String, TotalTime> = HashMap::new(); - - // main logic loop - while time_to_search <= time_now { - let hour = time_to_search.hour() as i32; - let minute = time_to_search.minute() as i32; - let day = time_to_search.day() as i32; - // get the timeslots for the current time interval - let time_slots: Vec<TimeScheduleEntity> = schedule - .clone() - .into_iter() - .filter(|time| { - // check what time it falls under - if time.stop_hour >= hour - && time.stop_minute >= minute - && time.start_hour <= hour - && time.start_minute <= minute - { - true - } else { - false - } - }) - .collect(); - // check next to see if its less than the current TTS - if all_stages.len() >= 2 { - if all_stages[1].start_time <= time_to_search.timestamp() { - all_stages.remove(0); - } - } - - let mut add_time = false; - - // check if there exists a timeslot during which we have loadshedding, if there is, add time - for time_slot in time_slots { - let mut count: usize = 0; - let stage = &all_stages[0]; - while (count as i32) < stage.stage { - if time_slot.stages.get(count).unwrap().groups[(day - 1) as usize] - == group.id.unwrap() - { - // adding time after the loop - add_time = true; - break; - } - count = count + 1; - } - if add_time { - break; - } - } - if add_time { - down_time += 30; - let day = daily_stats - .entry(time_to_search.weekday().to_string()) - .or_insert(TotalTime::new()); - day.add_off_time(30); - } - // update times - time_to_search = time_to_search - .checked_add_signed(Duration::minutes(30)) - .unwrap(); - } - let total_time = 10080; - let uptime = total_time - down_time; - Ok(SuburbStatsResponse { - total_time: TotalTime { - on: uptime, - off: down_time, - }, - per_day_times: daily_stats, - suburb: self, - }) + Ok((group, all_stages, schedule)) } } @@ -933,27 +1185,17 @@ impl LoadSheddingStage { db: None, }, }; - let latest_info = times.last().unwrap().start.0.naive_local(); - let latest_in_db = NaiveDateTime::from_timestamp_opt(result.start_time, 0).unwrap(); - if latest_info > latest_in_db { - // find point where we must update and update the rest - loop { - let next = times.pop(); - if let Some(data) = next { - if latest_in_db >= data.start.0.naive_local() { - break; - } - let to_insert = LoadSheddingStage { - id: None, - start_time: data.start.0.timestamp(), - end_time: data.end.0.timestamp(), - db: None, - stage: data.stage, - }; - let _ = to_insert.insert(db_con).await; + let latest_in_db = result.start_time; + loop { + let next = times.pop(); + if let Some(new_data) = next { + if latest_in_db >= new_data.start.0.timestamp() { + let _ = self.update_db_with_changes(new_data, db_con).await; } else { - break; + let _ = new_data.convert_to_loadsheddingstage().insert(db_con).await; } + } else { + break; } } self.set_stage().await; @@ -961,6 +1203,62 @@ impl LoadSheddingStage { return (); } } + + async fn update_db_with_changes(&self, new_data:LoadsheddingData, db_con:&Database) { + // findone that matches our times. + let query = doc! { + "startTime" : new_data.start.0.timestamp(), + "endTime" : new_data.end.0.timestamp() + }; + //match LoadSheddingStage::find_one(query, db_con, None).await { + match db_con + .collection::<LoadSheddingStage>("stage_log") + .find_one(query, None) + .await + .unwrap() { + // if match + // check similarities + // if stage change: update + Some(mut db_data) => { + if db_data.stage != new_data.stage { + let update = + mongodb::options::UpdateModifications::Document(doc! { + "$set" : {"stage" : new_data.stage} + }); + let _ = db_data.update(update, db_con).await; + } + } + // else if no match + // find all that encapsulate this new time. + // delete all of them + // insert + None => { + let filter = doc! { + "startTime" : {"$lt" : new_data.end.0.timestamp()}, + "endTime" : {"$gt" : new_data.start.0.timestamp()} + }; + // Can be optimized into a delete many + match LoadSheddingStage::find(filter, db_con, None).await { + Ok(data) => { + for stage in data { + let _ = stage.delete(db_con).await; + } + let _ = new_data + .convert_to_loadsheddingstage() + .insert(db_con) + .await; + } + Err(_) => { + let _ = new_data + .convert_to_loadsheddingstage() + .insert(db_con) + .await; + } + } + } + }; + } + pub fn set_db(&mut self, db: &Client) { self.db = Some(db.to_owned()); } @@ -1031,7 +1329,7 @@ impl Fairing for StageUpdater { } #[derive(Debug, Clone)] -pub struct SASTDateTime(DateTime<FixedOffset>); +pub struct SASTDateTime(pub DateTime<FixedOffset>); const FORMAT: &str = "%Y-%m-%dT%H:%M"; impl<'de> Deserialize<'de> for SASTDateTime { @@ -1040,13 +1338,13 @@ impl<'de> Deserialize<'de> for SASTDateTime { D: Deserializer<'de>, { // get search time - let sast = FixedOffset::east_opt(2 * 3600).unwrap(); let s = String::deserialize(deserializer)?; let dt = NaiveDateTime::parse_from_str(&s, FORMAT).unwrap(); - let sast = DateTime::<Utc>::from_utc(dt, Utc).with_timezone(&sast); + // hack for now because library is not being co-operative + let convert_to_sast = dt.timestamp() - 2*3600; + let sast = get_date_time(Some(convert_to_sast)); println!("{:?}", sast); Ok(SASTDateTime(sast)) - // DateTime::<FixedOffset>::from_str(&s).map_err(serde::de::Error::custom) } } diff --git a/api/src/main.rs b/api/src/main.rs index d336ebef..5a9135cb 100644 --- a/api/src/main.rs +++ b/api/src/main.rs @@ -4,6 +4,7 @@ mod auth; mod db; mod dns; mod loadshedding; +mod reporting; mod scraper; #[cfg(test)] mod tests; @@ -39,13 +40,18 @@ const DB_NAME: &'static str = "wip"; #[openapi( paths( user::create_user, + loadshedding::get_current_stage, loadshedding::fetch_map_data, + loadshedding::fetch_schedule, loadshedding::fetch_suburb_stats, + loadshedding::fetch_time_for_polygon, auth::authenticate, ai::get_ai_info, user::get_saved_places, user::add_saved_place, - user::delete_saved_place + user::delete_saved_place, + reporting::create_report, + reporting::get_reports ), components(schemas( auth::AuthRequest, @@ -54,11 +60,14 @@ const DB_NAME: &'static str = "wip"; user::UserLocation, loadshedding::MapDataRequest, loadshedding::MapDataDefaultResponse, + loadshedding::PredictiveSuburbStatsResponse, loadshedding::SuburbStatsRequest, api::ResponseString, api::ApiError, ai::AiInfoRequest, - user::SavedPlace + user::SavedPlace, + reporting::NewUserReport, + reporting::ReportType )), info(title = "Where Is The Power API Specification"), modifiers(&SecurityAddon) @@ -174,6 +183,10 @@ async fn get_config() -> Figment { } async fn build_rocket() -> Rocket<Build> { + if let Err(err) = dotenvy::dotenv() { + warn!("Couldn't read .env file! {err:?}"); + } + let figment = get_config().await; let db_uri = env::var("DATABASE_URI").unwrap_or(String::from("")); // Cors Options, we should modify to our needs but leave as default for now. @@ -210,12 +223,17 @@ async fn build_rocket() -> Rocket<Build> { routes!( auth::authenticate, user::create_user, + loadshedding::get_current_stage, loadshedding::fetch_map_data, loadshedding::fetch_suburb_stats, + loadshedding::fetch_schedule, + loadshedding::fetch_time_for_polygon, user::add_saved_place, user::get_saved_places, ai::get_ai_info, - user::delete_saved_place + user::delete_saved_place, + reporting::create_report, + reporting::get_reports ), ) .mount("/upload", routes![upload_data]) @@ -241,12 +259,17 @@ async fn build_rocket() -> Rocket<Build> { routes!( auth::authenticate, user::create_user, + loadshedding::get_current_stage, loadshedding::fetch_map_data, loadshedding::fetch_suburb_stats, + loadshedding::fetch_schedule, + loadshedding::fetch_time_for_polygon, user::add_saved_place, user::get_saved_places, ai::get_ai_info, - user::delete_saved_place + user::delete_saved_place, + reporting::create_report, + reporting::get_reports ), ) .mount("/upload", routes![upload_data]) @@ -269,9 +292,6 @@ async fn build_rocket() -> Rocket<Build> { async fn main() -> Result<(), rocket::Error> { setup_logger().expect("Couldn't setup logger!"); - if let Err(err) = dotenvy::dotenv() { - warn!("Couldn't read .env file! {err:?}"); - } if let Err(err) = dns::update_dns().await { warn!("Couldn't setup DNS: {err:?}"); } diff --git a/api/src/reporting.rs b/api/src/reporting.rs new file mode 100644 index 00000000..ebc1d7e9 --- /dev/null +++ b/api/src/reporting.rs @@ -0,0 +1,170 @@ +use crate::{ + api::{ApiError, ApiResponse}, + auth::JWTAuthToken, + db::Entity, + user::User, + DB_NAME, +}; +use bson::oid::ObjectId; +use macros::Entity; +use mongodb::Client; +use rocket::{get, post, serde::json::Json, State}; +use serde::{Deserialize, Serialize}; +use std::time::{SystemTime, UNIX_EPOCH}; +use utoipa::ToSchema; + +#[utoipa::path(post, path = "/api/reports", request_body = NewUserReport, security(("jwt" = [])))] +#[post("/reports", format = "application/json", data = "<new_report>")] +pub async fn create_report<'a>( + token: JWTAuthToken, + new_report: Json<NewUserReport>, + state: &State<Option<Client>>, +) -> ApiResponse<'a, &'a str> { + if token.email.is_none() { + return ApiError::AuthError("Registered user required to submit report").into(); + } + + let db = state + .as_ref() + .expect("This rocket instance has no valid database!") + .database(DB_NAME); + + let report = if let Some(user) = User::find_one( + bson::doc! { + "email": &token.email + }, + &db, + None, + ) + .await + { + new_report.into_inner().into_entity(user.email.clone()) + } else { + return ApiError::ServerError("Couldn't find the user associated with this token").into(); + }; + + match report.insert(&db).await { + Ok(_) => ApiResponse::Ok("Report created"), + Err(err) => { + log::error!("Couldn't insert report: {err:?}"); + ApiError::ServerError("Couldn't create report").into() + } + } +} + +#[utoipa::path(get, path = "/api/reports")] +#[get("/reports")] +pub async fn get_reports(state: &State<Option<Client>>) -> ApiResponse<Vec<UserReportResponse>> { + let db = state + .as_ref() + .expect("No attached mongodb client") + .database(DB_NAME); + + match UserReport::find(bson::doc! {}, &db, None).await { + Ok(reports) => ApiResponse::Ok( + reports + .into_iter() + .map(|x| UserReportResponse::from(x.as_ref())) + .filter(|x| x.expired == false) + .collect(), + ), + Err(err) => { + log::error!("Couldn't fetch user reports: {err:?}"); + ApiError::ServerError("Couldn't fetch user reports!").into() + } + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)] +#[non_exhaustive] +pub enum ReportType { + CablesStolen, + SubstationBlew, + PowerOutage, + CablesDamaged, + Traffic, +} + +#[derive(Debug, Clone, Serialize, ToSchema)] +#[schema(example = json! { + UserReportResponse { + report_type: ReportType::CablesStolen, + email: "joe".to_string(), + latitude: 0.0, + longitude: 0.0, + expired: false + } +})] +pub struct UserReportResponse { + pub report_type: ReportType, + pub email: String, + pub latitude: f64, + pub longitude: f64, + pub expired: bool, +} + +impl From<&UserReport> for UserReportResponse { + fn from(value: &UserReport) -> Self { + Self { + expired: value.is_expired(), + latitude: value.latitude, + longitude: value.longitude, + report_type: value.report_type.clone(), + email: value.email.clone(), + } + } +} + +#[derive(Debug, Clone, Deserialize, Serialize, Entity)] +#[collection_name = "reports"] +pub struct UserReport { + #[serde(skip_serializing_if = "Option::is_none", rename = "_id")] + pub id: Option<ObjectId>, + pub report_type: ReportType, + pub latitude: f64, + pub longitude: f64, + pub email: String, + pub expires: u64, +} + +impl UserReport { + pub fn is_expired(&self) -> bool { + u64::try_from( + SystemTime::now() + .duration_since(UNIX_EPOCH) + .unwrap() + .as_millis(), + ) + .unwrap() + > self.expires + } +} + +#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)] +#[schema(example = json! { + NewUserReport { + report_type: ReportType::CablesStolen, + latitude: 0.0, + longitude: 0.0, + timestamp: SystemTime::now().duration_since(UNIX_EPOCH).unwrap().as_millis() + } +})] +pub struct NewUserReport { + pub report_type: ReportType, + pub latitude: f64, + pub longitude: f64, + pub timestamp: u128, +} + +impl NewUserReport { + pub fn into_entity(self, email: String) -> UserReport { + UserReport { + id: None, + report_type: self.report_type, + latitude: self.latitude, + longitude: self.longitude, + expires: u64::try_from(self.timestamp).unwrap() + 1000 * 60 * 30, + email, + } + } +} diff --git a/api/src/robots.json b/api/src/robots.json new file mode 100644 index 00000000..f75f2ae3 --- /dev/null +++ b/api/src/robots.json @@ -0,0 +1,27417 @@ +{ + "robots": [ + { + "coordinates": [ + [ + 28.1014314, + -25.6627889 + ], + [ + 28.1013288, + -25.6627792 + ], + [ + 28.101424, + -25.6628868 + ] + ], + "polygon_id": 15293 + }, + { + "coordinates": [ + [ + 28.1014314, + -25.6627889 + ], + [ + 28.1013288, + -25.6627792 + ], + [ + 28.101424, + -25.6628868 + ] + ], + "polygon_id": 15293 + }, + { + "coordinates": [ + [ + 28.1014314, + -25.6627889 + ], + [ + 28.1013288, + -25.6627792 + ], + [ + 28.101424, + -25.6628868 + ] + ], + "polygon_id": 15293 + }, + { + "coordinates": [ + [ + 28.1308566, + -25.6504003 + ] + ], + "polygon_id": 15296 + }, + { + "coordinates": [ + [ + 28.1436465, + -25.6552584 + ] + ], + "polygon_id": 15298 + }, + { + "coordinates": [ + [ + 28.2204317, + -25.8598463 + ], + [ + 28.2205832, + -25.8597889 + ], + [ + 28.219737, + -25.8581691 + ], + [ + 28.21578, + -25.862486 + ], + [ + 28.2157653, + -25.8623501 + ], + [ + 28.2212896, + -25.8618896 + ], + [ + 28.2214334, + -25.861857 + ] + ], + "polygon_id": 15305 + }, + { + "coordinates": [ + [ + 28.2204317, + -25.8598463 + ], + [ + 28.2205832, + -25.8597889 + ], + [ + 28.219737, + -25.8581691 + ], + [ + 28.21578, + -25.862486 + ], + [ + 28.2157653, + -25.8623501 + ], + [ + 28.2212896, + -25.8618896 + ], + [ + 28.2214334, + -25.861857 + ] + ], + "polygon_id": 15305 + }, + { + "coordinates": [ + [ + 28.2204317, + -25.8598463 + ], + [ + 28.2205832, + -25.8597889 + ], + [ + 28.219737, + -25.8581691 + ], + [ + 28.21578, + -25.862486 + ], + [ + 28.2157653, + -25.8623501 + ], + [ + 28.2212896, + -25.8618896 + ], + [ + 28.2214334, + -25.861857 + ] + ], + "polygon_id": 15305 + }, + { + "coordinates": [ + [ + 28.2204317, + -25.8598463 + ], + [ + 28.2205832, + -25.8597889 + ], + [ + 28.219737, + -25.8581691 + ], + [ + 28.21578, + -25.862486 + ], + [ + 28.2157653, + -25.8623501 + ], + [ + 28.2212896, + -25.8618896 + ], + [ + 28.2214334, + -25.861857 + ] + ], + "polygon_id": 15305 + }, + { + "coordinates": [ + [ + 28.2204317, + -25.8598463 + ], + [ + 28.2205832, + -25.8597889 + ], + [ + 28.219737, + -25.8581691 + ], + [ + 28.21578, + -25.862486 + ], + [ + 28.2157653, + -25.8623501 + ], + [ + 28.2212896, + -25.8618896 + ], + [ + 28.2214334, + -25.861857 + ] + ], + "polygon_id": 15305 + }, + { + "coordinates": [ + [ + 28.2204317, + -25.8598463 + ], + [ + 28.2205832, + -25.8597889 + ], + [ + 28.219737, + -25.8581691 + ], + [ + 28.21578, + -25.862486 + ], + [ + 28.2157653, + -25.8623501 + ], + [ + 28.2212896, + -25.8618896 + ], + [ + 28.2214334, + -25.861857 + ] + ], + "polygon_id": 15305 + }, + { + "coordinates": [ + [ + 28.2204317, + -25.8598463 + ], + [ + 28.2205832, + -25.8597889 + ], + [ + 28.219737, + -25.8581691 + ], + [ + 28.21578, + -25.862486 + ], + [ + 28.2157653, + -25.8623501 + ], + [ + 28.2212896, + -25.8618896 + ], + [ + 28.2214334, + -25.861857 + ] + ], + "polygon_id": 15305 + }, + { + "coordinates": [ + [ + 28.112766, + -25.8347478 + ] + ], + "polygon_id": 15309 + }, + { + "coordinates": [ + [ + 27.9875668, + -25.5864842 + ] + ], + "polygon_id": 15523 + }, + { + "coordinates": [ + [ + 28.2021993, + -25.6781347 + ] + ], + "polygon_id": 16773 + }, + { + "coordinates": [ + [ + 28.2153904, + -25.6852526 + ], + [ + 28.1995718, + -25.6836171 + ] + ], + "polygon_id": 16774 + }, + { + "coordinates": [ + [ + 28.2153904, + -25.6852526 + ], + [ + 28.1995718, + -25.6836171 + ] + ], + "polygon_id": 16774 + }, + { + "coordinates": [ + [ + 28.2374742, + -25.6794063 + ], + [ + 28.2479854, + -25.6790896 + ], + [ + 28.2379761, + -25.6792922 + ], + [ + 28.242806, + -25.6790919 + ], + [ + 28.242667, + -25.6790879 + ], + [ + 28.2479686, + -25.6792523 + ], + [ + 28.2478048, + -25.6790859 + ], + [ + 28.2374863, + -25.679503 + ] + ], + "polygon_id": 16775 + }, + { + "coordinates": [ + [ + 28.2374742, + -25.6794063 + ], + [ + 28.2479854, + -25.6790896 + ], + [ + 28.2379761, + -25.6792922 + ], + [ + 28.242806, + -25.6790919 + ], + [ + 28.242667, + -25.6790879 + ], + [ + 28.2479686, + -25.6792523 + ], + [ + 28.2478048, + -25.6790859 + ], + [ + 28.2374863, + -25.679503 + ] + ], + "polygon_id": 16775 + }, + { + "coordinates": [ + [ + 28.2374742, + -25.6794063 + ], + [ + 28.2479854, + -25.6790896 + ], + [ + 28.2379761, + -25.6792922 + ], + [ + 28.242806, + -25.6790919 + ], + [ + 28.242667, + -25.6790879 + ], + [ + 28.2479686, + -25.6792523 + ], + [ + 28.2478048, + -25.6790859 + ], + [ + 28.2374863, + -25.679503 + ] + ], + "polygon_id": 16775 + }, + { + "coordinates": [ + [ + 28.2374742, + -25.6794063 + ], + [ + 28.2479854, + -25.6790896 + ], + [ + 28.2379761, + -25.6792922 + ], + [ + 28.242806, + -25.6790919 + ], + [ + 28.242667, + -25.6790879 + ], + [ + 28.2479686, + -25.6792523 + ], + [ + 28.2478048, + -25.6790859 + ], + [ + 28.2374863, + -25.679503 + ] + ], + "polygon_id": 16775 + }, + { + "coordinates": [ + [ + 28.2374742, + -25.6794063 + ], + [ + 28.2479854, + -25.6790896 + ], + [ + 28.2379761, + -25.6792922 + ], + [ + 28.242806, + -25.6790919 + ], + [ + 28.242667, + -25.6790879 + ], + [ + 28.2479686, + -25.6792523 + ], + [ + 28.2478048, + -25.6790859 + ], + [ + 28.2374863, + -25.679503 + ] + ], + "polygon_id": 16775 + }, + { + "coordinates": [ + [ + 28.2374742, + -25.6794063 + ], + [ + 28.2479854, + -25.6790896 + ], + [ + 28.2379761, + -25.6792922 + ], + [ + 28.242806, + -25.6790919 + ], + [ + 28.242667, + -25.6790879 + ], + [ + 28.2479686, + -25.6792523 + ], + [ + 28.2478048, + -25.6790859 + ], + [ + 28.2374863, + -25.679503 + ] + ], + "polygon_id": 16775 + }, + { + "coordinates": [ + [ + 28.2374742, + -25.6794063 + ], + [ + 28.2479854, + -25.6790896 + ], + [ + 28.2379761, + -25.6792922 + ], + [ + 28.242806, + -25.6790919 + ], + [ + 28.242667, + -25.6790879 + ], + [ + 28.2479686, + -25.6792523 + ], + [ + 28.2478048, + -25.6790859 + ], + [ + 28.2374863, + -25.679503 + ] + ], + "polygon_id": 16775 + }, + { + "coordinates": [ + [ + 28.2374742, + -25.6794063 + ], + [ + 28.2479854, + -25.6790896 + ], + [ + 28.2379761, + -25.6792922 + ], + [ + 28.242806, + -25.6790919 + ], + [ + 28.242667, + -25.6790879 + ], + [ + 28.2479686, + -25.6792523 + ], + [ + 28.2478048, + -25.6790859 + ], + [ + 28.2374863, + -25.679503 + ] + ], + "polygon_id": 16775 + }, + { + "coordinates": [ + [ + 28.1347578, + -25.7437722 + ], + [ + 28.1356647, + -25.7410249 + ], + [ + 28.1537617, + -25.7396175 + ], + [ + 28.1328529, + -25.7463749 + ], + [ + 28.1544244, + -25.7438878 + ] + ], + "polygon_id": 16781 + }, + { + "coordinates": [ + [ + 28.1347578, + -25.7437722 + ], + [ + 28.1356647, + -25.7410249 + ], + [ + 28.1537617, + -25.7396175 + ], + [ + 28.1328529, + -25.7463749 + ], + [ + 28.1544244, + -25.7438878 + ] + ], + "polygon_id": 16781 + }, + { + "coordinates": [ + [ + 28.1347578, + -25.7437722 + ], + [ + 28.1356647, + -25.7410249 + ], + [ + 28.1537617, + -25.7396175 + ], + [ + 28.1328529, + -25.7463749 + ], + [ + 28.1544244, + -25.7438878 + ] + ], + "polygon_id": 16781 + }, + { + "coordinates": [ + [ + 28.1347578, + -25.7437722 + ], + [ + 28.1356647, + -25.7410249 + ], + [ + 28.1537617, + -25.7396175 + ], + [ + 28.1328529, + -25.7463749 + ], + [ + 28.1544244, + -25.7438878 + ] + ], + "polygon_id": 16781 + }, + { + "coordinates": [ + [ + 28.1347578, + -25.7437722 + ], + [ + 28.1356647, + -25.7410249 + ], + [ + 28.1537617, + -25.7396175 + ], + [ + 28.1328529, + -25.7463749 + ], + [ + 28.1544244, + -25.7438878 + ] + ], + "polygon_id": 16781 + }, + { + "coordinates": [ + [ + 28.1863605, + -25.7099599 + ], + [ + 28.1865149, + -25.709975 + ], + [ + 28.186398, + -25.7099647 + ], + [ + 28.1864586, + -25.7099702 + ] + ], + "polygon_id": 16785 + }, + { + "coordinates": [ + [ + 28.1863605, + -25.7099599 + ], + [ + 28.1865149, + -25.709975 + ], + [ + 28.186398, + -25.7099647 + ], + [ + 28.1864586, + -25.7099702 + ] + ], + "polygon_id": 16785 + }, + { + "coordinates": [ + [ + 28.1863605, + -25.7099599 + ], + [ + 28.1865149, + -25.709975 + ], + [ + 28.186398, + -25.7099647 + ], + [ + 28.1864586, + -25.7099702 + ] + ], + "polygon_id": 16785 + }, + { + "coordinates": [ + [ + 28.1863605, + -25.7099599 + ], + [ + 28.1865149, + -25.709975 + ], + [ + 28.186398, + -25.7099647 + ], + [ + 28.1864586, + -25.7099702 + ] + ], + "polygon_id": 16785 + }, + { + "coordinates": [ + [ + 28.1851452, + -25.7153524 + ], + [ + 28.1855717, + -25.7155016 + ] + ], + "polygon_id": 16786 + }, + { + "coordinates": [ + [ + 28.1851452, + -25.7153524 + ], + [ + 28.1855717, + -25.7155016 + ] + ], + "polygon_id": 16786 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2426858, + -25.6787124 + ], + [ + 28.2440683, + -25.6602193 + ], + [ + 28.2428367, + -25.678714 + ], + [ + 28.2538061, + -25.6790975 + ], + [ + 28.2483485, + -25.6788685 + ], + [ + 28.2480063, + -25.678854 + ], + [ + 28.2481286, + -25.6788602 + ], + [ + 28.2374538, + -25.6791834 + ], + [ + 28.2429633, + -25.6787153 + ], + [ + 28.2428474, + -25.6785831 + ], + [ + 28.2426925, + -25.6785773 + ], + [ + 28.2425425, + -25.6787109 + ], + [ + 28.2481416, + -25.67874 + ], + [ + 28.2480281, + -25.678733 + ], + [ + 28.2478183, + -25.6788521 + ], + [ + 28.2440586, + -25.6603773 + ], + [ + 28.2441927, + -25.6602313 + ], + [ + 28.2440737, + -25.6601432 + ], + [ + 28.2439426, + -25.6602141 + ], + [ + 28.2379198, + -25.6790686 + ], + [ + 28.2536773, + -25.6790911 + ], + [ + 28.253685, + -25.6788983 + ], + [ + 28.2538199, + -25.6789788 + ], + [ + 28.2374529, + -25.6790908 + ], + [ + 28.2441306, + -25.660224 + ] + ], + "polygon_id": 18017 + }, + { + "coordinates": [ + [ + 28.2713271, + -25.6827914 + ], + [ + 28.2711199, + -25.6825839 + ] + ], + "polygon_id": 18020 + }, + { + "coordinates": [ + [ + 28.2713271, + -25.6827914 + ], + [ + 28.2711199, + -25.6825839 + ] + ], + "polygon_id": 18020 + }, + { + "coordinates": [ + [ + 28.2181767, + -25.7165015 + ], + [ + 28.2209616, + -25.7161526 + ], + [ + 28.2248888, + -25.7114497 + ], + [ + 28.2261618, + -25.7046307 + ], + [ + 28.2310747, + -25.7042151 + ], + [ + 28.2310132, + -25.7042836 + ] + ], + "polygon_id": 18029 + }, + { + "coordinates": [ + [ + 28.2181767, + -25.7165015 + ], + [ + 28.2209616, + -25.7161526 + ], + [ + 28.2248888, + -25.7114497 + ], + [ + 28.2261618, + -25.7046307 + ], + [ + 28.2310747, + -25.7042151 + ], + [ + 28.2310132, + -25.7042836 + ] + ], + "polygon_id": 18029 + }, + { + "coordinates": [ + [ + 28.2181767, + -25.7165015 + ], + [ + 28.2209616, + -25.7161526 + ], + [ + 28.2248888, + -25.7114497 + ], + [ + 28.2261618, + -25.7046307 + ], + [ + 28.2310747, + -25.7042151 + ], + [ + 28.2310132, + -25.7042836 + ] + ], + "polygon_id": 18029 + }, + { + "coordinates": [ + [ + 28.2181767, + -25.7165015 + ], + [ + 28.2209616, + -25.7161526 + ], + [ + 28.2248888, + -25.7114497 + ], + [ + 28.2261618, + -25.7046307 + ], + [ + 28.2310747, + -25.7042151 + ], + [ + 28.2310132, + -25.7042836 + ] + ], + "polygon_id": 18029 + }, + { + "coordinates": [ + [ + 28.2181767, + -25.7165015 + ], + [ + 28.2209616, + -25.7161526 + ], + [ + 28.2248888, + -25.7114497 + ], + [ + 28.2261618, + -25.7046307 + ], + [ + 28.2310747, + -25.7042151 + ], + [ + 28.2310132, + -25.7042836 + ] + ], + "polygon_id": 18029 + }, + { + "coordinates": [ + [ + 28.2181767, + -25.7165015 + ], + [ + 28.2209616, + -25.7161526 + ], + [ + 28.2248888, + -25.7114497 + ], + [ + 28.2261618, + -25.7046307 + ], + [ + 28.2310747, + -25.7042151 + ], + [ + 28.2310132, + -25.7042836 + ] + ], + "polygon_id": 18029 + }, + { + "coordinates": [ + [ + 28.1992825, + -25.6988135 + ], + [ + 28.199372, + -25.698804 + ] + ], + "polygon_id": 18030 + }, + { + "coordinates": [ + [ + 28.1992825, + -25.6988135 + ], + [ + 28.199372, + -25.698804 + ] + ], + "polygon_id": 18030 + }, + { + "coordinates": [ + [ + 28.1587054, + -25.7006225 + ] + ], + "polygon_id": 18033 + }, + { + "coordinates": [ + [ + 28.1050906, + -25.7151518 + ], + [ + 28.1041425, + -25.7142854 + ], + [ + 28.105277, + -25.7151581 + ], + [ + 28.1052681, + -25.7152145 + ] + ], + "polygon_id": 18038 + }, + { + "coordinates": [ + [ + 28.1050906, + -25.7151518 + ], + [ + 28.1041425, + -25.7142854 + ], + [ + 28.105277, + -25.7151581 + ], + [ + 28.1052681, + -25.7152145 + ] + ], + "polygon_id": 18038 + }, + { + "coordinates": [ + [ + 28.1050906, + -25.7151518 + ], + [ + 28.1041425, + -25.7142854 + ], + [ + 28.105277, + -25.7151581 + ], + [ + 28.1052681, + -25.7152145 + ] + ], + "polygon_id": 18038 + }, + { + "coordinates": [ + [ + 28.1050906, + -25.7151518 + ], + [ + 28.1041425, + -25.7142854 + ], + [ + 28.105277, + -25.7151581 + ], + [ + 28.1052681, + -25.7152145 + ] + ], + "polygon_id": 18038 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1376702, + -25.7056984 + ], + [ + 28.1376993, + -25.7055256 + ], + [ + 28.135059, + -25.7228622 + ], + [ + 28.1352948, + -25.7214722 + ], + [ + 28.1359451, + -25.7173031 + ], + [ + 28.1370239, + -25.7099658 + ], + [ + 28.136328, + -25.7140937 + ], + [ + 28.1360933, + -25.7173215 + ], + [ + 28.1364578, + -25.714112 + ], + [ + 28.1371397, + -25.7099826 + ], + [ + 28.137864, + -25.7057371 + ], + [ + 28.1378916, + -25.7055546 + ], + [ + 28.13519, + -25.72286 + ], + [ + 28.1354173, + -25.7214883 + ], + [ + 28.1350831, + -25.7227311 + ], + [ + 28.1352101, + -25.7227346 + ] + ], + "polygon_id": 18040 + }, + { + "coordinates": [ + [ + 28.1551006, + -25.7160609 + ] + ], + "polygon_id": 18041 + }, + { + "coordinates": [ + [ + 28.165506, + -25.6655687 + ], + [ + 28.1654993, + -25.6656532 + ], + [ + 28.1655751, + -25.6655728 + ], + [ + 28.1655134, + -25.6654725 + ], + [ + 28.1654175, + -25.6655619 + ] + ], + "polygon_id": 18043 + }, + { + "coordinates": [ + [ + 28.165506, + -25.6655687 + ], + [ + 28.1654993, + -25.6656532 + ], + [ + 28.1655751, + -25.6655728 + ], + [ + 28.1655134, + -25.6654725 + ], + [ + 28.1654175, + -25.6655619 + ] + ], + "polygon_id": 18043 + }, + { + "coordinates": [ + [ + 28.165506, + -25.6655687 + ], + [ + 28.1654993, + -25.6656532 + ], + [ + 28.1655751, + -25.6655728 + ], + [ + 28.1655134, + -25.6654725 + ], + [ + 28.1654175, + -25.6655619 + ] + ], + "polygon_id": 18043 + }, + { + "coordinates": [ + [ + 28.165506, + -25.6655687 + ], + [ + 28.1654993, + -25.6656532 + ], + [ + 28.1655751, + -25.6655728 + ], + [ + 28.1655134, + -25.6654725 + ], + [ + 28.1654175, + -25.6655619 + ] + ], + "polygon_id": 18043 + }, + { + "coordinates": [ + [ + 28.165506, + -25.6655687 + ], + [ + 28.1654993, + -25.6656532 + ], + [ + 28.1655751, + -25.6655728 + ], + [ + 28.1655134, + -25.6654725 + ], + [ + 28.1654175, + -25.6655619 + ] + ], + "polygon_id": 18043 + }, + { + "coordinates": [ + [ + 28.1876725, + -25.7337966 + ] + ], + "polygon_id": 18047 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.1981113, + -25.751409 + ], + [ + 28.1957457, + -25.7503781 + ], + [ + 28.1934467, + -25.7519861 + ], + [ + 28.1859511, + -25.750437 + ], + [ + 28.1860099, + -25.7510118 + ], + [ + 28.183557, + -25.7511817 + ], + [ + 28.1835197, + -25.7506031 + ], + [ + 28.1810485, + -25.7507648 + ], + [ + 28.1811101, + -25.7513504 + ], + [ + 28.1812479, + -25.7528182 + ], + [ + 28.1836898, + -25.7526691 + ], + [ + 28.1861096, + -25.7524811 + ], + [ + 28.1984899, + -25.7500774 + ], + [ + 28.1908719, + -25.7504489 + ], + [ + 28.1933101, + -25.750444 + ], + [ + 28.195725, + -25.7500916 + ], + [ + 28.1974042, + -25.7502449 + ], + [ + 28.1933211, + -25.7506479 + ], + [ + 28.1908949, + -25.7507092 + ], + [ + 28.1811548, + -25.7511924 + ], + [ + 28.1974367, + -25.7503191 + ], + [ + 28.1972918, + -25.7501383 + ], + [ + 28.1860526, + -25.7508651 + ], + [ + 28.188499, + -25.7508495 + ], + [ + 28.1884943, + -25.7506296 + ], + [ + 28.1884336, + -25.7509624 + ], + [ + 28.1883464, + -25.7506409 + ], + [ + 28.1884358, + -25.7509858 + ], + [ + 28.1885509, + -25.7508453 + ], + [ + 28.1882802, + -25.7508622 + ], + [ + 28.1747474, + -25.7531128 + ], + [ + 28.1748951, + -25.7529749 + ], + [ + 28.1957509, + -25.7504502 + ], + [ + 28.1956414, + -25.7503828 + ], + [ + 28.195627, + -25.750102 + ], + [ + 28.1959216, + -25.7500809 + ], + [ + 28.1959471, + -25.7503649 + ], + [ + 28.1931737, + -25.750327 + ], + [ + 28.1931845, + -25.7504328 + ], + [ + 28.1931943, + -25.7506427 + ], + [ + 28.1933984, + -25.7504478 + ], + [ + 28.1934044, + -25.7506435 + ], + [ + 28.1933035, + -25.750359 + ], + [ + 28.1933321, + -25.7507327 + ], + [ + 28.1746941, + -25.7531034 + ] + ], + "polygon_id": 18049 + }, + { + "coordinates": [ + [ + 28.2423674, + -25.7184359 + ] + ], + "polygon_id": 18055 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3103672, + -25.722453 + ], + [ + 28.3251095, + -25.7256422 + ], + [ + 28.329258, + -25.7228138 + ], + [ + 28.3318701, + -25.7210238 + ], + [ + 28.3319923, + -25.7209385 + ], + [ + 28.325182, + -25.7257436 + ], + [ + 28.3293521, + -25.7229123 + ], + [ + 28.3322717, + -25.7254762 + ], + [ + 28.3322905, + -25.7251766 + ], + [ + 28.3104771, + -25.7223986 + ], + [ + 28.31032, + -25.7223864 + ], + [ + 28.3104465, + -25.722556 + ] + ], + "polygon_id": 18058 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3323053, + -25.7289036 + ], + [ + 28.3325474, + -25.7286161 + ], + [ + 28.3295919, + -25.7375673 + ], + [ + 28.3298171, + -25.7376349 + ], + [ + 28.3323428, + -25.7284348 + ], + [ + 28.3309041, + -25.7337795 + ], + [ + 28.3310886, + -25.7338257 + ], + [ + 28.3310039, + -25.733461 + ], + [ + 28.3311926, + -25.7335087 + ], + [ + 28.3325353, + -25.7287559 + ], + [ + 28.3324917, + -25.7254797 + ], + [ + 28.3325051, + -25.7251813 + ] + ], + "polygon_id": 18060 + }, + { + "coordinates": [ + [ + 28.3320826, + -25.7288893 + ] + ], + "polygon_id": 18061 + }, + { + "coordinates": [ + [ + 28.3180264, + -25.7310281 + ], + [ + 28.314123, + -25.7343394 + ], + [ + 28.3162463, + -25.7326129 + ], + [ + 28.3162239, + -25.7326318 + ] + ], + "polygon_id": 18062 + }, + { + "coordinates": [ + [ + 28.3180264, + -25.7310281 + ], + [ + 28.314123, + -25.7343394 + ], + [ + 28.3162463, + -25.7326129 + ], + [ + 28.3162239, + -25.7326318 + ] + ], + "polygon_id": 18062 + }, + { + "coordinates": [ + [ + 28.3180264, + -25.7310281 + ], + [ + 28.314123, + -25.7343394 + ], + [ + 28.3162463, + -25.7326129 + ], + [ + 28.3162239, + -25.7326318 + ] + ], + "polygon_id": 18062 + }, + { + "coordinates": [ + [ + 28.3180264, + -25.7310281 + ], + [ + 28.314123, + -25.7343394 + ], + [ + 28.3162463, + -25.7326129 + ], + [ + 28.3162239, + -25.7326318 + ] + ], + "polygon_id": 18062 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.3161514, + -25.732522 + ], + [ + 28.3010683, + -25.7330925 + ], + [ + 28.2933922, + -25.7328597 + ], + [ + 28.2960358, + -25.7329322 + ], + [ + 28.2992277, + -25.7330241 + ], + [ + 28.3065898, + -25.733228 + ], + [ + 28.2933851, + -25.7329885 + ], + [ + 28.2960123, + -25.7330403 + ], + [ + 28.2992229, + -25.7331237 + ], + [ + 28.3010595, + -25.7331907 + ], + [ + 28.3065875, + -25.7333453 + ], + [ + 28.3139721, + -25.734311 + ], + [ + 28.3138564, + -25.7344002 + ], + [ + 28.3161246, + -25.7325448 + ] + ], + "polygon_id": 18063 + }, + { + "coordinates": [ + [ + 28.2751563, + -25.7348641 + ], + [ + 28.2699915, + -25.7374208 + ], + [ + 28.2751498, + -25.7349936 + ] + ], + "polygon_id": 18064 + }, + { + "coordinates": [ + [ + 28.2751563, + -25.7348641 + ], + [ + 28.2699915, + -25.7374208 + ], + [ + 28.2751498, + -25.7349936 + ] + ], + "polygon_id": 18064 + }, + { + "coordinates": [ + [ + 28.2751563, + -25.7348641 + ], + [ + 28.2699915, + -25.7374208 + ], + [ + 28.2751498, + -25.7349936 + ] + ], + "polygon_id": 18064 + }, + { + "coordinates": [ + [ + 28.2678068, + -25.7382103 + ], + [ + 28.2698976, + -25.7373254 + ] + ], + "polygon_id": 18067 + }, + { + "coordinates": [ + [ + 28.2678068, + -25.7382103 + ], + [ + 28.2698976, + -25.7373254 + ] + ], + "polygon_id": 18067 + }, + { + "coordinates": [ + [ + 28.2927599, + -25.7454158 + ], + [ + 28.2891199, + -25.7488645 + ], + [ + 28.2913037, + -25.7463635 + ], + [ + 28.2912518, + -25.7463024 + ] + ], + "polygon_id": 18130 + }, + { + "coordinates": [ + [ + 28.2927599, + -25.7454158 + ], + [ + 28.2891199, + -25.7488645 + ], + [ + 28.2913037, + -25.7463635 + ], + [ + 28.2912518, + -25.7463024 + ] + ], + "polygon_id": 18130 + }, + { + "coordinates": [ + [ + 28.2927599, + -25.7454158 + ], + [ + 28.2891199, + -25.7488645 + ], + [ + 28.2913037, + -25.7463635 + ], + [ + 28.2912518, + -25.7463024 + ] + ], + "polygon_id": 18130 + }, + { + "coordinates": [ + [ + 28.2927599, + -25.7454158 + ], + [ + 28.2891199, + -25.7488645 + ], + [ + 28.2913037, + -25.7463635 + ], + [ + 28.2912518, + -25.7463024 + ] + ], + "polygon_id": 18130 + }, + { + "coordinates": [ + [ + 28.3104888, + -25.7393057 + ], + [ + 28.3104121, + -25.739232 + ], + [ + 28.3294459, + -25.7378739 + ], + [ + 28.328368, + -25.7409724 + ], + [ + 28.3284675, + -25.74067 + ], + [ + 28.3294131, + -25.737949 + ], + [ + 28.3292327, + -25.7378147 + ] + ], + "polygon_id": 18131 + }, + { + "coordinates": [ + [ + 28.3104888, + -25.7393057 + ], + [ + 28.3104121, + -25.739232 + ], + [ + 28.3294459, + -25.7378739 + ], + [ + 28.328368, + -25.7409724 + ], + [ + 28.3284675, + -25.74067 + ], + [ + 28.3294131, + -25.737949 + ], + [ + 28.3292327, + -25.7378147 + ] + ], + "polygon_id": 18131 + }, + { + "coordinates": [ + [ + 28.3104888, + -25.7393057 + ], + [ + 28.3104121, + -25.739232 + ], + [ + 28.3294459, + -25.7378739 + ], + [ + 28.328368, + -25.7409724 + ], + [ + 28.3284675, + -25.74067 + ], + [ + 28.3294131, + -25.737949 + ], + [ + 28.3292327, + -25.7378147 + ] + ], + "polygon_id": 18131 + }, + { + "coordinates": [ + [ + 28.3104888, + -25.7393057 + ], + [ + 28.3104121, + -25.739232 + ], + [ + 28.3294459, + -25.7378739 + ], + [ + 28.328368, + -25.7409724 + ], + [ + 28.3284675, + -25.74067 + ], + [ + 28.3294131, + -25.737949 + ], + [ + 28.3292327, + -25.7378147 + ] + ], + "polygon_id": 18131 + }, + { + "coordinates": [ + [ + 28.3104888, + -25.7393057 + ], + [ + 28.3104121, + -25.739232 + ], + [ + 28.3294459, + -25.7378739 + ], + [ + 28.328368, + -25.7409724 + ], + [ + 28.3284675, + -25.74067 + ], + [ + 28.3294131, + -25.737949 + ], + [ + 28.3292327, + -25.7378147 + ] + ], + "polygon_id": 18131 + }, + { + "coordinates": [ + [ + 28.3104888, + -25.7393057 + ], + [ + 28.3104121, + -25.739232 + ], + [ + 28.3294459, + -25.7378739 + ], + [ + 28.328368, + -25.7409724 + ], + [ + 28.3284675, + -25.74067 + ], + [ + 28.3294131, + -25.737949 + ], + [ + 28.3292327, + -25.7378147 + ] + ], + "polygon_id": 18131 + }, + { + "coordinates": [ + [ + 28.3104888, + -25.7393057 + ], + [ + 28.3104121, + -25.739232 + ], + [ + 28.3294459, + -25.7378739 + ], + [ + 28.328368, + -25.7409724 + ], + [ + 28.3284675, + -25.74067 + ], + [ + 28.3294131, + -25.737949 + ], + [ + 28.3292327, + -25.7378147 + ] + ], + "polygon_id": 18131 + }, + { + "coordinates": [ + [ + 28.3276302, + -25.7442854 + ], + [ + 28.3265579, + -25.7503966 + ], + [ + 28.3264102, + -25.7506908 + ], + [ + 28.3278586, + -25.7444416 + ], + [ + 28.3280468, + -25.7444203 + ], + [ + 28.3278049, + -25.7441437 + ], + [ + 28.3279919, + -25.7441227 + ] + ], + "polygon_id": 18132 + }, + { + "coordinates": [ + [ + 28.3276302, + -25.7442854 + ], + [ + 28.3265579, + -25.7503966 + ], + [ + 28.3264102, + -25.7506908 + ], + [ + 28.3278586, + -25.7444416 + ], + [ + 28.3280468, + -25.7444203 + ], + [ + 28.3278049, + -25.7441437 + ], + [ + 28.3279919, + -25.7441227 + ] + ], + "polygon_id": 18132 + }, + { + "coordinates": [ + [ + 28.3276302, + -25.7442854 + ], + [ + 28.3265579, + -25.7503966 + ], + [ + 28.3264102, + -25.7506908 + ], + [ + 28.3278586, + -25.7444416 + ], + [ + 28.3280468, + -25.7444203 + ], + [ + 28.3278049, + -25.7441437 + ], + [ + 28.3279919, + -25.7441227 + ] + ], + "polygon_id": 18132 + }, + { + "coordinates": [ + [ + 28.3276302, + -25.7442854 + ], + [ + 28.3265579, + -25.7503966 + ], + [ + 28.3264102, + -25.7506908 + ], + [ + 28.3278586, + -25.7444416 + ], + [ + 28.3280468, + -25.7444203 + ], + [ + 28.3278049, + -25.7441437 + ], + [ + 28.3279919, + -25.7441227 + ] + ], + "polygon_id": 18132 + }, + { + "coordinates": [ + [ + 28.3276302, + -25.7442854 + ], + [ + 28.3265579, + -25.7503966 + ], + [ + 28.3264102, + -25.7506908 + ], + [ + 28.3278586, + -25.7444416 + ], + [ + 28.3280468, + -25.7444203 + ], + [ + 28.3278049, + -25.7441437 + ], + [ + 28.3279919, + -25.7441227 + ] + ], + "polygon_id": 18132 + }, + { + "coordinates": [ + [ + 28.3276302, + -25.7442854 + ], + [ + 28.3265579, + -25.7503966 + ], + [ + 28.3264102, + -25.7506908 + ], + [ + 28.3278586, + -25.7444416 + ], + [ + 28.3280468, + -25.7444203 + ], + [ + 28.3278049, + -25.7441437 + ], + [ + 28.3279919, + -25.7441227 + ] + ], + "polygon_id": 18132 + }, + { + "coordinates": [ + [ + 28.3276302, + -25.7442854 + ], + [ + 28.3265579, + -25.7503966 + ], + [ + 28.3264102, + -25.7506908 + ], + [ + 28.3278586, + -25.7444416 + ], + [ + 28.3280468, + -25.7444203 + ], + [ + 28.3278049, + -25.7441437 + ], + [ + 28.3279919, + -25.7441227 + ] + ], + "polygon_id": 18132 + }, + { + "coordinates": [ + [ + 28.3046773, + -25.7537902 + ], + [ + 28.3047686, + -25.7538436 + ] + ], + "polygon_id": 18135 + }, + { + "coordinates": [ + [ + 28.3046773, + -25.7537902 + ], + [ + 28.3047686, + -25.7538436 + ] + ], + "polygon_id": 18135 + }, + { + "coordinates": [ + [ + 28.2887277, + -25.7540971 + ], + [ + 28.288712, + -25.7540552 + ] + ], + "polygon_id": 18136 + }, + { + "coordinates": [ + [ + 28.2887277, + -25.7540971 + ], + [ + 28.288712, + -25.7540552 + ] + ], + "polygon_id": 18136 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1748284, + -25.7529295 + ], + [ + 28.1728852, + -25.7538742 + ], + [ + 28.165372, + -25.7543855 + ], + [ + 28.1432607, + -25.7543399 + ], + [ + 28.1478505, + -25.7556023 + ], + [ + 28.1503482, + -25.755411 + ], + [ + 28.1628703, + -25.7545541 + ], + [ + 28.1553606, + -25.7550686 + ], + [ + 28.1432273, + -25.7544144 + ], + [ + 28.1478402, + -25.7554811 + ], + [ + 28.1478607, + -25.7556822 + ], + [ + 28.147984, + -25.7555883 + ], + [ + 28.1479942, + -25.7557222 + ] + ], + "polygon_id": 18151 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.1330421, + -25.7615931 + ], + [ + 28.1330236, + -25.761748 + ], + [ + 28.1430677, + -25.7543494 + ], + [ + 28.1459717, + -25.74934 + ], + [ + 28.1401195, + -25.75903 + ], + [ + 28.1400591, + -25.7589038 + ], + [ + 28.1334883, + -25.7541352 + ], + [ + 28.1418783, + -25.7496177 + ], + [ + 28.1401686, + -25.7588599 + ], + [ + 28.1431002, + -25.7542768 + ] + ], + "polygon_id": 18152 + }, + { + "coordinates": [ + [ + 28.3570968, + -25.7665275 + ], + [ + 28.3572338, + -25.7665556 + ], + [ + 28.3572, + -25.7665971 + ] + ], + "polygon_id": 18156 + }, + { + "coordinates": [ + [ + 28.3570968, + -25.7665275 + ], + [ + 28.3572338, + -25.7665556 + ], + [ + 28.3572, + -25.7665971 + ] + ], + "polygon_id": 18156 + }, + { + "coordinates": [ + [ + 28.3570968, + -25.7665275 + ], + [ + 28.3572338, + -25.7665556 + ], + [ + 28.3572, + -25.7665971 + ] + ], + "polygon_id": 18156 + }, + { + "coordinates": [ + [ + 28.3494875, + -25.7755181 + ], + [ + 28.3535537, + -25.7714524 + ] + ], + "polygon_id": 18164 + }, + { + "coordinates": [ + [ + 28.3494875, + -25.7755181 + ], + [ + 28.3535537, + -25.7714524 + ] + ], + "polygon_id": 18164 + }, + { + "coordinates": [ + [ + 28.2606134, + -25.821462 + ], + [ + 28.2562589, + -25.8206143 + ], + [ + 28.2733287, + -25.8206901 + ], + [ + 28.2608374, + -25.8214644 + ], + [ + 28.2608937, + -25.8213195 + ], + [ + 28.260659, + -25.8213152 + ], + [ + 28.2561792, + -25.8211384 + ], + [ + 28.2732871, + -25.8207688 + ] + ], + "polygon_id": 18166 + }, + { + "coordinates": [ + [ + 28.2606134, + -25.821462 + ], + [ + 28.2562589, + -25.8206143 + ], + [ + 28.2733287, + -25.8206901 + ], + [ + 28.2608374, + -25.8214644 + ], + [ + 28.2608937, + -25.8213195 + ], + [ + 28.260659, + -25.8213152 + ], + [ + 28.2561792, + -25.8211384 + ], + [ + 28.2732871, + -25.8207688 + ] + ], + "polygon_id": 18166 + }, + { + "coordinates": [ + [ + 28.2606134, + -25.821462 + ], + [ + 28.2562589, + -25.8206143 + ], + [ + 28.2733287, + -25.8206901 + ], + [ + 28.2608374, + -25.8214644 + ], + [ + 28.2608937, + -25.8213195 + ], + [ + 28.260659, + -25.8213152 + ], + [ + 28.2561792, + -25.8211384 + ], + [ + 28.2732871, + -25.8207688 + ] + ], + "polygon_id": 18166 + }, + { + "coordinates": [ + [ + 28.2606134, + -25.821462 + ], + [ + 28.2562589, + -25.8206143 + ], + [ + 28.2733287, + -25.8206901 + ], + [ + 28.2608374, + -25.8214644 + ], + [ + 28.2608937, + -25.8213195 + ], + [ + 28.260659, + -25.8213152 + ], + [ + 28.2561792, + -25.8211384 + ], + [ + 28.2732871, + -25.8207688 + ] + ], + "polygon_id": 18166 + }, + { + "coordinates": [ + [ + 28.2606134, + -25.821462 + ], + [ + 28.2562589, + -25.8206143 + ], + [ + 28.2733287, + -25.8206901 + ], + [ + 28.2608374, + -25.8214644 + ], + [ + 28.2608937, + -25.8213195 + ], + [ + 28.260659, + -25.8213152 + ], + [ + 28.2561792, + -25.8211384 + ], + [ + 28.2732871, + -25.8207688 + ] + ], + "polygon_id": 18166 + }, + { + "coordinates": [ + [ + 28.2606134, + -25.821462 + ], + [ + 28.2562589, + -25.8206143 + ], + [ + 28.2733287, + -25.8206901 + ], + [ + 28.2608374, + -25.8214644 + ], + [ + 28.2608937, + -25.8213195 + ], + [ + 28.260659, + -25.8213152 + ], + [ + 28.2561792, + -25.8211384 + ], + [ + 28.2732871, + -25.8207688 + ] + ], + "polygon_id": 18166 + }, + { + "coordinates": [ + [ + 28.2606134, + -25.821462 + ], + [ + 28.2562589, + -25.8206143 + ], + [ + 28.2733287, + -25.8206901 + ], + [ + 28.2608374, + -25.8214644 + ], + [ + 28.2608937, + -25.8213195 + ], + [ + 28.260659, + -25.8213152 + ], + [ + 28.2561792, + -25.8211384 + ], + [ + 28.2732871, + -25.8207688 + ] + ], + "polygon_id": 18166 + }, + { + "coordinates": [ + [ + 28.2606134, + -25.821462 + ], + [ + 28.2562589, + -25.8206143 + ], + [ + 28.2733287, + -25.8206901 + ], + [ + 28.2608374, + -25.8214644 + ], + [ + 28.2608937, + -25.8213195 + ], + [ + 28.260659, + -25.8213152 + ], + [ + 28.2561792, + -25.8211384 + ], + [ + 28.2732871, + -25.8207688 + ] + ], + "polygon_id": 18166 + }, + { + "coordinates": [ + [ + 28.2819865, + -25.8066601 + ] + ], + "polygon_id": 18169 + }, + { + "coordinates": [ + [ + 28.3277535, + -25.8121175 + ], + [ + 28.3278094, + -25.8119968 + ], + [ + 28.327831, + -25.8121589 + ] + ], + "polygon_id": 18171 + }, + { + "coordinates": [ + [ + 28.3277535, + -25.8121175 + ], + [ + 28.3278094, + -25.8119968 + ], + [ + 28.327831, + -25.8121589 + ] + ], + "polygon_id": 18171 + }, + { + "coordinates": [ + [ + 28.3277535, + -25.8121175 + ], + [ + 28.3278094, + -25.8119968 + ], + [ + 28.327831, + -25.8121589 + ] + ], + "polygon_id": 18171 + }, + { + "coordinates": [ + [ + 28.3096429, + -25.8234921 + ], + [ + 28.3068748, + -25.8254164 + ], + [ + 28.3093911, + -25.823506 + ], + [ + 28.3069405, + -25.8253842 + ] + ], + "polygon_id": 18174 + }, + { + "coordinates": [ + [ + 28.3096429, + -25.8234921 + ], + [ + 28.3068748, + -25.8254164 + ], + [ + 28.3093911, + -25.823506 + ], + [ + 28.3069405, + -25.8253842 + ] + ], + "polygon_id": 18174 + }, + { + "coordinates": [ + [ + 28.3096429, + -25.8234921 + ], + [ + 28.3068748, + -25.8254164 + ], + [ + 28.3093911, + -25.823506 + ], + [ + 28.3069405, + -25.8253842 + ] + ], + "polygon_id": 18174 + }, + { + "coordinates": [ + [ + 28.3096429, + -25.8234921 + ], + [ + 28.3068748, + -25.8254164 + ], + [ + 28.3093911, + -25.823506 + ], + [ + 28.3069405, + -25.8253842 + ] + ], + "polygon_id": 18174 + }, + { + "coordinates": [ + [ + 28.2041538, + -25.7501382 + ], + [ + 28.1987426, + -25.7496718 + ], + [ + 28.2041096, + -25.7502462 + ] + ], + "polygon_id": 18182 + }, + { + "coordinates": [ + [ + 28.2041538, + -25.7501382 + ], + [ + 28.1987426, + -25.7496718 + ], + [ + 28.2041096, + -25.7502462 + ] + ], + "polygon_id": 18182 + }, + { + "coordinates": [ + [ + 28.2041538, + -25.7501382 + ], + [ + 28.1987426, + -25.7496718 + ], + [ + 28.2041096, + -25.7502462 + ] + ], + "polygon_id": 18182 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2027627, + -25.7530521 + ], + [ + 28.2035058, + -25.7516362 + ], + [ + 28.2049392, + -25.7522796 + ], + [ + 28.2093477, + -25.754157 + ], + [ + 28.2066946, + -25.7558988 + ], + [ + 28.2051947, + -25.7552592 + ], + [ + 28.2026251, + -25.7567858 + ], + [ + 28.2011549, + -25.7561682 + ], + [ + 28.1982392, + -25.7549337 + ], + [ + 28.2081421, + -25.7565161 + ], + [ + 28.2137749, + -25.7571779 + ], + [ + 28.1961435, + -25.7571853 + ], + [ + 28.1973409, + -25.7546718 + ], + [ + 28.2085357, + -25.7560156 + ], + [ + 28.2072189, + -25.754879 + ], + [ + 28.2071742, + -25.7549583 + ], + [ + 28.2057303, + -25.7542405 + ], + [ + 28.2042594, + -25.7536018 + ], + [ + 28.2028328, + -25.7529533 + ], + [ + 28.2056928, + -25.754316 + ], + [ + 28.2042146, + -25.753689 + ], + [ + 28.2003224, + -25.7522071 + ], + [ + 28.2121748, + -25.7571054 + ], + [ + 28.2121822, + -25.7570658 + ], + [ + 28.2085693, + -25.7559898 + ], + [ + 28.2121872, + -25.7570226 + ], + [ + 28.2071984, + -25.7549168 + ], + [ + 28.205714, + -25.7542756 + ], + [ + 28.2042403, + -25.7536394 + ], + [ + 28.2028051, + -25.7529919 + ], + [ + 28.200336, + -25.7521847 + ], + [ + 28.2087074, + -25.7559005 + ], + [ + 28.2086598, + -25.7559292 + ], + [ + 28.2121909, + -25.7569867 + ], + [ + 28.2067714, + -25.7559316 + ], + [ + 28.2066299, + -25.7560222 + ], + [ + 28.2066163, + -25.7558655 + ] + ], + "polygon_id": 18183 + }, + { + "coordinates": [ + [ + 28.2214605, + -25.7558952 + ], + [ + 28.221944, + -25.755911 + ], + [ + 28.2214819, + -25.7559145 + ], + [ + 28.2233796, + -25.7558173 + ], + [ + 28.2233958, + -25.7556958 + ], + [ + 28.2219231, + -25.7558765 + ] + ], + "polygon_id": 18184 + }, + { + "coordinates": [ + [ + 28.2214605, + -25.7558952 + ], + [ + 28.221944, + -25.755911 + ], + [ + 28.2214819, + -25.7559145 + ], + [ + 28.2233796, + -25.7558173 + ], + [ + 28.2233958, + -25.7556958 + ], + [ + 28.2219231, + -25.7558765 + ] + ], + "polygon_id": 18184 + }, + { + "coordinates": [ + [ + 28.2214605, + -25.7558952 + ], + [ + 28.221944, + -25.755911 + ], + [ + 28.2214819, + -25.7559145 + ], + [ + 28.2233796, + -25.7558173 + ], + [ + 28.2233958, + -25.7556958 + ], + [ + 28.2219231, + -25.7558765 + ] + ], + "polygon_id": 18184 + }, + { + "coordinates": [ + [ + 28.2214605, + -25.7558952 + ], + [ + 28.221944, + -25.755911 + ], + [ + 28.2214819, + -25.7559145 + ], + [ + 28.2233796, + -25.7558173 + ], + [ + 28.2233958, + -25.7556958 + ], + [ + 28.2219231, + -25.7558765 + ] + ], + "polygon_id": 18184 + }, + { + "coordinates": [ + [ + 28.2214605, + -25.7558952 + ], + [ + 28.221944, + -25.755911 + ], + [ + 28.2214819, + -25.7559145 + ], + [ + 28.2233796, + -25.7558173 + ], + [ + 28.2233958, + -25.7556958 + ], + [ + 28.2219231, + -25.7558765 + ] + ], + "polygon_id": 18184 + }, + { + "coordinates": [ + [ + 28.2214605, + -25.7558952 + ], + [ + 28.221944, + -25.755911 + ], + [ + 28.2214819, + -25.7559145 + ], + [ + 28.2233796, + -25.7558173 + ], + [ + 28.2233958, + -25.7556958 + ], + [ + 28.2219231, + -25.7558765 + ] + ], + "polygon_id": 18184 + }, + { + "coordinates": [ + [ + 28.2393835, + -25.7557209 + ], + [ + 28.2395086, + -25.7557497 + ], + [ + 28.2393535, + -25.7558023 + ], + [ + 28.239482, + -25.7558319 + ], + [ + 28.2251282, + -25.755803 + ], + [ + 28.2395275, + -25.7557036 + ], + [ + 28.239407, + -25.7556664 + ], + [ + 28.239336, + -25.755858 + ], + [ + 28.2252342, + -25.755809 + ] + ], + "polygon_id": 18185 + }, + { + "coordinates": [ + [ + 28.2393835, + -25.7557209 + ], + [ + 28.2395086, + -25.7557497 + ], + [ + 28.2393535, + -25.7558023 + ], + [ + 28.239482, + -25.7558319 + ], + [ + 28.2251282, + -25.755803 + ], + [ + 28.2395275, + -25.7557036 + ], + [ + 28.239407, + -25.7556664 + ], + [ + 28.239336, + -25.755858 + ], + [ + 28.2252342, + -25.755809 + ] + ], + "polygon_id": 18185 + }, + { + "coordinates": [ + [ + 28.2393835, + -25.7557209 + ], + [ + 28.2395086, + -25.7557497 + ], + [ + 28.2393535, + -25.7558023 + ], + [ + 28.239482, + -25.7558319 + ], + [ + 28.2251282, + -25.755803 + ], + [ + 28.2395275, + -25.7557036 + ], + [ + 28.239407, + -25.7556664 + ], + [ + 28.239336, + -25.755858 + ], + [ + 28.2252342, + -25.755809 + ] + ], + "polygon_id": 18185 + }, + { + "coordinates": [ + [ + 28.2393835, + -25.7557209 + ], + [ + 28.2395086, + -25.7557497 + ], + [ + 28.2393535, + -25.7558023 + ], + [ + 28.239482, + -25.7558319 + ], + [ + 28.2251282, + -25.755803 + ], + [ + 28.2395275, + -25.7557036 + ], + [ + 28.239407, + -25.7556664 + ], + [ + 28.239336, + -25.755858 + ], + [ + 28.2252342, + -25.755809 + ] + ], + "polygon_id": 18185 + }, + { + "coordinates": [ + [ + 28.2393835, + -25.7557209 + ], + [ + 28.2395086, + -25.7557497 + ], + [ + 28.2393535, + -25.7558023 + ], + [ + 28.239482, + -25.7558319 + ], + [ + 28.2251282, + -25.755803 + ], + [ + 28.2395275, + -25.7557036 + ], + [ + 28.239407, + -25.7556664 + ], + [ + 28.239336, + -25.755858 + ], + [ + 28.2252342, + -25.755809 + ] + ], + "polygon_id": 18185 + }, + { + "coordinates": [ + [ + 28.2393835, + -25.7557209 + ], + [ + 28.2395086, + -25.7557497 + ], + [ + 28.2393535, + -25.7558023 + ], + [ + 28.239482, + -25.7558319 + ], + [ + 28.2251282, + -25.755803 + ], + [ + 28.2395275, + -25.7557036 + ], + [ + 28.239407, + -25.7556664 + ], + [ + 28.239336, + -25.755858 + ], + [ + 28.2252342, + -25.755809 + ] + ], + "polygon_id": 18185 + }, + { + "coordinates": [ + [ + 28.2393835, + -25.7557209 + ], + [ + 28.2395086, + -25.7557497 + ], + [ + 28.2393535, + -25.7558023 + ], + [ + 28.239482, + -25.7558319 + ], + [ + 28.2251282, + -25.755803 + ], + [ + 28.2395275, + -25.7557036 + ], + [ + 28.239407, + -25.7556664 + ], + [ + 28.239336, + -25.755858 + ], + [ + 28.2252342, + -25.755809 + ] + ], + "polygon_id": 18185 + }, + { + "coordinates": [ + [ + 28.2393835, + -25.7557209 + ], + [ + 28.2395086, + -25.7557497 + ], + [ + 28.2393535, + -25.7558023 + ], + [ + 28.239482, + -25.7558319 + ], + [ + 28.2251282, + -25.755803 + ], + [ + 28.2395275, + -25.7557036 + ], + [ + 28.239407, + -25.7556664 + ], + [ + 28.239336, + -25.755858 + ], + [ + 28.2252342, + -25.755809 + ] + ], + "polygon_id": 18185 + }, + { + "coordinates": [ + [ + 28.2393835, + -25.7557209 + ], + [ + 28.2395086, + -25.7557497 + ], + [ + 28.2393535, + -25.7558023 + ], + [ + 28.239482, + -25.7558319 + ], + [ + 28.2251282, + -25.755803 + ], + [ + 28.2395275, + -25.7557036 + ], + [ + 28.239407, + -25.7556664 + ], + [ + 28.239336, + -25.755858 + ], + [ + 28.2252342, + -25.755809 + ] + ], + "polygon_id": 18185 + }, + { + "coordinates": [ + [ + 28.3233101, + -25.7586764 + ], + [ + 28.3233346, + -25.7584912 + ], + [ + 28.3244212, + -25.7542043 + ], + [ + 28.3245449, + -25.7539336 + ], + [ + 28.3243377, + -25.7540666 + ], + [ + 28.3243888, + -25.753952 + ] + ], + "polygon_id": 18195 + }, + { + "coordinates": [ + [ + 28.3233101, + -25.7586764 + ], + [ + 28.3233346, + -25.7584912 + ], + [ + 28.3244212, + -25.7542043 + ], + [ + 28.3245449, + -25.7539336 + ], + [ + 28.3243377, + -25.7540666 + ], + [ + 28.3243888, + -25.753952 + ] + ], + "polygon_id": 18195 + }, + { + "coordinates": [ + [ + 28.3233101, + -25.7586764 + ], + [ + 28.3233346, + -25.7584912 + ], + [ + 28.3244212, + -25.7542043 + ], + [ + 28.3245449, + -25.7539336 + ], + [ + 28.3243377, + -25.7540666 + ], + [ + 28.3243888, + -25.753952 + ] + ], + "polygon_id": 18195 + }, + { + "coordinates": [ + [ + 28.3233101, + -25.7586764 + ], + [ + 28.3233346, + -25.7584912 + ], + [ + 28.3244212, + -25.7542043 + ], + [ + 28.3245449, + -25.7539336 + ], + [ + 28.3243377, + -25.7540666 + ], + [ + 28.3243888, + -25.753952 + ] + ], + "polygon_id": 18195 + }, + { + "coordinates": [ + [ + 28.3233101, + -25.7586764 + ], + [ + 28.3233346, + -25.7584912 + ], + [ + 28.3244212, + -25.7542043 + ], + [ + 28.3245449, + -25.7539336 + ], + [ + 28.3243377, + -25.7540666 + ], + [ + 28.3243888, + -25.753952 + ] + ], + "polygon_id": 18195 + }, + { + "coordinates": [ + [ + 28.3233101, + -25.7586764 + ], + [ + 28.3233346, + -25.7584912 + ], + [ + 28.3244212, + -25.7542043 + ], + [ + 28.3245449, + -25.7539336 + ], + [ + 28.3243377, + -25.7540666 + ], + [ + 28.3243888, + -25.753952 + ] + ], + "polygon_id": 18195 + }, + { + "coordinates": [ + [ + 28.2829355, + -25.7767952 + ], + [ + 28.2882549, + -25.7684874 + ] + ], + "polygon_id": 18197 + }, + { + "coordinates": [ + [ + 28.2829355, + -25.7767952 + ], + [ + 28.2882549, + -25.7684874 + ] + ], + "polygon_id": 18197 + }, + { + "coordinates": [ + [ + 28.2889177, + -25.7788542 + ], + [ + 28.2890131, + -25.778921 + ] + ], + "polygon_id": 18203 + }, + { + "coordinates": [ + [ + 28.2889177, + -25.7788542 + ], + [ + 28.2890131, + -25.778921 + ] + ], + "polygon_id": 18203 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.2748852, + -25.7882559 + ], + [ + 28.276685, + -25.786212 + ], + [ + 28.2764973, + -25.7862522 + ], + [ + 28.2766514, + -25.7862849 + ], + [ + 28.2751132, + -25.7882046 + ], + [ + 28.2749918, + -25.7881231 + ], + [ + 28.2749971, + -25.7883439 + ], + [ + 28.2768202, + -25.7892926 + ], + [ + 28.276882, + -25.7891948 + ], + [ + 28.2769704, + -25.7892367 + ], + [ + 28.2769095, + -25.7893382 + ], + [ + 28.27331, + -25.7862064 + ] + ], + "polygon_id": 18208 + }, + { + "coordinates": [ + [ + 28.3820191, + -25.7099685 + ], + [ + 28.3849514, + -25.7082779 + ] + ], + "polygon_id": 18253 + }, + { + "coordinates": [ + [ + 28.3820191, + -25.7099685 + ], + [ + 28.3849514, + -25.7082779 + ] + ], + "polygon_id": 18253 + }, + { + "coordinates": [ + [ + 28.0967754, + -25.8097077 + ] + ], + "polygon_id": 18316 + }, + { + "coordinates": [ + [ + 28.1640434, + -25.8499818 + ], + [ + 28.1591819, + -25.8627097 + ], + [ + 28.1628715, + -25.8622713 + ], + [ + 28.1591465, + -25.8626584 + ] + ], + "polygon_id": 18329 + }, + { + "coordinates": [ + [ + 28.1640434, + -25.8499818 + ], + [ + 28.1591819, + -25.8627097 + ], + [ + 28.1628715, + -25.8622713 + ], + [ + 28.1591465, + -25.8626584 + ] + ], + "polygon_id": 18329 + }, + { + "coordinates": [ + [ + 28.1640434, + -25.8499818 + ], + [ + 28.1591819, + -25.8627097 + ], + [ + 28.1628715, + -25.8622713 + ], + [ + 28.1591465, + -25.8626584 + ] + ], + "polygon_id": 18329 + }, + { + "coordinates": [ + [ + 28.1640434, + -25.8499818 + ], + [ + 28.1591819, + -25.8627097 + ], + [ + 28.1628715, + -25.8622713 + ], + [ + 28.1591465, + -25.8626584 + ] + ], + "polygon_id": 18329 + }, + { + "coordinates": [ + [ + 28.1916235, + -25.8658863 + ], + [ + 28.1894863, + -25.8643395 + ], + [ + 28.1823651, + -25.866609 + ], + [ + 28.17947, + -25.8690416 + ], + [ + 28.1762993, + -25.870978 + ], + [ + 28.1918349, + -25.8661743 + ], + [ + 28.1737009, + -25.8725032 + ], + [ + 28.1896766, + -25.8642195 + ], + [ + 28.189612, + -25.864395 + ] + ], + "polygon_id": 18337 + }, + { + "coordinates": [ + [ + 28.1916235, + -25.8658863 + ], + [ + 28.1894863, + -25.8643395 + ], + [ + 28.1823651, + -25.866609 + ], + [ + 28.17947, + -25.8690416 + ], + [ + 28.1762993, + -25.870978 + ], + [ + 28.1918349, + -25.8661743 + ], + [ + 28.1737009, + -25.8725032 + ], + [ + 28.1896766, + -25.8642195 + ], + [ + 28.189612, + -25.864395 + ] + ], + "polygon_id": 18337 + }, + { + "coordinates": [ + [ + 28.1916235, + -25.8658863 + ], + [ + 28.1894863, + -25.8643395 + ], + [ + 28.1823651, + -25.866609 + ], + [ + 28.17947, + -25.8690416 + ], + [ + 28.1762993, + -25.870978 + ], + [ + 28.1918349, + -25.8661743 + ], + [ + 28.1737009, + -25.8725032 + ], + [ + 28.1896766, + -25.8642195 + ], + [ + 28.189612, + -25.864395 + ] + ], + "polygon_id": 18337 + }, + { + "coordinates": [ + [ + 28.1916235, + -25.8658863 + ], + [ + 28.1894863, + -25.8643395 + ], + [ + 28.1823651, + -25.866609 + ], + [ + 28.17947, + -25.8690416 + ], + [ + 28.1762993, + -25.870978 + ], + [ + 28.1918349, + -25.8661743 + ], + [ + 28.1737009, + -25.8725032 + ], + [ + 28.1896766, + -25.8642195 + ], + [ + 28.189612, + -25.864395 + ] + ], + "polygon_id": 18337 + }, + { + "coordinates": [ + [ + 28.1916235, + -25.8658863 + ], + [ + 28.1894863, + -25.8643395 + ], + [ + 28.1823651, + -25.866609 + ], + [ + 28.17947, + -25.8690416 + ], + [ + 28.1762993, + -25.870978 + ], + [ + 28.1918349, + -25.8661743 + ], + [ + 28.1737009, + -25.8725032 + ], + [ + 28.1896766, + -25.8642195 + ], + [ + 28.189612, + -25.864395 + ] + ], + "polygon_id": 18337 + }, + { + "coordinates": [ + [ + 28.1916235, + -25.8658863 + ], + [ + 28.1894863, + -25.8643395 + ], + [ + 28.1823651, + -25.866609 + ], + [ + 28.17947, + -25.8690416 + ], + [ + 28.1762993, + -25.870978 + ], + [ + 28.1918349, + -25.8661743 + ], + [ + 28.1737009, + -25.8725032 + ], + [ + 28.1896766, + -25.8642195 + ], + [ + 28.189612, + -25.864395 + ] + ], + "polygon_id": 18337 + }, + { + "coordinates": [ + [ + 28.1916235, + -25.8658863 + ], + [ + 28.1894863, + -25.8643395 + ], + [ + 28.1823651, + -25.866609 + ], + [ + 28.17947, + -25.8690416 + ], + [ + 28.1762993, + -25.870978 + ], + [ + 28.1918349, + -25.8661743 + ], + [ + 28.1737009, + -25.8725032 + ], + [ + 28.1896766, + -25.8642195 + ], + [ + 28.189612, + -25.864395 + ] + ], + "polygon_id": 18337 + }, + { + "coordinates": [ + [ + 28.1916235, + -25.8658863 + ], + [ + 28.1894863, + -25.8643395 + ], + [ + 28.1823651, + -25.866609 + ], + [ + 28.17947, + -25.8690416 + ], + [ + 28.1762993, + -25.870978 + ], + [ + 28.1918349, + -25.8661743 + ], + [ + 28.1737009, + -25.8725032 + ], + [ + 28.1896766, + -25.8642195 + ], + [ + 28.189612, + -25.864395 + ] + ], + "polygon_id": 18337 + }, + { + "coordinates": [ + [ + 28.1916235, + -25.8658863 + ], + [ + 28.1894863, + -25.8643395 + ], + [ + 28.1823651, + -25.866609 + ], + [ + 28.17947, + -25.8690416 + ], + [ + 28.1762993, + -25.870978 + ], + [ + 28.1918349, + -25.8661743 + ], + [ + 28.1737009, + -25.8725032 + ], + [ + 28.1896766, + -25.8642195 + ], + [ + 28.189612, + -25.864395 + ] + ], + "polygon_id": 18337 + }, + { + "coordinates": [ + [ + 28.2035409, + -25.8810012 + ] + ], + "polygon_id": 18346 + }, + { + "coordinates": [ + [ + 28.1883017, + -25.8723081 + ] + ], + "polygon_id": 18347 + }, + { + "coordinates": [ + [ + 28.1622653, + -25.8851477 + ], + [ + 28.1611834, + -25.8849867 + ], + [ + 28.1623684, + -25.8851642 + ] + ], + "polygon_id": 18349 + }, + { + "coordinates": [ + [ + 28.1622653, + -25.8851477 + ], + [ + 28.1611834, + -25.8849867 + ], + [ + 28.1623684, + -25.8851642 + ] + ], + "polygon_id": 18349 + }, + { + "coordinates": [ + [ + 28.1622653, + -25.8851477 + ], + [ + 28.1611834, + -25.8849867 + ], + [ + 28.1623684, + -25.8851642 + ] + ], + "polygon_id": 18349 + }, + { + "coordinates": [ + [ + 28.1083745, + -25.8770218 + ], + [ + 28.1083493, + -25.877129 + ], + [ + 28.1144502, + -25.8762596 + ], + [ + 28.1143782, + -25.876316 + ] + ], + "polygon_id": 18352 + }, + { + "coordinates": [ + [ + 28.1083745, + -25.8770218 + ], + [ + 28.1083493, + -25.877129 + ], + [ + 28.1144502, + -25.8762596 + ], + [ + 28.1143782, + -25.876316 + ] + ], + "polygon_id": 18352 + }, + { + "coordinates": [ + [ + 28.1083745, + -25.8770218 + ], + [ + 28.1083493, + -25.877129 + ], + [ + 28.1144502, + -25.8762596 + ], + [ + 28.1143782, + -25.876316 + ] + ], + "polygon_id": 18352 + }, + { + "coordinates": [ + [ + 28.1083745, + -25.8770218 + ], + [ + 28.1083493, + -25.877129 + ], + [ + 28.1144502, + -25.8762596 + ], + [ + 28.1143782, + -25.876316 + ] + ], + "polygon_id": 18352 + }, + { + "coordinates": [ + [ + 28.1065052, + -25.882353 + ], + [ + 28.1056854, + -25.8863268 + ], + [ + 28.1056619, + -25.8864931 + ] + ], + "polygon_id": 18354 + }, + { + "coordinates": [ + [ + 28.1065052, + -25.882353 + ], + [ + 28.1056854, + -25.8863268 + ], + [ + 28.1056619, + -25.8864931 + ] + ], + "polygon_id": 18354 + }, + { + "coordinates": [ + [ + 28.1065052, + -25.882353 + ], + [ + 28.1056854, + -25.8863268 + ], + [ + 28.1056619, + -25.8864931 + ] + ], + "polygon_id": 18354 + }, + { + "coordinates": [ + [ + 28.137249, + -25.9112655 + ], + [ + 28.1371922, + -25.9113263 + ], + [ + 28.1407278, + -25.9088411 + ] + ], + "polygon_id": 18360 + }, + { + "coordinates": [ + [ + 28.137249, + -25.9112655 + ], + [ + 28.1371922, + -25.9113263 + ], + [ + 28.1407278, + -25.9088411 + ] + ], + "polygon_id": 18360 + }, + { + "coordinates": [ + [ + 28.137249, + -25.9112655 + ], + [ + 28.1371922, + -25.9113263 + ], + [ + 28.1407278, + -25.9088411 + ] + ], + "polygon_id": 18360 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1593413, + -25.9104645 + ], + [ + 28.1622625, + -25.9103026 + ], + [ + 28.1514282, + -25.925621 + ], + [ + 28.1513077, + -25.9255511 + ], + [ + 28.1651094, + -25.9104577 + ], + [ + 28.159518, + -25.9103427 + ], + [ + 28.1620916, + -25.9084406 + ], + [ + 28.1621604, + -25.9103048 + ], + [ + 28.1622063, + -25.908437 + ], + [ + 28.1595222, + -25.9104651 + ], + [ + 28.16227, + -25.9104864 + ], + [ + 28.1651585, + -25.9102842 + ], + [ + 28.1649947, + -25.9102849 + ], + [ + 28.1649519, + -25.9104591 + ], + [ + 28.1514661, + -25.9255643 + ], + [ + 28.1513459, + -25.925494 + ] + ], + "polygon_id": 18364 + }, + { + "coordinates": [ + [ + 28.1444608, + -25.9280687 + ], + [ + 28.1463651, + -25.9290577 + ], + [ + 28.1400713, + -25.9257288 + ], + [ + 28.1444423, + -25.9281767 + ], + [ + 28.1463648, + -25.9291637 + ], + [ + 28.1399775, + -25.9258415 + ], + [ + 28.1378352, + -25.9282911 + ], + [ + 28.1377817, + -25.9283445 + ], + [ + 28.1399822, + -25.9256829 + ] + ], + "polygon_id": 18370 + }, + { + "coordinates": [ + [ + 28.1444608, + -25.9280687 + ], + [ + 28.1463651, + -25.9290577 + ], + [ + 28.1400713, + -25.9257288 + ], + [ + 28.1444423, + -25.9281767 + ], + [ + 28.1463648, + -25.9291637 + ], + [ + 28.1399775, + -25.9258415 + ], + [ + 28.1378352, + -25.9282911 + ], + [ + 28.1377817, + -25.9283445 + ], + [ + 28.1399822, + -25.9256829 + ] + ], + "polygon_id": 18370 + }, + { + "coordinates": [ + [ + 28.1444608, + -25.9280687 + ], + [ + 28.1463651, + -25.9290577 + ], + [ + 28.1400713, + -25.9257288 + ], + [ + 28.1444423, + -25.9281767 + ], + [ + 28.1463648, + -25.9291637 + ], + [ + 28.1399775, + -25.9258415 + ], + [ + 28.1378352, + -25.9282911 + ], + [ + 28.1377817, + -25.9283445 + ], + [ + 28.1399822, + -25.9256829 + ] + ], + "polygon_id": 18370 + }, + { + "coordinates": [ + [ + 28.1444608, + -25.9280687 + ], + [ + 28.1463651, + -25.9290577 + ], + [ + 28.1400713, + -25.9257288 + ], + [ + 28.1444423, + -25.9281767 + ], + [ + 28.1463648, + -25.9291637 + ], + [ + 28.1399775, + -25.9258415 + ], + [ + 28.1378352, + -25.9282911 + ], + [ + 28.1377817, + -25.9283445 + ], + [ + 28.1399822, + -25.9256829 + ] + ], + "polygon_id": 18370 + }, + { + "coordinates": [ + [ + 28.1444608, + -25.9280687 + ], + [ + 28.1463651, + -25.9290577 + ], + [ + 28.1400713, + -25.9257288 + ], + [ + 28.1444423, + -25.9281767 + ], + [ + 28.1463648, + -25.9291637 + ], + [ + 28.1399775, + -25.9258415 + ], + [ + 28.1378352, + -25.9282911 + ], + [ + 28.1377817, + -25.9283445 + ], + [ + 28.1399822, + -25.9256829 + ] + ], + "polygon_id": 18370 + }, + { + "coordinates": [ + [ + 28.1444608, + -25.9280687 + ], + [ + 28.1463651, + -25.9290577 + ], + [ + 28.1400713, + -25.9257288 + ], + [ + 28.1444423, + -25.9281767 + ], + [ + 28.1463648, + -25.9291637 + ], + [ + 28.1399775, + -25.9258415 + ], + [ + 28.1378352, + -25.9282911 + ], + [ + 28.1377817, + -25.9283445 + ], + [ + 28.1399822, + -25.9256829 + ] + ], + "polygon_id": 18370 + }, + { + "coordinates": [ + [ + 28.1444608, + -25.9280687 + ], + [ + 28.1463651, + -25.9290577 + ], + [ + 28.1400713, + -25.9257288 + ], + [ + 28.1444423, + -25.9281767 + ], + [ + 28.1463648, + -25.9291637 + ], + [ + 28.1399775, + -25.9258415 + ], + [ + 28.1378352, + -25.9282911 + ], + [ + 28.1377817, + -25.9283445 + ], + [ + 28.1399822, + -25.9256829 + ] + ], + "polygon_id": 18370 + }, + { + "coordinates": [ + [ + 28.1444608, + -25.9280687 + ], + [ + 28.1463651, + -25.9290577 + ], + [ + 28.1400713, + -25.9257288 + ], + [ + 28.1444423, + -25.9281767 + ], + [ + 28.1463648, + -25.9291637 + ], + [ + 28.1399775, + -25.9258415 + ], + [ + 28.1378352, + -25.9282911 + ], + [ + 28.1377817, + -25.9283445 + ], + [ + 28.1399822, + -25.9256829 + ] + ], + "polygon_id": 18370 + }, + { + "coordinates": [ + [ + 28.1444608, + -25.9280687 + ], + [ + 28.1463651, + -25.9290577 + ], + [ + 28.1400713, + -25.9257288 + ], + [ + 28.1444423, + -25.9281767 + ], + [ + 28.1463648, + -25.9291637 + ], + [ + 28.1399775, + -25.9258415 + ], + [ + 28.1378352, + -25.9282911 + ], + [ + 28.1377817, + -25.9283445 + ], + [ + 28.1399822, + -25.9256829 + ] + ], + "polygon_id": 18370 + }, + { + "coordinates": [ + [ + 28.0996209, + -25.9180069 + ], + [ + 28.0996285, + -25.9179456 + ], + [ + 28.0985963, + -25.9233404 + ] + ], + "polygon_id": 18406 + }, + { + "coordinates": [ + [ + 28.0996209, + -25.9180069 + ], + [ + 28.0996285, + -25.9179456 + ], + [ + 28.0985963, + -25.9233404 + ] + ], + "polygon_id": 18406 + }, + { + "coordinates": [ + [ + 28.0996209, + -25.9180069 + ], + [ + 28.0996285, + -25.9179456 + ], + [ + 28.0985963, + -25.9233404 + ] + ], + "polygon_id": 18406 + }, + { + "coordinates": [ + [ + 28.0995005, + -25.918011 + ] + ], + "polygon_id": 18407 + }, + { + "coordinates": [ + [ + 28.0985051, + -25.9233503 + ] + ], + "polygon_id": 18413 + } + ] +} \ No newline at end of file diff --git a/api/src/route.py b/api/src/route.py new file mode 100644 index 00000000..aa2f63c3 --- /dev/null +++ b/api/src/route.py @@ -0,0 +1,183 @@ +import sys +import requests +import json +import os + +congestion_levels = { + "low": 1, + "moderate": 2, + "heavy": 3, + "severe": 4 +} +congestion_levels_reverse = {v: k for k, v in congestion_levels.items()} + + +access_token = os.environ.get("MAPBOX_API_KEY") + +def get_loadshedding_polygons(): + api_url = 'https://witpa.codelog.co.za/api/fetchMapData' + + # Define the request payload (body) + body = { + "bottomLeft": [-90, -180], + "topRight": [90, 180] + } + + # Send a POST request to the API + witpaData = requests.post(api_url, json=body).json() + + polygons = [] + for feature in witpaData['result']['mapPolygons'][0]['features']: + if feature['properties']['PowerStatus'] == 'off': + polygon = [point for point in feature['geometry']['coordinates'][0] if len(point) == 2] + sub_polygon = [point for point in feature['geometry']['coordinates'][0] if len(point) > 2] + temp_polygon = { + "coordinates" : polygon, + "id" : feature['id'] + } + polygons.append(temp_polygon) + + + return polygons + +def get_exclusion_points(exclude): + exclusionArea = "" + first = True + for robot in exclude: + if first: + exclusionArea = f"point({robot[0]} {robot[1]})" + first = False + else: + exclusionArea = exclusionArea + f",point({robot[0]} {robot[1]})" + return exclusionArea + +def get_route(start_coords, end_coords, exclude = None ): + # Separate into start_long, start_lat, end_long, and end_lat + start_long, start_lat = start_coords + end_long, end_lat = end_coords + + endpoint = f"https://api.mapbox.com/directions/v5/mapbox/driving-traffic/{start_long},{start_lat};{end_long},{end_lat}" + params = { + "access_token": access_token, + "alternatives": "true", + "geometries": "geojson", + "language": "en", + "overview": "full", + "steps": "true" + } + + if exclude: + params["exclude"] = get_exclusion_points(exclude) + + response = requests.get(endpoint, params=params).json() + + instructions = [] + for step in response['routes'][0]['legs'][0]['steps']: + instructions.append(step['maneuver']['instruction']) + + route = { + "duration": response['routes'][0]['duration'], + "distance": response['routes'][0]['distance'], + "trafficLightsAvoided": exclude, + "instructions": instructions, + "coordinates" : response['routes'][0]['geometry']['coordinates'] + } + return route + +def point_in_polygon(point, polygon_coordinates): + x, y = point + + # Check if the point is outside the bounding box of the polygon + if(len(polygon_coordinates) == 0): + return False + min_x, min_y = min(polygon_coordinates, key=lambda p: p[0]) + max_x, max_y = max(polygon_coordinates, key=lambda p: p[0]) + + if x < min_x or x > max_x or y < min_y or y > max_y: + return False + + # Check if the point is inside the polygon using ray-casting algorithm + inside = False + n = len(polygon_coordinates) + j = n - 1 + + for i in range(n): + xi, yi = polygon_coordinates[i] + xj, yj = polygon_coordinates[j] + + if ((yi > y) != (yj > y)) and (x < (xj - xi) * (y - yi) / (yj - yi) + xi): + inside = not inside + + j = i + return inside + +#returns all the polygons that are on the route that currently have loadshedding +def get_route_polygon_ids(route): + route_polygons = [] + coordinates = route['coordinates'] + polygons = get_loadshedding_polygons() + + + for polygon in polygons: + for coordinate in coordinates: + if point_in_polygon(coordinate,polygon["coordinates"]): + route_polygons.append(polygon["id"]) + break + return route_polygons + +def get_congestion(coordinate): + traffic_endpoint = f"https://api.mapbox.com/v4/mapbox.mapbox-traffic-v1/tilequery/{coordinate[0]},{coordinate[1]}.json" + traffic_params = { + "access_token": access_token, + "radius": 1, + "dedupe": "false" + } + traffic_response = requests.get(traffic_endpoint, traffic_params).json() + congestion_level = 1 + for feature in traffic_response['features']: + congestion = feature['properties']['congestion'] + if congestion_levels[congestion] > congestion_level: + congestion_level = congestion_levels[congestion] + return congestion_levels_reverse[congestion_level] + +def get_bad_robots(robots): + bad_robots = [] + for robot in robots: + if get_congestion(robot) in ["heavy", "severe"]: + bad_robots.append(robot) + return bad_robots + +def get_route_robots(route): + #only returns the robots with loadshedding, along the route + ids = get_route_polygon_ids(route) + robots = [] + polygons = [] + with open("robots.json", 'r') as file: + polygons = json.load(file)["robots"] + + for polygon in polygons: + if polygon["polygon_id"]: + if polygon["polygon_id"] in ids: + robots.extend(polygon["coordinates"]) + + + + return get_bad_robots(robots) + + + + + +parsed_data = json.loads(sys.argv[1]) +origin = parsed_data["origin"] +destination = parsed_data["destination"] + +# first_route = get_route([28.300946,-25.729694],[28.322388,-25.741065]) +# second_route = get_route([28.300946,-25.729694],[28.322388,-25.741065],get_route_robots(first_route)) + +first_route = get_route(origin,destination) +second_route = get_route(origin,destination,get_route_robots(first_route)) + +json_response = json.dumps(second_route) +print(json_response) + diff --git a/api/src/scrapers/pythonScrappers/tshwane_data_scraper.py b/api/src/scrapers/pythonScrappers/tshwane_data_scraper.py index 885683ef..d8d41f9b 100644 --- a/api/src/scrapers/pythonScrappers/tshwane_data_scraper.py +++ b/api/src/scrapers/pythonScrappers/tshwane_data_scraper.py @@ -60,6 +60,22 @@ def formatTime(timeIn): padded_time_string = ":".join([f"{int(x):02d}" for x in time.split(":")]) return padded_time_string +def scrapeEskomDirectGroups(): + excel_data = pd.ExcelFile("./Gauteng_LS.xlsx") + excel_data = excel_data.parse("SP_List") + for index,row in excel_data.iterrows(): + data = row.tolist() + if data[1] == "City of Tshwane": + suburb = data[3] + pattern = r"(.*) \((\d+)\)" + match = re.search(pattern, suburb) + if match: + group = match.group(2) + suburb = match.group(1) + groups[group][suburb] = list() + + + def scrapeXLSX(): excel_content = requests.get(excel_url).content excel_data = pd.read_excel(excel_content, sheet_name=None) @@ -89,8 +105,8 @@ def parseGeoJSON(): # go through the suburbs for key,value in groups.items(): for suburb in value.keys(): - regex1 = re.compile(suburb + "*", re.IGNORECASE) - regex2 = re.compile(suburb.replace(" ", "")+ "*",re.IGNORECASE) + regex1 = re.compile(re.escape(suburb), re.IGNORECASE) + regex2 = re.compile(re.escape(suburb.replace(" ", "")),re.IGNORECASE) # go through the geoJSON, this is very disgusting code for feature in data["features"]: @@ -116,7 +132,7 @@ def parseGeoJSON(): # --update: send results to the server for updates # --dry: view output that will be sent to server if (__name__ == "__main__"): - if len(sys.argv) < 2: + if len(sys.argv) < 2: print("see -h for help") exit() arg1 = sys.argv[1] @@ -136,6 +152,7 @@ def parseGeoJSON(): ## impliment multiprocessing scrapeHTML() + scrapeEskomDirectGroups() scrapeXLSX() data = parseGeoJSON() toSend = { @@ -153,4 +170,4 @@ def parseGeoJSON(): print(groups) if (update): response = requests.post(url=SERVER_IP,data=jsonData,headers=headers) - print(response.text) \ No newline at end of file + print(response.text) diff --git a/api/src/tests.rs b/api/src/tests.rs index 34fd2bad..b58bcdd2 100644 --- a/api/src/tests.rs +++ b/api/src/tests.rs @@ -1,9 +1,11 @@ use super::build_rocket; +use bson::doc; +use chrono::{Utc, NaiveDateTime, DateTime}; use crate::ai::{AiInfoRequest, AiInfoResponse}; use crate::api::UnifiedResponse; use crate::auth::{AuthClaims, AuthRequest, AuthType, JWTAuthToken}; use crate::loadshedding::{ - GroupEntity, MockDBFunctionsTrait, MunicipalityEntity, SuburbEntity, TimeScheduleEntity, + GroupEntity, MockDBFunctionsTrait, MunicipalityEntity, SuburbEntity, TimeScheduleEntity, LoadSheddingStage, SuburbStatsResponse, PredictiveSuburbStatsResponse, LoadsheddingData, SASTDateTime, DBFunctionsTrait, }; use crate::scraper::convert_to_ints; use jsonwebtoken::{Algorithm, DecodingKey, Validation}; @@ -100,22 +102,8 @@ fn time_range_validation_test_pass() { #[rocket::async_test] async fn polygon_request_test() { - let mut mock = MockDBFunctionsTrait::new(); - let data = r#"[{ "_id": { "$oid": "64b6b9b30d09aa7756061c0d" }, "startHour": 20, "startMinute": 0, "stopHour": 22, "stopMinute": 30, "stages": [ { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061b00" } ] }, { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }] }, { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }] }], "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } }] "#; - let test_schedule: Vec<TimeScheduleEntity> = serde_json::from_str(data).unwrap(); - let data = r#"[{ "_id": { "$oid": "64b6b9b30d09aa7756061b9d" }, "number": 1, "suburbs": [ { "$oid": "64b6b9b30d09aa7756061b30" } ] }, { "_id": { "$oid": "64b6b9b30d09aa7756061a79" }, "number": 2, "suburbs": [ { "$oid": "64b6b9b30d09aa7756061b7d" } ] }, { "_id": { "$oid": "64b6b9b30d09aa7756061a94" }, "number": 3, "suburbs": [ { "$oid": "64b6b9b30d09aa7756061a63" }]} ]"#; - let test_groups: Vec<GroupEntity> = serde_json::from_str(data).unwrap(); - let data = r#"[ { "_id": { "$oid": "64b6b9b30d09aa7756061b30" }, "municipality": { "$oid": "64b6b9b30d09aa7756061a47" }, "name": "MUCKLENEUK", "geometry": [ 1 ] }, { "_id": { "$oid": "64b6b9b30d09aa7756061b7d" }, "municipality": { "$oid": "64b6b9b30d09aa7756061a47" }, "name": "NEWLANDS", "geometry": [ 2 ] }, { "_id": { "$oid": "64b6b9b30d09aa7756061a63" }, "municipality": { "$oid": "64b6b9b30d09aa7756061a47" }, "name": "SOSHANGUVE EAST", "geometry": [ ] }, { "_id": { "$oid": "64b6b9b30d09aa7756061a7b" }, "municipality": { "$oid": "64b6b9b30d09aa7756061a47" }, "name": "MAGALIESKRUIN", "geometry": [ 4 ] }]"#; - let test_suburbs: Vec<SuburbEntity> = serde_json::from_str(data).unwrap(); - mock.expect_collect_schedules() - .returning(move |_, _, _| Ok(test_schedule.clone())); - mock.expect_collect_groups() - .returning(move |_query, _conn, _opts| Ok(test_groups.clone())); - mock.expect_collect_suburbs() - .returning(move |_query, _conn, _opts| Ok(test_suburbs.clone())); - let data = r#"{ "_id": { "$oid": "64b6b9b30d09aa7756061a47" }, "name": "tshwane", "geometry": { "name": "SP_SA_2011|Selection", "map_layer_type": "Area", "bounds": [ [ 27.890227, -26.077549 ], [ 29.098541, -25.110155 ] ], "center": [ 28.494384, -25.593852 ], "zoom": 6, "median_zoom": 13, "count": 594, "property_names": [ "SP_CODE", "SP_CODE_st", "SP_NAME", "MP_CODE", "MP_CODE_st", "MP_NAME", "MN_MDB_C", "MN_CODE", "MN_CODE_st", "MN_NAME", "DC_MDB_C", "DC_MN_C", "DC_MN_C_st", "DC_NAME", "PR_MDB_C", "PR_CODE", "PR_CODE_st", "PR_NAME", "ALBERS_ARE", "Shape_Leng", "Shape_Area" ], "type": "FeatureCollection", "features": [ { "type": "Feature", "id": 1, "properties": { "SP_CODE": 799078003, "SP_CODE_st": "799078003", "SP_NAME": "MUCKLNEUK", "MP_CODE": 799078, "MP_CODE_st": "799078", "MP_NAME": "Olievenhoutbos", "MN_MDB_C": "TSH", "MN_CODE": 799, "MN_CODE_st": "799", "MN_NAME": "City of Tshwane", "DC_MDB_C": "TSH", "DC_MN_C": 799, "DC_MN_C_st": "799", "DC_NAME": "City of Tshwane", "PR_MDB_C": "GT", "PR_CODE": 7, "PR_CODE_st": "7", "PR_NAME": "Gauteng", "ALBERS_ARE": 0.143416, "Shape_Leng": 0.015471, "Shape_Area": 0.000013 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 28.094077, -25.908263 ], [ 28.093557, -25.908198 ], [ 28.090423, -25.907788 ], [ 28.094077, -25.908263 ] ] ] } }, { "type": "Feature", "id": 2, "properties": { "SP_CODE": 799078004, "SP_CODE_st": "799078004", "SP_NAME": "NEWLANDS", "MP_CODE": 799078, "MP_CODE_st": "799078", "MP_NAME": "Olievenhoutbos", "MN_MDB_C": "TSH", "MN_CODE": 799, "MN_CODE_st": "799", "MN_NAME": "City of Tshwane", "DC_MDB_C": "TSH", "DC_MN_C": 799, "DC_MN_C_st": "799", "DC_NAME": "City of Tshwane", "PR_MDB_C": "GT", "PR_CODE": 7, "PR_CODE_st": "7", "PR_NAME": "Gauteng", "ALBERS_ARE": 0.59043, "Shape_Leng": 0.038927, "Shape_Area": 0.000053 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 28.096909, -25.905686 ], [ 28.096212, -25.90543 ], [ 28.093557, -25.908198 ], [ 28.096909, -25.905686 ] ] ] } }, { "type": "Feature", "id": 3, "properties": { "SP_CODE": 799078005, "SP_CODE_st": "799078005", "SP_NAME": "SOSHANGUVE EAST", "MP_CODE": 799078, "MP_CODE_st": "799078", "MP_NAME": "Olievenhoutbos", "MN_MDB_C": "TSH", "MN_CODE": 799, "MN_CODE_st": "799", "MN_NAME": "City of Tshwane", "DC_MDB_C": "TSH", "DC_MN_C": 799, "DC_MN_C_st": "799", "DC_NAME": "City of Tshwane", "PR_MDB_C": "GT", "PR_CODE": 7, "PR_CODE_st": "7", "PR_NAME": "Gauteng", "ALBERS_ARE": 5.111315, "Shape_Leng": 0.11507, "Shape_Area": 0.00046 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 28.120268, -25.900284 ], [ 28.120077, -25.89996 ], [ 28.119871, -25.899611 ], [ 28.117086, -25.9021 ], [ 28.117425, -25.902778 ], [ 28.117464, -25.902857 ], [ 28.120268, -25.900284 ] ] ] } }, { "type": "Feature", "id": 4, "properties": { "SP_CODE": 799078006, "SP_CODE_st": "799078006", "SP_NAME": "MAGALIESKRUIN", "MP_CODE": 799078, "MP_CODE_st": "799078", "MP_NAME": "Olievenhoutbos", "MN_MDB_C": "TSH", "MN_CODE": 799, "MN_CODE_st": "799", "MN_NAME": "City of Tshwane", "DC_MDB_C": "TSH", "DC_MN_C": 799, "DC_MN_C_st": "799", "DC_NAME": "City of Tshwane", "PR_MDB_C": "GT", "PR_CODE": 7, "PR_CODE_st": "7", "PR_NAME": "Gauteng", "ALBERS_ARE": 0.414983, "Shape_Leng": 0.030855, "Shape_Area": 0.000037 }, "geometry": { "type": "Polygon", "coordinates": [ [ [ 28.098344, -25.917966 ], [ 28.097966, -25.917912 ], [ 28.097348, -25.918184 ], [ 28.09721, -25.918154 ], [ 28.098344, -25.917966 ] ] ] } } ] } }"#; - let test_municipality: MunicipalityEntity = serde_json::from_str(data).unwrap(); - + let test_municipality: MunicipalityEntity = serde_json::from_str(POLYGON_DATA).unwrap(); + let mock = create_mock(); // the time is the first day of a month matching the time_schedule let result = test_municipality .get_regions_at_time(2, Some(1688237449), None, &mock) @@ -171,6 +159,29 @@ async fn polygon_request_test() { ); } +#[rocket::async_test] +async fn test_buildschedule() { + let testing_time = 1694660400; + let testing_suburb: SuburbEntity = serde_json::from_str(TEST_SUBURB_DATA).unwrap(); + let mock = create_mock(); + let result = testing_suburb.build_schedule(None, &mock, Some(testing_time)).await.unwrap(); + let expected_output:PredictiveSuburbStatsResponse = serde_json::from_str(TEST_GETSCHEDULE_EXPECTED_RESULT).unwrap(); + //println!("{:?}" , serde_json::to_string(&result).unwrap()); + assert_eq!(result,expected_output); +} + +#[rocket::async_test] +async fn test_getstats() { + let testing_time = 1695265200; + let testing_suburb: SuburbEntity = serde_json::from_str(TEST_SUBURB_DATA).unwrap(); + let mock = create_mock(); + let result = testing_suburb.get_total_time_down_stats(None, &mock, Some(testing_time)).await.unwrap(); + let expected_output:SuburbStatsResponse = serde_json::from_str(TEST_GETSTATS_EXPECTED_RESULT).unwrap(); + //println!("{:?}", serde_json::to_string(&result).unwrap()); + assert_eq!(result,expected_output); +} + +/* #[rocket::async_test] async fn test_ai_endpoint() { let client = Client::tracked(build_rocket().await) @@ -180,7 +191,10 @@ async fn test_ai_endpoint() { let response = client .post(format!("/api{}", uri!(super::ai::get_ai_info))) .header(ContentType::JSON) - .json(&AiInfoRequest { polygon: vec![] }) + .json(&AiInfoRequest { + origin: Box::new([28.3, -27.73]), + destination: Box::new([28.2651, -25.7597]), + }) .dispatch() .await; @@ -190,6 +204,25 @@ async fn test_ai_endpoint() { assert!(body.success); } +*/ + +#[rocket::async_test] +async fn test_loadshedding_helpers() { + let mock = create_mock(); + let db: &dyn DBFunctionsTrait = &mock; + let start = SASTDateTime(DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp_opt(1694660400, 0).unwrap(), Utc).fixed_offset()); + let end = SASTDateTime(DateTime::<Utc>::from_utc(NaiveDateTime::from_timestamp_opt(1694746800, 0).unwrap(), Utc).fixed_offset()); + let test_schedule_conversion = LoadsheddingData { + stage: 0, + start: start, + end: end + }; + let conversion = test_schedule_conversion.convert_to_loadsheddingstage(); + let doc = doc! {}; + let compare = db.collect_one_stage_log(doc, None, None).await.unwrap(); + assert_eq!(conversion.start_time, compare.start_time); + assert_eq!(conversion.end_time, compare.end_time); +} // #[rocket::async_test] // async fn test_create_user() { @@ -223,3 +256,596 @@ async fn test_ai_endpoint() { // // Revert any database actions that may have occurred // new_user.delete(&db).await.unwrap(); // } + +// DO NOT CHANGE ONCE FINALIZED +fn create_mock() -> MockDBFunctionsTrait { + let mut mock = MockDBFunctionsTrait::new(); + // DO NOT CHANGE ONCE FINALIZED + let data = r#"[ + { + "_id": { "$oid": "64b6b9b30d09aa7756061c0d" }, + "startHour": 20, + "startMinute": 0, + "stopHour": 22, + "stopMinute": 30, + "stages": [ + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "64b6b9b30d09bb4756061c0d" }, + "startHour": 22, + "startMinute": 0, + "stopHour": 0, + "stopMinute": 30, + "stages": [ + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "64b6b9b30dabbb4756061c0d" }, + "startHour": 0, + "startMinute": 0, + "stopHour": 2, + "stopMinute": 30, + "stages": [ + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "63b6b9b30d09bb4756061c0d" }, + "startHour": 2, + "startMinute": 0, + "stopHour": 4, + "stopMinute": 30, + "stages": [ + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "63b6b9bdcd09bb4756061c0d" }, + "startHour": 4, + "startMinute": 0, + "stopHour": 6, + "stopMinute": 30, + "stages": [ + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "63b6b9b30d09bb475606dafd" }, + "startHour": 6, + "startMinute": 0, + "stopHour": 8, + "stopMinute": 30, + "stages": [ + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "63b6b9b30d09cc4756061c0d" }, + "startHour": 8, + "startMinute": 0, + "stopHour": 10, + "stopMinute": 30, + "stages": [ + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "63b6b9b30d09bcf756061c0d" }, + "startHour": 10, + "startMinute": 0, + "stopHour": 12, + "stopMinute": 30, + "stages": [ + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "63b7b9b30d09bcf756061c0d" }, + "startHour": 12, + "startMinute": 0, + "stopHour": 14, + "stopMinute": 30, + "stages": [ + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "63b6b1b30d09bcf756061c0d" }, + "startHour": 14, + "startMinute": 0, + "stopHour": 16, + "stopMinute": 30, + "stages": [ + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "63b6b9b3dd09bcf756061c0d" }, + "startHour": 16, + "startMinute": 0, + "stopHour": 18, + "stopMinute": 30, + "stages": [ + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + }, + { + "_id": { "$oid": "63b6b9b30d09bcf756061c0d" }, + "startHour": 18, + "startMinute": 0, + "stopHour": 20, + "stopMinute": 30, + "stages": [ + { "stage": 4, "groups": [ { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" }, { "$oid": "64b6b9b30d09aa7756061b9d" } ] }, + { "stage": 1, "groups": [ { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }, { "$oid": "64b6b9b30d09aa7756061a79" }] }, + { "stage": 2, "groups": [ { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }, { "$oid": "64b6b9b30d09aa7756061a94" }] }, + { "stage": 3, "groups": [ { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }, { "$oid": "64b6b9b30d09aa7756061ab6" }] } + ], + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" } + } + ] "#; + let test_schedule: Vec<TimeScheduleEntity> = serde_json::from_str(data).unwrap(); + // DO NOT CHANGE ONCE FINALIZED + // STATUS = FINALIZED + let data = r#"[ + { + "_id": { "$oid": "64b6b9b30d09aa7756061b9d" }, + "number": 1, + "suburbs": [ + { "$oid": "64b6b9b30d09aa7756061b30" } + ] + },{ + "_id": { "$oid": "64b6b9b30d09aa7756061a79" }, + "number": 2, + "suburbs": [ + { "$oid": "64b6b9b30d09aa7756061b7d" } + ] + }, { + "_id": { "$oid": "64b6b9b30d09aa7756061a94" }, + "number": 3, + "suburbs": [ { "$oid": "64b6b9b30d09aa7756061a63" }] + } + ]"#; + let test_groups: Vec<GroupEntity> = serde_json::from_str(data).unwrap(); + // DO NOT CHANGE ONCE FINALIZED + // STATUS = FINALIZED + let data = r#"[ + { + "_id": { "$oid": "64b6b9b30d09aa7756061b30" }, + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" }, + "name": "MUCKLENEUK", + "geometry": [ 1 ] + }, { + "_id": { "$oid": "64b6b9b30d09aa7756061b7d" }, + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" }, + "name": "NEWLANDS", + "geometry": [ 2 ] + }, { + "_id": { "$oid": "64b6b9b30d09aa7756061a63" }, + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" }, + "name": "SOSHANGUVE EAST", + "geometry": [ ] + }, { + "_id": { "$oid": "64b6b9b30d09aa7756061a7b" }, + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" }, + "name": "MAGALIESKRUIN", + "geometry": [ 4 ] + } + ]"#; + let test_suburbs: Vec<SuburbEntity> = serde_json::from_str(data).unwrap(); + + let data = r#"[ + { + "_id": { + "$oid": "650b1a741329313fc8b0c15b" + }, + "startTime": 1694746800, + "endTime": 1694779200, + "stage": 5 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c15a" + }, + "startTime": 1694822400, + "endTime": 1694833200, + "stage": 0 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c159" + }, + "startTime": 1694833200, + "endTime": 1694854800, + "stage": 2 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c158" + }, + "startTime": 1694854800, + "endTime": 1694872800, + "stage": 0 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c157" + }, + "startTime": 1694872800, + "endTime": 1694959200, + "stage": 0 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c156" + }, + "startTime": 1694959200, + "endTime": 1695031200, + "stage": 2 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c155" + }, + "startTime": 1695031200, + "endTime": 1695045600, + "stage": 1 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c154" + }, + "startTime": 1695045600, + "endTime": 1695092400, + "stage": 3 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c153" + }, + "startTime": 1695092400, + "endTime": 1695132000, + "stage": 0 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c152" + }, + "startTime": 1695132000, + "endTime": 1695150000, + "stage": 3 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c151" + }, + "startTime": 1695153600, + "endTime": 1695160800, + "stage": 1 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c150" + }, + "startTime": 1695160800, + "endTime": 1695178800, + "stage": 0 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c14f" + }, + "startTime": 1695178800, + "endTime": 1695218400, + "stage": 0 + }, + { + "_id": { + "$oid": "650c24c257de8d37915d203c" + }, + "startTime": 1695254400, + "endTime": 1695265200, + "stage": 1 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c14d" + }, + "startTime": 1695265200, + "endTime": 1695304800, + "stage": 0 + }, + { + "_id": { + "$oid": "650b1a741329313fc8b0c14c" + }, + "startTime": 1695304800, + "endTime": 1695351600, + "stage": 3 + }]"#; + let test_stage_logs: Vec<LoadSheddingStage> = serde_json::from_str(data).unwrap(); + + let data = r#"{ + "_id": { + "$oid": "650b1a741329313fc8b0c15c" + }, + "startTime": 1694660400, + "endTime": 1694746800, + "stage": 6 + }"#; + let test_stage_log: LoadSheddingStage = serde_json::from_str(data).unwrap(); + + let data = r#"{ + "_id": { "$oid": "64b6b9b30d09aa7756061b9d" }, + "number": 1, + "suburbs": [ + { "$oid": "64b6b9b30d09aa7756061b30" } + ] + }"#; + let test_one_group: GroupEntity = serde_json::from_str(data).unwrap(); + + mock.expect_collect_schedules() + .returning(move |_, _, _| Ok(test_schedule.clone())); + mock.expect_collect_groups() + .returning(move |_query, _conn, _opts| Ok(test_groups.clone())); + mock.expect_collect_one_group() + .returning(move |_query, _conn, _opts| Ok(test_one_group.clone())); + mock.expect_collect_suburbs() + .returning(move |_query, _conn, _opts| Ok(test_suburbs.clone())); + mock.expect_collect_stage_logs() + .returning(move |_query, _conn, _opts| Ok(test_stage_logs.clone())); + mock.expect_collect_one_stage_log() + .returning(move |_query, _conn, _opts| Ok(test_stage_log.clone())); + mock +} +const TEST_SUBURB_DATA: &'static str = r#"{ + "_id": { "$oid": "64b6b9b30d09aa7756061b30" }, + "municipality": { "$oid": "64b6b9b30d09aa7756061a47" }, + "name": "MUCKLENEUK", + "geometry": [ 1 ] +}"#; + +const TEST_GETSTATS_EXPECTED_RESULT: &'static str = "{\"totalTime\":{\"on\":2520,\"off\":7560},\"perDayTimes\":{\"Sun\":{\"on\":360,\"off\":1080},\"Mon\":{\"on\":360,\"off\":1080},\"Sat\":{\"on\":360,\"off\":1080},\"Tue\":{\"on\":360,\"off\":1080},\"Thu\":{\"on\":360,\"off\":1080},\"Fri\":{\"on\":360,\"off\":1080},\"Wed\":{\"on\":360,\"off\":1080}},\"suburb\":{\"_id\":{\"$oid\":\"64b6b9b30d09aa7756061b30\"},\"municipality\":{\"$oid\":\"64b6b9b30d09aa7756061a47\"},\"name\":\"MUCKLENEUK\",\"geometry\":[1]}}"; +const TEST_GETSCHEDULE_EXPECTED_RESULT: &'static str = "{\"timesOff\":[{\"start\":1694743200,\"end\":1694665800},{\"start\":1694750400,\"end\":1694673000},{\"start\":1694757600,\"end\":1694680200},{\"start\":1694764800,\"end\":1694687400},{\"start\":1694772000,\"end\":1694694600},{\"start\":1694779200,\"end\":1694701800},{\"start\":1694786400,\"end\":1694709000},{\"start\":1694793600,\"end\":1694716200},{\"start\":1694800800,\"end\":1694723400},{\"start\":1694728800,\"end\":1694737800},{\"start\":1694822400,\"end\":1694745000},{\"start\":1694829600,\"end\":1694752200},{\"start\":1694836800,\"end\":1694759400},{\"start\":1694844000,\"end\":1694766600},{\"start\":1694851200,\"end\":1694773800},{\"start\":1694858400,\"end\":1694781000},{\"start\":1694865600,\"end\":1694788200},{\"start\":1694872800,\"end\":1694795400},{\"start\":1694880000,\"end\":1694802600},{\"start\":1694887200,\"end\":1694809800},{\"start\":1694815200,\"end\":1694824200},{\"start\":1694916000,\"end\":1694838600},{\"start\":1694923200,\"end\":1694845800},{\"start\":1695038400,\"end\":1694961000},{\"start\":1694973600,\"end\":1694982600},{\"start\":1695002400,\"end\":1695011400},{\"start\":1695096000,\"end\":1695018600},{\"start\":1695031200,\"end\":1695040200},{\"start\":1695124800,\"end\":1695047400},{\"start\":1695132000,\"end\":1695054600},{\"start\":1695060000,\"end\":1695069000},{\"start\":1695074400,\"end\":1695083400},{\"start\":1695088800,\"end\":1695097800},{\"start\":1695211200,\"end\":1695133800},{\"start\":1695218400,\"end\":1695141000},{\"start\":1695146400,\"end\":1695155400},{\"start\":1695261600,\"end\":1695270600},{\"start\":1695384000,\"end\":1695306600},{\"start\":1695391200,\"end\":1695313800},{\"start\":1695319200,\"end\":1695328200},{\"start\":1695333600,\"end\":1695342600},{\"start\":1695348000,\"end\":1695357000},{\"start\":1695441600,\"end\":1695364200},{\"start\":1695448800,\"end\":1695371400},{\"start\":1695376800,\"end\":1695385800},{\"start\":1695470400,\"end\":1695393000}]}"; +const POLYGON_DATA: &'static str = r#"{ + "_id": { "$oid": "64b6b9b30d09aa7756061a47" }, + "name": "tshwane", + "geometry": { + "name": "SP_SA_2011|Selection", + "map_layer_type": "Area", + "bounds": [ + [ 27.890227, -26.077549 ], + [ 29.098541, -25.110155 ] + ], + "center": [ 28.494384, -25.593852 ], + "zoom": 6, + "median_zoom": 13, + "count": 594, + "property_names": [ + "SP_CODE", + "SP_CODE_st", + "SP_NAME", + "MP_CODE", + "MP_CODE_st", + "MP_NAME", + "MN_MDB_C", + "MN_CODE", + "MN_CODE_st", + "MN_NAME", + "DC_MDB_C", + "DC_MN_C", + "DC_MN_C_st", + "DC_NAME", + "PR_MDB_C", + "PR_CODE", + "PR_CODE_st", + "PR_NAME", + "ALBERS_ARE", + "Shape_Leng", + "Shape_Area" + ], + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "id": 1, + "properties": { + "SP_CODE": 799078003, + "SP_CODE_st": "799078003", + "SP_NAME": "MUCKLNEUK", + "MP_CODE": 799078, + "MP_CODE_st": "799078", + "MP_NAME": "Olievenhoutbos", + "MN_MDB_C": "TSH", + "MN_CODE": 799, + "MN_CODE_st": "799", + "MN_NAME": "City of Tshwane", + "DC_MDB_C": "TSH", + "DC_MN_C": 799, + "DC_MN_C_st": "799", + "DC_NAME": "City of Tshwane", + "PR_MDB_C": "GT", + "PR_CODE": 7, + "PR_CODE_st": "7", + "PR_NAME": "Gauteng", + "ALBERS_ARE": 0.143416, + "Shape_Leng": 0.015471, + "Shape_Area": 0.000013 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ 28.094077, -25.908263 ], + [ 28.093557, -25.908198 ], + [ 28.090423, -25.907788 ], + [ 28.094077, -25.908263 ] + ] + ] + } + }, { + "type": "Feature", + "id": 2, + "properties": { + "SP_CODE": 799078004, + "SP_CODE_st": "799078004", + "SP_NAME": "NEWLANDS", + "MP_CODE": 799078, + "MP_CODE_st": "799078", + "MP_NAME": "Olievenhoutbos", + "MN_MDB_C": "TSH", + "MN_CODE": 799, + "MN_CODE_st": "799", + "MN_NAME": "City of Tshwane", + "DC_MDB_C": "TSH", + "DC_MN_C": 799, + "DC_MN_C_st": "799", + "DC_NAME": "City of Tshwane", + "PR_MDB_C": "GT", + "PR_CODE": 7, + "PR_CODE_st": "7", + "PR_NAME": "Gauteng", + "ALBERS_ARE": 0.59043, + "Shape_Leng": 0.038927, + "Shape_Area": 0.000053 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ 28.096909, -25.905686 ], + [ 28.096212, -25.90543 ], + [ 28.093557, -25.908198 ], + [ 28.096909, -25.905686 ] + ] + ] + } + }, { + "type": "Feature", + "id": 3, + "properties": { + "SP_CODE": 799078005, + "SP_CODE_st": "799078005", + "SP_NAME": "SOSHANGUVE EAST", + "MP_CODE": 799078, + "MP_CODE_st": "799078", + "MP_NAME": "Olievenhoutbos", + "MN_MDB_C": "TSH", + "MN_CODE": 799, + "MN_CODE_st": "799", + "MN_NAME": "City of Tshwane", + "DC_MDB_C": "TSH", + "DC_MN_C": 799, + "DC_MN_C_st": "799", + "DC_NAME": "City of Tshwane", + "PR_MDB_C": "GT", + "PR_CODE": 7, + "PR_CODE_st": "7", + "PR_NAME": "Gauteng", + "ALBERS_ARE": 5.111315, + "Shape_Leng": 0.11507, + "Shape_Area": 0.00046 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ 28.120268, -25.900284 ], + [ 28.120077, -25.89996 ], + [ 28.119871, -25.899611 ], + [ 28.117086, -25.9021 ], + [ 28.117425, -25.902778 ], + [ 28.117464, -25.902857 ], + [ 28.120268, -25.900284 ] + ] + ] + } + }, { + "type": "Feature", + "id": 4, + "properties": { + "SP_CODE": 799078006, + "SP_CODE_st": "799078006", + "SP_NAME": "MAGALIESKRUIN", + "MP_CODE": 799078, + "MP_CODE_st": "799078", + "MP_NAME": "Olievenhoutbos", + "MN_MDB_C": "TSH", + "MN_CODE": 799, + "MN_CODE_st": "799", + "MN_NAME": "City of Tshwane", + "DC_MDB_C": "TSH", + "DC_MN_C": 799, + "DC_MN_C_st": "799", + "DC_NAME": "City of Tshwane", + "PR_MDB_C": "GT", + "PR_CODE": 7, + "PR_CODE_st": "7", + "PR_NAME": "Gauteng", + "ALBERS_ARE": 0.414983, + "Shape_Leng": 0.030855, + "Shape_Area": 0.000037 + }, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ 28.098344, -25.917966 ], + [ 28.097966, -25.917912 ], + [ 28.097348, -25.918184 ], + [ 28.09721, -25.918154 ], + [ 28.098344, -25.917966 ] + ] + ] + } + } + ] + } +}"#; diff --git a/api/src/user.rs b/api/src/user.rs index 79786b6e..00ae94c8 100644 --- a/api/src/user.rs +++ b/api/src/user.rs @@ -29,25 +29,31 @@ pub async fn create_user( return ApiError::ServerError("Database is unavailable. Please try again later!").into(); } - let state = state.inner().as_ref().unwrap(); - let mut query = Document::new(); query.insert("email", new_user.email.clone()); - let mut result = User::query(query, &state.database(DB_NAME)) - .await - .expect("Couldn't query users"); - - while result.advance().await.expect("Couldn't advance cursor") { - let user = result - .deserialize_current() - .expect("Couldn't deserialize database user"); - if user.email == new_user.email { - return ApiError::UserCreationError("A user with that email already exists").into(); + let email_collisions = match User::find( + bson::doc! { + "email": &new_user.email + }, + &state.as_ref().unwrap().database(DB_NAME), + None, + ) + .await + { + Ok(user) => user, + Err(err) => { + log::error!("Couldn't query the database! {err:?}"); + return ApiError::ServerError("Couldn't query the database to validate user request") + .into(); } + }; + + if email_collisions.len() > 0 { + return ApiError::UserCreationError("A user with that email already exists!").into(); } User::from(new_user.into_inner()) - .insert(&state.database(DB_NAME)) + .insert(&state.as_ref().unwrap().database(DB_NAME)) .await .expect("Couldn't insert new user!"); @@ -69,14 +75,12 @@ pub async fn add_saved_place( return ApiError::AuthError("Authenticated user required").into(); } - let email = token.email.unwrap(); let db = state.as_ref().unwrap().database(DB_NAME); - let mut doc = Document::new(); - doc.insert("email", email); - let mut user = dbg!(if let Ok(mut user) = User::query(doc, &db).await { - user.advance().await.expect("Couldn't fetch user!"); - user.deserialize_current().unwrap() + let mut user = dbg!(if let Some(user) = + User::find_one(bson::doc! { "email": &token.email }, &db, None).await + { + user } else { return ApiError::ServerError("The requested user could not be found").into(); }); @@ -114,26 +118,20 @@ pub async fn get_saved_places( return ApiError::AuthError("Only authenticated users can use this endpoint").into(); } - let email = token.email.unwrap(); - let doc = bson::doc! { - "email": email - }; - - let db = state.as_ref().unwrap().database(DB_NAME); - if let Ok(mut cursor) = User::query(doc, &db).await { - if let Ok(true) = cursor.advance().await { - let user = cursor.deserialize_current().unwrap(); - ApiResponse::Ok( - user.saved_places - .into_iter() - .map(|(_, v)| v) - .collect::<Vec<_>>(), - ) - } else { - ApiError::ServerError("Couldn't find your user").into() - } - } else { - ApiError::ServerError("Couldn't query the database for your user").into() + match User::find_one( + bson::doc! { + "email": &token.email + }, + &state + .as_ref() + .expect("This rocket instance has not attached database!") + .database(DB_NAME), + None, + ) + .await + { + Some(user) => ApiResponse::Ok(user.saved_places.into_iter().map(|x| x.1).collect()), + None => ApiError::AuthError("We couldn't find the user associated with that token").into(), } } @@ -149,24 +147,21 @@ pub async fn delete_saved_place( } let email = token.email.unwrap(); - let doc = bson::doc! { - "email": email - }; - let db = state.as_ref().unwrap().database(DB_NAME); - let mut user = dbg!(match User::query(doc, &db).await { - Ok(mut cursor) => { - if let Ok(true) = cursor.advance().await { - cursor.deserialize_current().unwrap() - } else { - return ApiError::AuthError("Couldn't find your user").into(); - } - } - Err(err) => { - log::error!("Couldn't fetch user from database: {err:?}"); - return ApiError::ServerError("Couldn't query the database to find your user").into(); - } - }); + let mut user = if let Some(user) = User::find_one( + bson::doc! { "email": email }, + &state + .as_ref() + .expect("This rocket instance has no database!") + .database(DB_NAME), + None, + ) + .await + { + user + } else { + return ApiError::AuthError("Couldn't find user associated with token").into(); + }; if !user.saved_places.contains_key(id) { ApiError::SavedPlacesError("The provided id doesn't exist").into() @@ -202,14 +197,27 @@ pub struct UserLocation { pub city: String, } -#[derive(Debug, Serialize, Deserialize, Clone, ToSchema)] +#[derive(Debug, Serialize, Default, Deserialize, Clone, ToSchema)] #[serde(rename_all = "camelCase")] +#[schema(example = json! { + SavedPlace { + mapbox_id: "abcdefg".to_string(), + name: "Home".to_string(), + address: "1 Average Str, Joeville".to_string(), + latitude: 0.0, + longitude: 0.0, + category: Some("average".to_string()), + place_type: "unkown".to_string(), + } +})] pub struct SavedPlace { pub mapbox_id: String, pub name: String, pub address: String, pub latitude: f64, pub longitude: f64, + pub category: Option<String>, + pub place_type: String, } #[derive(Debug, Serialize, Deserialize, Clone, Entity)] diff --git a/app/WhereIsThePower/.firebaserc b/app/WhereIsThePower/.firebaserc index fec127cf..4b3d3c98 100644 --- a/app/WhereIsThePower/.firebaserc +++ b/app/WhereIsThePower/.firebaserc @@ -1,5 +1,18 @@ { "projects": { "default": "whereisthepower-33a66" - } -} + }, + "targets": { + "whereisthepower-33a66": { + "hosting": { + "prod": [ + "whereisthepower-33a66" + ], + "dev": [ + "whereisthepowerdev" + ] + } + } + }, + "etags": {} +} \ No newline at end of file diff --git a/app/WhereIsThePower/android/app/src/main/AndroidManifest.xml b/app/WhereIsThePower/android/app/src/main/AndroidManifest.xml index e8b35355..e869a45a 100644 --- a/app/WhereIsThePower/android/app/src/main/AndroidManifest.xml +++ b/app/WhereIsThePower/android/app/src/main/AndroidManifest.xml @@ -38,5 +38,6 @@ <!-- Permissions --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> + <uses-feature android:name="android.hardware.location.gps" /> <uses-permission android:name="android.permission.INTERNET" /> </manifest> diff --git a/app/WhereIsThePower/firebase.json b/app/WhereIsThePower/firebase.json index 2aa9fa3f..34b769ae 100644 --- a/app/WhereIsThePower/firebase.json +++ b/app/WhereIsThePower/firebase.json @@ -1,5 +1,51 @@ { - "hosting": { + "hosting":[ + { + "target": "prod", + "public": "www", + "ignore": [ + "firebase.json", + "**/.*", + "**/node_modules/**" + ], + "rewrites": [ + { + "source": "**", + "destination": "/index.html" + } + ], + "headers": [ + { + "source": "**", + "headers": [ + { + "key": "Cache-Control", + "value": "no-cache, no-store, must-revalidate" + } + ] + }, + { + "source": "**/*.@(jpg|jpeg|gif|png|svg|webp|js|css|eot|otf|ttf|ttc|woff|font.css)", + "headers": [ + { + "key": "Cache-Control", + "value": "no-cache" + } + ] + }, + { + "source": "ngsw-worker.js", + "headers": [ + { + "key": "Cache-Control", + "value": "no-cache" + } + ] + } + ] + }, + { + "target": "dev", "public": "www", "ignore": [ "firebase.json", @@ -42,4 +88,5 @@ } ] } +] } diff --git a/app/WhereIsThePower/package.json b/app/WhereIsThePower/package.json index 5be267f2..10d11925 100644 --- a/app/WhereIsThePower/package.json +++ b/app/WhereIsThePower/package.json @@ -57,7 +57,7 @@ "@angular/compiler": "^16.0.0", "@angular/compiler-cli": "^16.0.0", "@angular/language-service": "^16.0.0", - "@capacitor/assets": "^2.0.4", + "@capacitor/assets": "^3.0.0", "@capacitor/cli": "5.2.2", "@cypress/schematic": "^2.5.0", "@ionic/angular-toolkit": "^9.0.0", diff --git a/app/WhereIsThePower/src/app/app-routing.module.ts b/app/WhereIsThePower/src/app/app-routing.module.ts index ac89e3f3..8b6a7901 100644 --- a/app/WhereIsThePower/src/app/app-routing.module.ts +++ b/app/WhereIsThePower/src/app/app-routing.module.ts @@ -13,8 +13,11 @@ const routes: Routes = [ { path: 'tab-profile', loadChildren: () => import('./tab-profile/tab-profile.module').then( m => m.TabProfilePageModule) - } - + }, + { + path: 'report', + loadChildren: () => import('./report/report.module').then(m => m.ReportPageModule) + }, ]; @NgModule({ imports: [ diff --git a/app/WhereIsThePower/src/app/app.component.html b/app/WhereIsThePower/src/app/app.component.html index bb471727..f173ab2c 100644 --- a/app/WhereIsThePower/src/app/app.component.html +++ b/app/WhereIsThePower/src/app/app.component.html @@ -32,6 +32,8 @@ <h2>Where is the Power?</h2> <ion-icon slot="start" name="person-circle"></ion-icon> <ion-label>Profile</ion-label> </ion-item> + + <!-- DEVELOPER SITE INJECTION --> </ion-menu-toggle> </ion-list> </ion-content> diff --git a/app/WhereIsThePower/src/app/authentication/auth.service.ts b/app/WhereIsThePower/src/app/authentication/auth.service.ts index a066a6d4..2b778388 100644 --- a/app/WhereIsThePower/src/app/authentication/auth.service.ts +++ b/app/WhereIsThePower/src/app/authentication/auth.service.ts @@ -6,7 +6,6 @@ import { Preferences } from '@capacitor/preferences'; import { BehaviorSubject, Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { HttpHeaders } from '@angular/common/http'; -import { Place } from '../tab-saved/place'; @Injectable({ providedIn: 'root' @@ -80,19 +79,4 @@ export class AuthService { "mapboxId": "dXJuOm1ieHJldDpDcERqSFJpdzlKcXlVbVlHd0dvaGtzWlFpSWt2Vy1nbHR0YXBwWTZ0QUNoLWI5WVJmbjJicTg5Wi1tMFN3bjJ0MTJxOFdSemw3WFZpXzVmLVhLSVpTLWY1T2tMRlZfWFVoYVhzb09hOTdRMG1mSXZpS09yTkhtR0J5QVg1NVg4cVBFakUwcnhBaUVYWFYyWkFiZXkzVEg1QzdUbGJubW43dnZaYnFsUUdPSi1BNlFuV1Z4U0poQjROdG9ZLXV5aktUREdGRnNwVDY0bFZFdFBMMW1XX3lRSEZTX3AyN1ZFNF9EOWNrdzdKUkRsUWVqb3J1a1JCX2lmWFJFQVNKT3U1dXdlajk5QUdfb1JXd1ZPd1o3MzZDTVZ4RUhrYjU3Qk9DTU05LXE4OENKWVhyM3pDM1lhRDk2eFRKQXBGbGVFQTJuTkp6dzRhU29leHp1OWh6YlotOGxFYldiNW4zYmNhOTZTUzRoOVpuVEtUVTZhTjlocjFVQ2lGaEJBY3lyY19MVzlxYnZQSDFEYm5Obk50QjRTVkNpQkZqdlFFZW9ZOGNoa0NheGJUWXBXVUZGX0FWNWp3NXA1aDRsdURLTmtNUmFKVTZmdm80VEx0VlNNUkkwU2d2VUFPUmcxZ3ZqWTZNVmFjd05FUktjdVBoSHFIei1JeEh4SWMyVVIyck9CeHRFOXY3ODY1ZFlud0J6RWZNNGo3REdxc3owd3NfZFF0ZkJfN1FPRUR3bTNobnF4akJ6QUxDTkhjWUtJWlRtb2RtcWhVMElGdnktTTU2S1llNmxLSXcyUVJodlBwS2tKaVNQRk1FVkVvTWhPTm45OGpqZHNNZ3pWaldLVVh4dWdIQjN2eWdReHk5NjlMNEdaOFJHQ1BUNjVPaG0yVlg3cVNPZ0NlMXlHZ3pJRUhtUEtXZ0p5anZtT0NobjBRRWRNemdsOVBtY2FiZzF6ZFlmTkV1QThCNDJFYzFZUy1wRjQ4c25UN080bDhERkg4RjR6TFdXVHhDQUtyUVhNTlkwZUNuVmNMQ3BYVXltMW82TG9kUFdmYi1MVE5ieXR4aURQRk0wa3JTR1RWM0NDMmNveUdCVW03OVp4c29RTmZLU3NJTFIwcjVYa0sxdXFodzNPaVV4UlBiU2tJVGNYMXAzWU1XS0djRURDUnd2bThmVkJGaUR0MFJTS28yd2UwVGxlM3Q2OW1nX1oxd3ktRkF5ek5kNkdHa0NYeGYxV184cDhESUdhU3RoeUw2WERQNU9fbXFEOXp6STdsTTllVUw3OE9RcDQ5QV9mc2RPb1l2UTctanpqZkpkR0pjZGV3QTVCQkt3VEMzZDFOTFlySWR5cFR0eWdmWGFBQlVvNFJfRWZielJRWUxnR0lkTDV2QTFUcEsxYmgwdEJqblhTLVRHbHJmcWkwSkpEb0hxRUhxek4xYUo3cndiNlJ4WjQ3Uk5KSG9TNlNobDZ2dmtGVnhHUXRjUTNJZjBvdDFOYzZQU2d0VHZKeUFNV2JlY3BjWDV1TU5hV3hCbFI0QlMwZVRZZHRUUWxjT2c5Vk9hdzNRWS0tSlhXZjRXS1lsU2VMUUJhZ19wMXdpRWVVRjdCeUVYUXFnb3Z2VF9VUnVhaHg3VGZfcGZ0UFcwcGd5NWgwSzVIVDdJYjYtbFVseUFCTU9nOVFHY1VMY1pXUjlSOEtDY3dFVGlNZy0tb3NHbEpYMFlPRll1dmtWZ0dtWnVKcjFUTUpXV2tsOWlENS1qTnNueFFXT0x6aWtwQ1NHeG5OX0ZDZ1dYMTJSWG9ELW1LRnItSkZELTZFbzltenZyc1JTVnZHWDFkNTRMLVU2d2lEU1djSFhRYUwyQlJ1OVNhcEdlY1VBVjdncTZPcGhDVlN6ZUV5QUV4SHBXUXhRTkdnWXZUY3liY19ReVJlenFnb0NCYlFEdkphLUpZbElKOW9BYUJRSDBkcG9RRlVQWGNQM1g0NV9WMWx3QmVsdjkyTHhlX21MWXJZT3NYZHRraUhBLTVEMjMxWVJIQzFwVldRSXc3MzZHTnFxRFlmMjNqQXo4M1pqVGxXem1XQmtlRlhCWnRjNHBPNDk1c1AzNkJQVTdTZktYaGttWWNZTW91NHhrZGlTc29jYmdOUGI2RXVDNHNyM3FRM202UTJLb3pFdEhWallRQnppM1llN20xRHdpT291R092aHlscnM1M1hzNXdNZTBYd1NqVTI5VnhEby03b2lsQm9HWjZtNmpJX2Fyell1UFdxM2dnZUFmd24xQ3YyS2VSbENaenpEaHB3UUJUM0xmVnlrSU0wb0RWc3M1VVJObHBKcnJEWkwwbkk0UVlJamU2b1ducFBjaW5uYTZ5OHJ0bXRrRG5GMVRoaGhVYmdLZzBuRjY4cjRxTFpLc1VHbHlOTmxVczBnV2EtY19qZWQyQVZBQUQwSG84Mk1zSW9WMVpFemp0RmdEbXM3WGRNZ25pX3oxMHNVVjhxOVZkLW00UV9Ra2czSE1kWjVQaVlleUluUE1UbzFxY0Fjek91ZUl3YmNPUWlsbVFCZ3lSd3U0djVHNGNwa3NCRVpBRmRTMVhpV1BiRWJxbUZGR0FXellVTEhFTnZtVHZIZ3dmb1VGUkpJc2FmVEVEdzZFejNSM3N4dXdtajJvajU0V1pFWU9VPQ==", "name": "Home" }*/ - - getPlaces() { - // console.log("this.headersFFFFFFFF",this.headers); - return this.httpClient.get(`${this.apiUrl}user/savedPlaces`, { headers: this.headers }); - } - - addSavedPlace(newPlace: Place) { - console.log("add saved place"); - console.log("place",newPlace); - console.log("HEADER", this.headers); - - return this.httpClient.put(`${this.apiUrl}user/savedPlaces`, newPlace, { headers: this.headers }) - } - - } diff --git a/app/WhereIsThePower/src/app/report/report-routing.module.ts b/app/WhereIsThePower/src/app/report/report-routing.module.ts new file mode 100644 index 00000000..374d99d4 --- /dev/null +++ b/app/WhereIsThePower/src/app/report/report-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { ReportPage } from './report.page'; + +const routes: Routes = [ + { + path: '', + component: ReportPage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class ReportPageRoutingModule {} diff --git a/app/WhereIsThePower/src/app/report/report.module.ts b/app/WhereIsThePower/src/app/report/report.module.ts new file mode 100644 index 00000000..919a0f87 --- /dev/null +++ b/app/WhereIsThePower/src/app/report/report.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { ReportPageRoutingModule } from './report-routing.module'; + +import { ReportPage } from './report.page'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + ReportPageRoutingModule + ], + declarations: [ReportPage] +}) +export class ReportPageModule {} diff --git a/app/WhereIsThePower/src/app/report/report.page.html b/app/WhereIsThePower/src/app/report/report.page.html new file mode 100644 index 00000000..c7d8e12b --- /dev/null +++ b/app/WhereIsThePower/src/app/report/report.page.html @@ -0,0 +1,90 @@ +<ion-header [translucent]="true"> + <ion-toolbar> + <ion-buttons slot="start"> + <!-- Close button --> + <ion-button routerLink="/tabs/tab-navigate" routerLinkActive="active"> + <ion-icon slot="icon-only" name="arrow-back-outline"></ion-icon> + </ion-button> + </ion-buttons> + <ion-title>Report issue</ion-title> + </ion-toolbar> +</ion-header> + +<ion-content [fullscreen]="true"> + <div *ngIf="!isLoggedIn; else elseIsloggedIn"> + <ion-row> + <ion-col size="6" offset="3" size-md="3" offset-md="4.5" size-xl="2" offset-xl="5"> + <ion-img + src="assets/Stop.svg" + alt="Stop sign Illustration" + class="ion-padding" + > + </ion-img> + </ion-col> + </ion-row> + <ion-row> + <ion-col size="12" size-md="6" offset-md="3" size-xl="4" offset-xl="4" class="ion-text-center"> + <h3>Reporting is only available to registered users. </h3> + </ion-col> + <ion-col size="12" size-md="6" offset-md="3" size-xl="4" offset-xl="4"> + <ion-button [routerLink]="['/tabs/tab-profile']" routerLinkActive="router-link-active" expand="block">Go to Profile</ion-button> + </ion-col> + </ion-row> + </div> + <ng-template #elseIsloggedIn> + <ion-grid> + <ion-row class = "ion-margin-bottom ion-text-center"> + <ion-col size="6" size-xl="3" offset-xl="1.5" class="ion-text-center ion-margin-bottom"> + <ion-card (click)="report('SubstationBlew')"> + <ion-card-content> + <ion-icon src="assets/SubstationBlew.svg"> + + </ion-icon> + </ion-card-content> + </ion-card> + <ion-label><h5>Substation Blew</h5></ion-label> + </ion-col> + <ion-col size="6" size-xl="3" class="ion-text-center ion-margin-bottom"> + <ion-card (click)="report('CablesStolen')"> + <ion-card-content> + <ion-icon src="assets/CablesStolen.svg"> + + </ion-icon> + </ion-card-content> + </ion-card> + <ion-label>Cables Stolen</ion-label> + </ion-col> + <ion-col size="6" size-xl="3" class="ion-text-center ion-margin-bottom"> + <ion-card (click)="report('PowerOutage')"> + <ion-card-content> + <ion-icon src="assets/PowerOutage.svg"> + + </ion-icon> + </ion-card-content> + </ion-card> + <ion-label>Power Outage</ion-label> + </ion-col> + <ion-col size="6" size-xl="3" offset-xl="1.5" class="ion-text-center ion-margin-bottom"> + <ion-card (click)="report('CablesDamaged')"> + <ion-card-content> + <ion-icon src="assets/CablesDamaged.svg"> + + </ion-icon> + </ion-card-content> + </ion-card> + <ion-label>Cables Damaged</ion-label> + </ion-col> + <ion-col size="6" size-xl="3" class="ion-text-center ion-margin-bottom"> + <ion-card (click)="report('Traffic')"> + <ion-card-content> + <ion-icon src="assets/Traffic.svg"> + + </ion-icon> + </ion-card-content> + </ion-card> + <ion-label>Traffic</ion-label> + </ion-col> + </ion-row> + </ion-grid> + </ng-template> +</ion-content> diff --git a/app/WhereIsThePower/src/app/report/report.page.scss b/app/WhereIsThePower/src/app/report/report.page.scss new file mode 100644 index 00000000..9e2ff198 --- /dev/null +++ b/app/WhereIsThePower/src/app/report/report.page.scss @@ -0,0 +1,23 @@ +ion-card { + background-color: var(--ion-color-primary-tint); + color: #fff; + aspect-ratio: 1 / 1; + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 8px; + } + + ion-icon { + font-size: 132px; + } + + ion-text{ + color: #000; + } + + @media screen and (max-width: 500px) { + ion-icon { + font-size: 88px; + } + } \ No newline at end of file diff --git a/app/WhereIsThePower/src/app/report/report.page.ts b/app/WhereIsThePower/src/app/report/report.page.ts new file mode 100644 index 00000000..17e98812 --- /dev/null +++ b/app/WhereIsThePower/src/app/report/report.page.ts @@ -0,0 +1,49 @@ +import { Component, OnInit } from '@angular/core'; +import { ReportService } from './report.service'; +import { Subscription } from 'rxjs'; +import { Router } from '@angular/router'; +import { AuthService } from '../authentication/auth.service'; + +@Component({ + selector: 'app-report', + templateUrl: './report.page.html', + styleUrls: ['./report.page.scss'], +}) +export class ReportPage implements OnInit { + private createReportSubscription: Subscription = new Subscription(); + isLoggedIn: boolean = false; + + constructor( + private reportService: ReportService, + private router: Router, + private authService: AuthService + ) { } + + ngOnInit() { + + } + + async ionViewWillEnter() { + this.isLoggedIn = await this.authService.isUserLoggedIn(); + } + + report(reportType: string) { + this.createReportSubscription = this.reportService.reportIssue(reportType).subscribe( + (res: any) => { + console.log(res); + this.router.navigate(['/tabs/tab-navigate']); + }, + (error: any) => { + console.error('An error occurred:', error); + } + ); + } + + ngOnDestroy() { + if (this.createReportSubscription) { + this.createReportSubscription.unsubscribe(); + } + } +} + + diff --git a/app/WhereIsThePower/src/app/report/report.service.ts b/app/WhereIsThePower/src/app/report/report.service.ts new file mode 100644 index 00000000..b0dfbcbd --- /dev/null +++ b/app/WhereIsThePower/src/app/report/report.service.ts @@ -0,0 +1,60 @@ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpHeaders } from '@angular/common/http'; +import { Router } from '@angular/router'; +import { AuthService } from '../authentication/auth.service'; +import { UserLocationService } from '../user-location.service'; +import { BehaviorSubject, tap } from 'rxjs'; + +@Injectable({ + providedIn: 'root' +}) +export class ReportService { + apiUrl = 'https://witpa.codelog.co.za/api/reports' + private headers: HttpHeaders = new HttpHeaders(); + latitude: any; + longitude: any; + reports: BehaviorSubject<any[]> = new BehaviorSubject<any[]>([]); + + constructor( + private http: HttpClient, + private router: Router, + private authService: AuthService, + private userLocationService: UserLocationService + ) { } + + getReports() { + this.headers = this.authService.getAuthHeaders(); // get the auth headers + return this.http.get(this.apiUrl, { headers: this.headers }).pipe(tap((res: any) => { + this.reports.next(res.result); + console.log("getReports (service file)", res.result); + })); + } + + reportIssue(type: string) { + this.headers = this.authService.getAuthHeaders(); // get the auth headers + + // Get the current user location + this.latitude = this.userLocationService.getLatitude(); + this.longitude = this.userLocationService.getLongitude(); + let report = + { + "report_type": type, + "timestamp": Date.now(), + "latitude": this.latitude, + "longitude": this.longitude + } + return this.http.post(this.apiUrl, report, { headers: this.headers}).pipe(tap((res: any) => { + if(res) { + let currentReports = this.reports.getValue(); + console.log("===================================="); + console.log(" this.reports", this.reports); + console.log("currentReports", currentReports); + console.log("report", report); + + console.log("===================================="); + + this.reports.next([...currentReports, report]); + } + })); + } +} diff --git a/app/WhereIsThePower/src/app/shared/components/login/login.component.html b/app/WhereIsThePower/src/app/shared/components/login/login.component.html index 1ef0da83..3ef8b44b 100644 --- a/app/WhereIsThePower/src/app/shared/components/login/login.component.html +++ b/app/WhereIsThePower/src/app/shared/components/login/login.component.html @@ -14,19 +14,43 @@ <ion-content [fullscreen]="true"> - <div class="ion-padding"> - <form class="form" [formGroup]="loginForm" (ngSubmit)="login()"> - <ion-item data-cy="login-email-input"> - <ion-label position="floating">Email</ion-label> - <ion-input type="email" formControlName="email" aria-label="Input for email"></ion-input> - </ion-item> + <ion-grid> + <ion-row class="ion-text-center ion-padding-top"> + <ion-col size = "3" offset = "4.5" size-md = "2" offset-md = "5" class="ion-text-center"> + <ion-avatar class="ion-no-margin" class="ion-text-center" style="display:inline"> + <ion-img src="assets/WhereIsThePower.png"></ion-img> + </ion-avatar> + </ion-col> + </ion-row> + <ion-row> + <ion-col class="ion-text-center"> + <form class="form" [formGroup]="loginForm" (ngSubmit)="login()" class="ion-text-center"> + <h3 class="ion-padding-start"><ion-text color="primary">Where Is the Power?</ion-text></h3> - <ion-item data-cy="login-password-input"> - <ion-label position="floating" >Password</ion-label> - <ion-input type="password" formControlName="password" aria-label="Input for password"></ion-input> - </ion-item> + <ion-item> + <ion-input + label = "Email" + labelPlacement="floating" + placeholder="Email" + formControlName = "email" + ></ion-input> + </ion-item> - <ion-button expand="full" type="submit" data-cy="btn-login-confirm">Login</ion-button> - </form> - </div> + <ion-item class="ion-padding-top"> + <ion-input + type = "password" + label = "Password" + labelPlacement="floating" + placeholder="Password" + formControlName = "password" + autocomplete="off" + ></ion-input> + </ion-item> + <div class="ion-padding-top"> + <ion-button expand="block" type="submit" class="ion-margin-top ion-margin-start" data-cy="btn-login-confirm">Login</ion-button> + </div> + </form> + </ion-col> + </ion-row> + </ion-grid> </ion-content> diff --git a/app/WhereIsThePower/src/app/shared/components/login/login.component.ts b/app/WhereIsThePower/src/app/shared/components/login/login.component.ts index b1a5c91c..03c5a71b 100644 --- a/app/WhereIsThePower/src/app/shared/components/login/login.component.ts +++ b/app/WhereIsThePower/src/app/shared/components/login/login.component.ts @@ -5,6 +5,7 @@ import { ToastController } from '@ionic/angular'; import { User } from '../../models/user'; import { AuthService } from '../../../authentication/auth.service'; import { ModalController } from '@ionic/angular'; +import { LoadingController } from '@ionic/angular'; @Component({ selector: 'app-login', @@ -24,7 +25,7 @@ export class LoginComponent implements OnInit { loginForm: FormGroup = this.formBuilder.group({ email: ['', [Validators.required, Validators.email]], - password: ['', [Validators.required, Validators.minLength(8)]], + password: ['', [Validators.required]], }); constructor( @@ -32,7 +33,8 @@ export class LoginComponent implements OnInit { private formBuilder: FormBuilder, private toastController: ToastController, private authService: AuthService, - public modalController: ModalController + public modalController: ModalController, + private loadingController: LoadingController ) { } @@ -42,11 +44,12 @@ export class LoginComponent implements OnInit { this.modalController.dismiss(); } - login() { + async login() { if (this.loginForm.valid) { this.User.authType = "User"; this.User.email = this.loginForm.value.email; this.User.password = this.loginForm.value.password; + const loading = await this.presentLoading(); // Show loading spinner console.log(this.User) this.authService.loginUser(this.User).subscribe(async (response: any) => { @@ -57,13 +60,14 @@ export class LoginComponent implements OnInit { this.User.lastName = response.lastName; this.authService.user.next(this.User); await this.authService.saveUserData('Token', JSON.stringify(this.User.token)); - this.sucessToast('Welcome back ' + this.User.firstName) + //this.sucessToast('Welcome back ' + this.User.firstName) //const userData = await this.authService.getUserData(); //console.log("TOKEN " + userData); } else { this.failToast('Please ensure all details are correct'); } + loading.dismiss(); // Dismiss loading spinner when response is received }); } else { this.failToast('Please ensure all details are correct'); @@ -84,9 +88,19 @@ export class LoginComponent implements OnInit { const toast = await this.toastController.create({ message: message, color: 'success', - duration: 3000, - position: 'bottom', + duration: 2000, + position: 'top', }); toast.present(); } + + private async presentLoading() { + const loading = await this.loadingController.create({ + message: 'Logging in...', + spinner: 'crescent', // spinner style + duration: 20000, + }); + await loading.present(); + return loading; + } } diff --git a/app/WhereIsThePower/src/app/shared/components/signup/signup.component.html b/app/WhereIsThePower/src/app/shared/components/signup/signup.component.html index d04790b7..fc9d921e 100644 --- a/app/WhereIsThePower/src/app/shared/components/signup/signup.component.html +++ b/app/WhereIsThePower/src/app/shared/components/signup/signup.component.html @@ -15,7 +15,16 @@ <ion-content [fullscreen]="true"> <div class="ion-padding"> - <form class="form" [formGroup]="signupForm" (ngSubmit)="signup()"> + <ion-row class="ion-text-center ion-padding-top"> + <ion-col size = "3" offset = "4.5" size-md = "2" offset-md = "5" class="ion-text-center"> + <ion-avatar class="ion-no-margin" class="ion-text-center" style="display:inline"> + <ion-img src="assets/WhereIsThePower.png"></ion-img> + </ion-avatar> + </ion-col> + </ion-row> + <form class="form" [formGroup]="signupForm" (ngSubmit)="signup()" class="ion-text-center"> + <h3 class="ion-padding-start"><ion-text color="primary">Where Is the Power?</ion-text></h3> + <ion-item data-cy="input-fn"> <ion-label position="floating">First Name</ion-label> <ion-input type="firstName" formControlName="firstName" aria-label="Input for First Name"></ion-input> @@ -30,13 +39,20 @@ <ion-label position="floating">Email</ion-label> <ion-input type="email" formControlName="email" aria-label="Input for email" ></ion-input> </ion-item> + <ion-text color="danger" *ngIf="signupForm.get('email')!.hasError('email')" class="ion-padding-start"> + Invalid email. + </ion-text> <ion-item data-cy="input-password"> <ion-label position="floating">Password</ion-label> <ion-input type="password" formControlName="password" aria-label="Input for password" ></ion-input> </ion-item> - - <ion-button expand="full" type="submit" data-cy="btn-confirm-signup">Signup</ion-button> + <ion-text color="danger" *ngIf="signupForm.get('password')!.hasError('minlength')" class="ion-padding-start"> + Password must be at least 8 characters + </ion-text> + <div class="ion-padding-top"> + <ion-button expand="block" type="submit" data-cy="btn-confirm-signup" class="ion-margin-top ion-margin-start">Signup</ion-button> + </div> </form> </div> </ion-content> diff --git a/app/WhereIsThePower/src/app/shared/components/signup/signup.component.ts b/app/WhereIsThePower/src/app/shared/components/signup/signup.component.ts index d2633263..4c2757f0 100644 --- a/app/WhereIsThePower/src/app/shared/components/signup/signup.component.ts +++ b/app/WhereIsThePower/src/app/shared/components/signup/signup.component.ts @@ -6,6 +6,7 @@ import { RegisterUser } from '../../models/register-user'; import { AuthService } from '../../../authentication/auth.service'; import { ModalController } from '@ionic/angular'; import { User } from '../../models/user'; +import { LoadingController } from '@ionic/angular'; @Component({ selector: 'app-signup', @@ -33,7 +34,8 @@ export class SignupComponent implements OnInit { private formBuilder: FormBuilder, private toastController: ToastController, private authService: AuthService, - public modalController: ModalController + public modalController: ModalController, + private loadingController: LoadingController ) { } @@ -54,13 +56,15 @@ export class SignupComponent implements OnInit { this.authService.signupUser(this.newUser).subscribe(async (response: any) => { console.log(response); let createNewUser = new User("User", this.newUser.email, this.newUser.password, this.newUser.firstName, this.newUser.lastName); + const loading = await this.presentLoading(); // Show loading spinner console.log(createNewUser); this.authService.loginUser(createNewUser).subscribe(async (response: any) => { createNewUser.token = response.token; await this.authService.saveUserData('Token', JSON.stringify(createNewUser.token)); + loading.dismiss(); // Dismiss loading spinner when response is received - //console.log("RES" + response); + //console.log("RES" + response); this.authService.user.next(createNewUser); this.dismissModal(); }); @@ -90,4 +94,15 @@ export class SignupComponent implements OnInit { }); toast.present(); } + + private async presentLoading() { + const loading = await this.loadingController.create({ + message: 'Signing up...', + spinner: 'crescent', // spinner style + duration: 20000, + }); + await loading.present(); + return loading; + } } + diff --git a/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.html b/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.html index fc400cad..4af9ec22 100644 --- a/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.html +++ b/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.html @@ -8,11 +8,12 @@ (keyup.enter)="onSearchInput($event)" (ionClear)="onSearchBarClear()" (ionFocus)="onSearchBarFocus()" + (ionBlur)="onBlur()" [disabled]="!mapLoaded" #searchBar> </ion-searchbar> <ion-list *ngIf="searchResults.length > 0 && showResultsList"> - <ion-item *ngFor="let result of searchResults" (click)="getRoute(result)" (click)="openModal(result)" button> + <ion-item *ngFor="let result of searchResults" (click)="getRoute(result)" button> <ion-label> <h3><strong>{{ result.text }}</strong></h3> <ion-note>{{ result.place_name }}</ion-note> @@ -21,13 +22,48 @@ <h3><strong>{{ result.text }}</strong></h3> </ion-list> </ion-col> </ion-row> + + + <ion-fab slot="fixed" *ngIf="!gettingRoute || screenWidth > 768" vertical="bottom" horizontal="end" > - <ion-fab-button (click) = "pin()" [disabled]="!mapLoaded"> + <ion-fab-button class="ion-margin-bottom reportFab" [disabled]="!mapLoaded" (click)="goToReport()" button> + <ion-icon name="megaphone-outline" size="large"></ion-icon> + </ion-fab-button> + <ion-fab-button (click) = "pin()" [disabled]="!mapLoaded" class="locateFab"> <ion-icon name="locate-outline" size="large"></ion-icon> </ion-fab-button> </ion-fab> + <ion-row id="map"></ion-row> - <ion-modal #myModal *ngIf="searchResults.length > 0" + + <ion-modal #navigateModal + [initialBreakpoint]="currentBreakpoint" + [breakpoints]="[0, currentBreakpoint]" + [backdropDismiss]="true" + > + <ng-template> + <ion-content class="ion-padding"> + <h3><ion-text color="primary">{{ goToPlace.name }}</ion-text></h3> + <ion-text color="medium">{{ modifiedAddress }}</ion-text> + + <ion-grid class="ion-no-padding ion-margin-top"> + <ion-row> + <ion-col> + <ion-button *ngIf = "!isPlaceSaved" shape="round" (click)="savePlace()"> + <ion-icon slot="start" src="assets/bookmarks.svg"></ion-icon> + Save + </ion-button> + <ion-button shape="round" fill="outline" (click)="getRoute(goToPlace)" (click)="cancelNavigateModal()"> + <ion-icon slot="start" name="navigate-outline"></ion-icon> + Directions + </ion-button> + </ion-col> + </ion-row> + </ion-grid> + </ion-content> + </ng-template> + </ion-modal> + <ion-modal #myModal class="ion-hide-md-up" [initialBreakpoint]="currentBreakpoint" [breakpoints]="[0.12, currentBreakpoint, 0.5 , 0.75, 1]" @@ -69,7 +105,7 @@ <h4>{{ tripDuration * 1000 * 60 | date:'m':'UTC'}}m</h4> <h4>{{tripETAH}}:{{tripETAM}}</h4> </ion-col> </ion-row> - + <ion-button expand="block" class="ion-margin-top" (click)="beginTrip()"style="text-transform: none;"> <ion-icon slot="start" name="navigate-circle-outline"></ion-icon> <ion-text>Begin Trip</ion-text> @@ -101,7 +137,7 @@ <h3 style="margin-top: 12px;"> </h3> <ion-text>{{ tripDuration}} min</ion-text> <ion-text style="padding-left: 8px; padding-right: 8px;">•</ion-text> - <ion-text>13:00</ion-text> + <ion-text>{{tripETAH}}:{{tripETAM}}</ion-text> </ion-col> <ion-col size="4" class="ion-text-end ion-align-items-center" style=" display: flex; diff --git a/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.scss b/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.scss index 3e1581f1..cd471de2 100644 --- a/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.scss +++ b/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.scss @@ -27,12 +27,18 @@ ion-list { } /* sizeMd */ -@media (min-width: 768px) { - ion-fab-button { - --background-hover: #a3e681; - --border-radius: 16px; - --box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.3), 0px 1px 3px 1px rgba(0, 0, 0, 0.15); - } +.locateFab { + --background-hover: #a3e681; + --border-radius: 16px; + --box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.3), 0px 1px 3px 1px rgba(0, 0, 0, 0.15); +} + +.reportFab { + --background: white; +} + +.reportFab ion-icon { + color: var(--ion-color-primary); } .scroll { diff --git a/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.ts b/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.ts index 8b171c97..568f96e3 100644 --- a/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.ts +++ b/app/WhereIsThePower/src/app/shared/map-modal/map-modal.component.ts @@ -9,11 +9,18 @@ import { import { environment } from 'src/environments/environment'; import { UserLocationService } from '../../user-location.service'; import { IonContent, ModalController } from '@ionic/angular'; +import { SavedPlacesService } from '../../tab-saved/saved-places.service'; +import { Subscription } from 'rxjs'; //import * as mapboxgl from 'mapbox-gl'; //import * as MapboxGeocoder from '@mapbox/mapbox-gl-geocoder'; import { MapSuburbsService } from './map-suburbs.service'; import { EventEmitter, Output } from '@angular/core'; +import { Subscribable } from 'rxjs'; +import { Place } from '../../tab-saved/place'; +import { Router } from '@angular/router'; +import { ReportService } from '../../report/report.service'; +import { LoadingController } from '@ionic/angular'; declare let MapboxDirections: any; declare let mapboxgl: any; declare let MapboxGeocoder: any; @@ -30,7 +37,11 @@ export class MapModalComponent implements OnInit, AfterViewInit { private mapSuburbsService: MapSuburbsService, private userLocationService: UserLocationService, private modalCtrl: ModalController, - private changeDetectorRef: ChangeDetectorRef + private changeDetectorRef: ChangeDetectorRef, + private savedPlacesService: SavedPlacesService, + private router: Router, + private reportService: ReportService, + private loadingController: LoadingController ) { } map: any; dat: any; @@ -52,11 +63,59 @@ export class MapModalComponent implements OnInit, AfterViewInit { tripETA: Date = new Date(); tripETAH: string = ''; tripETAM: string = ''; + navigateToPlaceSubscription: Subscription = new Subscription(); + MapSubscription: Subscription = new Subscription(); + goToPlace: any; // Physical place + navigateToPlace = false; + currentSuburbSchedule: any; + modifiedAddress: string = ""; + isPlaceSaved: boolean = false; - ngOnInit() { } + @ViewChild('myModal') myModal: any; // Reference to the ion-modal element + modalResult: any; // To store the selected result data + + ngOnInit() { + this.navigateToPlaceSubscription = this.savedPlacesService.navigateToPlace.subscribe((isNavigate: any) => { + this.navigateToPlace = isNavigate; + console.log(" this.navigateToPlace", this.navigateToPlace) + if (isNavigate == true) { + this.goToPlace = this.savedPlacesService.selectedPlace; + console.log("selectedPlace", this.goToPlace); - ngAfterViewInit() { - this.mapSuburbsService.getSuburbData().subscribe(async (data: any) => { + this.modifiedAddress = this.goToPlace.address.substring(this.goToPlace.address.indexOf(",") + 1).trim(); + let placeCenter: any; + + // TODO + if (!this.goToPlace.hasOwnProperty('center')) { // Place object + console.log("goToPlace", this.goToPlace); + + placeCenter = [this.goToPlace.longitude, this.goToPlace.latitude]; + } + else { // Mapbox object + placeCenter = [this.goToPlace.center[0], this.goToPlace.center[1]] + + } + + this.map.flyTo({ + center: placeCenter, // Center on place + zoom: 15, // Adjust the zoom level + speed: 1.2, // Adjust the speed of the animation + }); + console.log("isNavigate: ", isNavigate); + this.openNavigateModal(); + } + }); + + this.savedPlacesService.navigateToSavedPlace.subscribe((isNavigate: any) => { + console.log("navigateToSavedPlace: ", isNavigate); + this.isPlaceSaved = isNavigate; + }); + + + } + + async ngAfterViewInit() { + this.MapSubscription = this.mapSuburbsService.getSuburbData().subscribe(async (data: any) => { console.log(data.result.mapPolygons[0]); console.log("Data: ", data); @@ -75,8 +134,41 @@ export class MapModalComponent implements OnInit, AfterViewInit { this.latitude = this.userLocationService.getLatitude(); this.longitude = this.userLocationService.getLongitude(); + // Create a Point object with the latitude and longitude + const point = { + type: 'Point', + coordinates: [this.longitude, this.latitude] + }; + // Iterate through the features in the GeoJSON data + for (const feature of data.result.mapPolygons[0].features) { + const polygon = { + type: 'Polygon', + coordinates: feature.geometry.coordinates + }; + if (this.isPointInsidePolygon(point, polygon)) { + const suburbName = feature.properties.SP_NAME; + console.log(`The point is within the suburb: ${suburbName}`); + break; + } + } + this.map.on('load', () => { this.map.resize(); // Trigger map resize after the initial rendering + // Reporting + this.reportService.getReports().subscribe((data) => { + console.log("getReports: ", data); + }); + + this.reportService.reports.subscribe((reports: any) => { + if (reports) { + console.log("Reports (Map Page)", reports); + + // Add marker on map for each report + reports.forEach((report: any) => { + this.addMarker(report.longitude, report.latitude, report.report_type); + }); + } + }); }); // Populate Map(suburbs) with Polygons @@ -87,9 +179,43 @@ export class MapModalComponent implements OnInit, AfterViewInit { console.log(error); } ); - } + addMarker(lon: number, lat: number, reportType: string) { + console.log("Add Marker"); + const customIcon = document.createElement('ion-icon'); + customIcon.style.width = '30px'; // Set the width of your custom icon + customIcon.style.height = '30px'; // Set the height of your custom icon + customIcon.style.backgroundColor = '#00a165'; // Use Ionic primary color variable + customIcon.style.backgroundImage = `url('assets/${reportType}.svg')`; // Replace with your icon path + customIcon.style.backgroundSize = 'cover'; + customIcon.style.backgroundPosition = 'center'; + customIcon.style.borderRadius = '50%'; + customIcon.style.padding = '8px'; + + const formattedReportType = reportType.replace(/([A-Z])/g, ' $1'); + + const reportMarker = new mapboxgl.Marker({ + element: customIcon, + }) + .setLngLat([lon, lat]) + .setPopup( + new mapboxgl.Popup({ offset: 25 }) // add popups + .setHTML( + `<ion-card class="popup-ion-card"> + <ion-card-header class="popup-ion-card-header"> + <ion-card-title color="primary">${formattedReportType}</ion-card-title> + </ion-card-header> + <ion-card-content> + <h4><ion-icon src="assets/schedule.svg"></ion-icon><ion-text>Reported at 14:00</ion-text></h4> + </ion-card-content> + </ion-card>` + ) + ) + .addTo(this.map); + + this.closePopup(); + } populatePolygons() { this.map.on('load', () => { // Add a data source containing GeoJSON data. @@ -137,30 +263,70 @@ export class MapModalComponent implements OnInit, AfterViewInit { //console.log(e); if (clickedFeature) { - + let suburbId = clickedFeature.id; + console.log("Suburb ID =" + suburbId) // Get the properties of the clicked feature (suburb information) const suburbInfo = clickedFeature.properties; if (suburbInfo.PowerStatus == "undefined") { suburbInfo.PowerStatus = "unavailable" } - const popupContent = ` - <ion-card class="popup-ion-card"> - <ion-card-header class="popup-ion-card-header"> - <ion-card-title color="primary">${suburbInfo?.SP_NAME}</ion-card-title> - </ion-card-header> - <ion-card-content> - <h4><ion-icon src="assets/lightbulb.svg"></ion-icon><ion-text>Power Status: <strong>${suburbInfo?.PowerStatus}</strong></ion-text></h4> - <h4><ion-icon src="assets/schedule.svg"></ion-icon><ion-text> Schedule: <strong>12:00 - 14:00</strong></ion-text></h4> - </ion-card-content> - </ion-card> - `; - // Create a new popup and set its HTML content - this.popup = new mapboxgl.Popup() - .setLngLat(e.lngLat) - .setHTML(popupContent) - .addTo(this.map); + this.mapSuburbsService.fetchTimeForPolygon(suburbId).subscribe( + (response: any) => { + // Handle the response here + + + console.log('Time response:', response); + console.log("success", response.success); + if(response.success === true) + { + const timesOff = response.result.timesOff; // Assuming "response" holds your API response + if (timesOff && timesOff.length > 0) { + const formattedTimes = timesOff.map((time: any) => { + const start = new Date(time.start * 1000); // Convert seconds to milliseconds + const end = new Date(time.end * 1000); // Convert seconds to milliseconds + + const startHours = start.getHours().toString().padStart(2, '0'); + const startMinutes = start.getMinutes().toString().padStart(2, '0'); + + const endHours = end.getHours().toString().padStart(2, '0'); + const endMinutes = end.getMinutes().toString().padStart(2, '0'); + + this.currentSuburbSchedule = `${startHours}:${startMinutes} - ${endHours}:${endMinutes}`; + + }); + + console.log('Formatted Time Ranges:', formattedTimes); + } else { + console.log('No time ranges available.'); + this.currentSuburbSchedule = "unavailable"; + } + const showSchedule = suburbInfo?.PowerStatus !== 'on'; + const popupContent = ` + <ion-card class="popup-ion-card"> + <ion-card-header class="popup-ion-card-header"> + <ion-card-title color="primary">${suburbInfo?.SP_NAME}</ion-card-title> + </ion-card-header> + <ion-card-content> + <h4><ion-icon src="assets/lightbulb.svg"></ion-icon><ion-text>Power Status: <strong>${suburbInfo?.PowerStatus}</strong></ion-text></h4> + ${showSchedule ? `<h4><ion-icon src="assets/schedule.svg"></ion-icon><ion-text> Schedule: <strong>${this.currentSuburbSchedule}</strong></ion-text></h4>` : ''} + </ion-card-content> + </ion-card> + `; + // Create a new popup and set its HTML content + this.popup = new mapboxgl.Popup() + .setLngLat(e.lngLat) + .setHTML(popupContent) + .addTo(this.map); + } + }, + (error) => { + // Handle errors here + //console.error('Error fetching time:', error); + console.log("Re-enable errors on line 304 when polygons are matched"); + } + ); } }); }); @@ -209,30 +375,68 @@ export class MapModalComponent implements OnInit, AfterViewInit { } } + onBlur() { + console.log("Search Bar Blurred"); + setTimeout(() => { + this.showResultsList = false; + }, 200); // 200ms delay + } + - async getRoute(selectedResult: any) { + async getRoute(selectedResult: Place | any) { + this.instructions = []; this.updateBreakpoint(); this.emitGetDirections(); this.gettingRoute = true; this.closePopup(); - - this.searchBar.value = `${selectedResult.place_name}`; + await this.cancelNavigateModal(); + this.openModal(selectedResult); this.showResultsList = false; let coords: any; - console.log(selectedResult); + console.log("selected Result for directions", selectedResult); let query: any; - if (Array.isArray(selectedResult)) { - query = await fetch(`https://api.mapbox.com/directions/v5/mapbox/driving/${this.longitude},${this.latitude};${selectedResult[0]},${selectedResult[1]}?alternatives=true&geometries=geojson&language=en&overview=full&steps=true&access_token=${environment.MapboxApiKey}`) + let fallback = false; + const loading = await this.presentLoading(); // Show loading spinner + + if (!selectedResult.hasOwnProperty('center')) { + try { + console.log("Selected directions (saved places) ", selectedResult); + query = await this.mapSuburbsService.fetchOptimalRoute(this.longitude, this.latitude, selectedResult.longitude, selectedResult.latitude).toPromise(); + coords = query.result.coordinates; + } + catch (error) { + console.error("Error in the first query:", error); + fallback = true; + query = await fetch(`https://api.mapbox.com/directions/v5/mapbox/driving/${this.longitude},${this.latitude};${selectedResult.longitude},${selectedResult.latitude}?alternatives=true&geometries=geojson&language=en&overview=full&steps=true&access_token=${environment.MapboxApiKey}`); + coords = [selectedResult.longitude, selectedResult.latitude]; + } + this.searchBar.value = `${selectedResult.address}`; + } else { - query = await fetch(`https://api.mapbox.com/directions/v5/mapbox/driving/${this.longitude},${this.latitude};${selectedResult.center[0]},${selectedResult.center[1]}?alternatives=true&geometries=geojson&language=en&steps=true&access_token=${environment.MapboxApiKey}`) - coords = [selectedResult.center[0], selectedResult.center[1]]; + try { + console.log("Searched directions (searchbar) ", selectedResult); + + query = await this.mapSuburbsService.fetchOptimalRoute(this.longitude, this.latitude, selectedResult.center[0], selectedResult.center[1]).toPromise(); + coords = query.result.coordinates; + + } catch (error) { + // Handle the error from the first query + console.error("Error in the first query:", error); + fallback = true; + query = await fetch(`https://api.mapbox.com/directions/v5/mapbox/driving-traffic/${this.longitude},${this.latitude};${selectedResult.center[0]},${selectedResult.center[1]}?alternatives=true&geometries=geojson&language=en&steps=true&access_token=${environment.MapboxApiKey}`); + coords = [selectedResult.center[0], selectedResult.center[1]]; + } + this.searchBar.value = `${selectedResult.place_name}`; } - console.log(coords); - // Add a marker for the start point + console.log("_________________________"); + console.log("Directions query", query); + console.log("_________________________"); + loading.dismiss(); // Dismiss loading spinner when response is received + // Add a marker for the start point const start = { type: 'FeatureCollection', features: [ @@ -284,7 +488,7 @@ export class MapModalComponent implements OnInit, AfterViewInit { properties: {}, geometry: { type: 'Point', - coordinates: coords + coordinates: [coords[coords.length - 1][0], coords[coords.length - 1][1]] } } ] @@ -305,7 +509,7 @@ export class MapModalComponent implements OnInit, AfterViewInit { properties: {}, geometry: { type: 'Point', - coordinates: coords + coordinates: [coords[coords.length - 1][0], coords[coords.length - 1][1]] } } ] @@ -318,31 +522,63 @@ export class MapModalComponent implements OnInit, AfterViewInit { }); } - const json = await query.json(); + let geojson: any; + let route: any; + + if (!fallback) // Optimised route + { + const data = query.result; // Pick 1st route in list of route recommendations + route = coords; // list of coordinates forming route + geojson = { + type: 'Feature', + properties: {}, + geometry: { + type: 'LineString', + coordinates: route + } + }; + // get the sidebar and add the instructions - const data = json.routes[0]; // Pick 1st route in list of route recommendations - const route = data.geometry.coordinates; // list of coordinates forming route - const geojson = { - type: 'Feature', - properties: {}, - geometry: { - type: 'LineString', - coordinates: route + const steps = data.instructions; + for (const step of steps) { + this.instructions.push(step); } - }; - // get the sidebar and add the instructions - const steps = data.legs[0].steps; - for (const step of steps) { - this.instructions.push(step.maneuver.instruction); + + this.tripDuration = Math.floor(data.duration / 60); + this.tripDistance = Math.floor(data.distance / 1000); + + //CALCULATE ETA + this.tripETA = new Date(); + this.calculateETA(); + } + else // Mapbox + { + const json = await query.json(); + + const data = json.routes[0]; // Pick 1st route in list of route recommendations + route = data.geometry.coordinates; // list of coordinates forming route + geojson = { + type: 'Feature', + properties: {}, + geometry: { + type: 'LineString', + coordinates: route + } + }; + // get the sidebar and add the instructions + const steps = data.legs[0].steps; + for (const step of steps) { + this.instructions.push(step.maneuver.instruction); + } + + this.tripDuration = Math.floor(data.duration / 60); + this.tripDistance = Math.floor(data.distance / 1000); + + //CALCULATE ETA + this.tripETA = new Date(); + this.calculateETA(); } - this.tripDuration = Math.floor(data.duration / 60); - this.tripDistance = Math.floor(data.distance / 1000); - - //CALCULATE ETA - this.tripETA = new Date(); - this.calculateETA(); - // if the route already exists on the map, we'll reset it using setData if (this.map.getSource('route')) { @@ -393,6 +629,16 @@ export class MapModalComponent implements OnInit, AfterViewInit { }); } + private async presentLoading() { + const loading = await this.loadingController.create({ + message: 'Calculating Route...', + spinner: 'crescent', // spinner style + duration: 20000, + }); + await loading.present(); + return loading; + } + delay(ms: number) { return new Promise(resolve => setTimeout(resolve, ms)); } @@ -433,8 +679,6 @@ export class MapModalComponent implements OnInit, AfterViewInit { }); this.closePopup(); } - @ViewChild('myModal') myModal: any; // Reference to the ion-modal element - modalResult: any; // To store the selected result data openModal(result: any) { // if (!this.myModal) { @@ -442,11 +686,18 @@ export class MapModalComponent implements OnInit, AfterViewInit { this.myModal.present(); } + @ViewChild('navigateModal') navigateModal: any; // Reference to the ion-modal element + + openNavigateModal() { + this.navigateModal.present(); + this.updateBreakpoint(); + } + calculateETA() { let tripETAHours: number = 0; let tripETAMinutes: number = 0; - if(this.tripDuration >= 60) { + if (this.tripDuration >= 60) { tripETAHours = Math.floor(this.tripDuration / 60); tripETAMinutes = this.tripDuration - (tripETAHours * 60); } else { @@ -571,6 +822,57 @@ export class MapModalComponent implements OnInit, AfterViewInit { } } - + savePlace() { + this.navigateToPlace = false; + this.savedPlacesService.savedPlace = this.goToPlace; + //this.savedPlacesService.addSavedPlace(this.goToPlace); + console.log("SAVE NEW PLACE", this.goToPlace); + this.savedPlacesService.savePlace.next(true); + this.cancelNavigateModal(); + + } + + cancelNavigateModal() { + this.navigateModal.dismiss(); + } + + ngOnDestroy() { + if (this.navigateToPlaceSubscription) { + this.navigateToPlaceSubscription.unsubscribe(); + this.savedPlacesService.navigateToPlace.next(false); + } + + if (this.MapSubscription) { + this.MapSubscription.unsubscribe(); + } + } + + // REPORTING + goToReport() { + this.router.navigate(['/report']); + } + + isPointInsidePolygon(point: any, polygon: any) { + const x = point.coordinates[0]; + const y = point.coordinates[1]; + + const vertices = polygon.coordinates[0]; // Assuming the first set of coordinates defines the polygon + let isInside = false; + + for (let i = 0, j = vertices.length - 1; i < vertices.length; j = i++) { + const xi = vertices[i][0]; + const yi = vertices[i][1]; + const xj = vertices[j][0]; + const yj = vertices[j][1]; + + const intersect = ((yi > y) !== (yj > y)) && (x < ((xj - xi) * (y - yi)) / (yj - yi) + xi); + if (intersect) { + isInside = !isInside; + } + } + + return isInside; + } + } diff --git a/app/WhereIsThePower/src/app/shared/map-modal/map-suburbs.service.ts b/app/WhereIsThePower/src/app/shared/map-modal/map-suburbs.service.ts index 1a3760c6..79727644 100644 --- a/app/WhereIsThePower/src/app/shared/map-modal/map-suburbs.service.ts +++ b/app/WhereIsThePower/src/app/shared/map-modal/map-suburbs.service.ts @@ -20,4 +20,30 @@ export class MapSuburbsService { getSuburbData() { return this.httpClient.post(this.apiUrl, this.body); } + + fetchTimeForPolygon(suburbId: number) { + const url = `https://witpa.codelog.co.za/api/fetchTimeForPolygon`; + const requestBody = { suburbId }; + + return this.httpClient.post(url, requestBody); + } + + fetchOptimalRoute(originLon: number, originLat: number, destinationLon: number, destinationLat: number) { + const url = `https://witpa.codelog.co.za/api/ai/info`; +console.log(originLon, originLat, destinationLon, destinationLat); + + const requestBody = + { + "origin": [ + originLon, + originLat + ], + "destination": [ + destinationLon, + destinationLat + ] + }; + + return this.httpClient.post(url, requestBody); + } } diff --git a/app/WhereIsThePower/src/app/tab-navigate/tab-navigate.page.html b/app/WhereIsThePower/src/app/tab-navigate/tab-navigate.page.html index f24dab09..78557f04 100644 --- a/app/WhereIsThePower/src/app/tab-navigate/tab-navigate.page.html +++ b/app/WhereIsThePower/src/app/tab-navigate/tab-navigate.page.html @@ -20,7 +20,7 @@ <h3><strong>Enable Device location</strong></h3> </ion-row> </div> <ng-template #noLocationProvided> - <app-map-modal></app-map-modal> + <app-map-modal #mapModalComponent></app-map-modal> </ng-template> </ion-content> diff --git a/app/WhereIsThePower/src/app/tab-navigate/tab-navigate.page.ts b/app/WhereIsThePower/src/app/tab-navigate/tab-navigate.page.ts index 3c4ebd69..551bc6c6 100644 --- a/app/WhereIsThePower/src/app/tab-navigate/tab-navigate.page.ts +++ b/app/WhereIsThePower/src/app/tab-navigate/tab-navigate.page.ts @@ -1,5 +1,8 @@ import { Component } from '@angular/core'; import { UserLocationService } from '../user-location.service'; +import { SavedPlacesService } from '../tab-saved/saved-places.service'; +import { ViewChild } from '@angular/core'; +import { MapModalComponent } from '../shared/map-modal/map-modal.component'; @Component({ selector: 'app-tab-navigate', @@ -7,8 +10,9 @@ import { UserLocationService } from '../user-location.service'; styleUrls: ['tab-navigate.page.scss'] }) export class TabNavigatePage { + @ViewChild('mapModalComponent', { static: false }) mapModalComponent!: MapModalComponent; - constructor(private UserLocationService: UserLocationService) { } + constructor(private UserLocationService: UserLocationService, private savedPlacesService: SavedPlacesService) { } isLocationProvide = false; async ionViewDidEnter() { @@ -20,9 +24,20 @@ export class TabNavigatePage { console.log('isLocationAvailable', isLocationAvailable); this.isLocationProvide = isLocationAvailable; }); + + if(this.mapModalComponent && this.mapModalComponent.map) + this.mapModalComponent.map.resize(); } onLocateUser() { this.UserLocationService.getUserLocation(); } + + ionViewDidLeave() { + if (this.mapModalComponent && this.mapModalComponent.searchBar) { + this.mapModalComponent.searchBar.value = ""; + } + this.savedPlacesService.navigateToPlace.next(false); + this.savedPlacesService.navigateToSavedPlace.next(false); + } } diff --git a/app/WhereIsThePower/src/app/tab-profile/tab-profile.page.ts b/app/WhereIsThePower/src/app/tab-profile/tab-profile.page.ts index 272ec394..4cdc67f7 100644 --- a/app/WhereIsThePower/src/app/tab-profile/tab-profile.page.ts +++ b/app/WhereIsThePower/src/app/tab-profile/tab-profile.page.ts @@ -65,6 +65,7 @@ export class TabProfilePage implements OnInit { async logout() { this.isLoggedIn = false; await this.authService.signOutUser(); + this.toggleTheme('light'); } ngOnDestroy() { diff --git a/app/WhereIsThePower/src/app/tab-saved/place.ts b/app/WhereIsThePower/src/app/tab-saved/place.ts index 950eda65..a4552ea7 100644 --- a/app/WhereIsThePower/src/app/tab-saved/place.ts +++ b/app/WhereIsThePower/src/app/tab-saved/place.ts @@ -1,7 +1,9 @@ export interface Place { - address: string; - latitude: number; - longitude: number; - mapboxId: string; - name: string; + address: string; + latitude: number; + longitude: number; + mapboxId: string; + name: string; + category: string; + placeType: string; } diff --git a/app/WhereIsThePower/src/app/tab-saved/saved-places.service.ts b/app/WhereIsThePower/src/app/tab-saved/saved-places.service.ts index be6e1b6a..7995fc30 100644 --- a/app/WhereIsThePower/src/app/tab-saved/saved-places.service.ts +++ b/app/WhereIsThePower/src/app/tab-saved/saved-places.service.ts @@ -2,6 +2,8 @@ import { HttpClient, HttpHeaders } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { AuthService } from '../authentication/auth.service'; import { BehaviorSubject, Subscription } from 'rxjs'; +import { filter, tap } from 'rxjs/operators'; +import { Router } from '@angular/router'; import { Place } from './place'; @Injectable({ @@ -17,26 +19,55 @@ export class SavedPlacesService { "name": "Home" } */ -headers = new HttpHeaders(); - constructor( - private httpClient: HttpClient, - private auth: AuthService - ) { } - apiUrl = 'https://witpa.codelog.co.za/api/'; - place = new BehaviorSubject<Place[] | null>(null); + selectedPlace: any; + navigateToPlace: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false); + navigateToSavedPlace: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false); + savePlace: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false); + savedPlace: any; + poool: any; - /* + private headers: HttpHeaders = new HttpHeaders(); + constructor(private httpClient: HttpClient, + private authService: AuthService, + private router: Router + ) { } + + place = new BehaviorSubject<Place[] | null>(null); + getPlaces() { - return this.httpClient.get(`${this.apiUrl}user/savedPlaces`, { headers: this.auth.headers }); + this.headers = this.authService.getAuthHeaders(); // get the auth headers + + return this.httpClient.get<Place[]>(`${this.apiUrl}user/savedPlaces`, { headers: this.headers }).pipe(tap((places: Place[]) => { + this.place.next(places); + })); + } + + addSavedPlace(newPlace: Place) { + this.savePlace.next(false); + this.navigateToPlace.next(false); + + return this.httpClient.put(`${this.apiUrl}user/savedPlaces`, newPlace, { headers: this.headers }) } + deleteSavedPlace(placeID: string) { + let currentPlaces: any = this.place.value; + console.log("currentPlaces: ", currentPlaces) - addSavedPlace(place: Place) { - console.log("add saved place"); - console.log("place",this.place); - console.log("HEADER", this.headers); + if (currentPlaces && currentPlaces.result) { + const updatedPlaces = currentPlaces.result.filter((place: Place) => { + return place.mapboxId !== placeID; + }); + console.log("updatedPlaces: ", updatedPlaces) + this.place.next(updatedPlaces); + } - return this.httpClient.put(`${this.apiUrl}user/savedPlaces`, this.place, { headers: this.headers }) - }*/ + return this.httpClient.delete(`${this.apiUrl}user/savedPlaces/${placeID}`, { headers: this.headers }) + } + + goToPlace(place: Place) { + this.selectedPlace = place; + this.navigateToPlace.next(true); + this.router.navigate(['tabs/tab-navigate']); + } } diff --git a/app/WhereIsThePower/src/app/tab-saved/tab-saved.page.html b/app/WhereIsThePower/src/app/tab-saved/tab-saved.page.html index 9751e92b..61dbe9bf 100644 --- a/app/WhereIsThePower/src/app/tab-saved/tab-saved.page.html +++ b/app/WhereIsThePower/src/app/tab-saved/tab-saved.page.html @@ -15,7 +15,7 @@ alt="Address on phone Illustration" class="ion-padding" > - </ion-img> + </ion-img> </ion-col> </ion-row> <ion-row> @@ -27,12 +27,19 @@ <h3>Saved places is only available to registered users. </h3> </ion-col> </ion-row> </div> - <ng-template #elseIsloggedIn> + <ng-template #elseIsloggedIn> <ion-grid> <!-- SEARCH BAR --> <ion-row class="justify-content-center"> <ion-col class="searchbar-container"> - <ion-searchbar animated="true" placeholder="Search for a place..." (ionInput)="onSearchInput($event)" (keyup.enter)="onSearchInput($event)" (ionClear)="onSearchBarClear()" (ionFocus)="onSearchBarFocus()" #searchBar></ion-searchbar> + <ion-searchbar animated="true" placeholder="Search for a place..." + (ionInput)="onSearchInput($event)" + (keyup.enter)="onSearchInput($event)" + (ionClear)="onSearchBarClear()" + (ionFocus)="onSearchBarFocus()" + (ionBlur)="onBlur()" + #searchBar> + </ion-searchbar> <ion-list *ngIf="showResultsList; else elseBlock"> <ion-item *ngFor="let result of searchResults" (click)="savePlace(result)" button> <ion-icon slot="start" name="{{ getFeatureType(result.place_type[0]) }}"></ion-icon> @@ -42,17 +49,6 @@ <h3><strong>{{ result.text }}</strong></h3> </ion-label> <!-- TEMP ADD PLACE --> <ion-icon name="add-circle" color="primary" size="large"></ion-icon> - <!-- BOOKMARK --> - <!-- <div *ngIf="isPlaceSaved(result) === false; else elseBlock"> --> - <!-- ADD --> - <!-- <ion-icon color="success" style="font-size: 24px;" slot="icon-only" name="bookmark-outline"></ion-icon> --> - <!-- </div> --> - <!-- <ng-template #elseBlock> --> - <!-- <div> --> - <!-- DELETE --> - <!-- <ion-icon slot="icon-only" name="bookmark"></ion-icon> --> - <!-- </div> --> - <!-- </ng-template> --> </ion-item> </ion-list> </ion-col> @@ -62,37 +58,31 @@ <h3><strong>{{ result.text }}</strong></h3> <ion-col> <ion-row> <ion-toolbar class="ion-text-wrap"> - <!-- Saved Places is empty --> - <ion-title *ngIf="places.length === 0"> + <ion-title *ngIf="places?.length === 0"> You have no saved places </ion-title> + <!-- Show Saved places --> <ion-list *ngFor="let savedPlace of places"> - <ion-item> - <!-- <ion-icon slot="start" name="{{ savedPlace.type }}"></ion-icon> --> - <ion-label class="ion-text-wrap"> - <h2>{{ savedPlace.name }}, {{ savedPlace.address }}</h2> - </ion-label> - <div> - <!-- DELETE --> - <ion-button - color="success" - fill="clear" - (click)="removeSavedPlace(savedPlace)"> - <ion-icon slot="icon-only" name="bookmark"></ion-icon> - </ion-button> - </div> - </ion-item> + <ion-item-sliding> + <ion-item (click)="goToSavedPlace(savedPlace)"> + <ion-label class="ion-text-wrap"> + <h2>{{ savedPlace.address }}</h2> + </ion-label> + </ion-item> + <ion-item-options side="end"> + <ion-item-option color="danger" (click)="deleteSavedPlace(savedPlace)"> + <ion-icon slot="icon-only" name="trash"></ion-icon> + </ion-item-option> + </ion-item-options> + </ion-item-sliding> </ion-list> </ion-toolbar> </ion-row> - <!-- <ion-row class="ion-hide-lg-down"> - <app-map-modal></app-map-modal> - </ion-row> --> </ion-col> </ng-template> </ion-grid> - </ng-template> + </ng-template> </ion-content> diff --git a/app/WhereIsThePower/src/app/tab-saved/tab-saved.page.ts b/app/WhereIsThePower/src/app/tab-saved/tab-saved.page.ts index 2ab4f397..cdd88648 100644 --- a/app/WhereIsThePower/src/app/tab-saved/tab-saved.page.ts +++ b/app/WhereIsThePower/src/app/tab-saved/tab-saved.page.ts @@ -2,12 +2,13 @@ import { Component, ViewChild } from '@angular/core'; import { UserLocationService } from '../user-location.service'; import { HttpClient } from '@angular/common/http'; import { environment } from 'src/environments/environment'; -import { empty } from 'rxjs'; +import { Subscription } from 'rxjs'; import { AuthService } from '../authentication/auth.service'; import { Router } from '@angular/router'; import { SavedPlacesService } from './saved-places.service'; import { Place } from './place'; import { ToastController } from '@ionic/angular'; +import { take } from 'rxjs/operators'; @Component({ selector: 'app-tab-saved', @@ -22,7 +23,8 @@ export class TabSavedPage { showResultsList: boolean = false; searchResults: any[] = []; queryLength = 0; - + private placesSubscription: Subscription; + private savePlaceSubscription: Subscription; @ViewChild('searchBar', { static: false }) searchBar: any; constructor(private router: Router, @@ -30,7 +32,11 @@ export class TabSavedPage { private http: HttpClient, private authService: AuthService, private savedPlaceService: SavedPlacesService, - private toastController: ToastController) {} + private toastController: ToastController + ) { + this.placesSubscription = new Subscription(); + this.savePlaceSubscription = new Subscription(); + } ngOnInit() {} @@ -39,15 +45,23 @@ export class TabSavedPage { } async ionViewDidEnter() { - this.latitude = this.userLocationService.getLatitude(); this.isLoggedIn = await this.authService.isUserLoggedIn(); - console.log(this.isLoggedIn) - if(this.isLoggedIn) - { - this.authService.getPlaces().subscribe((data:any) => { - // console.log("getPlaces", data); + if (this.isLoggedIn) { + this.placesSubscription = this.savedPlaceService.getPlaces().subscribe((data: any) => { this.places = data.result; + this.places.sort((a: Place, b: Place) => { + return a.name.localeCompare(b.name); // Sort alphabetically based on the name property + }); + console.log("Saved Places: ", this.places); + }); + + this.savePlaceSubscription = this.savedPlaceService.savePlace.subscribe((savePlace: any) => { + if (savePlace === true) { + console.log("Save Page savePlace: ", this.savedPlaceService.savedPlace); + this.router.navigate(['tabs/tab-saved']); + this.addSavedPlace(this.savedPlaceService.savedPlace); + } }); } } @@ -56,35 +70,60 @@ export class TabSavedPage { this.isLoggedIn = false; } + goToPlace(result: any) { + this.savedPlaceService.goToPlace(result); + } + + goToSavedPlace(result: any) { + this.savedPlaceService.navigateToSavedPlace.next(true); + this.savedPlaceService.goToPlace(result); + } + savePlace(result: any) { - this.authService.getPlaces().subscribe((data:any) => { - // console.log("getPlaces", data); - this.places = data.result; - }); this.showResultsList = false; + console.log("result: ", result); + + // Assign the result to a new object let newPlace: Place = { + "mapboxId": result.id, + "name": result.text, "address": result.place_name, "latitude": result.center[1], "longitude": result.center[0], - "mapboxId": result.properties.mapbox_id, - "name": result.text + "category": "average", + "placeType": "unkown" + } + this.goToPlace(newPlace); } - - console.log("newPlace ",newPlace); - this.sucessToast('Succesfully added place'); - this.authService.addSavedPlace(newPlace).subscribe(data => { - console.log("savedPlaceService ",data); - //this.savedPlaces = data; - }); + addSavedPlace(place: any) { + if (!this.isPlaceSaved(place)) { + this.savedPlaceService.addSavedPlace(place) + .pipe(take(1)) //subscription will automatically unsubscribe after the first emission + .subscribe(data => { + console.log("addSavedPlace: ", data); + + if (this.places.length > 0) { + this.savedPlaceService.place.next([...this.places, place]); + } else { + this.savedPlaceService.place.next([place]); + } + // this.sucessToast('Succesfully added place'); + }, + error => { + console.error("addSavedPlace error: ", error); + } + ); + } } - removeSavedPlace(place: any) { - this.savedPlaces = this.savedPlaces.filter((sPlace: any) => { - if (sPlace.id !== place.id) return sPlace; + deleteSavedPlace(savedPlace: any) { + console.log("deleteSavedPlace", savedPlace); + this.savedPlaceService.deleteSavedPlace(savedPlace.mapboxId).subscribe(data => { + console.log("deleteSavedPlace: ", data); + this.places = this.places.filter((place: Place) => place.mapboxId !== savedPlace.mapboxId); }); - console.log(this.savedPlaces); } isPlaceSaved(place: any) { @@ -92,7 +131,7 @@ export class TabSavedPage { this.savedPlaces.forEach((sPlace: any) => { if (sPlace.id === place.id) isSaved = true; }); - console.log(isSaved) + //console.log(isSaved) return isSaved; } @@ -174,6 +213,12 @@ export class TabSavedPage { this.showResultsList = false; } + onBlur() { + console.log("Search Bar Blurred"); + setTimeout(() => { + this.showResultsList = false; + }, 200); // 200ms delay + } async sucessToast(message: string) { const toast = await this.toastController.create({ @@ -186,5 +231,9 @@ export class TabSavedPage { } // TODO send Boolean to mapmodal - + ngOnDestroy() { + if (this.placesSubscription) { + this.placesSubscription.unsubscribe(); // unsubscribe from the observable + } + } } diff --git a/app/WhereIsThePower/src/app/tab-schedule/schedule-time.ts b/app/WhereIsThePower/src/app/tab-schedule/schedule-time.ts new file mode 100644 index 00000000..398863b5 --- /dev/null +++ b/app/WhereIsThePower/src/app/tab-schedule/schedule-time.ts @@ -0,0 +1,4 @@ +export interface IScheduleTime { + startTime: Date; + endTime: Date; +} diff --git a/app/WhereIsThePower/src/app/tab-schedule/schedule.service.ts b/app/WhereIsThePower/src/app/tab-schedule/schedule.service.ts new file mode 100644 index 00000000..a2b0b297 --- /dev/null +++ b/app/WhereIsThePower/src/app/tab-schedule/schedule.service.ts @@ -0,0 +1,23 @@ +import { HttpClient } from '@angular/common/http'; +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root' +}) +export class ScheduleService { + apiUrl = 'https://witpa.codelog.co.za/api/fetchScheduleData' + + constructor(private httpClient: HttpClient) { } + + getScheduleData(suburb: number) { + let body = { + "suburbId": suburb + } + + return this.httpClient.post<number>(this.apiUrl, body); + } + + getLoadSheddingStage() { + return this.httpClient.get('https://witpa.codelog.co.za/api/fetchCurrentStage'); + } +} diff --git a/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.html b/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.html index c15c3d43..995cfc76 100644 --- a/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.html +++ b/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.html @@ -7,48 +7,71 @@ </ion-header> <ion-content [fullscreen]="true"> - <h1 class="ion-text-center">Area</h1> - <h1 class="ion-padding-start">Sat, 06 May</h1> - <ion-list> - <ion-item> - <ion-label> - <p>Stage 5</p> - <h2>00:00 - 02:30</h2> - </ion-label> - </ion-item> - <ion-item> - <ion-label> - <p>Stage 4</p> - <h2>08:00 - 10:30</h2> - </ion-label> - </ion-item> - <ion-item> - <ion-label> - <p>Stage 5</p> - <h2>16:00 - 18:30</h2> - </ion-label> - </ion-item> - </ion-list> - - <h1 class="ion-padding-start ion-padding-top">Sun, 07 May</h1> - <ion-list> - <ion-item> - <ion-label> - <p>Stage 5</p> - <h2>00:00 - 02:30</h2> - </ion-label> - </ion-item> - <ion-item> - <ion-label> - <p>Stage 4</p> - <h2>08:00 - 10:30</h2> - </ion-label> - </ion-item> - <ion-item> - <ion-label> - <p>Stage 5</p> - <h2>16:00 - 18:30</h2> - </ion-label> - </ion-item> - </ion-list> + <ion-grid> + <ion-row> + <ion-col class="searchbar-container" size-xs="12" size-md="4" offset-md="7.8"> + <ion-searchbar + [(ngModel)]="searchTerm" + animated="true" + placeholder="Search for a place..." + (ionInput)="onSearch($event)" + (keyup.enter)="onSearch($event)" + (ionFocus)="onSearch($event)" + (ionBlur)="onBlur()" + > + </ion-searchbar> + <ion-list *ngIf="filteredItems.length > 0 && showResultsList" class="search-results"> + <ion-item *ngFor="let result of filteredItems" (click)="selectSuburb(result)" button> + <ion-label> + <h3><strong>{{ result.name }}</strong></h3> + </ion-label> + </ion-item> + </ion-list> + </ion-col> + </ion-row> + <ion-row *ngIf="isLocationProvided && isAreaFound; else areaNotAvailable"> + <ion-col size="12" class="ion-text-center"><h2>{{ suburbName }}</h2></ion-col> + <ion-col size="12" class="ion-text-center"> + <ion-chip [color]="chipColor"> + Current Stage: {{ loadsheddingStage }} + </ion-chip> + </ion-col> + <ion-col> + <ion-card *ngFor="let time of loadshedTimes"> + <ion-card-header> + <ion-card-title> + {{ days[time.startTime.getDay()] }} + </ion-card-title> + <ion-card-subtitle> + {{ time.startTime.getDate() }} {{ months[time.startTime.getMonth()] }} + </ion-card-subtitle> + </ion-card-header> + <ion-card-content> + <ion-title> + {{ formatTime(time.startTime.getHours()) }}:{{ formatTime(time.startTime.getMinutes()) }} - {{ formatTime(time.endTime.getHours()) }}:{{ formatTime(time.endTime.getMinutes()) }} + </ion-title> + </ion-card-content> + </ion-card> + </ion-col> + </ion-row> + <ng-template #areaNotAvailable> + <ion-row> + <ion-col size="8" offset="2" size-md="6" offset-md="3" size-xl="4" offset-xl="4"> + <ion-img + src="assets/phoneStats.svg" + alt="Address on phone Illustration" + class="ion-padding" + > + </ion-img> + </ion-col> + </ion-row> + <ion-row> + <ion-col class="ion-text-center ion-text-md-end"> + </ion-col> + <ion-col size="12" class="ion-text-center"> + <h3>Search for a suburb inside City of Tshwane.</h3> + </ion-col> + </ion-row> + </ng-template> + </ion-grid> </ion-content> diff --git a/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.scss b/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.scss index 81a69207..0a44da5e 100644 --- a/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.scss +++ b/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.scss @@ -1,3 +1,21 @@ .map { width: 100%; -} \ No newline at end of file +} + +.loadsheddingBanner{ + background-color: yellow; +} + +.search-container { + position: relative; +} + +.search-results { + position: absolute; + top: 100%; /* Display results directly below the search bar */ + left: 0; + right: 0; + z-index: 999; /* Ensure results are displayed above other elements */ + max-height: 300px; + overflow-y: auto; /* Allow scrolling for long lists */ +} diff --git a/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.ts b/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.ts index 68c58c8f..edd867f9 100644 --- a/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.ts +++ b/app/WhereIsThePower/src/app/tab-schedule/tab-schedule.page.ts @@ -1,4 +1,9 @@ import { Component } from '@angular/core'; +import { Subscription } from 'rxjs'; +import { UserLocationService } from '../user-location.service'; +import { ScheduleService } from './schedule.service'; +import { HttpClient } from '@angular/common/http'; +import { IScheduleTime } from './schedule-time'; @Component({ selector: 'app-tab-schedule', @@ -6,7 +11,161 @@ import { Component } from '@angular/core'; styleUrls: ['tab-schedule.page.scss'] }) export class TabSchedulePage { + searchItems: any[] = []; + filteredItems: any[] = []; + geojsonData: any; + showResultsList = false; + isLocationProvided = false; + isAreaFound = false; + suburbName = ""; + searchTerm: string = ""; + loadsheddingStage: number = 0; + chipColor: string = "success"; + months: string[] = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + days: string[] = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"]; - constructor() {} + loadshedTimes: IScheduleTime[] = []; + // Subscriptions + suburbDataSubscription: Subscription = new Subscription(); + listSuburbsSubscription: Subscription = new Subscription(); + loadsheddingStageSubscription: Subscription = new Subscription(); + isLocationAvailableSubscription: Subscription = new Subscription(); + + constructor(private userLocationService: UserLocationService, + private scheduleService: ScheduleService, + private http: HttpClient, + ) {} + + async ngOnInit() { + this.listSuburbsSubscription = this.http.get('assets/suburbs.json').subscribe(data => { + this.geojsonData = data; + this.searchItems = this.geojsonData.features.map((feature: any) => ({ + name: feature.properties.SP_NAME, + id: feature.id + })); + this.filteredItems = [...this.searchItems]; + console.log("Search Items:", this.filteredItems); + }); + + this.loadsheddingStageSubscription = this.scheduleService.getLoadSheddingStage().subscribe((stage: any) => { + console.log(stage); + this.loadsheddingStage = stage.result; + this.chipColor = this.setChipColor(this.loadsheddingStage); + }); + } + + async ionViewWillEnter(){ + // Attempt to get location + await this.userLocationService.getUserLocation(); + + this.isLocationAvailableSubscription = this.userLocationService.isLocationAvailable.subscribe((isLocationAvailable) => { + this.isLocationProvided = isLocationAvailable; + console.log("isLocationAvailable (Schedule page): ", this.isLocationProvided); + }); + + // Default Schedule: Area schedule on user location + let area = await this.userLocationService.getArea(); + console.log("Area: ", area); + if (area != null) { + console.log("Area Name: ", area.properties.SP_NAME); + console.log("Area ID: ", area.id); + this.selectSuburb( + { + "id": area.id, + "name": area.properties.SP_NAME + } + ); + } + else { + console.log("Area is not available outside of City of Tshwane."); + } + } + + onSearch(event: any) { + if (this.searchTerm.length > 0) { + this.showResultsList = true; + } + else { + this.showResultsList = false; + } + console.log(this.searchTerm); + // Reset items back to all of the items + this.filteredItems = [...this.searchItems]; + + // if the value is an empty string, don't filter the items + if (!this.searchTerm) return; + + this.filteredItems = this.searchItems.filter(item => { + if (item.name && this.searchTerm) { + return item.name.toLowerCase().includes(this.searchTerm.toLowerCase()); + } + return false; + }); + console.log("Filtered Items: ", this.filteredItems); + } + + onBlur() { + console.log("Search Bar Blurred"); + setTimeout(() => { + this.showResultsList = false; + }, 200); // 200ms delay + } + + selectSuburb(selectedSuburb: any) { + //this.clearAllCharts(); + console.log(selectedSuburb.name); // Logs the suburb name + console.log(selectedSuburb.id); // Logs the suburb id + this.showResultsList = false; + this.isAreaFound = true; + + this.suburbDataSubscription = this.scheduleService.getScheduleData(selectedSuburb.id).subscribe((data: any) => { + console.log("ScheduleService: ", data); + if (data.result != null) { + this.suburbName = selectedSuburb.name; + this.searchTerm = selectedSuburb.name; + + this.loadshedTimes = []; + + data.result.timesOff.forEach((timeOff: any) => { + let tempScheduleTimes: IScheduleTime = { + startTime: this.convertToDateTime(timeOff.start), + endTime: this.convertToDateTime(timeOff.end) + } + + this.loadshedTimes.push(tempScheduleTimes); + }); + + console.log(this.loadshedTimes); + + } + else { + this.isAreaFound = false; + } + }, + (error) => { + console.error(error); + this.isAreaFound = false; + }); + } + + convertToDateTime(utcTime: number) { + return new Date(1000 * utcTime); + } + + formatTime(unformattedTime: number) { + if(unformattedTime < 10) return '0' + unformattedTime; + return unformattedTime; + } + + setChipColor(loadshedStage: number) { + if(loadshedStage > 0 && loadshedStage < 4) return "warning"; + if(loadshedStage >= 4) return "danger"; + return "success"; + } + + ngOnDestroy() { + this.suburbDataSubscription.unsubscribe(); + this.listSuburbsSubscription.unsubscribe(); + } } diff --git a/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.html b/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.html index 48bbebcd..e08e2ff1 100644 --- a/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.html +++ b/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.html @@ -9,20 +9,84 @@ <ion-content [fullscreen]="true"> <ion-content> <ion-grid> - <ion-row class="ion-justify-content-center ion-padding-bottom"> - <ion-col size="10" offset="1" size-md="4" offset-md="0" class="ion-text-center"> - <ion-text><h2>Loadshedding for Today</h2></ion-text> - <div class="doughnutChart-container ion-justify-content-center"> - <canvas #doughnutChartRef id="doughnutChart"></canvas> - </div> - </ion-col> - <ion-col size="12" size-md="7" offset-md="1" class="ion-text-center ion-padding-vertical ion-justify-content-center ion-padding-vertical"> - <ion-text><h2>Loadshedding for this Week</h2></ion-text> - <div class="chart-container"> - <canvas #barChartRef id="barChart"></canvas> - </div> + <ion-row> + <ion-col class="searchbar-container" size-xs="12" size-md="4" offset-md="7.8"> + <ion-searchbar + [(ngModel)]="searchTerm" + animated="true" + placeholder="Search for a place..." + (ionInput)="onSearch($event)" + (keyup.enter)="onSearch($event)" + (ionFocus)="onSearch($event)" + (ionBlur)="onBlur()" + > + </ion-searchbar> + <ion-list *ngIf="filteredItems.length > 0 && showResultsList" class="search-results"> + <ion-item *ngFor="let result of filteredItems" (click)="selectSuburb(result)" button> + <ion-label> + <h3><strong>{{ result.name }}</strong></h3> + </ion-label> + </ion-item> + </ion-list> </ion-col> </ion-row> + <div *ngIf="isLocationProvided && isAreaFound; else areaNotAvailable"> + <ion-row + class="ion-justify-content-center"> + <ion-col size="12" class="ion-text-start ion-padding-start"> + <h2>{{ suburbName }}</h2> + </ion-col> + </ion-row> + <ion-row> + <ion-col size="12" size-md="4" class="ion-text-center"> + <ion-card class="graph ion-padding-bottom ion-padding-start ion-padding-end"> + <ion-card-header> + <ion-card-title> + <ion-text><h3>Loadshedding for Today</h3></ion-text> + </ion-card-title> + </ion-card-header> + <ion-card-content> + <div class="doughnutChart-container ion-justify-content-center"> + <canvas #doughnutChartRef id="doughnutChart"></canvas> + </div> + </ion-card-content> + </ion-card> + </ion-col> + <ion-col size="12" size-md="8" class="ion-text-center ion-justify-content-center"> + <ion-card class="graph"> + <ion-card-header> + <ion-card-title> + <ion-text><h3>Loadshedding for this Week</h3></ion-text> + </ion-card-title> + </ion-card-header> + <ion-card-content> + <div class="chart-container"> + <canvas #barChart id="barChart"></canvas> + </div> + </ion-card-content> + </ion-card> + </ion-col> + </ion-row> + </div> + <ng-template #areaNotAvailable> + <ion-row> + <ion-col size="8" offset="2" size-md="6" offset-md="3" size-xl="4" offset-xl="4"> + <ion-img + src="assets/phoneStats.svg" + alt="Address on phone Illustration" + class="ion-padding" + > + </ion-img> + </ion-col> + </ion-row> + <ion-row> + <ion-col class="ion-text-center ion-text-md-end"> + </ion-col> + <ion-col size="12" class="ion-text-center"> + <h3>Search for a suburb inside City of Tshwane.</h3> + </ion-col> + </ion-row> + </ng-template> </ion-grid> </ion-content> </ion-content> diff --git a/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.scss b/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.scss index e69de29b..1cb6222b 100644 --- a/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.scss +++ b/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.scss @@ -0,0 +1,17 @@ +.search-container { + position: relative; +} + +.search-results { + position: absolute; + top: 100%; /* Display results directly below the search bar */ + left: 0; + right: 0; + z-index: 999; /* Ensure results are displayed above other elements */ + max-height: 300px; + overflow-y: auto; /* Allow scrolling for long lists */ +} + +.graph{ + height: 95%; +} diff --git a/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.ts b/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.ts index 97ad57d7..5eb689f8 100644 --- a/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.ts +++ b/app/WhereIsThePower/src/app/tab-statistics/tab-statistics.page.ts @@ -1,6 +1,12 @@ import { Component, ElementRef, OnInit, ViewChild } from '@angular/core'; -import { Chart, registerables } from 'chart.js'; +import { registerables } from 'chart.js'; import { StatisticsService } from './statistics.service'; +import { HttpClient } from '@angular/common/http'; +import { Chart } from 'chart.js/auto' +import { Renderer2 } from '@angular/core'; +import { UserLocationService } from '../user-location.service'; +import { Subscription } from 'rxjs'; + Chart.register(...registerables) @Component({ @@ -14,50 +20,100 @@ export class TabStatisticsPage implements OnInit { doughnutChart: any = null; barChart: any = null; - constructor(private statisticsService: StatisticsService) { } - ngOnInit() { - const suburbId = 17959; - this.statisticsService.getSuburbData(suburbId).subscribe((data) => { - console.log("statisticsService: ",data); - - this.processDoughnutChart(data); - this.processBarChart(data); - }, - (error) => { - console.error(error); + searchItems: any[] = []; + filteredItems: any[] = []; + geojsonData: any; + showResultsList = false; + isLocationProvided = false; + isAreaFound = false; + suburbName = ""; + searchTerm: string = ""; + + // Subscriptions + isLocationAvailableSubscription: Subscription = new Subscription(); + suburbDataSubscription: Subscription = new Subscription(); + listSuburbsSubscription: Subscription = new Subscription(); + + constructor( + private statisticsService: StatisticsService, + private http: HttpClient, + private renderer: Renderer2, + private userLocationService: UserLocationService + ) { } + async ngOnInit() { + this.listSuburbsSubscription = this.http.get('assets/suburbs.json').subscribe(data => { + this.geojsonData = data; + this.searchItems = this.geojsonData.features.map((feature: any) => ({ + name: feature.properties.SP_NAME, + id: feature.id + })); + this.filteredItems = [...this.searchItems]; + console.log("Search Items:", this.filteredItems); }); } - processDoughnutChart(data: any) - { - // Get today's day name (e.g., "Mon", "Tue", etc.) - const today = new Date().toLocaleDateString('en-US', { weekday: 'short' }); - - // Get the on and off values for today's day from the data - const todayOnValue = data.result.perDayTimes[today]?.on || 0; - const todayOffValue = data.result.perDayTimes[today]?.off || 0; - - // Convert total uptime and downtime to hours - const uptimeToday = Math.floor(todayOnValue / 60); - const downtimeToday = Math.floor(todayOffValue / 60); - - // Data for Doughnut Chart (Uptime/Downtime for Today) - const doughnutData = { - labels: ['Uptime', 'Downtime'], - datasets: [{ - label: 'Loadshedding', - data: [uptimeToday, downtimeToday], // Uptime vs Downtime - borderWidth: 0, - backgroundColor: [ - '#007A4D', - '#DE3831', - ], - }] - }; - this.populateDoughnutChart(doughnutData); + async ionViewWillEnter() { + // Attempt to get location + await this.userLocationService.getUserLocation(); + + // Check if the location is available + this.isLocationAvailableSubscription = this.userLocationService.isLocationAvailable.subscribe((isLocationAvailable) => { + this.isLocationProvided = isLocationAvailable; + console.log("isLocationAvailable (Stats page): ", this.isLocationProvided); + }); + + // Default Statistics: Area stats on user location + let area = await this.userLocationService.getArea(); + console.log("Area: ", area); + if (area != null) { + console.log("Area Name: ", area.properties.SP_NAME); + console.log("Area ID: ", area.id); + this.selectSuburb( + { + "id": area.id, + "name": area.properties.SP_NAME + } + ); + } + else { + console.log("Area is not available outside of City of Tshwane."); + } + } + + processDoughnutChart(data: any) { + // Get today's day name (e.g., "Mon", "Tue", etc.) + const today = new Date().toLocaleDateString('en-US', { weekday: 'short' }); + + // Get the on and off values for today's day from the data + const todayOnValue = data.result.perDayTimes[today]?.on || 0; + const todayOffValue = data.result.perDayTimes[today]?.off || 0; + + // Convert total uptime and downtime to hours + const uptimeToday = Math.floor(todayOnValue / 60); + const downtimeToday = Math.floor(todayOffValue / 60); + + // Data for Doughnut Chart (Uptime/Downtime for Today) + const doughnutData = { + labels: ['Uptime', 'Downtime'], + datasets: [{ + label: 'Loadshedding', + data: [uptimeToday, downtimeToday], // Uptime vs Downtime + borderWidth: 0, + backgroundColor: [ + '#007A4D', + '#DE3831', + ], + }] + }; + this.populateDoughnutChart(doughnutData); } populateDoughnutChart(doughnutData: any) { + if (this.doughnutChart) { + this.doughnutChart.clear(); + this.doughnutChart.destroy(); + } + this.doughnutChart = new Chart("doughnutChart", { type: 'doughnut', data: doughnutData, @@ -72,11 +128,10 @@ export class TabStatisticsPage implements OnInit { }); } - processBarChart(data: any) - { + processBarChart(data: any) { const daysOfWeek = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; const todayIndex = new Date().getDay(); // 0 for Sunday, 1 for Monday, etc. - const orderedDaysOfWeek = [...daysOfWeek.slice(todayIndex+1), ...daysOfWeek.slice(0, todayIndex+1)]; + const orderedDaysOfWeek = [...daysOfWeek.slice(todayIndex + 1), ...daysOfWeek.slice(0, todayIndex + 1)]; const barData = { labels: orderedDaysOfWeek, @@ -100,7 +155,12 @@ export class TabStatisticsPage implements OnInit { } populateBarChart(barData: any) { - this.barChart = new Chart("barChart", { + if (this.barChart) { + this.barChart.clear(); + this.barChart.destroy(); + } + + this.barChart = new Chart(this.barChartRef.nativeElement, { type: 'bar', data: barData, options: { @@ -131,7 +191,14 @@ export class TabStatisticsPage implements OnInit { } }, }, - }); + });/* + console.log("????: ", this.barChart); + + if (this.barChart) { + this.barChart.clear(); + + this.barChart.destroy(); + }*/ } clearDoughnutChart() { @@ -146,5 +213,67 @@ export class TabStatisticsPage implements OnInit { this.clearBarChart(); this.clearDoughnutChart(); } + + onSearch(event: any) { + if (this.searchTerm.length > 0) { + this.showResultsList = true; + } + else { + this.showResultsList = false; + } + console.log(this.searchTerm); + // Reset items back to all of the items + this.filteredItems = [...this.searchItems]; + + // if the value is an empty string, don't filter the items + if (!this.searchTerm) return; + + this.filteredItems = this.searchItems.filter(item => { + if (item.name && this.searchTerm) { + return item.name.toLowerCase().includes(this.searchTerm.toLowerCase()); + } + return false; + }); + console.log("Filtered Items: ", this.filteredItems); + } + + onBlur() { + console.log("Search Bar Blurred"); + setTimeout(() => { + this.showResultsList = false; + }, 200); // 200ms delay + } + + selectSuburb(selectedSuburb: any) { + //this.clearAllCharts(); + console.log(selectedSuburb.name); // Logs the suburb name + console.log(selectedSuburb.id); // Logs the suburb id + this.showResultsList = false; + this.isAreaFound = true; + + this.suburbDataSubscription = this.statisticsService.getSuburbData(selectedSuburb.id).subscribe((data: any) => { + console.log("statisticsService: ", data); + if (data.result != null) { + this.suburbName = selectedSuburb.name; + this.searchTerm = selectedSuburb.name; + + this.processDoughnutChart(data); + this.processBarChart(data); + } + else { + this.isAreaFound = false; + } + }, + (error) => { + console.error(error); + this.isAreaFound = false; + }); + } + + ngOnDestroy() { + this.isLocationAvailableSubscription.unsubscribe(); + this.suburbDataSubscription.unsubscribe(); + this.listSuburbsSubscription.unsubscribe(); + } } diff --git a/app/WhereIsThePower/src/app/user-location.service.ts b/app/WhereIsThePower/src/app/user-location.service.ts index e37115f1..fc9b6232 100644 --- a/app/WhereIsThePower/src/app/user-location.service.ts +++ b/app/WhereIsThePower/src/app/user-location.service.ts @@ -2,6 +2,7 @@ import { Injectable } from '@angular/core'; import { Geolocation } from '@capacitor/geolocation'; import { BehaviorSubject } from 'rxjs'; import { AlertController } from '@ionic/angular'; +import { HttpClient } from '@angular/common/http'; @Injectable({ providedIn: 'root' @@ -10,8 +11,9 @@ export class UserLocationService { latitude: number = 0; longitude: number = 0; isLocationAvailable: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false); + suburbData: any; - constructor(private alertController: AlertController) { } + constructor(private alertController: AlertController, private http: HttpClient) { } getLatitude() { @@ -29,9 +31,8 @@ export class UserLocationService { this.isLocationAvailable.next(true); this.latitude = coordinates.coords.latitude; this.longitude = coordinates.coords.longitude; - } - catch (error) - { + } + catch (error) { console.error("Error getting user location:", error); this.showLocationErrorAlert(); } @@ -50,7 +51,42 @@ export class UserLocationService { } ] }); - + await alert.present(); } + + async getArea() { + // Fetch the suburb data + const data = await this.http.get('assets/suburbs.json').toPromise(); + this.suburbData = data; + + console.log("suburbData:", this.suburbData); + + // Check if the user's location is inside any of the polygons and find SP_NAME + for (const feature of this.suburbData.features) { + const polygon = feature.geometry.coordinates[0]; // Assuming it's the first ring for simplicity + + if (this.isPointInPolygon(this.latitude, this.longitude, polygon)) { + return feature; // Found the area, return its SP_NAME + } + } + + return null; // Location is not in any known SP_NAME area + } + + + isPointInPolygon(userLat: number, userLon: number, polygon: number[][]) { + let inside = false; + + for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) { + const xi = polygon[i][0], yi = polygon[i][1]; + const xj = polygon[j][0], yj = polygon[j][1]; + + const intersect = ((yi > userLat) !== (yj > userLat)) && + (userLon < (xj - xi) * (userLat - yi) / (yj - yi) + xi); + if (intersect) inside = !inside; + } + + return inside; + } } diff --git a/app/WhereIsThePower/src/assets/CablesDamaged.svg b/app/WhereIsThePower/src/assets/CablesDamaged.svg new file mode 100644 index 00000000..d11ebf00 --- /dev/null +++ b/app/WhereIsThePower/src/assets/CablesDamaged.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" stroke="white" fill="white" height="48" viewBox="0 -960 960 960" width="48"><path d="M412-120q-12.75 0-21.375-8.625T382-150v-88L256-377q-7.652-7.857-11.826-18.214T240-417v-192.318Q240-634 257-651.5q17-17.5 41-17.5l60 60h-58v191l142 155.701V-180h76v-82l49-54L88-795q-9-9-9-21t9-21q9-9 21-9t21 9l708 708q9 9 9 21t-9 21q-9 9-21 9t-21-9L610-273l-32 35v88q0 12.75-8.625 21.375T548-120H412Zm308-489v195q0 10.667-3.5 20.333Q713-384 706-376l-14 16-32-32v-217H443L342-710v-100q0-12.75 8.675-21.375 8.676-8.625 21.5-8.625 12.825 0 21.325 8.625T402-810v141h156v-141q0-12.75 8.675-21.375 8.676-8.625 21.5-8.625 12.825 0 21.325 8.625T618-810v171l-30-30h72q24.75 0 42.375 17.625T720-609ZM553-499Zm-114 55Z"/></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/assets/CablesStolen.svg b/app/WhereIsThePower/src/assets/CablesStolen.svg new file mode 100644 index 00000000..759547e0 --- /dev/null +++ b/app/WhereIsThePower/src/assets/CablesStolen.svg @@ -0,0 +1,3 @@ +<svg width="63" height="63" viewBox="0 0 63 63" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M21.735 14.3062L17.0625 11.9438L20.37 5.25H42.6037L45.9375 11.9438L41.265 14.28L39.375 10.5H23.625L21.735 14.3062ZM48.8775 21H36.9862L34.9125 13.125H28.0875L26.0137 21H14.1225L10.7625 27.6938L15.4612 30.03L17.3775 26.25H45.6224L47.5125 30.0562L52.2112 27.72L48.8775 21ZM46.6462 57.75H41.2125L40.5825 55.3875L31.5 41.7375L22.3912 55.3875L21.7875 57.75H16.3537L23.94 28.875H29.3737L28.4287 32.4188L31.5 37.0125L34.5449 32.4188L33.6262 28.875H39.06L46.6462 57.75ZM29.925 39.375L27.5625 35.8312L24.465 47.5912L29.925 39.375ZM38.535 47.565L35.4375 35.805L33.075 39.375L38.535 47.565Z" fill="white"/> +</svg> diff --git a/app/WhereIsThePower/src/assets/Drifting.svg b/app/WhereIsThePower/src/assets/Drifting.svg new file mode 100644 index 00000000..7abb7423 --- /dev/null +++ b/app/WhereIsThePower/src/assets/Drifting.svg @@ -0,0 +1 @@ +<svg viewBox="-74.99999999999989 225 1575 989.9999999999999" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" overflow="visible" width="1575px" height="989.9999999999999px"><g id="Master/Spot Illustration/Drifting"><g id="Background" transform="translate(-82 155.8) scale(0.86 0.8600000290643601)"><g id="Background/Speed"><g id="speed"><g id="bg"><path id="Path" d="M276 530.72H86C84.067 530.72 82.5 529.153 82.5 527.22C82.5 525.287 84.067 523.72 86 523.72H276C277.933 523.72 279.5 525.287 279.5 527.22C279.5 529.153 277.933 530.72 276 530.72V530.72Z" fill="#D1D9DB"/><path id="Path_2" d="M426.5 300V300C402.21 299.77 379.43 299.43 357.41 299.11C295.32 298.19 236.67 297.32 166.82 299.37H166.72C164.787 299.4 163.195 297.858 163.165 295.925C163.135 293.992 164.677 292.4 166.61 292.37C236.61 290.37 295.34 291.19 357.51 292.11C379.51 292.43 402.29 292.77 426.51 293C428.443 293 430.01 294.567 430.01 296.5C430.01 298.433 428.443 300 426.51 300H426.5Z" fill="#D1D9DB"/><path id="Path_3" d="M1037.76 458.72C1018.28 458.72 998.827 458.447 979.4 457.9C977.467 457.845 975.945 456.233 976 454.3C976.055 452.367 977.667 450.845 979.6 450.9C1048.3 452.83 1117.65 451.33 1185.74 446.45C1187.67 446.312 1189.35 447.767 1189.49 449.7C1189.63 451.633 1188.17 453.312 1186.24 453.45C1137.16 457 1087.43 458.72 1037.76 458.72Z" fill="#D1D9DB"/><path id="Path_4" d="M385.5 625.31H248.88C246.947 625.31 245.38 623.743 245.38 621.81C245.38 619.877 246.947 618.31 248.88 618.31H385.5C387.433 618.31 389 619.877 389 621.81C389 623.743 387.433 625.31 385.5 625.31Z" fill="#D1D9DB"/><path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M215 468.34C221.734 469.95 228.636 470.752 235.56 470.73C259.659 470.73 283.503 461.748 306.821 452.965L307.55 452.69C336.05 441.84 365.53 430.62 394.35 436.69C396.233 437.068 398.07 435.858 398.465 433.979C398.86 432.099 397.666 430.252 395.79 429.84C364.96 423.35 334.51 434.93 305.06 446.13C274.69 457.7 245.92 468.58 216.69 461.58C210.755 460.218 205.096 457.851 199.96 454.58C205.373 452.536 210.309 449.401 214.46 445.37C224.78 434.92 224.25 420.4 217.85 412.92C213.797 408.415 207.895 406.028 201.85 406.45C194.791 406.705 188.217 410.106 183.93 415.72C177.07 425.23 177.72 439.84 185.49 450.47C185.74 450.8 186 451.14 186.26 451.47L186.26 451.47C185.4 451.68 184.54 451.89 183.68 452.08C151.031 459.554 117.324 461.246 84.0901 457.08C82.1709 456.84 80.4203 458.201 80.1801 460.12C79.9398 462.039 81.3009 463.79 83.2201 464.03C117.258 468.295 151.78 466.563 185.22 458.91C187.433 458.41 189.64 457.857 191.84 457.25C199.18 463.45 208.07 466.68 215 468.34ZM202.11 413.41H202.83C206.467 413.235 209.994 414.682 212.46 417.36C217.92 423.77 215.29 434.42 209.41 440.36C205.21 444.65 199.66 447.36 193.66 449.36C192.746 448.395 191.895 447.373 191.11 446.3C185.08 438.05 184.44 426.9 189.58 419.78C192.595 415.891 197.191 413.554 202.11 413.41Z" fill="#D1D9DB"/><path id="Path_5" d="M1284.18 326.5H1187C1185.07 326.5 1183.5 324.933 1183.5 323C1183.5 321.067 1185.07 319.5 1187 319.5H1284.18C1286.11 319.5 1287.68 321.067 1287.68 323C1287.68 324.933 1286.11 326.5 1284.18 326.5V326.5Z" fill="#D1D9DB"/><path id="Path_6" d="M1287 360.13C1272.92 360.13 1258.84 359.757 1244.77 359.01C1243.52 358.942 1242.4 358.212 1241.83 357.095C1241.27 355.978 1241.34 354.644 1242.02 353.595C1242.71 352.546 1243.9 351.942 1245.15 352.01C1295.37 354.704 1345.74 352.537 1395.54 345.54C1396.78 345.361 1398.02 345.857 1398.79 346.839C1399.56 347.822 1399.76 349.143 1399.29 350.304C1398.83 351.466 1397.78 352.291 1396.54 352.47C1360.25 357.582 1323.65 360.142 1287 360.13Z" fill="#D1D9DB"/><path id="Path_7" d="M961.1 584.34C959.167 584.37 957.575 582.828 957.545 580.895C957.515 578.962 959.057 577.37 960.99 577.34L1370.6 563.84C1372.53 563.776 1374.15 565.292 1374.22 567.225C1374.28 569.158 1372.76 570.776 1370.83 570.84L961.22 584.33L961.1 584.34Z" fill="#D1D9DB"/><path id="Path_8" d="M1092.73 721.64C1064.32 721.64 1035.98 721.19 1007.73 720.29C1006.48 720.251 1005.35 719.547 1004.75 718.445C1004.16 717.342 1004.2 716.008 1004.86 714.945C1005.52 713.881 1006.7 713.251 1007.95 713.29C1086.95 715.81 1167.01 714.79 1245.84 710.29C1247.77 710.18 1249.43 711.657 1249.54 713.59C1249.65 715.523 1248.17 717.18 1246.24 717.29C1195.35 720.18 1144 721.64 1092.73 721.64Z" fill="#D1D9DB"/><path id="Shape_2" fill-rule="evenodd" clip-rule="evenodd" d="M1275.07 512.01C1283.84 514.068 1292.81 515.105 1301.82 515.1C1324.81 515.094 1347.3 508.474 1366.63 496.03C1367.34 496.64 1368.09 497.21 1368.86 497.75C1382.02 506.88 1399.35 506.24 1411.24 504.96C1417.12 504.324 1423.04 503.429 1428.77 502.564L1428.86 502.55L1428.86 502.55C1439.12 501 1449.71 499.4 1460.12 499.31C1478.35 499.09 1493.75 504.24 1503.48 513.66C1504.88 514.834 1506.96 514.727 1508.23 513.417C1509.51 512.106 1509.56 510.033 1508.35 508.66C1494.18 494.94 1474.24 492.17 1460.05 492.34C1449.15 492.43 1438.31 494.07 1427.81 495.66C1422.13 496.52 1416.25 497.41 1410.49 498.03C1399.72 499.19 1384.09 499.83 1372.85 492.03L1372.65 491.88C1373.35 491.36 1374.06 490.83 1374.75 490.29C1379.83 486.34 1386 480.84 1388.28 473.2C1390.56 465.56 1387.94 455.28 1379.56 451.98C1373.79 449.72 1366.64 451.6 1361.64 456.67C1357.08 461.33 1354.95 467.85 1355.64 475.03C1356.23 480.746 1358.34 486.199 1361.76 490.82C1336.86 506.4 1305.18 511.92 1276.68 505.2C1274.82 504.811 1272.99 505.973 1272.56 507.82C1272.12 509.668 1273.23 511.527 1275.07 512.01ZM1366.63 461.53C1368.65 459.382 1371.44 458.114 1374.39 458C1375.29 457.985 1376.19 458.145 1377.03 458.47C1381.48 460.22 1383.01 466.54 1381.61 471.12C1379.86 476.88 1374.74 481.42 1370.49 484.73C1369.55 485.46 1368.63 486.17 1367.63 486.87C1364.86 483.221 1363.13 478.886 1362.63 474.33C1362.26 470.73 1362.63 465.58 1366.63 461.53Z" fill="#D1D9DB"/><path id="Path_9" d="M459.77 334.12C453.1 334.12 440.61 334.12 428.12 334.06C415.63 334 403.12 334 396.5 334C394.567 334 393 332.433 393 330.5C393 328.567 394.567 327 396.5 327C403.16 327 415.65 327 428.14 327.06C440.63 327.12 453.14 327.12 459.77 327.12C461.703 327.12 463.27 328.687 463.27 330.62C463.27 332.553 461.703 334.12 459.77 334.12Z" fill="#D1D9DB"/><path id="Shape_3" fill-rule="evenodd" clip-rule="evenodd" d="M618.07 146C617.557 146 617.047 145.98 616.54 145.94C611.166 145.706 606.241 142.87 603.34 138.34C600.927 134.33 600.3 129.493 601.61 125C603.47 118.1 609.44 110.9 617.08 106.19C613.196 104.422 609.041 103.327 604.79 102.95C595.95 102.09 586.79 103.71 578.02 105.27L424.1 132.48C422.226 132.757 420.472 131.493 420.142 129.628C419.811 127.763 421.025 125.973 422.88 125.59L576.8 98.33L576.854 98.3205C586.117 96.6835 595.689 94.9919 605.46 95.94C612.247 96.5101 618.799 98.6941 624.57 102.31C647.82 92.1 676.09 93.59 698.31 105.88C725.97 93.88 758 103.18 785.71 113.88L789.21 115.24L789.228 115.247C815.332 125.405 842.326 135.909 868.57 129.81C869.788 129.526 871.066 129.914 871.921 130.827C872.776 131.74 873.079 133.039 872.716 134.237C872.353 135.434 871.378 136.346 870.16 136.63C841.793 143.219 813.776 132.312 786.679 121.763L786.67 121.76L783.18 120.4C757.18 110.3 729.85 102.25 705.69 110.48C706.5 111.06 707.31 111.65 708.1 112.27C708.201 112.348 708.298 112.431 708.39 112.52C713.105 117.374 713.7 124.895 709.808 130.43C705.916 135.965 698.637 137.948 692.474 135.153C686.312 132.358 683.01 125.575 684.61 119C685.717 115.37 687.992 112.206 691.08 110C672.109 101.025 650.322 100.073 630.64 107.36C631.2 107.97 631.73 108.59 632.23 109.24C639.35 118.39 639.63 131.37 632.9 139.43C629.15 143.676 623.735 146.075 618.07 146ZM623.76 110.4L622.37 111.13C615.51 114.84 609.89 121.13 608.37 126.75C607.411 129.563 607.864 132.666 609.589 135.086C611.313 137.507 614.098 138.949 617.07 138.96C620.992 139.327 624.862 137.848 627.54 134.96C632.13 129.46 631.77 120.06 626.72 113.55C625.831 112.425 624.84 111.384 623.76 110.44V110.4ZM691.33 120.88C692.07 118.25 694.31 115.89 698 113.82C699.939 115.024 701.814 116.325 703.62 117.72C705.44 119.56 705.54 122.42 704.99 124.56C704.44 126.7 702.91 129.21 700.3 129.93C697.69 130.65 695.1 129.22 693.55 127.65C692 126.08 690.59 123.51 691.33 120.88Z" fill="#D1D9DB"/><path id="Path_10" d="M1148.16 426.93H1108.16C1106.23 426.93 1104.66 425.363 1104.66 423.43C1104.66 421.497 1106.23 419.93 1108.16 419.93H1148.16C1150.09 419.93 1151.66 421.497 1151.66 423.43C1151.66 425.363 1150.09 426.93 1148.16 426.93V426.93Z" fill="#D1D9DB"/><path id="Path_11" d="M1105 622.63C1103.07 622.649 1101.48 621.098 1101.47 619.165C1101.45 617.232 1103 615.649 1104.93 615.63L1293.08 611.9H1293.15C1295.08 611.881 1296.67 613.432 1296.69 615.365C1296.7 617.298 1295.15 618.881 1293.22 618.9L1105.07 622.63H1105Z" fill="#D1D9DB"/><path id="Path_12" d="M1006.2 231.13C1002.19 231.147 998.184 230.708 994.27 229.82C992.387 229.384 991.214 227.503 991.65 225.62C992.086 223.737 993.967 222.564 995.85 223C1011.17 226.53 1026.41 221.32 1042.54 215.81C1049.34 213.49 1056.36 211.09 1063.39 209.41C1099.88 200.67 1137.39 211.07 1170.56 220.25C1171.82 220.533 1172.82 221.486 1173.16 222.73C1173.51 223.974 1173.14 225.306 1172.21 226.197C1171.27 227.088 1169.93 227.393 1168.7 226.99C1136.38 217.99 1099.7 207.9 1065.02 216.22C1058.31 217.82 1051.45 220.17 1044.81 222.44C1032.24 226.73 1019.34 231.13 1006.2 231.13Z" fill="#D1D9DB"/><path id="Path_13" d="M1449.75 681.3H1449.69L1404.47 680.54C1403.22 680.519 1402.08 679.832 1401.47 678.738C1400.86 677.644 1400.89 676.31 1401.53 675.238C1402.17 674.166 1403.34 673.519 1404.59 673.54L1449.81 674.29C1451.06 674.301 1452.21 674.978 1452.83 676.066C1453.44 677.154 1453.43 678.489 1452.8 679.566C1452.16 680.644 1451 681.301 1449.75 681.29V681.3Z" fill="#D1D9DB"/><path id="Path_14" d="M1421.59 709.64H1421.4L1355.48 706.12C1353.55 706.018 1352.06 704.368 1352.17 702.435C1352.27 700.502 1353.92 699.018 1355.85 699.12L1421.78 702.64C1423.03 702.674 1424.17 703.373 1424.76 704.472C1425.36 705.572 1425.32 706.907 1424.67 707.972C1424.01 709.038 1422.84 709.674 1421.59 709.64V709.64Z" fill="#D1D9DB"/></g></g></g></g><g id="Sign" transform="translate(700 320) scale(1 1)"><g id="Sign/Marker"><g id="marker"><g id="signs"><path id="Path" d="M51.4904 540.83C58.9404 506.91 75.0004 484.1 102.17 469C122.17 457.89 147.05 451.72 176.01 450.66C200.75 449.76 229.42 451.26 229.7 451.27C230.76 451.321 231.673 452.035 231.977 453.052C232.281 454.069 231.909 455.166 231.05 455.79C230.47 456.21 173.05 498.21 160.9 513.11C145.85 531.64 135.74 557.88 133.9 583.3C132.15 607.09 147.98 650.38 159.53 681.99C163.34 692.4 166.63 701.4 168.97 708.71C177.53 735.42 220.61 845.44 221.04 846.55C221.341 847.32 221.242 848.188 220.776 848.87C220.31 849.553 219.537 849.961 218.71 849.96H180.71C179.975 849.963 179.276 849.641 178.8 849.08C149.24 814.22 126.56 777 102.54 737.6L96.7904 728.17C79.3404 699.68 64.6604 658.79 55.1304 630.51C45.2204 601.19 44.1404 574.36 51.4904 540.83Z" fill="#E03B36"/><path id="Path_2" d="M173.86 652.93C173.479 652.144 173.532 651.217 174 650.48C174.473 649.746 175.297 649.313 176.17 649.34H178.06C215.844 649.445 246.67 619.112 247.174 581.33C247.679 543.549 217.674 512.404 179.9 511.5C178.94 511.481 178.078 510.908 177.69 510.03C177.293 509.159 177.429 508.137 178.04 507.4C198.96 482.26 260.72 492.58 263.34 493.03C264.022 493.144 264.624 493.54 265 494.12L318.74 575.87C319.271 576.688 319.271 577.742 318.74 578.56L265.15 664.56C264.793 665.133 264.219 665.537 263.56 665.68C249.342 668.584 234.88 670.134 220.37 670.31C200.84 670.37 180.6 666.72 173.86 652.93Z" fill="#E03B36"/><path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M134.74 728.17C117.69 699.04 102.69 659 93.1004 630.55C83.2104 601.19 82.1304 574.36 89.4904 540.83C96.9304 506.91 113.04 484.1 140.17 469.04C160.2 457.93 185 451.76 214 450.7C237.16 449.85 261 456.85 284.83 471.5C306 484.5 319.87 497.5 328.46 512.5C340.33 533.21 345.18 560.26 342.18 588.65C338.76 620.52 327.76 650.57 315.76 681.12C306.42 704.97 294.19 730.18 278.42 758.18C260.749 789.425 241.481 819.738 220.69 849C220.234 849.611 219.523 849.98 218.76 850H218.65C217.916 849.999 217.218 849.678 216.74 849.12C186.29 813.17 161.93 774.76 134.74 728.17ZM152.7 553.208C141.825 578.507 147.05 607.851 165.99 627.84H166C178.541 641.146 195.881 648.887 214.16 649.34H216.05C253.832 649.438 284.652 619.104 285.154 581.325C285.655 543.547 255.652 512.405 217.88 511.5H216C188.463 511.51 163.575 527.909 152.7 553.208Z" fill="#FF625A"/><path id="Path_3" d="M292.19 851H97.5801C96.1994 851 95.0801 849.881 95.0801 848.5C95.0801 847.119 96.1994 846 97.5801 846H292.19C293.571 846 294.69 847.119 294.69 848.5C294.69 849.881 293.571 851 292.19 851Z" fill="#1B1812"/></g></g></g></g><g id="Sign" transform="translate(11 320) scale(1 1)"><g id="Sign/Warning"><g id="warning"><g id="signs"><path id="Path" d="M197.519 821.53C194.001 821.53 191.149 818.678 191.149 815.16V815.16L189.529 404.08C189.523 402.703 188.406 401.59 187.029 401.59H167.609C166.232 401.59 165.114 402.703 165.109 404.08L163.489 815.17C163.483 818.686 160.635 821.534 157.119 821.54C147.834 821.551 140.31 829.075 140.299 838.36V841.18C140.304 846.054 144.254 850.004 149.129 850.01H205.509C210.383 850.004 214.333 846.054 214.339 841.18V838.36C214.333 829.071 206.808 821.541 197.519 821.53V821.53Z" fill="#A3B6B7"/><path id="Path_2" d="M296.459 382.32L206.999 227.41C200.875 216.796 189.553 210.258 177.299 210.258C165.046 210.258 153.724 216.796 147.599 227.41L58.1794 382.32C52.0578 392.931 52.0601 406.001 58.1854 416.61C64.3108 427.219 75.6291 433.756 87.8794 433.76H266.759C279.01 433.756 290.328 427.219 296.453 416.61C302.579 406.001 302.581 392.931 296.459 382.32V382.32Z" fill="#FA4A1B"/><path id="Path_3" d="M272.06 386.69L190.62 245.64C187.875 240.89 182.806 237.964 177.32 237.964C171.834 237.964 166.764 240.89 164.02 245.64L82.5798 386.69C79.8566 391.44 79.8673 397.28 82.608 402.019C85.3487 406.759 90.4049 409.681 95.8798 409.69H258.75C264.226 409.685 269.286 406.764 272.029 402.024C274.772 397.283 274.784 391.441 272.06 386.69V386.69Z" fill="#F6F6F6"/><path id="Path_4" d="M216.66 321.55C214.86 320.443 212.864 319.693 210.78 319.34C208.075 318.76 205.336 318.349 202.58 318.11L201.15 312.45C200.81 311.111 199.449 310.3 198.11 310.64C196.771 310.98 195.96 312.341 196.3 313.68L197.51 318.44C197.333 318.486 197.16 318.543 196.99 318.61C196.544 318.783 196.116 318.997 195.71 319.25L192.71 315.84C192.132 315.12 191.204 314.777 190.296 314.948C189.389 315.12 188.65 315.778 188.374 316.659C188.099 317.541 188.332 318.502 188.98 319.16L192.35 322.96C191.913 323.794 191.577 324.676 191.35 325.59C187.46 325.71 183.64 325.59 179.62 325.4C178.62 325.4 177.53 325.31 176.47 325.28C168.57 324.99 160.55 325.08 152.65 325.54C149.74 325.71 146.42 326.08 143.97 328.34C142.481 329.805 141.464 331.682 141.05 333.73L134.32 341.06C133.384 342.076 133.449 343.659 134.465 344.595C135.481 345.531 137.064 345.466 138 344.45L140.17 342.08C139.483 353.855 140.187 365.67 142.27 377.28C142.431 378.605 142.912 379.871 143.67 380.97C143.686 383.762 144.056 386.541 144.77 389.24C145.064 390.335 146.056 391.098 147.19 391.1C147.406 391.098 147.62 391.071 147.83 391.02C149.164 390.663 149.956 389.294 149.6 387.96C149.198 386.425 148.924 384.86 148.78 383.28H149.31C149.79 383.28 150.23 383.28 150.57 383.28L152.9 383.14L153.19 388.52C153.254 389.848 154.35 390.891 155.68 390.89H155.82C157.198 390.815 158.254 389.638 158.18 388.26L157.89 382.85L188.55 381V387.34C188.55 388.721 189.669 389.84 191.05 389.84C192.431 389.84 193.55 388.721 193.55 387.34V380.7L199.25 380.37C199.52 380.37 199.87 380.37 200.25 380.29L200.16 386.08C200.147 386.742 200.397 387.382 200.857 387.859C201.317 388.336 201.948 388.609 202.61 388.62V388.62C203.973 388.615 205.083 387.523 205.11 386.16L205.26 376.82C205.575 375.853 205.701 374.834 205.63 373.82L205.19 352.28C205.19 350.66 205.19 348.86 205.3 346.94C205.37 345.33 205.42 343.66 205.43 341.94C206.664 341.427 207.926 340.983 209.21 340.61C210.4 340.25 211.63 339.87 212.85 339.38C217.05 337.69 219.85 334.94 220.69 331.62C221.544 327.754 219.946 323.759 216.66 321.55V321.55Z" fill="#1B1812"/><path id="Path_5" d="M247.409 851H107.229C105.848 851 104.729 849.881 104.729 848.5C104.729 847.119 105.848 846 107.229 846H247.409C248.789 846 249.909 847.119 249.909 848.5C249.909 849.881 248.789 851 247.409 851Z" fill="#1B1812"/></g></g></g></g><g id="Master/Vehicles/Medium Vehicle" transform="translate(-69 260) scale(1 1)"><g id="Master/Vehicles/Medium Vehicle"><g id="Medium Vehicle" transform="scale(1 1)"><g id="Medium Vehicle/Hatchback Packed"><g id="hatchback packed"><g id="cars"><path id="Path" d="M806.73 722.11C817.24 641.46 814.41 556.6 799.99 476.56L749.87 475.81C742.61 475.7 734.64 475.81 729.12 480.56C725.21 483.91 723.29 488.96 721.52 493.8L642.22 710.73C640.07 716.64 647.39 723.44 653.3 725.56C659.21 727.68 665.68 726.5 671.96 726.3C716 724.84 762.71 723.57 806.73 722.11Z" fill="#305F67"/><path id="Path_2" d="M828.431 691.44C826.853 684.573 824.927 677.791 822.661 671.12C820.304 663.949 817.155 657.063 813.271 650.59L813.081 650.25C808.147 641.501 800.67 634.459 791.641 630.06C784.011 626.48 775.761 625.58 769.421 625.19C760.756 624.59 752.055 624.764 743.421 625.71C735.21 626.649 727.409 629.802 720.851 634.83C718.591 636.5 716.431 638.35 714.331 640.14C709.721 644.08 705.331 647.81 700.111 649.8C691.901 652.92 683.181 652.8 673.941 652.64H670.581C668.061 652.64 662.991 652.5 662.991 652.5C661.949 652.473 661.003 653.101 660.621 654.07C660.232 655.032 660.479 656.135 661.241 656.84C663.701 659.12 665.121 665.27 664.071 669.09L662.681 672.94L663.681 673.94C664.332 674.591 664.571 675.549 664.301 676.43L662.151 683.43C661.394 687.495 658.719 690.944 654.971 692.69L671.221 696.56L673.351 720.78C673.469 722.068 674.547 723.055 675.841 723.06H828.241C829.581 723.056 830.682 721.999 830.741 720.66C831.114 710.863 830.339 701.056 828.431 691.44V691.44Z" fill="#7FA0BF"/><path id="Path" d="M662.66 672.9L664.05 669.05C665.1 665.23 663.68 659.05 661.22 656.8C660.984 656.579 660.794 656.314 660.66 656.02C653.53 655.17 646.21 654.46 639 656.02C632.863 657.304 627.051 659.826 621.92 663.43C616.38 667.35 613.06 671.49 610.81 677.24C608.56 682.99 608.64 688.54 611.04 692.89C614.43 699.06 619.52 702.48 624.92 702.48C626.341 702.477 627.752 702.248 629.1 701.8C633.24 700.45 638.58 696.58 641.35 693.63C642.252 692.678 643.1 691.676 643.89 690.63C646.106 692.323 648.802 693.269 651.59 693.33C652.405 693.338 653.217 693.227 654 693C657.91 691.82 661.42 687.63 662.08 683.4L664.23 676.4C664.5 675.519 664.262 674.561 663.61 673.91L662.66 672.9Z" fill="#b17606"/><path id="Path_3" d="M647.18 692.2C646.23 692.208 645.358 691.674 644.933 690.823C644.508 689.973 644.604 688.956 645.18 688.2C647.49 685.01 648.47 682.04 648.11 679.35C647.923 678.258 647.642 677.184 647.27 676.14C646.931 675.157 646.647 674.155 646.42 673.14C646.232 671.83 647.098 670.601 648.394 670.336C649.69 670.071 650.969 670.862 651.31 672.14C651.507 672.985 651.747 673.819 652.03 674.64C652.483 675.968 652.817 677.333 653.03 678.72C653.56 682.72 652.27 686.91 649.19 691.17C648.721 691.812 647.975 692.194 647.18 692.2V692.2Z" fill="#1B1812"/><path id="Path_4" d="M672.439 679.05C672.125 679.053 671.812 678.995 671.519 678.88C670.24 678.37 669.611 676.924 670.109 675.64C672.109 670.64 672.209 661.39 669.469 656.46C669.035 655.679 669.051 654.726 669.51 653.96C669.969 653.194 670.802 652.731 671.695 652.745C672.588 652.76 673.405 653.249 673.839 654.03C677.509 660.62 677.179 671.33 674.769 677.46C674.394 678.419 673.469 679.051 672.439 679.05V679.05Z" fill="#6786A5"/><path id="Path_5" d="M700.68 692.38C700.361 692.378 700.046 692.317 699.75 692.2C699.134 691.951 698.642 691.468 698.383 690.856C698.124 690.245 698.12 689.555 698.37 688.94C702.608 678.467 708.334 668.66 715.37 659.82C716.229 658.738 717.802 658.556 718.885 659.415C719.967 660.274 720.149 661.848 719.29 662.93C712.547 671.395 707.061 680.789 703 690.82C702.617 691.764 701.699 692.381 700.68 692.38Z" fill="#6786A5"/><path id="Path" d="M802.001 578.24V578.24C800.204 576.907 798.07 576.104 795.841 575.92C794.901 575.8 793.951 575.73 792.991 575.69L793.081 575.25C793.531 572.96 794.461 568.19 791.301 565.12C789.481 563.36 787.071 562.95 784.941 562.7C773.801 561.355 762.54 561.355 751.401 562.7C748.281 563.1 744.741 563.87 742.211 566.58C739.451 569.58 738.451 573.58 737.571 577.15C737.441 577.69 737.311 578.22 737.171 578.73C735.479 585.127 734.144 591.614 733.171 598.16C732.611 602.01 732.441 606.35 735.441 609.37C737.901 611.84 741.291 612.18 744.541 612.31L773.151 613.48C773.801 613.48 774.501 613.48 775.241 613.48C777.773 613.611 780.288 612.991 782.471 611.7C786.391 609.11 787.371 604.11 787.951 601.12L788.111 600.34C790.482 600.579 792.877 600.271 795.111 599.44C799.504 597.763 802.928 594.225 804.461 589.78C805.801 586.1 805.511 581.1 802.001 578.24Z" fill="#b17606"/><path id="Path_6" d="M756.61 602.61C754.387 602.614 752.198 602.064 750.24 601.01C749.066 600.332 748.646 598.841 749.295 597.65C749.943 596.458 751.423 596.002 752.63 596.62C754.771 597.786 757.317 597.951 759.59 597.07C761.863 596.19 763.634 594.354 764.43 592.05C764.728 591.182 765.478 590.548 766.383 590.4C767.288 590.251 768.202 590.613 768.76 591.34L769.38 592.13C769.788 592.654 769.97 593.318 769.888 593.976C769.805 594.634 769.465 595.233 768.94 595.64C768.67 595.849 768.361 596.002 768.03 596.09C766.505 598.655 764.169 600.64 761.39 601.73C759.865 602.316 758.244 602.614 756.61 602.61V602.61Z" fill="#1B1812"/><path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M676.92 680C679.813 684.636 681.959 689.698 683.28 695C684.461 700.314 684.896 705.766 684.57 711.2V712.66C684.632 714.308 684.491 715.957 684.15 717.57C683.435 720.424 682.458 723.206 681.23 725.88C679.079 730.908 675.979 735.475 672.1 739.33C666.72 744.54 658.55 746.33 651.55 746.33C649.79 746.332 648.033 746.215 646.29 745.98C634 744.27 624.13 734.37 619.13 718.82C614.11 703.1 615.75 686.75 623.4 676.1C632.99 662.66 651.31 658.99 664.99 667.66C665.54 667.94 666.03 668.29 666.54 668.66C670.688 671.746 674.211 675.595 676.92 680ZM646.14 728.9C653.71 732.21 661.34 730.42 664.71 724.42V724.46C668.47 717.84 670.32 707.29 668.92 700.4C667.74 694.8 666.08 690.52 663.74 687.33C660.389 682.64 655.022 679.804 649.26 679.68C647.515 679.672 645.782 679.97 644.14 680.56C636.14 683.47 630.5 693.5 631.14 703.9C631.79 714.9 638.14 725.39 646.14 728.9Z" fill="#1B1812"/><path id="Path" d="M647.001 673.64C646.718 672.82 646.478 671.985 646.281 671.14C645.871 669.23 646.341 664.14 647.181 663.21C648.741 661.77 649.421 660.29 649.181 658.78C648.895 657.248 647.829 655.978 646.371 655.43C645.99 655.242 645.565 655.159 645.141 655.19C643.07 655.302 641.01 655.573 638.981 656C632.843 657.284 627.032 659.806 621.901 663.41C616.361 667.33 613.041 671.47 610.791 677.22C608.541 682.97 608.621 688.52 611.021 692.87C614.411 699.04 619.501 702.46 624.901 702.46C626.321 702.457 627.733 702.228 629.081 701.78C633.221 700.43 638.561 696.56 641.331 693.61C646.461 688.15 648.711 682.8 648.031 677.72C647.808 676.332 647.464 674.967 647.001 673.64Z" fill="#b17606"/><path id="Path_7" d="M640.55 693.26C640.009 693.261 639.482 693.086 639.05 692.76C632.62 687.93 626.55 678.88 627.47 669.57C627.605 668.189 628.834 667.18 630.215 667.315C631.595 667.45 632.605 668.679 632.47 670.06C631.74 677.44 636.77 684.77 642.07 688.76C642.931 689.406 643.282 690.53 642.941 691.55C642.601 692.571 641.646 693.26 640.57 693.26H640.55Z" fill="#1B1812"/><path id="Path_8" d="M631.361 700.52C630.944 700.519 630.535 700.412 630.171 700.21C623.171 696.41 618.861 687.3 618.241 680.27C618.116 678.889 619.135 677.669 620.516 677.545C621.896 677.421 623.116 678.439 623.241 679.82C623.731 685.39 627.171 692.88 632.581 695.82C633.59 696.365 634.099 697.527 633.816 698.638C633.532 699.75 632.528 700.526 631.381 700.52H631.361Z" fill="#1B1812"/><path id="Path_9" d="M692.769 723.1C686.209 712.18 675.029 704.17 661.299 700.54C651.199 697.87 640.779 697.92 630.709 697.96C628.709 697.96 626.779 697.96 624.819 697.96C578.209 697.71 552.069 698.29 551.819 698.3C550.468 698.338 549.389 699.438 549.379 700.79L549.289 725.01C549.284 725.676 549.545 726.316 550.015 726.787C550.485 727.259 551.124 727.523 551.789 727.52V727.52L690.639 726.88C691.54 726.874 692.368 726.385 692.809 725.6C693.248 724.82 693.232 723.865 692.769 723.1Z" fill="#1B1812"/><path id="Path_10" d="M784.23 681.89C783.959 681.285 783.459 680.814 782.84 680.579C782.221 680.345 781.533 680.367 780.93 680.64C779.668 681.208 778.372 681.699 777.05 682.11C777.445 677.578 777.585 673.027 777.47 668.48C777.431 667.099 776.281 666.011 774.9 666.05C773.519 666.088 772.431 667.239 772.47 668.62C772.602 673.53 772.418 678.443 771.92 683.33C764.09 684.7 755.59 684.15 747.28 683.59C744.08 683.38 740.77 683.16 737.57 683.06C734.91 682.98 730.57 682.9 727.2 682.83H724.46H724.41C723.029 682.83 721.91 683.949 721.91 685.33C721.91 686.711 723.029 687.83 724.41 687.83H727.16C730.5 687.89 734.66 687.97 737.32 688.06C745.26 696.42 749.5 709.54 747.64 720.06C747.403 721.411 748.293 722.702 749.64 722.96C749.786 722.974 749.934 722.974 750.08 722.96C751.291 722.959 752.327 722.092 752.54 720.9C754.43 710.23 751.08 697.74 744.1 688.36L746.98 688.54C751.58 688.85 756.24 689.16 760.85 689.16C768.52 689.16 776.07 688.3 783.02 685.16C784.242 684.577 784.779 683.128 784.23 681.89V681.89Z" fill="#6786A5"/><path id="Path" d="M736.94 720.07C738.8 709.5 735.03 698.84 726.33 690.07L723.93 687.66L721.01 687.53C712.01 687.12 702.74 686.69 693.86 689.68C676.68 695.44 666.22 706.29 664.41 720.22C664.302 720.943 664.522 721.676 665.01 722.22C665.485 722.761 666.17 723.07 666.89 723.07H739.41C738.67 723.072 737.968 722.747 737.491 722.181C737.015 721.616 736.813 720.868 736.94 720.14V720.07Z" fill="#b17606"/><path id="Path_11" d="M677.759 723V723C677.095 722.992 676.46 722.72 675.997 722.243C675.533 721.766 675.279 721.125 675.289 720.46C675.508 711.173 680.432 702.633 688.359 697.79C689.554 697.111 691.073 697.523 691.76 698.713C692.447 699.903 692.045 701.425 690.859 702.12C684.433 706.063 680.451 713.002 680.289 720.54C680.267 721.917 679.136 723.017 677.759 723Z" fill="#1B1812"/><path id="Path_12" d="M689.691 723C689.567 723.01 689.444 723.01 689.321 723C688.665 722.906 688.073 722.554 687.677 722.023C687.281 721.492 687.113 720.825 687.211 720.17C688.471 711.63 694.471 703.67 703.211 698.88C703.995 698.451 704.948 698.473 705.711 698.938C706.475 699.403 706.932 700.24 706.911 701.133C706.891 702.027 706.395 702.841 705.611 703.27C698.181 707.27 693.141 713.9 692.111 720.89C691.922 722.087 690.902 722.976 689.691 723Z" fill="#1B1812"/><path id="Path_13" d="M711.5 280.51C711.614 277.884 713.652 275.748 716.27 275.51C758.54 271.769 801.075 272.161 843.27 276.68C847.11 277.09 851.27 277.68 853.91 280.52C856.73 283.52 856.91 288.13 856.83 292.27C856.53 325.57 855.37 358.85 853.35 392.11C853.15 395.53 852.79 399.27 850.35 401.7C847.91 404.13 844.35 404.52 840.93 404.79C833.096 405.397 825.26 405.903 817.42 406.31C800.546 407.17 783.663 407.533 766.77 407.4C758.33 407.327 749.89 407.137 741.45 406.83L735.12 406.57C733.56 406.5 731.9 406.1 730.37 406.13C728.84 406.16 727.04 407.38 725.54 407.95C723.734 408.661 721.84 409.125 719.91 409.33C716.09 409.68 711.91 408.4 709.77 405.2C707.95 402.47 707.98 398.95 708.07 395.67L708.55 378.13L709.95 327.29L710.66 301.87L711.01 289.15C711.12 286.28 711.37 283.38 711.5 280.51Z" fill="#D0A885"/><path id="Path_14" d="M770.589 384.54H770.509C769.846 384.519 769.218 384.235 768.764 383.751C768.311 383.268 768.068 382.623 768.089 381.96L771.089 275.54C771.128 274.159 772.279 273.071 773.659 273.11C775.04 273.149 776.128 274.299 776.089 275.68L773.089 382.11C773.051 383.463 771.943 384.54 770.589 384.54V384.54Z" fill="#C69981"/><path id="Path_15" d="M798.211 275C800.211 277.69 800.121 281.58 800.071 285.34V285.46C800.024 289.6 799.964 293.74 799.891 297.88L799.811 303.61C799.788 304.951 800.831 306.07 802.171 306.14C811.171 306.62 828.061 307.59 828.061 307.59H828.201C829.391 307.591 830.419 306.756 830.661 305.59C830.821 304.74 834.581 285.24 830.001 275.45C819.281 274.523 808.538 273.857 797.771 273.45C797.742 274.001 797.897 274.546 798.211 275V275Z" fill="#AC6040"/><path id="Path_16" d="M727.65 280.05C727.209 284.369 727.126 288.717 727.4 293.05C727.482 294.233 728.377 295.199 729.55 295.37L746.89 297.77H747.23C747.943 297.771 748.622 297.469 749.098 296.938C749.573 296.407 749.8 295.698 749.72 294.99C748.909 287.97 749.359 280.861 751.05 274C751.096 273.773 751.113 273.541 751.1 273.31C743.527 273.576 735.963 273.973 728.41 274.5C728.1 276.34 727.84 278.18 727.65 280.05Z" fill="#AC6040"/><path id="Path_17" d="M622.001 322.64H621.911C620.452 322.616 619.062 322.014 618.048 320.966C617.033 319.917 616.477 318.509 616.501 317.05L616.711 303.63C616.771 300.12 616.841 295.75 618.711 291.63C623.121 281.63 634.711 281.63 640.931 281.63H659.751C663.131 281.63 668.801 281.63 673.051 285.33C677.891 289.55 678.221 296.21 678.391 299.8L679.131 314.8C679.227 316.765 678.268 318.632 676.615 319.698C674.961 320.764 672.865 320.867 671.115 319.968C669.365 319.069 668.227 317.305 668.131 315.34L667.401 300.34C667.301 298.4 667.121 294.77 665.821 293.64C664.681 292.64 661.581 292.64 659.741 292.64H640.861C634.281 292.64 629.961 293.22 628.691 296.08C627.771 298.18 627.691 301.08 627.691 303.84L627.481 317.26C627.416 320.243 624.984 322.63 622.001 322.64V322.64Z" fill="#8E4637"/><path id="Path_18" d="M753.599 391.64L751.509 332.42C751.239 324.74 750.589 317.42 745.679 312C739.749 305.5 730.229 305 721.769 305C698.769 305 675.589 305.85 653.179 306.63C621.979 307.7 589.729 308.82 557.749 307.91C549.749 307.68 541.639 312.91 537.659 320.91C534.029 328.2 533.499 336.51 533.039 343.84C532.469 352.96 531.739 362.24 531.039 371.21C529.619 389.21 528.159 407.83 527.879 426.21C527.809 430.32 529.419 434.58 532.539 438.54C536.239 443.24 546.899 443.81 550.079 443.88C576.289 444.41 600.079 444.77 623.079 445.12C654.079 445.59 683.449 446.04 717.819 446.86H719.069C730.599 446.86 740.439 443.01 746.199 436.2C751.959 429.39 752.619 420.41 752.699 414.13C752.699 411.13 752.939 408.02 753.139 404.96C753.459 400.54 753.749 396 753.599 391.64Z" fill="#AC6040"/><path id="Path_19" d="M597.89 443.84C596.596 443.839 595.519 442.849 595.41 441.56C594.33 429.33 594.41 416.91 594.56 404.9L595.17 338.65C595.25 329.57 595.33 320.18 597.66 311.06C597.853 310.164 598.52 309.446 599.399 309.188C600.278 308.93 601.228 309.173 601.874 309.822C602.521 310.471 602.761 311.422 602.5 312.3C600.33 320.83 600.25 329.91 600.16 338.7L599.56 404.95C599.45 416.84 599.33 429.13 600.39 441.12C600.448 441.782 600.24 442.44 599.812 442.948C599.384 443.457 598.772 443.774 598.11 443.83L597.89 443.84Z" fill="#8E4637"/><path id="Path_20" d="M878.301 368.8C873.621 363.74 867.031 363.14 864.411 363.12L826.411 362.76C817.481 362.66 740.951 364.22 725.021 364.69C708.221 365.19 691.171 365.56 674.351 365.78C665.951 365.89 657.421 365.97 649.011 366.02C647.011 366.02 639.011 366.18 632.761 366.3C627.139 366.385 622.52 370.761 622.131 376.37C621.701 382.24 621.191 389.93 621.131 393.17L620.891 432.91C621.097 438.06 624.047 442.704 628.621 445.08C631.981 446.64 636.901 446.46 641.231 446.29C642.521 446.29 643.731 446.2 644.711 446.22C659.571 446.427 674.407 446.527 689.221 446.52C727.221 446.52 764.971 445.93 801.801 445.34C821.961 445.02 842.801 444.69 863.531 444.46V444.46C871.441 444.38 876.401 439.79 877.141 431.9L881.491 385.32C882.001 380.05 882.651 373.49 878.301 368.8Z" fill="#68373E"/><path id="Path_21" d="M625.76 390.12C624.379 390.161 623.226 389.076 623.185 387.695C623.143 386.314 624.229 385.161 625.61 385.12C628.857 384.918 631.864 383.343 633.879 380.79C635.895 378.236 636.728 374.945 636.17 371.74C635.932 370.379 636.843 369.082 638.205 368.845C639.566 368.608 640.862 369.519 641.1 370.88C641.906 375.487 640.71 380.22 637.812 383.891C634.914 387.562 630.588 389.824 625.92 390.11L625.76 390.12Z" fill="#1B1812"/><path id="Path_22" d="M853.43 441.71C853.111 441.713 852.794 441.652 852.5 441.53C851.219 441.016 850.596 439.561 851.11 438.28C854.977 429.167 863.961 423.288 873.86 423.39C875.238 423.439 876.319 424.591 876.28 425.97C876.264 426.635 875.982 427.266 875.497 427.721C875.012 428.176 874.364 428.417 873.7 428.39C865.865 428.269 858.742 432.919 855.7 440.14C855.329 441.073 854.434 441.692 853.43 441.71V441.71Z" fill="#1B1812"/><path id="Path_23" d="M875.749 389.26H875.439C870.515 388.65 866.105 385.913 863.373 381.771C860.641 377.628 859.861 372.497 861.239 367.73C861.621 366.402 863.006 365.634 864.334 366.015C865.663 366.396 866.431 367.782 866.049 369.11C865.092 372.47 865.646 376.08 867.567 378.998C869.488 381.916 872.585 383.851 876.049 384.3C876.943 384.353 877.739 384.88 878.14 385.68C878.54 386.48 878.483 387.433 877.99 388.18C877.497 388.927 876.643 389.353 875.749 389.3V389.26Z" fill="#1B1812"/><path id="Path_24" d="M639.859 439.07C639.733 439.08 639.606 439.08 639.479 439.07C638.116 438.86 637.18 437.584 637.389 436.22C638.049 431.88 637.389 428.42 635.389 425.95C632.619 422.54 628.149 421.95 626.389 421.83C625.009 421.753 623.952 420.571 624.029 419.19C624.107 417.809 625.289 416.753 626.669 416.83C631.534 416.972 636.116 419.149 639.299 422.83C642.229 426.45 643.299 431.21 642.379 437.01C642.159 438.222 641.091 439.095 639.859 439.07Z" fill="#1B1812"/><path id="Path_25" d="M731.4 417C730.574 416.979 729.748 417.026 728.93 417.14C729.43 407.96 730.194 398.803 731.22 389.67C732.459 390.003 733.737 390.171 735.02 390.17C739.125 390.152 743.075 388.604 746.1 385.83C750.36 381.89 752.91 375.7 753.27 368.41C753.337 367.029 752.271 365.856 750.89 365.79C749.51 365.724 748.337 366.789 748.27 368.17C748.1 371.63 747.16 378.05 742.71 382.17C740.01 384.66 735.44 386.04 731.81 384.65C732.477 379.263 733.234 373.89 734.08 368.53C734.296 367.166 733.364 365.885 732 365.67C730.636 365.454 729.356 366.386 729.14 367.75C728.334 372.877 727.607 378.03 726.96 383.21H726.88C723.287 384.093 719.498 382.932 717.016 380.187C714.535 377.442 713.76 373.557 715 370.07C715.349 369.216 715.2 368.239 714.611 367.529C714.022 366.819 713.091 366.49 712.187 366.674C711.283 366.859 710.554 367.526 710.29 368.41C708.551 373.336 709.484 378.812 712.757 382.884C716.029 386.957 721.175 389.047 726.36 388.41C725.187 398.63 724.344 408.883 723.83 419.17C723.55 419.38 723.283 419.607 723.03 419.85C722.817 419.705 722.585 419.591 722.34 419.51C716.97 418.064 711.234 419.502 707.18 423.31C703.243 426.689 701.361 431.883 702.22 437C702.461 438.162 703.483 438.996 704.67 439C704.828 438.999 704.986 438.982 705.14 438.95C705.794 438.831 706.374 438.456 706.749 437.907C707.125 437.359 707.266 436.683 707.14 436.03C706.566 432.605 707.853 429.133 710.52 426.91C713.273 424.263 717.203 423.233 720.9 424.19C721.724 424.439 722.618 424.242 723.26 423.67C723.374 423.739 723.49 423.803 723.61 423.86C723.39 429.193 723.26 434.527 723.22 439.86C723.218 440.523 723.478 441.16 723.945 441.631C724.412 442.101 725.047 442.367 725.71 442.37V442.37C727.083 442.37 728.199 441.263 728.21 439.89C728.25 433.997 728.4 428.103 728.66 422.21C729.526 421.991 730.418 421.897 731.31 421.93C734.73 421.99 738.59 423.51 740.5 425.53C744.07 429.32 744.31 435.23 743.35 439.53C743.201 440.178 743.317 440.86 743.671 441.423C744.026 441.986 744.591 442.384 745.24 442.53C745.421 442.569 745.605 442.589 745.79 442.59C746.976 442.589 747.997 441.752 748.23 440.59C749.84 433.45 748.31 426.59 744.14 422.1C741.31 419.17 736.19 417.09 731.4 417Z" fill="#1B1812"/><path id="Path_26" d="M634.241 800.48C633.051 800.48 604.991 800.11 596.241 800.38C589.531 800.58 572.851 803.94 562.851 830.61C558.851 842.39 558.431 861.16 561.781 874.27C565.971 890.66 576.891 907.86 595.101 907.86C595.531 907.86 595.971 907.86 596.401 907.86C615.151 907.03 633.961 907.86 634.151 907.86C634.833 907.894 635.499 907.644 635.991 907.17C636.481 906.699 636.76 906.05 636.761 905.37V803C636.769 802.329 636.506 801.683 636.032 801.209C635.557 800.735 634.912 800.472 634.241 800.48V800.48Z" fill="#1B1812"/><path id="Path_27" d="M605.369 902.08C598.549 902.08 590.369 901.55 589.929 901.53C589.036 901.473 588.241 900.944 587.844 900.141C587.447 899.339 587.508 898.386 588.004 897.641C588.5 896.897 589.356 896.473 590.249 896.53C590.369 896.53 602.249 897.29 609.069 897C609.962 896.961 610.809 897.401 611.289 898.155C611.77 898.909 611.812 899.862 611.399 900.655C610.987 901.448 610.182 901.961 609.289 902C608.089 902.05 606.759 902.08 605.369 902.08Z" fill="#3F3931"/><path id="Path_28" d="M585.52 896.45C584.139 896.469 583.004 895.366 582.985 893.985C582.965 892.604 584.069 891.469 585.45 891.45L603.15 890.99C604.043 890.967 604.88 891.422 605.347 892.184C605.814 892.945 605.839 893.898 605.412 894.684C604.986 895.469 604.173 895.967 603.28 895.99L585.58 896.45H585.52Z" fill="#3F3931"/><path id="Path_29" d="M576.85 884.85C575.469 884.85 574.35 883.731 574.35 882.35C574.35 880.969 575.469 879.85 576.85 879.85L596.22 879.48C597.594 879.469 598.726 880.556 598.77 881.93C598.783 882.593 598.532 883.234 598.073 883.713C597.613 884.191 596.983 884.467 596.32 884.48L576.94 884.85H576.85Z" fill="#3F3931"/><path id="Path_30" d="M922.241 800.48C921.051 800.48 892.991 800.11 884.241 800.38C877.531 800.58 860.851 803.94 850.851 830.61C846.851 842.39 846.431 861.16 849.781 874.27C853.971 890.66 864.891 907.86 883.101 907.86C883.531 907.86 883.971 907.86 884.401 907.86C903.151 907.03 921.961 907.86 922.151 907.86C922.833 907.894 923.499 907.644 923.991 907.17C924.481 906.699 924.76 906.05 924.761 905.37V803C924.769 802.329 924.506 801.683 924.032 801.209C923.557 800.735 922.912 800.472 922.241 800.48Z" fill="#1B1812"/><path id="Path_31" d="M893.369 902.08C886.549 902.08 878.369 901.55 877.929 901.53C877.036 901.473 876.241 900.944 875.844 900.141C875.447 899.339 875.508 898.386 876.004 897.641C876.5 896.897 877.356 896.473 878.249 896.53C878.369 896.53 890.249 897.29 897.069 897C897.962 896.961 898.809 897.401 899.289 898.155C899.77 898.909 899.812 899.862 899.399 900.655C898.987 901.448 898.182 901.961 897.289 902C896.089 902.05 894.759 902.08 893.369 902.08Z" fill="#3F3931"/><path id="Path_32" d="M873.52 896.45C872.139 896.469 871.004 895.366 870.985 893.985C870.965 892.604 872.069 891.469 873.45 891.45L891.15 890.99C892.043 890.967 892.88 891.422 893.347 892.184C893.814 892.945 893.839 893.898 893.412 894.684C892.986 895.469 892.173 895.967 891.28 895.99L873.58 896.45H873.52Z" fill="#3F3931"/><path id="Path_33" d="M864.85 884.85C863.469 884.85 862.35 883.731 862.35 882.35C862.35 880.969 863.469 879.85 864.85 879.85L884.22 879.48C885.594 879.469 886.726 880.556 886.77 881.93C886.783 882.593 886.532 883.234 886.073 883.713C885.613 884.191 884.983 884.467 884.32 884.48L864.94 884.85H864.85Z" fill="#3F3931"/><path id="Path_34" d="M801.17 844.06C801.032 842.791 799.957 841.832 798.68 841.84H693.52C692.246 841.843 691.178 842.803 691.04 844.07C689.92 854.47 690.55 865.75 692.73 874.27C696.92 890.66 707.84 907.86 726.05 907.86C726.48 907.86 726.92 907.86 727.35 907.86C739.06 907.34 750.8 907.47 758.01 907.63C760.18 908.168 762.406 908.444 764.64 908.45C766.274 908.448 767.903 908.301 769.51 908.01C779.36 906.21 788.35 899.1 794.18 888.5C800.68 876.66 803.1 861.3 801.17 844.06Z" fill="#1B1812"/><path id="Path_35" d="M736.369 902.08C729.549 902.08 721.369 901.55 720.929 901.53C720.036 901.473 719.241 900.944 718.844 900.141C718.447 899.339 718.508 898.386 719.004 897.641C719.5 896.897 720.356 896.473 721.249 896.53C721.369 896.53 733.249 897.29 740.069 897C740.962 896.961 741.809 897.401 742.289 898.155C742.77 898.909 742.812 899.862 742.399 900.655C741.987 901.448 741.182 901.961 740.289 902C739.089 902.05 737.759 902.08 736.369 902.08Z" fill="#3F3931"/><path id="Path_36" d="M716.52 896.45C715.139 896.469 714.004 895.366 713.985 893.985C713.965 892.604 715.069 891.469 716.45 891.45L734.15 890.99C735.043 890.967 735.88 891.422 736.347 892.184C736.814 892.945 736.839 893.898 736.412 894.684C735.986 895.469 735.173 895.967 734.28 895.99L716.58 896.45H716.52Z" fill="#3F3931"/><path id="Path_37" d="M707.85 884.85C706.469 884.85 705.35 883.731 705.35 882.35C705.35 880.969 706.469 879.85 707.85 879.85L727.22 879.48C728.594 879.469 729.726 880.556 729.77 881.93C729.783 882.593 729.532 883.234 729.073 883.713C728.613 884.191 727.983 884.467 727.32 884.48L707.94 884.85H707.85Z" fill="#3F3931"/><path id="Path_38" d="M724.34 867.65H704.26C702.879 867.65 701.76 866.531 701.76 865.15C701.76 863.769 702.879 862.65 704.26 862.65H724.34C725.72 862.65 726.84 863.769 726.84 865.15C726.84 866.531 725.72 867.65 724.34 867.65V867.65Z" fill="#3F3931"/><path id="Path_39" d="M418.5 697.05C416.71 691.05 411.72 687.18 407.86 685.05C397.025 678.997 383.817 679.039 373.02 685.16C362.274 691.557 356.008 703.428 356.79 715.91C357.479 722.854 360.382 729.392 365.07 734.56C371.07 741.46 377.49 744.96 383.99 744.96C386.657 744.943 389.291 744.378 391.73 743.3C403.16 738.38 409.52 727.8 414.73 717.08C417.61 711 420.55 704 418.5 697.05Z" fill="#2697A8"/><path id="Shape_2" fill-rule="evenodd" clip-rule="evenodd" d="M1004.86 755.77C1005.05 759.11 1005.18 762.4 1005.25 765.55C1005.47 772.874 1005.24 780.205 1004.55 787.5C1004.27 790.3 1004.08 793.32 1003.96 797.01C1003.86 799.77 1003.78 802.6 1003.78 805.33C1003.73 808.98 1003.67 812.75 1003.49 816.47C1003.38 817.81 1003.38 819.32 1003.38 820.92V820.924C1003.18 833.074 1002.88 851.411 985.25 856.92C978.134 859.001 970.884 860.595 963.55 861.69C961.027 862.1 954.291 860.88 947.544 859.659C940.949 858.465 934.344 857.269 931.65 857.59C912.765 859.83 896.789 863.031 884.594 865.474C874.466 867.503 866.945 869.01 862.53 869.01H677.65L636.65 859.88L573.22 869.01H347.72C312.38 869.01 307.59 866.88 302.38 857.77C297.46 849.13 295.4 831.47 295.46 826.21V824.21L295.46 824.197C295.51 817.251 295.562 810.026 298.88 803.03C304.276 791.637 314.54 783.88 323.695 776.962L324.12 776.64C330.04 772.2 366.42 743.5 371.04 739.78C380.82 731.9 387.92 724.82 393.39 717.49C394.91 715.46 396.32 713.37 397.59 711.29C405.36 698.51 410.54 684.24 415.59 669.51C420.599 654.913 425.572 640.048 430.406 625.6C430.765 624.527 431.123 623.457 431.48 622.39L432.213 620.201C447.504 574.491 463.299 527.277 482 482C487.72 467.657 497.897 455.531 511.03 447.41C522.25 440.3 551.15 440.36 568.41 440.41H575.92C590.14 440.14 678.14 440.18 691.14 440.68C713.22 441.54 737.25 441.88 766.75 441.75C784.054 441.671 819.911 441.26 841.825 441.009L842.64 441L861.86 440.78C875.89 440.71 894.94 443.32 905.72 449.32C917.85 456.09 927.33 471.88 941.94 509.64C951.17 533.51 958.96 557.91 965.36 578.64C972.49 601.79 979.07 625.35 984.9 648.79L985.67 651.87C986.097 653.602 986.526 655.34 986.957 657.085C990.162 670.07 993.449 683.387 996.27 696.61C998.8 708.53 1000.74 719.23 1002.18 729.33C1003.51 738.64 1004.39 747.29 1004.86 755.77ZM739.24 724.208C761.967 723.525 784.693 722.841 806.73 722.11C817.24 641.46 814.41 556.6 799.99 476.56L749.87 475.81C742.61 475.7 734.64 475.83 729.12 480.56C725.21 483.91 723.29 488.96 721.52 493.8C695.094 566.113 668.66 638.423 642.22 710.73C640.07 716.64 647.38 723.43 653.3 725.56C657.862 727.201 662.744 726.871 667.617 726.542C669.069 726.444 670.519 726.346 671.96 726.3C693.938 725.571 716.59 724.89 739.24 724.208Z" fill="#87DEED"/><path id="Path_40" d="M850.47 719C858.2 639.22 852.59 556.57 841.07 477.25C856.97 475.49 873.96 476.57 883.89 477.53C889.176 478.049 893.744 481.44 895.77 486.35C901.21 499.47 911.77 525.67 914.77 537.84C928.52 594.51 939.52 649.54 947.5 711.84C915.41 718.35 887.77 720.28 850.47 719Z" fill="#B5F7FD"/><path id="Path_41" d="M918.641 554.16C900.641 568.83 884.251 585.45 873.261 605.76C865.631 619.86 860.801 635.35 854.001 649.84C853.801 673.02 852.691 696.11 850.471 718.96C866.611 719.53 880.931 719.49 894.591 718.74C904.001 708.93 904.791 690.74 911.891 679.13C919.461 666.77 924.891 654.61 937.621 646.52C932.141 615 925.791 584.7 918.641 554.16Z" fill="white"/><path id="Path_42" d="M904.73 520.33C905.877 519.463 907.037 518.62 908.21 517.8C904.35 507.34 899.77 495.99 896.55 488.19C881.88 498.95 867.75 510.42 855.98 524.19C853.29 527.35 850.7 530.65 848.16 534C849.7 548.94 850.96 563.94 851.94 579C854.58 575.6 857.2 572.17 859.82 568.76C873.27 551.25 887.11 533.65 904.73 520.33Z" fill="white"/><path id="Path_43" d="M417.999 720.21C420.869 722.65 425.729 722.65 427.429 722.65H556.869C567.979 722.65 577.469 722.51 580.549 721.65C586.164 720.169 591.266 717.177 595.299 713C597.099 711.1 598.349 708.2 599.509 705.85C600.919 703 602.069 700.04 603.299 697.11C612.909 674.27 622.469 651.4 631.659 628.39C646.259 591.81 659.926 554.88 672.659 517.6C674.899 511.053 677.109 504.497 679.289 497.93C679.959 495.93 682.169 488.37 682.939 486.57C684.402 483.173 684.642 479.374 683.619 475.82C682.759 472.99 680.669 473.08 678.099 472.7C669.899 471.49 661.589 470.8 653.329 470.13C636.769 468.797 620.173 468.18 603.539 468.28C586.906 468.38 570.326 469.187 553.799 470.7C543.039 471.707 532.319 473.017 521.639 474.63C514.119 475.77 506.159 477.33 499.709 481.63C497.967 482.634 496.616 484.199 495.879 486.07C494.193 489.303 492.636 492.597 491.209 495.95C488.369 502.68 485.989 509.59 483.619 516.49L416.869 710.68C415.999 713.24 415.089 717.78 417.999 720.21Z" fill="#B5F7FD"/><path id="Path_44" d="M963.471 853.22C963.861 837.09 962.751 822.64 954.171 808.56C945.591 794.48 925.921 785 909.571 791.19C896.721 796.05 889.571 808.62 885.751 820.79C881.931 832.96 880.241 845.91 873.391 856.94C870.294 861.809 866.133 865.912 861.221 868.94H862.531C873.791 868.94 926.951 867.54 963.531 861.62C963.342 858.824 963.322 856.019 963.471 853.22V853.22Z" fill="#1B1812"/><path id="Path_45" d="M677.651 869C677.172 868.147 676.777 867.249 676.471 866.32C675.111 862.13 675.361 857.64 675.471 853.24C675.861 837.11 674.751 822.66 666.171 808.58C657.591 794.5 637.921 785.02 621.571 791.21C608.721 796.07 601.571 808.64 597.751 820.81C593.931 832.98 592.241 845.93 585.391 856.96C582.294 861.829 578.133 865.932 573.221 868.96L677.651 869Z" fill="#1B1812"/><path id="Path_46" d="M496.17 844.06C496.032 842.791 494.957 841.832 493.68 841.84H388.52C387.246 841.843 386.178 842.803 386.04 844.07C384.92 854.47 385.55 865.75 387.73 874.27C391.92 890.66 402.84 907.86 421.05 907.86C421.48 907.86 421.92 907.86 422.35 907.86C434.06 907.34 445.8 907.47 453.01 907.63C455.18 908.168 457.406 908.444 459.64 908.45C461.274 908.448 462.903 908.301 464.51 908.01C474.36 906.21 483.35 899.1 489.18 888.5C495.68 876.66 498.1 861.3 496.17 844.06Z" fill="#1B1812"/><path id="Path_47" d="M431.369 902.08C424.549 902.08 416.369 901.55 415.929 901.53C415.036 901.473 414.241 900.944 413.844 900.141C413.447 899.339 413.508 898.386 414.004 897.641C414.5 896.897 415.356 896.473 416.249 896.53C416.369 896.53 428.249 897.29 435.069 897C435.962 896.961 436.809 897.401 437.289 898.155C437.77 898.909 437.812 899.862 437.399 900.655C436.987 901.448 436.182 901.961 435.289 902C434.089 902.05 432.759 902.08 431.369 902.08Z" fill="#3F3931"/><path id="Path_48" d="M411.52 896.45C410.139 896.469 409.004 895.366 408.985 893.985C408.965 892.604 410.069 891.469 411.45 891.45L429.15 890.99C430.043 890.967 430.88 891.422 431.347 892.184C431.814 892.945 431.839 893.898 431.412 894.684C430.986 895.469 430.173 895.967 429.28 895.99L411.58 896.45H411.52Z" fill="#3F3931"/><path id="Path_49" d="M402.85 884.85C401.469 884.85 400.35 883.731 400.35 882.35C400.35 880.969 401.469 879.85 402.85 879.85L422.22 879.48C423.594 879.469 424.726 880.556 424.77 881.93C424.783 882.593 424.532 883.234 424.073 883.713C423.613 884.191 422.983 884.467 422.32 884.48L402.94 884.85H402.85Z" fill="#3F3931"/><path id="Path_50" d="M419.34 867.65H399.26C397.879 867.65 396.76 866.531 396.76 865.15C396.76 863.769 397.879 862.65 399.26 862.65H419.34C420.72 862.65 421.84 863.769 421.84 865.15C421.84 866.531 420.72 867.65 419.34 867.65Z" fill="#3F3931"/><path id="Path_51" d="M610.359 721.46C610.016 721.468 609.675 721.403 609.359 721.27C608.744 721.018 608.255 720.531 608 719.917C607.745 719.304 607.745 718.614 607.999 718C608.149 717.66 622.509 683 627.269 668.61C647.479 607.61 679.189 524.79 706.159 462.51C706.711 461.245 708.184 460.668 709.449 461.22C710.714 461.772 711.291 463.245 710.739 464.51C683.829 526.68 652.189 609.34 632.019 670.2C627.199 684.74 613.219 718.51 612.619 719.94C612.232 720.849 611.347 721.444 610.359 721.46Z" fill="#305F67"/><path id="Path_52" d="M513.67 828.26C512.421 828.257 511.365 827.337 511.19 826.1C509.28 812.03 508.13 798.47 515.01 787.32C519.71 779.69 527.39 774.74 534.17 770.32L597.93 729.23C598.681 728.718 599.65 728.654 600.461 729.062C601.273 729.47 601.799 730.286 601.836 731.193C601.874 732.101 601.416 732.957 600.64 733.43L536.88 774.53C530.55 778.61 523.37 783.23 519.27 789.89C513.27 799.64 514.36 812.24 516.15 825.38C516.328 826.745 515.374 827.998 514.01 828.19C513.899 828.223 513.786 828.246 513.67 828.26Z" fill="#305F67"/><path id="Path_53" d="M571.77 800.27C570.869 800.265 570.039 799.777 569.596 798.992C569.154 798.206 569.167 797.243 569.63 796.47C577.491 783.722 590.122 774.646 604.71 771.26C606.058 770.959 607.394 771.807 607.695 773.155C607.996 774.502 607.148 775.839 605.8 776.14C592.537 779.217 581.055 787.469 573.91 799.06C573.458 799.81 572.646 800.269 571.77 800.27Z" fill="#305F67"/><path id="Path_54" d="M636.651 774.28C636.417 774.281 636.185 774.247 635.961 774.18L630.611 772.65C629.714 772.437 629.007 771.749 628.771 770.859C628.535 769.968 628.808 769.02 629.481 768.391C630.154 767.762 631.118 767.554 631.991 767.85L637.331 769.37C638.54 769.703 639.315 770.881 639.143 772.123C638.971 773.365 637.905 774.288 636.651 774.28V774.28Z" fill="#305F67"/><path id="Path_55" d="M686.91 832.71C685.8 832.707 684.824 831.975 684.51 830.91L678.01 808.59C674.92 797.96 671.17 787.19 662.51 782.39C661.34 781.75 660.07 781.21 658.73 780.63C656.01 779.64 653.477 778.197 651.24 776.36C646.04 771.66 645.51 764.89 645 758.36C644.65 753.92 644.32 749.72 642.64 746.22C642.254 745.414 642.327 744.464 642.832 743.727C643.337 742.99 644.196 742.578 645.087 742.647C645.978 742.716 646.764 743.254 647.15 744.06C649.23 748.4 649.61 753.26 649.98 757.97C650.44 763.8 650.87 769.3 654.59 772.67C656.431 774.12 658.494 775.265 660.7 776.06C662.144 776.652 663.556 777.32 664.93 778.06C675.26 783.77 679.43 795.6 682.81 807.23L688.81 827.71C704.09 827.34 719.81 826.71 735 826.17C750.38 825.59 766.27 824.99 781.74 824.62C789.3 809.3 794.05 790.28 795.14 770.86C795.19 769.967 795.713 769.168 796.511 768.765C797.31 768.362 798.263 768.415 799.011 768.905C799.76 769.395 800.19 770.247 800.14 771.14C798.98 791.81 793.79 812.08 785.53 828.22C785.113 829.039 784.279 829.562 783.36 829.58C767.46 829.95 751.06 830.58 735.2 831.17C719.34 831.76 702.93 832.38 687.01 832.75L686.91 832.71Z" fill="#305F67"/><path id="Path_56" d="M805.42 826.16C804.039 826.188 802.897 825.091 802.87 823.71C802.842 822.329 803.939 821.188 805.32 821.16L842.74 819.66C844.12 819.605 845.284 820.679 845.34 822.06C845.395 823.441 844.32 824.605 842.94 824.66L805.52 826.15L805.42 826.16Z" fill="#305F67"/><path id="Path_57" d="M857.099 810.28C856.928 810.28 856.756 810.259 856.589 810.22C855.929 810.088 855.351 809.695 854.985 809.13C854.62 808.565 854.498 807.876 854.649 807.22C859.009 786.518 873.308 769.303 892.859 761.22C893.693 760.848 894.664 760.96 895.391 761.513C896.118 762.066 896.486 762.971 896.35 763.875C896.214 764.778 895.597 765.535 894.739 765.85C876.821 773.399 863.694 789.193 859.549 808.19C859.342 809.385 858.313 810.264 857.099 810.28V810.28Z" fill="#305F67"/><path id="Path_58" d="M932.999 762.68C932.556 762.68 932.122 762.562 931.739 762.34C926.911 759.518 921.288 758.366 915.739 759.06C914.358 759.237 913.096 758.261 912.919 756.88C912.742 755.499 913.718 754.237 915.099 754.06C921.763 753.211 928.52 754.59 934.319 757.98C935.297 758.55 935.77 759.705 935.472 760.797C935.175 761.889 934.181 762.645 933.049 762.64L932.999 762.68Z" fill="#305F67"/><path id="Path_59" d="M946.711 772.53C945.705 772.51 944.751 772.08 944.069 771.34C943.388 770.6 943.038 769.614 943.101 768.61C943.091 767.755 943.342 766.918 943.821 766.21C944.473 765.256 945.555 764.687 946.711 764.69C947.717 764.71 948.671 765.139 949.353 765.88C950.034 766.62 950.384 767.606 950.321 768.61C950.328 769.466 950.073 770.303 949.591 771.01C948.944 771.965 947.864 772.535 946.711 772.53Z" fill="#305F67"/><path id="Shape_3" fill-rule="evenodd" clip-rule="evenodd" d="M753.651 763.09C755.76 763.309 757.88 763.413 760.001 763.4C762.821 763.4 765.681 763.25 768.521 763.05C769.026 763.024 769.519 762.997 770.005 762.971C771.79 762.873 773.479 762.78 775.311 762.78H782.311L782.359 762.78C786.954 762.76 791.707 762.739 796.381 762.52L796.414 762.519C800.548 762.449 805.662 762.363 809.961 759.8C812.697 758.14 814.683 755.484 815.501 752.39C816.131 750.083 815.811 747.619 814.611 745.55C814.135 744.763 813.27 744.296 812.351 744.33L765.961 746.44H763.821C760.411 746.36 755.751 746.3 753.191 749.3C751.311 751.53 750.741 755.33 751.441 760.91C751.586 762.06 752.499 762.961 753.651 763.09ZM768.271 758.11C764.254 758.394 760.224 758.454 756.201 758.29H756.171C755.901 754.32 756.621 752.94 757.001 752.56C757.924 751.463 760.85 751.477 763.072 751.488C763.282 751.489 763.486 751.49 763.681 751.49H766.161L810.751 749.49C810.827 750.079 810.786 750.677 810.631 751.25C810.133 753.054 808.967 754.602 807.371 755.58C804.266 757.451 800.021 757.519 796.303 757.579L796.251 757.58H796.171C791.571 757.84 786.841 757.84 782.271 757.84C781.503 757.84 780.731 757.837 779.955 757.833C778.396 757.827 776.827 757.82 775.271 757.84C773.278 757.866 771.256 757.964 769.273 758.061C768.938 758.078 768.604 758.094 768.271 758.11Z" fill="#305F67"/><path id="Shape_4" fill-rule="evenodd" clip-rule="evenodd" d="M652.46 727.92C655.42 728.911 658.53 729.381 661.65 729.31C663.72 729.31 665.79 729.17 667.85 729.03C668.245 729.005 668.642 728.974 669.04 728.944C670.056 728.867 671.079 728.79 672.07 728.79C694.08 728.07 717.14 727.37 739.45 726.7L742.445 726.61C763.821 725.968 785.833 725.307 806.85 724.61C808.072 724.562 809.081 723.641 809.24 722.43C819.57 643.18 817.23 558.01 802.48 476.12C802.269 474.939 801.25 474.075 800.05 474.06L749.94 473.31L749.895 473.309C743.575 473.219 734.035 473.083 727.53 478.66C723.02 482.52 720.9 488.3 719.2 492.94L639.91 709.88C639.05 712.396 639.248 715.153 640.46 717.52C642.78 722.54 648.31 726.43 652.46 727.92ZM730.75 482.48C734.95 478.88 741.01 478.31 747.52 478.31L749.89 478.35L797.89 479.07C812.1 559.11 814.39 642.23 804.53 719.72C783.912 720.376 762.428 721.023 741.552 721.651L739.27 721.72C716.96 722.39 693.88 723.09 671.88 723.82C670.593 723.863 669.305 723.945 668.044 724.024C667.855 724.036 667.668 724.048 667.48 724.06C662.72 724.39 658.23 724.69 654.15 723.23C650.36 721.87 646.4 718.51 644.95 715.42C644.311 714.254 644.174 712.879 644.57 711.61L723.87 494.68L723.895 494.613C725.469 490.32 727.249 485.464 730.75 482.48Z" fill="#305F67"/><path id="Shape_5" fill-rule="evenodd" clip-rule="evenodd" d="M850.38 721.46C857.82 721.72 864.84 721.85 871.57 721.85C897.246 722.033 922.868 719.499 948.01 714.29C949.302 714.037 950.177 712.826 950.01 711.52C942.67 654.15 932.55 600.39 917.23 537.21C914.28 525.04 904 499.5 898.13 485.35C895.742 479.572 890.354 475.589 884.13 475C873 473.92 856.44 472.99 840.8 474.73C840.125 474.799 839.507 475.142 839.092 475.678C838.676 476.215 838.498 476.899 838.6 477.57C851.82 568.6 854.89 647.48 847.98 718.72C847.92 719.405 848.142 720.085 848.595 720.603C849.048 721.12 849.693 721.43 850.38 721.46ZM944.71 709.85C914.79 715.76 888.7 717.67 853.21 716.55C859.76 646.29 856.72 568.66 843.92 479.44C859.19 478.04 875.2 479.16 883.65 479.98C888.019 480.409 891.795 483.212 893.47 487.27C898.14 498.55 909.32 526.11 912.32 538.39C927.39 600.53 937.41 653.53 944.71 709.85Z" fill="#305F67"/><path id="Path_60" d="M670.17 842.42C667.6 819.42 654.72 802.63 638.17 800.57C622.67 798.64 608.3 810.12 600.62 830.57C596.62 842.35 596.19 861.12 599.54 874.23C605.93 899.23 620.69 907.79 633.13 907.79C634.74 907.791 636.346 907.647 637.93 907.36C657.15 903.88 674.42 880.43 670.17 842.42Z" fill="#1B1812"/><path id="Path_61" d="M664 844.23C661.87 824.59 651.14 810.23 637.3 808.6C621.98 806.75 611.3 820.6 606.3 834.21C603.05 844.21 602.67 860.08 605.41 871.21C609.83 889.05 620.41 899.83 633.02 899.83C634.362 899.826 635.7 899.706 637.02 899.47C653.08 896.59 667.5 876.71 664 844.23Z" fill="#3F3931"/><path id="Path_62" d="M649.51 849.39C648.34 839.8 642.63 832.94 634.98 831.91C629.25 831.15 621.62 834.02 617.35 844.47C615.57 849.3 615.35 856.98 616.85 862.34C618.91 869.7 624.35 876.45 632.22 876.45C633.191 876.444 634.158 876.347 635.11 876.16C643.68 874.45 651.38 864.71 649.51 849.39Z" fill="#718F99"/><path id="Path_63" d="M646 843.47C645.02 840.525 642.898 838.096 640.11 836.73V836.73C636.42 835.07 631.94 836.23 629.91 839.36C628.41 841.67 628.28 844.82 629.55 848.22C631.16 852.56 634.92 856.6 639.82 856.6C640.69 856.596 641.555 856.472 642.39 856.23C644.086 855.791 645.511 854.643 646.3 853.08C648 849.73 646.68 845.24 646 843.47Z" fill="#A3B6B7"/><path id="Path_64" d="M958.17 842.42C955.6 819.42 942.72 802.63 926.17 800.57C910.67 798.64 896.3 810.12 888.62 830.57C884.62 842.35 884.19 861.12 887.54 874.23C893.93 899.23 908.69 907.79 921.13 907.79C922.74 907.791 924.346 907.647 925.93 907.36C945.15 903.88 962.42 880.43 958.17 842.42Z" fill="#1B1812"/><path id="Path_65" d="M952 844.23C949.87 824.59 939.14 810.23 925.3 808.6C909.98 806.75 899.3 820.6 894.3 834.21C891.05 844.21 890.67 860.08 893.41 871.21C897.83 889.05 908.41 899.83 921.02 899.83C922.362 899.826 923.7 899.706 925.02 899.47C941.08 896.59 955.5 876.71 952 844.23Z" fill="#3F3931"/><path id="Path_66" d="M937.51 849.39C936.34 839.8 930.63 832.94 922.98 831.91C917.25 831.15 909.62 834.02 905.35 844.47C903.57 849.3 903.35 856.98 904.85 862.34C906.91 869.7 912.35 876.45 920.22 876.45C921.191 876.444 922.158 876.347 923.11 876.16C931.68 874.45 939.38 864.71 937.51 849.39Z" fill="#718F99"/><path id="Path_67" d="M933 843.47C932.02 840.525 929.898 838.096 927.11 836.73V836.73C923.42 835.07 918.94 836.23 916.91 839.36C915.41 841.67 915.28 844.82 916.55 848.22C918.16 852.56 921.92 856.6 926.82 856.6C927.69 856.596 928.555 856.472 929.39 856.23C931.086 855.791 932.511 854.643 933.3 853.08C935 849.73 933.68 845.24 933 843.47Z" fill="#A3B6B7"/><path id="Path_68" d="M483.54 786.93H483.23C435.904 781.18 388.056 781.18 340.73 786.93C339.837 787.037 338.954 786.66 338.415 785.94C337.876 785.22 337.761 784.267 338.115 783.44C338.469 782.613 339.237 782.037 340.13 781.93C387.858 776.13 436.112 776.13 483.84 781.93C485.221 782.013 486.273 783.199 486.19 784.58C486.107 785.961 484.921 787.013 483.54 786.93V786.93Z" fill="#305F67"/><path id="Path_69" d="M337.33 792.24C332.839 792.148 328.505 793.893 325.33 797.07C322.33 799.94 319.15 805.15 319.16 809.81C319.11 812.151 320.042 814.407 321.73 816.03C324.487 818.655 328.164 820.091 331.97 820.03C336.086 819.99 340.071 818.583 343.3 816.03C346.92 813.13 350.43 808.03 349.42 802.28C348.47 796.85 343.26 792.52 337.33 792.24Z" fill="#F6F1BD"/><path id="Path_70" d="M492.239 793.88C488.162 791.012 482.957 790.268 478.239 791.88C473.677 793.502 469.96 796.894 467.929 801.29C466.761 803.675 466.267 806.334 466.499 808.98C466.879 812.72 468.089 815.35 470.199 817.04C473.075 819.491 476.694 820.9 480.469 821.04H480.999C485.153 820.752 489.085 819.059 492.149 816.24C494.938 813.936 496.88 810.77 497.669 807.24C498.53 802.118 496.429 796.949 492.239 793.88V793.88Z" fill="#F6F1BD"/><path id="Path_71" d="M404.101 803.28C402.72 803.418 401.489 802.411 401.351 801.03C401.212 799.649 402.22 798.418 403.601 798.28C407.395 797.508 411.292 797.372 415.131 797.88C416.024 797.998 416.786 798.583 417.131 799.416C417.475 800.248 417.349 801.201 416.801 801.916C416.252 802.63 415.364 802.998 414.471 802.88C411.185 802.442 407.849 802.557 404.601 803.22C404.436 803.254 404.269 803.275 404.101 803.28V803.28Z" fill="#305F67"/><path id="Path_72" d="M983.5 911H318.5C317.119 911 316 909.881 316 908.5C316 907.119 317.119 906 318.5 906H983.5C984.881 906 986 907.119 986 908.5C986 909.881 984.881 911 983.5 911V911Z" fill="#1B1812"/><path id="Path_73" d="M702.74 705.42C701.262 698.397 697.491 692.065 692.02 687.42C682.3 679.52 667.14 678.98 655.14 686.09C645.14 692.01 637.4 702.73 633.32 716.25C631.75 721.45 632.26 725.76 632.97 730.08C633.68 734.4 635.51 740.6 639.9 744.22V744.22C646.988 749.901 655.817 752.963 664.9 752.89C672.061 752.936 679.094 750.998 685.22 747.29C699 738.79 706.33 721.18 702.74 705.42Z" fill="#2697A8"/><path id="Path_74" d="M1002.06 787.23C1002.74 780.041 1002.97 772.817 1002.75 765.6C1002.68 762.367 1002.55 759.137 1002.37 755.91C1001.88 747.13 1000.95 738.38 999.71 729.68C999.08 725.31 998.36 720.96 997.6 716.61C996.513 716.565 995.425 716.625 994.35 716.79C990.58 717.333 987.304 719.66 985.55 723.04C983.55 726.93 983.63 731.93 983.77 736.61C984.11 748.31 984.443 760.007 984.77 771.7C984.88 775.21 985.02 778.9 986.49 781.91C988.94 786.91 994.26 788.39 998.87 787.91C999.93 787.81 1000.98 787.64 1002.03 787.45C1002.05 787.41 1002.05 787.32 1002.06 787.23Z" fill="#C14C63"/><path id="Shape_6" fill-rule="evenodd" clip-rule="evenodd" d="M984.279 783.01C986.589 787.8 991.379 790.54 997.279 790.54C997.879 790.54 998.509 790.513 999.169 790.46C1000.43 790.34 1001.64 790.13 1002.56 789.96C1003.64 789.745 1004.45 788.847 1004.56 787.75V787.48C1005.24 780.191 1005.48 772.867 1005.26 765.55C1005.19 762.41 1005.06 759.12 1004.87 755.77C1004.4 747.33 1003.52 738.64 1002.19 729.33C1001.62 725.34 1000.95 721.18 1000.08 716.18C999.872 715.012 998.875 714.149 997.689 714.11C996.445 714.064 995.2 714.134 993.969 714.32C989.407 714.981 985.444 717.804 983.329 721.9C981.159 726.16 981.119 731.11 981.279 736.68L982.279 771.77C982.282 771.834 982.284 771.898 982.287 771.962C982.415 775.348 982.572 779.497 984.279 783.01ZM994.749 719.26L995.509 719.16C996.199 723.18 996.749 726.68 997.189 730.05C998.499 739.21 999.369 747.72 999.829 756.05C1000.01 759.35 1000.14 762.58 1000.21 765.66C1000.4 772.228 1000.23 778.801 999.689 785.35L998.609 785.47C996.899 785.63 991.119 785.81 988.699 780.81C987.432 778.215 987.33 774.723 987.24 771.648L987.239 771.63L986.239 736.54C986.119 732.57 985.979 727.64 987.749 724.17C989.147 721.494 991.757 719.663 994.749 719.26Z" fill="#C14C63"/><path id="Path_75" d="M553.001 681.14C572.371 655.64 584.801 623.92 610.541 604.86C623.161 595.51 638.471 589.66 650.441 579.75C658.154 559.123 665.574 538.39 672.701 517.55C674.941 511.003 677.151 504.447 679.331 497.88C680.069 495.887 680.68 493.85 681.161 491.78C681.568 489.964 682.179 488.199 682.981 486.52C684.443 483.123 684.683 479.324 683.661 475.77C682.801 472.94 680.711 473.03 678.141 472.65C676.141 472.36 674.221 472.11 672.261 471.87C666.481 485.65 656.181 497.66 644.421 507.11C628.531 519.87 610.001 528.72 592.001 538.27C564.411 552.93 537.131 570.11 518.671 595.27C506.431 612 498.521 631.68 485.421 647.73C469.421 667.34 447.071 679.98 423.781 690.55L416.881 710.61C415.991 713.2 415.101 717.74 417.961 720.17C420.821 722.6 425.691 722.61 427.391 722.61H506.391C524.429 711.883 540.249 697.807 553.001 681.14Z" fill="white"/><path id="Path_76" d="M450.57 622.39C457.013 618.765 463.097 614.536 468.74 609.76C485.64 595.54 498.88 577.54 512.12 559.86C525.36 542.18 539.01 524.43 556.49 510.86C569.19 501.04 583.61 493.7 596.93 484.71C604.14 479.969 610.807 474.449 616.81 468.25C612.397 468.183 607.98 468.16 603.56 468.18C588.933 468.267 574.327 468.917 559.74 470.13C541.08 483.67 522.51 497.62 507.74 515.31C494.43 531.31 483.86 550.65 467.57 562.97L446.42 624.52C447.84 623.87 449.21 623.15 450.57 622.39Z" fill="white"/><path id="Shape_7" fill-rule="evenodd" clip-rule="evenodd" d="M427.379 725.15H556.869C569.489 725.15 577.999 725 581.249 724.08C587.316 722.471 592.819 719.214 597.149 714.67C598.863 712.646 600.259 710.373 601.289 707.93L601.789 706.93C602.856 704.709 603.807 702.421 604.728 700.206L604.789 700.06C604.998 699.543 605.212 699.031 605.428 698.517C605.491 698.365 605.555 698.213 605.619 698.06C614.309 677.4 624.389 653.29 633.989 629.29C648.539 592.85 662.359 555.54 675.059 518.39C677.299 511.83 679.529 505.21 681.689 498.69C681.873 498.163 682.152 497.253 682.487 496.164C682.571 495.889 682.659 495.604 682.749 495.31L682.899 494.823C683.713 492.183 684.827 488.565 685.269 487.54C686.958 483.6 687.231 479.197 686.039 475.08C684.81 471.032 681.642 470.62 679.332 470.32L679.329 470.32L678.489 470.2C670.009 468.95 661.269 468.24 653.559 467.62C637.029 466.28 620.209 465.66 603.559 465.76C586.909 465.86 570.099 466.7 553.559 468.24C542.799 469.25 531.929 470.58 521.269 472.19C513.859 473.31 505.329 474.89 498.329 479.54C496.233 480.778 494.594 482.662 493.659 484.91C491.909 488.25 490.329 491.63 488.909 494.98C486.084 501.647 483.708 508.543 481.407 515.221L481.249 515.68L414.509 709.87C412.689 715.15 413.329 719.62 416.329 722.15C419.899 725.15 425.379 725.15 427.379 725.15ZM603.579 470.72H607.089C622.439 470.72 637.909 471.34 653.109 472.65L653.435 472.676C660.956 473.29 669.508 473.987 677.709 475.2L678.629 475.33C680.898 475.579 680.949 475.748 681.195 476.567L681.199 476.58C682.052 479.557 681.847 482.737 680.619 485.58C680.089 486.85 679.129 489.92 677.919 493.85C677.509 495.26 677.129 496.48 676.919 497.13C674.759 503.63 672.529 510.24 670.299 516.78C657.609 553.85 643.819 591.09 629.299 627.45C619.719 651.46 609.649 675.49 600.969 696.13L600.129 698.13C599.239 700.32 598.289 702.58 597.239 704.7L596.719 705.77C595.892 707.741 594.791 709.586 593.449 711.25C589.742 715.112 585.044 717.879 579.869 719.25C576.639 720.14 563.289 720.14 556.869 720.14H427.369C425.979 720.14 421.729 720.14 419.559 718.3C417.629 716.66 418.819 712.65 419.229 711.45L485.969 517.26L486.085 516.924C488.369 510.289 490.726 503.439 493.509 496.88C494.869 493.66 496.409 490.4 498.089 487.17L498.103 487.144C499.161 485.157 499.327 484.845 501.089 483.67C507.279 479.59 515.139 478.09 522.029 477.09C532.589 475.5 543.359 474.18 554.029 473.18C570.419 471.65 587.089 470.82 603.579 470.72Z" fill="#305F67"/><path id="Path_77" d="M505.751 707.73C506.628 707.551 507.343 706.918 507.627 706.069C507.911 705.221 507.72 704.285 507.127 703.614C506.534 702.944 505.628 702.641 504.751 702.82L437.111 715.9C435.777 716.181 434.914 717.478 435.17 718.817C435.426 720.155 436.708 721.042 438.051 720.81L469.701 714.69L466.151 719.05C465.331 720.124 465.514 721.655 466.563 722.507C467.612 723.358 469.148 723.223 470.031 722.2L476.661 714.07C476.854 713.83 477 713.555 477.091 713.26L505.751 707.73Z" fill="#305F67"/><path id="Path_78" d="M573.901 708.16C573.816 707.501 573.472 706.903 572.944 706.499C572.416 706.095 571.749 705.919 571.091 706.01L503.921 714.92C502.54 715.011 501.494 716.204 501.586 717.585C501.677 718.966 502.87 720.011 504.251 719.92H504.581L535.741 715.78C534.837 716.767 534.008 717.82 533.261 718.93C532.493 720.079 532.802 721.632 533.951 722.4C535.099 723.168 536.653 722.859 537.421 721.71C539.004 719.333 541.043 717.293 543.421 715.71C543.826 715.441 544.142 715.058 544.331 714.61L571.751 710.97C572.409 710.883 573.005 710.538 573.408 710.011C573.811 709.484 573.989 708.818 573.901 708.16Z" fill="#305F67"/><path id="Path_79" d="M559.31 849.64C558.66 843.88 557.49 837.26 553.72 831.81C549.972 826.526 543.868 823.42 537.39 823.5H316.6C316.418 823.5 316.237 823.52 316.06 823.56C313.445 824.008 310.784 824.125 308.14 823.91C306.53 823.85 304.88 823.79 303.22 823.85C296.94 824.09 292.07 826.31 289.52 830.1C287.32 833.37 287.09 837.23 287.03 840.91C286.991 845.422 287.201 849.932 287.66 854.42C288.624 864.864 297.411 872.84 307.9 872.79H525.09C527.15 872.79 530.02 873.06 532.8 873.31C535.8 873.58 538.88 873.87 541.34 873.87H541.9C547.78 873.76 552.9 871.49 555.98 867.67C560.14 862.44 560 855.29 559.31 849.64Z" fill="#305F67"/><path id="Path_80" d="M1008 798.35C1004.06 794.35 998.331 794.35 993.251 794.9C986.481 795.59 979.611 797 975.251 802.58C971.161 807.82 970.841 815.13 970.601 820.46L969.601 842.73C969.241 850.38 968.701 861.95 979.501 863.73C981.483 864.073 983.49 864.247 985.501 864.25C994.931 864.25 1001.77 860.25 1005.07 856.25C1009.94 850.4 1010.7 842.42 1011.07 834.06L1011.98 814.94C1012.35 809.2 1012.29 802.62 1008 798.35Z" fill="#305F67"/></g></g></g></g><g id="Hair" transform="translate(656 467) scale(1 1)"><g id="Hair/Wavy"><g id="long"><g id="hair"><path id="Path" d="M162.11 129.45C158.5 124.93 157.41 119.02 156.25 112.76C155.25 107.33 154.25 101.76 151.42 96.76C150.224 94.6343 148.755 92.6743 147.05 90.93V90.93V90.93C137.97 80.93 124.99 78.21 112.47 76.25C107.4 75.46 101.95 74.85 96.5499 75.78C90.3999 76.84 85.1499 79.94 82.1499 84.27C78.4799 89.56 78.4299 96.78 82.0299 101.42C86.0299 106.59 92.8499 107.61 99.6199 107.94C101.09 108.01 102.92 108.04 104.98 108.04C114.83 108.04 130.19 107.32 139.68 106.79C140.43 106.79 141.18 106.89 141.92 106.98C144.149 107.164 146.283 107.968 148.08 109.3C151.56 112.16 151.85 117.16 150.61 120.85C149.077 125.296 145.653 128.833 141.26 130.51C139.026 131.341 136.631 131.649 134.26 131.41L134.1 132.19C133.52 135.19 132.54 140.19 128.62 142.77C126.437 144.062 123.923 144.681 121.39 144.55H120.3C120.66 145.01 121.04 145.46 121.45 145.89C124.839 149.386 129.501 151.359 134.37 151.36C135.227 151.361 136.083 151.298 136.93 151.17C138.029 150.993 138.875 150.106 139 149L139.68 144.66C144.419 146.802 149.451 148.224 154.61 148.88C155.493 148.993 156.37 148.628 156.911 147.921C157.453 147.215 157.578 146.274 157.24 145.45L152.94 135.01C155.743 134.918 158.51 134.347 161.12 133.32C161.853 133.024 162.402 132.398 162.599 131.632C162.797 130.867 162.619 130.053 162.12 129.44L162.11 129.45Z" fill="#796235"/></g></g></g></g><g id="Facial Hair" transform="translate(656 466) scale(220 200)"><g id="Facial Hair/None" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" fill-opacity="0"/></g><g id="Accessories" transform="translate(656 462) scale(1 1)"><g id="Accessories/Hat"><g id="hat"><g id="hair"><path id="Path" d="M141.11 100.31L140.79 98.52C139.33 90.43 137.67 81.26 130.56 76.08C122.47 70.19 109.68 71.57 105.95 72.08C92.5198 74.08 84.6098 82.6 82.4298 97.31C82.2434 98.5856 83.0576 99.7938 84.3098 100.1C96.0982 102.941 108.184 104.361 120.31 104.33C126.556 104.356 132.799 103.992 139 103.24C139.683 103.158 140.302 102.796 140.71 102.241C141.117 101.686 141.276 100.987 141.15 100.31H141.11Z" fill="#796235"/><path id="Path" d="M150.86 97.7C150.377 97.2288 149.724 96.9727 149.05 96.99C121.05 97.7 95.87 97.99 71.05 93.9C69.8297 93.6975 68.6457 94.4215 68.27 95.6C66.86 99.93 69.54 104.31 72.9 106.4C75.96 108.3 79.41 108.74 82.97 109.06C91.13 109.8 106.23 110.43 119.7 110.43C132.61 110.43 144.02 109.85 146.3 108.24C150.67 105.16 151.59 101.78 151.59 99.49C151.595 98.8198 151.333 98.1753 150.86 97.7V97.7Z" fill="#796235"/><path id="Path" d="M118.35 96.92C109.01 96.92 98.3502 96.58 86.2702 95.92C85.377 95.87 84.5784 95.3473 84.1751 94.5488C83.7718 93.7503 83.8252 92.7973 84.3151 92.0488C84.805 91.3003 85.657 90.87 86.5502 90.92C107.16 92.09 123.4 92.25 136.2 91.42C137.093 91.3628 137.949 91.7865 138.445 92.5314C138.941 93.2764 139.002 94.2294 138.605 95.0314C138.208 95.8335 137.413 96.3628 136.52 96.42C131.09 96.74 125.05 96.92 118.35 96.92Z" fill="#412955"/></g></g></g></g></g></g></g></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/assets/PowerOutage.svg b/app/WhereIsThePower/src/assets/PowerOutage.svg new file mode 100644 index 00000000..5fa5096d --- /dev/null +++ b/app/WhereIsThePower/src/assets/PowerOutage.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" stroke="white" fill="white" class="ionicon" viewBox="0 0 512 512"><path d="M432 448a15.92 15.92 0 01-11.31-4.69l-352-352a16 16 0 0122.62-22.62l352 352A16 16 0 01432 448zM294.34 84.28l-22.08 120.84a16 16 0 006.17 15.71 16.49 16.49 0 009.93 3.17h94.12l-38.37 47.42a4 4 0 00.28 5.34l17.07 17.07a4 4 0 005.94-.31l60.8-75.16a16.37 16.37 0 003.3-14.36 16 16 0 00-15.5-12H307.19L335.4 37.63c.05-.3.1-.59.13-.89A18.45 18.45 0 00302.73 23l-92.58 114.46a4 4 0 00.28 5.35l17.07 17.06a4 4 0 005.94-.31zM217.78 427.57l22-120.71a16 16 0 00-6.19-15.7 16.54 16.54 0 00-9.92-3.16h-94.1l38.36-47.42a4 4 0 00-.28-5.34l-17.07-17.07a4 4 0 00-5.93.31L83.8 293.64A16.37 16.37 0 0080.5 308 16 16 0 0096 320h108.83l-28.09 154.36v.11a18.37 18.37 0 0032.5 14.53l92.61-114.46a4 4 0 00-.28-5.35l-17.07-17.06a4 4 0 00-5.94.31z"/></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/assets/Ramp.svg b/app/WhereIsThePower/src/assets/Ramp.svg new file mode 100644 index 00000000..053cbbc1 --- /dev/null +++ b/app/WhereIsThePower/src/assets/Ramp.svg @@ -0,0 +1 @@ +<svg viewBox="585 654.5041322314048 506.9999999999996 252.4793388429754" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" overflow="visible" width="506.9999999999996px" height="252.4793388429754px"><g id="Master/Stickers/Ramp"><g id="ramp"><g id="signs"><path id="Path" d="M1044.71 690.291C1044.61 681.141 1043.99 671.641 1037.86 665.071C1030.7 657.381 1019.26 657.071 1009.1 657.331L957.49 658.791C951.64 658.961 945.57 659.481 941.43 663.731C937.29 667.981 936.92 673.871 936.83 679.631L933.42 891.161C933.41 891.824 933.663 892.464 934.124 892.941C934.585 893.417 935.217 893.69 935.88 893.701V893.701C937.245 893.701 938.358 892.606 938.38 891.241V891.181L1041.9 890.081V890.081C1041.93 891.455 1043.06 892.551 1044.43 892.551C1045.09 892.546 1045.73 892.276 1046.19 891.801C1046.66 891.325 1046.91 890.685 1046.9 890.021L1044.71 690.291Z" fill="#D2DCD0"/><path id="Path_2" d="M1048.87 871.121H932.579C928.828 871.121 925.785 874.159 925.779 877.911V901.501C925.779 902.882 926.899 904.001 928.279 904.001H1053.16C1054.54 904.001 1055.66 902.882 1055.66 901.501V877.911C1055.65 874.163 1052.62 871.127 1048.87 871.121V871.121Z" fill="#A3B6B7"/><path id="Path_3" d="M777.4 684.521H729L688.75 731.231H742.57C755.137 716.398 766.769 700.798 777.4 684.521V684.521Z" fill="#FA4A1B"/><path id="Path_4" d="M597 728.401C599.449 730.24 602.428 731.233 605.49 731.231H648.38C660.963 716.402 672.609 700.801 683.25 684.521H634.8L597 728.401Z" fill="#FA4A1B"/><path id="Path_5" d="M871.58 684.521H823.14L782.89 731.231H836.71C849.29 716.399 860.936 700.799 871.58 684.521V684.521Z" fill="#FA4A1B"/><path id="Path_6" d="M965.75 684.521H917.31L877.06 731.231H930.88C943.46 716.399 955.105 700.799 965.75 684.521V684.521Z" fill="#FA4A1B"/><path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M992.16 682.002H605.47C596.246 682.013 588.771 689.488 588.76 698.712V717.002C588.771 726.226 596.246 733.701 605.47 733.712H992.16C993.54 733.712 994.66 732.593 994.66 731.212V684.502C994.66 683.121 993.54 682.002 992.16 682.002ZM821 687.002H869.93C860.335 701.472 849.942 715.397 838.8 728.712H785L821 687.002ZM690.87 728.712H744.63L744.62 728.732C755.762 715.412 766.152 701.481 775.74 687.002H726.81L690.87 728.712ZM915.16 687.002H964.09C954.505 701.475 944.126 715.407 933 728.732H879.21C891.203 714.832 903.186 700.922 915.16 687.002ZM632.62 687.022L598.62 726.502C600.598 727.944 602.982 728.725 605.43 728.732H650.43C661.569 715.416 671.958 701.492 681.55 687.022H632.62Z" fill="#F6F6F6"/><path id="Path_7" d="M1028 710.13C1027.76 702.54 1027.26 694.51 1024.14 686.93C1020.56 678.24 1014 672.26 1006.14 670.52C994.29 667.9 983.61 672.37 977.59 682.52V682.52C976.71 684.002 975.942 685.546 975.29 687.14C971.6 696.2 971.53 706.21 971.46 715.04C971.35 730.04 978.71 741.21 991.16 744.9C993.736 745.653 996.407 746.03 999.09 746.02C1006.19 746.025 1013.07 743.509 1018.49 738.92C1027.59 731 1028.27 718.69 1028 710.13Z" fill="#A3B6B7"/><path id="Shape_2" fill-rule="evenodd" clip-rule="evenodd" d="M987.431 714.213C987.792 718.419 988.63 728.202 999.74 728.202C1007.68 728.202 1012.42 723.082 1012.39 714.512V712.992L1012.39 712.945C1012.41 706.389 1012.43 699.606 1008.58 693.062C1006.81 689.898 1003.57 687.838 999.95 687.582C996.919 687.342 993.911 688.276 991.55 690.192C990.005 691.642 988.956 693.542 988.55 695.622C987.14 700.992 986.79 706.722 987.43 714.202L987.431 714.213ZM999.74 723.202C994.86 723.202 993.01 720.792 992.41 713.792L992.38 713.902C991.82 707.012 992.12 701.802 993.38 697.012C993.538 695.873 994.069 694.818 994.89 694.012C996.236 692.986 997.913 692.494 999.6 692.632C1001.58 692.76 1003.35 693.892 1004.3 695.632C1007.42 701.002 1007.42 706.832 1007.42 713.002V714.522C1007.42 720.282 1004.84 723.202 999.74 723.202Z" fill="#F6F6F6"/><path id="Path_8" d="M1075.76 905H683.229C681.849 905 680.729 903.881 680.729 902.5C680.729 901.119 681.849 900 683.229 900H1075.76C1077.14 900 1078.26 901.119 1078.26 902.5C1078.26 903.881 1077.14 905 1075.76 905Z" fill="#1B1812"/></g></g></g></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/assets/Stop.svg b/app/WhereIsThePower/src/assets/Stop.svg new file mode 100644 index 00000000..55c27c68 --- /dev/null +++ b/app/WhereIsThePower/src/assets/Stop.svg @@ -0,0 +1 @@ +<svg viewBox="643.5 285.49586776859496 214.49999999999974 621.4876033057851" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" overflow="visible" width="214.49999999999974px" height="621.4876033057851px"><g id="Master/Stickers/Stop"><g id="stop"><g id="signs"><path id="Path" d="M775.52 875.53C772.002 875.53 769.15 872.678 769.15 869.16V869.16L767.53 458.08C767.524 456.703 766.407 455.59 765.03 455.59H745.61C744.948 455.587 744.312 455.848 743.843 456.316C743.374 456.783 743.11 457.418 743.11 458.08L741.49 869.17C741.484 872.686 738.636 875.534 735.12 875.54C725.835 875.551 718.311 883.075 718.3 892.36V895.18C718.305 900.054 722.255 904.004 727.13 904.01H783.51C788.384 904.004 792.334 900.054 792.34 895.18V892.36C792.334 883.071 784.809 875.541 775.52 875.53V875.53Z" fill="#A3B6B7"/><path id="Path_2" d="M806.12 459.802L715.69 463.722C697.05 451.852 679.85 436.162 665.31 418.612C662.168 392.343 662.312 365.785 665.74 339.552C665.74 339.552 689.74 304.942 704.74 290.832C735.927 288.459 767.219 287.775 798.48 288.782C814.27 302.442 829.74 316.232 843.31 332.572C846.979 360.164 847.984 388.046 846.31 415.832C832.92 429.422 818.34 444.942 806.12 459.802Z" fill="#FA4A1B"/><path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M713.27 467.512C713.994 467.972 714.832 468.218 715.69 468.222H715.85L806.27 464.302C807.545 464.249 808.738 463.657 809.55 462.672C819.89 450.102 833.31 435.412 849.45 419.002C850.211 418.228 850.665 417.205 850.73 416.122C852.421 388.04 851.416 359.861 847.73 331.972C847.616 331.136 847.27 330.349 846.73 329.702C832.84 312.982 817.38 299.202 801.38 285.392C800.606 284.719 799.625 284.331 798.6 284.292C767.179 283.272 735.726 283.963 704.38 286.362C703.35 286.434 702.375 286.857 701.62 287.562C686.973 301.331 664.703 333.182 662.232 336.717C662.14 336.849 662.076 336.941 662.04 336.992C661.628 337.587 661.367 338.273 661.28 338.992C657.799 365.599 657.651 392.537 660.84 419.182C660.942 420.038 661.289 420.848 661.84 421.512C677.09 439.892 694.88 455.802 713.27 467.512ZM716.92 459.202C699.158 447.466 683.22 433.18 669.62 416.802V416.762C666.751 391.666 666.925 366.315 670.14 341.262C673.87 335.942 693.53 308.182 706.73 295.262C736.674 293.016 766.716 292.348 796.73 293.262C811.65 306.192 826.11 319.152 839.02 334.492C842.419 360.824 843.389 387.412 841.92 413.922C826.75 429.372 813.98 443.322 803.92 455.432L716.92 459.202Z" fill="#F6F6F6"/><path id="Path_3" d="M712.67 376.003C710.84 372.943 709.11 370.003 708.57 366.913C707.817 361.518 710.583 356.242 715.45 353.793C716.308 353.449 716.906 352.659 717.005 351.74C717.103 350.82 716.687 349.922 715.921 349.403C715.156 348.884 714.167 348.831 713.35 349.263C706.423 352.651 702.493 360.138 703.64 367.763C704.34 371.823 706.39 375.253 708.37 378.573L709.04 379.693C710.95 382.913 712.69 386.373 712.54 389.773C712.42 392.563 710.3 395.703 707.67 395.713C706.289 395.713 705.17 396.832 705.17 398.213C705.17 399.594 706.289 400.713 707.67 400.713V400.713C713.27 400.713 717.28 395.153 717.52 389.993C717.73 385.293 715.63 380.993 713.33 377.143L712.67 376.003Z" fill="#F6F6F6"/><path id="Path_4" d="M752.35 350.192C744.03 349.146 735.634 348.839 727.26 349.272C725.879 349.344 724.818 350.522 724.89 351.902C724.962 353.283 726.139 354.344 727.52 354.272C731.76 354.052 736.013 354.032 740.28 354.212C738.69 369.542 737.78 385.102 737.56 400.492C737.56 401.852 738.641 402.965 740 403.002V403.002C741.369 403.003 742.484 401.901 742.5 400.532C742.71 385.222 743.63 369.732 745.22 354.532C747.37 354.692 749.53 354.912 751.67 355.182H751.98C753.361 355.268 754.55 354.218 754.635 352.837C754.721 351.457 753.671 350.268 752.29 350.182L752.35 350.192Z" fill="#F6F6F6"/><path id="Shape_2" fill-rule="evenodd" clip-rule="evenodd" d="M761.88 364.63C764.65 361.43 768.55 360.84 772.55 363C777.47 365.65 778.74 373.15 777.82 379.4C776.83 386.02 773.58 390.68 769.32 391.55C768.869 391.64 768.41 391.687 767.95 391.69C764.82 391.69 762.08 389.55 760.45 387.33C756.53 382.01 757.29 369.91 761.88 364.63ZM768.32 386.66C770.37 386.23 772.24 382.95 772.87 378.66C773.62 373.57 772.44 368.62 770.18 367.41C767.73 366.09 766.51 366.92 765.65 367.92C762.38 371.68 762.15 381.22 764.48 384.38C765.45 385.66 767.02 386.93 768.32 386.66Z" fill="#F6F6F6"/><path id="Shape_3" fill-rule="evenodd" clip-rule="evenodd" d="M790.916 349.393C793.864 349.473 797.212 349.564 800.34 350.943C803.54 352.343 806.75 355.633 806.67 359.823C806.64 363.343 804.23 366.733 800.52 368.463C798.138 369.467 795.593 370.03 793.01 370.123L792.6 396.123C792.578 397.488 791.465 398.583 790.1 398.583C789.437 398.572 788.805 398.299 788.344 397.823C787.882 397.346 787.629 396.706 787.64 396.043L788.34 351.853C788.35 351.184 788.628 350.547 789.11 350.083C789.589 349.614 790.24 349.364 790.91 349.393L790.916 349.393ZM793.13 365.123C794.958 365.04 796.758 364.64 798.45 363.943V363.903C800 363.173 801.67 361.663 801.69 359.773C801.71 357.883 799.95 356.253 798.3 355.523C796.703 354.904 795.012 354.566 793.3 354.523L793.13 365.123Z" fill="#F6F6F6"/><path id="Path_5" d="M825.409 905H685.229C683.849 905 682.729 903.881 682.729 902.5C682.729 901.119 683.849 900 685.229 900H825.409C826.79 900 827.909 901.119 827.909 902.5C827.909 903.881 826.79 905 825.409 905Z" fill="#1B1812"/></g></g></g></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/assets/SubstationBlew.svg b/app/WhereIsThePower/src/assets/SubstationBlew.svg new file mode 100644 index 00000000..76dbda88 --- /dev/null +++ b/app/WhereIsThePower/src/assets/SubstationBlew.svg @@ -0,0 +1,3 @@ +<svg width="64" height="64" viewBox="0 0 64 64" fill="none" xmlns="http://www.w3.org/2000/svg"> +<path d="M29.9104 3.39441L26.2085 10.798L24.657 6.14428L19.125 8.91016V11.4258L23.3428 9.31703L25.7915 16.6629L30.0899 8.06666L36.0896 18.0667L40.5031 9.24003L44.875 11.4259V8.91028L39.4969 6.22141L35.9101 13.3944L29.9104 3.39441ZM11.125 8.85566V14.6057H16.875V8.85566H11.125ZM47.125 8.85566V14.6057H52.875V8.85566H47.125ZM9.125 16.8557V54.6057H20.875V40.6057H43.125V54.6057H54.875V16.8557H44.8784L40.8784 32.8557H23.1216L19.1216 16.8557H9.125ZM21.7534 18.1057L22.3159 20.3557H41.6841L42.2466 18.1057H21.7534ZM22.8159 22.3557L23.3784 24.6057H40.6216L41.1841 22.3557H22.8159ZM48.875 25.7307C50.5875 25.7307 52 27.1432 52 28.8557C52 30.5682 50.5875 31.9807 48.875 31.9807C47.1625 31.9807 45.75 30.5682 45.75 28.8557C45.75 27.1432 47.1625 25.7307 48.875 25.7307ZM6.875 25.8327L3.125 28.3327V46.6057H6.875V25.8327ZM23.8784 26.6057L24.4409 28.8557H39.5591L40.1216 26.6057H23.8784ZM48.875 33.7307C50.5875 33.7307 52 35.1432 52 36.8557C52 38.5682 50.5875 39.9807 48.875 39.9807C47.1625 39.9807 45.75 38.5682 45.75 36.8557C45.75 35.1432 47.1625 33.7307 48.875 33.7307ZM57.125 40.8557V46.6057H60.875V40.8557H57.125ZM48.875 41.7307C50.5875 41.7307 52 43.1432 52 44.8557C52 46.5682 50.5875 47.9807 48.875 47.9807C47.1625 47.9807 45.75 46.5682 45.75 44.8557C45.75 43.1432 47.1625 41.7307 48.875 41.7307ZM23.125 42.8557V48.6057H25.3048L28 43.215L32.3084 51.8314L33.5339 50.6057H40.875V42.8557H23.125ZM28 48.2465L26.6952 50.8557H23.125V56.6057H40.875V52.8557H34.4661L31.6919 55.6298L28 48.2465ZM57.125 48.8557V54.6057H60.875V48.8557H57.125ZM8.375 56.8557L3.375 60.6057H16.875V56.8557H8.375ZM47.125 56.8557V60.6057H60.625L55.625 56.8557H47.125Z" fill="white"/> +</svg> diff --git a/app/WhereIsThePower/src/assets/Traffic Light.svg b/app/WhereIsThePower/src/assets/Traffic Light.svg new file mode 100644 index 00000000..d2611e6b --- /dev/null +++ b/app/WhereIsThePower/src/assets/Traffic Light.svg @@ -0,0 +1 @@ +<svg viewBox="565.5 71.85950413223145 409.49999999999994 835.1239669421489" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" overflow="visible" width="409.49999999999994px" height="835.1239669421489px"><g id="Master/Stickers/Traffic Light"><g id="traffic light"><g id="signs"><rect id="Rectangle" x="668.75" y="145.18" width="5" height="21.82" rx="2.5" fill="#1B1812"/><path id="Path" d="M680.88 166.841C679.529 166.836 678.423 165.762 678.38 164.411L678 149.621C677.979 148.959 678.222 148.315 678.676 147.833C679.13 147.351 679.758 147.069 680.42 147.051H680.5C681.852 147.05 682.958 148.129 682.99 149.481L683.41 164.271C683.429 164.934 683.184 165.577 682.728 166.059C682.272 166.541 681.643 166.822 680.98 166.841H680.88Z" fill="#1B1812"/><path id="Path_2" d="M664.21 89.3107C663.936 88.7074 663.432 88.2384 662.811 88.0075C662.19 87.7766 661.502 87.803 660.9 88.0807C653.976 91.432 647.454 95.5584 641.46 100.381C640.756 100.972 640.433 101.901 640.619 102.801C640.805 103.702 641.47 104.427 642.35 104.691C646.923 106.059 651.644 106.872 656.41 107.111H656.53C657.734 107.112 658.766 106.252 658.982 105.068C659.198 103.884 658.536 102.715 657.41 102.291L660.64 93.7807C661.45 93.3607 662.25 92.9607 662.98 92.6207C664.233 92.0451 664.783 90.5645 664.21 89.3107V89.3107Z" fill="#FA4A1B"/><path id="Path_3" d="M703.391 124.26C697.621 118.69 691.441 115.48 684.971 114.71C684.971 111.77 685.061 106.71 685.191 103.4C685.441 97.1298 683.441 91.3998 679.721 87.7998C675.081 83.2598 667.721 82.4098 662.871 85.7998C658.021 89.1898 656.971 95.2398 656.431 100.72C655.801 107.09 655.431 113.55 655.311 119.95C655.161 127.86 655.721 136.02 660.761 142.07C665.041 147.17 672.651 150.29 682.761 151.07V151.07C684.591 151.21 686.431 151.28 688.241 151.28C695.179 151.283 702.086 150.362 708.781 148.54C709.958 148.178 710.846 147.205 711.101 146C712.201 141.54 708.191 128.9 703.391 124.26Z" fill="#4A5D70"/><path id="Path_4" d="M693.87 137.101C686.87 137.101 679.61 135.321 675.03 131.361C673.987 130.455 673.875 128.875 674.78 127.831C675.686 126.787 677.267 126.675 678.31 127.581C684.43 132.891 697.21 133.251 704.84 130.251C706.127 129.746 707.58 130.379 708.085 131.666C708.591 132.953 707.957 134.406 706.67 134.911C702.571 136.409 698.234 137.152 693.87 137.101V137.101Z" fill="#1B1812"/><path id="Path_5" d="M668 102.159C666.648 102.159 665.543 101.08 665.51 99.7287L665.44 97.4187C665.402 96.0379 666.49 94.8873 667.87 94.8487C669.251 94.81 670.402 95.8979 670.44 97.2787L670.5 99.5887C670.522 100.251 670.279 100.894 669.825 101.377C669.37 101.859 668.743 102.14 668.08 102.159H668Z" fill="#1B1812"/><path id="Path_6" d="M936.161 590.732C934.831 577.272 926.631 577.392 917.941 577.532C916.611 577.532 915.201 577.532 913.731 577.532H912.261C905.771 577.422 897.691 577.272 895.261 586.532C892.831 595.792 893.261 628.922 895.781 632.012C897.531 634.152 900.161 635.012 902.491 635.482C907.088 636.505 911.781 637.031 916.491 637.052C919.845 637.055 923.193 636.748 926.491 636.132C932.504 634.959 936.883 629.747 937.001 623.622C937.241 610.002 936.461 593.832 936.161 590.732Z" fill="#A3B6B7"/><path id="Path_7" d="M931 704.08H919.13C914.26 558.08 915.65 410.25 923.32 264.47C924.08 249.94 925.13 230.02 914.55 213.37C898.41 187.95 865.3 186.69 847.55 186.02C826.55 185.22 785.82 186.08 785.41 186.09C784.748 186.103 784.119 186.38 783.661 186.858C783.203 187.337 782.954 187.978 782.97 188.64L783.49 213.43C783.544 214.799 784.67 215.881 786.04 215.88H786.1C790.27 215.79 827.45 215.07 846.42 215.79C867.59 216.59 883 219.2 889.42 229.34C894.49 237.34 894.32 248.77 893.58 262.91C885.89 409.21 884.48 557.53 889.33 704.08H872.46C868.07 704.08 864.62 708.68 864.62 714.56V884.56C864.62 890.43 868.07 895.03 872.46 895.03H931C935.39 895.03 938.84 890.43 938.84 884.56V714.56C938.85 708.68 935.4 704.08 931 704.08Z" fill="#D2DCD0"/><path id="Path_8" d="M936.33 674.78C929.83 668.31 921.88 667.36 914.28 666.95C904.39 666.42 894.36 666.31 884.45 666.64C877.99 666.85 870.68 667.64 865.45 674.64C858.45 684.1 855.8 703.9 856.86 718.56C856.954 719.866 858.041 720.878 859.35 720.88H943.04C944.199 720.886 945.208 720.089 945.47 718.96C949.16 703.59 945 683.37 936.33 674.78Z" fill="#A3B6B7"/><path id="Shape" fill-rule="evenodd" clip-rule="evenodd" d="M902.431 821.14H920.331L920.371 821.18C922.017 821.183 923.595 820.527 924.754 819.359C925.913 818.19 926.557 816.606 926.541 814.96C926.441 803.96 926.371 793.04 926.311 781.96L926.31 781.784C926.25 770.762 926.19 759.692 926.081 748.75C926.055 745.429 923.401 742.727 920.081 742.64L902.341 742.05C900.688 741.994 899.082 742.604 897.884 743.744C896.686 744.884 895.997 746.457 895.971 748.11C895.82 757.696 895.944 767.854 896.065 777.751C896.08 779.036 896.096 780.316 896.111 781.59C896.126 782.862 896.141 784.138 896.157 785.417C896.277 795.298 896.4 805.373 896.241 814.89C896.213 816.534 896.847 818.12 898.001 819.29C899.168 820.478 900.765 821.145 902.431 821.14ZM901.331 747.36C901.547 747.156 901.833 747.042 902.131 747.04L902.171 747.03L919.911 747.62C920.54 747.637 921.041 748.151 921.041 748.78C921.141 759.88 921.217 770.94 921.271 781.96C921.324 792.98 921.401 803.98 921.501 814.96C921.503 815.267 921.385 815.561 921.171 815.78C920.949 816.005 920.646 816.131 920.331 816.13H902.431C902.107 816.135 901.795 816.004 901.571 815.77C901.351 815.559 901.232 815.265 901.241 814.96C901.409 804.859 901.272 794.131 901.139 783.727C901.129 782.986 901.12 782.247 901.111 781.51C901.101 780.731 901.091 779.949 901.081 779.166C900.948 768.81 900.813 758.184 900.971 748.18C900.974 747.869 901.104 747.573 901.331 747.36Z" fill="#1B1812"/><path id="Path_9" d="M791.81 177.881C787.52 165.041 772.49 163.061 759.88 162.781C710.41 161.661 660.26 164.511 611.75 167.281C604.55 167.691 594.68 168.281 587.75 173.631C578.62 180.701 578.75 191.101 578.88 199.451C578.88 200.451 578.88 201.381 578.88 202.321C578.88 211.691 579.26 220.661 583.88 227.491C591.01 238.001 603.34 238.181 614.23 238.331C615.33 238.331 616.44 238.331 617.53 238.391C628.71 238.651 640.08 238.661 651.07 238.671C656.64 238.671 662.21 238.671 667.77 238.721L770.11 239.401H771.56C775.46 239.401 780.01 239.201 783.91 237.141C788.83 234.551 792.3 229.201 793.43 222.451C796 207.311 794.67 186.441 791.81 177.881Z" fill="#A3B6B7"/><path id="Path_10" d="M608.09 229.889V229.889C607.427 229.884 606.792 229.613 606.328 229.138C605.865 228.663 605.61 228.023 605.62 227.359L606.2 177.599C606.222 176.232 607.334 175.134 608.7 175.129V175.129C609.363 175.137 609.996 175.408 610.459 175.882C610.923 176.357 611.178 176.996 611.17 177.659L610.58 227.419C610.569 228.786 609.458 229.889 608.09 229.889V229.889Z" fill="#1B1812"/><ellipse id="Oval" cx="645.841" cy="200.96" rx="21.03" ry="23.21" fill="#FA4A1B"/><path id="Shape_2" fill-rule="evenodd" clip-rule="evenodd" d="M622.311 200.96C622.311 215.14 632.841 226.68 645.841 226.68C658.811 226.68 669.371 215.14 669.371 200.96C669.371 186.78 658.821 175.25 645.841 175.25C632.861 175.25 622.311 186.78 622.311 200.96ZM627.311 200.96C627.311 189.54 635.621 180.25 645.841 180.25C656.061 180.25 664.371 189.54 664.371 200.96C664.371 212.38 656.061 221.68 645.841 221.68C635.621 221.68 627.311 212.38 627.311 200.96Z" fill="#1B1812"/><path id="Path_11" d="M626.591 191.61C637.851 185.79 653.651 185.13 665.281 192.09C662.121 183.67 654.611 177.75 645.841 177.75C637.241 177.75 629.851 183.45 626.591 191.61Z" fill="#1B1812"/><path id="Shape_3" fill-rule="evenodd" clip-rule="evenodd" d="M663.99 194.24C664.382 194.468 664.827 194.589 665.28 194.59V194.63C666.101 194.63 666.869 194.228 667.336 193.553C667.803 192.879 667.909 192.018 667.62 191.25C663.98 181.51 655.43 175.25 645.84 175.25C636.48 175.25 628.01 181.31 624.27 190.69C623.888 191.659 624.146 192.762 624.918 193.461C625.69 194.16 626.815 194.307 627.74 193.83C638.99 188.02 653.88 188.24 663.99 194.24ZM659.22 186.62C654.898 185.224 650.382 184.522 645.84 184.54C641.348 184.537 636.88 185.198 632.58 186.5C635.867 182.519 640.767 180.224 645.929 180.248C651.091 180.271 655.97 182.61 659.22 186.62Z" fill="#1B1812"/><ellipse id="Oval_2" cx="701.161" cy="200.96" rx="21.03" ry="23.21" fill="#FFE055"/><path id="Shape_4" fill-rule="evenodd" clip-rule="evenodd" d="M677.631 200.96C677.631 215.14 688.161 226.68 701.161 226.68C714.141 226.68 724.701 215.22 724.701 201C724.701 186.78 714.131 175.25 701.161 175.25C688.191 175.25 677.631 186.78 677.631 200.96ZM682.631 200.96C682.631 189.54 690.951 180.25 701.161 180.25C711.381 180.25 719.701 189.54 719.701 200.96C719.701 212.38 711.371 221.68 701.161 221.68C690.951 221.68 682.631 212.38 682.631 200.96Z" fill="#1B1812"/><path id="Path_12" d="M681.91 191.61C693.18 185.79 708.98 185.13 720.6 192.09C717.44 183.67 709.93 177.75 701.16 177.75C692.56 177.75 685.17 183.45 681.91 191.61Z" fill="#1B1812"/><path id="Shape_5" fill-rule="evenodd" clip-rule="evenodd" d="M719.32 194.24C719.709 194.467 720.151 194.587 720.6 194.59C721.18 194.599 721.745 194.409 722.2 194.05C723.023 193.373 723.321 192.245 722.94 191.25C719.31 181.51 710.76 175.25 701.16 175.25C691.8 175.25 683.34 181.31 679.59 190.69C679.208 191.659 679.467 192.762 680.239 193.461C681.011 194.16 682.135 194.307 683.06 193.83C694.32 188.02 709.21 188.24 719.32 194.24ZM714.54 186.62C710.218 185.224 705.702 184.522 701.16 184.54C696.671 184.538 692.207 185.198 687.91 186.5C691.195 182.52 696.093 180.225 701.254 180.248C706.414 180.271 711.292 182.61 714.54 186.62Z" fill="#1B1812"/><ellipse id="Oval_3" cx="756.49" cy="200.96" rx="21.03" ry="23.21" fill="#5DB36D"/><path id="Shape_6" fill-rule="evenodd" clip-rule="evenodd" d="M732.96 200.96C732.96 215.14 743.49 226.68 756.49 226.68C769.47 226.68 780 215.22 780 201C780 186.78 769.47 175.25 756.49 175.25C743.51 175.25 732.96 186.78 732.96 200.96ZM737.96 200.96C737.96 189.54 746.27 180.25 756.49 180.25C766.71 180.25 775 189.62 775 201C775 212.38 766.71 221.68 756.49 221.68C746.27 221.68 737.96 212.38 737.96 200.96Z" fill="#1B1812"/><path id="Path_13" d="M737.24 191.61C748.5 185.79 764.3 185.13 775.93 192.09C772.77 183.67 765.26 177.75 756.49 177.75C747.89 177.75 740.5 183.45 737.24 191.61Z" fill="#1B1812"/><path id="Shape_7" fill-rule="evenodd" clip-rule="evenodd" d="M774.641 194.24C775.033 194.467 775.477 194.587 775.931 194.59V194.63C776.751 194.63 777.519 194.228 777.986 193.553C778.453 192.879 778.559 192.018 778.271 191.25C774.631 181.51 766.081 175.25 756.491 175.25C747.131 175.25 738.661 181.31 734.921 190.69C734.539 191.659 734.797 192.762 735.569 193.461C736.341 194.16 737.465 194.307 738.391 193.83C749.641 188.02 764.541 188.24 774.641 194.24ZM769.871 186.62C765.548 185.224 761.032 184.522 756.491 184.54C751.998 184.537 747.53 185.198 743.231 186.5C746.517 182.519 751.417 180.224 756.579 180.248C761.741 180.271 766.62 182.61 769.871 186.62Z" fill="#1B1812"/><path id="Path_14" d="M959.22 896H676.67C675.289 896 674.17 894.881 674.17 893.5C674.17 892.119 675.289 891 676.67 891H959.22C960.601 891 961.72 892.119 961.72 893.5C961.72 894.881 960.601 896 959.22 896Z" fill="#1B1812"/></g></g></g></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/assets/Traffic.svg b/app/WhereIsThePower/src/assets/Traffic.svg new file mode 100644 index 00000000..0951d785 --- /dev/null +++ b/app/WhereIsThePower/src/assets/Traffic.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" stroke="white" fill="white" height="24" viewBox="0 -960 960 960" width="24"><path d="M224.614-220.001v37.693q0 17.628-12.352 29.967-12.353 12.34-29.999 12.34-17.647 0-29.954-12.34-12.308-12.339-12.308-29.967v-282.153q0-6.231.808-12.462t2.718-11.935l71.628-202.526q7.19-21.606 26.065-35.11 18.874-13.505 42.242-13.505h393.076q23.368 0 42.242 13.505 18.875 13.504 26.065 35.11l71.628 202.526q1.91 5.704 2.718 11.935.808 6.231.808 12.462v282.153q0 17.628-12.353 29.967-12.353 12.34-29.999 12.34-17.647 0-29.954-12.34-12.307-12.339-12.307-29.967v-37.693H224.614Zm-.307-316.92h511.386l-47.385-135.001q-1.539-3.847-4.616-5.962-3.077-2.116-7.308-2.116H283.616q-4.231 0-7.308 2.116-3.077 2.115-4.616 5.962l-47.385 135.001ZM200-476.923V-280v-196.923Zm98.552 150.769q21.832 0 37.024-15.283 15.193-15.283 15.193-37.115t-15.283-37.024q-15.283-15.193-37.115-15.193t-37.025 15.283q-15.192 15.283-15.192 37.115t15.283 37.025q15.283 15.192 37.115 15.192Zm363.077 0q21.832 0 37.025-15.283 15.192-15.283 15.192-37.115t-15.283-37.024q-15.283-15.193-37.115-15.193t-37.024 15.283q-15.193 15.283-15.193 37.115t15.283 37.025q15.283 15.192 37.115 15.192ZM200-280h560v-196.923H200V-280Z"/></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/assets/WhereIsThePower.png b/app/WhereIsThePower/src/assets/WhereIsThePower.png new file mode 100644 index 00000000..3ac1f648 Binary files /dev/null and b/app/WhereIsThePower/src/assets/WhereIsThePower.png differ diff --git a/app/WhereIsThePower/src/assets/bookmarks.svg b/app/WhereIsThePower/src/assets/bookmarks.svg new file mode 100644 index 00000000..eb58b7f6 --- /dev/null +++ b/app/WhereIsThePower/src/assets/bookmarks.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="48" viewBox="0 -960 960 960" width="48"><path d="M420-167 203-75q-30 13-56.5-5.5T120-131v-609q0-24 18-42t42-18h480q24 0 42.5 18t18.5 42v610q0 32.489-26.5 50.244Q668-62 638-75l-218-92Zm0-67 240 103v-609H180v609l240-103Zm360 104v-730H233v-60h547q24 0 42 18t18 42v730h-60ZM420-740H180h480-240Z"/></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/assets/phoneLightbulb.svg b/app/WhereIsThePower/src/assets/phoneLightbulb.svg new file mode 100644 index 00000000..7fc4b810 --- /dev/null +++ b/app/WhereIsThePower/src/assets/phoneLightbulb.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 599.9999999999999 607.5" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" overflow="visible" width="599.9999999999999px" height="607.5px"><g id="Master/Spot Illustrations/Show"><g id="Background" style="mix-blend-mode:soft-light" transform="scale(1 1)"><g id="Background/Spark"><path id="Path" d="M325 232.16C345 231.33 384.66 228.09 385.06 228.06C386.121 227.97 386.926 227.065 386.89 226C386.2 203.92 380.82 175.19 375.65 150C372.55 135.06 361.35 83.6402 346 49.6302C345.678 48.9135 344.966 48.4518 344.18 48.4502H343.45C312.27 48.4502 280.56 54.2202 253.63 59.8802C228.98 65.0602 202.63 69.9302 173.08 74.7802C157.52 77.3302 144.62 81.0002 132.5 86.2202C131.875 86.4896 131.43 87.0585 131.318 87.73C131.207 88.4016 131.445 89.0836 131.95 89.5402C157.07 112.34 182.32 140.54 207.04 173.38C198.54 173.8 190.09 174.58 181.89 175.38C176.89 175.84 171.8 176.31 166.69 176.7C158.64 177.32 150.81 178.05 143.23 178.76C135.91 179.45 128.34 180.16 120.61 180.76C119.893 180.814 119.26 181.248 118.952 181.897C118.644 182.546 118.708 183.311 119.12 183.9C123.71 190.47 129.64 198.23 135.37 205.74C139.14 210.67 142.69 215.33 145.92 219.69C161.5 240.8 175.32 256.4 192.64 275.37C186.48 275.69 180.07 274.25 173.35 272.74C167.12 271.34 160.69 269.89 154.15 269.83V269.83C153.394 269.829 152.702 270.254 152.362 270.929C152.021 271.604 152.09 272.413 152.54 273.02C164.49 289.27 202.81 336.13 215.4 351.53L218.9 355.81C241.08 383 262.57 408.14 295.37 442.48C295.746 442.874 296.266 443.098 296.81 443.1C297.411 443.111 297.985 442.85 298.373 442.39C298.761 441.931 298.921 441.321 298.81 440.73C289.53 392.49 276.68 342.45 265.64 311.39C273.83 313.56 286.3 313.28 299.37 312.98C306.06 312.82 312.98 312.66 318.88 312.9C319.61 312.933 320.3 312.564 320.679 311.94C321.058 311.315 321.066 310.533 320.7 309.9C309.43 289.79 303.5 280 295.3 266.51C292.37 261.68 276.49 238.94 270.08 229.79C288.289 232.102 306.659 232.894 325 232.16Z" fill="#EAF3F3"/><path id="Path_2" d="M430.9 378C431.41 375.62 428.9 372.38 422.71 365C420.55 362.43 418.51 360 417.38 358.33C416.813 357.486 415.703 357.202 414.8 357.67C398 366.3 379 380.39 362.62 396.27C361.838 397.028 361.807 398.273 362.55 399.07C365.11 401.81 368.11 404.76 371.01 407.62C372.83 409.42 374.64 411.2 376.32 412.92C377.013 413.626 378.118 413.72 378.92 413.14C382.86 410.31 386.83 407.25 391.02 404.01C403.35 394.51 416.09 384.69 429.67 379.4C430.286 379.164 430.746 378.641 430.9 378Z" fill="#EAF3F3"/><path id="Path_3" d="M474 471.47C473.947 470.644 473.39 469.936 472.6 469.69C459.16 465.48 444.31 464.63 429.95 463.81C421.2 463.31 412.16 462.81 403.72 461.51C402.746 461.36 401.809 461.941 401.51 462.88C399.612 468.936 398.244 475.146 397.42 481.44C397.277 482.483 397.968 483.458 399 483.67L403.06 484.43C407.83 485.31 415.83 486.79 418.42 487.33C427.07 489.14 467.37 494.9 469.08 495.14H469.36C470.074 495.139 470.733 494.758 471.09 494.14C471.2 493.9 475 487.21 474 471.47Z" fill="#EAF3F3"/><path id="Path_4" d="M215.22 508.35C214.534 507.987 213.7 508.053 213.08 508.52C212.67 508.83 172.68 539.16 155.93 548.75C155.271 549.132 154.886 549.855 154.937 550.615C154.988 551.375 155.466 552.04 156.17 552.33C161.29 554.43 169.97 563.89 174.55 569.74C174.93 570.22 175.508 570.5 176.12 570.5C176.417 570.501 176.711 570.436 176.98 570.31C183.31 567.31 189.23 562.82 194.98 558.47C196.47 557.35 197.93 556.23 199.38 555.16C209.06 548.02 234.48 526.62 235.56 525.71C236.019 525.33 236.284 524.765 236.284 524.17C236.284 523.574 236.019 523.01 235.56 522.63C223 512.46 215.53 508.51 215.22 508.35Z" fill="#EAF3F3"/><path id="Path_5" d="M202.83 465.42C202.989 465.467 203.154 465.491 203.32 465.49C204.003 465.492 204.641 465.145 205.01 464.57L205.17 464.32C209.79 457.12 215.02 448.96 216.39 440.58C216.478 440.048 216.348 439.504 216.03 439.07C215.711 438.639 215.231 438.354 214.7 438.28C201.16 436.35 145.7 419.84 145.15 419.67C144.234 419.405 143.259 419.824 142.82 420.67C142.76 420.79 136.6 432.27 131.87 443.45C131.452 444.441 131.894 445.586 132.87 446.04C144.55 451.4 168.44 457.13 187.64 461.74C193.31 463.07 198.66 464.35 202.83 465.42Z" fill="#EAF3F3"/></g></g><g id="Master/Hands/Show" transform="scale(1 1)"><g id="Master/Hands/Show"><g id="base"><path id="Path" d="M439.61 240.732C426.519 229.687 406.456 229.461 389.738 238.02C388.533 238.639 387.291 239.299 385.963 240.023C381.599 233.952 371.682 232.643 363.058 234.927C359.602 235.846 355.474 237.376 350.455 239.522C349.067 240.115 347.616 240.753 346.041 241.461C343.953 242.399 337.088 245.558 335.87 246.106C330.21 248.646 324.468 251.278 316.218 255.099C315.423 255.467 314.59 255.853 313.636 256.295C301.811 261.777 301.367 261.982 297.006 263.982C284.344 269.789 266.342 278.971 253.693 286.055C250.154 288.044 244.204 291.479 236.51 295.962L236.207 296.139C231.726 298.75 226.945 301.548 222.176 304.346C220.507 305.325 218.959 306.234 217.57 307.05C217.269 307.227 217.044 307.36 216.794 307.507C214.776 306.425 210.759 304.272 209.42 303.556C205.965 301.707 203.09 300.175 200.311 298.705C199.442 298.246 198.594 297.798 197.762 297.36C189.965 293.257 183.556 289.989 178.255 287.447C165.151 281.155 159.812 279.021 152.789 277.992C148.33 277.338 144.085 277.502 139.895 278.572C130.074 281.078 126.459 292.743 132.314 302.741C135.79 308.668 140.15 313.524 148.851 321.936C148.913 321.995 151.437 324.431 152.157 325.129C153.401 326.336 154.414 327.331 155.366 328.285C156.287 329.209 157.129 330.073 157.918 330.905C158.711 331.746 163.186 336.451 164.477 337.825C176.712 350.843 183.035 359.63 186.001 369.695C190.694 385.635 191.83 401.728 191.83 432.29C191.83 440.553 192.033 460.33 192.382 488.135C192.423 491.402 192.466 494.752 192.51 498.176C192.659 509.685 192.818 571.519 192.978 583.022C193.033 587.048 193.085 590.745 193.132 594.031C193.148 595.181 193.162 596.198 193.175 597.071C193.187 597.954 193.187 597.954 193.19 598.139C193.206 599.232 194.097 600.11 195.19 600.11H368.52C369.636 600.11 370.536 599.197 370.52 598.081C370.509 597.305 370.509 597.305 370.459 593.813C370.41 590.418 370.356 586.635 370.297 582.561C370.13 570.921 369.963 509.281 369.807 498.417L369.803 498.108C369.522 478.603 369.309 463.834 369.19 455.691C369.051 447.24 368.777 438.383 368.365 428.377C368.048 420.687 367.744 414.286 367.076 400.856C366.275 384.721 365.944 377.711 365.615 369.195C365.93 368.912 366.282 368.597 366.668 368.251C368.065 366.998 369.622 365.596 371.298 364.079C376.087 359.744 380.876 355.353 385.348 351.173C385.89 350.667 386.425 350.166 386.952 349.67C394.846 342.253 400.663 336.494 403.695 332.976C405.638 330.72 407.761 328.371 410.285 325.666C411.464 324.403 412.701 323.093 414.261 321.451C414.93 320.747 417.627 317.916 418.305 317.203C431.688 303.124 438.443 294.9 443.882 284.766C447.205 278.607 446.675 271.093 442.44 266.459C449.011 258.408 447.249 247.179 439.61 240.732Z" fill="#ff9ba5"/><path id="Path" d="M265.321 388.997C266.072 388.955 266.619 388.911 268.07 388.784C268.94 388.708 269.392 388.671 269.903 388.634C272.251 388.467 273.895 388.506 275.316 388.822C276.394 389.062 277.462 388.383 277.702 387.305C277.942 386.226 277.263 385.158 276.185 384.918C274.303 384.499 272.322 384.452 269.62 384.644C269.08 384.683 268.612 384.722 267.721 384.8C266.315 384.923 265.792 384.965 265.099 385.003C263.996 385.064 263.152 386.008 263.213 387.111C263.274 388.214 264.218 389.058 265.321 388.997Z" fill="#484882"/><path id="Path" d="M259.386 313.345C266.662 311.6 275.614 313.178 284.401 318.381C292.416 323.127 297.089 329.749 300.68 339.228C301.071 340.261 302.225 340.782 303.258 340.39C304.291 339.999 304.811 338.844 304.42 337.812C300.537 327.56 295.358 320.22 286.439 314.939C276.786 309.223 266.777 307.459 258.454 309.455C257.379 309.713 256.717 310.792 256.975 311.866C257.233 312.94 258.312 313.602 259.386 313.345Z" fill="#484882"/><path id="Path" d="M311 278.8C334.1 278.8 359.213 286.526 378.499 299.403C379.418 300.017 380.66 299.769 381.273 298.851C381.887 297.932 381.639 296.69 380.721 296.077C360.782 282.764 334.896 274.8 311 274.8C309.895 274.8 309 275.695 309 276.8C309 277.905 309.895 278.8 311 278.8Z" fill="#484882"/><path id="Path" d="M351.801 285.345C353.521 284.269 355.245 283.169 356.979 282.041C367.305 275.329 396.343 254.413 397.707 253.482C411.029 244.386 420.192 239.891 428.825 238.825C429.921 238.69 430.7 237.691 430.565 236.595C430.43 235.499 429.431 234.72 428.335 234.855C418.903 236.02 409.262 240.749 395.452 250.178C394.014 251.16 365.028 272.039 354.799 278.688C353.084 279.803 351.38 280.89 349.679 281.955C348.743 282.541 348.459 283.775 349.045 284.711C349.631 285.647 350.865 285.931 351.801 285.345Z" fill="#484882"/><path id="Path" d="M328.077 279.144C328.983 278.494 329.822 277.89 331.258 276.857C344.193 267.554 349.735 263.631 357.279 258.538C370.235 249.791 375.171 246.7 384.38 241.86C385.358 241.347 385.734 240.137 385.22 239.16C384.706 238.182 383.497 237.806 382.519 238.32C373.149 243.244 368.11 246.4 355.041 255.222C347.453 260.345 341.89 264.283 328.923 273.61C327.487 274.642 326.648 275.246 325.743 275.896C324.846 276.54 324.641 277.79 325.285 278.687C325.93 279.584 327.18 279.789 328.077 279.144Z" fill="#484882"/><path id="Path" d="M439.215 265.804C440.167 266.364 441.393 266.046 441.953 265.095C442.514 264.143 442.196 262.917 441.244 262.356C437.901 260.389 434.129 259.265 430.254 259.082L430.126 259.08C427.022 259.133 423.667 260.187 419.916 262.106C417.334 263.427 414.7 265.074 411.405 267.347C411.303 267.417 405.362 271.601 403.916 272.545C388.675 282.518 381.649 287.029 372.799 292.422C371.856 292.997 371.557 294.227 372.132 295.171C372.706 296.114 373.937 296.413 374.88 295.838C383.779 290.416 390.83 285.888 406.105 275.894C407.618 274.905 413.627 270.673 413.676 270.64C416.84 268.457 419.341 266.893 421.737 265.667C424.964 264.016 427.75 263.136 430.131 263.081C433.334 263.242 436.451 264.176 439.215 265.804Z" fill="#484882"/></g><g id="Show/Wear" transform="scale(1 1)"><g id="Show/Wear/Hoodie 3"><g id="clothing"><path id="Path" d="M459.531 557.9C456.581 548.18 452.631 540.6 442.951 535.21C435.791 531.21 429.271 530.6 422.341 533.46C425.871 526.759 427.545 519.236 427.191 511.67C426.741 499.22 421.531 487.74 413.241 480.97C396.481 467.27 383.961 475.81 371.891 484.31C371.801 479.95 372.061 475.23 372.301 470.97C372.585 467.31 372.685 463.639 372.601 459.97C372.191 452.24 372.411 444.25 372.601 436.51C372.811 428.61 373.031 420.44 372.601 412.51C372.562 411.805 372.154 411.173 371.529 410.847C370.903 410.52 370.151 410.548 369.551 410.92C362.811 415.05 355.841 419.33 347.161 421.38C325.001 426.61 299.511 428.48 269.231 427.09C264.231 426.87 259.231 426.69 254.231 426.51C242.231 426.08 229.891 425.64 217.831 424.51C195.941 422.42 192.521 419.24 191.991 418.31C191.557 417.549 190.679 417.159 189.824 417.347C188.969 417.535 188.336 418.258 188.261 419.13C187.811 424.22 185.121 455.53 184.651 478.73C179.331 477.6 173.581 477.83 168.551 481.29C154.721 490.8 157.881 506.09 160.661 519.58C160.871 520.58 161.081 521.58 161.271 522.58C160.759 522.219 160.228 521.885 159.681 521.58C152.091 517.38 139.761 517.14 134.321 521.08C124.261 528.37 122.091 545.75 121.661 550.9C120.721 562.4 124.661 577.79 131.591 587.68C135.011 592.58 142.441 600.04 148.231 600.04H455.131C460.571 591.17 463.471 570.9 459.531 557.9Z" fill="#1A4E66"/><path id="Combined Shape" fill-rule="evenodd" clip-rule="evenodd" d="M359.41 419.5C359.41 424.974 359.52 429.359 359.843 439.082C360.327 453.597 360.421 459.972 360.09 467.956C359.85 473.774 359.361 479.175 358.573 484.37C358.407 485.462 359.158 486.482 360.25 486.647C361.342 486.813 362.362 486.062 362.528 484.97C363.339 479.622 363.84 474.078 364.087 468.121C364.423 460.005 364.328 453.563 363.841 438.949C363.519 429.27 363.41 424.915 363.41 419.5C363.41 418.395 362.515 417.5 361.41 417.5C360.306 417.5 359.41 418.395 359.41 419.5ZM194.744 425.385C194.036 431.358 193.71 437.308 193.429 447.038C193.404 447.897 193.386 448.538 193.342 450.15C193.181 455.997 193.095 458.635 192.943 461.825C192.775 465.352 192.812 472.645 193 483.575C193.036 485.679 193.077 487.888 193.126 490.397C193.148 491.511 193.2 494.093 193.243 496.231L193.244 496.242L193.244 496.269L193.245 496.305C193.274 497.747 193.299 498.975 193.307 499.392C193.337 500.903 193.36 502.131 193.377 503.139C191.32 502.107 189.996 500.993 188.862 499.41C186.338 495.889 185.393 490.101 186.281 480.79C186.386 479.69 185.58 478.714 184.48 478.609C183.381 478.504 182.404 479.311 182.299 480.41C181.328 490.593 182.421 497.291 185.611 501.741C188.194 505.345 191.278 506.999 197.797 509.147C197.892 509.178 198.135 509.258 198.42 509.351L198.461 509.365L198.472 509.368C198.921 509.515 199.451 509.689 199.663 509.759C200.663 510.086 201.7 510.426 202.898 510.82L203.267 510.942L203.295 510.951C204.585 511.376 208.627 512.708 209.934 513.137C212.611 514.015 214.826 514.734 216.951 515.413C233.001 520.536 244.826 523.542 257.246 525.261C291.175 529.975 326.569 524.074 359.125 508.913C365.33 506.028 367.798 504.535 370.275 501.549C373.448 497.724 374.98 492.42 374.98 484.67C374.98 483.565 374.085 482.67 372.98 482.67C371.876 482.67 370.98 483.565 370.98 484.67C370.98 491.56 369.706 495.97 367.196 498.996C365.23 501.366 363.105 502.651 357.437 505.286C354.174 506.806 350.883 508.23 347.567 509.558C347.957 505.352 348.029 500.434 347.869 494.255C347.81 492.011 347.735 489.933 347.593 486.434C347.408 481.878 347.374 481 347.319 479.141C347.287 478.037 346.366 477.168 345.261 477.201C344.157 477.233 343.289 478.155 343.321 479.259C343.377 481.139 343.411 482.021 343.596 486.596C343.738 490.077 343.812 492.14 343.87 494.359C344.05 501.303 343.931 506.581 343.395 510.957C343.386 511.032 343.381 511.106 343.38 511.179C327.422 517.144 310.954 520.888 294.47 522.257V457.03C294.47 455.925 293.575 455.03 292.47 455.03C291.366 455.03 290.47 455.925 290.47 457.03V522.543C279.519 523.197 268.579 522.797 257.796 521.299C255.458 520.975 253.14 520.605 250.807 520.181C250.809 520.144 250.81 520.107 250.81 520.07V504.52C250.81 503.415 249.915 502.52 248.81 502.52C247.706 502.52 246.81 503.415 246.81 504.52V519.406C243.518 518.728 240.161 517.941 236.647 517.027C236.827 516.727 236.93 516.376 236.93 516C236.93 506.093 236.958 500.746 237.083 494.323C237.268 484.861 237.637 477.283 238.248 471.833C238.371 470.735 237.581 469.745 236.483 469.622C235.385 469.499 234.396 470.29 234.273 471.387C233.645 476.988 233.271 484.67 233.084 494.245C232.958 500.702 232.93 506.068 232.93 516L232.931 516.031C228.368 514.773 223.508 513.307 218.168 511.602C216.054 510.927 213.849 510.211 211.181 509.336C209.864 508.904 205.76 507.552 204.51 507.14L204.148 507.021C202.948 506.626 201.908 506.285 200.912 505.959C200.698 505.888 200.162 505.713 199.713 505.566L199.71 505.565C199.408 505.466 199.146 505.38 199.048 505.347C198.467 505.156 197.92 504.97 197.402 504.788C197.386 503.543 197.355 501.813 197.306 499.313C197.298 498.891 197.273 497.638 197.243 496.174L197.242 496.148L197.242 496.141L197.242 496.134L197.242 496.112C197.199 493.982 197.147 491.424 197.126 490.318C197.076 487.812 197.035 485.607 196.999 483.506C196.813 472.68 196.776 465.419 196.938 462.015C197.092 458.79 197.178 456.134 197.34 450.26C197.385 448.65 197.403 448.01 197.427 447.153C197.705 437.535 198.026 431.679 198.716 425.855C198.846 424.758 198.063 423.764 196.966 423.634C195.869 423.504 194.874 424.288 194.744 425.385ZM205.492 456.619C205.603 446.057 205.896 437.382 206.456 429.901C206.538 428.799 207.498 427.973 208.6 428.056C209.701 428.138 210.527 429.098 210.445 430.199C209.892 437.581 209.602 446.177 209.492 456.661C209.433 462.23 209.426 466.814 209.443 476.363C209.449 479.881 209.45 481.255 209.45 483.05C209.45 484.155 208.555 485.05 207.45 485.05C206.346 485.05 205.45 484.155 205.45 483.05C205.45 481.258 205.449 479.886 205.443 476.369C205.426 466.805 205.433 462.209 205.492 456.619ZM348.95 453.197C349.106 439.626 349.019 432.32 348.426 424.216C348.345 423.115 349.173 422.156 350.274 422.075C351.376 421.995 352.334 422.822 352.415 423.924C353.019 432.173 353.107 439.564 352.95 453.243C352.938 454.347 352.032 455.232 350.927 455.22C349.823 455.207 348.938 454.302 348.95 453.197Z" fill="#0D323F"/></g></g></g><g id="Show/Item" transform="scale(1 1)"><g id="Show/Item/Lightbulb"><g id="items"><path id="Path" d="M293.387 248.954C295.337 255.712 300.501 260.609 306.903 260.052C313.162 259.511 318.451 253.476 318.379 247.037C318.367 245.933 317.461 245.047 316.357 245.06C315.252 245.072 314.367 245.977 314.379 247.082C314.428 251.457 310.703 255.709 306.557 256.067C302.368 256.432 298.706 252.958 297.231 247.845C296.925 246.784 295.816 246.172 294.755 246.478C293.693 246.784 293.081 247.893 293.387 248.954Z" fill="#80AAB1"/><path id="Path_2" d="M312.858 203.77H287C285.962 203.77 285.096 204.565 285.008 205.599C283.994 217.415 284.406 229.311 286.234 241.028C287.347 247.704 293.81 250.107 301.688 248.959C303.42 248.709 304.806 248.598 307.993 248.41C313.71 248.074 316.291 247.748 319.541 246.668C323.446 245.368 325.803 242.738 326.878 238.961C327.644 236.265 327.745 233.701 327.559 228.587C327.44 225.227 327.418 221.043 327.46 215.144C327.469 213.823 327.48 212.596 327.5 210.519C327.548 205.537 327.56 203.938 327.56 201.81C327.56 200.455 326.242 199.493 324.951 199.905L312.858 203.77Z" fill="#80AAB1"/><path id="Path_3" d="M324.508 209.291C317.355 209.475 308.947 212.36 301.463 217.268C294.189 222.038 288.931 226.879 286.169 231.252C285.579 232.186 285.858 233.421 286.791 234.011C287.725 234.601 288.961 234.322 289.551 233.388C291.964 229.567 296.82 225.096 303.656 220.613C310.546 216.094 318.243 213.453 324.611 213.289C325.715 213.261 326.587 212.343 326.559 211.239C326.531 210.134 325.612 209.262 324.508 209.291Z" fill="#5F8083"/><path id="Path_4" d="M291.391 244.985C296.277 236.353 314.289 225.757 325.818 223.842C326.908 223.661 327.645 222.631 327.464 221.542C327.283 220.452 326.253 219.716 325.163 219.896C312.533 221.994 293.456 233.216 287.91 243.014C287.366 243.976 287.704 245.196 288.666 245.74C289.627 246.284 290.847 245.946 291.391 244.985Z" fill="#5F8083"/><path id="Path_5" d="M302.445 247.285C306.945 241.331 317.753 235.178 325.942 233.278C327.018 233.028 327.688 231.953 327.438 230.877C327.188 229.801 326.114 229.132 325.038 229.381C316.001 231.479 304.375 238.097 299.254 244.874C298.588 245.755 298.763 247.009 299.644 247.675C300.525 248.341 301.779 248.167 302.445 247.285Z" fill="#5F8083"/><path id="Path_6" d="M295.745 210.471C292.195 212.196 286.857 217.36 284.847 220.62C284.267 221.56 284.559 222.793 285.499 223.372C286.44 223.952 287.672 223.66 288.251 222.72C289.884 220.072 294.673 215.439 297.493 214.069C298.487 213.586 298.901 212.389 298.418 211.396C297.935 210.402 296.739 209.988 295.745 210.471Z" fill="#5F8083"/><path id="Path_7" fill-rule="evenodd" clip-rule="evenodd" d="M250.557 103.474C236.476 122.212 233.805 154.344 244.359 176.238C252.169 192.415 266.339 202.762 283.454 206.112C303.236 210.021 330.299 205.229 344.727 194.167C360.724 181.928 370.127 163.952 370.31 144.549C370.516 123.081 358.959 99.5317 342.04 89.2314C314.515 72.4016 269.057 78.6801 250.557 103.474ZM284.228 202.188L284.224 202.187C268.308 199.072 255.206 189.505 247.961 174.5C238.049 153.934 240.586 123.401 253.759 105.871C270.969 82.8068 314.118 76.8472 339.957 92.646C355.603 102.172 366.504 124.382 366.31 144.511C366.139 162.654 357.336 179.484 342.295 190.991C328.847 201.303 302.949 205.888 284.228 202.188Z" fill="#FCD400"/><path id="Path_8" fill-rule="evenodd" clip-rule="evenodd" d="M265.897 139.068C270.992 135.79 276.688 137.006 281.971 141.433C285.693 144.551 289.049 149.215 290.81 153.36C293.893 151.738 296.647 149.525 298.684 146.88C294.139 141.062 292.093 132.672 296.171 127.538C298.34 124.799 302.721 123.297 305.745 125.207C308.717 127.077 308.963 130.984 307.639 136.265C306.833 139.482 305.417 143.111 304.223 145.534C304.066 145.853 303.901 146.168 303.727 146.479C304.387 147.096 305.084 147.639 305.805 148.087C308.742 149.936 313.678 151.051 318.808 151.092C320.916 144.997 323.932 140.7 328.542 138.115C331.193 136.631 334.554 135.651 337.034 135.883C340.98 136.254 342.57 139.439 340.88 144.102C338.673 150.185 332.188 153.82 323.706 154.826C323.067 154.902 322.424 154.961 321.779 155.004C321.591 155.676 321.412 156.37 321.239 157.088C320.679 159.421 320.55 160.105 319.558 165.662C319.111 168.162 318.787 170.801 318.539 173.803C318.347 176.124 318.24 177.948 318.025 182.204C317.758 187.477 317.605 189.87 317.299 192.798C317.184 193.896 316.2 194.694 315.101 194.579C314.003 194.464 313.205 193.48 313.32 192.382C313.617 189.549 313.767 187.203 314.03 182.002C314.247 177.703 314.356 175.851 314.553 173.473C314.811 170.354 315.149 167.593 315.621 164.958C316.63 159.304 316.763 158.599 317.35 156.155C317.438 155.787 317.528 155.425 317.62 155.068C312.21 154.871 307.054 153.599 303.685 151.479C302.915 151.001 302.168 150.444 301.455 149.822C298.995 152.846 295.764 155.349 292.174 157.158C294.391 163.891 295.917 170.837 296.728 177.899C296.909 179.604 297.068 181.919 297.209 184.701C297.316 186.821 297.406 189.088 297.481 191.356C297.507 192.149 297.529 192.886 297.547 193.547C297.558 193.945 297.565 194.229 297.569 194.382C297.595 195.486 296.721 196.403 295.617 196.429C294.513 196.455 293.596 195.582 293.57 194.477C293.566 194.329 293.559 194.05 293.548 193.658C293.53 193.003 293.509 192.273 293.483 191.487C293.409 189.241 293.32 186.996 293.214 184.904C293.076 182.188 292.921 179.937 292.753 178.338C291.987 171.673 290.555 165.105 288.479 158.729C281.953 161.017 274.765 161.065 269.031 157.98C261.629 153.993 258.583 143.777 265.897 139.068ZM336.66 139.866C335.113 139.721 332.501 140.482 330.498 141.604C327.26 143.42 324.922 146.469 323.164 150.862L323.235 150.854C330.375 150.007 335.531 147.117 337.119 142.738C337.979 140.366 337.782 139.971 336.66 139.866ZM299.305 130.024C300.34 128.716 302.59 127.945 303.611 128.591C305.528 129.797 303.761 137.153 300.942 143.129C298.065 138.721 296.862 133.099 299.305 130.024ZM266.001 148.397C266.73 150.842 268.714 153.266 270.927 154.458C275.604 156.974 281.627 156.888 287.143 154.957C285.634 151.387 282.645 147.216 279.402 144.499C275.325 141.083 271.446 140.254 268.062 142.431C265.881 143.836 265.254 145.892 266.001 148.397Z" fill="#FCD400"/><path id="Path_9" d="M180.299 157.689L192.159 157.399C193.263 157.372 194.136 156.455 194.109 155.351C194.082 154.246 193.165 153.373 192.061 153.4L180.201 153.69C179.097 153.717 178.224 154.634 178.251 155.738C178.278 156.843 179.195 157.716 180.299 157.689Z" fill="#FCD400"/><path id="Path_10" d="M195.62 68.1512L202.21 73.8612C203.045 74.5845 204.308 74.4942 205.031 73.6594C205.755 72.8246 205.664 71.5615 204.829 70.8382L198.239 65.1282C197.405 64.4048 196.142 64.4952 195.418 65.33C194.695 66.1648 194.785 67.4279 195.62 68.1512Z" fill="#FCD400"/><path id="Path_11" d="M363.718 33.2804L357.568 46.0204C357.088 47.0151 357.505 48.2108 358.5 48.691C359.495 49.1712 360.691 48.7541 361.171 47.7593L367.321 35.0193C367.801 34.0246 367.384 32.8289 366.389 32.3488C365.394 31.8686 364.199 32.2857 363.718 33.2804Z" fill="#FCD400"/><path id="Path_12" d="M396.02 49.176L382.85 57.956C381.931 58.5687 381.682 59.8104 382.295 60.7295C382.908 61.6485 384.15 61.8969 385.069 61.2842L398.239 52.5042C399.158 51.8915 399.406 50.6497 398.793 49.7307C398.181 48.8116 396.939 48.5633 396.02 49.176Z" fill="#FCD400"/><path id="Path_13" d="M403.724 178.595L418.134 182.045C419.208 182.302 420.288 181.64 420.545 180.566C420.802 179.491 420.14 178.412 419.066 178.155L404.656 174.705C403.581 174.448 402.502 175.11 402.245 176.184C401.988 177.258 402.65 178.338 403.724 178.595Z" fill="#FCD400"/></g></g></g></g></g></g></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/assets/phoneStats.svg b/app/WhereIsThePower/src/assets/phoneStats.svg new file mode 100644 index 00000000..544dc12c --- /dev/null +++ b/app/WhereIsThePower/src/assets/phoneStats.svg @@ -0,0 +1 @@ +<svg viewBox="0 0 599.9999999999999 599.9999999999999" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" overflow="visible" width="599.9999999999999px" height="599.9999999999999px"><g id="Master/Spot Illustrations/Phone"><g id="Background" style="mix-blend-mode:soft-light" transform="scale(1 1)"><g id="Background/PieChart"><path id="Path" d="M282.34 215.68C282.12 222.11 281.88 228.76 281.73 235.26C281.57 242.12 283.61 254.35 285.34 263.41V263.41C286.93 271.708 293.336 278.244 301.6 280C314.6 282.77 332.95 286.6 346.23 289.17C359.74 291.77 373.46 294.52 386.72 297.17C415.72 303 445.8 309.03 475.59 313.88C479.93 314.58 484.48 315.43 488.87 316.25C500.01 318.33 511.54 320.47 522.54 320.92C523.54 320.92 524.67 321.04 525.88 321.13C528.12 321.28 530.62 321.46 533.14 321.46C538.64 321.46 544.25 320.63 547.5 316.97C551.79 312.13 552.66 301.68 553.36 293.28C553.51 291.46 553.66 289.73 553.82 288.33C556.01 269.73 555.27 253.11 551.37 232.73C550.43 227.84 549.65 222.81 548.9 217.94C547.38 208.11 545.8 197.94 542.82 188.14C536.82 168.43 527.45 153.45 514.29 135.67C487.29 99.2204 455.07 79.3504 414.95 60.6704C386.99 47.6372 356.538 40.8141 325.69 40.6704H325.13C322.43 40.6704 319.41 40.4404 316.18 40.1904C303.03 39.1904 286.64 37.9004 282.18 52.7304C280 60.2304 280.14 69.2604 280.29 78.0004C280.36 82.4504 280.42 86.6604 280.17 90.4304C279.4 102.03 281.8 148.98 282.52 160.55C283.65 178.76 283 197.53 282.34 215.68Z" fill="#EAF3F3"/><path id="Path_2" d="M559.88 379C558.302 375.585 555.42 372.945 551.88 371.67C545.599 369.255 539.144 367.32 532.57 365.88C512.57 362.04 492.38 357.67 471.73 353.15C460.41 350.68 448.81 348.53 437.6 346.45C425.14 344.14 412.27 341.75 399.77 338.91C389.16 336.51 350.15 323 327.83 315.16C324.689 314.099 321.226 315.282 319.391 318.043C317.555 320.804 317.805 324.455 320 326.94C339.78 349.02 351.66 362.4 353.44 364.61C365.44 379.53 401.07 421.96 420.19 444.75L428.24 454.34C432.49 459.42 437.24 464.73 441.87 469.87C449.73 478.62 457.87 487.68 464.38 496.54C468.88 502.65 472.79 505.54 477.07 506.01C477.429 506.047 477.789 506.063 478.15 506.06C481.63 506.06 485.23 504.36 489.1 500.88C507.17 484.64 527.64 464.11 542.49 435.01C546.44 427.25 555.38 403.35 560.35 389.8C561.646 386.282 561.476 382.392 559.88 379Z" fill="#EAF3F3"/><path id="Path_3" d="M363.11 431.51L361.11 429.21C339.81 404.57 317.78 379.1 295.27 354.82L292.05 351.36C276.84 335 256 312.63 255.8 298.94C255.65 288.86 255.46 276.94 255.24 263.87C254.18 199.24 252.74 110.74 254.65 78.5995C254.874 74.9199 253.539 71.316 250.973 68.6696C248.406 66.0233 244.845 64.5788 241.16 64.6895C233.24 64.9195 222.41 65.4695 215.75 66.7695C207.83 68.3095 169.75 79.0595 141.61 99.8795C123.29 113.44 108.55 127.6 92.0401 144.68C77.3901 159.84 64.1201 181.81 57.5001 193.55C50.6501 205.73 33.1901 258.6 32.2901 275.28C30.7001 304.65 29.8601 338.72 40.0001 371.38C50.5601 405.38 70.0901 436.15 99.7101 465.48C136.24 501.65 173.98 522.71 218.49 531.74C237.961 535.624 257.673 538.18 277.49 539.39C279.63 539.523 281.83 539.59 284.09 539.59C300.29 539.59 319.33 536.26 340.82 529.68C357.651 524.38 373.828 517.191 389.04 508.25C392.71 506.1 398.21 501.77 405.39 495.39C407.838 493.228 409.3 490.163 409.437 486.9C409.575 483.637 408.377 480.459 406.12 478.1C394.81 466.19 374.17 444.29 363.11 431.51Z" fill="#EAF3F3"/></g></g><g id="Master/Hands/Phone" transform="scale(1 1)"><g id="Master/Hands/Phone"><g id="base"><path id="Path" d="M368.288 207.312C368.424 206.623 368.912 206.056 369.572 205.818C374.555 204.024 379.652 202.566 384.801 201.461C385.047 201.405 385.299 201.345 385.628 201.268C389.87 200.265 391.334 200.013 393.49 200.147C396.535 200.336 399.091 201.64 401.246 204.303C404.338 208.131 406.387 213.221 407.429 218.919C408.028 222.281 407.383 227.079 405.682 229.8C403.78 232.886 400.687 235.625 396.22 238.611C395.422 239.144 394.59 239.68 393.628 240.282C393.252 240.519 392.867 240.758 392.389 241.053C392.22 241.158 391.426 241.648 391.212 241.781C389.427 242.884 387.923 243.887 384.966 245.911C384.643 246.133 384.643 246.133 384.319 246.355C379.831 249.427 377.464 250.948 374.52 252.531C369.82 254.931 365.373 257.796 361.246 261.084C359.789 262.245 357.677 260.959 358.038 259.132L368.288 207.312Z" fill="#fcb7a0"/><path id="Path" d="M381.172 325.75C394.319 323.467 418.826 315.922 423.539 311.039C428.146 306.326 429.856 299.871 429.788 291.105C429.768 288.596 429.636 286.352 429.323 282.413L429.224 281.162C428.468 272.875 426.899 264.706 424.537 256.751C421.797 247.129 417.531 244.934 405.752 245.573C393.563 246.376 381.472 248.061 369.551 250.614C368.516 250.836 367.833 251.825 367.993 252.871L378.853 324.081C379.022 325.189 380.068 325.942 381.172 325.75Z" fill="#fcb7a0"/><path id="Path" d="M424.568 278.197C421.538 278.598 418.031 279.02 413.841 279.494C410.734 279.846 407.577 280.191 402.751 280.71C389.277 282.158 386.564 282.457 381.536 283.075C380.44 283.21 379.66 284.208 379.795 285.304C379.93 286.4 380.928 287.18 382.024 287.045C387.022 286.431 389.732 286.133 403.179 284.687C408.012 284.167 411.175 283.822 414.291 283.469C418.504 282.992 422.034 282.567 425.092 282.163C426.187 282.018 426.957 281.013 426.813 279.918C426.668 278.823 425.663 278.053 424.568 278.197Z" fill="#dc8173"/><path id="Path" d="M353.648 301.286C346.272 292.094 338.898 285.361 331.189 281.374C320.379 275.77 307.952 272.16 296.514 271.744C282.869 271.247 271.213 275.223 262.893 284.201C261.074 286.168 259.623 288.641 258.254 291.963L252.462 273.122C252.042 271.756 250.366 271.259 249.268 272.175C245.438 275.372 239.9 283.143 233.02 294.383C228.391 301.947 223.98 309.696 219.526 317.818C218.385 319.904 217.212 322.237 216.004 324.813C213.032 331.152 209.91 338.816 206.468 348.037C204.835 352.415 203.191 356.972 201.25 362.467C200.447 364.739 197.44 373.316 196.755 375.253C187.139 402.428 181.36 432.211 174.948 479.511C173.69 488.804 172.668 502.602 171.852 519.734C171.302 531.279 170.878 568.645 170.565 581.01C170.455 585.338 170.367 589.356 170.299 592.963C170.275 594.226 170.255 595.347 170.239 596.313C170.233 596.652 170.23 596.849 170.225 597.197C170.221 597.449 170.221 597.449 170.22 597.502C170.204 598.616 171.103 599.529 172.218 599.53L331.148 599.7C332.253 599.701 333.15 598.805 333.15 597.7C333.15 555.141 335.414 474.746 339.426 455.947C342.645 440.902 348.527 422.444 355.166 405.905C358.282 398.125 361.992 389.707 366.99 378.895C368.49 378.663 369.98 378.369 371.457 378.015C378.578 376.258 380.672 375.708 384.336 374.522C398.537 369.926 407.062 363.4 408.58 352.824C409.816 344.226 405.878 332.63 399.754 326.757C395.364 322.549 389.265 321.45 381.163 322.409C378.747 322.695 376.393 323.116 372.985 323.825C372.471 323.932 370.766 324.291 370.525 324.341C370.183 324.412 369.872 324.477 369.583 324.536C363.363 314.466 358.908 307.843 353.648 301.286Z" fill="#fcb7a0"/><path id="Path" d="M356.092 341.941C343.885 343.215 336.841 353.196 340.391 364.528C340.42 364.62 341.697 369.032 342.183 370.5C343.505 374.495 344.896 377.231 346.827 378.866C352.135 383.368 357.326 384.233 364.598 382.442C365.671 382.178 366.326 381.094 366.062 380.022C365.798 378.949 364.714 378.294 363.642 378.558C357.535 380.062 353.659 379.416 349.414 375.815C348.214 374.799 347.083 372.574 345.98 369.243C345.523 367.862 344.261 363.5 344.21 363.337C341.434 354.475 346.753 346.938 356.508 345.919C357.606 345.805 358.404 344.821 358.289 343.722C358.174 342.624 357.191 341.826 356.092 341.941Z" fill="#dc8173"/><path id="Path" d="M346.232 347.779L346.226 347.78C335.901 349.591 305.761 351.109 292.347 350.81C290.976 350.78 289.592 350.765 287.616 350.753C287.279 350.751 287.01 350.749 286.402 350.746C273.274 350.675 267.708 350.208 261.593 347.923C253.302 344.826 247.959 338.655 245.649 328.451C243.176 317.519 241.409 305.742 239.815 290.84C239.22 285.282 238.911 282.057 237.833 270.474C237.613 268.105 237.457 266.436 237.299 264.779C235.893 249.948 234.624 233.573 232.805 207.838C232.977 210.276 231.089 183.38 230.584 176.379C229.882 166.63 229.28 158.66 228.696 151.48C227.245 133.393 227.03 115.304 229.448 108.052C232.391 98.9974 240.305 92.4622 249.703 91.2921C273.593 87.7087 303.616 84.9989 319.542 85.3305C320.967 85.3603 322.227 85.3731 324.962 85.3913C333.027 85.445 336.784 85.5413 341.533 85.9304C356.575 87.1629 367.079 91.0208 373.118 99.3142C376.41 103.844 378.357 110.386 379.574 119.204C379.879 121.412 380.133 123.719 380.38 126.395C380.474 127.421 380.564 128.453 380.675 129.79C380.655 129.544 380.88 132.265 380.939 132.958C381.013 133.825 381.078 134.547 381.142 135.217C381.19 135.75 381.19 135.75 381.239 136.282C383.248 158.238 383.307 158.871 384.137 167.073C384.703 172.66 385.261 177.828 385.836 182.765C391.064 226.993 394.198 264.3 395.369 300.485C395.903 316.815 393.467 327.92 384.999 335.191C380.981 338.622 374.438 341.374 365.855 343.69C362.321 344.644 358.59 345.483 354.542 346.272C353.019 346.568 351.521 346.845 349.827 347.146C349.132 347.269 346.723 347.691 346.232 347.779Z" fill="#1A4E66"/><path id="Path_2" d="M341.79 339.43C329.934 340.746 318.008 341.327 306.08 341.17C288.67 340.79 274.02 343.11 269.29 322.22C265.08 303.62 263.53 279.53 261.72 260.47C258.78 229.47 256.42 186.47 253.89 155.31C253.21 146.91 251.24 118.04 254.49 110.47C257.74 102.9 265.71 100.55 271.44 99.47C285.21 96.81 301.99 94.74 317.74 95.07C332.07 95.37 355.51 93.88 365.07 107.07C370.69 114.81 371.16 133.71 372.07 142.86C373.43 157.09 374.7 171.76 376.41 186.2C380.61 221.74 383.91 262.2 385.08 298.2C385.41 308.2 384.78 321.06 376.27 328.36C368.32 335.15 348.66 338.59 341.79 339.43Z" fill="white"/><path id="Path_3" d="M246.788 97.3375C241.89 100.613 240.316 108.96 240.539 122.137C240.595 125.481 240.755 128.785 241.048 133.377C241.089 134.028 241.265 136.733 241.308 137.406C241.399 138.842 241.46 139.907 241.502 140.841C241.896 149.385 242.493 159.296 243.404 172.968C243.532 174.893 243.668 176.907 243.823 179.198C243.925 180.707 244.534 189.678 244.704 192.198C245.032 197.052 245.283 200.858 245.504 204.337C247.562 237.069 250.673 271.987 254.841 310.674C255.984 321.364 258.372 331.377 261.982 338.377C262.489 339.358 263.695 339.744 264.677 339.237C265.658 338.731 266.044 337.525 265.537 336.543C262.198 330.068 259.913 320.49 258.819 310.247C254.656 271.613 251.55 236.753 249.496 204.084C249.274 200.598 249.023 196.788 248.695 191.929C248.525 189.407 247.916 180.436 247.814 178.928C247.659 176.638 247.523 174.625 247.395 172.702C246.486 159.055 245.891 149.167 245.498 140.658C245.454 139.697 245.392 138.611 245.3 137.154C245.257 136.476 245.081 133.769 245.04 133.123C244.751 128.588 244.593 125.337 244.538 122.07C244.341 110.358 245.758 102.838 249.012 100.662C249.93 100.048 250.176 98.8063 249.562 97.8881C248.948 96.97 247.706 96.7234 246.788 97.3375Z" fill="#0D323F"/><path id="Path" d="M221.233 381.359C219.718 381.324 218.792 379.682 219.544 378.367C222.139 373.83 225.092 369.029 228.751 363.336C230.254 360.998 231.813 358.606 233.886 355.447C234.548 354.439 236.975 350.746 236.782 351.04C237.942 349.275 238.806 347.956 239.645 346.672C241.786 343.392 243.535 340.673 245.146 338.107C257.681 318.14 270.731 302.213 284.8 291.243C292.858 284.961 302.414 286.579 308.462 295.134C311.631 299.608 311.778 304.679 309.673 310.715C308.846 313.088 307.829 315.292 306.026 318.831C303.698 323.398 303.705 323.385 303.041 324.895C300.63 330.382 299.081 339.831 298.739 348.636C298.596 352.398 299.034 356.686 299.989 361.567C300.73 365.354 301.73 369.29 303.134 374.167C303.427 375.187 303.731 376.224 304.115 377.522C304.216 377.863 304.874 380.08 305.058 380.704C305.442 382.004 304.449 383.301 303.093 383.269L221.233 381.359Z" fill="#fcb7a0"/><path id="Path_4" d="M238.205 166.394C237.823 160.794 237.536 155.239 237.349 149.781C237.311 148.677 236.385 147.813 235.281 147.851C234.178 147.889 233.313 148.815 233.351 149.919C233.54 155.422 233.83 161.022 234.215 166.666C234.29 167.768 235.244 168.601 236.346 168.525C237.448 168.45 238.281 167.496 238.205 166.394Z" fill="#0D323F"/><path id="Path_5" d="M240.232 193.936C239.736 188.584 239.351 182.902 239.058 176.814C239.005 175.711 238.067 174.859 236.964 174.912C235.861 174.965 235.009 175.903 235.062 177.006C235.358 183.15 235.748 188.89 236.249 194.304C236.35 195.404 237.324 196.213 238.424 196.111C239.524 196.01 240.333 195.036 240.232 193.936Z" fill="#0D323F"/><path id="Path" d="M298.299 352.78C298.953 359.636 300.571 365.016 303.81 372.79C303.989 373.218 304.17 373.649 304.415 374.231C304.565 374.587 304.565 374.587 304.714 374.94C304.862 375.293 304.922 375.436 305.009 375.643C305.48 376.764 305.822 377.59 306.144 378.394C306.554 379.419 307.718 379.917 308.744 379.507C309.769 379.096 310.267 377.932 309.857 376.906C309.525 376.078 309.176 375.234 308.697 374.093C308.609 373.885 308.549 373.741 308.4 373.387C308.251 373.033 308.251 373.033 308.101 372.678C307.858 372.101 307.679 371.674 307.503 371.252C304.404 363.815 302.89 358.779 302.281 352.4C302.176 351.3 301.2 350.494 300.1 350.599C299.001 350.704 298.194 351.68 298.299 352.78Z" fill="#dc8173"/><path id="Path" d="M221.306 375.423C223.847 370.981 226.748 366.264 230.348 360.664C231.847 358.332 233.403 355.944 235.477 352.786C236.14 351.777 238.56 348.096 238.385 348.363C239.55 346.59 240.421 345.262 241.265 343.968C243.426 340.659 245.194 337.911 246.824 335.313C247.411 334.378 247.129 333.143 246.193 332.556C245.258 331.969 244.023 332.251 243.436 333.187C241.82 335.761 240.065 338.491 237.916 341.782C237.074 343.071 236.206 344.396 235.042 346.166C235.218 345.898 232.797 349.58 232.133 350.591C230.053 353.758 228.49 356.157 226.983 358.501C223.349 364.154 220.414 368.927 217.834 373.437C217.286 374.396 217.618 375.618 218.577 376.166C219.536 376.715 220.758 376.382 221.306 375.423Z" fill="#dc8173"/><path id="Path" d="M304.373 433.869C306.422 434.339 308.428 434.975 310.373 435.771C311.395 436.189 312.563 435.7 312.981 434.678C313.4 433.656 312.91 432.488 311.888 432.069C309.742 431.19 307.528 430.489 305.267 429.971C304.19 429.724 303.118 430.397 302.871 431.473C302.624 432.55 303.297 433.623 304.373 433.869Z" fill="#dc8173"/></g><g id="Phone/Wear" transform="scale(1 1)"><g id="Phone/Wear/Hoodie 1"><g id="clothing"><path id="Path" d="M412.22 561.92C408.415 554.308 400.961 549.19 392.49 548.37C388.333 547.958 384.155 548.924 380.6 551.12C382.46 540.45 378.6 528.12 371 523.55C363.13 518.86 354.24 515.2 342.45 519.44C342.45 514.33 342.35 503.83 342.45 498.72C342.55 493.61 342.55 488.72 342.55 483.83C342.55 477.92 342.55 471.83 342.73 465.76C342.754 465.063 342.413 464.403 341.83 464.02C341.237 463.619 340.474 463.565 339.83 463.88C319.03 473.72 289.28 477.01 260.24 472.67C249.13 471 238 468 227.17 465.07C221.4 463.52 215.44 461.91 209.51 460.51C200.38 458.36 190.51 454.71 178.29 449.04C177.749 448.784 177.122 448.784 176.58 449.04C176.043 449.301 175.651 449.789 175.51 450.37C173.9 456.88 169.51 476.19 168.64 483.12C168.51 484.12 168.29 485.77 168.01 487.78C166.62 497.92 165.35 507.87 164.73 516C155.64 514.75 146.35 518.09 138.45 525.54C132.45 531.2 128.09 538.62 126.84 544.83C124.367 542.519 121.207 541.079 117.84 540.73C113.59 540.43 109.42 542.26 105.46 546.16C96.7004 554.78 93.2704 572.73 98.1204 584.56C101.12 591.88 106.87 599.99 114.31 599.99H387.31C401.22 599.99 407.95 589.89 411.15 584.83C415.31 577.851 415.711 569.256 412.22 561.92Z" fill="#2AC28B"/><path id="Combined Shape" fill-rule="evenodd" clip-rule="evenodd" d="M185.041 454.689C179.759 480.502 176.285 502.075 176.001 515.929C175.978 517.033 176.855 517.947 177.959 517.97C179.063 517.993 179.977 517.116 180 516.011C180.278 502.486 183.728 481.058 188.96 455.491C189.181 454.409 188.483 453.352 187.401 453.131C186.319 452.909 185.262 453.607 185.041 454.689ZM224.95 544.307C225.38 531.912 226.972 517.05 229.087 509.087C229.371 508.019 230.466 507.384 231.533 507.667C232.601 507.951 233.237 509.046 232.953 510.114C230.905 517.828 229.325 532.731 228.931 544.948C230.608 545.203 232.275 545.44 233.933 545.659L234.069 543.58L234.069 543.572C234.282 540.313 234.605 535.377 234.739 533.406C235.108 527.998 235.454 523.448 235.839 519.09C236.868 507.462 238.117 498.05 239.786 490.394C240.021 489.315 241.087 488.631 242.166 488.866C243.245 489.101 243.929 490.167 243.694 491.246C242.068 498.706 240.838 507.968 239.824 519.442C239.441 523.77 239.097 528.295 238.73 533.678C238.596 535.643 238.274 540.573 238.061 543.833L238.061 543.838L238.059 543.859L238.05 543.993L237.909 546.153C253.627 547.974 268.492 548.141 282.53 546.483C282.515 540.037 282.89 534.759 284.018 522.825C284.17 521.221 284.242 520.45 284.328 519.53C284.949 512.823 285.278 508.307 285.421 503.787C285.456 502.683 286.379 501.816 287.483 501.851C288.587 501.886 289.454 502.809 289.419 503.913C289.273 508.533 288.939 513.117 288.311 519.899C288.225 520.822 288.152 521.595 288 523.202C286.916 534.68 286.536 539.908 286.529 545.958C289.46 545.534 292.354 545.028 295.211 544.438C297.278 536.064 298.088 527.427 297.613 518.81C297.552 517.707 298.397 516.764 299.5 516.703C300.603 516.643 301.546 517.487 301.607 518.59C302.067 526.945 301.373 535.317 299.548 543.472C303.904 542.428 308.173 541.183 312.356 539.73C321.689 536.665 330.668 532.615 339.142 527.65C339.239 525.04 339.486 522.438 339.883 519.856C340.051 518.764 341.073 518.015 342.164 518.184C343.256 518.352 344.005 519.373 343.837 520.464C343.41 523.241 343.167 526.042 343.11 528.851C343.096 529.541 342.727 530.174 342.135 530.528C333.132 535.899 323.564 540.259 313.636 543.52C308.523 545.296 303.288 546.769 297.93 547.951C297.509 548.239 296.981 548.365 296.448 548.269C274.95 552.776 251.488 552.638 225.982 548.535C212.347 546.337 199.434 542.33 180.247 534.989C179.652 534.762 179.036 534.534 178.253 534.251C178.166 534.22 177.934 534.136 177.654 534.035L177.623 534.024C177.131 533.847 176.504 533.621 176.261 533.533C171.525 531.815 169.074 530.621 167.005 528.662C164.257 526.06 163.131 522.57 163.716 517.94C163.854 516.844 164.855 516.068 165.951 516.206C167.047 516.344 167.823 517.345 167.684 518.441C166.915 524.533 169.232 526.728 177.625 529.773C177.863 529.859 178.48 530.082 178.972 530.258C179.269 530.365 179.52 530.456 179.613 530.489C180.417 530.78 181.054 531.015 181.675 531.252C186.902 533.252 191.652 535 196.071 536.528C196.832 524.992 199.262 509.831 203.017 490.44C203.227 489.356 204.276 488.647 205.36 488.857C206.445 489.067 207.154 490.116 206.944 491.2C203.102 511.037 200.658 526.427 199.996 537.856C209.183 540.89 217.009 542.931 224.95 544.307ZM185.867 509.341C188.247 491.128 191.224 473.046 194.404 458.104C194.634 457.024 195.696 456.334 196.776 456.564C197.857 456.794 198.546 457.856 198.316 458.937C195.161 473.764 192.201 491.745 189.833 509.859C189.69 510.955 188.686 511.727 187.591 511.583C186.496 511.44 185.724 510.436 185.867 509.341ZM259.432 494.508C260.132 486.989 260.841 481.322 261.844 475.916C262.045 474.83 263.089 474.112 264.175 474.314C265.261 474.515 265.978 475.559 265.777 476.645C264.8 481.911 264.104 487.469 263.415 494.879C263.23 496.868 263.113 498.202 262.773 502.146C262.215 508.643 261.92 511.79 261.497 515.45C261.37 516.547 260.378 517.334 259.28 517.207C258.183 517.08 257.396 516.088 257.523 514.991C257.94 511.382 258.233 508.261 258.788 501.803C259.128 497.85 259.246 496.51 259.432 494.508ZM321.681 471.993C321.574 475.742 321.602 478.728 321.749 485.435C321.849 489.976 321.881 491.993 321.877 494.505C321.871 498.633 321.731 502.176 321.409 505.551C320.624 513.643 320.152 520.572 320.22 525.289C320.236 526.394 321.145 527.276 322.249 527.26C323.354 527.244 324.236 526.336 324.22 525.231C324.154 520.71 324.619 513.884 325.391 505.933C325.726 502.417 325.87 498.754 325.877 494.511C325.881 491.958 325.848 489.92 325.748 485.347C325.602 478.707 325.575 475.766 325.679 472.107C325.711 471.003 324.841 470.083 323.737 470.051C322.633 470.02 321.712 470.889 321.681 471.993ZM334.132 495.364C333.963 501.671 333.91 504.29 333.91 507.55C333.91 508.655 333.015 509.55 331.91 509.55C330.806 509.55 329.91 508.655 329.91 507.55C329.91 504.242 329.964 501.601 330.133 495.257C330.191 493.092 330.218 492.016 330.248 490.755C330.447 482.121 330.386 476.341 329.918 470.943C329.822 469.843 330.637 468.873 331.737 468.778C332.838 468.682 333.807 469.497 333.903 470.597C334.387 476.177 334.449 482.078 334.247 490.848C334.217 492.115 334.189 493.194 334.132 495.364Z" fill="#1CB377"/></g></g></g><g id="Phone/Item" transform="scale(1 1)"><g id="Phone/Item/Analitics"><g id="items"><g id="Group"><path id="Path" d="M312.419 172.075C312.467 171.559 312.715 171.057 313.169 170.701C313.226 170.656 313.285 170.614 313.347 170.576C313.456 170.505 313.639 170.386 313.892 170.221C314.35 169.924 314.87 169.587 315.443 169.216C317.077 168.158 318.809 167.04 320.562 165.912C325.575 162.689 329.755 160.034 332.521 158.335L332.5 158.347C334.567 157.074 336.494 155.809 339.787 153.594C345.61 149.676 347.227 148.615 349.962 146.998C350.036 146.955 350.113 146.916 350.192 146.882L351.522 146.312C352.486 145.899 353.605 146.3 354.086 147.232C357.504 153.845 359.639 160.902 359.789 166.818C360.004 175.008 358.641 183.164 355.773 190.84C355.354 191.961 354.051 192.466 352.987 191.92L351.83 191.326C349.983 190.37 347.995 189.562 344.112 188.118C343.902 188.039 343.595 187.925 343.075 187.732C339.016 186.224 336.953 185.392 334.854 184.338C332.879 183.348 328.458 181.21 322.515 178.362C320.432 177.363 318.305 176.345 316.249 175.364C315.529 175.02 314.869 174.705 314.284 174.426C313.683 174.139 313.683 174.139 313.549 174.076C312.907 173.769 312.53 173.196 312.434 172.582C312.408 172.416 312.402 172.246 312.419 172.075Z" fill="#FF9BA5"/><path id="Path_2" d="M346.123 184.586C345.805 184.467 344.718 184.064 344.56 184.005C340.69 182.565 338.626 181.725 336.681 180.73C334.956 179.862 331.458 178.164 326.682 175.87L326.528 175.797C324.069 174.616 321.435 173.356 318.801 172.099C317.879 171.658 317.023 171.25 316.255 170.884C315.827 170.68 315.827 170.68 315.542 170.544L315.289 170.424C312.999 169.334 311.224 172.626 313.393 173.94L313.753 174.159C316.67 177.78 319.292 181.395 323.812 187.882C324.111 188.312 325.151 189.806 325.329 190.062C331.081 198.319 334.232 202.604 338.04 207.082L338.498 207.705C339.126 208.558 340.31 208.774 341.198 208.198C346.312 204.88 350.596 200.43 353.717 195.194L353.742 195.151C354.559 193.7 355.269 192.192 355.866 190.638C356.275 189.573 355.713 188.383 354.632 188.023L353.54 187.659C351.662 186.715 349.647 185.898 346.123 184.586Z" fill="#8885D2"/><path id="Path_3" d="M312.371 172.292C312.363 172.147 312.349 171.899 312.33 171.558C312.295 170.942 312.255 170.244 312.209 169.478C312.078 167.29 311.931 164.994 311.771 162.699C311.316 156.178 310.845 150.952 310.392 147.948C309.659 143.091 309.289 139.194 308.617 130.427C308.469 128.492 308.402 127.633 308.316 126.56L308.31 126.4V126.33C308.31 125.225 309.205 124.33 310.31 124.33H310.682C325.211 123.207 340.606 128.545 348.747 138.77C350.762 141.354 352.53 144.121 354.028 147.036C354.514 147.981 354.176 149.141 353.258 149.677L352.024 150.398C349.504 151.9 348.18 152.768 342.468 156.595C338.937 158.961 336.822 160.336 334.557 161.704C331.839 163.374 327.675 166.018 322.684 169.228C320.934 170.353 319.206 171.469 317.574 172.525C317.003 172.895 316.485 173.232 316.028 173.528C315.754 173.705 315.562 173.83 315.46 173.897C316.377 173.301 316.646 172.077 316.059 171.15C315.469 170.217 314.233 169.939 313.3 170.53C312.677 170.924 312.346 171.605 312.371 172.292C312.371 172.304 312.372 172.316 312.372 172.327C312.376 172.395 312.383 172.463 312.393 172.528C312.434 172.791 312.528 173.051 312.68 173.29C312.816 173.504 312.986 173.684 313.178 173.827C313.315 173.928 313.464 174.011 313.621 174.075C314.198 174.307 314.874 174.268 315.439 173.91C315.446 173.906 315.453 173.901 315.46 173.897L312.371 172.292Z" fill="#FCD400"/><path id="Path_4" d="M328.591 187.816C328.413 187.56 327.373 186.066 327.073 185.635C322.389 178.912 319.707 175.222 316.624 171.412C316.479 171.232 316.303 171.079 316.106 170.96L315.446 170.56C314.524 170.001 313.326 170.273 312.736 171.174L312.528 171.492C312.293 171.851 312.293 171.851 311.941 172.389C311.308 173.356 310.603 174.433 309.844 175.594C307.674 178.911 305.505 182.234 303.48 185.341L303.405 185.457C299.836 190.934 297.118 195.128 295.583 197.534C295.05 198.373 294.362 199.4 293.551 200.573C293.443 200.729 293.334 200.887 293.222 201.047C292.423 202.194 291.566 203.399 290.709 204.586C290.409 205.002 290.13 205.386 289.88 205.728C289.731 205.933 289.624 206.079 289.568 206.155C288.84 207.145 289.168 208.551 290.26 209.116C291.813 209.92 293.338 210.632 294.921 211.281C308 216.657 319.336 217.456 331.276 213.162C334.835 211.898 338.232 210.199 341.385 208.106C342.509 207.36 342.587 205.737 341.539 204.887L340.993 204.444C337.326 200.124 334.233 195.916 328.591 187.816Z" fill="#C44538"/><path id="Path_5" d="M310.139 124.387C301.349 125.14 293.544 127.419 287.84 131.481C282.931 134.965 278.496 140.196 274.585 146.574C269.865 154.259 267.813 166.253 269.221 175.811C271.733 192.916 277.657 202.574 290.278 209.125C291.151 209.578 292.223 209.33 292.808 208.539C292.867 208.459 292.976 208.311 293.128 208.104C293.38 207.759 293.662 207.373 293.964 206.955C294.83 205.76 295.696 204.546 296.505 203.384C296.629 203.206 296.751 203.03 296.871 202.857C297.709 201.643 298.423 200.574 298.982 199.685C300.501 197.304 303.214 193.117 306.776 187.65L306.852 187.535C308.875 184.429 311.044 181.109 313.212 177.793C313.971 176.633 314.675 175.556 315.308 174.59C315.66 174.052 315.66 174.052 315.895 173.693L316.103 173.376C316.337 173.018 316.451 172.593 316.426 172.165C316.423 172.11 316.423 172.11 316.408 171.853C316.393 171.599 316.376 171.305 316.356 170.974C316.298 170.028 316.233 168.975 316.159 167.84C315.95 164.598 315.723 161.356 315.484 158.328C315.115 153.632 314.754 149.891 314.41 147.433C313.858 143.476 313.416 139.397 312.977 134.437C312.798 132.407 312.652 130.635 312.376 127.196L312.31 126.37C312.304 125.203 311.303 124.288 310.139 124.387Z" fill="#FC6E47"/></g><path id="Path_6" d="M295.84 245.89C295.733 244.743 295.713 243.59 295.78 242.44C295.974 239.41 295.666 236.37 294.87 233.44C294.626 232.604 293.87 232.022 293 232H292.09C287 231.85 281.83 231.87 279.61 233.91C277.39 235.95 277.75 240.91 278.5 246.11C278.56 246.49 278.61 246.823 278.65 247.11C278.781 248.112 279.639 248.859 280.65 248.85H280.78C282.39 248.75 284.06 248.7 285.68 248.66C288.51 248.637 291.337 248.467 294.15 248.15C294.673 248.081 295.147 247.808 295.47 247.39C295.789 246.96 295.923 246.419 295.84 245.89V245.89Z" fill="#FC6E47"/><path id="Path_7" d="M298.55 267.14C298.102 263.466 297.357 259.834 296.32 256.28C296.068 255.434 295.292 254.853 294.41 254.85H291.75C288.22 254.85 284.56 254.78 280.68 255.09C279.657 255.172 278.862 256.014 278.84 257.04C278.833 260.316 279.168 263.584 279.84 266.79C280.02 267.79 280.2 268.72 280.32 269.63C280.46 270.624 281.316 271.36 282.32 271.35H282.41C287.41 271.14 293.15 270.8 297.25 269.29C298.136 268.969 298.677 268.073 298.55 267.14Z" fill="#C44538"/><path id="Path_8" d="M298.609 278.29C298.255 277.623 297.555 277.213 296.799 277.23C294.179 277.29 291.669 277.53 289.249 277.76C287.299 277.95 285.249 278.15 283.249 278.24C282.713 278.263 282.209 278.501 281.849 278.9C281.489 279.305 281.309 279.839 281.349 280.38L281.399 281.1C281.599 283.76 281.889 287.78 281.399 289.7C281.159 290.707 281.728 291.731 282.709 292.06C282.962 292.142 283.219 292.209 283.479 292.26L284.749 291.26C288.172 288.38 292.641 287.058 297.079 287.61C298.088 287.76 299.077 288.018 300.029 288.38C299.999 285.31 299.659 280.26 298.609 278.29Z" fill="#8885D2"/><path id="Path_9" d="M310.269 240.694C315.456 240.278 320.731 239.815 327.905 239.156C329.441 239.014 330.725 238.896 333.402 238.648C347.236 237.366 353.266 236.833 360.849 236.264C361.951 236.182 362.777 235.222 362.694 234.12C362.611 233.019 361.651 232.193 360.55 232.276C352.935 232.847 346.89 233.381 333.033 234.665C330.357 234.913 329.073 235.031 327.539 235.172C320.38 235.831 315.119 236.293 309.95 236.706C308.849 236.795 308.028 237.759 308.116 238.86C308.204 239.961 309.168 240.782 310.269 240.694Z" fill="#3B3B3B"/><path id="Path_10" d="M312.078 263.999C318.008 263.769 321.886 263.179 329.777 261.581L329.836 261.569C337.555 260.005 341.254 259.442 346.929 259.218C348.255 259.167 349.643 259.13 351.197 259.102C352.529 259.079 353.599 259.067 356.001 259.046C363.361 258.979 366.658 258.887 370.848 258.533C371.949 258.44 372.766 257.472 372.673 256.372C372.58 255.271 371.612 254.454 370.512 254.547C366.455 254.89 363.225 254.98 355.965 255.046C353.552 255.068 352.474 255.08 351.127 255.103C349.546 255.131 348.13 255.168 346.772 255.222C340.829 255.456 336.956 256.045 329.042 257.649L328.983 257.66C321.287 259.219 317.584 259.782 311.923 260.002C310.819 260.044 309.959 260.974 310.002 262.078C310.044 263.181 310.974 264.041 312.078 263.999Z" fill="#3B3B3B"/><path id="Path_11" d="M313.865 284.44C317.167 284.117 320.554 283.784 324.945 283.35C326.468 283.2 332.26 282.628 333.619 282.494C336.997 282.16 339.685 281.895 342.279 281.64C348.138 281.065 353.19 280.574 358.031 280.111C359.13 280.006 359.936 279.029 359.831 277.929C359.726 276.83 358.749 276.024 357.649 276.129C352.806 276.593 347.75 277.084 341.888 277.66C339.293 277.914 336.604 278.179 333.226 278.513C331.866 278.647 326.075 279.219 324.552 279.37C320.162 279.803 316.776 280.136 313.475 280.46C312.376 280.567 311.572 281.546 311.68 282.645C311.787 283.744 312.766 284.548 313.865 284.44Z" fill="#3B3B3B"/><path id="Path_12" d="M315.407 305.817C315.559 305.809 315.841 305.794 316.237 305.772C316.895 305.735 317.628 305.693 318.418 305.648C320.676 305.517 322.933 305.378 325.041 305.238C326.64 305.132 328.09 305.029 329.357 304.93C331.004 304.802 332.315 304.684 333.248 304.577L354.248 302.167C356.368 301.921 358.003 301.683 361.629 301.116C365.203 300.558 366.802 300.324 368.85 300.087C369.948 299.959 370.734 298.967 370.607 297.87C370.479 296.772 369.487 295.986 368.389 296.113C366.271 296.359 364.637 296.597 361.011 297.164C357.437 297.722 355.838 297.956 353.789 298.193L332.792 300.603C331.917 300.704 330.649 300.818 329.048 300.942C327.796 301.039 326.361 301.141 324.776 301.247C322.68 301.386 320.434 301.524 318.187 301.654C317.4 301.7 316.67 301.741 316.015 301.778C315.622 301.8 315.341 301.815 315.192 301.823C314.089 301.882 313.243 302.824 313.303 303.927C313.362 305.03 314.304 305.876 315.407 305.817Z" fill="#3B3B3B"/></g></g></g><g id="Phone/Effect" transform="scale(1 1)"><g id="Phone/Effect/Pop"><g id="addons"><path id="Path" d="M376.433 71.3111L386.743 49.3211C387.329 48.071 386.791 46.5824 385.541 45.9963C384.291 45.4102 382.802 45.9485 382.216 47.1986L371.906 69.1886C371.32 70.4387 371.858 71.9273 373.108 72.5134C374.358 73.0996 375.847 72.5613 376.433 71.3111Z" fill="#CCC9C6"/><path id="Path_2" d="M417.054 60.7767L395.044 76.5267C393.922 77.3302 393.663 78.8918 394.466 80.0146C395.27 81.1374 396.831 81.3963 397.954 80.5928L419.964 64.8428C421.087 64.0394 421.346 62.4778 420.542 61.3549C419.739 60.2321 418.177 59.9732 417.054 60.7767Z" fill="#CCC9C6"/><path id="Path_3" d="M404.668 106.66L424.718 106.27C426.098 106.243 427.196 105.102 427.169 103.721C427.142 102.341 426.001 101.244 424.621 101.271L404.571 101.661C403.19 101.687 402.093 102.828 402.12 104.209C402.146 105.589 403.287 106.686 404.668 106.66Z" fill="#CCC9C6"/></g></g></g></g></g></g></svg> \ No newline at end of file diff --git a/app/WhereIsThePower/src/environments/environment.prod.ts b/app/WhereIsThePower/src/environments/environment.prod.ts index 99ca2d53..aadbcd1d 100644 --- a/app/WhereIsThePower/src/environments/environment.prod.ts +++ b/app/WhereIsThePower/src/environments/environment.prod.ts @@ -1,4 +1,4 @@ export const environment = { production: true, - MapboxApiKey: 'MapboxApiKey' + MapboxApiKey: 'HelloAPIKey' }; diff --git a/app/WhereIsThePower/src/environments/environment.ts b/app/WhereIsThePower/src/environments/environment.ts index 8559209c..16253b1f 100644 --- a/app/WhereIsThePower/src/environments/environment.ts +++ b/app/WhereIsThePower/src/environments/environment.ts @@ -1,4 +1,4 @@ export const environment = { production: false, - MapboxApiKey: 'replace' + MapboxApiKey: 'HelloAPIKey' };