Výpočet vzdálenosti pomocí GreatCircle   zodpovězená otázka

C#

Zdravím, řeším takový zajímavý problém. Píšu aplikaci s GPS a chci vypočítat vzdálenost, zjistil jsem, že se na tento výpočet používá tzv. GreateCircle nebo Haversine. Oba mají vesměs stejný výsledek, ale Haversine je delší. Avšak jakmile jsem vše přepsal do C# a jal se zkoušet, zjistil jsem, že to nevychází. Pro představu mělo vyjít něco kolem 500m a vyšlo 21m. Zadávám souřadnice ve formátu DD.ddddd°.

Přikládám zápis GreatCircle a svoji funkci

public double GreatCircle(double Lat1, double Lon1, double Lat2, double Lon2)
        {
            //R = poloměr Země
            //d = R * arccos(sin(lat2)*sin(lat1)+cos(lat2)*cos(lat1)*cos(lon2 – lon1))
 
            const int R = 6378;
            double A = Math.Sin(Lat2);
            double B = Math.Sin(Lat1);
            double C = Math.Cos(Lat2);
            double D = Math.Cos(Lat1);
            double E = Math.Cos(Lon2 - Lon1);

            return R * Math.Acos(A * B + C * D * E);
        }

Kdyby někdo našel případnou chybu nebo už se s tímto problémem setkal budu moc vděčný za jakoukoliv připomínku.

Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Funkce Sin a Cos pracují s úhly v radiánech, ne ve stupních. Takže to před použitím musíte převést.

Navíc tenhle výpočet nezohledňuje zploštění Země, použijte ten přesnější.

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback