web-dev-qa-db-ja.com

距離の計算には、Haversine式またはVincentyの式の方が優れていますか?

2つの緯度/経度のポイント間の距離を計算するのに適しているのは、Haversine FormulaとVincenty's Formulaのどちらですか。どうして?

距離は明らかに地球上で計算されています。 WGS84とGCJ02の座標は計算または距離に影響しますか(Vincentyの式ではWGS84軸が考慮されます)?

たとえば、Androidでは、Haversine式は Google Map Utils で使用されますが、Vincenty式は_Android.Location_オブジェクト(Location.distanceBetween())で使用されます。

20
jjNford

Haversine はより単純な計算ですが、Vincentyが提供する高精度は提供しません。

Vincenty の方が正確ですが、計算量も多いため、実行速度が遅くなり、バッテリーの使用量が増えます。

何でもそうですが、「より良い」とは特定のアプリケーションの問題です。アプリケーションにとっては、VincentyはHaversineよりも「良い」選択かもしれませんが、別のアプリケーションでは、Haversineがより良い選択かもしれません。ユースケースの詳細を確認し、そこにあるものに基づいて決定する必要があります。

12
andand

HaversineとVincentyは、さまざまな問題を解決するための2つのアルゴリズムです。 Haversineは球の大圏距離を計算し、Vincentyは回転楕円体の表面の最短(測地線)距離を計算します。したがって、質問への回答は2つの部分に分けることができます。

  1. 楕円体上の球の距離を計算しますか?
  2. 与えられた問題の計算において、HaversineまたはVincentyはどれほど正確ですか?

陸上用途では、回転楕円体は「平均海面」の妥当な近似です。誤差は±100mです。この楕円体の平坦化は約1/300と小さいため、(たとえば、同じ体積の)球で近似できます。

大圏の距離は測地線の距離と最大0.5%異なります。ケープからカイロまでの距離など、一部のアプリケーションでは、このエラーは無視できます。他のアプリケーション、たとえば海の境界を決定する場合、それは大きすぎます(1 kmの距離で5 mです)。一般に、測地線距離を使用する方が安全です。

(車、ボート、または飛行機で)移動した距離に関心がある場合は、経路に多くの制約があり、理想的な表面の最短経路の長さを測定する大円または測地線の距離はありません。適切な。

アルゴリズムが正確であるかどうかについての質問:

Haversineは、ポイントがほぼ正反対でない限り、四捨五入が正確です。より良い公式が ウィキペディアの大圏距離に関する記事 に記載されています。

Vincentyの精度は通常約0.1 mmです。ただし、ポイントがほぼ正反対の場合、アルゴリズムは収束に失敗し、エラーははるかに大きくなります。 測地線のアルゴリズム で測地問題を解決するためのより良いアルゴリズムを提供します。 楕円体上の測地線に関するWikipediaの記事 も参照してください。

測地線の問題の解決は、大圏の解決よりも時間がかかります。しかし、それでも非常に高速(計算あたり約1μs)であるため、大きな円の距離を優先する理由にはなりません。

[〜#〜]補遺[〜#〜]

ここ はJavaパッケージで、測地線距離を見つけるためのアルゴリズムを実装しています。Vincentyの方法とは異なり、四捨五入してどこにでも収束できます。

31
cffk