Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calculating the distance between 2 points in c#

I am trying to sort out a method to calculate the distance between 2 points in c#.

This is the code I have been trying though I fear the answer I get is not correct.

static void Main()
    {
        //postcode australia 2600 -> 3000
        float latA = -31.997976f;
        float longA = 115.762877f;
        float latB = -31.99212f;
        float longB = 115.763228f;
        decimal distance = (DistanceBetween(latA, latB, longA, longB));
        Console.WriteLine("Distance is" + distance);
        Console.ReadLine();
    }

    static decimal DistanceBetween(float latA, float longA, float latB, float longB)
    {
        var RadianLatA = Math.PI * latA / 180;
        var RadianLatb = Math.PI * latB / 180;
        var RadianLongA = Math.PI * longA / 180;
        var RadianLongB = Math.PI * longB / 180;

        double theDistance = (Math.Sin(RadianLatA)) *
                Math.Sin(RadianLatb) +
                Math.Cos(RadianLatA) *
                Math.Cos(RadianLatb) *
                Math.Cos(RadianLongA - RadianLongB);

        return Convert.ToDecimal(((Math.Acos(theDistance) * (180.0 / Math.PI)))) * 69.09M * 1.6093M;
    }

this was adapted from a response found on this site here Distance between addresses

Any thoughts on what is going wrong/

Thanks Ryan

like image 620
user1672867 Avatar asked Mar 27 '14 11:03

user1672867


People also ask

What is the formula for distance between two points?

Distance between two points is the length of the line segment that connects the two points in a plane. The formula to find the distance between the two points is usually given by d=√((x2 – x1)² + (y2 – y1)²). This formula is used to find the distance between any two points on a coordinate plane or x-y plane.

How far are two points a/b and c/d from each other?

In two- and three-dimensional Euclidean space, the distance formulas for points in rectangular coordinates are based on the Pythagorean theorem. The distance between the points (a,b) and (c,d) is given by Square root of√(a − c)2 + (b − d)2.

How is Manhattan distance C calculated?

The Manhattan distance and the Euclidean distance between points A ( 1 , 1 ) A(1,1) A(1,1) and B ( 5 , 4 ) B(5,4) B(5,4). The Manhattan distance is longer, and you can find it with more than one path. The Pythagorean theorem states that c = a 2 + b 2 c = \sqrt{a^2+b^2} c=a2+b2 .


2 Answers

The class I usually use is GeoCoordinate

double latA = -31.997976f;
double longA = 115.762877f;
double latB = -31.99212f;
double longB = 115.763228f;

var locA = new GeoCoordinate(latA, longA);
var locB = new GeoCoordinate(latB, longB);
double distance = locA.GetDistanceTo(locB ); // metres
like image 193
Liath Avatar answered Sep 20 '22 06:09

Liath


double lat1 = {};
double lat2 = {};
double lon1 = {};
double lon2 = {};

var R = 6376.5000; //Km
lat1 = lat1.ToRad();
lat2 = lat2.ToRad();
lon1 = lon1.ToRad();
lon2 = lon2.ToRad();
var dLat = lat2 - lat1;
var dLon = lon2 - lon1;
var a = Math.Pow(Math.Sin(dLat / 2), 2) + (Math.Pow(Math.Sin(dLon / 2), 2) * Math.Cos(lat1) * Math.Cos(lat2));
var c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
var distance = R * c;

public double ToRad(this double degs) {
    return degs * (Math.PI/180.0);
}

Input expects doubles.

This is the haversine formula, it's used to calculate the distances on our globe between two points. This is the distance in a straight line, if you need the distance on a path you will have to find all points on that path and then calculate the distances between each two points and then take the sum of that.

like image 40
woutervs Avatar answered Sep 21 '22 06:09

woutervs