Вы используете неправильную формулу. Вот почему вы не получите правильный результат. Используемая вами формула используется для вычисления расстояния между двумя точками в той же плоскости и может быть доказана с использованием теоремы Пифагора. Однако, когда мы хотим рассчитать расстояние между двумя точками на поверхности сферы (мы предполагаем, что земля является идеальной сферой), мы не используем этот тип.
Here - ссылка на правильную формулу и реализацию в JavaScript.
Ниже я есть реализация в C#
Сначала мы должны определить метод, который будет принимать в качестве параметра угол, и он будет возвращать его значение в радианах.
public double ConvertToRadians(double angle)
{
return (Math.PI/180) * angle;
}
Тогда мы могли бы определить наш метод для вычисления расстояния:
public static double DistanceTo(double latitude1,
double longitude1,
double latitude2,
double longitude2)
{
// The radius of the earth in Km.
// You could also use a better estimation of the radius of the earth
// using decimals digits, but you have to change then the int to double.
int R = 6371;
double f1 = ConvertToRadians(latitude1);
double f2 = ConvertToRadians(latitude2);
double df = ConvertToRadians(latitude1-latitude2);
double dl = ConvertToRadians(longitude1-longitude2);
double a = Math.Sin(dφ/2) * Math.Sin(dφ/2) +
Math.Cos(f1) * Math.Cos(f2) *
Math.Sin(dλ/2) * Math.Sin(dλ/2);
double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1-a));
// Calculate the distance.
double d = R * c;
return d;
}
Если вы не хотите, чтобы реализовать его, как указано выше, можно использовать GeoCoordinate
класс, который
Представляет собой географическое местоположение, которое определяется широтой и координатами долготы . Может также включать в себя высоту, точность, скорость и информацию о курсе.
Если вы сделаете это, то:
var point1 = new GeoCoordinate(latitude1, longitude1);
var point2 = new GeoCoordinate(latitude2, latitude2);
и тогда вы получите расстояние между point1
и point2
, как показано ниже:
point1.GetDistanceTo(point2);
Эта формула дает вам смещение между двумя точками, а не расстоянием. – bit
@bit Эта формула не дает вам ничего полезного. – DavidG
Есть ли какая-нибудь формула, которая дает мне расстояние? – ahmad