Pregunta

tener una aplicación que encuentra su ubicación GPS con éxito, pero tengo que ser capaz de comparar que el GPS con una lista de ubicaciones GPS, si ambos son iguales, entonces se obtiene una bonificación.

pensé que tenía que trabajar, pero parece que no.

Tengo 'newLocation' como el lugar donde se encuentre, creo que el problema es que tengo que ser capaz de separar los datos de longitud y latitud de newLocation.

Hasta ahora he intentado esto:

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

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

Un ejemplo de la lista de ubicaciones GPS:

location:(CLLocation*)newLocation;

CLLocationCoordinate2D bonusOne;    

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

y

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];
}

esto viene con un error 'operandos no válidos a == binarios han puntal NSString y CLlocationDegrees'

¿Alguna idea?

¿Fue útil?

Solución

En general, usted debe tener cuidado con la comparación de números de punto flotante directamente. Debido a la forma en que se definen, el valor interno no puede ser exactamente a medida que inicializarlas lo que significa que serán muy pocas veces ser idénticos. En su lugar debe comprobar para ver si la diferencia entre ellos se encuentran por debajo de un umbral determinado, por ejemplo

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

Otra opción podría ser para comprobar hasta qué punto la persona es de la ubicación deseada mediante el cálculo de la distancia. Esto también podría tener en cuenta el hecho de que las coordenadas del GPS no es exactamente correcta, pero puede diferir hasta como 10 metros, incluso en buenas condiciones:

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

Claus

Otros consejos

¿Por qué no se comparan bonusOne.latitude y newLocation.coordinate.latitude directamente? Usted está conevrting un número de coma flotante a una cadena y luego compararlo con un número de coma flotante que es la razón de que está recibiendo ese error.

Además, dado que el GPS unidad tiende a saltar un poco, es probable que desee en

a:. Medir la distancia entre bonusOne y newLocation.coordinate (usando el teorema de Pitágoras para la hipotenusa de los triángulos, no hay razón para nosotros algo más preciso que el que cuando en esta pequeña escala si se siente exigente, utilice el mapa kit función de medición de distancia) y especificar su menos de una cierta cantidad.

b:. Alrededor de la latitud y la longitud fuera a un cierto número de dígitos de manera que el ser, dentro de, digamos 100 pies trabajarían

Cualquiera de los que va a funcionar mejor para usted que depender de los dos flotadores a ser igual, que es tanto problemática en términos generales en el software y en concreto en un problema cuando el dispositivo se está midiendo es decir tiene un alto nivel de ruido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top