我正在構建應該向某個位置顯示箭頭的應用程序。例如,如果我在位置X並且目標設置爲位置Y,則應該顯示一個直接指向該位置的箭頭。計算職位的位置
尋尋覓覓,我發現有兩種計算這個的一些奇特的公式後,但我似乎搞錯了一遍又一遍。
這是我的問題。雖然它似乎找到正確的初始位置,只要我把我的設備的「箭頭」將在相反方向或什麼它應該。所以,如果我順時針旋轉設備,箭頭也會順時針旋轉......反之亦然。
這是我的一些代碼:
@implementation CompassViewController
BOOL firstPositionFound = NO;
float lastPosition = 0;
float currentHeading = 0;
[...]
#pragma mark -
#pragma mark Core Location Methods
- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading
{
if (newHeading.headingAccuracy > 0) {
CLLocationDirection theHeading = newHeading.magneticHeading;
currentHeading = theHeading;
[self fixPointer:theHeading];
}
}
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{
self.currentLocation = newLocation;
[self fixPointer:currentHeading];
}
- (void)fixPointer:(float)heading
{
float degree = [self calculateDegree:self.currentLocation];
degree = heading - degree;
NSLog(@"heading: %f, Degree: %f", heading, degree);
NSLog(@"Degree 2: %f", degree);
self.arrowView.transform = CGAffineTransformMakeRotation(degreesToRadians(degree));
}
#pragma mark -
#pragma mark Delegate methods
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return (interfaceOrientation == UIInterfaceOrientationPortrait);
}
#pragma mark -
#pragma mark Other methods
- (float)calculateDegree:(CLLocation *)newLocation
{
CLLocationCoordinate2D from = newLocation.coordinate;
CLLocationCoordinate2D to;
to.latitude = APP_DESTINATION_LAT;
to.longitude = APP_DESTINATION_LON;
float res = atan2(sin((to.longitude*M_PI/180)-(from.longitude*M_PI/180))*cos(to.latitude*M_PI/180),
cos(from.latitude*M_PI/180)*sin(to.latitude*M_PI/180)-sin(from.latitude*M_PI/180)*cos(to.latitude*M_PI/180)*cos((to.longitude*M_PI/180)-(from.longitude*M_PI/180)));
res = res/M_PI*180;
if (res < 0)
res = 360.0f + res;
return res;
}
#pragma mark -
我只是失去了,可能有人請指出我哪裏出了錯?我想它是一些簡單的事情,我目前是盲目看待的。
謝謝!你的回答確實對我有幫助。我更新了我所提供的代碼,這種方式更好。不過,我還有一個問題,現在:它似乎爲我的經度/緯度向目的地正確度...但它預計手機有0標題(指向北方)。如果我計算從軸承中減去標題的半徑,它仍然不準確。有什麼建議嗎? –
@珍妮-B你對我有什麼建議嗎? –
@Paul Peelen沒有看到您的代碼,我不知道如何回答您,但是,簡單的答案是確保您使用正確的單位並調整設備方向。因此,請確保您正在從度數減去度數,而不是從弧度減去度數,並確保您已從磁力儀獲得的值已根據設備方向進行調整。 – Jenn