예제 #1
0
        public Coordinate travel(double bearingDegrees, double distance)
        {
            double er = Kilometers.create().convertTo(6366.707);

            double distRatio       = distance / er;
            double distRatioSine   = Math.Sin(distRatio);
            double distRatioCosine = Math.Cos(distRatio);

            //get lat and long in radians
            double startLatRad = latitude * Math.PI / 180;
            double startLonRad = longitude * Math.PI / 180;

            double startLatCos = Math.Cos(startLatRad);
            double startLatSin = Math.Sin(startLatRad);

            double bearingRadians = bearingDegrees * Math.PI / 180;

            double endLatRads = Math.Asin((startLatSin * distRatioCosine)
                                          + (startLatCos * distRatioSine * Math.Cos(bearingRadians)));

            double endLonRads = startLonRad + Math.Atan2(Math.Sin(bearingRadians)
                                                         * distRatioSine * startLatCos,
                                                         distRatioCosine - startLatSin * Math.Sin(endLatRads));

            return(create(endLatRads / Math.PI * 180, endLonRads / Math.PI * 180));
        }
 public static Kilometers create()
 {
     if (unit == null)
     {
         unit = new Kilometers();
     }
     return(unit);
 }
예제 #3
0
        public double distance(Coordinate coord)
        {
            double er = Kilometers.create().convertTo(6366.707);

            double latFrom = toRadians(getLat());
            double latTo   = toRadians(coord.getLat());
            double lngFrom = toRadians(getLng());
            double lngTo   = toRadians(coord.getLng());

            double d = Math.Acos(Math.Sin(latFrom) * Math.Sin(latTo)
                                 + Math.Cos(latFrom) * Math.Cos(latTo) * Math.Cos(lngTo - lngFrom))
                       * er;

            return(d);
        }