2012-01-04 6 views
0

ロケーションベースのアプリケーションを作成しようとしていて、3日間デバッグしようとしていて、何が間違っているのか分からない...私のビューコントローラでは、デリゲート法による位置点(緯度および経度):ロケーションベースのアプリケーションデバッグ

CurrentPointの2つのLAT特性とlongit両方フロートを持つオブジェクトに過ぎない私が作成したPointxyクラスのオブジェクトである
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation   fromLocation:(CLLocation *)oldLocation{ 
    currentPoint.lat=newLocation.coordinate.latitude*M_PI/180; 
    currentPoint.longit=newLocation.coordinate.longitude*M_PI/180; 
} 

次に、NSMutableArray(ptArray)とlong doubleというエリアというプロパティを持つShapeという別のクラスを作成しました。

私はその後、プリフォーム以下シェイプの方法でそれらを使用し、その後ptArrayに先のとがったオブジェクトの束を保存し、:

-(void)CalculateArea{ 
for (int i=0; i<[self NumberofPoints]-1; i++) { 
    Pointxy *pointi=[ptArray objectAtIndex:i]; 
    Pointxy *pointiplus1=[ptArray objectAtIndex:i+1]; 
    area-=6371.0*6371.0/2.0*(pointiplus1.longit-pointi.longit)*(2+sinf(pointiplus1.lat)+sinf(pointi.lat)); 
} 
Pointxy *pointzero=[ptArray objectAtIndex:0]; 
Pointxy *pointlast=[ptArray objectAtIndex:[ptArray count]-1]; 

area-=6371.0*6371.0/2.0*(pointzero.longit-pointlast.longit)*(2+sinf(pointzero.lat)+sinf(pointlast.lat)); 
area=area*1000000.0; 
    } 

私が午前問題は、私はこれを使用してUILabelで領域を表示しようとするということですコード:MyShapeはShapeオブジェクトであるとAreaLabelはUILabelです

NSString *AreaString=[[NSString alloc]initWithFormat:@"%Lf",MyShape.area]; 
    [AreaLabel setText:AreaString]; 

、私はいつも0.0000が表示され、私は誰もが、なぜ見ることができないはず取得していますか?私はおそらくそれは私の変数との精度の問題だと思いますか? ありがとうございました

+0

座標は度です。ラジアンから変換する必要はありません。あなたはNSLogを使って得た座標を印刷しようとしましたか? CalculateArea関数を既知の良いデータでユニットテストしましたか? – progrmr

+0

私はそれをテストしませんでしたが、私のソースはnasaのペーパーです:http://trs-new.jpl.nasa.gov/dspace/bitstream/2014/40409/1/07-03.pdfので、間違いなくそれはまったくありません。たとえ同じミスがあったとしても、どうしてそれはいつもゼロを返すことができますか?私はそれをsinf()関数で使用するためにラジアンに変換しました...はい、実際に配列に格納されている座標をリアルタイムで表示するLabelがあります。 – Mppl

+0

@ user611295:NASAの論文は間違いがないかもしれませんが、確認してテストする必要があるのはあなたのアルゴリズムの実装です。さらに、Objective-Cでは、エリアアルゴリズムコードが正しい場合でも、答えがゼロになる方法はたくさんあります。あなたが使用しているオブジェクトのいくつかがalloc + init-edされていない場合、それらはnilになり、no-opsになります。例:MyShapeがnilの場合、MyShape.areaはゼロを返します。 ptArrayがnilまたは空の場合、ゼロが返されます。 Progrmrが示唆するように、ロギングを追加して単体テストを行う必要があります。 – Anna

答えて

0

私は間違いを理解しました。私は[ptArray addObject:currentPoint];ここでcurrentPointpointxyインスタンスです呼び出していた。

事はその後IがcurrentPoint.latlongitに新しい値を割り当てたが、私は値があまりに配列オブジェクトに変更された値を変更したときaddObject方法ので参照してオブジェクトを通過した後、私はcurrentPointもうを添加しましたそれは参照によって渡されて以来、私は今、私の配列に等しい点のセットを持っていて、それらの点の内部の図の内側の領域は実際にゼロでした!

関連する問題