- ベストアンサー
経度緯度からの位置の計算方法を教えてください。
お世話になります。 ある経度緯度から 真北を軸にして時計回りに角度がわかっていて 距離もわかっている場合の経度緯度の出し方を教えてください。 たとえば 緯度35度00分00秒 経度143度00分00秒の場所から 真北から時計回りに250度に5km進んだ場合の 緯度経度の出し方を知りたいのです。 よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
英語のサイトですが,こちらにアルゴリズムが出ています。(地球を回転楕円体ではなく球と見なしていますので念のため。) ``Lat/lon given radial and distance" http://williams.best.vwh.net/avform.htm#LL 基準地点の緯度,経度をそれぞれlat1, lon1, また,求める地点の緯度,経度をそれぞれlat, lonとします。 そこまでの距離がd, 方位角はtcとします。 なお,角度の単位は基本的にラジアンにしてください。 また,距離も角度(ラジアン)で表します。いいかえれば,地球の平均半径6371kmが距離1となります。 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc)) IF (cos(lat)=0) lon=lon1 // endpoint a pole ELSE lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi ENDIF mod(x,y)はx/yの余りです。asinはarcsinのこと,piはもちろんπ。 ためしに,ご質問の値で計算してみましょう。 lat1=35°=35π/180,lon1=143°=143π/180 d=5km=5/6371,tc=250°=250π/180 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc)) =asin(sin(35π/180)*cos(5/6371)+cos(35π/180)*sin(5/6371)*cos(250π/180) =asin(0.57357643635*0.99999969204+0.819152044288*0.000784806072317*(-0.342020143322)) =asin 0.573356383341 =0.610596628332 rad (=34°59′04″.595238) cos(lat)=0ではないので, lon=mod(lon1-asin(sin(tc)*sin(d)/cos(lat))+pi,2*pi)-pi =mod(143π/180-asin(sin(250π/180)*sin(5/6371)/cos(0.610596628))+π, 2π)-π =mod(2.49582083035-asin(-0.93992620787*0.000784806072317/0.819306083025)+π. 2π)-π =mod(2.49582083-0.000900123396825+π,2π)-π =mod(5.63831360734,2π)-π =5.63831360734-π =2.49672095375 rad (=143°03′05″.66378) 「あれ,250°だったら西の方に進むのに経度が増えてる?」と思われたかも知れませんが,実はもう一つ注意点があって,「緯度は北が正,経度は西が正」なのです。 だから,もし東経143°だったらlon1=-143π/180とする必要があります。 そう考えると,さっきの計算もどうやら合ってそうな感じがします。 (関数電卓を叩いて,中間結果も確認しながら計算したので,末尾の桁のほうで多少の誤差があるかも知れません) なお,この方法では2点の経度差がπ/2(つまり90°)を超えないことが前提になっています。 π/2をこえても構わない方法は次の通りだそうです。 記号の意味は上と同じです。 atan2(x, y)という関数が出てきます。原点と点(x,y)を結ぶ直線の傾きを返しますので,結果としてはatan(y/x)と同じですが,xが0のときもエラーにならないのが違いです。 lat=asin(sin(lat1)*cos(d)+cos(lat1)*sin(d)*cos(tc)) dlon=atan2(sin(tc)*sin(d)*cos(lat1), cos(d)-sin(lat1)*sin(lat)) lon=mod(lon1-dlon+pi, 2*pi)-pi ここのサイトには,他にも緯度・経度・距離・方位角などに関する計算方法が多数載っていて便利です。
その他の回答 (2)
- debukuro
- ベストアンサー率19% (3634/18947)
中分緯度航法 距離掛けるcos方位で緯度差 距離掛けるsin方位で経度差 経度差掛けるcos中分緯度で東西距 方位は北または南から90度までの範囲 短距離ならこれで十分 距離が長くなると誤差が生ずるし赤道を越えるときはこの式は使えない その場合は漸長緯度航法か大圏航法による 漸長緯度航法では方位が東西に近い場合は誤差が大きくなる
お礼
お返事ありがとうございます。 地図の計算とは何種類もの方法があると知らず驚きました。 こちらもためになりました。
- Yosha
- ベストアンサー率59% (172/287)
ある地点から、方位、距離で与えられた地点の緯度経度を計算で求めるときに問題となるのが、求める地点の精度をどの程度要求するのか、および2点間の距離がどのくらいか(長距離か短距離かということ)により計算式を変える必要があります。 地球は完全な球体でなく南北軸の短い回転楕円体ですので精度を必要とする場合の計算式は何種類かありますが、いずれも大変に面倒な計算式となっています。 通常、小数点を含まない秒単位までの計算(1秒の長さは30m強、誤差±20mくらい)であれば、球面三角法で計算しても問題はないと思います。 どんな目的で知りたい地点の緯度経度を求めようとするのかわかりませんが、例にあげられたくらいの距離でしたら、計算式で求めるより国土地理院の1~5万分の1の地図上にプロットして求めたほうが確実で精度も1桁くらい上がります。 また、インターネットのグーグルアースなどが利用できれば目的地点の緯度経度をわりと高い精度で求めることができます。 球面三角法での計算式が(でよければ)必要でしたら要求してください。
お礼
球面三角法についてWIKIで調べてみましたが いくつもの計算方法が出てきて手が出せませんでしたが ためになりました。 ありがとうございます。
お礼
ありがとうございます。 今日一日かけてこちらの方法で検証してみて うまくいきました。 >なお,この方法では2点の経度差がπ/2(つまり90°)を超えないことが前提になっています。 今回使うには超えませんのでとりあえずその前までの 計算方法で作成しました。 ありがとうございます。