2011-04-05 6 views
5

Đây là lần đầu tiên tôi đăng câu hỏi ở đây, nhưng tôi đã tìm thấy rất nhiều trợ giúp từ các câu hỏi của người khác.Thứ tự của các đối tượng CLLocation trong -distanceFromLocation:

Câu hỏi của tôi đề cập đến chức năng -distanceFromLocation: trong CLLocation. Tôi đã giả định rằng việc tìm khoảng cách giữa điểm A và điểm B sẽ giống như điểm giữa điểm B và điểm A, nhưng tôi đã thấy rằng nó không phải là. Tôi đã thử nghiệm điều này trong một trường hợp rất đơn giản:

CLLocation *test1 = [[CLLocation alloc] initWithLatitude:37.529530 longitude:-122.259232]; 
CLLocation *test2 = [[CLLocation alloc] initWithLatitude:47.900002 longitude:-103.495102]; 
NSLog(@"%f vs %f",[test2 distanceFromLocation:test1],[test1 distanceFromLocation:test2]); 
[test1 release]; 
[test2 release]; 

Kết quả là 1907269.942754 và 1908105.959114, chênh lệch gần 900 mét.

Mặc dù 900 mét có thể là một tỷ lệ phần trăm nhỏ, tôi đang cố gắng xác định xem người dùng có gần hơn với chú thích hay không và 900 mét có thể thay đổi điều đó.

Câu hỏi của tôi là, một trong những giá trị này, nếu có, là đúng? Ngoài ra, nếu tôi kiểm tra vị trí nào là quan trọng, tôi có cần phải luôn kiểm tra cùng một vị trí không (ví dụ: người dùng đến đích và chú thích đến đích thay vì đích đến người dùng và chú thích đến đích)?

Xin lỗi rằng mẫu hơi lệch ngữ cảnh, vì dự án của tôi khá lớn và điều này minh họa sự cố của tôi. Bất kỳ trợ giúp nào cũng sẽ được đánh giá cao vì điều này đã khiến tôi khá bối rối và thất vọng.

Trả lời

1

Lỗi bạn đang quan sát là 1 phần trong năm 2000. Có lẽ thuật toán được sử dụng trong phương pháp này được tối ưu hóa cho tốc độ, do đó việc sắp xếp danh sách vị trí trên khoảng cách nhanh chóng, chứ không phải chính xác đến milimet.

Nếu bạn cần kết quả chính xác, không sử dụng các phương pháp này nhưng tìm cách khác. Nếu bạn cần kết quả có thể lặp lại, hãy sắp xếp các đối số theo cách được xác định, ví dụ: luôn bắt đầu với vĩ độ thấp hơn.