Pergunta

Tenha um aplicativo que encontre seu local de GPS com sucesso, mas preciso comparar esse GPS com uma lista de locais de GPS, se ambos forem iguais, então você recebe um bônus.

Eu pensei que estava funcionando, mas parece não.

Eu tenho 'newlocation' como o local onde você está, acho que o problema é que preciso ser capaz de separar os dados longos e latidos do novolocation.

Até agora, tentei o seguinte:

NSString *latitudeVar = [[NSString alloc] initWithFormat:@"%g°", newLocation.coordinate.latitude];

NSString *longitudeVar = [[NSString alloc] initWithFormat:@"%g°", newLocation.coordinate.longitude];

Um exemplo da lista de locais de GPS:

location:(CLLocation*)newLocation;

CLLocationCoordinate2D bonusOne;    

bonusOne.latitude = 37.331689;
bonusOne.longitude = -122.030731;

e depois

if (latitudeVar == bonusOne.latitude && longitudeVar == bonusOne.longitude) {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"infinite loop firday" message:@"infloop" delegate:nil cancelButtonTitle:@"Stinky" otherButtonTitles:nil ];    

    [alert show];
    [alert release];
}

Isso surge com um erro 'Operandos inválidos para binários == tem strut nsstring e cllocation gerees'

Alguma ideia?

Foi útil?

Solução

Geralmente, você deve ter cuidado com a comparação diretamente dos números de pontos flutuantes. Devido à maneira como eles são definidos, o valor interno pode não ser exatamente Ao inicializá -los, o que significa que eles raramente serão idênticos. Em vez disso, você deve verificar se a diferença entre eles está abaixo de um certo limite, por exemplo

if(fabs(latitude1 - latitude2) <= 0.000001)
...

Outra opção pode ser verificar até que ponto a pessoa está do local desejado calculando a distância. Isso também pode levar em consideração o fato de que a coordenada do GPS não está exatamente correta, mas pode diferir até 10 metros, mesmo em boas condições:

CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:lon1];
double distance = [loc1 getDistanceFrom:position2];
if(distance <= 10)
...

Claus

Outras dicas

Por que você não está comparando Bonusone.latitude e newlocation.coordinate.latitude diretamente? Você está fazendo um número de ponto flutuante em uma string e, em seguida, comparando -o com um número de ponto flutuante, e é por isso que você está recebendo esse erro.

Além disso, dado que a unidade GPS tende a pular um pouco, você provavelmente quer

R: Meça a distância entre Bonusone e Newlocation.coordenada (usando o teorema de Pitagoria para a hipotenusa dos triângulos, não há razão para nós algo mais preciso do que isso quando nesta pequena escala. função de medição) e especifique sua certa quantidade menor que uma certa.

B: Arredonde a latitude e a longitude para um certo número de dígitos, de modo que, por dentro, digamos que 100 pés funcionariam.

Qualquer um deles funcionará melhor para você do que confiar nos dois carros alegóricos para serem iguais, o que geralmente é problemático no software e especificamente um problema quando o dispositivo que você está medindo é um nível de ruído alto.

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