Skip to content
Snippets Groups Projects

PROG2900

Server

The server currently only accepts HTTPS requests, not HTTP. It listens on ip address 127.0.0.1 and port 8443.

URL: https://127.0.0.1:8443

Endpoints

This server consists of 6 endpoints. Each endpoint requires the desired lake name to be provided as an url parameter. Of the 6 endpoints, the first 5 only accept GET requests, while new_lidar_data only accepts POST requests. The first three endpoints expose the processed data to the application.

.../update_map?lake=*
.../get_relation?lake=*
.../update_measurements?lake=*

.../add_new_lake?lake=*&cell_size=*
.../add_test_data?lake=*
.../new_lidar_data?lake=*

Example requests:

https://127.0.0.1:8443/update_map?lake=Mjøsa
https://127.0.0.1:8443/get_relation?lake=Mjøsa
https://127.0.0.1:8443/update_measurements?lake=Mjøsa

https://127.0.0.1:8443/add_new_lake?lake=Skumsjøen&cell_size=0.8
https://127.0.0.1:8443/add_test_data?lake=Mjøsa
https://127.0.0.1:8443/new_lidar_data?lake=Mjøsa

Update map

update_map returns the contents of the measurement file for the selected lake. The file which is read is called *_measurements.json and can be found in server/map_handler/lake_relations. This endpoint makes no changes to any files. This endpoint exposes data for the application.

Get relation

get_relation returns the contents of the relation file for the selected lake. The file which is read is called *_div.json and can be found in server/map_handler/lake_relations. This endpoint makes no changes to any files. This endpoint exposes data for the application.

Update measurements

update_measurements updates the *_measurements.json for the selected lake. The endpoint will retrieve the latest LiDar data from _lidar_data.json, which is also located in map_handler/lake_relations/. The endpoint will also update the ice statistics form the NVE model. This endpoint exposes data for the application.

Add new lake

add_new_lake is used when a new lake is added to the system. This process requires manual intervention. To add a new lake to the system, first navigate to https://overpass-turbo.eu/. Once you have navigated to th OverpassTurbo API, copy the query below, and enter it into the white field at the left-hand side at the website . Swap 'lakeName' out with the name of the lake you want to add. Once the query has been adjusted, press the 'Run' button.

[out:json];
(
  way["natural"="water"]["name"="lakeName"];
  relation["natural"="water"]["name"="lakeName"];
);
(._;>;);
out body;

img.png img.png

If a text box saying "This query returned quite a lot of data (approx. x MB). Your browser may have a hard time trying to render this. Do you really want to continue? " appears, press 'continue anyway'. Double check that you have the correct lake, then press 'Export'. In the 'Export' menu, download the shape data as GeoJson. Once downloaded, name the file the *lakeName.json, and move the file into /server/map_handler/lake_relations. Once you have added the file, make a get request to the endpoint. The endpoint requires that the lake name is provided as a parameter. The cell_size determines the dimensions of the subdivisions in kilometers. This parameter is optional, but if a value is not provided in the requests, the default size will be 0.5km.

img.png

The endpoint will create the file lakeName_div.json. The original GeoJSON file from OverpassTurbo file should also remain in the system. Do not remove this file. Additionally, the file named all_lake_names.json should be updated to contain the newly added lake name.

img.png

Add test data

As the name implies, this endpoint adds test data to the desired lake. The endpoint will overwrite the file *_lidar_data.json with measurement objects with random thicknesses. This endpoint is only for production, and is not implemented in the application.

New lidar data

Dependencies

Database

This project requires SQLite3. Download the precompiled binary for your operating system. Precompiled binaries can be found on https://www.sqlite.org/download.html. Extract the downloaded binary in a folder and note its path. Add the path to your system environment variables. Now you can manage the SQLite database.

Application

In order to run the application in an IDE like Android Studio, the port randomization of Dart must first be bypassed. To do this, run the adb command reverse tcp:8443 tcp:8443 . This must be repeated every time the IDE in which the application is running is restarted. A simpler alternative is to add the command to the run configuration as an external tool. If the port randomization is not bypassed, the application will not be able to communicate with the server.

Dependencies

The application depends on multiple external libraries. A list of these can be found in the pubspec.yaml file, each with a comment explaining the dependencies usage. To install all the dependencies, simply run flutter pub get inside the app directory.

Known bugs

Developers

This software was developed by Joakim Aleksandersen, Sara Savanovic Djordjevic, and Hoa Ben The Nguyen.