Cálculo de subida / descida / inclinação
O OsmAnd usa diferentes algoritmos para calcular a inclinação e a subida com base em dados de satélite SRTM incorporados em mapas offline e em trilhas GPX gravadas.
O objetivo principal de calcular a subida é fornecer informações relevantes sobre quanta energia extra é gasta ao subir, obviamente isso depende de múltiplos fatores como veículo ou meio de transporte, superfície, peso da pessoa e outros. Assim, no final, a subida deve ser um parâmetro levado em consideração pelo roteamento baseado em elevação, para produzir um roteamento energeticamente eficiente.
O objetivo principal de calcular a inclinação é ter uma indicação visual de quais estradas íngremes precisam ser evitadas.
Subida / Descida
Existem muitos problemas para calcular a subida porque não há um padrão e, como depende do meio de transporte e de muitos outros parâmetros, é difícil fornecer um controle razoável ao usuário para que não seja muito complicado. Geralmente, a subida é comparada a outros programas, mas não há um programa que tenha um padrão ouro.
O OsmAnd usa um algoritmo de 3 etapas:
- Filtrar dados ruidosos.
- Encontrar extremos locais (mínimos e máximos).
- Calcular a soma das diferenças entre mínimo e máximo.
Algumas trilhas contêm muitos dados ruidosos que precisam ser filtrados primeiro. Por enquanto, aplicamos a filtragem a todas as trilhas, mas trilhas preparadas, como as construídas pela ferramenta Planejar Rota, ferramenta de Navegação ou após a correção SRTM, a filtragem não deve ter nenhum efeito.
Filtrar inclinação de 70%
A filtragem é baseada na localização de pontos extremos que são significativamente mais altos ou mais baixos do que 1 ponto vizinho à esquerda e 1 ponto vizinho à direita no gráfico.
Esses pontos extremos são excluídos de cálculos posteriores. O threshold é inclinação de 70% - código.
Exemplo 1. (todos os pontos distribuídos por 10m), elevação - [5, 3, 10, 3, 5]. 10 é um ponto extremo: porque é 10 > 3 (inclinação de 70%).
Exemplo 2. (todos os pontos distribuídos por 10m), elevação - [5, 3, 10, 13, 15]. 10 não é um ponto extremo: porque 10 > 3 mas 10 < 13, então é um pico local.
Filtrar pontos saltitantes
Pontos que representam colinas locais /\ são filtrados, isso leva a um problema de que o ponto mais alto e o mais baixo serão sempre filtrados, mas permite lidar com trilhas ruidosas onde a gravação não era frequente, então a primeira verificação com inclinação extrema não funciona. Referência ao código.
Exemplo 1. Elevação - [5, 3, 10, 3, 5] -> [5, 5].
Exemplo 2. Elevação - [5, 6, 10, 7, 5] -> [5, 6, 7, 5].
Exemplo 3. Elevação - [5, 2, 3, 4, 5] -> [5, 3, 4, 5].
Encontrando extremos
Para encontrar extremos, o algoritmo Rames-Dougals-Peucker é usado. Não é absolutamente bom para encontrar exatamente extremos em um gráfico aleatório, mas no cálculo de altitude, evita muitos pequenos picos aleatórios que podem acontecer durante uma longa subida e algumas descidas curtas imperceptíveis entre elas.
O principal objetivo do algoritmo é encontrar o número mínimo de linhas retas que poderiam representar o gráfico de altitude. O threshold é 7 metros. Assim, todos os picos com mais de 7 metros de diferença serão detectados em superfícies planas e não serão detectados se forem menores.
Os extremos são exibidos no gráfico como pontos azuis com o plugin de desenvolvimento OsmAnd ativado.
Exemplo 1. Elevação - [0, 0, 10, 0, 0]. Extremo é 10.
Exemplo 2. Elevação - [0, 1, 5, 4, -3, -2, -1, 0]. Nenhum extremo - todos com menos de 7 metros de diferença.
Calcular subida / descida entre extremos
Por exemplo, se você tem uma trilha simples que sobe e desce, você tem apenas 1 máximo em seu caminho, então a
Start ele diff = <start elevation> - <Extremum elevation> :
End ele diff = <Extremum elevation> - <end elevation> : if positive - **uphill**, if negative - **downhill**
- Se Start ele diff > 0
- uphill = start ele diff
- downhill = end ele diff
- Se End ele diff > 0
- uphill = end ele diff
- downhill = start ele diff
Mais exemplos serão adicionados.
Correção de Elevação
A Correção de Elevação ajusta os valores de altitude em uma trilha GPX usando fontes externas de elevação. Duas fontes de dados de elevação estão disponíveis:
- Usar mapas de terreno (DEM / SRTM / dados de elevação 3D)
- Substitui os valores de altitude com dados de mapas de terreno baixados (DEM/SRTM ou arquivos GeoTIFF 3D).
- Funciona localmente no dispositivo se os tiles de elevação estiverem instalados.
- Este método mantém a geometria original da trilha.
- Usar estradas próximas (Anexar a estradas)
- Ajusta a geometria da trilha para corresponder à rede de estradas.
- Usa dados de elevação de estradas para a correção de altitude.
- Este método pode modificar o formato da trilha devido ao snapping de estradas.
Dados que podem mudar após aplicar a Correção de Elevação:
- Distância
- Tamanho
- Subida
- Descida
- Velocidade média
- Velocidade máxima
- Duração
- Tempo em movimento
Os carimbos de data/hora do GPX são preservados ao usar ambas as fontes de elevação.
Inclinação
O gráfico verde é calculado de forma diferente da subida / descida e pode ter pequenas variações. Em teoria, em todos os extremos, o gráfico verde deve cruzar a linha 0, embora todos os pontos de inclinação 0 sejam extremos.
Para calcular a inclinação, todos os dados são divididos em etapas iguais de 20 metros. Para cada ponto dessa grade, a altitude média ao redor do ponto (raio de 10 metros) é calculada. Em seguida, a derivada discreta é calculada usando Diferença central finita.