Skip to main content

Yokuş yukarı / yokuş aşağı / eğim hesaplaması

OsmAnd, çevrimdışı haritalara gömülü olan SRTM uydu verilerine ve Kaydedilmiş GPX parkurlarına dayalı olarak eğim ve yokuş yukarı hesaplamak için farklı algoritmalar kullanır.

Yokuş yukarı hesaplamanın temel amacı, yokuş yukarı çıkarken ne kadar ekstra enerji harcandığına dair ilgili bilgileri sağlamaktır; bu, açıkça araç veya taşıma şekli, yüzey, kişinin ağırlığı ve diğerleri gibi birçok faktöre bağlıdır. Dolayısıyla, sonunda yokuş yukarı, enerji verimli bir rota oluşturmak için Yüksekliğe dayalı rotalama tarafından dikkate alınması gereken bir parametre olmalıdır.

Eğim hesaplamanın temel amacı, hangi dik yolların kaçınılması gerektiğini görsel olarak belirtmektir.

Yokuş yukarı / Yokuş aşağı

Yokuş yukarı hesaplamanın birçok sorunu vardır, çünkü bir standart yoktur ve taşıma şekline ve diğer birçok parametreye bağlı olduğu için kullanıcıya makul bir kontrol sağlamak zordur, bu yüzden çok karmaşık değildir. Genellikle yokuş yukarı diğer programlarla karşılaştırılır, ancak altın standarda sahip hiçbir program yoktur.

OsmAnd 3 adımlı bir algoritma kullanır:

  • Gürültülü verileri filtrele.
  • Yerel ekstremumları (minimumlar ve maksimumlar) bul.
  • Minimum ve maksimumlar arasındaki farkların toplamını hesapla.

Bazı parkurlar, önce filtrelenmesi gereken çok sayıda gürültülü veri içerir. Şimdilik tüm parkurlara filtreleme uyguluyoruz, ancak Rota Planlama aracı, Navigasyon aracı veya SRTM düzeltmesinden sonra oluşturulan hazırlanmış parkurlarda filtrelemenin herhangi bir etkisi olmamalıdır.

%70 eğimi filtrele

Filtreleme, grafikte soldaki 1 komşu noktadan ve sağdaki 1 komşu noktadan önemli ölçüde daha yüksek veya daha düşük olan aşırı noktaları bulmaya dayanır. Bu aşırı noktalar daha fazla hesaplamadan hariç tutulur. Eşik %70 eğimdir - kod.

Örnek 1. (tüm noktalar 10m aralıklarla dağıtılmıştır), yükseklik - [5, 3, 10, 3, 5]. 10 aşırı noktadır: çünkü 10 > 3 (%70 eğim).

Örnek 2. (tüm noktalar 10m aralıklarla dağıtılmıştır), yükseklik - [5, 3, 10, 13, 15]. 10 aşırı bir nokta değildir: çünkü 10 > 3 ama 10 < 13, yani yerel bir zirvedir.

Zıplayan noktaları filtrele

Yerel tepeleri /\ temsil eden noktalar filtrelenir, bu en yüksek ve en düşük noktanın her zaman filtreleneceği bir soruna yol açar, ancak kaydın sık olmadığı gürültülü parkurlarla başa çıkmaya izin verir, bu nedenle aşırı eğimle ilk kontrol işe yaramaz. Koda referans.

Örnek 1. Yükseklik - [5, 3, 10, 3, 5] -> [5, 5].

Örnek 2. Yükseklik - [5, 6, 10, 7, 5] -> [5, 6, 7, 5].

Örnek 3. Yükseklik - [5, 2, 3, 4, 5] -> [5, 3, 4, 5].

Ekstremumları bulma

Ekstremumları bulmak için Rames-Dougals-Peucker algoritması kullanılır. Rastgele bir grafikte tam olarak ekstremumları bulmak için kesinlikle iyi değildir, ancak yükseklik hesaplamasında, 1 uzun yokuş yukarı ve arada fark edilmeyen kısa yokuş aşağılar sırasında oluşabilecek birçok rastgele küçük zirveyi önler.

Algoritmanın temel amacı, yükseklik grafiğini temsil edebilecek minimum sayıda düz çizgi bulmaktır. Eşik 7 metredir. Dolayısıyla 7 metreden fazla farkı olan tüm zirveler düz yüzeylerde tespit edilecek ve daha az ise tespit edilmeyecektir.

Ekstremumlar, OsmAnd geliştirme eklentisi etkinleştirildiğinde grafikte mavi noktalar olarak görüntülenir.

Örnek 1. Yükseklik - [0, 0, 10, 0, 0]. Ekstremum 10'dur.

Örnek 2. Yükseklik - [0, 1, 5, 4, -3, -2, -1, 0]. Ekstremum yok - hepsi 7 metreden az fark.

Ekstremumlar arasında yokuş yukarı / yokuş aşağı hesapla

Örneğin, yukarı ve aşağı giden basit bir parkurunuz varsa, yolunuzda yalnızca 1 maksimumunuz vardır, bu nedenle

Başlangıç yükseklik farkı = <başlangıç yüksekliği> - <Ekstremum yüksekliği>    : 
Bitiş yükseklik farkı = <Ekstremum yüksekliği> - <bitiş yüksekliği> : pozitifse - **yokuş yukarı**, negatifse - **yokuş aşağı**
  1. Başlangıç yükseklik farkı > 0 ise
  • yokuş yukarı = başlangıç yükseklik farkı
  • yokuş aşağı = bitiş yükseklik farkı
  1. Bitiş yükseklik farkı > 0 ise
  • yokuş yukarı = bitiş yükseklik farkı
  • yokuş aşağı = başlangıç yükseklik farkı

Daha fazla örnek eklenecektir.

Yükseklik SRTM düzeltmesi

OsmAnd'da yükseklik düzeltmesi almak için kullanılabilecek 2 alternatif vardır.

  1. OsmAnd Android'de parkuru açın ve Parkuru Düzenle → Seçenekler → Yükseklik Düzeltme öğesini bulun 1.1 Çevrimiçi parkuru OsmAnd sunucusu ve verileri aracılığıyla işleyecektir. 1.2 Çevrimdışı 3D geotif dosyaları indirilirse parkuru cihazda işleyecektir.
  2. https://osmand.net/map web sitesini açın ve parkuru yükleyin ve SRTM yüksekliğini görün.

Eğim

Yeşil grafik, yokuş yukarı / yokuş aşağıdan farklı hesaplanır ve küçük farklılıklar gösterebilir. Teoride tüm ekstremumlarda yeşil grafik 0 çizgisini kesmelidir, ancak tüm 0 eğim noktaları ekstremumdur.

Eğimi hesaplamak için tüm veriler eşit 20 metrelik adımlara bölünür. Bu ızgaranın her noktası için noktanın etrafındaki ortalama yükseklik (10 metre yarıçap) hesaplanır. Daha sonra Sonlu merkezi fark kullanılarak ayrık türev hesaplanır.