2010-10-07 20 views
16

Tôi có một tập hợp các cửa hàng có chỉ mục địa không gian trên vị trí thích hợp.MongoDB Bound Queries: Làm cách nào để chuyển đổi dặm thành radian?

Điều tôi đang cố gắng thực hiện được cho vĩ độ, vĩ độ và bán kính tìm kiếm (mi) của người dùng, tôi muốn trả về danh sách các cửa hàng nằm trong các thông số đó.

Tôi đã xem ví dụ sau trên tài liệu MongoDB (http://www.mongodb.org/display/DOCS/Geospatial+Indexing), nhưng có vẻ như khoảng cách bằng radian.

center = [50, 50] 
radius = 10 
db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}}) 

Vì vậy, công thức để chuyển đổi dặm để radian là gì?

Giải pháp Những người tuyệt vời tại Mongodb-người dùng đã giúp tôi tìm câu trả lời. Về cơ bản, những gì tôi đã thực sự tìm kiếm là một cách để hạn chế khoảng cách.

mỗi, tài liệu được cập nhật, có một tham số thứ 3 đến $ gần truy vấn: Bạn cũng có thể sử dụng $ gần với khoảng cách tối đa

db.places.find({ loc : { $near : [50,50] , $maxDistance : 5 } }).limit(20) 

Giá trị với $ maxDistance là trong radian; như vậy, tôi đã phải mất khoảng cách của tôi trong dặm và chia nó bằng 69.

Cảm ơn bạn!

+0

tôi đã có thể tìm thấy câu trả lời của tôi bằng cách đăng câu hỏi của tôi trên mongdb người dùng Google Group (http://groups.google.com/group/mongodb-user/browse_thread/thread/d37c781bbfff5f08). – Abe

+4

Lưu ý: chia cho 69 là một sự chuyển đổi thô từ dặm để * độ *, không radian. Độ chính xác ở đây vì đây là truy vấn ol ''$ gần' đơn giản (có nghĩa là' $ maxDistance' phải nằm trong cùng đơn vị với toạ độ), không phải là truy vấn hình cầu (mà * do * yêu cầu '$ maxDistance' bằng radian). –

Trả lời

15

Là tài liệu nói:

Tất cả các khoảng cách đều sử dụng radian. Điều này cho phép bạn dễ dàng nhân với bán kính của trái đất (khoảng 6371 km hoặc 3959 dặm) để có được những khoảng cách trong sự lựa chọn của bạn của các đơn vị. Ngược lại, chia cho bán kính của trái đất khi thực hiện truy vấn.

để bạn đơn giản cần phải chia bán kính của bạn theo bán kính trái đất. trong ví dụ của bạn nó sẽ là:

radius = 10/3959
+0

Xin lỗi, tôi không nghĩ vậy. Tôi không nhận được kết quả và khi tôi chạy tương đương trong SQL Server tôi nhận được kết quả – Abe

+0

Phiên bản MongoDb nào bạn sử dụng? – walla

+0

Tôi đang sử dụng phiên bản 1.6.3 cho Windows 64 bit – Abe

Các vấn đề liên quan