- package osm.surveyor.util;
-
- /**
- * The MIT License (MIT)
- * Copyright(C) 2007-2012 やまだらけ
- * http://yamadarake.jp/trdi/report000001.html
- * 「Cords.java」を改変
- * 2016-10-03
- *
- * @author やまだらけ yama_darake@yahoo.co.jp
- *
- */
- public class GeoDistance {
-
- public static final double GRS80_A = 6378137.000; // 赤道半径(m)
- public static final double GRS80_E2 = 0.00669438002301188;
- public static final double GRS80_MNUM = 6335439.32708317; //
-
- public static final double WGS84_A = 6378137.000;
- public static final double WGS84_E2 = 0.00669437999019758;
- public static final double WGS84_MNUM = 6335439.32729246;
-
- /**
- * 角度(180度)をラジアン(2π)に変換する
- * @param deg
- * @return
- */
- public static double deg2rad(double deg){
- return deg * Math.PI / 180.0;
- }
-
- /**
- * 距離(m)を返す
- * @param lat1
- * @param lng1
- * @param lat2
- * @param lng2
- * @return
- */
- public static double calcDistHubeny(double lat1, double lng1,
- double lat2, double lng2){
- double my = deg2rad((lat1 + lat2) / 2.0); // 平均緯度
- double dy = deg2rad(lat1 - lat2); // 2点間の緯度
- double dx = deg2rad(lng1 - lng2); // 2点間の経度
-
- double sin = Math.sin(my);
- double w = Math.sqrt(1.0 - GRS80_E2 * sin * sin);
- double m = GRS80_MNUM / (w * w * w);
- double n = GRS80_A / w;
-
- double dym = dy * m;
- double dxncos = dx * n * Math.cos(my);
-
- return Math.sqrt(dym * dym + dxncos * dxncos);
- }
-
-
- public static void main(String[] args){
- System.out.println("Coords Test Program");
- double lat1, lng1, lat2, lng2;
-
- lat1 = Double.parseDouble(args[0]);
- lng1 = Double.parseDouble(args[1]);
- lat2 = Double.parseDouble(args[2]);
- lng2 = Double.parseDouble(args[3]);
-
- double d = calcDistHubeny(lat1, lng1, lat2, lng2);
-
- System.out.println("Distance = " + d + " m");
- }
- }