2014-10-02 2 views
-1

мне нужно найти расстояние (км) между 2 точками в окнах 8.1 приложения с использованием C#, так что я использовал функцию ниже, но возвращаемое значение не исправить любую помощь, пожалуйста:Как рассчитать расстояние между 2 координатами

public static double DistanceTo(Double latitude1, Double longitude1, Double latitude2, Double longitude2) 
    { 
     var a = latitude1 - latitude2; 
     var b = longitude1 - longitude2; 

     return Math.Sqrt(a * a + b * b); 
    } 
+2

Эта формула дает вам смещение между двумя точками, а не расстоянием. – bit

+0

@bit Эта формула не дает вам ничего полезного. – DavidG

+0

Есть ли какая-нибудь формула, которая дает мне расстояние? – ahmad

ответ

3

Вы используете неправильную формулу. Вот почему вы не получите правильный результат. Используемая вами формула используется для вычисления расстояния между двумя точками в той же плоскости и может быть доказана с использованием теоремы Пифагора. Однако, когда мы хотим рассчитать расстояние между двумя точками на поверхности сферы (мы предполагаем, что земля является идеальной сферой), мы не используем этот тип.

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); 
+0

Это хорошее объяснение. Вы также должны добавить его к исходному вопросу: http://stackoverflow.com/q/6366408/1224069 –

+0

@PhilipPittle спасибо вам, что вы очень чувак. – Christos

1

попробовать что-то вроде этого:

var coord1 = new GeoCoordinate(lat1, long1); 
var coord2 = new GeoCoordinate(lat2, long2); 

var distance = coord1.GetDistanceTo(coord2); 

Посмотрите here. Кажется, что дубликат

Смежные вопросы