2012-05-23 11 views
5

Tôi đang làm việc trên một số ứng dụng iPhone và tôi muốn tạo hình ảnh di chuyển đến vị trí địa lý cụ thể, tùy thuộc vào vị trí của người dùng bằng gia tốc kế.iOS: Nhận góc để định vị địa lý từ vị trí hiện tại mà không có bản đồ

Tôi đã đọc nhiều câu trả lời ở đây nhưng không nhận được giải pháp.

Tôi có tọa độ vị trí hiện tại và tọa độ đích.

Bạn có ý tưởng hay mã mẫu nào không? Cảm ơn.

+0

Xem [this] (http://stackoverflow.com/questions/6745131/how-can-we-find-the-angle-between-two-locations-defined-by-latitude-or-longitude) và [this] (http://www.movable-type.co.uk/scripts/latlong.html) để tham khảo –

Trả lời

9

on Top xác định

#define RadiansToDegrees(radians)(radians * 180.0/M_PI) 
#define DegreesToRadians(degrees)(degrees * M_PI/180.0) 

xác định biến này trong tập tin .h

float GeoAngle; 

trong phương pháp đại biểu quản lý vị trí của bạn: -

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    GeoAngle = [self setLatLonForDistanceAndAngle:newLocation]; 
} 

Và chức năng sẽ thực hiện như sau : -

-(float)setLatLonForDistanceAndAngle:(CLLocation *)userlocation 
{ 
    float lat1 = DegreesToRadians(userlocation.coordinate.latitude); 
    float lon1 = DegreesToRadians(userlocation.coordinate.longitude); 

    float lat2 = DegreesToRadians(locLat); 
    float lon2 = DegreesToRadians(locLon); 

    float dLon = lon2 - lon1; 

    float y = sin(dLon) * cos(lat2); 
    float x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon); 
    float radiansBearing = atan2(y, x); 
    if(radiansBearing < 0.0) 
    { 
     radiansBearing += 2*M_PI; 
    } 

    return radiansBearing; 
} 

Bạn sẽ nhận được góc cập nhật liên tục trong biến GeoAngle. để xoay mũi tên đến vị trí đích lấy hình ảnh mũi tên và gán nó cho IBOutlet của arrowImageView và xoay nó trên phương thức cập nhật tiêu đề.

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading 
{ 
    float direction = -newHeading.trueHeading; 

    arrowImageView.transform=CGAffineTransformMakeRotation((direction* M_PI/180)+ GeoAngle); 
} 
+0

Cảm ơn bạn tôi đã nhận được góc, nhưng làm thế nào để xoay chính xác hình ảnh của tôi bằng cách sử dụng gia tốc kế để hiển thị hướng này? Tôi đã sử dụng góc trong phương pháp này: - (void) gia tốc: (UIAccelerometer *) accelerometer didAccelerate: (UIAcceleration *) tăng tốc; nhưng nó vẫn không cập nhật ngay cả khi tôi xoay iPhone. – hafedh

+0

Nếu bạn muốn trỏ mũi tên đến vị trí đích, hãy kiểm tra lại câu trả lời Tôi đã chỉnh sửa câu trả lời. – Dhawal

+0

Đã hoạt động! Cảm ơn nhiều. – hafedh