Перейти до основного вмісту

Розрахунок підйому / спуску / нахилу

OsmAnd використовує різні алгоритми для розрахунку нахилу та підйому на основі супутникових даних SRTM, які вбудовані в офлайн-карти, та на основі записаних GPX-треків.

Основна мета розрахунку підйому — надати відповідну інформацію про те, скільки додаткової енергії витрачається на підйом, очевидно, це залежить від багатьох факторів, таких як транспортний засіб або спосіб пересування, поверхня, вага людини та інших. Отже, зрештою, підйом має бути параметром, який враховується при маршрутизації на основі висоти, щоб забезпечити енергоефективну маршрутизацію.

Основна мета розрахунку нахилу — мати візуальне відображення того, яких крутих доріг слід уникати.

Підйом / Спуск

Існує багато проблем з розрахунком підйому, оскільки немає стандарту і оскільки він залежить від способу пересування та багатьох інших параметрів, важко надати користувачеві розумний контроль, щоб це не було надто складно. Зазвичай підйом порівнюють з іншими програмами, але немає програми, яка б мала золотий стандарт.

OsmAnd використовує алгоритм з 3 кроками:

  • Фільтрувати шумні дані.
  • Знайти локальні екстремуми (мінімуми та максимуми).
  • Обчислити суму різниць між мінімумом та максимумом.

Деякі треки містять багато шумних даних, які спочатку потрібно відфільтрувати. Наразі ми застосовуємо фільтрацію до всіх треків, але для підготовлених треків, таких як створені за допомогою інструменту "Планувати маршрут", інструменту "Навігація" або після корекції SRTM, фільтрація не повинна мати жодного ефекту.

Фільтр 70% нахилу

Фільтрація базується на пошуку екстремальних точок, які значно вищі або нижчі за 1 сусідню точку зліва та 1 сусідню точку справа на графіку. Ці екстремальні точки виключаються з подальшого розрахунку. threshold становить 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. Elevation - [5, 3, 10, 3, 5] -> [5, 5].

Приклад 2. Elevation - [5, 6, 10, 7, 5] -> [5, 6, 7, 5].

Приклад 3. Elevation - [5, 2, 3, 4, 5] -> [5, 3, 4, 5].

Пошук екстремумів

Для пошуку екстремумів використовується алгоритм Ramer–Douglas–Peucker. Він не є абсолютно хорошим для пошуку саме екстремумів на випадковому графіку, але при розрахунку висоти він уникає багатьох випадкових невеликих піків, які можуть виникнути під час 1 довгого підйому та деяких непомітно коротких спусків між ними.

Основна мета алгоритму — знайти мінімальну кількість прямих ліній, які могли б представити графік висоти. threshold становить 7 метрів. Отже, всі піки з різницею висот понад 7 метрів будуть виявлені на плоских поверхнях і не будуть виявлені, якщо вони менші.

Екстремуми відображаються на графіку синіми точками з увімкненим плагіном розробки OsmAnd.

Приклад 1. Elevation - [0, 0, 10, 0, 0]. Екстремум - 10.

Приклад 2. Elevation - [0, 1, 5, 4, -3, -2, -1, 0]. Немає екстремумів - всі менше 7 метрів різниці.

Розрахунок підйому / спуску між екстремумами

Наприклад, якщо у вас є простий трек, який йде вгору і вниз, у вас є лише 1 максимум на вашому шляху, тому

Start ele diff = <start elevation> - <Extremum elevation>    : 
End ele diff = <Extremum elevation> - <end elevation> : if positive - **uphill**, if negative - **downhill**
  1. Якщо Start ele diff > 0
  • uphill = start ele diff
  • downhill = end ele diff
  1. Якщо End ele diff > 0
  • uphill = end ele diff
  • downhill = start ele diff

Будуть додані інші приклади.

Корекція висоти

Корекція висоти коригує значення висоти в GPX-треку за допомогою зовнішніх джерел висоти. Доступні два джерела даних висоти:

  1. Використовувати карти рельєфу (DEM / SRTM / 3D дані висоти)
  • Замінює значення висоти даними з завантажених карт рельєфу (DEM/SRTM або файли 3D GeoTIFF).
  • Працює локально на пристрої, якщо встановлені тайли висоти.
  • Цей метод зберігає оригінальну геометрію треку.
  1. Використовувати сусідні дороги (Приєднати до доріг)
  • Коригує геометрію треку для відповідності мережі доріг.
  • Використовує дані висоти доріг для корекції висоти.
  • Цей метод може змінювати форму треку через прив'язку до доріг.

Дані, які можуть змінитися після застосування корекції висоти:

  • Відстань
  • Розмір
  • Підйом
  • Спуск
  • Середня швидкість
  • Максимальна швидкість
  • Тривалість
  • Час у русі

Мітки часу GPX (дата/час) зберігаються при використанні обох джерел висоти.

Нахил

Зелений графік розраховується інакше, ніж підйом / спуск, і може мати невеликі відхилення. Теоретично, у всіх екстремумах зелений графік повинен перетинати лінію 0, хоча всі точки з нахилом 0 є екстремумами.

Для розрахунку нахилу всі дані розбиваються на рівні кроки по 20 метрів. Для кожної точки цієї сітки розраховується середня висота навколо точки (радіус 10 метрів). Потім дискретна похідна розраховується за допомогою скінченної центральної різниці.