2011-06-22 18 views
6

Cách tính giá trị nhóm từ tính để có được hướng địa lý tức là, Bắc, Đông Bắc, Đông, Đông Nam, Nam, Tây Nam, Tây, Tây Bắc?Tìm chỉ đường địa lý bằng cách sử dụng từ tính

Khi từ trường chỉ trả về giá trị của độ và yêu cầu của nó cho tôi để hiển thị hướng địa lý, trên cơ sở từ khóa được cập nhật liên tục.

Tôi làm cách nào để có thể thực hiện?

+0

Tôi nghĩ rằng họ đã thêm chức năng cho thư viện mapKit. Bạn nên kiểm tra xem nó ra. – Radu

+0

Tôi không tìm thấy chức năng như vậy. Nếu trong trường hợp, bạn tìm thấy, xin vui lòng cho tôi biết. –

+1

Tôi tự tìm ra giải pháp. Tôi đã thử nghiệm logic thực hiện và cũng đã so sánh cùng với Compass, và nó làm việc tốt với ứng dụng của tôi. –

Trả lời

9

Dưới đây là mã mà tôi đã sử dụng để hiển thị liên tục cập nhật hướng địa lý.

 CGFloat currentHeading = newHeading.magneticHeading; 
     NSString *strDirection = [[NSString alloc] init]; 

     if(gradToRotate >23 && gradToRotate <= 67){ 
       strDirection = @"NE"; 
     } else if(gradToRotate >68 && gradToRotate <= 112){ 
       strDirection = @"E"; 
     } else if(gradToRotate >113 && gradToRotate <= 167){ 
       strDirection = @"SE"; 
     } else if(gradToRotate >168 && gradToRotate <= 202){ 
       strDirection = @"S"; 
     } else if(gradToRotate >203 && gradToRotate <= 247){ 
       strDirection = @"SW"; 
     } else if(gradToRotate >248 && gradToRotate <= 293){ 
       strDirection = @"W"; 
     } else if(gradToRotate >294 && gradToRotate <= 337){ 
       strDirection = @"NW"; 
     } else if(gradToRotate >=338 || gradToRotate <= 22){ 
       strDirection = @"N"; 
     } 

Nó hoạt động tốt ở cuối của tôi. Các bậc thầy được hoan nghênh cho tôi biết nếu có bất kỳ sửa đổi nào được yêu cầu.

+1

Tôi không thể tìm thấy độ chuẩn để xác định hướng chính xác về địa lý, đó là lý do tại sao đặt phép tính này bằng so sánh với la bàn. –

+0

Chỉ cần tuyệt vời (hữu ích cho mọi người ngay cả sau hai năm) :-) .. làm thế nào bạn có được những giá trị này cho các độ? Bất kỳ nguồn nào? – thandasoru

+1

Cảm ơn. Không có nguồn, hoàn toàn tự thực hiện logic. –

2

Hãy thử ví dụ này do Matt Neuburg cung cấp trên Github. https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch22p775heading/ch35p1035heading/ViewController.swift

func locationManager(manager: CLLocationManager, didUpdateHeading newHeading: CLHeading) { 
    var h = newHeading.magneticHeading 
    let h2 = newHeading.trueHeading // will be -1 if we have no location info 
    print("\(h) \(h2) ") 
    if h2 >= 0 { 
     h = h2 
    } 
    let cards = ["N", "NE", "E", "SE", "S", "SW", "W", "NW"] 
    var dir = "N" 
    for (ix, card) in cards.enumerate() { 
     if h < 45.0/2.0 + 45.0*Double(ix) { 
      dir = card 
      break 
     } 
    } 
    print(dir) 
} 

Hoàn hảo!

+1

Cảm ơn bạn đã làm việc tốt. – fozoglu

2
CLLocationDirection heading = ((newHeading.trueHeading > 0) ? 
            newHeading.trueHeading : newHeading.magneticHeading); 

NSString *geoDirectionString = [[NSString alloc] init]; 

if(heading >22.5 && heading <= 67.5){ 
    geoDirectionString = @"North East"; 
} else if(heading >67.5 && heading <= 112.5){ 
    geoDirectionString = @"East"; 
} else if(heading >112.5 && heading <= 157.5){ 
    geoDirectionString = @"South East"; 
} else if(heading >157.5 && heading <= 202.5){ 
    geoDirectionString = @"South"; 
} else if(heading >202.5 && heading <= 247.5){ 
    geoDirectionString = @"South West"; 
} else if(heading >248 && heading <= 293){ 
    geoDirectionString = @"West"; 
} else if(heading >247.5 && heading <= 337.5){ 
    geoDirectionString = @"North West"; 
} else if(heading >=337.5 || heading <= 22.5){ 
    geoDirectionString = @"North"; 
} 
Các vấn đề liên quan