AbstractedSheep.ShuttleTrackerWorld.Coordinate.DistanceTo C# (CSharp) Метод

DistanceTo() публичный Метод

Calculates the distance in miles to another Coordinate
public DistanceTo ( Coordinate c ) : double
c Coordinate The Coordinate to measure the distance to.
Результат double
        public double DistanceTo(Coordinate c)
        {
            double earthRadius = 3956; // Miles
            double dlong = DegToRad(c.longitude - this.longitude);
            double dlat = DegToRad(c.latitude - this.latitude);
            double lat1 = DegToRad(this.latitude);
            double lat2 = DegToRad(c.latitude);

            double a = Math.Pow(Math.Sin(dlat / 2.0), 2) +
                    Math.Pow(Math.Sin(dlong / 2.0), 2) * Math.Cos(lat1) * Math.Cos(lat2);
            double b = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1.0 - a));
            return earthRadius * b;
        }

Usage Example

Пример #1
0
        internal void SnapToRoute(Route r)
        {
            Coordinate c1, c2;
            Coordinate closestPoint = null, tempClosestPoint = null;
            int        precedingPointId = -1;
            double     shortestDistance = 10000, tempShortestDistance = 10000;

            for (int i = 0; i < r.coordinates.Count; i++)
            {
                if (i == 0)
                {
                    c1 = r.coordinates.Last();
                }
                else
                {
                    c1 = r.coordinates[i - 1];
                }

                c2 = r.coordinates[i];

                tempClosestPoint     = this.Location.ClosestPoint(c1, c2);
                tempShortestDistance = tempClosestPoint.DistanceTo(this.Location);

                if (tempShortestDistance < shortestDistance)
                {
                    shortestDistance = tempShortestDistance;
                    closestPoint     = tempClosestPoint;
                    precedingPointId = i == 0 ? r.coordinates.Count - 1 : i;
                }
            }

            this.snappedCoordinate.Add(r.Id, closestPoint);
            this.precedingCoordinate.Add(r.Id, precedingPointId);
            this.precedingCoordinateDistance.Add(r.Id, r.coordinates[precedingPointId].DistanceTo(Location));
        }