我在我的节点js应用程序中使用mongoose驱动程序。
我尝试使用geoNear
功能,如下所示:
Hike.geoNear( point, { spherical : true }, function(err, results, stats) {
if (err) {
console.log(err);
callback(false);
} else {
console.log('Here');
console.log(results);
callback(results);
}
});
由于某些未知原因,我的距离非常短:0.0009827867330778472
与直接在mongo(没有Mongoose)的相同查询相比:6268.312062243817
任何想法为什么Mongoose会改变结果?
答案 0 :(得分:1)
以弧度为单位返回距离,您需要根据球体的半径将其转换为距离测量值。
地球半径为6371公里(3959英里)。我过去曾使用过这个辅助函数:
var theEarth = (function(){
var earthRadius = 6371; // km, miles is 3959
var getDistanceFromRads = function(rads) {
return parseFloat(rads * earthRadius);
};
var getRadsFromDistance = function(distance) {
return parseFloat(distance / earthRadius);
};
return {
getDistanceFromRads : getDistanceFromRads,
getRadsFromDistance : getRadsFromDistance
};
})();
鉴于您需要对返回的每个结果进行更改,您可能希望循环遍历它们并在代码中的某个点转换距离。例如:
Hike.geoNear( point, { spherical : true }, function(err, results, stats) {
if (err) {
console.log(err);
callback(false);
} else {
console.log('Here');
results.forEach(function(doc) {
doc.distance: theEarth.getDistanceFromRads(doc.dis)
});
console.log(results);
callback(results);
}
});