繁体   English   中英

如何使用mongoDB和mongoose计算2个用户之间的距离

[英]How to calculate distance between 2 users using mongoDB and mongoose

我有一个用户模式(猫鼬),其字段为“位置”-它由[经度,纬度]数组组成

现在,我希望使用地理空间服务查询数据库,以查找从user1到user2的距离

我怎么做?

这应该让您开始

您需要在架构中定义一个属性:

'location' : {
    type: { type: String },
    coordinates: []
},

并将属性索引为2dsphere

yourSchema.index({'location' : "2dsphere"})

比您可以执行以下操作:

//Model.geoNear(GeoJSON, options, [callback]) need a GeoJSON point to search in radius
    var point = { type : "Point", coordinates : [data.coordinates.long, data.coordinates.lat] };
        YourModel.geoNear(point, { maxDistance : data.distance /coordinatesUtils.earthRadius, spherical : true }, function(err, results, stats) {
            res.status(200);
            res.json(results);
        });

但是有几件事要注意:

为了使球形查询运算符正常运行,必须将距离转换为弧度,并将弧度转换为应用程序使用的距离单位。

转换:距离到弧度:将距离除以球体(例如地球)的半径,以与距离测量相同的单位。

弧度到距离:将弧度乘以要转换距离的单位制中球体(例如地球)的半径。

地球半径约为3959英里(6371公里)。

这里取

猫鼬中有一个错误 ,该错误将GeoJSON中的坐标剥离,并将它们像旧对一样发送到mongo,这导致近距离运算以弧度而不是米为单位。

现在可能已修复,但我不确定。

您还可以在猫鼬api网站中阅读geoNear的文档

您可以在此处阅读有关GeoJson的信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM