1

見出しを取得するために次のコードを使用してコンパスアプリケーションを作成しました。これは完全に機能しています。ユーザーの見出しとして針が回転することに注意してください。

-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
    UIDevice *device = [UIDevice currentDevice];
    if (newHeading.headingAccuracy >0) {
        float magnaticHead = [self magneticHeading:newHeading.magneticHeading fromOrientation:device.orientation];
        float trueHead = [self trueHeading:newHeading.trueHeading fromOrientation:device.orientation];
         my= trueHead;

        magneticHeadingLabel.text = [NSString stringWithFormat:@"%f", magnaticHead];
        trueHeadingLabel.text = [NSString stringWithFormat:@"%f",trueHead];
        heading = -1.0f * M_PI * newHeading.magneticHeading / 180.0f;
      arrowImage.transform = CGAffineTransformMakeRotation(heading);

    }

そのため、現在の場所から経度と緯度がわかっている特定の場所に針を向けたいと思います。したがって、次のコードを使用して、既知の場所との間の方位を計算します。

-(CGFloat)bearing:(double)latitude1:(double)longitude1:(double)latitude2:(double)longitude2{

    CLLocation *location = [locationManager location];
    CLLocationCoordinate2D user = [location coordinate];

    float dx = 21.422495 - user.latitude;
    float dy = 39.826201 - user.longitude;
     angle = RADIANS_TO_DEGREES(atan2(dy, dx));


    // Set Latitude and Longitude

    latitude1 = DEGREES_TO_RADIANS(latitude1);
    latitude2 = DEGREES_TO_RADIANS(latitude2);
    // Calculate Difference

    double longitudeDifference = DEGREES_TO_RADIANS(longitude2 - longitude1);
    // Returns the Sine and the Cosine of the specified angle

    double y = sin(longitudeDifference) * cos(latitude2);
    double x = cos(latitude1) * sin(latitude2) - sin(latitude1)* cos(latitude2) * cos(longitudeDifference);
    // Return Bearing
    double rTD =(RADIANS_TO_DEGREES(atan2(y, x))+360) ;
     CGFloat bearingValue = (float)((int)rTD % (int)360);


     return  bearingValue;

}

しかし、戻り値を使用して針を回転させると、針は動的に回転しません。

誰でも私が針を回転させて特定の場所を指すようにするのを手伝ってくれますか?助けてください!!

4

2 に答える 2

1

からの戻り値を保存します

-(CGFloat)bearing:(double)latitude1:(double)longitude1:(double)latitude2:(double)longitude2;

次のような変数で:

degrees = [ self bearing:here.latitude :here.longitude :21.422495 :39.826201 ];

その後、メソッドで:

-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading;

頭を手に入れ、針を回転させます:

needle.transform = CGAffineTransformMakeRotation((degrees-newHeading.trueHeading) * M_PI / 180);

これで、針が特定の場所を指しています。

于 2013-11-18T10:17:28.943 に答える
0

メソッドを呼び出すのはいつですか。

`bearingValue = [self bearing:locationManager.location.coordinate.latitude :locationManager.location.coordinate.longitude :21.422495 :39.826201];`  

最後に追加する必要があります

-(void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading

針を十分な頻度で更新します。

于 2013-02-26T08:27:53.323 に答える