Desenvolvimento do iPhone - Precisão de localização
-
27-09-2019 - |
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?
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.