Tính toán chính xác tối ưu Geohash từ hộp giới hạn


8

Tôi đang sử dụng Tập hợp lưới GeoHash của Elaticsearch để vẽ các cụm trên bản đồ (sử dụng Tờ rơi). Tôi hiểu rằng đối với các khu vực lớn hơn, precisionnên sử dụng cài đặt thấp hơn để giới hạn số lượng xô được tạo / trả lại.

Làm thế nào tôi nên xác định giá trị chính xác phù hợp để yêu cầu?

Có một công thức tiêu chuẩn hoặc được khuyến nghị để tính toán độ chính xác tối ưu dựa trên hộp giới hạn và / hoặc mức thu phóng không? Có tốt hơn không khi chỉ ánh xạ các mức thu phóng đến các giá trị chính xác (tôi biết đó có lẽ là dễ nhất.)

Câu trả lời:


11

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).

nhập mô tả hình ảnh ở đây

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.


Cảm ơn các câu trả lời chi tiết; rất hữu ích Cách tiếp cận này có vẻ như sẽ giúp tôi có được những gì tôi cần.
Peter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.