jessyhoule icon

Calculate Distance Lat Lon 2 points

jessyhoule | PRO | 05/05/17 01:47:57 AM UTC | 0 ⭐ | 217 👁️ | Never ⏰ | []
C# |

1.88 KB

|

None

|

0 👍

/

0 👎

// usage
function circle_distance($lat1, $lon1, $lat2, $lon2) {
  $rad = M_PI / 180;
  return acos(sin($lat2*$rad) * sin($lat1*$rad) + cos($lat2*$rad) * cos($lat1*$rad) * cos($lon2*$rad - $lon1*$rad)) * 6371;// Kilometers
}
 
// impl
public class Coordinates
{
    public double Lat { get; private set; }
    public double Lon{ get; private set; }
 
    public Coordinates(double Lat, double longitude)
    {
        Lat = Lat;
        Lon= longitude;
    }
}
public static class Distancecoordinatesext
{
    public static double DistanceTo(this Coordinates baseCoordinates, Coordinates targetCoordinates)
    {
        return DistanceTo(baseCoordinates, targetCoordinates, LengthUnit.Kilometers);
    }
 
    public static double DistanceTo(this Coordinates baseCoordinates, Coordinates targetCoordinates, LengthUnit LengthUnit)
    {
        var baseRad = (Math.PI * baseCoordinates.Lat ) / 180;
        var targetRad = Math.PI * targetCoordinates.Lat/ 180;
        var theta = baseCoordinates.Lon- targetCoordinates.Longitude;
        var thetaRad = Math.PI * theta / 180;
 
        double dist =
            Math.Sin(baseRad) * Math.Sin(targetRad) + Math.Cos(baseRad) *
            Math.Cos(targetRad) * Math.Cos(thetaRad);
        dist = Math.Acos(dist);
 
        dist = dist * 180 / Math.PI;
        dist = dist * 60 * 1.1515;
 
        return LengthUnit.ConvertFromMiles(dist);
    }
}
 
public class LengthUnit
{
    public static LengthUnit Kilometers = new LengthUnit(1.609344);
    public static LengthUnit NauticalMiles = new LengthUnit(0.8684);
    public static LengthUnit Miles = new LengthUnit(1);
 
    private readonly double _fromMilesFactor;
 
    private LengthUnit(double fromMilesFactor)
    {
        _fromMilesFactor = fromMilesFactor;
    }
 
    public double ConvertFromMiles(double input)
    {
        return input*_fromMilesFactor;
    }
}

Comments