Javaプログラミングによる経緯度間距離の取得方法


本論文の例は、Javaプログラミングによる緯度間距離の取得方法を説明する。皆さんに参考にしてあげます。具体的には以下の通りです。

public class GeoUtil {
 /**
  *                 
  * 
  * @param lng
  *    
  * @param lat
  *    
  * @param distance
  *    (    )
  * @return [lng1,lat1, lng2,lat2]       (lng1,lat1)    (lng2,lat2)
  */
 public static double[] getRectangle(double lng, double lat, long distance) {
  float delta = 111000;
  if (lng != 0 && lat != 0) {
   double lng1 = lng - distance
     / Math.abs(Math.cos(Math.toRadians(lat)) * delta);
   double lng2 = lng + distance
     / Math.abs(Math.cos(Math.toRadians(lat)) * delta);
   double lat1 = lat - (distance / delta);
   double lat2 = lat + (distance / delta);
   return new double[] { lng1, lat1, lng2, lat2 };
  } else {
   // TODO ZHCH   0      
   double lng1 = lng - distance / delta;
   double lng2 = lng + distance / delta;
   double lat1 = lat - (distance / delta);
   double lat2 = lat + (distance / delta);
   return new double[] { lng1, lat1, lng2, lat2 };
  }
 }
 /**
  *           
  * 
  * @param lat1
  * @param lng1
  * @param lat2
  * @param lng2
  * @return
  */
 public static double getDistanceOfMeter(double lat1, double lng1,
   double lat2, double lng2) {
  double radLat1 = rad(lat1);
  double radLat2 = rad(lat2);
  double a = radLat1 - radLat2;
  double b = rad(lng1) - rad(lng2);
  double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
    + Math.cos(radLat1) * Math.cos(radLat2)
    * Math.pow(Math.sin(b / 2), 2)));
  s = s * EARTH_RADIUS;
  s = Math.round(s * 10000) / 10;
  return s;
 }
 
 private static double rad(double d) {
  return d * Math.PI / 180.0;
 }
 /**
  *     :6378.137KM
  */
 private static double EARTH_RADIUS = 6378.137;
}

本論文で述べたように、皆さんのJavaプログラムの設計に役に立ちます。