wasSharp – Rev 14

Subversion Repositories:
Rev:
///////////////////////////////////////////////////////////////////////////
//  Copyright (C) Wizardry and Steamworks 2016 - License: GNU GPLv3      //
//  Please see: http://www.gnu.org/licenses/gpl.html for legal details,  //
//  rights of fair usage, the disclaimer and warranty conditions.        //
///////////////////////////////////////////////////////////////////////////

using System;

namespace wasSharp.Geo
{
    public static class GeodesicExtensions
    {
        public static Distance HaversineDistanceTo(this GeographicCoordinate sourceGeographicCoordinate,
            GeographicCoordinate targetGeographicCoordinate)
        {
            return HaversineDistanceTo(sourceGeographicCoordinate, targetGeographicCoordinate, DistanceUnits.KILOMETERS);
        }

        public static Distance HaversineDistanceTo(this GeographicCoordinate sourceGeographicCoordinate,
            GeographicCoordinate targetGeographicCoordinate,
            DistanceUnits distanceUnits)
        {
            var sourcePhi = Math.PI*sourceGeographicCoordinate.Latitude/180;
            var targetPhi = Math.PI*targetGeographicCoordinate.Latitude/180;
            var deltaPhi = Math.PI*(targetPhi - sourcePhi)/180;
            var deltaLam = Math.PI*(targetGeographicCoordinate.Longitude - sourceGeographicCoordinate.Longitude)/180;


            var a = Math.Sin(deltaPhi/2)*Math.Sin(deltaPhi/2) +
                    Math.Cos(sourcePhi)*Math.Cos(targetPhi)*
                    Math.Sin(deltaLam/2)*Math.Sin(deltaLam/2);

            var c = 2*Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));

            return new Distance(Constants.EARTH_MEAN_RADIUS.Meters*c);
        }
    }
}

Generated by GNU Enscript 1.6.5.90.