Question

ont une application qui trouve votre position GPS avec succès, mais je dois pouvoir comparer ce GPS avec une liste d'emplacements GPS, si les deux sont identiques, vous obtenez un bonus.

Je pensais que je l'avais de travail, mais il ne semble pas.

J'ai « newLocation » comme l'endroit où vous êtes, je pense que le problème est que je dois être en mesure de séparer les données à long et lat de newLocation.

Jusqu'à présent, ive essayé ceci:

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

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

Un exemple de la liste des emplacements GPS:

location:(CLLocation*)newLocation;

CLLocationCoordinate2D bonusOne;    

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

et

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

arrive avec une erreur « opérandes invalides à == binaires ont jambe de force NSString et CLlocationDegrees »

Toutes les pensées?

Était-ce utile?

La solution

En général, vous devez être prudent avec la comparaison des nombres à virgule flottante directement. En raison de la façon dont ils sont définis, la valeur interne ne peut pas être exactement comme vous les initialisez ce qui signifie qu'ils seront très rarement identiques. Au lieu de cela, vous devriez vérifier pour voir si la différence entre eux sont en dessous d'un certain seuil, par exemple

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

Une autre option pourrait être de vérifier dans quelle mesure la personne est de l'emplacement désiré en calculant la distance. Cela pourrait aussi tenir compte du fait que les coordonnées du GPS n'est pas tout à fait correct, mais peut varier jusqu'à 10 mètres comme même dans de bonnes conditions:

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

Claus

Autres conseils

Pourquoi vous ne compare pas bonusOne.latitude et newLocation.coordinate.latitude directement? Vous conevrting un nombre à virgule flottante à une chaîne, puis la comparer à un nombre à virgule flottante qui est la raison pour laquelle vous obtenez cette erreur.

En outre, étant donné que l'unité GPS a tendance à sauter un peu, vous voulez probablement soit

:. Mesurer la distance entre bonusOne et newLocation.coordinate (en utilisant le théorème de Pythagore pour l'hypoténuse des triangles, si vous vous sentez pointilleux, aucune raison de nous quelque chose de plus précis que quand sur cette petite échelle utiliser la kit de la carte de fonction de mesure de distance) et spécifier son inférieure à un certain montant.

b:. Autour de la latitude et la longitude hors d'un certain nombre de chiffres afin que d'être, à l'intérieur, par exemple 100 pieds travailleraient

Soit de ceux qui fonctionnent mieux pour vous que de compter sur les deux flotteurs égaux, ce qui est à la fois en général problématique dans le logiciel et plus particulièrement un problème lorsque l'appareil que vous mesure est a un niveau sonore élevé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top