web-dev-qa-db-ja.com

CLLocationAccuracy constのデコード

以下はCLLocation.hにリストされていますが、私の経験から、それらは名前を欺いています。おそらく、もともとは2つの目的に役立つと考えられていました。具体的には、有効になっているもの(gps(satチャネルの数)、wifiの動作の難しさ、三角測量など)。

extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation; // (raw value: -2)
extern const CLLocationAccuracy kCLLocationAccuracyBest; // (raw value: -1)
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters; // (raw value: 10)
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters; // (raw value: 100)
extern const CLLocationAccuracy kCLLocationAccuracyKilometer; // (raw value: 1000)
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers; // (raw value: 3000)

CLLocation.mを見てみたいのですが、すぐには起こらない可能性が高いので、これらのさまざまなモードで何が起こっているかを示すフィールドテストを行っている人はいますか。

つまり、kCLLocationAccuracyBest = 10衛星(チャネル/トランク?)、Wi-Fiへの100%電力など。

私はここでストローを推測しています-これは情報のタイプだと思いますApple提供されるべきでした-

私が本当に知りたいのは、バッテリーの消耗に関連してkCLLocationAccuracyThreeKilometersで実際に何が起こっているのかということです-GPSはオンになっていますか? 1座ったトランク? Wi-Fiは有効ですか?タイマーのwifi?知るか?したいのはわかっています

32
dave

アルゴリズムの詳細を非表示にすることは、アプリ開発者が場所の決定方法について心配することから保護することを目的としていることに同意します。とはいえ、「私の精度の選択が持つ電力の影響は何ですか?」という質問をするのは、依然として妥当だと私は思います。

どちらを使用するかを決定するのに役立つ情報が少しありますが、Appleの実装の本当の詳細はわかりません。

まず、読み取り値がより正確になるにつれて、システムはより多くの電力を消費する無線を使用する必要があると想定します。たとえば、GPSは、100メートル以内の最も詳細な読み取りに必要であり、最も多くの電力を使用します。

以下は、精度を決定するために使用されるメカニズムについての知識に基づく推測です。リストは、(1)が最大のバッテリー消耗である状態で注文されます。

  1. GPS-kCLLocationAccuracyBestForNavigation;
  2. GPS-kCLLocationAccuracyBest;
  3. GPS-kCLLocationAccuracyNearestTenMeters;
  4. WiFi(または地方ではGPS)-kCLLocationAccuracyHundredMeters;
  5. セルタワー-kCLLocationAccuracyKilometer;
  6. セルタワー-kCLLocationAccuracyThreeKilometers;

選択するとき、Appleによって、アプリケーションが提供できる最も粗い精度を選択することが推奨されます。

お役に立てば幸いです。

54
Andrew Little

大都市のビジネス地区では、wifiとセルタワーの三角測量はどちらも非常に優れています。住宅地の郊外はあまり良くありません。農村地域では、彼らが働いたとしてもほとんど働きません。

GPSは屋内ではうまく機能せず、セルタワーの支援なしに修正を行うには非常に長い時間がかかる可能性があります(おそらく20分!!)。サテライトがあなたの場所を特定するのに十分な情報をブロードキャストするのにそれだけ長い時間がかかり、パケット損失(雲、建物、木、山など)が発生する可能性があります。注目に値するのは、適切なハイエンドGPSにはバスケットボールのサイズのアンテナがあり、ハンドヘルドGPSが完璧な信号を取得できないことです。

完全な信号のある屋外でも、方向をすばやく変更するとGPSは不正確になります(高速道路や風の強い道​​路など)。 BestForNavigation設定は、加速度計とジャイロスコープを使用してこれを相殺します。

現在、iOSプラットフォームは次のものを使用しています。

  • GPS:非常に正確ですが、消費電力が大きく、低速で、常に利用できるとは限りません。一部のハードウェアにはGPSがありません。
  • WiFi:多くの電力が消費され、市内でのみ機能します。間違ってフラットにすることもできます(たとえば、間違った都市に配置する)
  • セルタワー:電力がほとんど消費されず、都市でうまく機能します。地方ではそれほど良くありません。一部のハードウェアには存在しません。
  • 加速度計:他の位置情報の修正がわずかに改善されましたが、消費電力が大幅に増加しています。
  • ジャイロスコープ:他の位置情報の修正が若干改善されましたが、消費電力が大幅に増加しています。 iPhone 4のみ。

必要なメートル単位の精度を指定し(定数はメートルのニース名です)、上記の組み合わせを使用して、可能な限り最速の修正と可能な限り低い消費電力でそのレベルの精度を実現します。それが使用するテクニックは、ユーザーごとに変化し、ユーザーがその時点で世界のどこに立っているかによって変化します。

9
Abhi Beckert

実際に起こっていることを公開するのではなく、externを使用することの要点は、アンダーゲルヴェルキンが変更され、コードが改善について気にする必要がないようにすることです。

とはいえ、CLLocationAccuracyは2倍に型定義されているので、kCLLocationAccuracyNearestTenMeters = 10.0、kCLLocationAccuracyHundredMeters = 100.0などと推測するのが妥当だと思います。 TomTomなどのように。

本当に知りたい場合は、値を出力できます。値は2倍になります。

衛星の数やWi-Fiの電力が、ご希望の精度に基づいて変更されているとは思いません。私がアルゴリズムを理解する方法には、ループを通過する回数が多いほど、より正確になる近似計算があります。したがって、精度が低いと、すぐにベイルします。

しかし、繰り返しになりますが、より重要な点は、それは問題ではないということです。 Appleこれはデザインの一部ではないため、舞台裏で何が起こっているかを具体的に説明していません。デザインは次のとおりです。kCLLocationAccuracyKilometerを使用すると、1 km以内の回答が得られます。 。そしてAppleは、気にすることなく、それらに到達する方法を自由に変更できるようになりました。この種の分離は、オブジェクト指向プログラミングの基本的な信条です。

編集:

修正-私はちょうど今ロケでWWDCセッション(セッション115)を見ています、そして、22:00頃に、彼はBestForNavigationを使用するとき、これがジャイロスコープ修正を追加する方法について話します(利用可能な場合)。彼は、これは電力とCPUを集中的に使用するものであり、ターンバイターン方式のナビゲーションと同様に、必要な場合にのみ使用する必要があると警告しています。

これについて公にどれだけ話すことができるかはわかりませんが、登録済みの開発者であれば、iTunes-Uからセッションを取得できます。

(これはWWDC-2010です)

2
Olie