取得したい値
- 地図上に緯度,緯度で2点を指定
- 2点を直線で結び
- 直線上の真ん中の緯度経度の情報を取得
ヒントになる情報だけでもいいので教えていただけると助かります。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
地球を原点中心、半径1の球面と仮定し、経度をθ(ただし東経を正、西経を負とする)、緯度をφ(ただし北緯を正、南緯を負とする)とする球面の極座標表示として考えます。
地球上の任意の緯度・経度の点を直交座標系に直すとその座標は(cosφcosθ, cosφsinθ, sinφ)となります。
これを2点とも表します。そうしてできた2点の座標を簡単のためA(x1, y1, z1),B(x2, y2, z2)とします。
原点と対象の2点がなす平面と球面の交線とで扇形ができます。2点の真ん中はこの扇形の中心角を2等分する直線上にあります。
四角形OACBが平行四辺形になるよう点Cを取ると、中心角である角BOAの二等分線は半直線OCとなり、その方向ベクトルは(→OC)=(→OA)+(→OB)です。この時Cの座標はC(x1+x2, y1+y2, z1+z2)です。
この半直線と半径1の球面との交点が求める真ん中の点になります。先ほどのOCベクトルの大きさが1になるように実数倍すれば目的の点の座標になります。
後はそうして求まった座標から、θとφに逆変換します。z座標からφが求まり、x,yいずれかからθが求まります。それが緯度、経度となります。
投稿2017/10/17 18:54
総合スコア20649
0
その地図が平面であるならば、単純に緯度及び経度のそれぞれの中央点を取ればよい、ことになります。
が、実際の地球は球面ですから、二点間を結ぶ「直線」は、実際には2点を通る、大圏という円弧になります。
地球は厳密に言えば球ですらない(梨形)のですが、さすがにそこは近似させて計算します。
球面三角形の公式とか、大圏航法とかを調べるとよいです。
投稿2017/10/17 13:15
総合スコア13703
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
2017/10/18 AM更新
以下は、私の失敗したダメな見本です。ダメな根拠は写真とリンクで貼ります。
赤: 80,0 地点
青:80,180 地点
緑:0,90 地点 <--中間地点
単に二次元座標の平均をしてしまうと 80,90…写真でいうグリーンランドとカナダの海の上くらいに来てしまいます。確かに二点から同じ距離(真ん中)にはありますが何か違う感じがしますね。
いじわるな言い方をすれば、地球を球とした場合球の表面上の二点は直線では結べない(直線は宇宙の彼方、無理に直線で結ぶと地中に埋まる)ですが、以下の2つの答えのうち
- 「メルカトル図法」でいう二点の中心
- 「地球儀上を定規でなぞった場合」の二点の中心
地球儀上を定規でなぞった場合」の二点の中心(tacsheavenさん、swordoneさん)のやり方がはるかに融通が利く答えだと思います。単に二次元座標の中心を使うのは避けてください。
難しく考えるとめんどくさそうですね。
5mm方眼のノートに十字に線を引いて、
- X軸を経度(西経ならマイナス、東経ならプラス)をプロット
- Y軸を緯度(南緯ならマイナス、北緯ならプラス)をプロット
スタート地点をs(x1,y1)、ゴール地点をg(x2,y2)とすると、
中間地点Mは((x1+x2)/2,(y1+y2)/2)ですね。
Javaは分かりませんがこんなのであっていますか?
投稿2017/10/17 13:09
編集2017/10/17 22:57退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/17 14:13
退会済みユーザー
2017/10/17 15:54
退会済みユーザー
2017/10/17 16:52
2017/10/17 22:30
退会済みユーザー
2017/10/17 22:38
2017/10/17 23:04
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/17 22:29