- ベストアンサー
PHPで2地点間の緯度経度の求め方を教えてください
PHPで2地点間の緯度経度の求め方について教えてください。 地点A(始点)と地点Z(終点)までを直線とした場合に、 地点Aから地点Z間の緯度経度を求めたいです。 求める地点Aから地点Z間の緯度経度の数は php側で吸収し地点Aから地点Z間で、1地点(N)求めた場合、 地点Aから地点Nの距離 = 地点Nから地点Zの距離 としたい。(求める地点数を等間隔にしたい) 分かっている情報としては ・地点Aと地点Zの緯度経度 ・地点Aから地点Zの距離 です。 そもそも求めることができるのでしょうか? 地点A(始点)と地点Z(終点)までの距離を求める方法等は、 サイトに載っていますが。 どなたかよろしくお願いいたします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
補足を頂きありがとうございます。 それでは多少誤差が発生する可能性はありますが、一番簡単なアルゴリズムをご紹介します。プログラムは以下の通りです。 使い方が分からないことがあったら補足をください。 -------------------------------------- <?php //サンプル $lat_a = 35.6813820; $lon_a = 139.7660840; //地点Aの緯度経度 $lat_b = 34.7019090; $lon_b = 135.4949770; //地点Bの経度 $n = 10; //経由地点数 //差分計算 $d_lat = ($lat_b - $lat_a) / ($n + 1); $d_lon = ($lon_b - $lon_a) / ($n + 1); $lat = array(); $lon = array(); $lat_n = $lat_a; $lon_n = $lon_a; for ($i = 0; $i <= $n + 1; $i++) { $lat[$i] = $lat_n; $lon[$i] = $lon_n; //次の経由地点へ $lat_n += $d_lat; $lon_n += $d_lon; } //表示 for ($i = 0; $i <= $n + 1; $i++) { echo "地点[{$i}] 緯度:{$lat[$i]} 経度:{$lon[$i]}<br />\n"; } ?> ---------------------------------------- これをGoogleMapsにプロットするプログラムもできたので、どこかで公開することにしましょう。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
まずは地球が丸いことを理解しなくてはなりません。 >地点A(始点)と地点Z(終点)までを直線 ここでいう直線とは、メルカトル的な等角航路での直線なのでしょうか? それとも大圏コースにおける最短距離のことなのでしょうか? はたまた、地中をとおる直線なのでしょうか?
補足
yambejpさん 返信ありがとうございます。 >ここでいう直線とは、メルカトル的な等角航路での直線なのでしょうか? メルカトル的な等角航路です。 その直線上の緯度経度を知りたいです。 よろしくお願いします。
「PHPで2地点間の緯度経度」の意味が分からないので確認をお願いします。以下の意味で合っていますでしょうか? 1.地点Aと地点Zがあり、各々の緯度・経度は分かっている。 2.AとZを結ぶ直線距離上に等間隔にN個の地点(N1, N2, N3...)をプロットする。 3.N1, N2, N3...の緯度経度を求める。 ご質問は、PHPで3の答えを求めることができるかどうか、できるのならそのプログラムを教えてほしいということですか?
補足
i80286さん 返信ありがとうございます。 私の説明がヘタで申し訳ありません。 >1.地点Aと地点Zがあり、各々の緯度・経度は分かっている。 >2.AとZを結ぶ直線距離上に等間隔にN個の地点(N1, N2, N3...)をプロットする。 >3.N1, N2, N3...の緯度経度を求める。 >ご質問は、PHPで3の答えを求めることができるかどうか、できるのならそのプログラムを教えてほしいということですか? まさしくその通りです。 上記で言うと地点Aと地点Zの緯度経度はわかっていて、 N1, N2, N3...の緯度経度を求めることが出来るかです。 お忙しいと思いますがよろしくお願いします。
お礼
i80286さん 回答ありがとうございます。 とてもわかりやすく理解できました。 参考にさせて頂きます。 ありがとうございました。