Obliczanie podjazdów / zjazdów / nachylenia
OsmAnd wykorzystuje różne algorytmy do obliczania nachylenia i podjazdów w oparciu o dane satelitarne SRTM, które są osadzone w mapach offline, oraz w oparciu o zarejestrowane ślady GPX.
Głównym celem obliczania podjazdów jest dostarczenie odpowiednich informacji o tym, ile dodatkowej energii jest zużywane na wspinaczkę. Oczywiście zależy to od wielu czynników, takich jak pojazd lub sposób transportu, nawierzchnia, waga osoby i inne. Więc ostatecznie podjazd powinien być parametrem uwzględnianym przez routing oparty na wysokości, aby zapewnić routing efektywny energetycznie.
Głównym celem obliczania nachylenia jest wizualne wskazanie, których stromych dróg należy unikać.
Podjazdy / Zjazdy
Istnieje wiele problemów z obliczaniem podjazdów, ponieważ nie ma standardu, a ponieważ zależy to od sposobu transportu i wielu innych parametrów, trudno jest zapewnić użytkownikowi rozsądną kontrolę, aby nie było to zbyt skomplikowane. Zazwyczaj podjazdy są porównywane z innymi programami, ale żaden program nie ma złotego standardu.
OsmAnd wykorzystuje algorytm trzystopniowy:
- Filtrowanie zaszumionych danych.
- Znajdowanie lokalnych ekstremów (minimów i maksimów).
- Obliczanie sumy różnic między minimum a maksimum.
Niektóre ślady zawierają dużo zaszumionych danych, które należy najpierw przefiltrować. Na razie stosujemy filtrowanie do wszystkich śladów, ale w przypadku śladów przygotowanych, takich jak te zbudowane za pomocą narzędzia Planuj trasę, narzędzia Nawigacja lub po korekcji SRTM, filtrowanie nie powinno mieć żadnego wpływu.
Filtr nachylenia 70%
Filtrowanie opiera się na znajdowaniu punktów ekstremalnych, które są znacznie wyższe lub niższe niż 1 sąsiedni punkt po lewej i 1 sąsiedni punkt po prawej na wykresie.
Te punkty ekstremalne są wykluczane z dalszych obliczeń. Próg
to nachylenie 70% - kod.
Przykład 1. (wszystkie punkty rozłożone co 10m), wysokość - [5, 3, 10, 3, 5]. 10 to punkt ekstremalny: ponieważ 10 > 3 (nachylenie 70%).
Przykład 2. (wszystkie punkty rozłożone co 10m), wysokość - [5, 3, 10, 13, 15]. 10 nie jest punktem ekstremalnym: ponieważ 10 > 3, ale 10 < 13, więc jest to lokalny szczyt.
Filtrowanie skaczących punktów
Punkty reprezentujące lokalne wzniesienia /\
są filtrowane, co prowadzi do problemu, że najwyższy i najniższy punkt zawsze zostaną odfiltrowane, ale pozwala to radzić sobie z zaszumionymi śladami, gdzie nagrywanie nie było częste, więc pierwsza kontrola z ekstremalnym nachyleniem nie działa. Odniesienie do kodu.
Przykład 1. Wysokość - [5, 3, 10, 3, 5] -> [5, 5].
Przykład 2. Wysokość - [5, 6, 10, 7, 5] -> [5, 6, 7, 5].
Przykład 3. Wysokość - [5, 2, 3, 4, 5] -> [5, 3, 4, 5].
Znajdowanie ekstremów
Do znajdowania ekstremów używany jest algorytm Rames-Dougals-Peucker. Nie jest on absolutnie dobry do znajdowania dokładnie ekstremów na losowym wykresie, ale w obliczeniach wysokości pozwala uniknąć wielu losowych małych szczytów, które mogą pojawić się podczas jednego długiego podjazdu i kilku niezauważalnie krótkich zjazdów pomiędzy nimi.
Głównym celem algorytmu jest znalezienie minimalnej liczby prostych linii, które mogłyby reprezentować wykres wysokości. Próg
wynosi 7 metrów. Tak więc wszystkie szczyty o różnicy większej niż 7 metrów zostaną wykryte na płaskich powierzchniach i nie zostaną wykryte, jeśli są mniejsze.
Ekstrema są wyświetlane na wykresie jako niebieskie kropki z włączoną wtyczką deweloperską OsmAnd.
Przykład 1. Wysokość - [0, 0, 10, 0, 0]. Ekstremum to 10.
Przykład 2. Wysokość - [0, 1, 5, 4, -3, -2, -1, 0]. Brak ekstremów - wszystkie różnice mniejsze niż 7 metrów.
Obliczanie podjazdów / zjazdów między ekstremami
Na przykład, jeśli masz prosty ślad, który idzie w górę i w dół, masz tylko 1 maksimum na swojej ścieżce, więc
Różnica wysokości początkowej = <wysokość początkowa> - <wysokość ekstremum> :
Różnica wysokości końcowej = <wysokość ekstremum> - <wysokość końcowa> : jeśli dodatnia - **podjazd**, jeśli ujemna - **zjazd**
- Jeśli Różnica wysokości początkowej > 0
- podjazd = różnica wysokości początkowej
- zjazd = różnica wysokości końcowej
- Jeśli Różnica wysokości końcowej > 0
- podjazd = różnica wysokości końcowej
- zjazd = różnica wysokości początkowej
Zostaną dodane kolejne przykłady.
Korekcja wysokości SRTM
Istnieją 2 alternatywy, które można wykorzystać w OsmAnd do korekcji wysokości.
- Otwórz ślad w OsmAnd Android i znajdź Edytuj ślad → Opcje → Korekcja wysokości 1.1 Online przetworzy ślad za pośrednictwem serwera i danych OsmAnd. 1.2 Offline przetworzy ślad na urządzeniu, jeśli pobrano pliki 3D geotifs.
- Otwórz stronę https://osmand.net/map i prześlij ślad, aby zobaczyć wysokość SRTM.
Nachylenie
Zielony wykres jest obliczany inaczej niż podjazdy/zjazdy i może mieć niewielkie różnice. Teoretycznie we wszystkich ekstremach zielony wykres powinien przecinać linię 0, chociaż wszystkie punkty o zerowym nachyleniu są ekstremami.
Aby obliczyć nachylenie, całe dane są dzielone na równe kroki co 20 metrów. Dla każdego punktu tej siatki obliczana jest średnia wysokość wokół punktu (promień 10 metrów). Następnie obliczana jest dyskretna pochodna za pomocą skończonej różnicy centralnej.