Skip to main content

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**
  1. Se Start ele diff > 0
  • uphill = start ele diff
  • downhill = end ele diff
  1. 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:

  1. 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.
  1. 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.