Trang bạn liên kết với gợi ý ở câu trả lời; tìm diện tích hộp giới hạn của bạn và chia cho khu vực xô. Mặc dù vậy, nó chỉ ra cách tính kích thước của mỗi thùng geohash, mặc dù nó đưa ra một ví dụ với độ chính xác 5.
Theo trang bạn đã liên kết đến, nó sẽ dừng truy vấn ở 10000 nhóm.
Tính diện tích của khung giới hạn của bạn theo bình phương độ (không cố gắng làm điều này theo km, giữ nó trong lat / long)
Ảnh chụp màn hình bên dưới hiển thị giới hạn của độ chính xác 2 (màu được phân loại theo độ chính xác 1).
Mặc dù vậy, đây không thực sự là các ô xếp - một geohash biểu thị một điểm có lỗi về lat / lon - và các lỗi đó đôi khi sẽ khác nhau giữa kinh độ và vĩ độ (lỗi lớn hơn với vĩ độ, khi độ chính xác là chẵn)
Đã sử dụng một chút Python (sử dụng thư viện Geohash ) để ước tính kích thước của mỗi 'ô' cho các phần khác nhau.
from Geohash import geohash
strg = geohash.encode(56.9,-3.2,precision=15)
for prec in range(1,10):
y,x,yerror,xerror = geohash.decode_exactly(strg[:prec])
xsize = 2*xerror
ysize = 2*yerror
area = xsize*ysize
print("Precision {}".format(prec))
print("\tSize approx {} long by {} lat".format(xsize,ysize))
print("\tArea is {}".format(area))
điều này cho đầu ra sau
Precision 1
Size approx 45.0 long by 45.0 lat
Area is 2025.0
Precision 2
Size approx 11.25 long by 5.625 lat
Area is 63.28125
Precision 3
Size approx 1.40625 long by 1.40625 lat
Area is 1.9775390625
Precision 4
Size approx 0.3515625 long by 0.17578125 lat
Area is 0.061798095703125
Precision 5
Size approx 0.0439453125 long by 0.0439453125 lat
Area is 0.0019311904907226562
Precision 6
Size approx 0.010986328125 long by 0.0054931640625 lat
Area is 6.034970283508301e-05
Precision 7
Size approx 0.001373291015625 long by 0.001373291015625 lat
Area is 1.885928213596344e-06
Precision 8
Size approx 0.00034332275390625 long by 0.000171661376953125 lat
Area is 5.893525667488575e-08
Vì vậy, một cách tiếp cận sẽ là,
- tính toán "diện tích" (tính bằng độ vuông) của hộp giới hạn dựa trên lat / lon của bạn
- đi xuống bảng đó, bắt đầu từ độ chính xác 1 và chia diện tích hộp của bạn (tính theo độ vuông) cho diện tích cho độ chính xác đó
- chọn giá trị chính xác với giá trị phân chia thấp nhất có thể chấp nhận
Để làm rõ 'chấp nhận được': -
giá trị phân chia rất thấp như 0,001 có lẽ có nghĩa là độ chính xác quá thấp. Bạn sẽ không tìm nạp nhiều thùng, nhưng sẽ xem xét rất nhiều điểm xa mà bạn không cần.
Đối với giá trị trên 10000, độ chính xác quá cao. Bạn sẽ loại bỏ các lượt truy cập có thể và chịu hiệu suất chậm hơn.
Bạn sẽ cần thử nghiệm để tìm ra một giá trị mang lại hiệu suất tốt nhất.