2011-12-25 10 views

答えて

4

CoreLocationを使用しているので、CoreLocation's distanceFromLocationは@progrmrが指摘しているように使用できます。

一方、オープンソースを指定してオープンソースではないので、@MikeTの提案によれば、GeographicLibの実装を見ることができます。

(私のオリジナルの答えは、半正矢式を示唆し、@MikeTが指摘するように、半正矢式は球に対してのみ有効です。そして、地球は完全な球体ではありません。不備た。)

オリジナル、欠陥のある答え:

Haversineの式が必要なようです。 Wikipedia page for the Haversine formulaは、私がチェックしていませんが、私はそれらの少なくとも一部は、オープンソースプロジェクトであることを想像しなければならない。 at the bottom, under "External links")は、多くの実装へのリンクが含まれています(それが何であるかを説明します。

+0

Haversine式は、球上での計算にのみ適しています。問題は、通常、[回転楕円体](https://en.wikipedia.org/wiki/Geodesics_on_an_ellipsoid)に暗示されているジオデシスのライブラリを探しています。 –

+0

良い点@MikeT。私はあなたのより良い提案を含めるために私の答えを更新し、私の元の答えの欠陥を言及する。 – Trott

1

あり

いくつかの座標ペア、または宛先から向かうん github上のC関数は、開始を与えられ、見出し座標。 Distance間あなたがCLLocationで行うことができます座標。

これらは余弦の球法に基づくとアルゴリズムhereから派生していますおよびhere

1

GeographicLibは、Javaを含むいくつかのプログラミング言語で実装されています。ライブラリは、回転楕円体(または回転楕円体)上の測地線の長さおよび関連する数学的特性を計算する。計算誤差は、一般に、マイクロメートルの範囲内である。

2つの座標間の距離を見つけるには:その後、

GeodesicData g = Geodesic.WGS84.Inverse(lat1, lon1, lat2, lon2, 
             GeodesicMask.DISTANCE); 

2点間の距離のためg.s12を取得します。

距離と方向が与えられた場所を投影するという質問の2番目の例は、Directの方法を使用しています。

関連する問題