2010-08-12 17 views
5

Tôi đang sử dụng MongoDB không gian địa lý truy vấn - $near, geoNear, vv - và tôi muốn biết làm thế nào để biến dis kết quả của lệnh geoNear cũng như radius Lập luận cho $within truy vấn đến/từ các đơn vị có thể đọc được như dặm hoặc km.MongoDB geo từ xa/bán kính cho các đơn vị hữu ích

+0

Dường như có câu trả lời tốt hơn nhiều so với câu trả lời chính xác. Liệu có thể thay đổi nó không? – JohnAllen

Trả lời

4

nếu dữ liệu của bạn ở tọa độ địa lý (ví dụ: 30.47921 N -121.45724 W) thì bạn cần chuyển đổi phép chiếu cơ bản với đơn vị bạn muốn (chọn phép chiếu giữ khoảng cách) hoặc bạn cần chuyển đổi khoảng cách trong tọa độ thành một cái gì đó giống như dặm.

Sử dụng công thức để tính toán Haversine http://www.movable-type.co.uk/scripts/latlong.html

+0

Cảm ơn câu trả lời của bạn! Dữ liệu của tôi thực sự là vĩ độ/kinh độ và tôi có thể sử dụng công thức Haversine để tính toán khoảng cách giữa kết quả và điểm xuất phát bằng cách cắm cả hai tập hợp các điểm vĩ độ/kinh độ, nhưng tôi vẫn không chắc chắn phải làm gì với 'dis' và 'radius'. Bạn có thể làm rõ những gì bạn có nghĩa là "chuyển đổi chiếu cơ bản của bạn"? Có vẻ như nó có thể đơn giản hơn để chuyển đổi 'dis' hơn là cắm cả hai tập lat/lon, phải không? Tôi có cần phải sắp xếp lại công thức Haversine để đáp ứng nhu cầu của tôi ở đây không? Nếu có, biến nào trong phương trình có thể là 'dis'/'radius' cắm vào? –

+1

Xin chào Chris, tôi đã có một câu hỏi tương tự (http://stackoverflow.com/questions/3878702/mongodb-bound-queries-how-do-i-convert-mile-to-radian). Nếu các bạn không phiền, bạn có thể giải thích chi tiết hơn về giải pháp không? Bạn có phải sử dụng map/reduce không? Cảm ơn một lần nữa! – Abe

+0

Nếu bạn đang sử dụng Mongo> 1.8, bạn có thể sử dụng mô hình hình cầu: http://www.mongodb.org/display/DOCS/Geospatial+Indexing#GeospatialIndexing-TheEarthisRoundbutMapsareFlat – TheSteve0

20

Sử dụng lệnh geoNear cho một giá trị dis bằng km thêm tham số:

distanceMultiplier: (6371 * Math::PI/180.0) 
1

Lưu ý nếu bạn đang sử dụng phiên bản MongoDB 2.6.0 có được một lỗi luôn kích hoạt hành vi mới cho các hệ tọa độ hình cầu để trả về khoảng cách tính bằng mét (dựa trên tọa độ WGS84).

Tài liệu nêu rõ rằng tham số $near trong tọa độ cũ hơn là GeoJSON vẫn phải trả lại radian. Điều này đã được sửa trong các phiên bản mới hơn.

Báo cáo lỗi: Bug #13540

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