2 CLLocations / GPS座標を比較する客観C / iPhone
-
21-09-2019 - |
質問
正常にGPSの場所を見つけたアプリを持っていますが、私は両方が同じであれば、あなたはボーナスを得る、GPS位置のリストとそのGPSを比較できるようにする必要があります。
私はそれが働いていたと思ったが、そうではないようです。
私はあなたがいる場所として、私は、問題は、私はnewLocationの長いと緯度のデータを区切ることができるようにする必要があるということだと思う「newLocation」を持っています。
これまでのところ、これを試してみましたアイブます:
NSString *latitudeVar = [[NSString alloc] initWithFormat:@"%g°", newLocation.coordinate.latitude];
NSString *longitudeVar = [[NSString alloc] initWithFormat:@"%g°", newLocation.coordinate.longitude];
GPS位置のリストの例:
location:(CLLocation*)newLocation;
CLLocationCoordinate2D bonusOne;
bonusOne.latitude = 37.331689;
bonusOne.longitude = -122.030731;
し、
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];
}
これは
「バイナリ== NSStringのとCLlocationDegrees支柱きに無効なオペランド」エラーを思い付きます任意の考え?
解決
一般的に、あなたは直接、浮動小数点数を比較するには注意する必要があります。あなたは、彼らは非常にほとんど同一ではないことを意味し、それらを初期化するようので、それらが定義されている方法で、内部値は、の正確のではないかもしれません。代わりに、インスタンス
のために、両者の差がある閾値以下であるかどうかを確認する必要がありますif(fabs(latitude1 - latitude2) <= 0.000001)
...
別のオプションは、人は距離を計算することにより、目的の位置からどれだけ離れているかを確認することである可能性があります。また、これは厳密には正しくないです考慮にGPSから座標という事実を取ることができるが、それでも良い条件の下でのような10メートルまで異なる場合があります:
CLLocation *loc1 = [[CLLocation alloc] initWithLatitude:lat1 longitude:lon1];
double distance = [loc1 getDistanceFrom:position2];
if(distance <= 10)
...
クラウス
他のヒント
なぜあなたは直接bonusOne.latitudeとnewLocation.coordinate.latitudeを比較していませんか?あなたはそのエラーを取得している理由である浮動小数点数と比較すること、文字列を浮動小数点数をconevrtingされます。
また、GPSユニットは、ビットの周りにジャンプする傾向があることを考えると、おそらくどちらか
にしたいです:三角形の斜辺のためにピタゴラスの定理を使って(bonusOneとnewLocation.coordinateの間の距離を測定し、私たちに理由ないこの小さなAスケールであなたがしている感じのうるさい、使用している場合ときに比べて、より正確なもの。キットの距離測定機能)をマッピングし、一定量未満の指定
B:丸数字の特定の数にオフ緯度と経度、内100足がうまくいくと言うされるように
は、これらのどちらかは、あなたがしている測定があるデバイスは、高ノイズレベルを持っている場合、両方のソフトウェアでは、一般的には問題と具体的な問題である、と等しくなるように2つのfloatに頼るよりも、より良いあなたのために動作します。