Domanda

avere un app che trova la tua posizione GPS con successo, ma ho bisogno di essere in grado di confrontare che il GPS con un elenco di posizioni GPS, se entrambi sono gli stessi, quindi si ottiene un bonus.

Ho pensato che avevo a lavorare, ma non sembra.

Non ho 'newLocation' come il luogo in cui ti trovi, penso che il problema è che ho bisogno di essere in grado di separare i dati lunghe e lat di newLocation.

Finora Ive ha provato questo:

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

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

Un esempio della lista delle posizioni GPS:

location:(CLLocation*)newLocation;

CLLocationCoordinate2D bonusOne;    

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

e quindi

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

questo esce con un errore 'operandi non validi per == binari sono pavoneggiarsi NSString e CLlocationDegrees'

Qualche idea?

È stato utile?

Soluzione

In genere si dovrebbe fare attenzione con il confronto direttamente i numeri in virgola mobile. A causa del modo in cui essi sono definiti, il valore interno non può essere esattamente come si inizializza loro il che significa che essi saranno molto raramente identici. Invece si dovrebbe controllare per vedere se la differenza tra loro sono al di sotto di una certa soglia, per esempio

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

Un'altra opzione potrebbe essere quella di verificare fino a che punto la persona è dalla posizione desiderata calcolando la distanza. Questo potrebbe anche prendere in considerazione il fatto che la coordinata dal GPS non è esattamente corretto, ma potrebbe differire fino a 10 metri come anche in buone condizioni:

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

Natale

Altri suggerimenti

Perché non confrontando bonusOne.latitude e newLocation.coordinate.latitude direttamente? Stai conevrting un numero in virgola mobile in una stringa e poi confrontandolo con un numero in virgola mobile, che è il motivo per cui si stanno ottenendo quell'errore.

Inoltre, dato che i gps unità tende a saltare in giro un po ', probabilmente vogliono sia

a:. Misurare la distanza tra bonusOne e newLocation.coordinate (utilizzando il teorema di Pitagora per l'ipotenusa di triangoli, alcun motivo per noi qualcosa di più preciso di che, quando su questa piccola scala, se ti senti schizzinosi, utilizzare il mappa del kit di funzione di misurazione della distanza) e specificare la sua meno di una certa quantità.

b:. Intorno alla latitudine e longitudine fuori ad un certo numero di cifre in modo che essere, all'interno, dicono 100 piedi funzionerebbero

Uno di quelli funzionerà meglio per voi che fare affidamento sulle due galleggianti per essere uguale, che è sia generalmente problematico nel software e in particolare un problema quando il dispositivo si sta misurando IS ha un alto livello di rumore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top