2

ユーザーが走ったり、自転車に乗ったり、歩いたりして画面に表示するときに、ユーザーを追跡するためのアプリケーションを作成しています。AndroidにdistanceBetween関数が組み込まれていることは知っていますが、これはフィットネスアプリケーションには十分正確ですか?ポイント間の距離を計算するためにHaversine式または他のそのような式を使用することを検討していました。これらの式について私が見る唯一の問題は、それが通常直線であるか、カラスが距離を飛ぶときです。誰かがこれについて考えを持っていますか?

4

2 に答える 2

1

歩きながらルートを追跡するには、一連のウェイポイントが必要です。10 秒ごとに 1 つのウェイ ポイントでサンプリングする場合、前のポイントと新しいポイントの間の距離を、harsine などのカラスフライ技術を使用して計算するか、Google マップなどの外部サービスに Web サービス リクエストを作成して距離を計算できます。提案された最適なパスを使用して、2 点間の通りにスナップされた距離を得ることができるマトリックス。

http://code.google.com/apis/maps/documentation/distancematrix/

サンプルレートが高すぎないことを確認するか、2500 API 呼び出し/24 時間レートリミッター (これは私が信じている IP ごと) を超えないようにする必要があります。ただし、2500 では、10 秒ごとに 1 サンプルで 7 時間かかります。または、35 秒ごとに 1 サンプルなどの低いレートを試して、ルートが間違って推測されるリスクがありますが、デバイスが 2500 サンプルを超えないことを保証してください。

個人的には、位置のポーリングが無料である場合は、distanceBetween を使用して 1 ~ 2 秒ごとにポーリングします。これは、GPS の精度が誤差の最大の原因となるのに十分短いはずです。

于 2012-01-26T16:04:25.137 に答える
1

Haversine 式は、ほとんどの距離で正確ですが、ポイントが (ほぼ) 対蹠的である場合、丸め誤差が発生します。次の式は、すべての距離に対して正確です。

> double delta = G1 - G2;  
>     double p1 = cos(L2) * sin(delta);
>     double p2 = cos(L1) * sin(L2) - sin(L1) * cos(L2) * cos(delta);  
>     double p3 = sin(L1) * sin(L2) + cos(L1) * cos(L2) * cos(delta);
>     distance = 60 * Math.atan2(Math.sqrt(p1*p1 + p2*p2), p3);

これが例と実装です。

リソース :ここ

于 2012-01-26T16:07:57.877 に答える