Java, 経度緯度から2点間の距離と方角(方向・方位)を求める
2010年11月16日
2点間の距離を求める関数
引数 precision
で精度(小数点以下の桁数)を指定する。
public static float getDistance(double lat1, double lng1, double lat2, double lng2, int precision) { int R = 6371; // km double lat = Math.toRadians(lat2 - lat1); double lng = Math.toRadians(lng2 - lng1); double A = Math.sin(lat / 2) * Math.sin(lat / 2) + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.sin(lng / 2) * Math.sin(lng / 2); double C = 2 * Math.atan2(Math.sqrt(A), Math.sqrt(1 - A)); double decimalNo = Math.pow(10, precision); double distance = R * C; distance = Math.round(decimalNo * distance / 1) / decimalNo; return (float) distance; }
2点間を結ぶ方角を求める関数
北を 0
として 360
までで、方角を表わす。
public static int getDirection(double latitude1, double longitude1, double latitude2, double longitude2) { double lat1 = Math.toRadians(latitude1); double lat2 = Math.toRadians(latitude2); double lng1 = Math.toRadians(longitude1); double lng2 = Math.toRadians(longitude2); double Y = Math.sin(lng2 - lng1) * Math.cos(lat2); double X = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1) * Math.cos(lat2) * Math.cos(lng2 - lng1); double deg = Math.toDegrees(Math.atan2(Y, X)); double angle = (deg + 360) % 360; return (int) (Math.abs(angle) + (1 / 7200)); }
参考:地図から距離、方角方位、面積を得る – Google Maps
Haversine formula – Wikipedia, the free encyclopedia
Calculate distance and bearing between two Latitude/Longitude points using Haversine formula in JavaScript