緯度による距離計算-Java

1063 ワード

/**
 *           ,        (   KM)
 *    double  
 *  long1   1  
 *  lat1    1  
 *  long2   2  
 *  lat2    2  
 */
public class DistanceUtils {
 
  private static final double EARTH_RADIUS = 6378.137;
 
  private static double rad(double d){
      return d * Math.PI / 180.0;
  }
  
  /**
   *           ,        
   * @param longitudeUser       
   * @param latitudeUser      
   * @param longitudeBook     
   * @param latitudeBook      
   * @return          
   */
  public static double GetDistance(double longitudeUser, double latitudeUser, double longitudeBook, double latitudeBook) {
      double a, b, d, sa2, sb2;
      latitudeUser = rad(latitudeUser);
      latitudeBook = rad(latitudeBook);
      a = latitudeUser - latitudeBook;
      b = rad(longitudeUser - longitudeBook);
 
      sa2 = Math.sin(a / 2.0);
      sb2 = Math.sin(b / 2.0);
      d = 2   * EARTH_RADIUS
              * Math.asin(Math.sqrt(sa2 * sa2 + Math.cos(latitudeUser)
              * Math.cos(latitudeBook) * sb2 * sb2));
      return d;
  }
 
}