2つの緯度/経度のポイント間の距離を計算するのに適しているのは、Haversine FormulaとVincenty's Formulaのどちらですか。どうして?
距離は明らかに地球上で計算されています。 WGS84とGCJ02の座標は計算または距離に影響しますか(Vincentyの式ではWGS84軸が考慮されます)?
たとえば、Androidでは、Haversine式は Google Map Utils で使用されますが、Vincenty式は_Android.Location
_オブジェクト(Location.distanceBetween()
)で使用されます。
HaversineとVincentyは、さまざまな問題を解決するための2つのアルゴリズムです。 Haversineは球の大圏距離を計算し、Vincentyは回転楕円体の表面の最短(測地線)距離を計算します。したがって、質問への回答は2つの部分に分けることができます。
陸上用途では、回転楕円体は「平均海面」の妥当な近似です。誤差は±100mです。この楕円体の平坦化は約1/300と小さいため、(たとえば、同じ体積の)球で近似できます。
大圏の距離は測地線の距離と最大0.5%異なります。ケープからカイロまでの距離など、一部のアプリケーションでは、このエラーは無視できます。他のアプリケーション、たとえば海の境界を決定する場合、それは大きすぎます(1 kmの距離で5 mです)。一般に、測地線距離を使用する方が安全です。
(車、ボート、または飛行機で)移動した距離に関心がある場合は、経路に多くの制約があり、理想的な表面の最短経路の長さを測定する大円または測地線の距離はありません。適切な。
アルゴリズムが正確であるかどうかについての質問:
Haversineは、ポイントがほぼ正反対でない限り、四捨五入が正確です。より良い公式が ウィキペディアの大圏距離に関する記事 に記載されています。
Vincentyの精度は通常約0.1 mmです。ただし、ポイントがほぼ正反対の場合、アルゴリズムは収束に失敗し、エラーははるかに大きくなります。 測地線のアルゴリズム で測地問題を解決するためのより良いアルゴリズムを提供します。 楕円体上の測地線に関するWikipediaの記事 も参照してください。
測地線の問題の解決は、大圏の解決よりも時間がかかります。しかし、それでも非常に高速(計算あたり約1μs)であるため、大きな円の距離を優先する理由にはなりません。
[〜#〜]補遺[〜#〜]
ここ はJavaパッケージで、測地線距離を見つけるためのアルゴリズムを実装しています。Vincentyの方法とは異なり、四捨五入してどこにでも収束できます。