現在、2地点の(緯度, 経度)を入力すると距離を算出するプログラムを書いています。
プログラムは以下に示す通りです。
python
1def cal_distance(point_A, point_B): 2 # 緯度経度をラジアンに変換 3 pole_radius = 6356752.314245 # 極半径 4 equator_radius = 6378137.0 5 rad_pointA = np.radians(point_A) 6 rad_pointB = np.radians(point_B) 7 lat_pointA = rad_pointA[:, 0:1] 8 lon_pointA = rad_pointA[:, 1:2] 9 lat_pointB = rad_pointB[:, 0:1] 10 lon_pointB = rad_pointB[:, 1:2] 11 12 lat_difference = lat_pointA - lat_pointB # 緯度差 13 lon_difference = lon_pointA - lon_pointB # 経度差 14 lat_average = (lat_pointA + lat_pointB) / 2 # 平均緯度 15 16 e2 = (np.power(equator_radius, 2) - np.power(pole_radius, 2)) \ 17 / np.power(equator_radius, 2) # 第一離心率^2 18 w = np.sqrt(1- e2 * np.power(np.sin(lat_average), 2)) 19 20 m = equator_radius * (1 - e2) / np.power(w, 3) # 子午線曲率半径 21 22 n = equator_radius / w # 卯酉線曲半径 23 24 distance = np.sqrt(np.power(m * lat_difference, 2) \ 25 + np.power(n * lon_difference * np.cos(lat_average), 2)) # 距離計測 26 print(distance / 1000)
プログラムにおいて、すべての値が正の時(2点がともに北緯、東経にある場合)は国土地理院のサイトで計測した値に近い出力となるのですが、負の値(2点のどちらかが南緯or西経にある場合)において、上記サイトで計測した値と3000km近く離れた値となってしまいます。
数式を見直してみたのですが、自分では解決できませんでした。
数式等の説明については以下を参考にしました。
距離計算サイト
この問題について、解決法を教えていただけるとありがたいです。
数学的な質問となってしまい申し訳ありませんが、回答よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。