Khi làm La Kinh Phong Thuỷ, phần tưởng đơn giản nhất — “đọc hướng từ cảm biến” — lại là phần tốn nhiều thời gian nhất. Lý do: iOS trả về hai loại heading, và chúng không giống nhau.
magneticHeading và trueHeading
CLHeading có hai thuộc tính. magneticHeading là góc so với cực từ; trueHeading là góc so với cực địa lý. Chênh lệch giữa hai giá trị này gọi là độ từ thiên (magnetic declination), và ở Việt Nam nó vào khoảng 0–1°. Nghe thì nhỏ, nhưng phong thuỷ chia la kinh thành 24 sơn, mỗi sơn 15° — lệch 1° ở ranh giới sơn là đổi hẳn kết luận.
Phong thuỷ truyền thống dùng cực từ: la bàn thật là một kim nam châm. Nên app phải dùng magneticHeading, không phải trueHeading — dù trueHeading nghe “chính xác” hơn.
trueHeading trả về -1
Một cái bẫy nữa: trueHeading trả về giá trị âm khi chưa có quyền vị trí. Nếu bạn hiển thị thẳng giá trị đó, người dùng thấy la bàn chỉ “-1°” và nghĩ app hỏng.
Quy tắc: luôn kiểm tra
headingAccuracy >= 0trước khi tin vào bất kỳ giá trị heading nào.
Nhiễu từ trường
Cảm biến từ trường bị nhiễu bởi mọi thứ có kim loại hoặc nam châm: ốp lưng có MagSafe, bàn sắt, cốt thép trong bê tông. iOS báo mức nhiễu qua headingAccuracy — giá trị càng lớn càng kém tin cậy. App hiển thị cảnh báo khi vượt ngưỡng, thay vì im lặng đưa ra số sai.
Làm mượt số đo
Giá trị thô nhảy liên tục. Nhưng lọc quá tay thì kim phản hồi chậm, cầm máy xoay mà kim đuổi theo sau — cảm giác rất tệ. Cách cân bằng: lọc trung bình trượt trên một cửa sổ ngắn, và bỏ qua bộ lọc khi biên độ thay đổi lớn (người dùng đang xoay máy có chủ đích).
Kết quả sau vài vòng lặp: kim ổn định khi đứng yên, bám sát khi xoay, và tuyệt đối không tự “trôi” — điều mà một app đo lường bắt buộc phải làm được.