Розрахунок підйому / спуску / нахилу
OsmAnd використовує різні алгоритми для розрахунку нахилу та підйому на основі супутникових даних SRTM, які вбудовані в офлайн-карти, та на основі записаних GPX-треків.
Основна мета розрахунку підйому — надати відповідну інформацію про те, скільки додаткової енергії витрачається на підйом. Очевидно, це залежить від багатьох факторів, таких як транспортний засіб або спосіб пересування, поверхня, вага людини та інші. Отже, зрештою, підйом має бути параметром, який враховується при маршрутизації на основі висоти, щоб забезпечити енергоефективну маршрутизацію.
Основна мета розрахунку нахилу — мати візуальне відображення того, яких крутих доріг слід уникати.
Підйом / Спуск
Існує багато проблем з розрахунком підйому, оскільки немає стандарту, і оскільки він залежить від способу пересування та багатьох інших параметрів, важко надати користувачеві розумний контроль, щоб це не було надто складно. Зазвичай підйом порівнюють з іншими програмами, але немає програми, яка б мала золотий стандарт.
OsmAnd використовує 3-етапний алгоритм:
- Фільтрувати шумні дані.
- Знайти локальні екстремуми (мінімуми та максимуми).
- Обчислити суму різниць між мінімумом та максимумом.
Деякі треки містять багато шумних даних, які спочатку потрібно відфільтрувати. Наразі ми застосовуємо фільтрацію до всіх треків, але для підготовлених треків, таких як створені за допомогою інструменту "Планувати маршрут", інструменту "Навігація" або після корекції SRTM, фільтрація не повинна мати жодного ефекту.
Фільтр 70% нахилу
Фільтрація базується на пошуку екстремальних точок, які значно вищі або нижчі за 1 сусідню точку зліва та 1 сусідню точку справа на графіку.
Ці екстремальні точки виключаються з подальшого розрахунку. Поріг
становить 70% нахилу - код.
Приклад 1. (всі точки розподілені по 10 м), висота - [5, 3, 10, 3, 5]. 10 - екстремальна точка: тому що 10 > 3 (70% нахилу).
Приклад 2. (всі точк и розподілені по 10 м), висота - [5, 3, 10, 13, 15]. 10 - не екстремальна точка: тому що 10 > 3, але 10 < 13, тому це локальний пік.
Фільтрувати точки, що стрибають
Точки, що представляють локальні пагорби /\
, фільтруються, це призводить до того, що найвища та найнижча точки завжди будуть відфільтровані, але це дозволяє працювати з шумними треками, де запис був нечастим, тому перша перевірка з екстремальним нахилом не працює. Посилання на код.
Приклад 1. Висота - [5, 3, 10, 3, 5] -> [5, 5].
Приклад 2. Висота - [5, 6, 10, 7, 5] -> [5, 6, 7, 5].
Приклад 3. Висота - [5, 2, 3, 4, 5] -> [5, 3, 4, 5].
Пошук екстремумів
Для пошуку екстремумів використовується алгоритм Рамеса-Дугласа-Пекера. Він не є абсолютно хорошим для пошуку саме екстремумів на випадковому графіку, але при розрахунку висоти він уникає багатьох випадкових невеликих піків, які можуть виникнути під час 1 довгого підйому та деяких непомітно коротких спусків між ними.
Основна мета алгоритму — знайти мінімальну кількість прямих ліній, які могли б представити графік висоти. Поріг
становить 7 метрів. Отже, всі піки з різницею висот понад 7 метрів будуть виявлені на плоских поверхнях і не будуть виявлені, якщо вони менші.
Екстремуми відображаються на графіку синіми точками з увімкненим плагіном розробки OsmAnd.
Приклад 1. Висота - [0, 0, 10, 0, 0]. Екстремум - 10.
Приклад 2. Висота - [0, 1, 5, 4, -3, -2, -1, 0]. Немає екстремумів - всі менше 7 метрів різниці.
Розрахунок підйому / спуску між екстремумами
Наприклад, якщо у вас є простий трек, який йде вгору і вниз, у вас є лише 1 максимум на вашому шляху, тому
Різниця висот на початку = <висота на початку> - <висота екстремуму> :
Різниця висот на кінці = <висота екстремуму> - <висота на кінці> : якщо позитивна - **підйом**, якщо негативна - **спуск**
- Якщо Різниця висот на початку > 0
- підйом = різниця висот на початку
- спуск = різниця висот на кінці
- Якщо Різниця висот на кінці > 0
- підйом = різниця висот на кінці
- спуск = різниця висот на початку
Будуть додані інші приклади.
Корекція висоти SRTM
В OsmAnd є 2 альтернативи, які можна використовувати для корекції висоти.
- Відкрийте трек в OsmAnd Android і знайдіть Редагувати трек → Опції → Корекція висоти 1.1 Онлайн обробить трек через сервер OsmAnd та дані. 1.2 Офлайн обробить трек на пристрої, якщо завантажені 3D geotifs файли.
- Відкрийте веб-сайт https://osmand.net/map, завантажте трек і перегляньте висоту SRTM.
Нахил
Зелений графік розраховується інакше, ніж підйом / спуск, і може мати невеликі відхилення. Теоретично, у всіх екстремумах зелений графік повинен перетинати лінію 0, хоча всі точки з нахилом 0 є екстремумами.
Для розрахунку нахилу всі дані розбиваються на рівні кроки по 20 метрів. Для кожної точки цієї сітки розраховується середня висота навколо точки (радіус 10 метрів). Потім дискретна похідна розраховується за допомогою скінченної центральної різниці.