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

时间:2015-08-28 14:40:59

标签: node.js mongodb mongoose geospatial

我有一个用户架构(mongoose),其中包含字段' location' - 它由[经度,纬度]数组组成

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

我该怎么做?

1 个答案:

答案 0 :(得分:2)

这应该让你入门

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

'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);
        });

但有几点需要注意:

  

要使球形查询运算符正常运行,必须进行转换   到弧度的距离,从弧度转换到距离单位   由您的应用程序使用。

     

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

     

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

     

地球半径约为3,959英里或6,371英里   公里。

取自here

mongoose中有一个bug从GeoJSON中剥离坐标,并像传统对一样将它们发送到mongo,这会导致近距离操作以弧度而不是米为单位。

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

您还可以在文档中阅读geoNear in mongoose api site

您可以阅读有关GeoJson here

的信息