5

ここに質問を投稿するのはこれが初めてですが、他の人の質問から多くの助けが得られました。

私の質問は の-distanceFromLocation:関数に関するものですCLLocation。点 A と点 B の間の距離を求めることは、点 B と点 A の間の距離を求めることと同じだと思っていましたが、そうではないことがわかりました。私はこれを非常に単純なケースでテストしました:

CLLocation *test1 = [[CLLocation alloc] initWithLatitude:37.529530 longitude:-122.259232];
CLLocation *test2 = [[CLLocation alloc] initWithLatitude:47.900002 longitude:-103.495102];
NSLog(@"%f vs %f",[test2 distanceFromLocation:test1],[test1 distanceFromLocation:test2]);
[test1 release];
[test2 release]; 

これに対する出力は 1907269.942754 対 1908105.959114 で、ほぼ 900 メートルの差がありました。

900 メートルは小さな割合かもしれませんが、ユーザーが注釈よりも何かに近づいているかどうかを判断しようとしており、900 メートルでそれが変わる可能性があります。

私の質問は、これらの値のどれが正しいですか? また、テスト対象の場所が重要な場合、常に同じ場所に対してテストする必要がありますか (たとえば、宛先からユーザーへ、注釈から宛先へではなく、ユーザーから宛先へ、注釈から宛先へ)。

私のプロジェクトはかなり大きく、これは私の問題を示しているため、サンプルが少し文脈から外れて申し訳ありません。これは私にかなりの混乱と欲求不満を引き起こしたので、どんな助けも感謝します.

4

1 に答える 1

1

観察している誤差は 2000 分の 1 です。おそらく、この方法で使用されるアルゴリズムは速度が最適化されているため、距離に基づいて位置のリストを並べ替えると、ミリメートル単位の精度ではなく高速になります。

正確な結果が必要な場合は、これらの方法を使用せず、別の方法を見つけてください。再現可能な結果が必要な場合は、定義された方法で引数を並べ替えます。たとえば、常に緯度の低いものから始めます。

于 2011-04-05T21:43:16.190 に答える