Ваша формула почти верна, но вы должны поменять местами параметры долготы и широты
Console.WriteLine(DistanceAlgorithm.DistanceBetweenPlaces(-118.291994, 36.578581, -116.83171, 36.23998)); // = 136 km
Я использую упрощенную формулу:
// cos(d) = sin(φА)·sin(φB) + cos(φА)·cos(φB)·cos(λА − λB),
// where φА, φB are latitudes and λА, λB are longitudes
// Distance = d * R
public static double DistanceBetweenPlaces(double lon1, double lat1, double lon2, double lat2)
{
double R = 6371; // km
double sLat1 = Math.Sin(Radians(lat1));
double sLat2 = Math.Sin(Radians(lat2));
double cLat1 = Math.Cos(Radians(lat1));
double cLat2 = Math.Cos(Radians(lat2));
double cLon = Math.Cos(Radians(lon1) - Radians(lon2));
double cosD = sLat1*sLat2 + cLat1*cLat2*cLon;
double d = Math.Acos(cosD);
double dist = R * d;
return dist;
}
Проверка:
(расстояние на экваторе): долготы 0, 100;Широты = 0,0;Расстояние между местами (0, 0, 100, 0) = 11119,5 км
(расстояние на северном полюсе): долготы 0, 100;Широты = 90,90;Расстояние между местами (0, 90, 100, 90) = 0 км
Долготы: -118,291994, -116,83171;Широты: 36,578581, 36,23998 = 135,6 км
Долготы: 36,578581, 36,23998;Широты: -118,291994, -116,83171 = 163,2 км
С наилучшими пожеланиями
PS На веб-сайте , который вы используете для сравнения результатов, для каждой точки первое текстовое поле является широтой, второе- долгота