2024-02-26 14:54:25 +02:00
|
|
|
|
## Лабораторна робота №5
|
2024-02-26 14:53:24 +02:00
|
|
|
|
### Тема
|
|
|
|
|
|
|
|
|
|
|
|
Візуалізація якості стану дорожнього покриття за допомогою фреймворку Kivy.
|
|
|
|
|
|
|
|
|
|
|
|
### Мета
|
|
|
|
|
|
|
|
|
|
|
|
Розробити програму для візуалізації руху машини на дорозі та якості дороги за допомогою даних датчиків.
|
|
|
|
|
|
|
|
|
|
|
|
### Підготовка робочого середовище, встановлення проекту
|
|
|
|
|
|
|
2024-03-13 15:14:48 +02:00
|
|
|
|
Створення віртуального середовища
|
2024-02-26 14:53:24 +02:00
|
|
|
|
|
|
|
|
|
|
`python -m venv ./venv`
|
|
|
|
|
|
|
|
|
|
|
|
Активація середовища для linux
|
|
|
|
|
|
|
|
|
|
|
|
`source ./venv/bin/activate`
|
|
|
|
|
|
|
|
|
|
|
|
Активація середовища для windows
|
|
|
|
|
|
|
|
|
|
|
|
`venv\Scripts\activate`
|
|
|
|
|
|
|
|
|
|
|
|
Встановлення необхідних бібліотек
|
|
|
|
|
|
|
2024-03-13 15:14:48 +02:00
|
|
|
|
`pip install -r requirements.txt`
|
2024-02-26 14:53:24 +02:00
|
|
|
|
|
|
|
|
|
|
### Завдання
|
|
|
|
|
|
|
|
|
|
|
|
Для відображення мапи використовується віджет [Mapview](https://mapview.readthedocs.io/en/1.0.4/) для Kivy.
|
|
|
|
|
|
|
2024-03-13 15:14:48 +02:00
|
|
|
|
Для візуалізації руху машини можна використовувати MapMarker та рухати його відповідно GPS даних.
|
|
|
|
|
|
Для позначення нерівностей на дорозі також використовувати маркери. Зображення для маркерів можна знайти в папці images.
|
2024-02-26 14:53:24 +02:00
|
|
|
|
|
|
|
|
|
|
Для створення та редагування маршруту машини на мапі використовуйте клас LineMapLayer та функцію
|
2024-03-13 15:14:48 +02:00
|
|
|
|
`add_point()` з файлу lineMapLayer.py. Додавання лінії на мапу:
|
2024-02-26 14:53:24 +02:00
|
|
|
|
|
2024-03-13 15:14:48 +02:00
|
|
|
|
```python
|
|
|
|
|
|
map_layer = LineMapLayer()
|
|
|
|
|
|
mapview.add_layer(map_layer, mode="scatter")
|
|
|
|
|
|
```
|
2024-02-26 14:53:24 +02:00
|
|
|
|
|
2024-03-13 15:14:48 +02:00
|
|
|
|
Щоб створити затримку при відображенні руху машини можна використовувати
|
|
|
|
|
|
функцію `kivy.clock.Clock.schedule_once()` або `kivy.clock.Clock.schedule_interval()`.
|
2024-02-26 14:53:24 +02:00
|
|
|
|
|
2024-03-13 15:14:48 +02:00
|
|
|
|
Дані для відображення на мапі (координати та стан дороги) зчитуються з бази даних через вебсокет.
|
|
|
|
|
|
Для їх отримання використовуйте функцію `get_new_points()` з datasource.py.
|
2024-02-26 14:53:24 +02:00
|
|
|
|
|
|
|
|
|
|
**Шаблон основного файлу проєкту**
|
|
|
|
|
|
|
|
|
|
|
|
```python
|
|
|
|
|
|
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()
|
|
|
|
|
|
```
|