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
|