Calculate distance between 2 GPS coordinates

前端 未结 29 3572
青春惊慌失措
青春惊慌失措 2020-11-21 23:34

How do I calculate distance between two GPS coordinates (using latitude and longitude)?

29条回答
  •  面向向阳花
    2020-11-22 00:08

        private double deg2rad(double deg)
        {
            return (deg * Math.PI / 180.0);
        }
    
        private double rad2deg(double rad)
        {
            return (rad / Math.PI * 180.0);
        }
    
        private double GetDistance(double lat1, double lon1, double lat2, double lon2)
        {
            //code for Distance in Kilo Meter
            double theta = lon1 - lon2;
            double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
            dist = Math.Abs(Math.Round(rad2deg(Math.Acos(dist)) * 60 * 1.1515 * 1.609344 * 1000, 0));
            return (dist);
        }
    
        private double GetDirection(double lat1, double lon1, double lat2, double lon2)
        {
            //code for Direction in Degrees
            double dlat = deg2rad(lat1) - deg2rad(lat2);
            double dlon = deg2rad(lon1) - deg2rad(lon2);
            double y = Math.Sin(dlon) * Math.Cos(lat2);
            double x = Math.Cos(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) - Math.Sin(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(dlon);
            double direct = Math.Round(rad2deg(Math.Atan2(y, x)), 0);
            if (direct < 0)
                direct = direct + 360;
            return (direct);
        }
    
        private double GetSpeed(double lat1, double lon1, double lat2, double lon2, DateTime CurTime, DateTime PrevTime)
        {
            //code for speed in Kilo Meter/Hour
            TimeSpan TimeDifference = CurTime.Subtract(PrevTime);
            double TimeDifferenceInSeconds = Math.Round(TimeDifference.TotalSeconds, 0);
            double theta = lon1 - lon2;
            double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) + Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
            dist = rad2deg(Math.Acos(dist)) * 60 * 1.1515 * 1.609344;
            double Speed = Math.Abs(Math.Round((dist / Math.Abs(TimeDifferenceInSeconds)) * 60 * 60, 0));
            return (Speed);
        }
    
        private double GetDuration(DateTime CurTime, DateTime PrevTime)
        {
            //code for speed in Kilo Meter/Hour
            TimeSpan TimeDifference = CurTime.Subtract(PrevTime);
            double TimeDifferenceInSeconds = Math.Abs(Math.Round(TimeDifference.TotalSeconds, 0));
            return (TimeDifferenceInSeconds);
        }
    

提交回复
热议问题