2010-08-05 13 views
30

i seguenti sono elencati in CLLocation.h ma dalla mia esperienza sono nomi ingannevoli, possibilmente originariamente pensati per servire a due scopi, 1. per verificare l'accuratezza della posizione restituita, ma anche 2. per impostare quanto duramente le opere location manager, in particolare quello che è abilitato (GPS (quanti sat canali), quanto duramente le opere wifi, ecc triangolazionedecodifica dei cost di CLLocationAccuracy

extern const CLLocationAccuracy kCLLocationAccuracyBestForNavigation; 
extern const CLLocationAccuracy kCLLocationAccuracyBest; 
extern const CLLocationAccuracy kCLLocationAccuracyNearestTenMeters; 
extern const CLLocationAccuracy kCLLocationAccuracyHundredMeters; 
extern const CLLocationAccuracy kCLLocationAccuracyKilometer; 
extern const CLLocationAccuracy kCLLocationAccuracyThreeKilometers; 

mi piacerebbe dare un'occhiata a CLLocation.m, ma come Non è probabile che ciò accada presto, qualcuno ha qualche test sul campo che mostra ciò che pensano stia accadendo con queste diverse modalità:

cioè, kCLLocationAccuracyBest = 10 satellitare (canali/tronchi?), 100% della potenza a una rete WiFi, ecc ..

im sorta di indovinare sugli specchi qui- Credo che questo sia il tipo di informazioni Apple dovrebbe avere forniti-

quello che voglio veramente sapere è, cosa sta realmente succedendo con kCLLocationAccuracyThreeKilometers in relazione al draw della batteria - il GPS è acceso? 1 tronco seduto? wifi abilitato? wifi su un timer? chissà? So che mi piacerebbe to

risposta

2

Il punto di utilizzare extern anziché esporre ciò che sta realmente accadendo è così che al di sotto dei gerwerkkins possono cambiare e il codice non deve preoccuparsi per raccogliere i miglioramenti .

Detto questo, CLLocationAccuracy è typedef-ed al doppio, quindi penso che sia giusto immaginare che kCLLocationAccuracyNearestTenMeters = 10.0, kCLLocationAccuracyHundredMeters = 100.0, ecc migliore è probabilmente uno 0, 1 o kCLLocationAccuracyNearestTenMeters, e BestForNavigation è probabilmente quello che hanno buttato per aiutare persone come TomTom, ecc.

Se davvero vuoi sapere, puoi stampare i valori - sono solo doppi.

Non credo che il numero di satelliti o l'alimentazione al wifi siano alterati in base alla precisione desiderata. Il modo in cui io capisco gli algoritmi, c'è un calcolo di approssimazione che, più volte attraverso il ciclo, tanto più preciso diventa. Quindi, meno precisi si limitano alle richieste precedenti.

Ma, ancora una volta, il punto più importante è: non importa. Apple in particolare non descrive ciò che accade dietro le quinte perché non fa parte del design. Il design è: se usi kCLLocationAccuracyKilometer, otterrai una risposta entro un chilometro, ecc. E ora Apple è libera di cambiare il modo in cui arriva senza che ti interessi. Questo tipo di isolamento è un principio fondamentale della programmazione orientata agli oggetti.

EDIT:

CORREZIONE - Sto solo monitorando la sessione WWDC sul posto (Session 115) e, verso le 22:00 o giù di lì, si parla di come, quando si utilizza BestForNavigation, questo aggiunge in qualche correzione del giroscopio (quando disponibile). Tuttavia, egli avverte che, mentre questo è power & CPU intensivo, e dovrebbe essere usato solo quando necessario, come con la navigazione turn-by-turn.

Non sono sicuro di quanto posso parlare di questo in modo pubblico ma, se sei uno sviluppatore registrato, puoi ottenere le sessioni da iTunes-U.

(Questo è WWDC 2010, btw.)

+0

Nota anche, con il commento di Little, il sig. WWDC afferma che la torre cellulare solo senza connessione dati (come quando si effettua il roaming senza un piano dati) è accurata 10-50 km. "Simile al prefisso, vice, un numero specifico, in termini di posizione." – Olie

+0

Ricordo di aver appreso che kCLLocationAccuracyBest è in realtà -1, solo fyi. Grazie per la risposta. – hatunike

+0

@hatunike Puoi qualificare ulteriormente la tua affermazione? –

49

Sono d'accordo con Olie che nasconde i dettagli dell'algoritmo è destinato a proteggere lo sviluppatore dell'app da preoccuparsi di come posizione è determinata.Detto questo, credo sia ancora ragionevole porre la domanda: "quali sono le implicazioni di potenza della mia selezione di precisione?".

Ho un po 'di informazioni che potrebbero guidare la vostra decisione su quale usare, ma non conosco i veri dettagli dell'implementazione di Apple.

In primo luogo, si supponga che, poiché la lettura diventa più accurata, il sistema dovrà utilizzare più radio affamate di energia. Ad esempio, il GPS sarà richiesto per le letture più dettagliate, all'interno di 100 metri, e utilizza la massima potenza.

Ecco un'ipotesi sul meccanismo utilizzato per determinare l'accuratezza. L'elenco è ordinato con (1) il consumo più alto della batteria.

  1. GPS - kCLLocationAccuracyBestForNavigation;
  2. GPS - kCLLocationAccuracyBest;
  3. GPS - kCLLocationAccuracyNearestTenMeters;
  4. WiFi (o GPS in area rurale) - kCLLocationAccuracyHundredMeters;
  5. Cell Tower - kCLLocationAccuracyKilometer;
  6. Cell Tower - kCLLocationAccuracyThreeKilometers;

Quando si sceglie, si raccomanda da Apple che si seleziona la precisione più grana grossa che l'applicazione può permettersi.

La speranza che aiuta, a.little.

+2

Documentazione Per mele: kCLLocationAccuracyBestForNavigation Utilizzare la massima precisione possibile e combinarlo con dati del sensore aggiuntivi. Questo livello di precisione è destinato all'uso in applicazioni di navigazione che richiedono sempre precise informazioni sulla posizione e sono destinati all'uso solo quando il dispositivo è collegato. Questa è l'unica costante con qualsiasi descrizione relativa al consumo di energia/sensore. –

+0

è kCLLocationAccuracyBestForNavigation fornisce punti posizione migliori quindi kCLLocationAccuracyBest? ti costringe ad essere vicino a una strada? perché la maggior parte dei programmi di navigazione sono per la navigazione di guida/autobus. Posso ottenere migliori coordinate di posizione se userò kCLLocationAccuracyBest anziché kCLLocationAccuracyBestForNavigation? –

+0

Penso che sia sicuro assumere che anche nel peggiore dei casi, kCLLocationAccuracyBestForNavigation è buono come kCLLocationAccuracyBest. – livings124

9

Nel quartiere degli affari di una grande città, la triangolazione del wifi e della torre cellulare è molto buona. I sobborghi residenziali non sono così buoni. Nelle aree rurali lavorano a malapena se lavorano affatto.

Il GPS non funziona molto bene al chiuso, e può richiedere molto tempo per ottenere qualsiasi correzione senza l'ausilio di una torre cellulare (probabilmente 20 minuti !!). Ci vuole tanto tempo prima che i satelliti trasmettano informazioni sufficienti per determinare la tua posizione, e ci possono essere perdite di pacchetti (nuvole, edifici, alberi, montagne, ecc.). Vale la pena notare che un GPS di fascia alta adatto avrà un'antenna delle dimensioni di una palla da basket, nessun GPS palmare può ottenere un segnale perfetto.

Anche all'aperto con un segnale perfetto, il GPS non è preciso quando si cambia rapidamente direzione (ad esempio sull'autostrada o su una strada ventosa). L'impostazione BestForNavigation utilizza l'accelerometro e il giroscopio per compensare questo problema.

Attualmente, la piattaforma iOS utilizza:

  • GPS: molto preciso, ma ad alto assorbimento di potenza, lento e non sempre disponibile. alcuni hardware non hanno un GPS.
  • WiFi: un sacco di potere assorbire, e funziona solo in città. Può anche essere sbagliato (ad esempio, inserire la città sbagliata)
  • Cell Tower: quasi nessun assorbimento di energia e funziona bene in città. Non così grande nelle zone rurali. Non esiste su alcuni hardware.
  • Accelerometro: lievi miglioramenti alle altre correzioni di posizione, ma enorme potenza assorbita.
  • Giroscopio: lievi miglioramenti alle altre correzioni di posizione, ma enorme potenza assorbita. solo per iPhone 4.

si dà una precisione in metri che è necessario (le costanti sono solo bei nomi per metri), e utilizzerà una combinazione di quanto sopra, per ottenere quel livello di accuratezza con il più veloce correzione possibile e potenza minima possibile. La tecnica che usa cambierà, da un utente all'altro, e cambierà a seconda di dove nel mondo si trova l'utente in quel momento.

+1

Qual è la differenza tra la potenza elevata, il forte assorbimento di potenza e l'enorme potenza assorbita. lol. – mskw

+2

@mskw La triangolazione WiFi/GSM utilizza pochissima energia. Il GPS utilizza un bel po 'di energia. Il GPS con correzione Accelerator/Giroscopio richiede molta matematica e fa lavorare la CPU, quindi il power draw è estremo. –

+0

> Nel quartiere degli affari di una grande città, la triangolazione del wifi e della torre cellulare è molto buona. @Abhi Beckert, non ne sono sicuro. Per Wi-Fi hai probabilmente ragione, ma ottengo una precisione piuttosto scarsa (centinaia di metri) all'interno degli edifici qui nell'East Village di Manhattan quando il Wi-Fi è stato spento per un po '. (Presumo in questa situazione, vengono utilizzate le torri cellulari). Ho anche avuto un'accuratezza piuttosto scarsa a Downtown Seattle (oltre 1000 metri), all'interno di edifici. –