Muốn gọi tên một chỗ trên Trái Đất bằng một mã ngắn, người ta chia bề mặt địa cầu thành các ô lưới rồi đánh số từng ô. Geohash chia đôi liên tục kinh độ và vĩ độ rồi viết kết quả bằng chữ và số; Plus Code chia mỗi ô thành 20 × 20 ô con; hệ H3 do Uber công bố năm 2018 phủ địa cầu bằng các ô lục giác. Cả ba đều phải đối mặt với một sự thật hình học: không thể lát mặt cầu bằng những ô giống hệt nhau mà không có chỗ méo.
Lưới kinh vĩ: cách chia đầu tiên và cái méo của nó
Cách tự nhiên nhất là kẻ ô theo kinh độ và vĩ độ, mỗi ô 1° × 1°. Theo chiều bắc – nam, 1° vĩ luôn dài khoảng 111 km. Theo chiều đông – tây, 1° kinh dài 111 × cos φ km, với φ là vĩ độ. Tính tay:
| Vĩ độ | Ví dụ | 1° kinh dài | Diện tích ô 1° × 1° |
|---|---|---|---|
| 0° | xích đạo | khoảng 111 km | khoảng 12.400 km² |
| 10,8° B | TP. Hồ Chí Minh | khoảng 109 km | khoảng 12.100 km² |
| 21° B | Hà Nội | khoảng 104 km | khoảng 11.500 km² |
| 60° B | Oslo, Helsinki | khoảng 56 km | khoảng 6.200 km² |
| 89° B | sát Bắc Cực | khoảng 1,9 km | khoảng 215 km² |
Cùng gọi là "một ô", nhưng ô ở xích đạo rộng gấp hơn năm mươi lần ô sát cực, và các ô hàng trên cùng teo lại thành hình tam giác chụm vào một điểm. Với dữ liệu ở Việt Nam, chênh lệch giữa Bắc và Nam chỉ vài phần trăm nên lưới kinh vĩ vẫn dùng tốt. Với dữ liệu toàn cầu, độ méo này làm sai các phép thống kê theo ô.
Hệ toạ độ UTM giải quyết một phần bằng cách chia địa cầu thành 60 múi, mỗi múi rộng 6° kinh, chiếu từng múi lên mặt phẳng riêng. Lãnh thổ đất liền Việt Nam nằm trong hai múi 48 và 49, ranh giới ở kinh tuyến 108° Đ.
Geohash: chia đôi mãi, viết bằng 32 ký tự
Geohash được Gustavo Niemeyer công bố năm 2008. Ý tưởng là phép chia đôi lặp lại, giống trò đoán số "lớn hơn hay nhỏ hơn":
- Khoảng kinh độ [−180°, 180°] chia đôi tại 0°. Điểm nằm nửa đông ghi 1, nửa tây ghi 0.
- Khoảng vĩ độ [−90°, 90°] chia đôi tại 0°. Nửa bắc ghi 1, nửa nam ghi 0.
- Lặp lại, xen kẽ kinh độ và vĩ độ, mỗi lần thu hẹp khoảng chứa điểm còn một nửa.
- Gom mỗi 5 bit thành một số từ 0 tới 31, viết bằng bảng 32 ký tự gồm chữ số 0–9 và chữ cái thường, bỏ a, i, l, o cho đỡ nhầm.
Tính tay ký tự đầu tiên của Hồ Hoàn Kiếm
Hồ Hoàn Kiếm ở khoảng 21,03° B, 105,85° Đ.
- Bit 1 (kinh độ, chia tại 0°): 105,85 > 0, ghi 1. Khoảng còn [0°, 180°].
- Bit 2 (vĩ độ, chia tại 0°): 21,03 > 0, ghi 1. Khoảng còn [0°, 90°].
- Bit 3 (kinh độ, chia tại 90°): 105,85 > 90, ghi 1. Còn [90°, 180°].
- Bit 4 (vĩ độ, chia tại 45°): 21,03 < 45, ghi 0. Còn [0°, 45°].
- Bit 5 (kinh độ, chia tại 135°): 105,85 < 135, ghi 0.
Năm bit 11100 là số 28 trong hệ nhị phân. Trong bảng ký tự geohash, vị trí 28 là chữ w. Làm tiếp sẽ ra mã bắt đầu bằng w7er, và đầy đủ 8 ký tự là w7er8sp5. Một vùng rộng gồm phần lớn Đông Nam Á lục địa cùng nằm trong ô "w".
Mỗi ký tự thêm vào chia ô thành 32 ô con. Kích thước gần đúng ở xích đạo:
| Số ký tự | Kích thước ô (gần đúng) | Đủ để chỉ |
|---|---|---|
| 4 | 39 km × 19,5 km | một vùng đô thị |
| 5 | 4,9 km × 4,9 km | một khu phố lớn |
| 6 | 1,2 km × 0,6 km | một phường nhỏ |
| 7 | 153 m × 153 m | một khối nhà |
| 8 | 38 m × 19 m | một toà nhà |
Điểm mạnh lớn nhất: hai chỗ có chung tiền tố thì nằm gần nhau, nên cơ sở dữ liệu tìm "các điểm quanh đây" chỉ cần so đầu chuỗi. Điểm yếu cũng rõ: hai chỗ cách nhau vài mét nhưng nằm hai bên một đường chia lớn (ví dụ xích đạo hay kinh tuyến 0°) có thể không chung ký tự nào. Phần mềm phải luôn xét thêm tám ô láng giềng. Thứ tự các ô geohash đi theo đường cong hình chữ Z lặp lại ở mọi cấp, gọi là đường cong Z-order.
Plus Code: chia 20 × 20, mã mở cho nơi chưa có địa chỉ
Năm 2014, nhóm kỹ sư của Google ở Zurich công bố Open Location Code, thường gọi là Plus Code, cho những nơi trên thế giới chưa có tên đường, số nhà. Cách chia:
- Cặp ký tự đầu chia địa cầu thành ô 20° × 20° (9 hàng vĩ độ × 18 cột kinh độ).
- Mỗi cặp tiếp theo chia ô hiện tại thành 20 × 20 ô con: 1°, rồi 0,05°, rồi 0,0025°.
- Sau 8 ký tự đặt dấu "+", rồi thêm một cặp nữa, ô cỡ 0,000125°, khoảng 14 m × 14 m.
Bảng 20 ký tự gồm các chữ số 2–9 và 12 chữ cái được chọn để tránh tạo thành từ có nghĩa và tránh nhầm lẫn (không có 0, 1, chữ O, chữ I…). Với Hồ Hoàn Kiếm, mã đầy đủ 10 ký tự là 7PH72VH2+CV. Trong đời thường, người ta bỏ bốn ký tự đầu và thay bằng tên thành phố, kiểu "2VH2+CV Hà Nội", vì ai cũng biết mình đang ở thành phố nào.
Plus Code là chuẩn mở, ai cũng tính được mà không cần mạng hay bản quyền. Đó là khác biệt lớn với một số hệ thương mại dùng ba từ ngữ cho mỗi ô 3 m × 3 m: dễ nhớ hơn nhưng cần danh sách từ của công ty, và từng bị phê bình vì có những cặp từ nghe giống nhau dẫn tới hai chỗ cách xa.
Vì sao không thể lát quả địa cầu toàn bằng lục giác
Lục giác là hình lý tưởng cho lưới: sáu láng giềng đều cách tâm như nhau, không có láng giềng "chéo" như ô vuông. Nhưng trên mặt cầu, lưới thuần lục giác là bất khả. Công thức Euler cho đa diện lồi nói: số đỉnh − số cạnh + số mặt = 2.
Giả sử phủ mặt cầu bằng h lục giác và p ngũ giác, mỗi đỉnh có đúng ba mặt gặp nhau (như lưới tổ ong). Số mặt F = h + p. Mỗi cạnh thuộc hai mặt: E = (6h + 5p) / 2. Mỗi đỉnh thuộc ba mặt: V = (6h + 5p) / 3. Thay vào V − E + F = 2:
(6h + 5p)/3 − (6h + 5p)/2 + h + p = 2. Quy đồng mẫu 6: 2(6h + 5p) − 3(6h + 5p) + 6h + 6p = 12, tức −6h − 5p + 6h + 6p = 12, ra p = 12.
Số lục giác không bị ràng buộc, nhưng luôn phải có đúng 12 ngũ giác. Quả bóng đá cổ điển có 20 lục giác và 12 ngũ giác là ví dụ quen nhất. Mọi hệ lưới lục giác trên địa cầu đều phải giấu 12 ngũ giác ở đâu đó.
H3: lục giác lồng 16 cấp, giấu ngũ giác ngoài biển
Năm 2018 Uber công bố mã nguồn mở của H3, hệ lưới lục giác toàn cầu họ dùng để phân tích chuyến xe và giá theo khu vực. Cách dựng:
- Đặt một khối hai mươi mặt đều (icosahedron) vào trong quả địa cầu, xoay sao cho 12 đỉnh của nó đều rơi xuống biển. 12 đỉnh này về sau thành 12 ngũ giác.
- Cấp thô nhất (cấp 0) có 122 ô: 110 lục giác và 12 ngũ giác.
- Mỗi cấp tiếp theo chia mỗi ô thành khoảng 7 ô con, xoay nhẹ đi một góc. Có 16 cấp, từ 0 tới 15.
- Diện tích trung bình: cấp 7 khoảng 5 km², cấp 9 khoảng 0,1 km² (cạnh chừng 170 m), cấp 15 chưa tới 1 m².
Có một cái giá: bảy lục giác con không ghép khít đúng vào lục giác mẹ, mép bị răng cưa. Vì thế H3 không có quan hệ cha – con hoàn hảo như geohash; đổi lại, mọi phép đo "khu vực quanh đây" đều đồng đều theo mọi hướng, rất hợp để đếm, làm mịn dữ liệu, tính lân cận.
Google có một hệ khác tên S2, chiếu địa cầu lên sáu mặt của một khối lập phương rồi chia ô vuông, đánh thứ tự theo đường cong Hilbert để giữ các ô gần nhau ở gần nhau trong danh sách. Giới khoa học gọi chung các hệ này là lưới toàn cầu rời rạc (Discrete Global Grid Systems).
So sánh nhanh các cách chia
| Hệ | Hình ô | Mỗi cấp chia thành | Điểm mạnh | Điểm yếu |
|---|---|---|---|---|
| Lưới kinh vĩ | "chữ nhật" cong | tuỳ chọn | đơn giản, ai cũng hiểu | méo mạnh về phía cực |
| Geohash | chữ nhật | 32 | tiền tố chung = gần nhau | gãy ở đường chia lớn |
| Plus Code | chữ nhật | 400 (20 × 20) | mở, đọc được, dùng ngoại tuyến | ô vẫn méo theo vĩ độ |
| S2 | tứ giác trên mặt cầu | 4 | cha – con khít, thứ tự Hilbert | ô ở góc khối lập phương méo hơn |
| H3 | lục giác (+12 ngũ giác) | khoảng 7 | láng giềng đều, đo lân cận tốt | con không khít mẹ |
Góc nhìn hôm nay: tự thử các cách chia
- Tính geohash bằng tay cho nhà mình tới 5 bit đầu như ví dụ trên. Sau đó thử với một điểm ở TP. Hồ Chí Minh: vẫn ra chữ "w", vì cả hai thành phố nằm trong cùng ô lớn.
- Xem Plus Code của nhà mình trong ứng dụng bản đồ trên điện thoại: chạm giữ một điểm, mã thường hiện ở phần thông tin. Đọc to cho người nhà nghe và thử xem họ có tìm lại đúng chỗ không.
- Đếm láng giềng: trên giấy kẻ ô vuông, một ô có 4 láng giềng chung cạnh và 4 láng giềng chung đỉnh, xa gần khác nhau. Trên giấy lục giác, 6 láng giềng như nhau. Đó là lý do các nhà phân tích dữ liệu thích lục giác.
- Mã bưu chính là một kiểu chia ô khác, theo tuyến đường phát thư chứ không theo hình học; đặt cạnh các lưới trên để thấy hai triết lý chia khác nhau.
Câu hỏi thường gặp
Geohash là gì?
Geohash là cách mã hoá một vị trí thành chuỗi chữ và số bằng cách chia đôi liên tục khoảng kinh độ và vĩ độ, mỗi 5 bit viết thành một ký tự. Chuỗi càng dài thì ô càng nhỏ: 7 ký tự cho ô khoảng 150 m, 8 ký tự cho ô khoảng 38 m × 19 m.
Plus Code là gì và dùng thế nào?
Plus Code là mã vị trí mở do Google công bố năm 2014, chia địa cầu thành ô 20 × 20 lặp lại nhiều cấp. Mã 10 ký tự chỉ một ô khoảng 14 m × 14 m, có thể viết gọn kèm tên thành phố, dùng được cả khi không có mạng.
Vì sao lưới lục giác trên Trái Đất luôn có 12 ngũ giác?
Vì công thức Euler của đa diện: nếu mỗi đỉnh có ba mặt gặp nhau và các mặt chỉ là lục giác, ngũ giác, thì số ngũ giác bắt buộc bằng 12. Quả bóng đá cổ điển là ví dụ quen thuộc.
H3 của Uber là gì?
H3 là hệ lưới lục giác toàn cầu Uber công bố mã nguồn mở năm 2018, có 16 cấp độ phân giải, mỗi cấp chia ô thành khoảng 7 ô con. 12 ngũ giác bắt buộc được đặt ngoài đại dương để ít ảnh hưởng tới dữ liệu trên đất liền.
Một độ kinh độ dài bao nhiêu km?
Ở xích đạo khoảng 111 km, và giảm theo cos của vĩ độ: khoảng 104 km ở Hà Nội, khoảng 56 km ở vĩ độ 60°, bằng 0 ở hai cực. Một độ vĩ độ thì luôn xấp xỉ 111 km.