32

以下は CLLocation.h にリストされていますが、私の経験からすると、名前をだましている可能性があります。おそらく、最初は 1. 返された位置情報の精度をテストすることと、2. ロケーション マネージャーの動作を設定することの 2 つの目的に役立つと考えられていました。具体的には、有効になっているもの (GPS (衛星チャンネルの数)、Wi-Fi の動作状況、三角測量など) です。

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 衛星 (チャネル/トランク?)、wifi への 100% 電力など.

私はここでストローを推測しています-これはアップルが提供すべきタイプの情報だと思います-

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

4

3 に答える 3

57

アルゴリズムの詳細を非表示にすることは、アプリ開発者が場所の決定方法について心配することから保護することを目的としていることに同意します。とは言うものの、「私の精度選択のパワーへの影響は何ですか?」という質問をすることは依然として合理的であると私は信じています。

どちらを使用するかについてのあなたの決定を導くかもしれない少しの情報がありますが、Appleの実装の本当の詳細はわかりません。

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

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

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

選択するときは、アプリケーションが許容できる最も粗い精度を選択することをAppleが推奨しています。

それがお役に立てば幸いです。

于 2010-08-11T16:33:08.040 に答える
10

主要都市のビジネス地区では、wifi とセル タワーの三角測量はどちらも非常に良好です。郊外の住宅地はあまり良くありません。農村部では、彼らは働いてもほとんど働かない。

GPS は屋内ではうまく機能せず、携帯電話基地局の支援がなければ、正確な情報を取得するのに非常に長い時間がかかる場合があります (おそらく 20 分!!)。衛星があなたの位置を特定するのに十分な情報をブロードキャストするのにそれだけの時間がかかり、パケット損失 (雲、建物、木、山など) が発生する可能性があります。適切なハイエンド GPS にはバスケットボールのサイズのアンテナがあり、ハンドヘルド GPS では完全な信号を取得できないことに注意してください。

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

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

  • GPS: 非常に正確ですが、消費電力が大きく、遅く、常に利用できるとは限りません。一部のハードウェアには GPS がありません。
  • WiFi: 多くの電力を消費し、都市でのみ機能します。完全に間違っている可能性もあります(たとえば、間違った都市に配置するなど)
  • セルタワー: 電力をほとんど消費せず、街中でうまく機能します。田舎ではあまり得意ではありません。一部のハードウェアには存在しません。
  • 加速度計: 他の場所の修正がわずかに改善されましたが、消費電力が大幅に増加しました。
  • ジャイロスコープ: 他の場所の修正がわずかに改善されましたが、消費電力が大幅に増加しました。iPhone4のみ。

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

于 2011-04-11T03:59:08.923 に答える
2

実際に起こっていることを公開するのではなく、externを使用することの全体的なポイントは、アンダーガーワークキンが変更できるようにすることであり、コードは改善点を見つけるためにそれについて心配する必要はありません。

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

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

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

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

編集:

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

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

(これはWWDC-2010です。)

于 2010-08-11T14:52:38.877 に答える