1
0
mirror of https://github.com/Rhinemann/IoT-Systems.git synced 2026-03-14 20:50:39 +02:00
IoT-Systems/MapView/README.md

103 lines
3.7 KiB
Markdown
Raw Permalink Normal View History

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()
```