Frage

haben eine Anwendung, die erfolgreich Ihre GPS-Position findet, aber ich muss in der Lage sein, die GPS mit einer Liste von GPS-Positionen zu vergleichen, wenn beide gleich sind, dann erhalten Sie einen Bonus.

Ich dachte, ich hätte es funktioniert, aber es scheint nicht.

Ich habe ‚newLocation‘ als Ort, wo Sie sind, ich glaube, das Problem ist, dass ich die langen und lat Daten von newLocation trennen können.

ive dies bisher versucht:

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

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

Ein Beispiel für die Liste der GPS-Standorte:

location:(CLLocation*)newLocation;

CLLocationCoordinate2D bonusOne;    

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

und dann

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

Dieses kommt mit einem Fehler auf ‚ungültige Operanden binäre == have Strebe NSString und CLlocationDegrees‘

Alle Gedanken?

War es hilfreich?

Lösung

Generell sollte man beim Vergleichen Gleitkommazahlen direkt vorsichtig sein. Aufgrund der Art, wie sie definiert sind, kann der interne Wert nicht genau , wie Sie sie initialisieren was bedeutet, dass sie sehr selten identisch. Stattdessen sollten Sie überprüfen, ob der Unterschied zwischen ihnen unter einem bestimmten Schwellenwert ist, zum Beispiel

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

Eine andere Möglichkeit könnte sein, zu prüfen, wie weit die Person, von der gewünschten Stelle ist durch den Abstand zu berechnen. Dies könnte auch berücksichtigen, dass die von der GPS-Koordinate ist nicht ganz richtig, aber kann bis zu 10 Meter, wie auch unter guten Bedingungen unterscheiden:

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

Claus

Andere Tipps

Warum vergleichen Sie nicht bonusOne.latitude und newLocation.coordinate.latitude direkt? Sie sind eine Gleitkommazahl in einen String conevrting und dann zu einer Gleitkommazahl zu vergleichen, weshalb Sie diesen Fehler bekommen.

Auch gegeben, dass die GPS-Einheit ein wenig herumspringen neigt, möchten Sie wahrscheinlich zu jedem

a: messen Sie den Abstand zwischen bonusOne und newLocation.coordinate (der Satz des Pythagoras für die Hypotenuse der Dreiecke verwenden, keinen Grund, uns etwas genauer als die, wenn sie auf dieser kleinen Skala ein, wenn Sie das Gefühl pingelig, verwenden Sie die. map Kit Abstandsmessfunktion) und gibt ihre weniger als einen bestimmten Betrag.

b. Rund um die geografische Breite und Länge ab einer bestimmten Anzahl von Stellen, so daß das Sein, in der, sagen wir 100 Meter funktionieren würde,

So oder von denen, besser für Sie arbeiten als auf den beiden Schwimmer unter Berufung gleich sein, die in der Software sowohl im Allgemeinen problematisch ist und insbesondere ein Problem, wenn das Gerät Sie messen einen hohen Geräuschpegel aufweist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top