Google マップからいくつかの GPS 座標を取得し、Objective C を使用してそれらの間の距離を見つける必要があります。数式を実装しましたが、大きな結果が得られます。
Google マップの値を Google Earth とインターネット上のジオコーディング サービスに戻してテストしたところ、すべてがチェックアウトされました。コサインの法則では、座標を渡す前に何らかの変換を行う必要があるのではないかと疑い始めています。
私は Haversine 式の同様の実装を行いましたが、これも大きな結果をもたらしました。次に、デバッグが簡単で、非常に高い精度は必要ないため、コサインに切り替えました。
誰かがこれに少し光を当てるか、コードを使用できることを願っています:)
- (CGFloat) calculateDistanceBetweenPoints:(CGPoint) origin andDestination:(CGPoint) destination {
//To convert kilometers to miles, divide by 1.609
// x = latitude
// y = longitude
/* example:
Dubai : 25.248665, 55.352917
Amsterdam : 52.309071, 4.763385
Approx dist: 5,182.62 KM
Calc. dist : 8,253.33
*/
CGFloat toRad = (M_PI / 180);
CGFloat R = 6371.0f; //earth's mean radius in Km
CGFloat sinePart = sinf( origin.x * toRad ) * sinf( destination.x * toRad );
CGFloat cosinePart = cosf( origin.x * toRad ) * cosf( destination.x * toRad );
CGFloat deltaCosinePart = cosf( ( destination.y - origin.y ) * toRad );
CGFloat delta = acosf( sinePart + cosinePart * deltaCosinePart) * R;
return delta;
}
ここで参照されているリンクから計算された上記:stackoverflowの質問