Pergunta

Estou usando as seguintes condições em ordem para garantir que o local que recebo tenha precisão adequada, no meu caso KcllocationAccuracyBest. Mas o problema é que ainda tenho um local impreciso.

// Filter out nil locations
if(!newLocation)
    return;

// Make sure that the location returned has the desired accuracy
if(newLocation.horizontalAccuracy < manager.desiredAccuracy)
    return;

// Filter out points that are out of order    
if([newLocation.timestamp timeIntervalSinceDate:oldLocation.timestamp] < 0)
    return;

// Filter out points created before the manager was initialized
NSTimeInterval secondsSinceManagerStarted = [newLocation.timestamp timeIntervalSinceDate:locationManagerStartDate];
if(secondsSinceManagerStarted < 0)
    return;

// Also, make sure that the cached location was not returned by the CLLocationManager (it's current) - Check for 5 seconds difference
if([newLocation.timestamp timeIntervalSinceReferenceDate] < [[NSDate date] timeIntervalSinceReferenceDate] - 5)
    return;

Quando ativo o GPS, recebo resultados imprecisos antes de obter um resultado preciso. Quais métodos você usa para obter informações de localização precisas/precisas?

Foi útil?

Solução 2

A principal razão pela qual eu estava obtendo resultados imprecisos foi por causa dessa condição:

if(newLocation.horizontalAccuracy < manager.desiredAccuracy)

Eu estava usando kCLLocationAccuracyBest como desejado a aceitação e é um número negativo. Você não deve usá -lo para comparação.

Solução:if(newLocation.horizontalAccuracy < 10.0)

Outras dicas

O GPS é lento, pelo menos em comparação com a paciência do usuário; portanto, o gerenciador de localização retorna o melhor que tem até obter uma nova e válida leitura GPS. Você pode fazer o usuário esperar por mais tempo necessário para obter uma leitura precisa ou ter algum tipo de feedback incremental da maneira como o Google Maps faz, com um círculo que um ponto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top