我有一个用户架构(mongoose),其中包含字段' location' - 它由[经度,纬度]数组组成
现在,我希望使用地理空间服务查询数据库,以便找到从user1到user2的距离
我该怎么做?
答案 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
的信息