4

私はobjective-cを初めて使用するので、質問があまりにもくだらない場合はお詫び申し上げます。

コンパスをプログラミングしていますが、まだ機能しています (チュートリアルのおかげです)。実際の位置(経度と緯度)が表示されます。コンパス内の矢印が特定の場所 (経度 2 と緯度 2) への方向を示すことは可能ですか? iPhone の磁力と真の向きを考慮する必要があることを読みました。

4

5 に答える 5

4
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading {
    double heading = newHeading.trueHeading; //in degree relative to true north
    double bearing = ... //get current bearing in degree relative to true north
                         //with the JS library mentioned below it would be something like
                         //bearing = userLoc.bearingTo(destionation);

    //just two lines, the the sake of the example
    double rotationInDegree = (bearing - heading);  //the important line
    rotationInDegree = fmod((rotationInDegree + 360), 360);  //just to be on the safe side :-)
    compassViewPerhapsAsImage.transform=CGAffineTransformMakeRotation(DegreesToRadians(rotationInDegree));
}

方位を計算するための良いリンク:

于 2011-11-09T15:04:14.497 に答える
1

あまり正確である必要がない場合は、かなり簡単です。2 点間の角度を計算し、コンパスに角度を表示するだけです。(コードを投稿していないので、 のようなメソッドがあるかどうかはわかりませんがsetAngleForCompass、そうすべきです!)これを試してください:

float dx = Longitude2 - Longitude1;
float dy = Latitude2 - Latitude1;
float angle = atan2(dy, dx);
// Set the angle of the compass here.

または、CMMotionManagerを使用してジャイロスコープにアクセスすることもできます。これにより、正しい方向を示すこともできます。(しゃれが意図されています!)それが役立つことを願っています!

于 2011-09-04T09:17:39.900 に答える
0

また、場所への進行方向を計算する必要がありました。私が見つけた最良の方法は、余弦の球面法則を使用することでした。これを実装するために C 関数を作成しました。それらはgithub で入手できます。headerInDegrees 関数が必要なようです。これにより、真の見出しが得られます。

于 2011-09-04T13:07:24.453 に答える
-1

私の遅れた答えに感謝し、叫びます。私は特定の方向を示す矢印に取り組んでいます。私が今やったことは、この矢印にアニメーションを実行させることですが、私の問題は、iPhoneが「向かっている」のと同じ方向を(最初は)指している必要があるということです。

これまでの私のコード:

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{double heading = newHeading.trueHeading;
[self rotateCompass:heading];
}

- (void) rotateCompass: (double) degrees{
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationDelegate:self];
[UIView setAnimationDuration:2];
[UIView setAnimationCurve:UIViewAnimationCurveEaseIn];
[UIView commitAnimations];
compassRose.transform = CGAffineTransformMakeRotation(degrees);
}

緯度、経度、および見出しを表示するラベルを取得するための他のルーチンがあり、それは機能します。私の矢は理由もなく狂ったように回転します。矢印がtrueHeadingのように同じ方向を向くようにしたい。つまり、iPhoneのやり方で

于 2011-09-11T10:19:03.177 に答える