103 lines
3.7 KiB
Markdown
103 lines
3.7 KiB
Markdown
## Лабораторна робота №5
|
||
### Тема
|
||
|
||
Візуалізація якості стану дорожнього покриття за допомогою фреймворку Kivy.
|
||
|
||
### Мета
|
||
|
||
Розробити програму для візуалізації руху машини на дорозі та якості дороги за допомогою даних датчиків.
|
||
|
||
### Підготовка робочого середовище, встановлення проекту
|
||
|
||
Створення віртуального середовища
|
||
|
||
`python -m venv ./venv`
|
||
|
||
Активація середовища для linux
|
||
|
||
`source ./venv/bin/activate`
|
||
|
||
Активація середовища для windows
|
||
|
||
`venv\Scripts\activate`
|
||
|
||
Встановлення необхідних бібліотек
|
||
|
||
`pip install -r requirements.txt`
|
||
|
||
### Завдання
|
||
|
||
Для відображення мапи використовується віджет [Mapview](https://mapview.readthedocs.io/en/1.0.4/) для Kivy.
|
||
|
||
Для візуалізації руху машини можна використовувати MapMarker та рухати його відповідно GPS даних.
|
||
Для позначення нерівностей на дорозі також використовувати маркери. Зображення для маркерів можна знайти в папці images.
|
||
|
||
Для створення та редагування маршруту машини на мапі використовуйте клас LineMapLayer та функцію
|
||
`add_point()` з файлу lineMapLayer.py. Додавання лінії на мапу:
|
||
|
||
```python
|
||
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.
|
||
|
||
**Шаблон основного файлу проєкту**
|
||
|
||
```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()
|
||
```
|