db.users.insert({ “如first_name”: “亚历克斯”, “温度”: “ossington-邓达斯”, “LOC”:{ “LAT”:43.64911870668915, “LON”: - 79.42063808441162}}) db.users.insert({ “如first_name”: “石楠”, “温度”: “奥里利亚”, “LOC”:{ “LAT”:44.610634506093, “LON”: - 79.44514274597168}}) db.users.insert({“first_name”:“lindsay”,“temp”:“404-davis dr。”,“loc”:{“lat”:44.06834703351985,“lon”: - 79.4205093383789}}) db.users.insert({ “如first_name”: “蛱蝶”, “温度”: “巴瑟斯特-劳伦斯”, “LOC”:{ “LAT”:43.71925681186761, “LON”: - 79.42960739135742}}) db.users.insert({ “如first_name”: “沙龙”, “温度”: “央登打士”, “LOC”:{ “LAT”:43.65477003252322, “LON”: - 79.388108253479}}) db.users.insert({ “如first_name”: “约翰”, “温度”: “央登打士”, “LOC”:{ “LAT”:43.65477003252322, “LON”: - 79.388108253479}})
db.users.ensureIndex({LOC: “2D”})
db.users2.find({“loc”:{$ near:[43.65477003252322,-79.388108253479]}})。pretty()
现在,我想在这些查询上设置最大距离为10英里(最好是公里)。所以查询应该如下所示:
db.users.find({“loc”:{$ near:[43.65477003252322,-79.388108253479],$ maxDistance:10/3959}});
但是maxdistance无法正常工作。什么似乎是问题?还有一些我应该使用的更有效的东西吗?喜欢$ centerSphere谢谢!
答案 0 :(得分:1)
您正在划分为弧度,这是来自传统坐标对的返回测量值不正确。转换时的除数应为3963.2英里或6378.1英里。如果您刚开始将数据作为GeoJSON插入,那么测量总是以米为单位返回。
但是你的主要问题是你的坐标是错误的方式"。订单是"经度"那么"纬度",所以你需要:
{ "$near": [ -79.388108253479, 43.65477003252322 ], "$maxDistance": 10/3963.2 }
再说一遍,如果你首先使用了GeoJSON,那么你就不会有这样的混乱,因为订单被强迫"不像你使用" lat"和" lon"传统配对中的关键。
更不用说测量"地球仪上的距离了#34;对于地球,那么你应该使用$nearSphere
来正确补偿。