SRS nào để sử dụng cho các truy vấn khoảng cách toàn cầu?


8

Tôi có một cơ sở dữ liệu với rất nhiều điểm trong WGS84. Bây giờ tôi đang xây dựng bộ đệm thực hiện NN và trỏ vào các truy vấn phạm vi bằng cách sử dụng KDtree. Điểm [sic] là bán kính tìm kiếm sẽ được cung cấp theo mét và lat / lon không phải là một SRS đẹp cho các truy vấn hình học này.

Tôi đang tìm kiếm một SRS hình học có thể áp dụng cho toàn thế giới và bảo tồn khoảng cách. Tôi không quan tâm đến lỗi của một vài mét 10.


Tại sao không chuyển đổi tất cả các điểm thành tọa độ 3D xyz (địa tâm) và xây dựng cây KD của bạn trên đó? Mặc dù nó không bảo toàn khoảng cách, khoảng cách trên quả cầu dễ dàng được chuyển đổi thành khoảng cách trong 3D cho mục đích truy vấn. Trên thực tế, thật dễ dàng để chuyển lat-lon thành xyz bằng mô hình elip mà bạn không cần phải hy sinh bất kỳ độ chính xác nào, nhưng ngay cả khi bạn sử dụng mô hình hình cầu, tất cả các khoảng cách phải chính xác đến khoảng 0,3% (tệ nhất là ).
whuber

Câu trả lời:


2

Tôi đã làm một số việc cho "Chỉ số không gian hình cầu". Có một loạt các phương pháp có thể sử dụng phân rã hình tam giác của hình cầu, hoặc voronoi nghiêng. Mặc dù vậy, một phương pháp có thể dễ dàng thực hiện là xem xét dữ liệu của bạn ở chế độ 3d, như trong phần "Hộp giới hạn 3D" ở đây:

http://lin-ear-th-inking.blogspot.co.uk/2007/09/geodetic-data-in-postgis-spherical.html

Sau đó, bạn cần một chỉ số không gian 3d của một số loại, sau đó bạn có thể nhanh chóng tìm thấy tất cả các điểm trong phạm vi 1km của bạn. Đây sẽ là bán kính tìm kiếm 3D 1km , hơi khác so với bán kính 1km dọc theo bề mặt trái đất, nhưng đối với bán kính tìm kiếm nhỏ, nó sẽ giống hệt nhau (làm toán để tìm ra cách hiệu chỉnh).

Nếu bạn muốn độ chính xác tuyệt đối, hãy sử dụng bước này như bước đầu tiên và sau đó tính khoảng cách qua vòng tròn lớn để loại bỏ những khoảng cách xa hơn (khoảng cách dọc theo một hình cầu luôn lớn hơn khoảng cách qua một hình cầu).


Này, đó là một ý tưởng! Tôi có thể chen vào một chiều không gian khác trong KDTree của mình và làm việc với điều đó. Sẽ cần một số làm lại mặc dù :)
RickyA

4

Với các phép chiếu SRS / Map, nó luôn luôn là một sự đánh đổi. Thực sự không có cái nào phù hợp cho tất cả mọi nơi trên thế giới. Cũng có thể giả định rằng trái đất là một hình cầu.

Thay vì tìm kiếm một SRS phù hợp với toàn thế giới, tôi nghĩ rằng bạn nên tìm kiếm các thuật toán tính toán khoảng cách tốt hơn . Một ví dụ là Great Circle Distanc e dựa trên lượng giác hình cầu. Nó thực hiện các giả định mặc dù như:

  • 1 phút cung là 1 hải lý
  • 1 hải lý là 1,852 km.

Công thức là:

D = 1.852 * 60 * ARCOS ( SIN(L1) * SIN(L2) + COS(L1) * COS(L2) * COS(DG)

Ở đâu:

L1  =   latitude at the first point (degrees)
L2  =   latitude at the second point (degrees)
G1  =   longitude at the first point (degrees)
G2  =   longitude at the second point (degrees)
DG  =   longitude of the second point minus longitude of the first point (degrees)
DL  =   latitude of the second point minus latitude of the first point (degrees)
D   =   computed distance (km)

Bạn có thể muốn kiểm tra nó với dữ liệu của bạn trước và xem kết quả. Btw, bạn có đang sử dụng cơ sở dữ liệu không gian như PostGIS không?


Vâng, đó là điểm. Postgis không đủ nhanh cho tôi. Những gì tôi làm ngay bây giờ là đặt tất cả các điểm vào redis và đặt chỉ số KDtree lên trên nó. NHƯNG KDtree là một giải pháp hình học. Nếu tôi hỏi nó một câu hỏi như "cho tất cả các điểm trong bán kính 1k" thì nó sẽ tạo ra khoảng cách về mặt hình học. Tôi không thể làm haversine ở đó. Tôi cần phải chuyển đổi nó trước thành SRS tương đương. Nhưng cái nào?
RickyA

Cập nhật câu trả lời của tôi với công thức. Đó là vấn đề, không có SRS / CRS dự kiến ​​(hình học) nào có thể áp dụng cho toàn thế giới.
RK

Và tốt nhất khoảng? Tôi không thực sự quan tâm đến các cực, chỉ có chim cánh cụt ở đó, nhưng một cái gì đó thực hiện tốt hơn về mặt hình học so với WGS84?
RickyA

Postgis hỗ trợ mặt phẳng hình cầu khi sử dụng loại địa lý thay vì hình học. postgis.refraction.net/docs/ trên
nickves

1
@nickves vâng tôi đã thấy điều đó, nhưng postgis thực sự không đủ nhanh đối với tôi. Tôi cần độ trễ ít hơn 2ms và có thể xử lý 1000 yêu cầu mỗi giây. Tôi có thể đảo ngược các giải pháp của kỹ sư postgis mặc dù :)
RickyA
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.