Bộ mã hóa và giải mã Geohash
Riêng tư theo thiết kế — chạy hoàn toàn trong trình duyệt của bạn
Ở chế độ encode, nhập vĩ độ và kinh độ (cùng thanh trượt độ chính xác) để nhận chuỗi geohash. Ở chế độ decode, dán hash để xem tọa độ tâm và biên tây nam/đông bắc của ô. Hữu ích cho chỉ mục không gian, truy vấn khoảng cách và lưu vị trí dạng giả ẩn danh.
Geohash thực sự mã hóa gì
Geohash xen kẽ các bit của kinh độ và vĩ độ rồi mã hóa kết quả thành base32 với bảng chữ tùy chỉnh (0-9 và b-z trừ a/i/l/o). Mỗi ký tự mang 5 bit độ chính xác, luân phiên tinh chỉnh kinh độ và vĩ độ. Đầu ra là chuỗi ngắn, an toàn cho URL và quan hệ tiền tố chính là quan hệ bao chứa không gian: mọi geohash bắt đầu bằng "dr5ru" đều nằm trong ô tên dr5ru.
Độ chính xác và kích thước ô
Ở độ chính xác 1, thế giới chia thành 32 ô rộng ~5.000 km. Độ chính xác 5 (~4,9 km tại xích đạo) phù hợp gom dữ liệu theo khu vực. Độ chính xác 9 (~5 m) đủ cho một tòa nhà. Độ chính xác 12 còn ~4 cm và hiếm khi cần ngoài trắc địa. Ô co lại khi tiến gần cực.
Vì sao dùng geohash
Tiền tố chuỗi đánh chỉ mục rất tốt trong PostgreSQL, Redis, DynamoDB và SQLite. Để tìm các điểm trong vòng 5 km quanh mục tiêu, tính geohash của mục tiêu ở độ chính xác 5 rồi tra cứu theo tiền tố — rẻ hơn nhiều so với truy vấn khoảng cách great-circle. Hiện tượng biên ô là có thật nên pipeline thực tế cũng truy vấn 8 ô lân cận. Geohash đơn giản và ra đời sớm hơn S2/H3, vẫn là lựa chọn nhẹ nhất cho khối lượng tìm gần ở đường truyền nóng.
Câu hỏi thường gặp
- Vì sao độ chính xác 5 đã trùm cả thành phố?
- Mỗi ký tự mang 5 bit nên độ chính xác 5 = 25 bit ≈ ô 4,9 km × 4,9 km quanh xích đạo. Một thành phố vài km nằm gọn trong một ô, nên nhiều ứng dụng gọi xe và giao đồ ăn nhóm tài xế/đơn hàng theo geohash độ chính xác 5 để khớp nhanh.
- Hai điểm gần nhau lại có geohash khác nhau — lỗi không?
- Không phải lỗi, đó là tính chất lưới. Hai điểm hai phía biên ô không chia sẻ tiền tố dù cách nhau 1 m. Sản phẩm thực tế truy vấn hash mục tiêu cộng 8 ô lân cận (vòng 3×3).
- Geohash dùng bảng chữ cái nào?
- 0-9 cộng b-z trừ a, i, l, o (những chữ dễ lẫn với 0/1). Đây là base32 với bảng chữ tùy chỉnh để tránh đọc nhầm trên font ít tương phản, khác với base32 chuẩn RFC 4648.
- Geohash so với S2 và H3 thế nào?
- Geohash đơn giản và lâu đời nhất. S2 (lưới cầu chiếu lên lập phương) và H3 (lưới lục giác) xử lý méo gần cực tốt hơn nhưng tốn code hơn. Hầu hết tác vụ gần kề ở mức app, geohash là đủ; cho điều hướng/định tuyến quy mô hành tinh, S2/H3 đáng giá.
- Có thể đánh chỉ mục geohash trong PostgreSQL không?
- Có. Lưu hash dưới dạng cột text với chỉ mục btree, truy vấn theo tiền tố (LIKE 'dr5ru%') sẽ rất nhanh. Cần truy vấn không gian phức tạp hơn thì kết hợp PostGIS; còn lại tiền tố đã đủ.
- Toova có lưu tọa độ tôi mã hóa không?
- Không. Encode và decode chạy bằng JavaScript ngay trên trang này; tọa độ và hash kết quả không bao giờ chạm vào máy chủ Toova.