本文介绍了使用$ near和2d索引的Mongo地理定位不准确的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经编写了一个应用程序,用于查找本地机构并通过RESTful API提供它们。我的堆栈是:express,express-resource和mongoose。以下是我的模型示例:

  var PlaceSchema = new mongoose.Schema(
{
name :{
type:String,
required:true
},
geolocation:{
lat:Number,
lng:Number
} ,
地址:{
类型:字符串
}
}
);
PlaceSchema.index({
geolocation:'2d'
});

我已经检查了几次,我的lon / lat值正确地存储在数据库中,所以没有任何数据错误。然后我运行查询来获取具有特定查询值的数据:

  mongoose.connection.db.executeDbCommand(
{
geoNear:'places',
near:[
parseFloat(req .body.lat),
parseFloat(req.body.lng)
],
num:limit,
query:{
//一些额外的查询,它们是
//不影响地理结果
},
spherical:true,
distanceMultiplier:6371,//将结果转换为km
maxDistance:distance / 6371 ,
},
函数(err,result)
{
res.send(200,{
status:true,
data:theatres
});
}
);

结果有几个问题返回:a)km中的计算结果为真的错误。在大多数情况下,有6-7公里的差异,但它有所不同,b)距离更近的地方比其他地方显得更远。

我使用直接猫鼬查询因为它会返回计算的距离(我需要API返回)。切换到mongoose查找方法显然不会让我获得访问这些数据。



想知道我的索引可能是错的吗?它应该是2dsphere吗?在这方面的文档有点混乱,但我看到的大多数示例仅使用2d。



非常感谢!

解决方案

无论您在MongoDB中使用哪种类型的地理空间索引,都必须先存储经度,然后再存储纬度。

从以及文档中的多个其他位置:

这篇关于使用$ near和2d索引的Mongo地理定位不准确的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 10:38