Лабораторна робота №5

Тема

Візуалізація якості стану дорожнього покриття за допомогою фреймворку Kivy.

Мета

Розробити програму для візуалізації руху машини на дорозі та якості дороги за допомогою даних датчиків.

Підготовка робочого середовище, встановлення проекту

Створення віртуального середовища

python -m venv ./venv

Активація середовища для linux

source ./venv/bin/activate

Активація середовища для windows

venv\Scripts\activate

Встановлення необхідних бібліотек

pip install -r requirements.txt

Завдання

Для відображення мапи використовується віджет Mapview для Kivy.

Для візуалізації руху машини можна використовувати MapMarker та рухати його відповідно GPS даних. Для позначення нерівностей на дорозі також використовувати маркери. Зображення для маркерів можна знайти в папці images.

Для створення та редагування маршруту машини на мапі використовуйте клас LineMapLayer та функцію add_point() з файлу lineMapLayer.py. Додавання лінії на мапу:

map_layer = LineMapLayer()
mapview.add_layer(map_layer, mode="scatter")

Щоб створити затримку при відображенні руху машини можна використовувати функцію kivy.clock.Clock.schedule_once() або kivy.clock.Clock.schedule_interval().

Дані для відображення на мапі (координати та стан дороги) зчитуються з бази даних через вебсокет. Для їх отримання використовуйте функцію get_new_points() з datasource.py.

Шаблон основного файлу проєкту

from kivy.app import App
from kivy_garden.mapview import MapMarker, MapView
from kivy.clock import Clock
from lineMapLayer import LineMapLayer


class MapViewApp(App):
    def __init__(self, **kwargs):
        super().__init__()
        # додати необхідні змінні

    def on_start(self):
        """
        Встановлює необхідні маркери, викликає функцію для оновлення мапи
        """

    def update(self, *args):
        """
        Викликається регулярно для оновлення мапи
        """

    def update_car_marker(self, point):
        """
        Оновлює відображення маркера машини на мапі
        :param point: GPS координати
        """

    def set_pothole_marker(self, point):
        """
        Встановлює маркер для ями
        :param point: GPS координати
        """

    def set_bump_marker(self, point):
        """
        Встановлює маркер для лежачого поліцейського
        :param point: GPS координати
        """

    def build(self):
        """
        Ініціалізує мапу MapView(zoom, lat, lon)
        :return: мапу
        """
        self.mapview = MapView()
        return self.mapview


if __name__ == '__main__':
    MapViewApp().run()