Hubenyさん
そこそこの精度で距離を計測することができます。
用例
地点1と地点2の距離を求めたいなら、それぞれの緯度経度をdoubleで渡してあげます。戻り値もdoubleです。単位はメートル。
double distance = hubeny_distance (地点1の緯度, 地点1の経度, 地点2の緯度, 地点2の経度)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
/// <summary> /// Hubenyの公式による2点間の距離計測 /// </summary> /// <param name="d_lat0"></param> /// <param name="d_long0"></param> /// <param name="d_lat1"></param> /// <param name="d_long1"></param> /// <returns></returns> public double hubeny_distance(double d_lat0, double d_long0, double d_lat1, double d_long1) { //d_lat0:出発点緯度(度) //d_long0:出発点経度(度) //d_lat1:到達点緯度(度) //d_long1:到達点経度(度) //d_distance:2点の距離(m) double Rx = 6378137.0; //赤道半径(m) double E2 = 0.00669437999019758; //第2離心率(e^2) double mnum = 6335439.32729246; var my = Math.PI / 180.0 * ((d_lat0 + d_lat1) / 2.0); var dy = Math.PI / 180.0 * (d_lat0 - d_lat1); var dx = Math.PI / 180.0 * (d_long0 - d_long1); var sin = Math.Sin(my); var w = Math.Sqrt(1.0 - E2 * sin * sin); var m = mnum / Math.Pow(w,3); var n = Rx / w; var dym = dy * m; var dxncos = dx * n * Math.Cos(my); double d_distance = Math.Sqrt(dym * dym + dxncos * dxncos); return d_distance/* = d_distance * 1.00045*/; //日本周辺だけで使う場合。ヒュベニの誤差をごまかす } |
One thought on “C#で距離を計測する:Hubenyの公式”
Comments are closed.